From c51def3ff462bf7a5c89b89a73c2b15032492ea2 Mon Sep 17 00:00:00 2001 From: "szager@chromium.org" Date: Mon, 15 Oct 2012 18:50:37 +0000 Subject: [PATCH] Restore previous behavior of GetSha1ForSvnRev, so unit tests pass. Review URL: https://chromiumcodereview.appspot.com/11148019 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@161909 0039d316-1c4b-4281-b951-d872f2087c98 --- gclient_scm.py | 3 ++- scm.py | 21 +++++++++++++++++---- tests/gclient_scm_test.py | 7 ++++--- tests/scm_unittest.py | 1 + 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/gclient_scm.py b/gclient_scm.py index bcd9d11da..ef93e5699 100644 --- a/gclient_scm.py +++ b/gclient_scm.py @@ -590,7 +590,8 @@ class GitWrapper(SCMWrapper): print('Running git svn fetch. This might take a while.\n') scm.GIT.Capture(['svn', 'fetch'], cwd=self.checkout_path) try: - sha1 = scm.GIT.GetSha1ForSvnRev(cwd=self.checkout_path, rev=rev) + sha1 = scm.GIT.GetBlessedSha1ForSvnRev( + cwd=self.checkout_path, rev=rev) except gclient_utils.Error, e: sha1 = e.message print('\nWarning: Could not find a git revision with accurate\n' diff --git a/scm.py b/scm.py index 77a62994e..367a1cd29 100644 --- a/scm.py +++ b/scm.py @@ -402,10 +402,23 @@ class GIT(object): if not GIT.IsGitSvn(cwd=cwd): return None try: - git_svn_rev = GIT.Capture( - ['svn', 'find-rev', 'r' + str(rev)], cwd=cwd).rstrip() - if not git_svn_rev: - return None + output = GIT.Capture(['svn', 'find-rev', 'r' + str(rev)], cwd=cwd) + return GIT.ParseGitSvnSha1(output) + except subprocess2.CalledProcessError: + return None + + @staticmethod + def GetBlessedSha1ForSvnRev(cwd, rev): + """Returns a git commit hash from the master branch history that has + accurate .DEPS.git and git submodules. To understand why this is more + complicated than a simple call to `git svn find-rev`, refer to: + + http://www.chromium.org/developers/how-tos/git-repo + """ + git_svn_rev = GIT.GetSha1ForSvnRev(cwd, rev) + if not git_svn_rev: + return None + try: output = GIT.Capture( ['rev-list', '--ancestry-path', '--reverse', '--grep', 'SVN changes up to revision [0-9]*', diff --git a/tests/gclient_scm_test.py b/tests/gclient_scm_test.py index f8a618ff1..85a4a6a68 100755 --- a/tests/gclient_scm_test.py +++ b/tests/gclient_scm_test.py @@ -1096,11 +1096,12 @@ class ManagedGitWrapperTestCaseMox(BaseTestCase): gclient_scm.scm.GIT.GetGitSvnHeadRev(cwd=self.base_path).MultipleTimes( ).AndReturn(2) - self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'GetSha1ForSvnRev', True) + self.mox.StubOutWithMock( + gclient_scm.scm.GIT, 'GetBlessedSha1ForSvnRev', True) # r1 -> first fake hash, r3 -> second fake hash. - gclient_scm.scm.GIT.GetSha1ForSvnRev(cwd=self.base_path, rev='1' + gclient_scm.scm.GIT.GetBlessedSha1ForSvnRev(cwd=self.base_path, rev='1' ).AndReturn(self.fake_hash_1) - gclient_scm.scm.GIT.GetSha1ForSvnRev(cwd=self.base_path, rev='3' + gclient_scm.scm.GIT.GetBlessedSha1ForSvnRev(cwd=self.base_path, rev='3' ).MultipleTimes().AndReturn(self.fake_hash_2) # Ensure that we call git svn fetch if our LKGR is > the git-svn HEAD rev. diff --git a/tests/scm_unittest.py b/tests/scm_unittest.py index ca50790be..930812619 100755 --- a/tests/scm_unittest.py +++ b/tests/scm_unittest.py @@ -79,6 +79,7 @@ class GitWrapperTestCase(BaseSCMTestCase): 'current_version', 'FetchUpstreamTuple', 'GenerateDiff', + 'GetBlessedSha1ForSvnRev', 'GetBranch', 'GetBranchRef', 'GetCheckoutRoot',