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

Side by Side Diff: tests/checkout_test.py

Issue 22794015: Completing implementation of GitCheckout in depot_tools (Closed) Base URL: http://src.chromium.org/svn/trunk/tools/depot_tools/
Patch Set: Created 7 years, 3 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
« checkout.py ('K') | « checkout.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 (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 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 5
6 """Unit tests for checkout.py.""" 6 """Unit tests for checkout.py."""
7 7
8 import logging 8 import logging
9 import os 9 import os
10 import shutil 10 import shutil
(...skipping 14 matching lines...) Expand all
25 25
26 # pass -v to enable it. 26 # pass -v to enable it.
27 DEBUGGING = False 27 DEBUGGING = False
28 28
29 # A patch that will fail to apply. 29 # A patch that will fail to apply.
30 BAD_PATCH = ''.join( 30 BAD_PATCH = ''.join(
31 [l for l in GIT.PATCH.splitlines(True) if l.strip() != 'e']) 31 [l for l in GIT.PATCH.splitlines(True) if l.strip() != 'e'])
32 32
33 33
34 class FakeRepos(fake_repos.FakeReposBase): 34 class FakeRepos(fake_repos.FakeReposBase):
35 TEST_GIT_REPO = 'repo_1'
36
35 def populateSvn(self): 37 def populateSvn(self):
36 """Creates a few revisions of changes files.""" 38 """Creates a few revisions of changes files."""
37 subprocess2.check_call( 39 subprocess2.check_call(
38 ['svn', 'checkout', self.svn_base, self.svn_checkout, '-q', 40 ['svn', 'checkout', self.svn_base, self.svn_checkout, '-q',
39 '--non-interactive', '--no-auth-cache', 41 '--non-interactive', '--no-auth-cache',
40 '--username', self.USERS[0][0], '--password', self.USERS[0][1]]) 42 '--username', self.USERS[0][0], '--password', self.USERS[0][1]])
41 assert os.path.isdir(os.path.join(self.svn_checkout, '.svn')) 43 assert os.path.isdir(os.path.join(self.svn_checkout, '.svn'))
42 self._commit_svn(self._tree_1()) 44 self._commit_svn(self._svn_tree_1())
43 self._commit_svn(self._tree_2()) 45 self._commit_svn(self._svn_tree_2())
46
47 def populateGit(self):
48 """Creates a few revisions of changes files."""
49 self._commit_git(self.TEST_GIT_REPO, self._git_tree())
50 # pylint: disable=C0301
51 # Fix for the remote rejected error. For more details see:
52 # http://stackoverflow.com/questions/2816369/git-push-error-remote-rejected- master-master-branch-is-currently-checked
M-A Ruel 2013/09/03 13:10:16 # http://stackoverflow.com/questions/2816369/git-p
rmistry 2013/09/03 15:46:28 Cool, thanks.
53 subprocess2.check_output(
54 ['git', '--git-dir',
55 os.path.join(self.git_root, self.TEST_GIT_REPO, '.git'),
56 'config', '--bool', 'core.bare', 'true'])
57
58 assert os.path.isdir(
59 os.path.join(self.git_root, self.TEST_GIT_REPO, '.git'))
44 60
45 @staticmethod 61 @staticmethod
46 def _tree_1(): 62 def _git_tree():
63 fs = {}
64 fs['origin'] = 'git@1'
65 fs['extra'] = 'dummy\n' # new
66 fs['codereview.settings'] = (
67 '# Test data\n'
68 'bar: pouet\n')
69 fs['chrome/file.cc'] = (
70 'a\n'
71 'bb\n'
72 'ccc\n'
73 'dd\n'
74 'e\n'
75 'ff\n'
76 'ggg\n'
77 'hh\n'
78 'i\n'
79 'jj\n'
80 'kkk\n'
81 'll\n'
82 'm\n'
83 'nn\n'
84 'ooo\n'
85 'pp\n'
86 'q\n')
87 fs['chromeos/views/DOMui_menu_widget.h'] = (
88 '// Copyright (c) 2010\n'
89 '// Use of this source code\n'
90 '// found in the LICENSE file.\n'
91 '\n'
92 '#ifndef DOM\n'
93 '#define DOM\n'
94 '#pragma once\n'
95 '\n'
96 '#include <string>\n'
97 '#endif\n')
98 return fs
99
100 @staticmethod
101 def _svn_tree_1():
47 fs = {} 102 fs = {}
48 fs['trunk/origin'] = 'svn@1' 103 fs['trunk/origin'] = 'svn@1'
49 fs['trunk/codereview.settings'] = ( 104 fs['trunk/codereview.settings'] = (
50 '# Test data\n' 105 '# Test data\n'
51 'bar: pouet\n') 106 'bar: pouet\n')
52 fs['trunk/chrome/file.cc'] = ( 107 fs['trunk/chrome/file.cc'] = (
53 'a\n' 108 'a\n'
54 'bb\n' 109 'bb\n'
55 'ccc\n' 110 'ccc\n'
56 'dd\n' 111 'dd\n'
57 'e\n' 112 'e\n'
58 'ff\n' 113 'ff\n'
59 'ggg\n' 114 'ggg\n'
60 'hh\n' 115 'hh\n'
61 'i\n' 116 'i\n'
62 'jj\n' 117 'jj\n'
63 'kkk\n' 118 'kkk\n'
64 'll\n' 119 'll\n'
65 'm\n' 120 'm\n'
66 'nn\n' 121 'nn\n'
67 'ooo\n' 122 'ooo\n'
68 'pp\n' 123 'pp\n'
69 'q\n') 124 'q\n')
70 return fs 125 return fs
71 126
72 @classmethod 127 @classmethod
73 def _tree_2(cls): 128 def _svn_tree_2(cls):
74 fs = cls._tree_1() 129 fs = cls._svn_tree_1()
75 fs['trunk/origin'] = 'svn@2\n' 130 fs['trunk/origin'] = 'svn@2\n'
76 fs['trunk/extra'] = 'dummy\n' 131 fs['trunk/extra'] = 'dummy\n'
77 fs['trunk/bin_file'] = '\x00' 132 fs['trunk/bin_file'] = '\x00'
78 fs['trunk/chromeos/views/DOMui_menu_widget.h'] = ( 133 fs['trunk/chromeos/views/DOMui_menu_widget.h'] = (
79 '// Copyright (c) 2010\n' 134 '// Copyright (c) 2010\n'
80 '// Use of this source code\n' 135 '// Use of this source code\n'
81 '// found in the LICENSE file.\n' 136 '// found in the LICENSE file.\n'
82 '\n' 137 '\n'
83 '#ifndef DOM\n' 138 '#ifndef DOM\n'
84 '#define DOM\n' 139 '#define DOM\n'
85 '#pragma once\n' 140 '#pragma once\n'
86 '\n' 141 '\n'
87 '#include <string>\n' 142 '#include <string>\n'
88 '#endif\n') 143 '#endif\n')
89 return fs 144 return fs
90 145
91 def populateGit(self):
92 raise NotImplementedError()
93
94 146
95 # pylint: disable=R0201 147 # pylint: disable=R0201
96 class BaseTest(fake_repos.FakeReposTestBase): 148 class BaseTest(fake_repos.FakeReposTestBase):
97 name = 'foo' 149 name = 'foo'
98 FAKE_REPOS_CLASS = FakeRepos 150 FAKE_REPOS_CLASS = FakeRepos
99 is_read_only = False 151 is_read_only = False
100 152
101 def setUp(self): 153 def setUp(self):
102 # Need to enforce subversion_config first. 154 # Need to enforce subversion_config first.
103 checkout.SvnMixIn.svn_config_dir = os.path.join( 155 checkout.SvnMixIn.svn_config_dir = os.path.join(
(...skipping 16 matching lines...) Expand all
120 def get_patches(self): 172 def get_patches(self):
121 return patch.PatchSet([ 173 return patch.PatchSet([
122 patch.FilePatchDiff('new_dir/subdir/new_file', GIT.NEW_SUBDIR, []), 174 patch.FilePatchDiff('new_dir/subdir/new_file', GIT.NEW_SUBDIR, []),
123 patch.FilePatchDiff('chrome/file.cc', GIT.PATCH, []), 175 patch.FilePatchDiff('chrome/file.cc', GIT.PATCH, []),
124 # TODO(maruel): Test with is_new == False. 176 # TODO(maruel): Test with is_new == False.
125 patch.FilePatchBinary('bin_file', '\x00', [], is_new=True), 177 patch.FilePatchBinary('bin_file', '\x00', [], is_new=True),
126 patch.FilePatchDelete('extra', False), 178 patch.FilePatchDelete('extra', False),
127 ]) 179 ])
128 180
129 def get_trunk(self, modified): 181 def get_trunk(self, modified):
130 tree = {} 182 raise NotImplementedError()
131 subroot = 'trunk/'
132 for k, v in self.FAKE_REPOS.svn_revs[-1].iteritems():
133 if k.startswith(subroot):
134 f = k[len(subroot):]
135 assert f not in tree
136 tree[f] = v
137 183
138 if modified: 184 def _check_base(self, co, root, expected):
139 content_lines = tree['chrome/file.cc'].splitlines(True) 185 raise NotImplementedError()
140 tree['chrome/file.cc'] = ''.join(
141 content_lines[0:5] + ['FOO!\n'] + content_lines[5:])
142 del tree['extra']
143 tree['new_dir/subdir/new_file'] = 'A new file\nshould exist.\n'
144 return tree
145
146 def _check_base(self, co, root, git, expected):
147 read_only = isinstance(co, checkout.ReadOnlyCheckout)
148 self.assertEquals(not read_only, bool(expected))
149 self.assertEquals(read_only, self.is_read_only)
150 if not read_only:
151 self.FAKE_REPOS.svn_dirty = True
152
153 self.assertEquals(root, co.project_path)
154 self.assertEquals(self.previous_log['revision'], co.prepare(None))
155 self.assertEquals('pouet', co.get_settings('bar'))
156 self.assertTree(self.get_trunk(False), root)
157 patches = self.get_patches()
158 co.apply_patch(patches)
159 self.assertEquals(
160 ['bin_file', 'chrome/file.cc', 'new_dir/subdir/new_file', 'extra'],
161 patches.filenames)
162
163 if git:
164 # Hackish to verify _branches() internal function.
165 # pylint: disable=W0212
166 self.assertEquals(
167 (['master', 'working_branch'], 'working_branch'),
168 co._branches())
169
170 # Verify that the patch is applied even for read only checkout.
171 self.assertTree(self.get_trunk(True), root)
172 fake_author = self.FAKE_REPOS.USERS[1][0]
173 revision = co.commit(u'msg', fake_author)
174 # Nothing changed.
175 self.assertTree(self.get_trunk(True), root)
176
177 if read_only:
178 self.assertEquals('FAKE', revision)
179 self.assertEquals(self.previous_log['revision'], co.prepare(None))
180 # Changes should be reverted now.
181 self.assertTree(self.get_trunk(False), root)
182 expected = self.previous_log
183 else:
184 self.assertEquals(self.previous_log['revision'] + 1, revision)
185 self.assertEquals(self.previous_log['revision'] + 1, co.prepare(None))
186 self.assertTree(self.get_trunk(True), root)
187 expected = expected.copy()
188 expected['msg'] = 'msg'
189 expected['revision'] = self.previous_log['revision'] + 1
190 expected.setdefault('author', fake_author)
191
192 actual = self._log()
193 self.assertEquals(expected, actual)
194 186
195 def _check_exception(self, co, err_msg): 187 def _check_exception(self, co, err_msg):
196 co.prepare(None) 188 co.prepare(None)
197 try: 189 try:
198 co.apply_patch([patch.FilePatchDiff('chrome/file.cc', BAD_PATCH, [])]) 190 co.apply_patch([patch.FilePatchDiff('chrome/file.cc', BAD_PATCH, [])])
199 self.fail() 191 self.fail()
200 except checkout.PatchApplicationFailed, e: 192 except checkout.PatchApplicationFailed, e:
201 self.assertEquals(e.filename, 'chrome/file.cc') 193 self.assertEquals(e.filename, 'chrome/file.cc')
202 self.assertEquals(e.status, err_msg) 194 self.assertEquals(e.status, err_msg)
203 195
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 data[name] = item.text 270 data[name] = item.text
279 set_item('author') 271 set_item('author')
280 set_item('msg') 272 set_item('msg')
281 revprops = logentry.find('revprops') 273 revprops = logentry.find('revprops')
282 if revprops != None: 274 if revprops != None:
283 data['revprops'] = [] 275 data['revprops'] = []
284 for prop in revprops.getiterator('property'): 276 for prop in revprops.getiterator('property'):
285 data['revprops'].append((prop.attrib['name'], prop.text)) 277 data['revprops'].append((prop.attrib['name'], prop.text))
286 return data 278 return data
287 279
280 def _check_base(self, co, root, expected):
281 read_only = isinstance(co, checkout.ReadOnlyCheckout)
282 self.assertEquals(not read_only, bool(expected))
283 self.assertEquals(read_only, self.is_read_only)
284 if not read_only:
285 self.FAKE_REPOS.svn_dirty = True
286
287 self.assertEquals(root, co.project_path)
288 self.assertEquals(self.previous_log['revision'], co.prepare(None))
289 self.assertEquals('pouet', co.get_settings('bar'))
290 self.assertTree(self.get_trunk(False), root)
291 patches = self.get_patches()
292 co.apply_patch(patches)
293 self.assertEquals(
294 ['bin_file', 'chrome/file.cc', 'new_dir/subdir/new_file', 'extra'],
295 patches.filenames)
296
297 # Verify that the patch is applied even for read only checkout.
298 self.assertTree(self.get_trunk(True), root)
299 fake_author = self.FAKE_REPOS.USERS[1][0]
300 revision = co.commit(u'msg', fake_author)
301 # Nothing changed.
302 self.assertTree(self.get_trunk(True), root)
303
304 if read_only:
305 self.assertEquals('FAKE', revision)
306 self.assertEquals(self.previous_log['revision'], co.prepare(None))
307 # Changes should be reverted now.
308 self.assertTree(self.get_trunk(False), root)
309 expected = self.previous_log
310 else:
311 self.assertEquals(self.previous_log['revision'] + 1, revision)
312 self.assertEquals(self.previous_log['revision'] + 1, co.prepare(None))
313 self.assertTree(self.get_trunk(True), root)
314 expected = expected.copy()
315 expected['msg'] = 'msg'
316 expected['revision'] = self.previous_log['revision'] + 1
317 expected.setdefault('author', fake_author)
318
319 actual = self._log()
320 self.assertEquals(expected, actual)
321
288 def _test_prepare(self, co): 322 def _test_prepare(self, co):
289 self.assertEquals(1, co.prepare(1)) 323 self.assertEquals(1, co.prepare(1))
290 324
325 def get_trunk(self, modified):
326 tree = {}
327 subroot = 'trunk/'
328 for k, v in self.FAKE_REPOS.svn_revs[-1].iteritems():
329 if k.startswith(subroot):
330 f = k[len(subroot):]
331 assert f not in tree
332 tree[f] = v
333
334 if modified:
335 content_lines = tree['chrome/file.cc'].splitlines(True)
336 tree['chrome/file.cc'] = ''.join(
337 content_lines[0:5] + ['FOO!\n'] + content_lines[5:])
338 del tree['extra']
339 tree['new_dir/subdir/new_file'] = 'A new file\nshould exist.\n'
340 return tree
341
342
343 class GitBaseTest(BaseTest):
344 def setUp(self):
345 super(GitBaseTest, self).setUp()
346 self.enabled = self.FAKE_REPOS.set_up_git()
347 self.assertTrue(self.enabled)
348 self.previous_log = self._log()
349
350 # pylint: disable=W0221
351 def _log(self, log_from_local_repo=False):
352 if log_from_local_repo:
353 repo_root = os.path.join(self.root_dir, self.name)
354 else:
355 repo_root = os.path.join(self.FAKE_REPOS.git_root,
356 self.FAKE_REPOS.TEST_GIT_REPO)
357 out = subprocess2.check_output(
358 ['git',
359 '--git-dir',
360 os.path.join(repo_root, '.git'),
361 'log', '--pretty=format:"%H%x09%ae%x09%ad%x09%s"',
362 '--max-count=1']).strip('"')
363 if out and len(out.split()) != 0:
364 revision = out.split()[0]
365 else:
366 return {'revision': 0}
367
368 return {
369 'revision': revision,
370 'author': out.split()[1],
371 'msg': out.split()[-1],
372 }
373
374 def _check_base(self, co, root, expected):
375 read_only = isinstance(co, checkout.ReadOnlyCheckout)
376 self.assertEquals(read_only, self.is_read_only)
377 if not read_only:
378 self.FAKE_REPOS.git_dirty = True
379
380 self.assertEquals(root, co.project_path)
381 self.assertEquals(self.previous_log['revision'], co.prepare(None))
382 self.assertEquals('pouet', co.get_settings('bar'))
383 self.assertTree(self.get_trunk(False), root)
384 patches = self.get_patches()
385 co.apply_patch(patches)
386 self.assertEquals(
387 ['bin_file', 'chrome/file.cc', 'new_dir/subdir/new_file', 'extra'],
388 patches.filenames)
389
390 # Hackish to verify _branches() internal function.
391 # pylint: disable=W0212
392 self.assertEquals(
393 (['master', 'working_branch'], 'working_branch'),
394 co._branches())
395
396 # Verify that the patch is applied even for read only checkout.
397 self.assertTree(self.get_trunk(True), root)
398 fake_author = self.FAKE_REPOS.USERS[1][0]
399 revision = co.commit(u'msg', fake_author)
400 # Nothing changed.
401 self.assertTree(self.get_trunk(True), root)
402
403 if read_only:
404 self.assertEquals('FAKE', revision)
405 self.assertEquals(self.previous_log['revision'], co.prepare(None))
406 # Changes should be reverted now.
407 self.assertTree(self.get_trunk(False), root)
408 expected = self.previous_log
409 else:
410 self.assertEquals(self._log()['revision'], revision)
411 self.assertEquals(self._log()['revision'], co.prepare(None))
412 self.assertTree(self.get_trunk(True), root)
413 expected = self._log()
414
415 actual = self._log(log_from_local_repo=True)
416 self.assertEquals(expected, actual)
417
418 def get_trunk(self, modified):
419 tree = {}
420 for k, v in self.FAKE_REPOS.git_hashes[
421 self.FAKE_REPOS.TEST_GIT_REPO][1][1].iteritems():
422 assert k not in tree
423 tree[k] = v
424
425 if modified:
426 content_lines = tree['chrome/file.cc'].splitlines(True)
427 tree['chrome/file.cc'] = ''.join(
428 content_lines[0:5] + ['FOO!\n'] + content_lines[5:])
429 tree['bin_file'] = '\x00'
430 del tree['extra']
431 tree['new_dir/subdir/new_file'] = 'A new file\nshould exist.\n'
432 return tree
433
434 def _test_prepare(self, co):
435 print co.prepare(None)
436
437
438 class GitCheckout(GitBaseTest):
439 def _get_co(self, post_processors):
440 self.assertNotEqual(False, post_processors)
441 return checkout.GitCheckout(
442 root_dir=self.root_dir,
443 project_name=self.name,
444 remote_branch='master',
445 git_url=os.path.join(self.FAKE_REPOS.git_root,
446 self.FAKE_REPOS.TEST_GIT_REPO),
447 commit_user=self.usr,
448 post_processors=post_processors)
449
450 def testAll(self):
451 root = os.path.join(self.root_dir, self.name)
452 self._check_base(self._get_co(None), root, None)
453
454 def testException(self):
455 self._check_exception(
456 self._get_co(None),
457 'While running git apply --index -p1;\n fatal: corrupt patch at line '
458 '12\n')
459
460 def testProcess(self):
461 self._test_process(self._get_co)
462
463 def _testPrepare(self):
464 self._test_prepare(self._get_co(None))
465
466 def testMove(self):
467 co = self._get_co(None)
468 self._check_move(co)
469 out = subprocess2.check_output(
470 ['git', 'diff', 'HEAD~', '--name-status'], cwd=co.project_path)
471 out = sorted(out.splitlines())
472 expected = sorted(
473 [
474 'A\tchromeos/views/webui_menu_widget.h',
475 'D\tchromeos/views/DOMui_menu_widget.h',
476 ])
477 self.assertEquals(expected, out)
478
291 479
292 class SvnCheckout(SvnBaseTest): 480 class SvnCheckout(SvnBaseTest):
293 def _get_co(self, post_processors): 481 def _get_co(self, post_processors):
294 self.assertNotEqual(False, post_processors) 482 self.assertNotEqual(False, post_processors)
295 return checkout.SvnCheckout( 483 return checkout.SvnCheckout(
296 self.root_dir, self.name, self.usr, self.pwd, self.svn_url, 484 self.root_dir, self.name, self.usr, self.pwd, self.svn_url,
297 post_processors) 485 post_processors)
298 486
299 def testAll(self): 487 def testAll(self):
300 expected = { 488 expected = {
301 'author': self.FAKE_REPOS.USERS[0][0], 489 'author': self.FAKE_REPOS.USERS[0][0],
302 'revprops': [('realauthor', self.FAKE_REPOS.USERS[1][0])] 490 'revprops': [('realauthor', self.FAKE_REPOS.USERS[1][0])]
303 } 491 }
304 root = os.path.join(self.root_dir, self.name) 492 root = os.path.join(self.root_dir, self.name)
305 self._check_base(self._get_co(None), root, False, expected) 493 self._check_base(self._get_co(None), root, expected)
306 494
307 def testException(self): 495 def testException(self):
308 self._check_exception( 496 self._check_exception(
309 self._get_co(None), 497 self._get_co(None),
310 'While running patch -p1 --forward --force --no-backup-if-mismatch;\n' 498 'While running patch -p1 --forward --force --no-backup-if-mismatch;\n'
311 ' patching file chrome/file.cc\n' 499 ' patching file chrome/file.cc\n'
312 ' Hunk #1 FAILED at 3.\n' 500 ' Hunk #1 FAILED at 3.\n'
313 ' 1 out of 1 hunk FAILED -- saving rejects to file ' 501 ' 1 out of 1 hunk FAILED -- saving rejects to file '
314 'chrome/file.cc.rej\n') 502 'chrome/file.cc.rej\n')
315 503
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 538
351 def testWithRevPropsSupport(self): 539 def testWithRevPropsSupport(self):
352 # Add the hook that will commit in a way that removes the race condition. 540 # Add the hook that will commit in a way that removes the race condition.
353 hook = os.path.join(self.FAKE_REPOS.svn_repo, 'hooks', 'pre-commit') 541 hook = os.path.join(self.FAKE_REPOS.svn_repo, 'hooks', 'pre-commit')
354 shutil.copyfile(os.path.join(ROOT_DIR, 'sample_pre_commit_hook'), hook) 542 shutil.copyfile(os.path.join(ROOT_DIR, 'sample_pre_commit_hook'), hook)
355 os.chmod(hook, 0755) 543 os.chmod(hook, 0755)
356 expected = { 544 expected = {
357 'revprops': [('commit-bot', 'user1@example.com')], 545 'revprops': [('commit-bot', 'user1@example.com')],
358 } 546 }
359 root = os.path.join(self.root_dir, self.name) 547 root = os.path.join(self.root_dir, self.name)
360 self._check_base(self._get_co(None), root, False, expected) 548 self._check_base(self._get_co(None), root, expected)
361 549
362 def testWithRevPropsSupportNotCommitBot(self): 550 def testWithRevPropsSupportNotCommitBot(self):
363 # Add the hook that will commit in a way that removes the race condition. 551 # Add the hook that will commit in a way that removes the race condition.
364 hook = os.path.join(self.FAKE_REPOS.svn_repo, 'hooks', 'pre-commit') 552 hook = os.path.join(self.FAKE_REPOS.svn_repo, 'hooks', 'pre-commit')
365 shutil.copyfile(os.path.join(ROOT_DIR, 'sample_pre_commit_hook'), hook) 553 shutil.copyfile(os.path.join(ROOT_DIR, 'sample_pre_commit_hook'), hook)
366 os.chmod(hook, 0755) 554 os.chmod(hook, 0755)
367 co = checkout.SvnCheckout( 555 co = checkout.SvnCheckout(
368 self.root_dir, self.name, 556 self.root_dir, self.name,
369 self.FAKE_REPOS.USERS[1][0], self.FAKE_REPOS.USERS[1][1], 557 self.FAKE_REPOS.USERS[1][0], self.FAKE_REPOS.USERS[1][1],
370 self.svn_url) 558 self.svn_url)
371 root = os.path.join(self.root_dir, self.name) 559 root = os.path.join(self.root_dir, self.name)
372 expected = { 560 expected = {
373 'author': self.FAKE_REPOS.USERS[1][0], 561 'author': self.FAKE_REPOS.USERS[1][0],
374 } 562 }
375 self._check_base(co, root, False, expected) 563 self._check_base(co, root, expected)
376 564
377 def testAutoProps(self): 565 def testAutoProps(self):
378 co = self._get_co(None) 566 co = self._get_co(None)
379 co.svn_config = checkout.SvnConfig( 567 co.svn_config = checkout.SvnConfig(
380 os.path.join(ROOT_DIR, 'subversion_config')) 568 os.path.join(ROOT_DIR, 'subversion_config'))
381 co.prepare(None) 569 co.prepare(None)
382 patches = self.get_patches() 570 patches = self.get_patches()
383 co.apply_patch(patches) 571 co.apply_patch(patches)
384 self.assertEquals( 572 self.assertEquals(
385 ['bin_file', 'chrome/file.cc', 'new_dir/subdir/new_file', 'extra'], 573 ['bin_file', 'chrome/file.cc', 'new_dir/subdir/new_file', 'extra'],
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 693
506 def _get_co(self, post_processors): 694 def _get_co(self, post_processors):
507 self.assertNotEqual(False, post_processors) 695 self.assertNotEqual(False, post_processors)
508 return checkout.ReadOnlyCheckout( 696 return checkout.ReadOnlyCheckout(
509 checkout.SvnCheckout( 697 checkout.SvnCheckout(
510 self.root_dir, self.name, None, None, self.svn_url, None), 698 self.root_dir, self.name, None, None, self.svn_url, None),
511 post_processors) 699 post_processors)
512 700
513 def testAll(self): 701 def testAll(self):
514 root = os.path.join(self.root_dir, self.name) 702 root = os.path.join(self.root_dir, self.name)
515 self._check_base(self._get_co(None), root, False, None) 703 self._check_base(self._get_co(None), root, None)
516 704
517 def testException(self): 705 def testException(self):
518 self._check_exception( 706 self._check_exception(
519 self._get_co(None), 707 self._get_co(None),
520 'While running patch -p1 --forward --force --no-backup-if-mismatch;\n' 708 'While running patch -p1 --forward --force --no-backup-if-mismatch;\n'
521 ' patching file chrome/file.cc\n' 709 ' patching file chrome/file.cc\n'
522 ' Hunk #1 FAILED at 3.\n' 710 ' Hunk #1 FAILED at 3.\n'
523 ' 1 out of 1 hunk FAILED -- saving rejects to file ' 711 ' 1 out of 1 hunk FAILED -- saving rejects to file '
524 'chrome/file.cc.rej\n') 712 'chrome/file.cc.rej\n')
525 713
(...skipping 11 matching lines...) Expand all
537 if '-v' in sys.argv: 725 if '-v' in sys.argv:
538 DEBUGGING = True 726 DEBUGGING = True
539 logging.basicConfig( 727 logging.basicConfig(
540 level=logging.DEBUG, 728 level=logging.DEBUG,
541 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s') 729 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s')
542 else: 730 else:
543 logging.basicConfig( 731 logging.basicConfig(
544 level=logging.ERROR, 732 level=logging.ERROR,
545 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s') 733 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s')
546 unittest.main() 734 unittest.main()
OLDNEW
« checkout.py ('K') | « checkout.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698