Don't delete directories that have been superseded by a broader checkout.
BUG=237388
Review URL: https://chromiumcodereview.appspot.com/14583004
git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@203384 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gclient.py b/gclient.py
index f71eccc..5b159ed 100755
--- a/gclient.py
+++ b/gclient.py
@@ -1134,6 +1134,9 @@
# Only delete the directory if there are no changes in it, and
# delete_unversioned_trees is set to true.
entries = [i.name for i in self.root.subtree(False) if i.url]
+ full_entries = [os.path.join(self.root_dir, e.replace('/', os.path.sep))
+ for e in entries]
+
for entry, prev_url in self._ReadEntries().iteritems():
if not prev_url:
# entry must have been overridden via .gclient custom_deps
@@ -1152,8 +1155,15 @@
if (entry not in entries and
(not any(path.startswith(entry + '/') for path in entries)) and
os.path.exists(e_dir)):
- file_list = []
scm = gclient_scm.CreateSCM(prev_url, self.root_dir, entry_fixed)
+
+ # Check to see if this directory is now part of a higher-up checkout.
+ if scm.GetCheckoutRoot() in full_entries:
+ logging.info('%s is part of a higher level checkout, not '
+ 'removing.', scm.GetCheckoutRoot())
+ continue
+
+ file_list = []
scm.status(self._options, [], file_list)
modified_files = file_list != []
if (not self._options.delete_unversioned_trees or