Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 )) |
| OLD | NEW |