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 |