Index: tests/gclient_scm_test.py |
=================================================================== |
--- tests/gclient_scm_test.py (revision 122190) |
+++ 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) |
@@ -356,22 +357,26 @@ |
} |
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(True) |
+ # Checkout or update. |
+ dotted_path = join(self.base_path, '.') |
+ gclient_scm.scm.SVN._CaptureInfo([], dotted_path).AndReturn(file_info) |
+ |
# Verify no locked files. |
- dotted_path = join(self.base_path, '.') |
gclient_scm.scm.SVN.CaptureStatus(None, dotted_path).AndReturn([]) |
- # Checkout or update. |
- gclient_scm.os.path.exists(self.base_path).AndReturn(True) |
- gclient_scm.scm.SVN._CaptureInfo([], dotted_path).AndReturn(file_info) |
# Cheat a bit here. |
gclient_scm.scm.SVN._CaptureInfo([file_info['URL']], None |
).AndReturn(file_info) |
+ |
+ # _AddAdditionalUpdateFlags() |
+ 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'])] |
- gclient_scm.scm.SVN.Capture(['--version'], None |
- ).AndReturn('svn, version 1.5.1 (r32289)') |
additional_args.extend(['--force', '--ignore-externals']) |
files_list = [] |
gclient_scm.scm.SVN.RunAndGetFileList( |
@@ -384,6 +389,80 @@ |
relpath=self.relpath) |
scm.update(options, (), files_list) |
+ def testUpdateReset(self): |
+ options = self.Options(verbose=True) |
+ options.reset = 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) |
+ gclient_scm.os.path.exists(self.base_path).AndReturn(True) |
+ |
+ # Checkout or update. |
+ dotted_path = join(self.base_path, '.') |
+ gclient_scm.scm.SVN._CaptureInfo([], dotted_path).AndReturn(file_info) |
+ |
+ # Create an untracked file and directory. |
+ gclient_scm.scm.SVN.CaptureStatus(None, dotted_path |
+ ).AndReturn([['? ', 'dir'], ['? ', 'file']]) |
+ |
+ gclient_scm.scm.SVN._CaptureInfo([file_info['URL']], None |
+ ).AndReturn(file_info) |
+ |
+ self.mox.ReplayAll() |
+ files_list = [] |
+ scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
+ relpath=self.relpath) |
+ scm.update(options, (), files_list) |
+ self.checkstdout('\n_____ %s at 42\n' % self.relpath) |
+ |
+ def testUpdateResetDeleteUnversionedTrees(self): |
+ options = self.Options(verbose=True) |
+ options.reset = 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) |
+ gclient_scm.os.path.exists(self.base_path).AndReturn(True) |
+ |
+ # Checkout or update. |
+ dotted_path = join(self.base_path, '.') |
+ gclient_scm.scm.SVN._CaptureInfo([], dotted_path).AndReturn(file_info) |
+ |
+ # Create an untracked file and directory. |
+ gclient_scm.scm.SVN.CaptureStatus(None, dotted_path |
+ ).AndReturn([['? ', 'dir'], ['? ', 'file']]) |
+ |
+ gclient_scm.scm.SVN._CaptureInfo([file_info['URL']], None |
+ ).AndReturn(file_info) |
+ |
+ # 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.os.path.islink(join(self.base_path, 'dir')).AndReturn(False) |
+ gclient_scm.gclient_utils.RemoveDirectory(join(self.base_path, 'dir')) |
+ |
+ self.mox.ReplayAll() |
+ scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
+ relpath=self.relpath) |
+ files_list = [] |
+ scm.update(options, (), files_list) |
+ self.checkstdout( |
+ ('\n_____ %s at 42\n' |
+ '\n_____ removing unversioned directory dir\n') % self.relpath) |
+ |
def testUpdateSingleCheckout(self): |
options = self.Options(verbose=True) |
file_info = { |
@@ -589,6 +668,7 @@ |
self.reset = False |
self.nohooks = False |
self.merge = False |
+ self.delete_unversioned_trees = False |
sample_git_import = """blob |
mark :1 |
@@ -895,6 +975,62 @@ |
'Updating 069c602..a7142dc\nFast-forward\n a | 1 +\n b | 1 +\n' |
' 2 files changed, 2 insertions(+), 0 deletions(-)\n\n') |
+ def testUpdateReset(self): |
+ if not self.enabled: |
+ return |
+ options = self.Options() |
+ options.reset = 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 testUpdateResetDeleteUnversionedTrees(self): |
+ if not self.enabled: |
+ return |
+ options = self.Options() |
+ options.reset = 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 |