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

Unified Diff: tests/gclient_scm_test.py

Issue 9348054: If --force is specified when updating, remove unversioned directories (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: If both -f and -D are specified when updating, remove all untracked directories Created 8 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 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
===================================================================
--- tests/gclient_scm_test.py (revision 121978)
+++ tests/gclient_scm_test.py (working copy)
@@ -83,6 +83,7 @@
self.nohooks = False
# TODO(maruel): Test --jobs > 1.
self.jobs = 1
+ self.delete_unversioned_trees = False
def Options(self, *args, **kwargs):
return self.OptionsObject(*args, **kwargs)
@@ -367,11 +368,53 @@
# Cheat a bit here.
gclient_scm.scm.SVN._CaptureInfo([file_info['URL']], None
).AndReturn(file_info)
+ gclient_scm.scm.SVN.Capture(['--version'], None
+ ).AndReturn('svn, version 1.5.1 (r32289)')
+
additional_args = []
if options.manually_grab_svn_rev:
additional_args = ['--revision', str(file_info['Revision'])]
+ additional_args.extend(['--force', '--ignore-externals'])
+ files_list = []
+ gclient_scm.scm.SVN.RunAndGetFileList(
+ options.verbose,
+ ['update', self.base_path] + additional_args,
+ 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.update(options, (), files_list)
+
+ def testUpdateForceNoDeleteUnversionedTrees(self):
+ options = self.Options(verbose=True)
+ options.force = True
+
+ file_info = {
+ 'Repository Root': 'blah',
+ 'URL': self.url,
+ 'UUID': 'ABC',
+ 'Revision': 42,
+ }
+ gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
+ gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
+
+ # Create an untracked file and directory.
+ dotted_path = join(self.base_path, '.')
+ gclient_scm.scm.SVN.CaptureStatus(None, dotted_path
+ ).AndReturn([['? ', 'dir'], ['? ', 'file']])
+
+ # Checkout or update.
+ gclient_scm.os.path.exists(self.base_path).AndReturn(True)
+ gclient_scm.scm.SVN._CaptureInfo([], dotted_path).AndReturn(file_info)
+ gclient_scm.scm.SVN._CaptureInfo([file_info['URL']], None
+ ).AndReturn(file_info)
gclient_scm.scm.SVN.Capture(['--version'], None
).AndReturn('svn, version 1.5.1 (r32289)')
+
+ additional_args = []
+ if options.manually_grab_svn_rev:
+ additional_args = ['--revision', str(file_info['Revision'])]
additional_args.extend(['--force', '--ignore-externals'])
files_list = []
gclient_scm.scm.SVN.RunAndGetFileList(
@@ -384,6 +427,56 @@
relpath=self.relpath)
scm.update(options, (), files_list)
+ def testUpdateForceDeleteUnversionedTrees(self):
+ options = self.Options(verbose=True)
+ options.force = True
+ options.delete_unversioned_trees = True
+
+ file_info = {
+ 'Repository Root': 'blah',
+ 'URL': self.url,
+ 'UUID': 'ABC',
+ 'Revision': 42,
+ }
+ gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
+ gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
+
+ # Create an untracked file and directory.
+ dotted_path = join(self.base_path, '.')
+ gclient_scm.scm.SVN.CaptureStatus(None, dotted_path
+ ).AndReturn([['? ', 'dir'], ['? ', 'file']])
+
+ # Checkout or update.
+ gclient_scm.os.path.exists(self.base_path).AndReturn(True)
+ gclient_scm.scm.SVN._CaptureInfo([], dotted_path).AndReturn(file_info)
+ gclient_scm.scm.SVN._CaptureInfo([file_info['URL']], None
+ ).AndReturn(file_info)
+ gclient_scm.scm.SVN.Capture(['--version'], None
+ ).AndReturn('svn, version 1.5.1 (r32289)')
+
+ # Confirm that the untracked file is removed.
+ gclient_scm.scm.SVN.CaptureStatus(None, self.base_path
+ ).AndReturn([['? ', 'dir'], ['? ', 'file']])
+ gclient_scm.os.path.isdir(join(self.base_path, 'dir')).AndReturn(True)
+ gclient_scm.os.path.isdir(join(self.base_path, 'file')).AndReturn(False)
+ gclient_scm.gclient_utils.RemoveDirectory(join(self.base_path, 'dir'))
+
+ additional_args = []
+ if options.manually_grab_svn_rev:
+ additional_args = ['--revision', str(file_info['Revision'])]
+ additional_args.extend(['--force', '--ignore-externals'])
+ files_list = []
+ gclient_scm.scm.SVN.RunAndGetFileList(
+ options.verbose,
+ ['update', self.base_path] + additional_args,
+ 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.update(options, (), files_list)
+ self.checkstdout('\n_____ removing unversioned directory dir\n')
+
def testUpdateSingleCheckout(self):
options = self.Options(verbose=True)
file_info = {
@@ -589,6 +682,7 @@
self.reset = False
self.nohooks = False
self.merge = False
+ self.delete_unversioned_trees = False
sample_git_import = """blob
mark :1
@@ -895,6 +989,62 @@
'Updating 069c602..a7142dc\nFast-forward\n a | 1 +\n b | 1 +\n'
' 2 files changed, 2 insertions(+), 0 deletions(-)\n\n')
+ def testUpdateForceNoDeleteUnversionedTrees(self):
+ if not self.enabled:
+ return
+ options = self.Options()
+ options.force = True
+
+ dir_path = join(self.base_path, 'c')
+ os.mkdir(dir_path)
+ open(join(dir_path, 'nested'), 'w').writelines('new\n')
+
+ file_path = join(self.base_path, 'file')
+ open(file_path, 'w').writelines('new\n')
+
+ scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
+ relpath=self.relpath)
+ file_list = []
+ scm.update(options, (), file_list)
+ self.assert_(gclient_scm.os.path.isdir(dir_path))
+ self.assert_(gclient_scm.os.path.isfile(file_path))
+ self.checkstdout(
+ '\n________ running \'git reset --hard HEAD\' in \'%s\''
+ '\nHEAD is now at 069c602 A and B\n'
+ '\n_____ . at refs/heads/master\n'
+ 'Updating 069c602..a7142dc\nFast-forward\n a | 1 +\n b | 1 +\n'
+ ' 2 files changed, 2 insertions(+), 0 deletions(-)\n\n'
+ % join(self.root_dir, '.'))
+
+ def testUpdateForceDeleteUnversionedTrees(self):
+ if not self.enabled:
+ return
+ options = self.Options()
+ options.force = True
+ options.delete_unversioned_trees = True
+
+ dir_path = join(self.base_path, 'dir')
+ os.mkdir(dir_path)
+ open(join(dir_path, 'nested'), 'w').writelines('new\n')
+
+ file_path = join(self.base_path, 'file')
+ open(file_path, 'w').writelines('new\n')
+
+ scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
+ relpath=self.relpath)
+ file_list = []
+ scm.update(options, (), file_list)
+ self.assert_(not gclient_scm.os.path.isdir(dir_path))
+ self.assert_(gclient_scm.os.path.isfile(file_path))
+ self.checkstdout(
+ '\n________ running \'git reset --hard HEAD\' in \'%s\''
+ '\nHEAD is now at 069c602 A and B\n'
+ '\n_____ . at refs/heads/master\n'
+ 'Updating 069c602..a7142dc\nFast-forward\n a | 1 +\n b | 1 +\n'
+ ' 2 files changed, 2 insertions(+), 0 deletions(-)\n\n'
+ '\n_____ removing unversioned directory dir/\n' % join(self.root_dir,
+ '.'))
+
def testUpdateUnstagedConflict(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