|
|
|
@ -943,9 +943,16 @@ class TestGitCl(TestCase):
|
|
|
|
|
self._dcommit_calls_3())
|
|
|
|
|
git_cl.main(['dcommit', '--bypass-hooks'])
|
|
|
|
|
|
|
|
|
|
def _land_rietveld_common(self, debug_stdout=False):
|
|
|
|
|
if not debug_stdout:
|
|
|
|
|
def _land_rietveld_common(self, debug=False):
|
|
|
|
|
if debug:
|
|
|
|
|
# Very useful due to finally clause in git cl land raising exceptions and
|
|
|
|
|
# shadowing real cause of failure.
|
|
|
|
|
self.mock(git_cl, '_IS_BEING_TESTED', True)
|
|
|
|
|
else:
|
|
|
|
|
self.mock(git_cl.sys, 'stdout', StringIO.StringIO())
|
|
|
|
|
|
|
|
|
|
self.mock(git_cl._GitNumbererState, 'load', classmethod(lambda _, url, ref:
|
|
|
|
|
self._mocked_call(['_GitNumbererState', url, ref])))
|
|
|
|
|
self.mock(RietveldMock, 'update_description', staticmethod(
|
|
|
|
|
lambda i, d: self._mocked_call(['update_description', i, d])))
|
|
|
|
|
self.mock(RietveldMock, 'add_comment', staticmethod(
|
|
|
|
@ -1012,9 +1019,14 @@ class TestGitCl(TestCase):
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
def test_land_rietveld(self):
|
|
|
|
|
self._land_rietveld_common()
|
|
|
|
|
self._land_rietveld_common(debug=False)
|
|
|
|
|
self.calls += [
|
|
|
|
|
((['git', 'config', 'rietveld.pending-ref-prefix'],), CERR1),
|
|
|
|
|
((['git', 'config', 'remote.origin.url'],),
|
|
|
|
|
'https://chromium.googlesource.com/infra/infra'),
|
|
|
|
|
((['_GitNumbererState',
|
|
|
|
|
'https://chromium.googlesource.com/infra/infra',
|
|
|
|
|
'refs/heads/master'],),
|
|
|
|
|
git_cl._GitNumbererState(None, False)),
|
|
|
|
|
((['git', 'push', '--porcelain', 'origin', 'HEAD:refs/heads/master'],),
|
|
|
|
|
''),
|
|
|
|
|
((['git', 'rev-parse', 'HEAD'],), 'fake_sha_rebased'),
|
|
|
|
@ -1032,11 +1044,16 @@ class TestGitCl(TestCase):
|
|
|
|
|
git_cl.main(['land'])
|
|
|
|
|
|
|
|
|
|
def test_land_rietveld_gnumbd(self):
|
|
|
|
|
self._land_rietveld_common()
|
|
|
|
|
self._land_rietveld_common(debug=False)
|
|
|
|
|
self.mock(git_cl, 'WaitForRealCommit',
|
|
|
|
|
lambda *a: self._mocked_call(['WaitForRealCommit'] + list(a)))
|
|
|
|
|
self.calls += [
|
|
|
|
|
((['git', 'config', 'rietveld.pending-ref-prefix'],), 'refs/pending/'),
|
|
|
|
|
((['git', 'config', 'remote.origin.url'],),
|
|
|
|
|
'https://chromium.googlesource.com/chromium/src'),
|
|
|
|
|
((['_GitNumbererState',
|
|
|
|
|
'https://chromium.googlesource.com/chromium/src',
|
|
|
|
|
'refs/heads/master'],),
|
|
|
|
|
git_cl._GitNumbererState('refs/pending', True)),
|
|
|
|
|
((['git', 'rev-parse', 'HEAD'],), 'fake_sha_rebased'),
|
|
|
|
|
((['git', 'retry', 'fetch', 'origin',
|
|
|
|
|
'+refs/pending/heads/master:refs/git-cl/pending/heads/master'],), ''),
|
|
|
|
@ -1067,9 +1084,7 @@ class TestGitCl(TestCase):
|
|
|
|
|
git_cl.main(['land'])
|
|
|
|
|
|
|
|
|
|
def test_land_rietveld_git_numberer(self):
|
|
|
|
|
self._land_rietveld_common(debug_stdout=False)
|
|
|
|
|
self.mock(git_cl, 'ShouldGenerateGitNumberFooters',
|
|
|
|
|
lambda *a: self._mocked_call(['ShouldGenerateGitNumberFooters']))
|
|
|
|
|
self._land_rietveld_common(debug=False)
|
|
|
|
|
|
|
|
|
|
# Special mocks to check validity of timestamp.
|
|
|
|
|
original_git_amend_head = git_cl._git_amend_head
|
|
|
|
@ -1079,8 +1094,12 @@ class TestGitCl(TestCase):
|
|
|
|
|
self.mock(git_cl, '_git_amend_head', _git_amend_head_mock)
|
|
|
|
|
|
|
|
|
|
self.calls += [
|
|
|
|
|
((['git', 'config', 'rietveld.pending-ref-prefix'],), CERR1),
|
|
|
|
|
((['ShouldGenerateGitNumberFooters'],), True),
|
|
|
|
|
((['git', 'config', 'remote.origin.url'],),
|
|
|
|
|
'https://chromium.googlesource.com/chromium/src'),
|
|
|
|
|
((['_GitNumbererState',
|
|
|
|
|
'https://chromium.googlesource.com/chromium/src',
|
|
|
|
|
'refs/heads/master'],),
|
|
|
|
|
git_cl._GitNumbererState(None, True)),
|
|
|
|
|
|
|
|
|
|
((['git', 'show', '-s', '--format=%B', 'fake_ancestor_sha'],),
|
|
|
|
|
'This is parent commit.\n'
|
|
|
|
@ -1124,12 +1143,13 @@ class TestGitCl(TestCase):
|
|
|
|
|
git_cl.main(['land'])
|
|
|
|
|
|
|
|
|
|
def test_land_rietveld_git_numberer_bad_parent(self):
|
|
|
|
|
self._land_rietveld_common()
|
|
|
|
|
self.mock(git_cl, 'ShouldGenerateGitNumberFooters',
|
|
|
|
|
lambda *a: self._mocked_call(['ShouldGenerateGitNumberFooters']))
|
|
|
|
|
self._land_rietveld_common(debug=False)
|
|
|
|
|
self.calls += [
|
|
|
|
|
((['git', 'config', 'rietveld.pending-ref-prefix'],), CERR1),
|
|
|
|
|
((['ShouldGenerateGitNumberFooters'],), True),
|
|
|
|
|
((['git', 'config', 'remote.origin.url'],),
|
|
|
|
|
'https://chromium.googlesource.com/v8/v8'),
|
|
|
|
|
((['_GitNumbererState',
|
|
|
|
|
'https://chromium.googlesource.com/v8/v8', 'refs/heads/master'],),
|
|
|
|
|
git_cl._GitNumbererState(None, True)),
|
|
|
|
|
|
|
|
|
|
((['git', 'show', '-s', '--format=%B', 'fake_ancestor_sha'],),
|
|
|
|
|
'This is parent commit with no footer.'),
|
|
|
|
@ -1142,30 +1162,6 @@ class TestGitCl(TestCase):
|
|
|
|
|
self.assertEqual(cm.exception.message,
|
|
|
|
|
'Unable to infer commit position from footers')
|
|
|
|
|
|
|
|
|
|
def test_ShouldGenerateGitNumberFooters(self):
|
|
|
|
|
self.mock(git_cl, 'FindCodereviewSettingsFile', lambda: StringIO.StringIO(
|
|
|
|
|
'GENERATE_GIT_NUMBER_FOOTERS: true\n'
|
|
|
|
|
))
|
|
|
|
|
self.assertTrue(git_cl.ShouldGenerateGitNumberFooters())
|
|
|
|
|
|
|
|
|
|
self.mock(git_cl, 'FindCodereviewSettingsFile', lambda: StringIO.StringIO(
|
|
|
|
|
'GENERATE_GIT_NUMBER_FOOTERS: false\n'
|
|
|
|
|
))
|
|
|
|
|
self.assertFalse(git_cl.ShouldGenerateGitNumberFooters())
|
|
|
|
|
|
|
|
|
|
self.mock(git_cl, 'FindCodereviewSettingsFile', lambda: StringIO.StringIO(
|
|
|
|
|
'GENERATE_GIT_NUMBER_FOOTERS: anything but true is false\n'
|
|
|
|
|
))
|
|
|
|
|
self.assertFalse(git_cl.ShouldGenerateGitNumberFooters())
|
|
|
|
|
|
|
|
|
|
self.mock(git_cl, 'FindCodereviewSettingsFile', lambda: StringIO.StringIO(
|
|
|
|
|
'whatever: ignored'
|
|
|
|
|
))
|
|
|
|
|
self.assertFalse(git_cl.ShouldGenerateGitNumberFooters())
|
|
|
|
|
|
|
|
|
|
self.mock(git_cl, 'FindCodereviewSettingsFile', lambda: None)
|
|
|
|
|
self.assertFalse(git_cl.ShouldGenerateGitNumberFooters())
|
|
|
|
|
|
|
|
|
|
def test_GitNumbererState_not_whitelisted_repo(self):
|
|
|
|
|
self.calls = [
|
|
|
|
|
((['git', 'config', 'rietveld.autoupdate'],), CERR1),
|
|
|
|
@ -1190,7 +1186,7 @@ class TestGitCl(TestCase):
|
|
|
|
|
res = git_cl._GitNumbererState.load(
|
|
|
|
|
remote_url='https://chromium.googlesource.com/chromium/src',
|
|
|
|
|
remote_ref='refs/whatever')
|
|
|
|
|
self.assertEqual(res.pending_prefix, 'refs/pending-prefix')
|
|
|
|
|
self.assertEqual(res.pending_prefix, 'refs/pending-prefix/')
|
|
|
|
|
self.assertEqual(res.should_git_number, False)
|
|
|
|
|
|
|
|
|
|
def test_GitNumbererState_fail_gnumbd_and_validator(self):
|
|
|
|
@ -1253,7 +1249,7 @@ class TestGitCl(TestCase):
|
|
|
|
|
res = git_cl._GitNumbererState.load(
|
|
|
|
|
remote_url='https://chromium.googlesource.com/chromium/src',
|
|
|
|
|
remote_ref='refs/heads/master')
|
|
|
|
|
self.assertEqual(res.pending_prefix, 'refs/pending')
|
|
|
|
|
self.assertEqual(res.pending_prefix, 'refs/pending/')
|
|
|
|
|
self.assertEqual(res.should_git_number, False)
|
|
|
|
|
|
|
|
|
|
res = git_cl._GitNumbererState.load(
|
|
|
|
@ -1715,33 +1711,33 @@ class TestGitCl(TestCase):
|
|
|
|
|
|
|
|
|
|
def test_get_target_ref(self):
|
|
|
|
|
# Check remote or remote branch not present.
|
|
|
|
|
self.assertEqual(None, git_cl.GetTargetRef('origin', None, 'master', None))
|
|
|
|
|
self.assertEqual(None, git_cl.GetTargetRef('origin', None, 'master', False))
|
|
|
|
|
self.assertEqual(None, git_cl.GetTargetRef(None,
|
|
|
|
|
'refs/remotes/origin/master',
|
|
|
|
|
'master', None))
|
|
|
|
|
'master', False))
|
|
|
|
|
|
|
|
|
|
# Check default target refs for branches.
|
|
|
|
|
self.assertEqual('refs/heads/master',
|
|
|
|
|
git_cl.GetTargetRef('origin', 'refs/remotes/origin/master',
|
|
|
|
|
None, None))
|
|
|
|
|
None, False))
|
|
|
|
|
self.assertEqual('refs/heads/master',
|
|
|
|
|
git_cl.GetTargetRef('origin', 'refs/remotes/origin/lkgr',
|
|
|
|
|
None, None))
|
|
|
|
|
None, False))
|
|
|
|
|
self.assertEqual('refs/heads/master',
|
|
|
|
|
git_cl.GetTargetRef('origin', 'refs/remotes/origin/lkcr',
|
|
|
|
|
None, None))
|
|
|
|
|
None, False))
|
|
|
|
|
self.assertEqual('refs/branch-heads/123',
|
|
|
|
|
git_cl.GetTargetRef('origin',
|
|
|
|
|
'refs/remotes/branch-heads/123',
|
|
|
|
|
None, None))
|
|
|
|
|
None, False))
|
|
|
|
|
self.assertEqual('refs/diff/test',
|
|
|
|
|
git_cl.GetTargetRef('origin',
|
|
|
|
|
'refs/remotes/origin/refs/diff/test',
|
|
|
|
|
None, None))
|
|
|
|
|
None, False))
|
|
|
|
|
self.assertEqual('refs/heads/chrome/m42',
|
|
|
|
|
git_cl.GetTargetRef('origin',
|
|
|
|
|
'refs/remotes/origin/chrome/m42',
|
|
|
|
|
None, None))
|
|
|
|
|
None, False))
|
|
|
|
|
|
|
|
|
|
# Check target refs for user-specified target branch.
|
|
|
|
|
for branch in ('branch-heads/123', 'remotes/branch-heads/123',
|
|
|
|
@ -1749,23 +1745,26 @@ class TestGitCl(TestCase):
|
|
|
|
|
self.assertEqual('refs/branch-heads/123',
|
|
|
|
|
git_cl.GetTargetRef('origin',
|
|
|
|
|
'refs/remotes/origin/master',
|
|
|
|
|
branch, None))
|
|
|
|
|
branch, False))
|
|
|
|
|
for branch in ('origin/master', 'remotes/origin/master',
|
|
|
|
|
'refs/remotes/origin/master'):
|
|
|
|
|
self.assertEqual('refs/heads/master',
|
|
|
|
|
git_cl.GetTargetRef('origin',
|
|
|
|
|
'refs/remotes/branch-heads/123',
|
|
|
|
|
branch, None))
|
|
|
|
|
branch, False))
|
|
|
|
|
for branch in ('master', 'heads/master', 'refs/heads/master'):
|
|
|
|
|
self.assertEqual('refs/heads/master',
|
|
|
|
|
git_cl.GetTargetRef('origin',
|
|
|
|
|
'refs/remotes/branch-heads/123',
|
|
|
|
|
branch, None))
|
|
|
|
|
branch, False))
|
|
|
|
|
|
|
|
|
|
# Check target refs for pending prefix.
|
|
|
|
|
self.mock(git_cl._GitNumbererState, 'load',
|
|
|
|
|
classmethod(lambda *_: git_cl._GitNumbererState('prefix', False)))
|
|
|
|
|
self.assertEqual('prefix/heads/master',
|
|
|
|
|
git_cl.GetTargetRef('origin', 'refs/remotes/origin/master',
|
|
|
|
|
None, 'prefix/'))
|
|
|
|
|
None, True,
|
|
|
|
|
'https://remote.url/some.git'))
|
|
|
|
|
|
|
|
|
|
def test_patch_when_dirty(self):
|
|
|
|
|
# Patch when local tree is dirty
|
|
|
|
|