| OLD | NEW | 
|---|
| 1 #!/usr/bin/python | 1 #!/usr/bin/python | 
| 2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2010 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 gclient_scm.py.""" | 6 """Unit tests for gclient_scm.py.""" | 
| 7 | 7 | 
| 8 # Import before super_mox to keep valid references. | 8 # Import before super_mox to keep valid references. | 
| 9 from os import rename | 9 from os import rename | 
| 10 from shutil import rmtree | 10 from shutil import rmtree | 
| 11 from subprocess import Popen, PIPE, STDOUT | 11 from subprocess import Popen, PIPE, STDOUT | 
| 12 import tempfile | 12 import tempfile | 
|  | 13 import __builtin__ | 
| 13 | 14 | 
| 14 # Fixes include path. | 15 # Fixes include path. | 
| 15 from super_mox import mox, SuperMoxBaseTestBase | 16 from super_mox import mox, SuperMoxBaseTestBase, SuperMoxTestBase | 
| 16 | 17 | 
| 17 import gclient_scm | 18 import gclient_scm | 
| 18 from gclient_test import BaseTestCase as GCBaseTestCase | 19 from gclient_test import BaseTestCase as GCBaseTestCase | 
| 19 | 20 | 
| 20 | 21 | 
| 21 class BaseTestCase(GCBaseTestCase): | 22 class BaseTestCase(GCBaseTestCase): | 
| 22   def setUp(self): | 23   def setUp(self): | 
| 23     GCBaseTestCase.setUp(self) | 24     GCBaseTestCase.setUp(self) | 
| 24     self.mox.StubOutWithMock(gclient_scm.gclient_utils, 'FileRead') | 25     self.mox.StubOutWithMock(gclient_scm.gclient_utils, 'FileRead') | 
| 25     self.mox.StubOutWithMock(gclient_scm.gclient_utils, 'FileWrite') | 26     self.mox.StubOutWithMock(gclient_scm.gclient_utils, 'FileWrite') | 
| (...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 346     try: | 347     try: | 
| 347       Popen(['git', 'init'], stdout=PIPE, stderr=STDOUT, | 348       Popen(['git', 'init'], stdout=PIPE, stderr=STDOUT, | 
| 348             cwd=path).communicate() | 349             cwd=path).communicate() | 
| 349     except OSError: | 350     except OSError: | 
| 350       # git is not available, skip this test. | 351       # git is not available, skip this test. | 
| 351       return False | 352       return False | 
| 352     Popen(['git', 'fast-import'], stdin=PIPE, stdout=PIPE, stderr=STDOUT, | 353     Popen(['git', 'fast-import'], stdin=PIPE, stdout=PIPE, stderr=STDOUT, | 
| 353           cwd=path).communicate(input=git_import) | 354           cwd=path).communicate(input=git_import) | 
| 354     Popen(['git', 'checkout'], stdout=PIPE, stderr=STDOUT, | 355     Popen(['git', 'checkout'], stdout=PIPE, stderr=STDOUT, | 
| 355           cwd=path).communicate() | 356           cwd=path).communicate() | 
|  | 357     Popen(['git', 'remote', 'add', '-f', 'origin', '.'], stdout=PIPE, | 
|  | 358           stderr=STDOUT, cwd=path).communicate() | 
|  | 359     Popen(['git', 'checkout', '-b', 'new', 'origin/master'], stdout=PIPE, | 
|  | 360           stderr=STDOUT, cwd=path).communicate() | 
|  | 361     Popen(['git', 'push', 'origin', 'origin/origin:origin/master'], stdout=PIPE, | 
|  | 362           stderr=STDOUT, cwd=path).communicate() | 
|  | 363     Popen(['git', 'config', '--unset', 'remote.origin.fetch'], stdout=PIPE, | 
|  | 364           stderr=STDOUT, cwd=path).communicate() | 
| 356     return True | 365     return True | 
| 357 | 366 | 
| 358   def setUp(self): | 367   def setUp(self): | 
| 359     self.args = self.Args() | 368     self.args = self.Args() | 
| 360     self.url = 'git://foo' | 369     self.url = 'git://foo' | 
| 361     self.root_dir = tempfile.mkdtemp() | 370     self.root_dir = tempfile.mkdtemp() | 
| 362     self.relpath = '.' | 371     self.relpath = '.' | 
| 363     self.base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) | 372     self.base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) | 
| 364     self.enabled = self.CreateGitRepo(self.sample_git_import, self.base_path) | 373     self.enabled = self.CreateGitRepo(self.sample_git_import, self.base_path) | 
| 365     SuperMoxBaseTestBase.setUp(self) | 374     SuperMoxBaseTestBase.setUp(self) | 
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 505     expected_file_list = [gclient_scm.os.path.join(self.base_path, x) | 514     expected_file_list = [gclient_scm.os.path.join(self.base_path, x) | 
| 506                           for x in ['a', 'b']] | 515                           for x in ['a', 'b']] | 
| 507     scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir, | 516     scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir, | 
| 508                                 relpath=self.relpath) | 517                                 relpath=self.relpath) | 
| 509     file_list = [] | 518     file_list = [] | 
| 510     scm.update(options, (), file_list) | 519     scm.update(options, (), file_list) | 
| 511     self.assertEquals(file_list, expected_file_list) | 520     self.assertEquals(file_list, expected_file_list) | 
| 512     self.assertEquals(scm.revinfo(options, (), None), | 521     self.assertEquals(scm.revinfo(options, (), None), | 
| 513                       'a7142dc9f0009350b96a11f372b6ea658592aa95') | 522                       'a7142dc9f0009350b96a11f372b6ea658592aa95') | 
| 514 | 523 | 
|  | 524   def testUpdateUnstagedConflict(self): | 
|  | 525     if not self.enabled: | 
|  | 526       return | 
|  | 527     options = self.Options() | 
|  | 528     scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir, | 
|  | 529                                 relpath=self.relpath) | 
|  | 530     file_path = gclient_scm.os.path.join(self.base_path, 'b') | 
|  | 531     f = open(file_path, 'w').writelines('conflict\n') | 
|  | 532     exception = ( | 
|  | 533         "error: Your local changes to 'b' would be overwritten by merge.  " | 
|  | 534         "Aborting.\n" | 
|  | 535         "Please, commit your changes or stash them before you can merge.\n") | 
|  | 536     self.assertRaisesError(exception, scm.update, options, (), []) | 
|  | 537 | 
| 515   def testUpdateConflict(self): | 538   def testUpdateConflict(self): | 
| 516     if not self.enabled: | 539     if not self.enabled: | 
| 517       return | 540       return | 
| 518     options = self.Options() | 541     options = self.Options() | 
| 519     scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir, | 542     scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir, | 
| 520                                 relpath=self.relpath) | 543                                 relpath=self.relpath) | 
| 521     file_path = gclient_scm.os.path.join(self.base_path, 'b') | 544     file_path = gclient_scm.os.path.join(self.base_path, 'b') | 
| 522     f = open(file_path, 'w').writelines('conflict\n') | 545     f = open(file_path, 'w').writelines('conflict\n') | 
| 523     scm._Run(['commit', '-am', 'test']) | 546     scm._Run(['commit', '-am', 'test']) | 
|  | 547     self.mox.StubOutWithMock(__builtin__, 'raw_input') | 
|  | 548     __builtin__.raw_input.__call__(mox.StrContains('Cannot fast-forward merge, ' | 
|  | 549                                                    'attempt to rebase? (y)es / ' | 
|  | 550                                                    '(q)uit / (s)kip : ') | 
|  | 551                                    ).AndReturn('y') | 
|  | 552     self.mox.ReplayAll() | 
| 524     exception = \ | 553     exception = \ | 
| 525         '\n____ .\n' \ | 554         'Conflict while rebasing this branch.\n' \ | 
| 526         '\nConflict while rebasing this branch.\n' \ |  | 
| 527         'Fix the conflict and run gclient again.\n' \ | 555         'Fix the conflict and run gclient again.\n' \ | 
| 528         'See man git-rebase for details.\n' | 556         "See 'man git-rebase' for details.\n" | 
| 529     self.assertRaisesError(exception, scm.update, options, (), []) | 557     self.assertRaisesError(exception, scm.update, options, (), []) | 
| 530     exception = \ | 558     exception = \ | 
| 531         '\n____ .\n' \ | 559         '\n____ . at refs/heads/master\n' \ | 
| 532         '\tAlready in a conflict, i.e. (no branch).\n' \ | 560         '\tAlready in a conflict, i.e. (no branch).\n' \ | 
| 533         '\tFix the conflict and run gclient again.\n' \ | 561         '\tFix the conflict and run gclient again.\n' \ | 
| 534         '\tOr to abort run:\n\t\tgit-rebase --abort\n' \ | 562         '\tOr to abort run:\n\t\tgit-rebase --abort\n' \ | 
| 535         '\tSee man git-rebase for details.\n' | 563         '\tSee man git-rebase for details.\n' | 
| 536     self.assertRaisesError(exception, scm.update, options, (), []) | 564     self.assertRaisesError(exception, scm.update, options, (), []) | 
| 537 | 565 | 
| 538   def testUpdateNotGit(self): | 566   def testUpdateNotGit(self): | 
| 539     if not self.enabled: | 567     if not self.enabled: | 
| 540       return | 568       return | 
| 541     options = self.Options() | 569     options = self.Options() | 
| 542     scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir, | 570     scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir, | 
| 543                                 relpath=self.relpath) | 571                                 relpath=self.relpath) | 
| 544     git_path = gclient_scm.os.path.join(self.base_path, '.git') | 572     git_path = gclient_scm.os.path.join(self.base_path, '.git') | 
| 545     rename(git_path, git_path + 'foo') | 573     rename(git_path, git_path + 'foo') | 
| 546     exception = \ | 574     exception = \ | 
| 547         '\n____ .\n' \ | 575         '\n____ . at refs/heads/master\n' \ | 
| 548         '\tPath is not a git repo. No .git dir.\n' \ | 576         '\tPath is not a git repo. No .git dir.\n' \ | 
| 549         '\tTo resolve:\n' \ | 577         '\tTo resolve:\n' \ | 
| 550         '\t\trm -rf .\n' \ | 578         '\t\trm -rf .\n' \ | 
| 551         '\tAnd run gclient sync again\n' | 579         '\tAnd run gclient sync again\n' | 
| 552     self.assertRaisesError(exception, scm.update, options, (), []) | 580     self.assertRaisesError(exception, scm.update, options, (), []) | 
| 553 | 581 | 
| 554   def testRevinfo(self): | 582   def testRevinfo(self): | 
| 555     if not self.enabled: | 583     if not self.enabled: | 
| 556       return | 584       return | 
| 557     options = self.Options() | 585     options = self.Options() | 
| 558     scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir, | 586     scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir, | 
| 559                                 relpath=self.relpath) | 587                                 relpath=self.relpath) | 
| 560     rev_info = scm.revinfo(options, (), None) | 588     rev_info = scm.revinfo(options, (), None) | 
| 561     self.assertEquals(rev_info, '069c602044c5388d2d15c3f875b057c852003458') | 589     self.assertEquals(rev_info, '069c602044c5388d2d15c3f875b057c852003458') | 
| 562 | 590 | 
| 563 | 591 | 
| 564 if __name__ == '__main__': | 592 if __name__ == '__main__': | 
| 565   import unittest | 593   import unittest | 
| 566   unittest.main() | 594   unittest.main() | 
| 567 | 595 | 
| 568 # vim: ts=2:sw=2:tw=80:et: | 596 # vim: ts=2:sw=2:tw=80:et: | 
| OLD | NEW | 
|---|