| Index: scm.py
 | 
| diff --git a/scm.py b/scm.py
 | 
| index 1365b0b404abf92ed1fa170adf98e7a8cc6d00fa..697a2ac2d61a4eae682b9688aea8be159b69cbd4 100644
 | 
| --- a/scm.py
 | 
| +++ b/scm.py
 | 
| @@ -9,8 +9,6 @@ import glob
 | 
|  import logging
 | 
|  import os
 | 
|  import re
 | 
| -import shutil
 | 
| -import subprocess
 | 
|  import sys
 | 
|  import tempfile
 | 
|  import time
 | 
| @@ -90,8 +88,8 @@ def determine_scm(root):
 | 
|  class GIT(object):
 | 
|    @staticmethod
 | 
|    def Capture(args, **kwargs):
 | 
| -    return gclient_utils.CheckCall(['git'] + args, print_error=False,
 | 
| -        **kwargs)[0]
 | 
| +    return subprocess2.check_output(
 | 
| +        ['git'] + args, stderr=subprocess2.VOID, **kwargs)
 | 
|  
 | 
|    @staticmethod
 | 
|    def CaptureStatus(files, upstream_branch=None):
 | 
| @@ -133,7 +131,7 @@ class GIT(object):
 | 
|      # should be fine for now, users should simply configure their git settings.
 | 
|      try:
 | 
|        return GIT.Capture(['config', 'user.email'], cwd=cwd).strip()
 | 
| -    except gclient_utils.CheckCallError:
 | 
| +    except subprocess2.CalledProcessError:
 | 
|        return ''
 | 
|  
 | 
|    @staticmethod
 | 
| @@ -158,7 +156,7 @@ class GIT(object):
 | 
|      try:
 | 
|        GIT.Capture(['config', '--get-regexp', r'^svn-remote\.'], cwd=cwd)
 | 
|        return True
 | 
| -    except gclient_utils.CheckCallError:
 | 
| +    except subprocess2.CalledProcessError:
 | 
|        return False
 | 
|  
 | 
|    @staticmethod
 | 
| @@ -218,7 +216,7 @@ class GIT(object):
 | 
|      # pipe at a time.
 | 
|      # The -100 is an arbitrary limit so we don't search forever.
 | 
|      cmd = ['git', 'log', '-100', '--pretty=medium']
 | 
| -    proc = gclient_utils.Popen(cmd, stdout=subprocess.PIPE)
 | 
| +    proc = subprocess2.Popen(cmd, stdout=subprocess2.PIPE)
 | 
|      url = None
 | 
|      for line in proc.stdout:
 | 
|        match = git_svn_re.match(line)
 | 
| @@ -241,7 +239,7 @@ class GIT(object):
 | 
|                  ['config', 'svn-remote.%s.fetch' % remote],
 | 
|                  cwd=cwd).strip()
 | 
|              branch = GIT.MatchSvnGlob(url, base_url, fetch_spec, False)
 | 
| -          except gclient_utils.CheckCallError:
 | 
| +          except subprocess2.CalledProcessError:
 | 
|              branch = None
 | 
|            if branch:
 | 
|              return branch
 | 
| @@ -250,7 +248,7 @@ class GIT(object):
 | 
|                  ['config', 'svn-remote.%s.branches' % remote],
 | 
|                  cwd=cwd).strip()
 | 
|              branch = GIT.MatchSvnGlob(url, base_url, branch_spec, True)
 | 
| -          except gclient_utils.CheckCallError:
 | 
| +          except subprocess2.CalledProcessError:
 | 
|              branch = None
 | 
|            if branch:
 | 
|              return branch
 | 
| @@ -259,7 +257,7 @@ class GIT(object):
 | 
|                  ['config', 'svn-remote.%s.tags' % remote],
 | 
|                  cwd=cwd).strip()
 | 
|              branch = GIT.MatchSvnGlob(url, base_url, tag_spec, True)
 | 
| -          except gclient_utils.CheckCallError:
 | 
| +          except subprocess2.CalledProcessError:
 | 
|              branch = None
 | 
|            if branch:
 | 
|              return branch
 | 
| @@ -275,25 +273,25 @@ class GIT(object):
 | 
|      try:
 | 
|        upstream_branch = GIT.Capture(
 | 
|            ['config', 'branch.%s.merge' % branch], cwd=cwd).strip()
 | 
| -    except (gclient_utils.Error, subprocess2.CalledProcessError):
 | 
| +    except subprocess2.CalledProcessError:
 | 
|        upstream_branch = None
 | 
|      if upstream_branch:
 | 
|        try:
 | 
|          remote = GIT.Capture(
 | 
|              ['config', 'branch.%s.remote' % branch], cwd=cwd).strip()
 | 
| -      except (gclient_utils.Error, subprocess2.CalledProcessError):
 | 
| +      except subprocess2.CalledProcessError:
 | 
|          pass
 | 
|      else:
 | 
|        try:
 | 
|          upstream_branch = GIT.Capture(
 | 
|              ['config', 'rietveld.upstream-branch'], cwd=cwd).strip()
 | 
| -      except (gclient_utils.Error, subprocess2.CalledProcessError):
 | 
| +      except subprocess2.CalledProcessError:
 | 
|          upstream_branch = None
 | 
|        if upstream_branch:
 | 
|          try:
 | 
|            remote = GIT.Capture(
 | 
|                ['config', 'rietveld.upstream-remote'], cwd=cwd).strip()
 | 
| -        except (gclient_utils.Error, subprocess2.CalledProcessError):
 | 
| +        except subprocess2.CalledProcessError:
 | 
|            pass
 | 
|        else:
 | 
|          # Fall back on trying a git-svn upstream branch.
 | 
