diff --git a/gclient_scm.py b/gclient_scm.py index 134df35b02..1fe263c256 100644 --- a/gclient_scm.py +++ b/gclient_scm.py @@ -740,8 +740,7 @@ class SVNWrapper(SCMWrapper): if not os.path.exists(checkout_path): # We need to checkout. command = ['checkout', url, checkout_path] - if revision: - command.extend(['--revision', str(revision).strip()]) + command = self.AddAdditionalFlags(command, options, revision) scm.SVN.RunAndGetFileList(options, command, self._root_dir, file_list) return @@ -798,8 +797,7 @@ class SVNWrapper(SCMWrapper): gclient_utils.RemoveDirectory(checkout_path) # We need to checkout. command = ['checkout', url, checkout_path] - if revision: - command.extend(['--revision', str(revision).strip()]) + command = self.AddAdditionalFlags(command, options, revision) scm.SVN.RunAndGetFileList(options, command, self._root_dir, file_list) return @@ -812,8 +810,7 @@ class SVNWrapper(SCMWrapper): return command = ["update", checkout_path] - if revision: - command.extend(['--revision', str(revision).strip()]) + command = self.AddAdditionalFlags(command, options, revision) scm.SVN.RunAndGetFileList(options, command, self._root_dir, file_list) def updatesingle(self, options, args, file_list): @@ -841,8 +838,7 @@ class SVNWrapper(SCMWrapper): os.makedirs(checkout_path) command = ["export", os.path.join(self.url, filename), os.path.join(checkout_path, filename)] - if options.revision: - command.extend(['--revision', str(options.revision).strip()]) + command = self.AddAdditionalFlags(command, options, options.revision) scm.SVN.Run(command, self._root_dir) def revert(self, options, args, file_list): @@ -927,3 +923,15 @@ class SVNWrapper(SCMWrapper): def FullUrlForRelativeUrl(self, url): # Find the forth '/' and strip from there. A bit hackish. return '/'.join(self.url.split('/')[:4]) + url + + def AddAdditionalFlags(self, command, options, revision): + """Add additional flags to command depending on what options are set. + command should be a list of strings that represents an svn command. + + This method returns a new list to be used as a command.""" + new_command = command[:] + if revision: + new_command.extend(['--revision', str(revision).strip()]) + if options.force: + new_command.append('--force') + return new_command diff --git a/tests/gclient_scm_test.py b/tests/gclient_scm_test.py index 175f8e9a32..a3302edaed 100755 --- a/tests/gclient_scm_test.py +++ b/tests/gclient_scm_test.py @@ -68,7 +68,7 @@ class SVNWrapperTestCase(BaseTestCase): def testDir(self): members = [ - 'FullUrlForRelativeUrl', 'RunCommand', + 'AddAdditionalFlags', 'FullUrlForRelativeUrl', 'RunCommand', 'cleanup', 'diff', 'export', 'pack', 'relpath', 'revert', 'revinfo', 'runhooks', 'scm_name', 'status', 'update', 'updatesingle', 'url', @@ -266,6 +266,8 @@ class SVNWrapperTestCase(BaseTestCase): additional_args = [] if options.manually_grab_svn_rev: additional_args = ['--revision', str(file_info['Revision'])] + if options.force: + additional_args.append('--force') files_list = [] gclient_scm.scm.SVN.RunAndGetFileList( options,