| Index: gclient_scm.py
|
| ===================================================================
|
| --- gclient_scm.py (revision 122190)
|
| +++ gclient_scm.py (working copy)
|
| @@ -442,6 +442,22 @@
|
| if verbose:
|
| print('Checked out revision %s' % self.revinfo(options, (), None))
|
|
|
| + # If --reset and --delete_unversioned_trees are specified, remove any
|
| + # untracked directories.
|
| + if options.reset 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)
|
| + for path in (p for p in paths.splitlines() if p.endswith('/')):
|
| + full_path = os.path.join(self.checkout_path, path)
|
| + if not os.path.islink(full_path):
|
| + print('\n_____ removing unversioned directory %s' % path)
|
| + gclient_utils.RemoveDirectory(full_path)
|
| +
|
| +
|
| def revert(self, options, args, file_list):
|
| """Reverts local modifications.
|
|
|
| @@ -922,7 +938,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 '
|
| @@ -941,11 +957,21 @@
|
| if not options.force and str(from_info['Revision']) == revision:
|
| if options.verbose or not forced_revision:
|
| print('\n_____ %s%s' % (self.relpath, rev_str))
|
| - return
|
| + else:
|
| + command = ['update', self.checkout_path]
|
| + command = self._AddAdditionalUpdateFlags(command, options, revision)
|
| + self._RunAndGetFileList(command, options, file_list, self._root_dir)
|
|
|
| - command = ['update', self.checkout_path]
|
| - command = self._AddAdditionalUpdateFlags(command, options, revision)
|
| - self._RunAndGetFileList(command, options, file_list, self._root_dir)
|
| + # If --reset and --delete_unversioned_trees are specified, remove any
|
| + # untracked files and directories.
|
| + if options.reset and options.delete_unversioned_trees:
|
| + for status in scm.SVN.CaptureStatus(None, self.checkout_path):
|
| + full_path = os.path.join(self.checkout_path, status[1])
|
| + if (status[0][0] == '?'
|
| + and os.path.isdir(full_path)
|
| + and not os.path.islink(full_path)):
|
| + print('\n_____ removing unversioned directory %s' % status[1])
|
| + gclient_utils.RemoveDirectory(full_path)
|
|
|
| def updatesingle(self, options, args, file_list):
|
| filename = args.pop()
|
|
|