Index: tests/git_cl_test.py |
diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py |
index 148650497e52b5633738f85d1ae996416ea62a85..73447b47355f8df49226ac9e11bb40dec7ff8d43 100755 |
--- a/tests/git_cl_test.py |
+++ b/tests/git_cl_test.py |
@@ -97,8 +97,8 @@ class TestGitCl(TestCase): |
return (cls._git_base_calls(similarity, find_copies) + |
cls._git_upload_calls()) |
- @staticmethod |
- def _git_base_calls(similarity, find_copies): |
+ @classmethod |
+ def _git_base_calls(cls, similarity, find_copies): |
if similarity is None: |
similarity = '50' |
similarity_call = ((['git', 'config', '--int', '--get', |
@@ -119,10 +119,10 @@ class TestGitCl(TestCase): |
if find_copies: |
stat_call = ((['git', 'diff', '--no-ext-diff', '--stat', |
'--find-copies-harder', '-l100000', '-C'+similarity, |
- 'master...'],), '+dat') |
+ 'fake_ancestor_sha'],), '+dat') |
else: |
stat_call = ((['git', 'diff', '--no-ext-diff', '--stat', |
- '-M'+similarity, 'master...'],), '+dat') |
+ '-M'+similarity, 'fake_ancestor_sha'],), '+dat') |
return [ |
((['git', 'config', 'gerrit.host'],), ''), |
@@ -136,20 +136,24 @@ class TestGitCl(TestCase): |
((['git', 'symbolic-ref', 'HEAD'],), 'master'), |
((['git', 'config', 'branch.master.merge'],), 'master'), |
((['git', 'config', 'branch.master.remote'],), 'origin'), |
+ ((['git', 'merge-base', 'master', 'HEAD'],), 'fake_ancestor_sha'), |
+ ] + cls._git_sanity_checks('fake_ancestor_sha', 'master') + [ |
((['git', 'rev-parse', '--show-cdup'],), ''), |
((['git', 'rev-parse', 'HEAD'],), '12345'), |
- ((['git', 'diff', '--name-status', '-r', 'master...', '.'],), |
+ ((['git', 'diff', '--name-status', '-r', 'fake_ancestor_sha...', '.'],), |
'M\t.gitignore\n'), |
((['git', 'config', 'branch.master.rietveldissue'],), ''), |
((['git', 'config', 'branch.master.rietveldpatchset'],), ''), |
- ((['git', 'log', '--pretty=format:%s%n%n%b', 'master...'],), 'foo'), |
+ ((['git', 'log', '--pretty=format:%s%n%n%b', 'fake_ancestor_sha...'],), |
+ 'foo'), |
((['git', 'config', 'user.email'],), 'me@example.com'), |
stat_call, |
- ((['git', 'log', '--pretty=format:%s\n\n%b', 'master..'],), 'desc\n'), |
+ ((['git', 'log', '--pretty=format:%s\n\n%b', 'fake_ancestor_sha..'],), |
+ 'desc\n'), |
] |
- @staticmethod |
- def _git_upload_calls(): |
+ @classmethod |
+ def _git_upload_calls(cls): |
return [ |
((['git', 'config', 'rietveld.cc'],), ''), |
((['git', 'config', 'branch.master.base-url'],), ''), |
@@ -163,6 +167,25 @@ class TestGitCl(TestCase): |
((['git', 'config', 'branch.master.rietveldpatchset', '2'],), ''), |
] |
+ @staticmethod |
+ def _git_sanity_checks(diff_base, working_branch): |
+ fake_ancestor = 'fake_ancestor' |
+ fake_cl = 'fake_cl_for_patch' |
+ return [ |
+ # Calls to verify branch point is ancestor |
+ ((['git', 'rev-parse', '--verify', diff_base],), fake_ancestor), |
+ ((['git', 'merge-base', fake_ancestor, 'HEAD'],), fake_ancestor), |
+ ((['git', 'rev-list', '^' + fake_ancestor, 'HEAD'],), fake_cl), |
+ # Mock a config miss (error code 1) |
+ ((['git', 'config', 'gitcl.remotebranch'],), (('', None), 1)), |
+ # Call to GetRemoteBranch() |
+ ((['git', 'config', 'branch.%s.merge' % working_branch],), |
+ 'refs/heads/master'), |
+ ((['git', 'config', 'branch.%s.remote' % working_branch],), 'origin'), |
+ ((['git', 'rev-list', '^' + fake_ancestor, |
+ 'refs/remotes/origin/master'],), ''), |
+ ] |
+ |
@classmethod |
def _dcommit_calls_1(cls): |
return [ |
@@ -193,6 +216,8 @@ class TestGitCl(TestCase): |
'3fc18b62c4966193eb435baabe2d18a3810ec82e'), |
((['git', 'rev-list', '^3fc18b62c4966193eb435baabe2d18a3810ec82e', |
'refs/remotes/origin/master'],), ''), |
+ ((['git', 'merge-base', 'refs/remotes/origin/master', 'HEAD'],), |
+ 'fake_ancestor_sha'), |
] |
@classmethod |
@@ -201,7 +226,7 @@ class TestGitCl(TestCase): |
((['git', 'rev-parse', '--show-cdup'],), ''), |
((['git', 'rev-parse', 'HEAD'],), |
'00ff397798ea57439712ed7e04ab96e13969ef40'), |
- ((['git', 'diff', '--name-status', '-r', 'refs/remotes/origin/master...', |
+ ((['git', 'diff', '--name-status', '-r', 'fake_ancestor_sha...', |
'.'],), |
'M\tPRESUBMIT.py'), |
((['git', 'config', 'branch.working.rietveldissue'],), '12345'), |
@@ -227,7 +252,7 @@ class TestGitCl(TestCase): |
def _dcommit_calls_3(cls): |
return [ |
((['git', 'diff', '--no-ext-diff', '--stat', '--find-copies-harder', |
- '-l100000', '-C50', 'refs/remotes/origin/master', |
+ '-l100000', '-C50', 'fake_ancestor_sha', |
'refs/heads/working'],), |
(' PRESUBMIT.py | 2 +-\n' |
' 1 files changed, 1 insertions(+), 1 deletions(-)\n')), |
@@ -240,7 +265,7 @@ class TestGitCl(TestCase): |
'refs/heads/git-cl-cherry-pick'],), ''), |
((['git', 'rev-parse', '--show-cdup'],), '\n'), |
((['git', 'checkout', '-q', '-b', 'git-cl-commit'],), ''), |
- ((['git', 'reset', '--soft', 'refs/remotes/origin/master'],), ''), |
+ ((['git', 'reset', '--soft', 'fake_ancestor_sha'],), ''), |
((['git', 'commit', '-m', |
'Issue: 12345\n\nReview URL: https://codereview.example.com/12345'],), |
''), |
@@ -261,7 +286,7 @@ class TestGitCl(TestCase): |
'--cc', 'joe@example.com', |
'--git_similarity', similarity or '50' |
] + (['--git_no_find_copies'] if find_copies == False else []) + [ |
- 'master...' |
+ 'fake_ancestor_sha' |
] |
def _run_reviewer_test( |
@@ -391,6 +416,7 @@ class TestGitCl(TestCase): |
def test_dcommit(self): |
self.calls = ( |
self._dcommit_calls_1() + |
+ self._git_sanity_checks('fake_ancestor_sha', 'working') + |
self._dcommit_calls_normal() + |
self._dcommit_calls_3()) |
git_cl.main(['dcommit']) |
@@ -403,8 +429,8 @@ class TestGitCl(TestCase): |
git_cl.main(['dcommit', '--bypass-hooks']) |
- @staticmethod |
- def _gerrit_base_calls(): |
+ @classmethod |
+ def _gerrit_base_calls(cls): |
return [ |
((['git', 'config', 'gerrit.host'],), 'gerrit.example.com'), |
((['git', 'config', 'rietveld.server'],), 'codereview.example.com'), |
@@ -419,32 +445,35 @@ class TestGitCl(TestCase): |
((['git', 'symbolic-ref', 'HEAD'],), 'master'), |
((['git', 'config', 'branch.master.merge'],), 'master'), |
((['git', 'config', 'branch.master.remote'],), 'origin'), |
+ ((['git', 'merge-base', 'master', 'HEAD'],), 'fake_ancestor_sha'), |
+ ] + cls._git_sanity_checks('fake_ancestor_sha', 'master') + [ |
((['git', 'rev-parse', '--show-cdup'],), ''), |
((['git', 'rev-parse', 'HEAD'],), '12345'), |
- ((['git', 'diff', '--name-status', '-r', 'master...', '.'],), |
+ ((['git', 'diff', '--name-status', '-r', 'fake_ancestor_sha...', '.'],), |
'M\t.gitignore\n'), |
((['git', 'config', 'branch.master.rietveldissue'],), ''), |
((['git', 'config', 'branch.master.rietveldpatchset'],), ''), |
- ((['git', 'log', '--pretty=format:%s%n%n%b', 'master...'],), 'foo'), |
+ ((['git', 'log', '--pretty=format:%s%n%n%b', 'fake_ancestor_sha...'],), |
+ 'foo'), |
((['git', 'config', 'user.email'],), 'me@example.com'), |
((['git', 'diff', '--no-ext-diff', '--stat', '--find-copies-harder', |
- '-l100000', '-C50', 'master...'],), |
+ '-l100000', '-C50', 'fake_ancestor_sha'],), |
'+dat'), |
] |
@staticmethod |
def _gerrit_upload_calls(description, reviewers): |
calls = [ |
- ((['git', 'log', '--pretty=format:%s\n\n%b', 'master..'],), |
+ ((['git', 'log', '--pretty=format:%s\n\n%b', 'fake_ancestor_sha..'],), |
description) |
] |
if git_cl.CHANGE_ID not in description: |
calls += [ |
- ((['git', 'log', '--pretty=format:%s\n\n%b', 'master..'],), |
+ ((['git', 'log', '--pretty=format:%s\n\n%b', 'fake_ancestor_sha..'],), |
description), |
((['git', 'commit', '--amend', '-m', description],), |
''), |
- ((['git', 'log', '--pretty=format:%s\n\n%b', 'master..'],), |
+ ((['git', 'log', '--pretty=format:%s\n\n%b', 'fake_ancestor_sha..'],), |
description) |
] |
calls += [ |