scm.GIT.IsValidRevision: Only return True if the given object is a commit

BUG=383476

Review URL: https://codereview.chromium.org/329823002

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@276487 0039d316-1c4b-4281-b951-d872f2087c98
changes/01/332501/1
borenet@google.com 11 years ago
parent cc69dfbcf9
commit 565b1780c6

@ -491,12 +491,15 @@ class GIT(object):
sha = GIT.Capture(['rev-parse', lookup_rev], cwd=cwd).lower()
if lookup_rev != rev:
# Make sure we get the original 40 chars back.
return rev.lower() == sha
if rev.lower() != sha:
return False
if sha_only:
return sha.startswith(rev.lower())
return True
if not sha.startswith(rev.lower()):
return False
except subprocess2.CalledProcessError:
return False
obj_type = GIT.Capture(['cat-file', '-t', rev], cwd=cwd).strip()
return obj_type == 'commit'
@classmethod
def AssertVersion(cls, min_version):

@ -8,6 +8,7 @@
import logging
import os
import sys
import tempfile
import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
@ -141,6 +142,17 @@ class RealGitTest(fake_repos.FakeReposTestBase):
self.assertTrue(scm.GIT.IsValidRevision(cwd=self.clone_dir, rev=first_rev))
self.assertTrue(scm.GIT.IsValidRevision(cwd=self.clone_dir, rev='HEAD'))
# Verify that IsValidRevision returns False for non-commit objects.
tmp = tempfile.NamedTemporaryFile(delete=False)
try:
tmp.write('This is not a commit')
tmp.close()
hashval = scm.GIT.Capture(['hash-object', '-w', tmp.name],
cwd=self.clone_dir)
finally:
os.remove(tmp.name)
self.assertFalse(scm.GIT.IsValidRevision(cwd=self.clone_dir, rev=hashval))
class RealGitSvnTest(fake_repos.FakeReposTestBase):
def setUp(self):

Loading…
Cancel
Save