| 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()
|
|
|