Chromium Code Reviews| Index: gclient_scm.py |
| =================================================================== |
| --- gclient_scm.py (revision 121429) |
| +++ gclient_scm.py (working copy) |
| @@ -442,6 +442,23 @@ |
| if verbose: |
| print('Checked out revision %s' % self.revinfo(options, (), None)) |
| + # If --force and --delete_unversioned_trees are specified, remove any |
| + # untracked directories. |
| + if options.force and options.delete_unversioned_trees: |
| + # GIT.CaptureStatus() uses 'dit diff' to compare to a specific SHA1 (the |
| + # merge-base by default), so doesn't include untracked files. So we use |
| + # 'git ls-files --directory --others --exclude-standard' here directly. |
| + paths = scm.GIT.Capture( |
| + ['ls-files', '--directory', '--others', '--exclude-standard'], |
| + self.checkout_path) |
| + if paths: |
|
M-A Ruel
2012/02/10 15:56:40
nit: Not necessary to do "if paths:", just this wi
|
| + for path in paths.splitlines(): |
| + if path.endswith('/'): |
| + print('\n_____ removing unversioned directory %s' % path) |
| + gclient_utils.RemoveDirectory(os.path.join(self.checkout_path, |
| + path)) |
| + |
| + |
| def revert(self, options, args, file_list): |
| """Reverts local modifications. |
| @@ -914,7 +931,7 @@ |
| if not options.force and not options.reset: |
| # Look for local modifications but ignore unversioned files. |
| for status in scm.SVN.CaptureStatus(None, self.checkout_path): |
| - if status[0] != '?': |
| + if status[0][0] != '?': |
| raise gclient_utils.Error( |
| ('Can\'t switch the checkout to %s; UUID don\'t match and ' |
| 'there is local changes in %s. Delete the directory and ' |
| @@ -939,6 +956,15 @@ |
| command = self._AddAdditionalUpdateFlags(command, options, revision) |
| self._RunAndGetFileList(command, options, file_list, self._root_dir) |
| + # If --force and --delete_unversioned_trees are specified, remove any |
| + # untracked files and directories. |
| + if options.force and options.delete_unversioned_trees: |
| + for status in scm.SVN.CaptureStatus(None, self.checkout_path): |
| + path = os.path.join(self.checkout_path, status[1]) |
| + if (status[0][0] == '?' and os.path.isdir(path)): |
| + print('\n_____ removing unversioned directory %s' % status[1]) |
| + gclient_utils.RemoveDirectory(os.path.join(path)) |
| + |
| def updatesingle(self, options, args, file_list): |
| filename = args.pop() |
| if scm.SVN.AssertVersion("1.5")[0]: |