| @@ -397,9 +395,9 @@ class SVN(object):
 | 
|    def Capture(args, **kwargs):
 | 
|      """Always redirect stderr.
 | 
|  
 | 
| -    Throws an exception if non-0 is returned."""
 | 
| -    return gclient_utils.CheckCall(['svn'] + args, print_error=False,
 | 
| -        **kwargs)[0]
 | 
| +    Throws an exception if non-0 is returned.
 | 
| +    """
 | 
| +    return subprocess2.check_output(['svn'] + args, **kwargs)
 | 
|  
 | 
|    @staticmethod
 | 
|    def RunAndGetFileList(verbose, args, cwd, file_list, stdout=None):
 | 
| @@ -464,7 +462,7 @@ class SVN(object):
 | 
|              always=verbose,
 | 
|              filter_fn=CaptureMatchingLines,
 | 
|              stdout=stdout)
 | 
| -      except (gclient_utils.Error, subprocess2.CalledProcessError):
 | 
| +      except subprocess2.CalledProcessError:
 | 
|          def IsKnownFailure():
 | 
|            for x in failure:
 | 
|              if (x.startswith('svn: OPTIONS of') or
 | 
| @@ -665,7 +663,7 @@ class SVN(object):
 | 
|      """
 | 
|      try:
 | 
|        return SVN.Capture(['propget', property_name, filename])
 | 
| -    except (gclient_utils.Error, subprocess2.CalledProcessError):
 | 
| +    except subprocess2.CalledProcessError:
 | 
|        return ''
 | 
|  
 | 
|    @staticmethod
 | 
| @@ -691,7 +689,7 @@ class SVN(object):
 | 
|                                     bogus_dir,
 | 
|                                     full_move=full_move, revision=revision)
 | 
|      finally:
 | 
| -      shutil.rmtree(bogus_dir)
 | 
| +      gclient_utils.RemoveDirectory(bogus_dir)
 | 
|  
 | 
|    @staticmethod
 | 
|    def _DiffItemInternal(filename, info, bogus_dir, full_move=False,
 | 
| @@ -741,7 +739,7 @@ class SVN(object):
 | 
|          # Normal simple case.
 | 
|          try:
 | 
|            data = SVN.Capture(command)
 | 
| -        except gclient_utils.CheckCallError:
 | 
| +        except subprocess2.CalledProcessError:
 | 
|            if revision:
 | 
|              data = GenFakeDiff(filename)
 | 
|            else:
 | 
| @@ -805,7 +803,7 @@ class SVN(object):
 | 
|              src = srcurl[len(root)+1:]
 | 
|              try:
 | 
|                srcinfo = SVN.CaptureInfo(srcurl)
 | 
| -            except gclient_utils.CheckCallError, e:
 | 
| +            except subprocess2.CalledProcessError, e:
 | 
|                if not 'Not a valid URL' in e.stderr:
 | 
|                  raise
 | 
|                # Assume the file was deleted. No idea how to figure out at which
 | 
| @@ -839,14 +837,14 @@ class SVN(object):
 | 
|        return result
 | 
|      finally:
 | 
|        os.chdir(previous_cwd)
 | 
| -      shutil.rmtree(bogus_dir)
 | 
| +      gclient_utils.RemoveDirectory(bogus_dir)
 | 
|  
 | 
|    @staticmethod
 | 
|    def GetEmail(repo_root):
 | 
|      """Retrieves the svn account which we assume is an email address."""
 | 
|      try:
 | 
|        infos = SVN.CaptureInfo(repo_root)
 | 
| -    except (gclient_utils.Error, subprocess2.CalledProcessError):
 | 
| +    except subprocess2.CalledProcessError:
 | 
|        return None
 | 
|  
 | 
|      # Should check for uuid but it is incorrectly saved for https creds.
 | 
| @@ -908,7 +906,7 @@ class SVN(object):
 | 
|        info = SVN.CaptureInfo(directory)
 | 
|        cur_dir_repo_root = info['Repository Root']
 | 
|        url = info['URL']
 | 
| -    except (gclient_utils.Error, subprocess2.CalledProcessError):
 | 
| +    except subprocess2.CalledProcessError:
 | 
|        return None
 | 
|      while True:
 | 
|        parent = os.path.dirname(directory)
 | 
| @@ -918,7 +916,7 @@ class SVN(object):
 | 
|              info['URL'] != os.path.dirname(url)):
 | 
|            break
 | 
|          url = info['URL']
 | 
| -      except (gclient_utils.Error, subprocess2.CalledProcessError):
 | 
| +      except subprocess2.CalledProcessError:
 | 
|          break
 | 
|        directory = parent
 | 
|      return GetCasedPath(directory)
 | 
| @@ -973,7 +971,7 @@ class SVN(object):
 | 
|            logging.info('os.remove(%s)' % file_path)
 | 
|            os.remove(file_path)
 | 
|          elif os.path.isdir(file_path):
 | 
| -          logging.info('gclient_utils.RemoveDirectory(%s)' % file_path)
 | 
| +          logging.info('RemoveDirectory(%s)' % file_path)
 | 
|            gclient_utils.RemoveDirectory(file_path)
 | 
|          else:
 | 
|            logging.critical(
 | 
| @@ -986,7 +984,7 @@ class SVN(object):
 | 
|          # revert, like for properties.
 | 
|          try:
 | 
|            SVN.Capture(['revert', file_status[1]], cwd=repo_root)
 | 
| -        except gclient_utils.CheckCallError:
 | 
| +        except subprocess2.CalledProcessError:
 | 
|            if not os.path.exists(file_path):
 | 
|              continue
 | 
|            raise
 | 
| 
 |