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

Unified Diff: tests/git_drover_test.py

Issue 1397313002: Support merging with conflicts with git-drover. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Created 5 years, 1 month 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 | « man/src/git-drover.demo.4.sh ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/git_drover_test.py
diff --git a/tests/git_drover_test.py b/tests/git_drover_test.py
index c9f1f8fe28cb5fdb72c01dfc0f6f0f0ee81edcc2..98f9352ede1da63b01b8a2d0e660c4d96484c194 100755
--- a/tests/git_drover_test.py
+++ b/tests/git_drover_test.py
@@ -30,8 +30,8 @@ class GitDroverTest(auto_stub.TestCase):
with open(os.path.join(self._parent_repo, '.git', 'HEAD'), 'w') as f:
f.write('HEAD')
os.mkdir(os.path.join(self._parent_repo, '.git', 'info'))
- with open(os.path.join(self._parent_repo, '.git', 'info', 'refs'),
- 'w') as f:
+ with open(
+ os.path.join(self._parent_repo, '.git', 'info', 'refs'), 'w') as f:
f.write('refs')
self.mock(tempfile, 'mkdtemp', self._mkdtemp)
self.mock(__builtins__, 'raw_input', self._get_input)
@@ -40,9 +40,6 @@ class GitDroverTest(auto_stub.TestCase):
self._commands = []
self._input = []
self._fail_on_command = None
- self._has_os_symlink = hasattr(os, 'symlink')
- if not self._has_os_symlink:
- os.symlink = lambda source, dest: None
self.REPO_CHECK_COMMANDS = [
(['git', '--help'], self._parent_repo),
@@ -59,22 +56,34 @@ class GitDroverTest(auto_stub.TestCase):
(['git', 'checkout', '-b', 'drover_branch_123',
'refs/remotes/branch-heads/branch'], self._target_repo),
(['git', 'cherry-pick', '-x', 'cl'], self._target_repo),
+ ]
+ self.UPLOAD_COMMANDS = [
(['git', 'reset', '--hard'], self._target_repo),
+ (['git', 'cl', 'upload'], self._target_repo),
]
- self.UPLOAD_COMMAND = [(['git', 'cl', 'upload'], self._target_repo)]
self.LAND_COMMAND = [
(['git', 'cl', 'land', '--bypass-hooks'], self._target_repo),
]
- self.BRANCH_CLEANUP_COMMANDS = [
- (['git', 'cherry-pick', '--abort'], self._target_repo),
- (['git', 'checkout', '--detach'], self._target_repo),
- (['git', 'branch', '-D', 'drover_branch_123'], self._target_repo),
+ if os.name == 'nt':
+ self.BRANCH_CLEANUP_COMMANDS = [
+ (['rmdir', '/s', '/q', self._target_repo], None),
+ (['git', 'branch', '-D', 'drover_branch_123'], self._parent_repo),
+ ]
+ else:
+ self.BRANCH_CLEANUP_COMMANDS = [
+ (['git', 'branch', '-D', 'drover_branch_123'], self._parent_repo),
+ ]
+ self.MANUAL_RESOLVE_PREPARATION_COMMANDS = [
+ (['git', 'status', '--porcelain'], self._target_repo),
+ (['git', 'update-index', '--skip-worktree', '--', 'foo', 'bar'],
+ self._target_repo),
+ ]
+ self.FINISH_MANUAL_RESOLVE_COMMANDS = [
+ (['git', 'commit', '--no-edit'], self._target_repo),
]
def tearDown(self):
shutil.rmtree(self._temp_directory)
- if not self._has_os_symlink:
- del os.symlink
super(GitDroverTest, self).tearDown()
def _mkdtemp(self, prefix='tmp'):
@@ -89,20 +98,27 @@ class GitDroverTest(auto_stub.TestCase):
return result
def _check_call(self, args, stderr=None, stdout=None, shell='', cwd=None):
- self.assertFalse(shell)
+ if args[0] == 'rmdir':
+ subprocess.call(args, shell=shell)
+ else:
+ self.assertFalse(shell)
self._commands.append((args, cwd))
if (self._fail_on_command is not None and
self._fail_on_command == len(self._commands)):
+ self._fail_on_command = None
raise subprocess.CalledProcessError(1, args[0])
if args == ['git', 'rev-parse', '--git-dir']:
return os.path.join(self._parent_repo, '.git')
+ if args == ['git', 'status', '--porcelain']:
+ return ' D foo\nUU baz\n D bar\n'
+ return ''
def testSuccess(self):
self._input = ['y', 'y']
git_drover.cherry_pick_change('branch', 'cl', self._parent_repo, False)
self.assertEqual(
self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS +
- self.UPLOAD_COMMAND + self.LAND_COMMAND + self.BRANCH_CLEANUP_COMMANDS,
+ self.UPLOAD_COMMANDS + self.LAND_COMMAND + self.BRANCH_CLEANUP_COMMANDS,
self._commands)
self.assertFalse(os.path.exists(self._target_repo))
self.assertFalse(self._input)
@@ -110,9 +126,8 @@ class GitDroverTest(auto_stub.TestCase):
def testDryRun(self):
self._input = ['y']
git_drover.cherry_pick_change('branch', 'cl', self._parent_repo, True)
- self.assertEqual(
- self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS +
- self.BRANCH_CLEANUP_COMMANDS, self._commands)
+ self.assertEqual(self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS +
+ self.BRANCH_CLEANUP_COMMANDS, self._commands)
self.assertFalse(os.path.exists(self._target_repo))
self.assertFalse(self._input)
@@ -134,7 +149,7 @@ class GitDroverTest(auto_stub.TestCase):
self._input = ['y', 'n']
git_drover.cherry_pick_change('branch', 'cl', self._parent_repo, False)
self.assertEqual(self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS +
- self.UPLOAD_COMMAND + self.BRANCH_CLEANUP_COMMANDS,
+ self.UPLOAD_COMMANDS + self.BRANCH_CLEANUP_COMMANDS,
self._commands)
self.assertFalse(os.path.exists(self._target_repo))
self.assertFalse(self._input)
@@ -153,29 +168,105 @@ class GitDroverTest(auto_stub.TestCase):
self._fail_on_command = 8
self.assertRaises(git_drover.Error, git_drover.cherry_pick_change, 'branch',
'cl', self._parent_repo, False)
- self.assertEqual(self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS[:2],
- self._commands)
+ self.assertEqual(self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS[:2] +
+ self.BRANCH_CLEANUP_COMMANDS[:-1], self._commands)
self.assertFalse(os.path.exists(self._target_repo))
self.assertFalse(self._input)
- def testFailDuringCherryPick(self):
+ def testFailDuringCherryPickAndAbort(self):
self._input = ['y']
self._fail_on_command = 10
self.assertRaises(git_drover.Error, git_drover.cherry_pick_change, 'branch',
'cl', self._parent_repo, False)
+ self.assertEqual(self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS[:4] +
+ self.MANUAL_RESOLVE_PREPARATION_COMMANDS, self._commands)
+ self.assertTrue(os.path.exists(self._target_repo))
+ self.assertFalse(self._input)
+ self._commands = []
+ git_drover.abort_cherry_pick(self._target_repo)
+ self.assertEqual(self.BRANCH_CLEANUP_COMMANDS, self._commands)
+ self.assertFalse(os.path.exists(self._target_repo))
+
+ def testFailDuringCherryPickAndContinue(self):
+ self._input = ['y']
+ self._fail_on_command = 10
+ self.assertRaises(git_drover.PatchError, git_drover.cherry_pick_change,
+ 'branch', 'cl', self._parent_repo, False)
+ self.assertEqual(self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS[:4] +
+ self.MANUAL_RESOLVE_PREPARATION_COMMANDS, self._commands)
+ self.assertTrue(os.path.exists(self._target_repo))
+ self.assertFalse(self._input)
+
+ self._commands = []
+ self._input = ['n']
+ git_drover.continue_cherry_pick(self._target_repo)
+ self.assertEqual(self.UPLOAD_COMMANDS, self._commands)
+ self.assertTrue(os.path.exists(self._target_repo))
+ self.assertFalse(self._input)
+
+ self._commands = []
+ self._input = ['y']
+ git_drover.continue_cherry_pick(self._target_repo)
self.assertEqual(
- self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS[:4] +
- self.BRANCH_CLEANUP_COMMANDS, self._commands)
+ self.UPLOAD_COMMANDS + self.LAND_COMMAND + self.BRANCH_CLEANUP_COMMANDS,
+ self._commands)
self.assertFalse(os.path.exists(self._target_repo))
self.assertFalse(self._input)
+ def testFailDuringCherryPickAndContinueWithoutCommitting(self):
+ self._input = ['y']
+ self._fail_on_command = 10
+ self.assertRaises(git_drover.PatchError, git_drover.cherry_pick_change,
+ 'branch', 'cl', self._parent_repo, False)
+ self.assertEqual(self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS[:4] +
+ self.MANUAL_RESOLVE_PREPARATION_COMMANDS, self._commands)
+ self.assertTrue(os.path.exists(self._target_repo))
+ self.assertFalse(self._input)
+ self._commands = []
+ with open(os.path.join(self._target_repo, '.git', 'CHERRY_PICK_HEAD'), 'w'):
+ pass
+
+ self._commands = []
+ self._input = ['y']
+ git_drover.continue_cherry_pick(self._target_repo)
+ self.assertEqual(self.FINISH_MANUAL_RESOLVE_COMMANDS + self.UPLOAD_COMMANDS
+ + self.LAND_COMMAND + self.BRANCH_CLEANUP_COMMANDS,
+ self._commands)
+ self.assertFalse(os.path.exists(self._target_repo))
+ self.assertFalse(self._input)
+
+ def testFailDuringCherryPickAndContinueWithoutResolving(self):
+ self._input = ['y']
+ self._fail_on_command = 10
+ self.assertRaises(git_drover.PatchError, git_drover.cherry_pick_change,
+ 'branch', 'cl', self._parent_repo, False)
+ self.assertEqual(self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS[:4] +
+ self.MANUAL_RESOLVE_PREPARATION_COMMANDS, self._commands)
+ self.assertTrue(os.path.exists(self._target_repo))
+ self.assertFalse(self._input)
+ self._commands = []
+ self._fail_on_command = 1
+ with open(os.path.join(self._target_repo, '.git', 'CHERRY_PICK_HEAD'), 'w'):
+ pass
+ self.assertRaisesRegexp(git_drover.Error,
+ 'All conflicts must be resolved before continuing',
+ git_drover.continue_cherry_pick, self._target_repo)
+ self.assertEqual(self.FINISH_MANUAL_RESOLVE_COMMANDS, self._commands)
+ self.assertTrue(os.path.exists(self._target_repo))
+
+ self._commands = []
+ git_drover.abort_cherry_pick(self._target_repo)
+ self.assertEqual(self.BRANCH_CLEANUP_COMMANDS, self._commands)
+ self.assertFalse(os.path.exists(self._target_repo))
+
def testFailAfterCherryPick(self):
self._input = ['y']
self._fail_on_command = 11
self.assertRaises(git_drover.Error, git_drover.cherry_pick_change, 'branch',
'cl', self._parent_repo, False)
self.assertEqual(self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS +
- self.BRANCH_CLEANUP_COMMANDS, self._commands)
+ self.UPLOAD_COMMANDS[:1] + self.BRANCH_CLEANUP_COMMANDS,
+ self._commands)
self.assertFalse(os.path.exists(self._target_repo))
self.assertFalse(self._input)
@@ -185,19 +276,26 @@ class GitDroverTest(auto_stub.TestCase):
self.assertRaises(git_drover.Error, git_drover.cherry_pick_change, 'branch',
'cl', self._parent_repo, False)
self.assertEqual(self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS +
- self.UPLOAD_COMMAND + self.BRANCH_CLEANUP_COMMANDS,
+ self.UPLOAD_COMMANDS + self.BRANCH_CLEANUP_COMMANDS,
self._commands)
self.assertFalse(os.path.exists(self._target_repo))
self.assertFalse(self._input)
def testInvalidParentRepoDirectory(self):
- self.assertRaises(
- git_drover.Error, git_drover.cherry_pick_change, 'branch', 'cl',
- os.path.join(self._parent_repo, 'fake'), False)
+ self.assertRaises(git_drover.Error, git_drover.cherry_pick_change, 'branch',
+ 'cl', os.path.join(self._parent_repo, 'fake'), False)
self.assertFalse(self._commands)
self.assertFalse(os.path.exists(self._target_repo))
self.assertFalse(self._input)
+ def testContinueInvalidWorkdir(self):
+ self.assertRaises(git_drover.Error, git_drover.continue_cherry_pick,
+ self._parent_repo)
+
+ def testAbortInvalidWorkdir(self):
+ self.assertRaises(git_drover.Error, git_drover.abort_cherry_pick,
+ self._parent_repo)
+
if __name__ == '__main__':
unittest.main()
« no previous file with comments | « man/src/git-drover.demo.4.sh ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698