Make revert more resilient to partial sync failure.
Improve revert to skip over non managed directory and to clobber invalid
checkouts.
R=dpranke@chromium.org
BUG=
TEST=
Review URL: http://codereview.chromium.org/8227033
git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@105103 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/tests/gclient_scm_test.py b/tests/gclient_scm_test.py
index 89e84d3..c69ad2f 100755
--- a/tests/gclient_scm_test.py
+++ b/tests/gclient_scm_test.py
@@ -65,12 +65,12 @@
class SVNWrapperTestCase(BaseTestCase):
class OptionsObject(object):
- def __init__(self, verbose=False, revision=None):
+ def __init__(self, verbose=False, revision=None, force=False):
self.verbose = verbose
self.revision = revision
self.manually_grab_svn_rev = True
self.deps_os = None
- self.force = False
+ self.force = force
self.reset = False
self.nohooks = False
# TODO(maruel): Test --jobs > 1.
@@ -134,6 +134,7 @@
def testRevertMissing(self):
options = self.Options(verbose=True)
gclient_scm.os.path.isdir(self.base_path).AndReturn(False)
+ gclient_scm.os.path.exists(self.base_path).AndReturn(False)
gclient_scm.scm.SVN.Capture(['--version']
).AndReturn('svn, version 1.5.1 (r32289)')
# It'll to a checkout instead.
@@ -155,9 +156,37 @@
self.checkstdout(
('\n_____ %s is missing, synching instead\n' % self.relpath))
+ def testRevertNoDotSvn(self):
+ options = self.Options(verbose=True, force=True)
+ gclient_scm.os.path.isdir(self.base_path).AndReturn(True)
+ gclient_scm.os.path.isdir(join(self.base_path, '.svn')).AndReturn(False)
+ gclient_scm.os.path.isdir(join(self.base_path, '.git')).AndReturn(False)
+ gclient_scm.os.path.isdir(join(self.base_path, '.hg')).AndReturn(False)
+ # Checkout.
+ gclient_scm.os.path.exists(self.base_path).AndReturn(False)
+ gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
+ gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
+ gclient_scm.os.path.exists(self.base_path).AndReturn(False)
+ files_list = self.mox.CreateMockAnything()
+ gclient_scm.scm.SVN.Capture(['--version']).AndReturn('svn, version 1.6')
+ gclient_scm.scm.SVN.RunAndGetFileList(
+ options.verbose,
+ ['checkout', self.url, self.base_path, '--force', '--ignore-externals'],
+ cwd=self.root_dir,
+ file_list=files_list)
+
+ self.mox.ReplayAll()
+ scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
+ relpath=self.relpath)
+ scm.revert(options, self.args, files_list)
+ self.checkstdout(
+ '\n_____ %s is not a valid svn checkout, synching instead\n' %
+ self.relpath)
+
def testRevertNone(self):
options = self.Options(verbose=True)
gclient_scm.os.path.isdir(self.base_path).AndReturn(True)
+ gclient_scm.os.path.isdir(join(self.base_path, '.svn')).AndReturn(True)
gclient_scm.scm.SVN.CaptureStatus(self.base_path).AndReturn([])
gclient_scm.scm.SVN.RunAndGetFileList(
options.verbose,
@@ -174,6 +203,7 @@
def testRevertDirectory(self):
options = self.Options(verbose=True)
gclient_scm.os.path.isdir(self.base_path).AndReturn(True)
+ gclient_scm.os.path.isdir(join(self.base_path, '.svn')).AndReturn(True)
items = [
('~ ', 'a'),
]