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

Side by Side Diff: tests/git_drover_test.py

Issue 2067653002: drover win: Use --stdin so update-index doesn't fail on long cmdline (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: fix mocky methods Created 4 years, 6 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « git_drover.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2015 The Chromium Authors. All rights reserved. 2 # Copyright 2015 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 """Tests for git_drover.""" 5 """Tests for git_drover."""
6 6
7 import os 7 import os
8 import shutil 8 import shutil
9 import subprocess 9 import subprocess
10 import sys 10 import sys
(...skipping 19 matching lines...) Expand all
30 with open(os.path.join(self._parent_repo, '.git', 'HEAD'), 'w') as f: 30 with open(os.path.join(self._parent_repo, '.git', 'HEAD'), 'w') as f:
31 f.write('HEAD') 31 f.write('HEAD')
32 os.mkdir(os.path.join(self._parent_repo, '.git', 'info')) 32 os.mkdir(os.path.join(self._parent_repo, '.git', 'info'))
33 with open( 33 with open(
34 os.path.join(self._parent_repo, '.git', 'info', 'refs'), 'w') as f: 34 os.path.join(self._parent_repo, '.git', 'info', 'refs'), 'w') as f:
35 f.write('refs') 35 f.write('refs')
36 self.mock(tempfile, 'mkdtemp', self._mkdtemp) 36 self.mock(tempfile, 'mkdtemp', self._mkdtemp)
37 self.mock(__builtins__, 'raw_input', self._get_input) 37 self.mock(__builtins__, 'raw_input', self._get_input)
38 self.mock(subprocess, 'check_call', self._check_call) 38 self.mock(subprocess, 'check_call', self._check_call)
39 self.mock(subprocess, 'check_output', self._check_call) 39 self.mock(subprocess, 'check_output', self._check_call)
40 self.real_popen = subprocess.Popen
41 self.mock(subprocess, 'Popen', self._Popen)
40 self._commands = [] 42 self._commands = []
41 self._input = [] 43 self._input = []
42 self._fail_on_command = None 44 self._fail_on_command = None
43 45
44 self.REPO_CHECK_COMMANDS = [ 46 self.REPO_CHECK_COMMANDS = [
45 (['git', '--help'], self._parent_repo), 47 (['git', '--help'], self._parent_repo),
46 (['git', 'status'], self._parent_repo), 48 (['git', 'status'], self._parent_repo),
47 (['git', 'fetch', 'origin'], self._parent_repo), 49 (['git', 'fetch', 'origin'], self._parent_repo),
48 (['git', 'rev-parse', 'refs/remotes/branch-heads/branch^{commit}'], 50 (['git', 'rev-parse', 'refs/remotes/branch-heads/branch^{commit}'],
49 self._parent_repo), 51 self._parent_repo),
(...skipping 18 matching lines...) Expand all
68 self.BRANCH_CLEANUP_COMMANDS = [ 70 self.BRANCH_CLEANUP_COMMANDS = [
69 (['rmdir', '/s', '/q', self._target_repo], None), 71 (['rmdir', '/s', '/q', self._target_repo], None),
70 (['git', 'branch', '-D', 'drover_branch_123'], self._parent_repo), 72 (['git', 'branch', '-D', 'drover_branch_123'], self._parent_repo),
71 ] 73 ]
72 else: 74 else:
73 self.BRANCH_CLEANUP_COMMANDS = [ 75 self.BRANCH_CLEANUP_COMMANDS = [
74 (['git', 'branch', '-D', 'drover_branch_123'], self._parent_repo), 76 (['git', 'branch', '-D', 'drover_branch_123'], self._parent_repo),
75 ] 77 ]
76 self.MANUAL_RESOLVE_PREPARATION_COMMANDS = [ 78 self.MANUAL_RESOLVE_PREPARATION_COMMANDS = [
77 (['git', 'status', '--porcelain'], self._target_repo), 79 (['git', 'status', '--porcelain'], self._target_repo),
78 (['git', 'update-index', '--skip-worktree', '--', 'foo', 'bar'], 80 (['git', 'update-index', '--skip-worktree', '--stdin'],
79 self._target_repo), 81 self._target_repo),
80 ] 82 ]
81 self.FINISH_MANUAL_RESOLVE_COMMANDS = [ 83 self.FINISH_MANUAL_RESOLVE_COMMANDS = [
82 (['git', 'commit', '--no-edit'], self._target_repo), 84 (['git', 'commit', '--no-edit'], self._target_repo),
83 ] 85 ]
84 86
85 def tearDown(self): 87 def tearDown(self):
86 shutil.rmtree(self._temp_directory) 88 shutil.rmtree(self._temp_directory)
87 super(GitDroverTest, self).tearDown() 89 super(GitDroverTest, self).tearDown()
88 90
(...skipping 17 matching lines...) Expand all
106 if (self._fail_on_command is not None and 108 if (self._fail_on_command is not None and
107 self._fail_on_command == len(self._commands)): 109 self._fail_on_command == len(self._commands)):
108 self._fail_on_command = None 110 self._fail_on_command = None
109 raise subprocess.CalledProcessError(1, args[0]) 111 raise subprocess.CalledProcessError(1, args[0])
110 if args == ['git', 'rev-parse', '--git-dir']: 112 if args == ['git', 'rev-parse', '--git-dir']:
111 return os.path.join(self._parent_repo, '.git') 113 return os.path.join(self._parent_repo, '.git')
112 if args == ['git', 'status', '--porcelain']: 114 if args == ['git', 'status', '--porcelain']:
113 return ' D foo\nUU baz\n D bar\n' 115 return ' D foo\nUU baz\n D bar\n'
114 return '' 116 return ''
115 117
118 def _Popen(self, args, shell=False, cwd=None, stdin=None, stdout=None,
119 stderr=None):
120 if args == ['git', 'update-index', '--skip-worktree', '--stdin']:
121 self._commands.append((args, cwd))
122 self.assertFalse(shell)
123 self.assertEqual(stdin, subprocess.PIPE)
124 class MockPopen(object):
125 def __init__(self, *args, **kwargs):
126 self.returncode = -999
127 def communicate(self, stdin):
128 if stdin == 'foo\nbar\n':
129 self.returncode = 0
130 else:
131 self.returncode = 1
132 return MockPopen()
133 else:
134 return self.real_popen(args, shell=shell, cwd=cwd, stdin=stdin,
135 stdout=stdout, stderr=stderr)
136
116 def testSuccess(self): 137 def testSuccess(self):
117 self._input = ['y', 'y'] 138 self._input = ['y', 'y']
118 git_drover.cherry_pick_change('branch', 'cl', self._parent_repo, False) 139 git_drover.cherry_pick_change('branch', 'cl', self._parent_repo, False)
119 self.assertEqual( 140 self.assertEqual(
120 self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS + 141 self.REPO_CHECK_COMMANDS + self.LOCAL_REPO_COMMANDS +
121 self.UPLOAD_COMMANDS + self.LAND_COMMAND + self.BRANCH_CLEANUP_COMMANDS, 142 self.UPLOAD_COMMANDS + self.LAND_COMMAND + self.BRANCH_CLEANUP_COMMANDS,
122 self._commands) 143 self._commands)
123 self.assertFalse(os.path.exists(self._target_repo)) 144 self.assertFalse(os.path.exists(self._target_repo))
124 self.assertFalse(self._input) 145 self.assertFalse(self._input)
125 146
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 self.assertRaises(git_drover.Error, git_drover.continue_cherry_pick, 313 self.assertRaises(git_drover.Error, git_drover.continue_cherry_pick,
293 self._parent_repo) 314 self._parent_repo)
294 315
295 def testAbortInvalidWorkdir(self): 316 def testAbortInvalidWorkdir(self):
296 self.assertRaises(git_drover.Error, git_drover.abort_cherry_pick, 317 self.assertRaises(git_drover.Error, git_drover.abort_cherry_pick,
297 self._parent_repo) 318 self._parent_repo)
298 319
299 320
300 if __name__ == '__main__': 321 if __name__ == '__main__':
301 unittest.main() 322 unittest.main()
OLDNEW
« no previous file with comments | « git_drover.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698