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

Side by Side Diff: tests/checkout_test.py

Issue 6995115: Make prepare() accept a revision argument. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 9 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
« 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) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 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 from __future__ import with_statement 8 from __future__ import with_statement
9 import logging 9 import logging
10 import os 10 import os
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 tree['new_dir/subdir/new_file'] = 'A new file\nshould exist.\n' 174 tree['new_dir/subdir/new_file'] = 'A new file\nshould exist.\n'
175 return tree 175 return tree
176 176
177 def _check_base(self, co, root, git, expected): 177 def _check_base(self, co, root, git, expected):
178 read_only = isinstance(co, checkout.ReadOnlyCheckout) 178 read_only = isinstance(co, checkout.ReadOnlyCheckout)
179 assert not read_only == bool(expected) 179 assert not read_only == bool(expected)
180 if not read_only: 180 if not read_only:
181 self.FAKE_REPOS.svn_dirty = True 181 self.FAKE_REPOS.svn_dirty = True
182 182
183 self.assertEquals(root, co.project_path) 183 self.assertEquals(root, co.project_path)
184 self.assertEquals(self.previous_log['revision'], co.prepare()) 184 self.assertEquals(self.previous_log['revision'], co.prepare(None))
185 self.assertEquals('pouet', co.get_settings('bar')) 185 self.assertEquals('pouet', co.get_settings('bar'))
186 self.assertTree(self.get_trunk(False), root) 186 self.assertTree(self.get_trunk(False), root)
187 patches = self.get_patches() 187 patches = self.get_patches()
188 co.apply_patch(patches) 188 co.apply_patch(patches)
189 self.assertEquals( 189 self.assertEquals(
190 ['bin_file', 'extra', 'new_dir/subdir/new_file', 'svn_utils_test.txt'], 190 ['bin_file', 'extra', 'new_dir/subdir/new_file', 'svn_utils_test.txt'],
191 sorted(patches.filenames)) 191 sorted(patches.filenames))
192 192
193 if git: 193 if git:
194 # Hackish to verify _branches() internal function. 194 # Hackish to verify _branches() internal function.
195 # pylint: disable=W0212 195 # pylint: disable=W0212
196 self.assertEquals( 196 self.assertEquals(
197 (['master', 'working_branch'], 'working_branch'), 197 (['master', 'working_branch'], 'working_branch'),
198 co.checkout._branches()) 198 co.checkout._branches())
199 199
200 # Verify that the patch is applied even for read only checkout. 200 # Verify that the patch is applied even for read only checkout.
201 self.assertTree(self.get_trunk(True), root) 201 self.assertTree(self.get_trunk(True), root)
202 fake_author = self.FAKE_REPOS.USERS[1][0] 202 fake_author = self.FAKE_REPOS.USERS[1][0]
203 revision = co.commit(u'msg', fake_author) 203 revision = co.commit(u'msg', fake_author)
204 # Nothing changed. 204 # Nothing changed.
205 self.assertTree(self.get_trunk(True), root) 205 self.assertTree(self.get_trunk(True), root)
206 206
207 if read_only: 207 if read_only:
208 self.assertEquals('FAKE', revision) 208 self.assertEquals('FAKE', revision)
209 self.assertEquals(self.previous_log['revision'], co.prepare()) 209 self.assertEquals(self.previous_log['revision'], co.prepare(None))
210 # Changes should be reverted now. 210 # Changes should be reverted now.
211 self.assertTree(self.get_trunk(False), root) 211 self.assertTree(self.get_trunk(False), root)
212 expected = self.previous_log 212 expected = self.previous_log
213 else: 213 else:
214 self.assertEquals(self.previous_log['revision'] + 1, revision) 214 self.assertEquals(self.previous_log['revision'] + 1, revision)
215 self.assertEquals(self.previous_log['revision'] + 1, co.prepare()) 215 self.assertEquals(self.previous_log['revision'] + 1, co.prepare(None))
216 self.assertTree(self.get_trunk(True), root) 216 self.assertTree(self.get_trunk(True), root)
217 expected = expected.copy() 217 expected = expected.copy()
218 expected['msg'] = 'msg' 218 expected['msg'] = 'msg'
219 expected['revision'] = self.previous_log['revision'] + 1 219 expected['revision'] = self.previous_log['revision'] + 1
220 expected.setdefault('author', fake_author) 220 expected.setdefault('author', fake_author)
221 221
222 actual = self._log() 222 actual = self._log()
223 self.assertEquals(expected, actual) 223 self.assertEquals(expected, actual)
224 224
225 def _check_exception(self, co, err_msg): 225 def _check_exception(self, co, err_msg):
226 co.prepare() 226 co.prepare(None)
227 try: 227 try:
228 co.apply_patch([patch.FilePatchDiff('svn_utils_test.txt', BAD_PATCH, [])]) 228 co.apply_patch([patch.FilePatchDiff('svn_utils_test.txt', BAD_PATCH, [])])
229 self.fail() 229 self.fail()
230 except checkout.PatchApplicationFailed, e: 230 except checkout.PatchApplicationFailed, e:
231 self.assertEquals(e.filename, 'svn_utils_test.txt') 231 self.assertEquals(e.filename, 'svn_utils_test.txt')
232 self.assertEquals(e.status, err_msg) 232 self.assertEquals(e.status, err_msg)
233 233
234 def _log(self): 234 def _log(self):
235 raise NotImplementedError() 235 raise NotImplementedError()
236 236
237 def _test_process(self, co): 237 def _test_process(self, co):
238 """Makes sure the process lambda is called correctly.""" 238 """Makes sure the process lambda is called correctly."""
239 co.post_processors = [lambda *args: results.append(args)] 239 co.post_processors = [lambda *args: results.append(args)]
240 co.prepare() 240 co.prepare(None)
241 ps = self.get_patches() 241 ps = self.get_patches()
242 results = [] 242 results = []
243 co.apply_patch(ps) 243 co.apply_patch(ps)
244 expected = [(co, p) for p in ps.patches] 244 expected = [(co, p) for p in ps.patches]
245 self.assertEquals(expected, results) 245 self.assertEquals(expected, results)
246 246
247 247
248 class SvnBaseTest(BaseTest): 248 class SvnBaseTest(BaseTest):
249 def setUp(self): 249 def setUp(self):
250 super(SvnBaseTest, self).setUp() 250 super(SvnBaseTest, self).setUp()
(...skipping 23 matching lines...) Expand all
274 data[name] = item.text 274 data[name] = item.text
275 set_item('author') 275 set_item('author')
276 set_item('msg') 276 set_item('msg')
277 revprops = logentry.find('revprops') 277 revprops = logentry.find('revprops')
278 if revprops != None: 278 if revprops != None:
279 data['revprops'] = [] 279 data['revprops'] = []
280 for prop in revprops.getiterator('property'): 280 for prop in revprops.getiterator('property'):
281 data['revprops'].append((prop.attrib['name'], prop.text)) 281 data['revprops'].append((prop.attrib['name'], prop.text))
282 return data 282 return data
283 283
284 def _test_prepare(self, co):
285 self.assertEquals(1, co.prepare(1))
286
284 287
285 class SvnCheckout(SvnBaseTest): 288 class SvnCheckout(SvnBaseTest):
286 def _get_co(self, read_only): 289 def _get_co(self, read_only):
287 if read_only: 290 if read_only:
288 return checkout.ReadOnlyCheckout( 291 return checkout.ReadOnlyCheckout(
289 checkout.SvnCheckout( 292 checkout.SvnCheckout(
290 self.root_dir, self.name, None, None, self.svn_url)) 293 self.root_dir, self.name, None, None, self.svn_url))
291 else: 294 else:
292 return checkout.SvnCheckout( 295 return checkout.SvnCheckout(
293 self.root_dir, self.name, self.usr, self.pwd, self.svn_url) 296 self.root_dir, self.name, self.usr, self.pwd, self.svn_url)
(...skipping 16 matching lines...) Expand all
310 self._check_exception( 313 self._check_exception(
311 self._get_co(True), 314 self._get_co(True),
312 'While running patch -p1 --forward --force;\n' 315 'While running patch -p1 --forward --force;\n'
313 'patching file svn_utils_test.txt\n' 316 'patching file svn_utils_test.txt\n'
314 'Hunk #1 FAILED at 3.\n' 317 'Hunk #1 FAILED at 3.\n'
315 '1 out of 1 hunk FAILED -- saving rejects to file ' 318 '1 out of 1 hunk FAILED -- saving rejects to file '
316 'svn_utils_test.txt.rej\n') 319 'svn_utils_test.txt.rej\n')
317 320
318 def testSvnProps(self): 321 def testSvnProps(self):
319 co = self._get_co(False) 322 co = self._get_co(False)
320 co.prepare() 323 co.prepare(None)
321 try: 324 try:
322 # svn:ignore can only be applied to directories. 325 # svn:ignore can only be applied to directories.
323 svn_props = [('svn:ignore', 'foo')] 326 svn_props = [('svn:ignore', 'foo')]
324 co.apply_patch( 327 co.apply_patch(
325 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)]) 328 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)])
326 self.fail() 329 self.fail()
327 except checkout.PatchApplicationFailed, e: 330 except checkout.PatchApplicationFailed, e:
328 self.assertEquals(e.filename, 'svn_utils_test.txt') 331 self.assertEquals(e.filename, 'svn_utils_test.txt')
329 self.assertEquals( 332 self.assertEquals(
330 e.status, 333 e.status,
331 'While running svn propset svn:ignore foo svn_utils_test.txt ' 334 'While running svn propset svn:ignore foo svn_utils_test.txt '
332 '--non-interactive;\n' 335 '--non-interactive;\n'
333 'patching file svn_utils_test.txt\n' 336 'patching file svn_utils_test.txt\n'
334 'svn: Cannot set \'svn:ignore\' on a file (\'svn_utils_test.txt\')\n') 337 'svn: Cannot set \'svn:ignore\' on a file (\'svn_utils_test.txt\')\n')
335 co.prepare() 338 co.prepare(None)
336 svn_props = [('svn:eol-style', 'LF'), ('foo', 'bar')] 339 svn_props = [('svn:eol-style', 'LF'), ('foo', 'bar')]
337 co.apply_patch( 340 co.apply_patch(
338 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)]) 341 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)])
339 filepath = os.path.join(self.root_dir, self.name, 'svn_utils_test.txt') 342 filepath = os.path.join(self.root_dir, self.name, 'svn_utils_test.txt')
340 # Manually verify the properties. 343 # Manually verify the properties.
341 props = subprocess2.check_output( 344 props = subprocess2.check_output(
342 ['svn', 'proplist', filepath], 345 ['svn', 'proplist', filepath],
343 cwd=self.root_dir).splitlines()[1:] 346 cwd=self.root_dir).splitlines()[1:]
344 props = sorted(p.strip() for p in props) 347 props = sorted(p.strip() for p in props)
345 expected_props = dict(svn_props) 348 expected_props = dict(svn_props)
(...skipping 26 matching lines...) Expand all
372 root = os.path.join(self.root_dir, self.name) 375 root = os.path.join(self.root_dir, self.name)
373 expected = { 376 expected = {
374 'author': self.FAKE_REPOS.USERS[1][0], 377 'author': self.FAKE_REPOS.USERS[1][0],
375 } 378 }
376 self._check_base(co, root, False, expected) 379 self._check_base(co, root, False, expected)
377 380
378 def testAutoProps(self): 381 def testAutoProps(self):
379 co = self._get_co(False) 382 co = self._get_co(False)
380 co.svn_config = checkout.SvnConfig( 383 co.svn_config = checkout.SvnConfig(
381 os.path.join(ROOT_DIR, 'subversion_config')) 384 os.path.join(ROOT_DIR, 'subversion_config'))
382 co.prepare() 385 co.prepare(None)
383 patches = self.get_patches() 386 patches = self.get_patches()
384 co.apply_patch(patches) 387 co.apply_patch(patches)
385 self.assertEquals( 388 self.assertEquals(
386 ['bin_file', 'extra', 'new_dir/subdir/new_file', 'svn_utils_test.txt'], 389 ['bin_file', 'extra', 'new_dir/subdir/new_file', 'svn_utils_test.txt'],
387 sorted(patches.filenames)) 390 sorted(patches.filenames))
388 # *.txt = svn:eol-style=LF in subversion_config/config. 391 # *.txt = svn:eol-style=LF in subversion_config/config.
389 out = subprocess2.check_output( 392 out = subprocess2.check_output(
390 ['svn', 'pget', 'svn:eol-style', 'svn_utils_test.txt'], 393 ['svn', 'pget', 'svn:eol-style', 'svn_utils_test.txt'],
391 cwd=co.project_path) 394 cwd=co.project_path)
392 self.assertEquals('LF\n', out) 395 self.assertEquals('LF\n', out)
393 396
394 def testProcess(self): 397 def testProcess(self):
395 co = checkout.SvnCheckout( 398 co = checkout.SvnCheckout(
396 self.root_dir, self.name, 399 self.root_dir, self.name,
397 None, None, 400 None, None,
398 self.svn_url) 401 self.svn_url)
399 self._test_process(co) 402 self._test_process(co)
400 403
404 def testPrepare(self):
405 co = checkout.SvnCheckout(
406 self.root_dir, self.name,
407 None, None,
408 self.svn_url)
409 self._test_prepare(co)
410
401 411
402 class GitSvnCheckout(SvnBaseTest): 412 class GitSvnCheckout(SvnBaseTest):
403 name = 'foo.git' 413 name = 'foo.git'
404 414
405 def _get_co(self, read_only): 415 def _get_co(self, read_only):
406 co = checkout.GitSvnCheckout( 416 co = checkout.GitSvnCheckout(
407 self.root_dir, self.name[:-4], 417 self.root_dir, self.name[:-4],
408 self.usr, self.pwd, 418 self.usr, self.pwd,
409 self.svn_base, self.svn_trunk) 419 self.svn_base, self.svn_trunk)
410 if read_only: 420 if read_only:
(...skipping 12 matching lines...) Expand all
423 433
424 def testAllRW(self): 434 def testAllRW(self):
425 expected = { 435 expected = {
426 'author': self.FAKE_REPOS.USERS[0][0], 436 'author': self.FAKE_REPOS.USERS[0][0],
427 } 437 }
428 self._check(False, expected) 438 self._check(False, expected)
429 439
430 def testGitSvnPremade(self): 440 def testGitSvnPremade(self):
431 # Test premade git-svn clone. First make a git-svn clone. 441 # Test premade git-svn clone. First make a git-svn clone.
432 git_svn_co = self._get_co(True) 442 git_svn_co = self._get_co(True)
433 revision = git_svn_co.prepare() 443 revision = git_svn_co.prepare(None)
434 self.assertEquals(self.previous_log['revision'], revision) 444 self.assertEquals(self.previous_log['revision'], revision)
435 # Then use GitSvnClone to clone it to lose the git-svn connection and verify 445 # Then use GitSvnClone to clone it to lose the git-svn connection and verify
436 # git svn init / git svn fetch works. 446 # git svn init / git svn fetch works.
437 git_svn_clone = checkout.GitSvnPremadeCheckout( 447 git_svn_clone = checkout.GitSvnPremadeCheckout(
438 self.root_dir, self.name[:-4] + '2', 'trunk', 448 self.root_dir, self.name[:-4] + '2', 'trunk',
439 self.usr, self.pwd, 449 self.usr, self.pwd,
440 self.svn_base, self.svn_trunk, git_svn_co.project_path) 450 self.svn_base, self.svn_trunk, git_svn_co.project_path)
441 self.assertEquals(self.previous_log['revision'], git_svn_clone.prepare()) 451 self.assertEquals(
452 self.previous_log['revision'], git_svn_clone.prepare(None))
442 453
443 def testException(self): 454 def testException(self):
444 self._check_exception( 455 self._check_exception(
445 self._get_co(True), 'fatal: corrupt patch at line 12\n') 456 self._get_co(True), 'fatal: corrupt patch at line 12\n')
446 457
447 def testSvnProps(self): 458 def testSvnProps(self):
448 co = self._get_co(False) 459 co = self._get_co(False)
449 co.prepare() 460 co.prepare(None)
450 try: 461 try:
451 svn_props = [('foo', 'bar')] 462 svn_props = [('foo', 'bar')]
452 co.apply_patch( 463 co.apply_patch(
453 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)]) 464 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)])
454 self.fail() 465 self.fail()
455 except patch.UnsupportedPatchFormat, e: 466 except patch.UnsupportedPatchFormat, e:
456 self.assertEquals(e.filename, 'svn_utils_test.txt') 467 self.assertEquals(e.filename, 'svn_utils_test.txt')
457 self.assertEquals( 468 self.assertEquals(
458 e.status, 469 e.status,
459 'Cannot apply svn property foo to file svn_utils_test.txt.') 470 'Cannot apply svn property foo to file svn_utils_test.txt.')
460 co.prepare() 471 co.prepare(None)
461 # svn:eol-style is ignored. 472 # svn:eol-style is ignored.
462 svn_props = [('svn:eol-style', 'LF')] 473 svn_props = [('svn:eol-style', 'LF')]
463 co.apply_patch( 474 co.apply_patch(
464 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)]) 475 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)])
465 476
466 def testProcess(self): 477 def testProcess(self):
467 co = checkout.SvnCheckout( 478 co = checkout.SvnCheckout(
468 self.root_dir, self.name, 479 self.root_dir, self.name,
469 None, None, 480 None, None,
470 self.svn_url) 481 self.svn_url)
471 self._test_process(co) 482 self._test_process(co)
472 483
484 def testPrepare(self):
485 co = checkout.SvnCheckout(
486 self.root_dir, self.name,
487 None, None,
488 self.svn_url)
489 self._test_prepare(co)
490
473 491
474 class RawCheckout(SvnBaseTest): 492 class RawCheckout(SvnBaseTest):
475 def setUp(self): 493 def setUp(self):
476 super(RawCheckout, self).setUp() 494 super(RawCheckout, self).setUp()
477 # Use a svn checkout as the base. 495 # Use a svn checkout as the base.
478 self.base_co = checkout.SvnCheckout( 496 self.base_co = checkout.SvnCheckout(
479 self.root_dir, self.name, None, None, self.svn_url) 497 self.root_dir, self.name, None, None, self.svn_url)
480 self.base_co.prepare() 498 self.base_co.prepare(None)
481 499
482 def _get_co(self, read_only): 500 def _get_co(self, read_only):
483 co = checkout.RawCheckout(self.root_dir, self.name, None) 501 co = checkout.RawCheckout(self.root_dir, self.name, None)
484 if read_only: 502 if read_only:
485 return checkout.ReadOnlyCheckout(co) 503 return checkout.ReadOnlyCheckout(co)
486 return co 504 return co
487 505
488 def _check(self, read_only): 506 def _check(self, read_only):
489 root = os.path.join(self.root_dir, self.name) 507 root = os.path.join(self.root_dir, self.name)
490 co = self._get_co(read_only) 508 co = self._get_co(read_only)
491 509
492 # A copy of BaseTest._check_base() 510 # A copy of BaseTest._check_base()
493 self.assertEquals(root, co.project_path) 511 self.assertEquals(root, co.project_path)
494 self.assertEquals(None, co.prepare()) 512 self.assertEquals(None, co.prepare(None))
495 self.assertEquals('pouet', co.get_settings('bar')) 513 self.assertEquals('pouet', co.get_settings('bar'))
496 self.assertTree(self.get_trunk(False), root) 514 self.assertTree(self.get_trunk(False), root)
497 patches = self.get_patches() 515 patches = self.get_patches()
498 co.apply_patch(patches) 516 co.apply_patch(patches)
499 self.assertEquals( 517 self.assertEquals(
500 ['bin_file', 'extra', 'new_dir/subdir/new_file', 'svn_utils_test.txt'], 518 ['bin_file', 'extra', 'new_dir/subdir/new_file', 'svn_utils_test.txt'],
501 sorted(patches.filenames)) 519 sorted(patches.filenames))
502 520
503 # Verify that the patch is applied even for read only checkout. 521 # Verify that the patch is applied even for read only checkout.
504 self.assertTree(self.get_trunk(True), root) 522 self.assertTree(self.get_trunk(True), root)
505 if read_only: 523 if read_only:
506 revision = co.commit(u'msg', self.FAKE_REPOS.USERS[1][0]) 524 revision = co.commit(u'msg', self.FAKE_REPOS.USERS[1][0])
507 self.assertEquals('FAKE', revision) 525 self.assertEquals('FAKE', revision)
508 else: 526 else:
509 try: 527 try:
510 co.commit(u'msg', self.FAKE_REPOS.USERS[1][0]) 528 co.commit(u'msg', self.FAKE_REPOS.USERS[1][0])
511 self.fail() 529 self.fail()
512 except NotImplementedError: 530 except NotImplementedError:
513 pass 531 pass
514 self.assertTree(self.get_trunk(True), root) 532 self.assertTree(self.get_trunk(True), root)
515 # Verify that prepare() is a no-op. 533 # Verify that prepare() is a no-op.
516 self.assertEquals(None, co.prepare()) 534 self.assertEquals(None, co.prepare(None))
517 self.assertTree(self.get_trunk(True), root) 535 self.assertTree(self.get_trunk(True), root)
518 536
519 def testAllRW(self): 537 def testAllRW(self):
520 self._check(False) 538 self._check(False)
521 539
522 def testAllRO(self): 540 def testAllRO(self):
523 self._check(True) 541 self._check(True)
524 542
525 def testException(self): 543 def testException(self):
526 self._check_exception( 544 self._check_exception(
527 self._get_co(True), 545 self._get_co(True),
528 'patching file svn_utils_test.txt\n' 546 'patching file svn_utils_test.txt\n'
529 'Hunk #1 FAILED at 3.\n' 547 'Hunk #1 FAILED at 3.\n'
530 '1 out of 1 hunk FAILED -- saving rejects to file ' 548 '1 out of 1 hunk FAILED -- saving rejects to file '
531 'svn_utils_test.txt.rej\n') 549 'svn_utils_test.txt.rej\n')
532 550
533 def testProcess(self): 551 def testProcess(self):
534 co = checkout.SvnCheckout( 552 co = checkout.SvnCheckout(
535 self.root_dir, self.name, 553 self.root_dir, self.name,
536 None, None, 554 None, None,
537 self.svn_url) 555 self.svn_url)
538 self._test_process(co) 556 self._test_process(co)
539 557
558 def testPrepare(self):
559 co = checkout.SvnCheckout(
560 self.root_dir, self.name,
561 None, None,
562 self.svn_url)
563 self._test_prepare(co)
564
540 565
541 if __name__ == '__main__': 566 if __name__ == '__main__':
542 if '-v' in sys.argv: 567 if '-v' in sys.argv:
543 DEBUGGING = True 568 DEBUGGING = True
544 logging.basicConfig( 569 logging.basicConfig(
545 level=logging.DEBUG, 570 level=logging.DEBUG,
546 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s') 571 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s')
547 else: 572 else:
548 logging.basicConfig( 573 logging.basicConfig(
549 level=logging.ERROR, 574 level=logging.ERROR,
550 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s') 575 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s')
551 unittest.main() 576 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