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

Side by Side Diff: tests/git_common_test.py

Issue 288323002: Make marked merge base invalid when the upstream changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 6 years, 7 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
« git_reparent_branch.py ('K') | « git_reparent_branch.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 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 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 git_common.py""" 6 """Unit tests for git_common.py"""
7 7
8 import binascii 8 import binascii
9 import collections 9 import collections
10 import os 10 import os
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 368
369 369
370 class GitMutableStructuredTest(git_test_utils.GitRepoReadWriteTestBase, 370 class GitMutableStructuredTest(git_test_utils.GitRepoReadWriteTestBase,
371 GitCommonTestBase): 371 GitCommonTestBase):
372 REPO_SCHEMA = """ 372 REPO_SCHEMA = """
373 A B C D E F G 373 A B C D E F G
374 B H I J K 374 B H I J K
375 J L 375 J L
376 376
377 X Y Z 377 X Y Z
378
379 CAT DOG
378 """ 380 """
379 381
380 COMMIT_B = {'file': {'data': 'B'}} 382 COMMIT_B = {'file': {'data': 'B'}}
381 COMMIT_H = {'file': {'data': 'H'}} 383 COMMIT_H = {'file': {'data': 'H'}}
382 COMMIT_I = {'file': {'data': 'I'}} 384 COMMIT_I = {'file': {'data': 'I'}}
383 COMMIT_J = {'file': {'data': 'J'}} 385 COMMIT_J = {'file': {'data': 'J'}}
384 COMMIT_K = {'file': {'data': 'K'}} 386 COMMIT_K = {'file': {'data': 'K'}}
385 COMMIT_L = {'file': {'data': 'L'}} 387 COMMIT_L = {'file': {'data': 'L'}}
386 388
387 def setUp(self): 389 def setUp(self):
388 super(GitMutableStructuredTest, self).setUp() 390 super(GitMutableStructuredTest, self).setUp()
389 self.repo.git('branch', '--set-upstream-to', 'root_X', 'branch_Z') 391 self.repo.git('branch', '--set-upstream-to', 'root_X', 'branch_Z')
390 self.repo.git('branch', '--set-upstream-to', 'branch_G', 'branch_K') 392 self.repo.git('branch', '--set-upstream-to', 'branch_G', 'branch_K')
391 self.repo.git('branch', '--set-upstream-to', 'branch_K', 'branch_L') 393 self.repo.git('branch', '--set-upstream-to', 'branch_K', 'branch_L')
392 self.repo.git('branch', '--set-upstream-to', 'root_A', 'branch_G') 394 self.repo.git('branch', '--set-upstream-to', 'root_A', 'branch_G')
393 self.repo.git('branch', '--set-upstream-to', 'root_X', 'root_A') 395 self.repo.git('branch', '--set-upstream-to', 'root_X', 'root_A')
394 396
395 def testTooManyBranches(self): 397 def testTooManyBranches(self):
396 for i in xrange(30): 398 for i in xrange(30):
397 self.repo.git('branch', 'a'*i) 399 self.repo.git('branch', 'a'*i)
398 400
399 with self.assertRaises(SystemExit): 401 _, rslt = self.repo.capture_stdio(list, self.gc.branches())
400 self.repo.run(list, self.gc.branches()) 402 self.assertIn('too many branches (39/20)', rslt)
iannucci 2014/05/15 22:20:17 these were printing output during the test executi
401 403
402 self.repo.git('config', 'depot-tools.branch-limit', 'cat') 404 self.repo.git('config', 'depot-tools.branch-limit', 'cat')
403 405
404 with self.assertRaises(SystemExit): 406 _, rslt = self.repo.capture_stdio(list, self.gc.branches())
405 self.repo.run(list, self.gc.branches()) 407 self.assertIn('too many branches (39/20)', rslt)
406 408
407 self.repo.git('config', 'depot-tools.branch-limit', '100') 409 self.repo.git('config', 'depot-tools.branch-limit', '100')
408 410
409 # should not raise 411 # should not raise
410 self.assertEqual(36, len(self.repo.run(list, self.gc.branches()))) 412 self.assertEqual(38, len(self.repo.run(list, self.gc.branches())))
411 413
412 def testMergeBase(self): 414 def testMergeBase(self):
413 self.repo.git('checkout', 'branch_K') 415 self.repo.git('checkout', 'branch_K')
414 416
415 self.assertEqual( 417 self.assertEqual(
416 self.repo['B'], 418 self.repo['B'],
417 self.repo.run(self.gc.get_or_create_merge_base, 'branch_K', 'branch_G') 419 self.repo.run(self.gc.get_or_create_merge_base, 'branch_K', 'branch_G')
418 ) 420 )
419 421
420 self.assertEqual( 422 self.assertEqual(
421 self.repo['J'], 423 self.repo['J'],
422 self.repo.run(self.gc.get_or_create_merge_base, 'branch_L', 'branch_K') 424 self.repo.run(self.gc.get_or_create_merge_base, 'branch_L', 'branch_K')
423 ) 425 )
424 426
425 self.assertEqual( 427 self.assertEqual(
426 self.repo['B'], self.repo.run(self.gc.config, 'branch.branch_K.base') 428 self.repo['B'], self.repo.run(self.gc.config, 'branch.branch_K.base')
427 ) 429 )
430 self.assertEqual(
431 'branch_G', self.repo.run(self.gc.config, 'branch.branch_K.base-upstream')
432 )
428 433
429 # deadbeef is a bad hash, so this will result in repo['B'] 434 # deadbeef is a bad hash, so this will result in repo['B']
430 self.repo.run(self.gc.manual_merge_base, 'branch_K', 'deadbeef') 435 self.repo.run(self.gc.manual_merge_base, 'branch_K', 'deadbeef', 'branch_G')
431 436
432 self.assertEqual( 437 self.assertEqual(
433 self.repo['B'], 438 self.repo['B'],
434 self.repo.run(self.gc.get_or_create_merge_base, 'branch_K', 'branch_G') 439 self.repo.run(self.gc.get_or_create_merge_base, 'branch_K', 'branch_G')
435 ) 440 )
436 441
437 # but if we pick a real ancestor, then it'll work 442 # but if we pick a real ancestor, then it'll work
438 self.repo.run(self.gc.manual_merge_base, 'branch_K', self.repo['I']) 443 self.repo.run(self.gc.manual_merge_base, 'branch_K', self.repo['I'],
444 'branch_G')
439 445
440 self.assertEqual( 446 self.assertEqual(
441 self.repo['I'], 447 self.repo['I'],
442 self.repo.run(self.gc.get_or_create_merge_base, 'branch_K', 'branch_G') 448 self.repo.run(self.gc.get_or_create_merge_base, 'branch_K', 'branch_G')
443 ) 449 )
444 450
445 self.assertEqual({'branch_K': self.repo['I'], 'branch_L': self.repo['J']}, 451 self.assertEqual({'branch_K': self.repo['I'], 'branch_L': self.repo['J']},
446 self.repo.run(self.gc.branch_config_map, 'base')) 452 self.repo.run(self.gc.branch_config_map, 'base'))
447 453
448 self.repo.run(self.gc.remove_merge_base, 'branch_K') 454 self.repo.run(self.gc.remove_merge_base, 'branch_K')
449 self.repo.run(self.gc.remove_merge_base, 'branch_L') 455 self.repo.run(self.gc.remove_merge_base, 'branch_L')
450 456
451 self.assertEqual(None, 457 self.assertEqual(None,
452 self.repo.run(self.gc.config, 'branch.branch_K.base')) 458 self.repo.run(self.gc.config, 'branch.branch_K.base'))
453 459
454 self.assertEqual({}, self.repo.run(self.gc.branch_config_map, 'base')) 460 self.assertEqual({}, self.repo.run(self.gc.branch_config_map, 'base'))
455 461
456 # if it's too old, then it caps at merge-base 462 # if it's too old, then it caps at merge-base
457 self.repo.run(self.gc.manual_merge_base, 'branch_K', self.repo['A']) 463 self.repo.run(self.gc.manual_merge_base, 'branch_K', self.repo['A'],
464 'branch_G')
458 465
459 self.assertEqual( 466 self.assertEqual(
460 self.repo['B'], 467 self.repo['B'],
461 self.repo.run(self.gc.get_or_create_merge_base, 'branch_K', 'branch_G') 468 self.repo.run(self.gc.get_or_create_merge_base, 'branch_K', 'branch_G')
462 ) 469 )
463 470
471 # If the user does --set-upstream-to something else, then we discard the
472 # base and recompute it.
473 self.repo.run(self.gc.run, 'branch', '-u', 'root_A')
474 self.assertEqual(
475 self.repo['A'],
476 self.repo.run(self.gc.get_or_create_merge_base, 'branch_K')
477 )
478
479 self.assertIsNone(
480 self.repo.run(self.gc.get_or_create_merge_base, 'branch_DOG'))
481
464 def testGetBranchTree(self): 482 def testGetBranchTree(self):
465 skipped, tree = self.repo.run(self.gc.get_branch_tree) 483 skipped, tree = self.repo.run(self.gc.get_branch_tree)
466 self.assertEqual(skipped, {'master', 'root_X'}) 484 self.assertEqual(skipped, {'master', 'root_X', 'branch_DOG', 'root_CAT'})
467 self.assertEqual(tree, { 485 self.assertEqual(tree, {
468 'branch_G': 'root_A', 486 'branch_G': 'root_A',
469 'root_A': 'root_X', 487 'root_A': 'root_X',
470 'branch_K': 'branch_G', 488 'branch_K': 'branch_G',
471 'branch_L': 'branch_K', 489 'branch_L': 'branch_K',
472 'branch_Z': 'root_X' 490 'branch_Z': 'root_X'
473 }) 491 })
474 492
475 topdown = list(self.gc.topo_iter(tree)) 493 topdown = list(self.gc.topo_iter(tree))
476 bottomup = list(self.gc.topo_iter(tree, top_down=False)) 494 bottomup = list(self.gc.topo_iter(tree, top_down=False))
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 'K' 528 'K'
511 ) 529 )
512 530
513 def testRebase(self): 531 def testRebase(self):
514 self.assertSchema(""" 532 self.assertSchema("""
515 A B C D E F G 533 A B C D E F G
516 B H I J K 534 B H I J K
517 J L 535 J L
518 536
519 X Y Z 537 X Y Z
538
539 CAT DOG
520 """) 540 """)
521 541
522 rslt = self.repo.run( 542 rslt = self.repo.run(
523 self.gc.rebase, 'branch_G', 'branch_K~4', 'branch_K') 543 self.gc.rebase, 'branch_G', 'branch_K~4', 'branch_K')
524 self.assertTrue(rslt.success) 544 self.assertTrue(rslt.success)
525 545
526 self.assertSchema(""" 546 self.assertSchema("""
527 A B C D E F G H I J K 547 A B C D E F G H I J K
528 B H I J L 548 B H I J L
529 549
530 X Y Z 550 X Y Z
551
552 CAT DOG
531 """) 553 """)
532 554
533 rslt = self.repo.run( 555 rslt = self.repo.run(
534 self.gc.rebase, 'branch_K', 'branch_L~1', 'branch_L', abort=True) 556 self.gc.rebase, 'branch_K', 'branch_L~1', 'branch_L', abort=True)
535 self.assertFalse(rslt.success) 557 self.assertFalse(rslt.success)
536 558
537 self.assertFalse(self.repo.run(self.gc.in_rebase)) 559 self.assertFalse(self.repo.run(self.gc.in_rebase))
538 560
539 rslt = self.repo.run( 561 rslt = self.repo.run(
540 self.gc.rebase, 'branch_K', 'branch_L~1', 'branch_L', abort=False) 562 self.gc.rebase, 'branch_K', 'branch_L~1', 'branch_L', abort=False)
541 self.assertFalse(rslt.success) 563 self.assertFalse(rslt.success)
542 564
543 self.assertTrue(self.repo.run(self.gc.in_rebase)) 565 self.assertTrue(self.repo.run(self.gc.in_rebase))
544 566
545 self.assertEqual(self.repo.git('status', '--porcelain').stdout, 'UU file\n') 567 self.assertEqual(self.repo.git('status', '--porcelain').stdout, 'UU file\n')
546 self.repo.git('checkout', '--theirs', 'file') 568 self.repo.git('checkout', '--theirs', 'file')
547 self.repo.git('add', 'file') 569 self.repo.git('add', 'file')
548 self.repo.git('rebase', '--continue') 570 self.repo.git('rebase', '--continue')
549 571
550 self.assertSchema(""" 572 self.assertSchema("""
551 A B C D E F G H I J K L 573 A B C D E F G H I J K L
552 574
553 X Y Z 575 X Y Z
576
577 CAT DOG
554 """) 578 """)
555 579
556 580
557 class GitFreezeThaw(git_test_utils.GitRepoReadWriteTestBase): 581 class GitFreezeThaw(git_test_utils.GitRepoReadWriteTestBase):
558 @classmethod 582 @classmethod
559 def setUpClass(cls): 583 def setUpClass(cls):
560 super(GitFreezeThaw, cls).setUpClass() 584 super(GitFreezeThaw, cls).setUpClass()
561 import git_common 585 import git_common
562 cls.gc = git_common 586 cls.gc = git_common
563 cls.gc.TEST_MODE = True 587 cls.gc.TEST_MODE = True
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 653
630 self.assertEquals(self.repo.git('status', '--porcelain').stdout, STATUS_1) 654 self.assertEquals(self.repo.git('status', '--porcelain').stdout, STATUS_1)
631 655
632 self.repo.run(inner) 656 self.repo.run(inner)
633 657
634 658
635 if __name__ == '__main__': 659 if __name__ == '__main__':
636 sys.exit(coverage_utils.covered_main( 660 sys.exit(coverage_utils.covered_main(
637 os.path.join(DEPOT_TOOLS_ROOT, 'git_common.py') 661 os.path.join(DEPOT_TOOLS_ROOT, 'git_common.py')
638 )) 662 ))
OLDNEW
« git_reparent_branch.py ('K') | « git_reparent_branch.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698