Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(446)

Unified Diff: scm.py

Issue 18262002: Misc gclient cleanup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Improve IsValidRevision logic Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gclient_scm.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: scm.py
diff --git a/scm.py b/scm.py
index 7293f83348c2ffd7902492aa5e815c386f897e78..d0ae572c93c9bffc6a9b268c19cbf58e041c318f 100644
--- a/scm.py
+++ b/scm.py
@@ -100,7 +100,7 @@ class GIT(object):
def Capture(args, cwd, **kwargs):
return subprocess2.check_output(
['git', '--no-pager'] + args,
- cwd=cwd, stderr=subprocess2.PIPE, **kwargs)
+ cwd=cwd, stderr=subprocess2.PIPE, **kwargs).strip()
@staticmethod
def CaptureStatus(files, cwd, upstream_branch):
@@ -121,7 +121,7 @@ class GIT(object):
command.append(files)
else:
command.extend(files)
- status = GIT.Capture(command, cwd).rstrip()
+ status = GIT.Capture(command, cwd)
results = []
if status:
for statusline in status.splitlines():
@@ -142,7 +142,7 @@ class GIT(object):
# 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.
try:
- return GIT.Capture(['config', 'user.email'], cwd=cwd).strip()
+ return GIT.Capture(['config', 'user.email'], cwd=cwd)
except subprocess2.CalledProcessError:
return ''
@@ -154,7 +154,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=cwd).strip()
+ return GIT.Capture(['symbolic-ref', 'HEAD'], cwd=cwd)
@staticmethod
def GetBranch(cwd):
@@ -166,7 +166,8 @@ 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=cwd)
+ GIT.Capture(['config', '--local', '--get-regexp', r'^svn-remote\.'],
+ cwd=cwd)
return True
except subprocess2.CalledProcessError:
return False
@@ -240,7 +241,7 @@ class GIT(object):
if url:
svn_remote_re = re.compile(r'^svn-remote\.([^.]+)\.url (.*)$')
remotes = GIT.Capture(
- ['config', '--get-regexp', r'^svn-remote\..*\.url'],
+ ['config', '--local', '--get-regexp', r'^svn-remote\..*\.url'],
cwd=cwd).splitlines()
for remote in remotes:
match = svn_remote_re.match(remote)
@@ -249,8 +250,8 @@ class GIT(object):
base_url = match.group(2)
try:
fetch_spec = GIT.Capture(
- ['config', 'svn-remote.%s.fetch' % remote],
- cwd=cwd).strip()
+ ['config', '--local', 'svn-remote.%s.fetch' % remote],
+ cwd=cwd)
branch = GIT.MatchSvnGlob(url, base_url, fetch_spec, False)
except subprocess2.CalledProcessError:
branch = None
@@ -258,8 +259,8 @@ class GIT(object):
return branch
try:
branch_spec = GIT.Capture(
- ['config', 'svn-remote.%s.branches' % remote],
- cwd=cwd).strip()
+ ['config', '--local', 'svn-remote.%s.branches' % remote],
+ cwd=cwd)
branch = GIT.MatchSvnGlob(url, base_url, branch_spec, True)
except subprocess2.CalledProcessError:
branch = None
@@ -267,8 +268,8 @@ class GIT(object):
return branch
try:
tag_spec = GIT.Capture(
- ['config', 'svn-remote.%s.tags' % remote],
- cwd=cwd).strip()
+ ['config', '--local', 'svn-remote.%s.tags' % remote],
+ cwd=cwd)
branch = GIT.MatchSvnGlob(url, base_url, tag_spec, True)
except subprocess2.CalledProcessError:
branch = None
@@ -285,25 +286,25 @@ class GIT(object):
branch = GIT.GetBranch(cwd)
try:
upstream_branch = GIT.Capture(
- ['config', 'branch.%s.merge' % branch], cwd=cwd).strip()
+ ['config', '--local', 'branch.%s.merge' % branch], cwd=cwd)
except subprocess2.CalledProcessError:
upstream_branch = None
if upstream_branch:
try:
remote = GIT.Capture(
- ['config', 'branch.%s.remote' % branch], cwd=cwd).strip()
+ ['config', '--local', 'branch.%s.remote' % branch], cwd=cwd)
except subprocess2.CalledProcessError:
pass
else:
try:
upstream_branch = GIT.Capture(
- ['config', 'rietveld.upstream-branch'], cwd=cwd).strip()
+ ['config', '--local', 'rietveld.upstream-branch'], cwd=cwd)
except subprocess2.CalledProcessError:
upstream_branch = None
if upstream_branch:
try:
remote = GIT.Capture(
- ['config', 'rietveld.upstream-remote'], cwd=cwd).strip()
+ ['config', '--local', 'rietveld.upstream-remote'], cwd=cwd)
except subprocess2.CalledProcessError:
pass
else:
@@ -374,14 +375,14 @@ class GIT(object):
@staticmethod
def GetPatchName(cwd):
"""Constructs a name for this patch."""
- short_sha = GIT.Capture(['rev-parse', '--short=4', 'HEAD'], cwd=cwd).strip()
+ short_sha = GIT.Capture(['rev-parse', '--short=4', 'HEAD'], cwd=cwd)
return "%s#%s" % (GIT.GetBranch(cwd), short_sha)
@staticmethod
def GetCheckoutRoot(cwd):
"""Returns the top level directory of a git checkout as an absolute path.
"""
- root = GIT.Capture(['rev-parse', '--show-cdup'], cwd=cwd).strip()
+ root = GIT.Capture(['rev-parse', '--show-cdup'], cwd=cwd)
return os.path.abspath(os.path.join(cwd, root))
@staticmethod
@@ -440,16 +441,25 @@ class GIT(object):
return None
@staticmethod
- def IsValidRevision(cwd, rev):
- """Verifies the revision is a proper git revision."""
+ def IsValidRevision(cwd, rev, sha_only=False):
+ """Verifies the revision is a proper git revision.
+
+ sha_only: Fail unless rev is a sha hash.
+ """
# 'git rev-parse foo' where foo is *any* 40 character hex string will return
# the string and return code 0. So strip one character to force 'git
# rev-parse' to do a hash table look-up and returns 128 if the hash is not
# present.
+ lookup_rev = rev
if re.match(r'^[0-9a-fA-F]{40}$', rev):
- rev = rev[:-1]
+ lookup_rev = rev[:-1]
try:
- GIT.Capture(['rev-parse', rev], cwd=cwd)
+ sha = GIT.Capture(['rev-parse', lookup_rev], cwd=cwd)
+ if lookup_rev != rev:
+ # Make sure we get the original 40 chars back.
+ return rev == sha
M-A Ruel 2013/07/08 18:44:41 what about lower/upper case? return rev.lower() ==
Isaac (away) 2013/07/08 20:03:34 Good point. It looks like git always returns lowe
+ if sha_only:
+ return sha.startswith(rev)
M-A Ruel 2013/07/08 18:44:41 sha.lower().startswith(rev.lower())
return True
except subprocess2.CalledProcessError:
return False
« no previous file with comments | « gclient_scm.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698