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

Unified Diff: tests/gclient_scm_test.py

Issue 548553003: Make check for dirty index work. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: lint Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gclient_scm.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/gclient_scm_test.py
diff --git a/tests/gclient_scm_test.py b/tests/gclient_scm_test.py
index 163cc07457858af1a7c420e9cf2daf410f9370ce..a14ae35ca0e440982701f2cfa38eaf148849ded0 100755
--- a/tests/gclient_scm_test.py
+++ b/tests/gclient_scm_test.py
@@ -919,6 +919,14 @@ from :3
return return_value
return AskForData
+ def getCurrentBranch(self):
+ # Returns name of current branch or HEAD for detached HEAD
+ branch = gclient_scm.scm.GIT.Capture(['rev-parse', '--abbrev-ref', 'HEAD'],
+ cwd=self.base_path)
+ if branch == 'HEAD':
+ return None
+ return branch
+
def setUp(self):
TestCaseUtils.setUp(self)
unittest.TestCase.setUp(self)
@@ -1200,12 +1208,44 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase):
'Fix the conflict and run gclient again.\n'
'See \'man git-rebase\' for details.\n')
self.assertRaisesError(exception, scm.update, options, (), [])
+ # The merge conflict creates a detached head with local changes, so another
+ # scm.update attempt should fail (in a different way) because of that (a
+ # rather roundabout way to test that condition).
exception = ('\n____ . at refs/remotes/origin/master\n'
'\tYou have unstaged changes.\n'
'\tPlease commit, stash, or reset.\n')
self.assertRaisesError(exception, scm.update, options, (), [])
sys.stdout.close()
+ def testUpdateDetachedConflict(self):
+ # Detached head mode should refuse to update when there are local changes
+ # (staged or unstaged).
+ if not self.enabled:
+ return
+ options = self.Options()
+ scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
+ relpath=self.relpath)
+ scm._Run(['checkout', '-q', 'a7142dc9f0009350b96a11f372b6ea658592aa95'],
+ options)
+ # Make sure it checked out a detached HEAD
+ self.assertEquals(self.getCurrentBranch(), None)
+ file_path = join(self.base_path, 'b')
+ open(file_path, 'w').writelines('conflict\n')
+ # Unstaged
+ # TODO(all): Ick. Gclient should really have exception subclasses or
+ # something, so we can avoid this fragile exception message matching.
+ exception = ('\n____ . at refs/remotes/origin/master\n'
+ '\tYou have unstaged changes.\n'
+ '\tPlease commit, stash, or reset.\n')
+ self.assertRaisesError(exception, scm.update, options, (), [])
+ # Staged
+ scm._Run(['add', 'b'], options)
+ exception = ('\n____ . at refs/remotes/origin/master\n'
+ '\tYour index contains uncommitted changes\n'
+ '\tPlease commit, stash, or reset.\n')
+ self.assertRaisesError(exception, scm.update, options, (), [])
+ sys.stdout.close()
+
def testRevinfo(self):
if not self.enabled:
return
@@ -1429,14 +1469,6 @@ class UnmanagedGitWrapperTestCase(BaseGitWrapperTestCase):
# pylint: disable=E1101
self.assertNotIn(expected, value)
- def getCurrentBranch(self):
- # Returns name of current branch or HEAD for detached HEAD
- branch = gclient_scm.scm.GIT.Capture(['rev-parse', '--abbrev-ref', 'HEAD'],
- cwd=self.base_path)
- if branch == 'HEAD':
- return None
- return branch
-
def testUpdateClone(self):
if not self.enabled:
return
« 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