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

Side by Side Diff: tests/gclient_scm_test.py

Issue 559003: sync @branchname git support (Closed)
Patch Set: final set Created 10 years, 10 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
« no previous file with comments | « gclient_scm.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/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
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
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:
OLDNEW
« no previous file with comments | « gclient_scm.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698