| Index: scm.py
|
| diff --git a/scm.py b/scm.py
|
| index fadf7f3bedc46c623490ca974cc57538453945dc..5b2c8eafa10277241d8fd41eeb54db3bfbff8c77 100644
|
| --- a/scm.py
|
| +++ b/scm.py
|
| @@ -66,22 +66,9 @@ def GenFakeDiff(filename):
|
|
|
| class GIT(object):
|
| @staticmethod
|
| - def Capture(args, in_directory=None, print_error=True, error_ok=False):
|
| - """Runs git, capturing output sent to stdout as a string.
|
| -
|
| - Args:
|
| - args: A sequence of command line parameters to be passed to git.
|
| - in_directory: The directory where git is to be run.
|
| -
|
| - Returns:
|
| - The output sent to stdout as a string.
|
| - """
|
| - try:
|
| - return gclient_utils.CheckCall(['git'] + args, in_directory, print_error)
|
| - except gclient_utils.CheckCallError:
|
| - if error_ok:
|
| - return ('', '')
|
| - raise
|
| + def Capture(args, **kwargs):
|
| + return gclient_utils.CheckCall(['git'] + args, print_error=False,
|
| + **kwargs)[0]
|
|
|
| @staticmethod
|
| def CaptureStatus(files, upstream_branch=None):
|
| @@ -93,32 +80,34 @@ class GIT(object):
|
| if upstream_branch is None:
|
| upstream_branch = GIT.GetUpstreamBranch(os.getcwd())
|
| if upstream_branch is None:
|
| - raise Exception("Cannot determine upstream branch")
|
| - command = ["diff", "--name-status", "-r", "%s..." % upstream_branch]
|
| + raise gclient_utils.Error('Cannot determine upstream branch')
|
| + command = ['diff', '--name-status', '-r', '%s...' % upstream_branch]
|
| if not files:
|
| pass
|
| elif isinstance(files, basestring):
|
| command.append(files)
|
| else:
|
| command.extend(files)
|
| -
|
| - status = GIT.Capture(command)[0].rstrip()
|
| + status = GIT.Capture(command).rstrip()
|
| results = []
|
| if status:
|
| - for statusline in status.split('\n'):
|
| + for statusline in status.splitlines():
|
| m = re.match('^(\w)\t(.+)$', statusline)
|
| if not m:
|
| - raise Exception("status currently unsupported: %s" % statusline)
|
| + raise gclient_utils.Error(
|
| + 'status currently unsupported: %s' % statusline)
|
| results.append(('%s ' % m.group(1), m.group(2)))
|
| return results
|
|
|
| @staticmethod
|
| - def GetEmail(repo_root):
|
| + def GetEmail(cwd):
|
| """Retrieves the user email address if known."""
|
| # We could want to look at the svn cred when it has a svn remote but it
|
| # should be fine for now, users should simply configure their git settings.
|
| - return GIT.Capture(['config', 'user.email'],
|
| - repo_root, error_ok=True)[0].strip()
|
| + try:
|
| + return GIT.Capture(['config', 'user.email'], cwd=cwd).strip()
|
| + except gclient_utils.CheckCallError:
|
| + return ''
|
|
|
| @staticmethod
|
| def ShortBranchName(branch):
|
| @@ -128,7 +117,7 @@ class GIT(object):
|
| @staticmethod
|
| def GetBranchRef(cwd):
|
| """Returns the full branch reference, e.g. 'refs/heads/master'."""
|
| - return GIT.Capture(['symbolic-ref', 'HEAD'], cwd)[0].strip()
|
| + return GIT.Capture(['symbolic-ref', 'HEAD'], cwd=cwd).strip()
|
|
|
| @staticmethod
|
| def GetBranch(cwd):
|
| @@ -140,7 +129,7 @@ class GIT(object):
|
| """Returns true if this repo looks like it's using git-svn."""
|
| # If you have any "svn-remote.*" config keys, we think you're using svn.
|
| try:
|
| - GIT.Capture(['config', '--get-regexp', r'^svn-remote\.'], cwd)
|
| + GIT.Capture(['config', '--get-regexp', r'^svn-remote\.'], cwd=cwd)
|
| return True
|
| except gclient_utils.CheckCallError:
|
| return False
|
| @@ -159,11 +148,11 @@ class GIT(object):
|
| # Get the refname and svn url for all refs/remotes/*.
|
| remotes = GIT.Capture(
|
| ['for-each-ref', '--format=%(refname)', 'refs/remotes'],
|
| - cwd)[0].splitlines()
|
| + cwd=cwd).splitlines()
|
| svn_refs = {}
|
| for ref in remotes:
|
| match = git_svn_re.search(
|
| - GIT.Capture(['cat-file', '-p', ref], cwd)[0])
|
| + GIT.Capture(['cat-file', '-p', ref], cwd=cwd))
|
| # Prefer origin/HEAD over all others.
|
| if match and (match.group(1) not in svn_refs or
|
| ref == "refs/remotes/origin/HEAD"):
|
| @@ -198,22 +187,24 @@ class GIT(object):
|
| """
|
| remote = '.'
|
| branch = GIT.GetBranch(cwd)
|
| - upstream_branch = None
|
| - upstream_branch = GIT.Capture(
|
| - ['config', 'branch.%s.merge' % branch], in_directory=cwd,
|
| - error_ok=True)[0].strip()
|
| + try:
|
| + upstream_branch = GIT.Capture(
|
| + ['config', 'branch.%s.merge' % branch], cwd=cwd).strip()
|
| + except gclient_utils.Error:
|
| + upstream_branch = None
|
| if upstream_branch:
|
| - remote = GIT.Capture(
|
| - ['config', 'branch.%s.remote' % branch],
|
| - in_directory=cwd, error_ok=True)[0].strip()
|
| + try:
|
| + remote = GIT.Capture(
|
| + ['config', 'branch.%s.remote' % branch], cwd=cwd).strip()
|
| + except gclient_utils.Error:
|
| + pass
|
| else:
|
| # Fall back on trying a git-svn upstream branch.
|
| if GIT.IsGitSvn(cwd):
|
| upstream_branch = GIT.GetSVNBranch(cwd)
|
| else:
|
| # Else, try to guess the origin remote.
|
| - remote_branches = GIT.Capture(
|
| - ['branch', '-r'], in_directory=cwd)[0].split()
|
| + remote_branches = GIT.Capture(['branch', '-r'], cwd=cwd).split()
|
| if 'origin/master' in remote_branches:
|
| # Fall back on origin/master if it exits.
|
| remote = 'origin'
|
| @@ -254,7 +245,7 @@ class GIT(object):
|
| if files:
|
| command.append('--')
|
| command.extend(files)
|
| - diff = GIT.Capture(command, cwd)[0].splitlines(True)
|
| + diff = GIT.Capture(command, cwd=cwd).splitlines(True)
|
| for i in range(len(diff)):
|
| # In the case of added files, replace /dev/null with the path to the
|
| # file being added.
|
| @@ -268,20 +259,20 @@ class GIT(object):
|
| if not branch:
|
| branch = GIT.GetUpstreamBranch(cwd)
|
| command = ['diff', '--name-only', branch + "..." + branch_head]
|
| - return GIT.Capture(command, cwd)[0].splitlines(False)
|
| + return GIT.Capture(command, cwd=cwd).splitlines(False)
|
|
|
| @staticmethod
|
| def GetPatchName(cwd):
|
| """Constructs a name for this patch."""
|
| - short_sha = GIT.Capture(['rev-parse', '--short=4', 'HEAD'], cwd)[0].strip()
|
| + short_sha = GIT.Capture(['rev-parse', '--short=4', 'HEAD'], cwd=cwd).strip()
|
| return "%s#%s" % (GIT.GetBranch(cwd), short_sha)
|
|
|
| @staticmethod
|
| - def GetCheckoutRoot(path):
|
| + def GetCheckoutRoot(cwd):
|
| """Returns the top level directory of a git checkout as an absolute path.
|
| """
|
| - root = GIT.Capture(['rev-parse', '--show-cdup'], path)[0].strip()
|
| - return os.path.abspath(os.path.join(path, root))
|
| + root = GIT.Capture(['rev-parse', '--show-cdup'], cwd=cwd).strip()
|
| + return os.path.abspath(os.path.join(cwd, root))
|
|
|
| @staticmethod
|
| def AssertVersion(min_version):
|
| @@ -291,7 +282,7 @@ class GIT(object):
|
| return int(val)
|
| else:
|
| return 0
|
| - current_version = GIT.Capture(['--version'])[0].split()[-1]
|
| + current_version = GIT.Capture(['--version']).split()[-1]
|
| current_version_list = map(only_int, current_version.split('.'))
|
| for min_ver in map(int, min_version.split('.')):
|
| ver = current_version_list.pop(0)
|
|
|