gclient: Actually move or delete mismatched checkouts

Followup to https://codereview.chromium.org/189913020/ ("gclient: print a warning if a dep would get deleted or moved in the future")

BUG=skia:1638

Review URL: https://codereview.chromium.org/225403015

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@268944 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/tests/gclient_scm_test.py b/tests/gclient_scm_test.py
index 7c0b386..a79bc25 100755
--- a/tests/gclient_scm_test.py
+++ b/tests/gclient_scm_test.py
@@ -646,6 +646,18 @@
         1, 'cmd', '/cwd', 'stdout', 'stderr')
     gclient_scm.scm.SVN._CaptureInfo([], self.base_path+'/.').AndRaise(error)
 
+    bad_scm_path = os.path.join(self.root_dir, '_bad_scm',
+                                os.path.dirname(self.relpath))
+    gclient_scm.os.makedirs(bad_scm_path)
+    dest_path = os.path.join(bad_scm_path,
+                             os.path.basename(self.relpath) + 'ABCD')
+    self.mox.StubOutWithMock(gclient_scm.tempfile, 'mkdtemp', True)
+    gclient_scm.tempfile.mkdtemp(
+        prefix=os.path.basename(self.relpath),
+        dir=os.path.join(self.root_dir, '_bad_scm',
+                         os.path.dirname(self.relpath))).AndReturn(dest_path)
+    self.mox.StubOutWithMock(gclient_scm.shutil, 'move', True)
+    gclient_scm.shutil.move(self.base_path, dest_path)
     gclient_scm.os.path.exists(self.root_dir).AndReturn(True)
     gclient_scm.scm.SVN.Capture(['--version', '--quiet'], None
         ).AndReturn('1.5.1')
@@ -662,34 +674,45 @@
     scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
                             relpath=self.relpath)
     scm.update(options, None, [])
+    self.checkstdout('_____ Conflicting directory found in %s. Moving to %s.\n'
+                     % (self.base_path, dest_path))
 
   def testUpdateGitForce(self):
     options = self.Options(verbose=True, force=True)
-    file_path = gclient_scm.os.path.join(self.root_dir, self.relpath, '.hg')
-    gclient_scm.os.path.exists(file_path).AndReturn(False)
-    gclient_scm.os.path.exists(self.base_path).AndReturn(True)
-    self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsGitSvn', True)
-    gclient_scm.scm.GIT.IsGitSvn(self.base_path).AndReturn(False)
-    error = gclient_scm.subprocess2.CalledProcessError(
-        1, 'cmd', '/cwd', 'stdout', 'stderr')
-    gclient_scm.scm.SVN._CaptureInfo([], self.base_path+'/.').AndRaise(error)
-    gclient_scm.os.path.exists(self.root_dir).AndReturn(True)
-    gclient_scm.scm.SVN.Capture(['--version', '--quiet'], None
-        ).AndReturn('1.5.1')
-    gclient_scm.scm.SVN.RunAndGetFileList(
-        options.verbose,
-        ['checkout', self.url, self.base_path, '--force', '--ignore-externals'],
-        cwd=self.root_dir,
-        file_list=[])
-
-    gclient_scm.scm.SVN._CaptureInfo([], self.base_path+'/.'
-        ).AndReturn({'Revision': 100})
-
-    self.mox.ReplayAll()
-    scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
-                            relpath=self.relpath)
-    file_list = []
-    scm.update(options, None, file_list)
+    old_environ = dict(gclient_scm.os.environ)
+    gclient_scm.os.environ['CHROME_HEADLESS'] = '1'
+    try:
+      file_path = gclient_scm.os.path.join(self.root_dir, self.relpath, '.hg')
+      gclient_scm.os.path.exists(file_path).AndReturn(False)
+      gclient_scm.os.path.exists(self.base_path).AndReturn(True)
+      self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsGitSvn', True)
+      gclient_scm.scm.GIT.IsGitSvn(self.base_path).AndReturn(False)
+      error = gclient_scm.subprocess2.CalledProcessError(
+          1, 'cmd', '/cwd', 'stdout', 'stderr')
+      gclient_scm.scm.SVN._CaptureInfo([], self.base_path+'/.').AndRaise(error)
+      gclient_scm.gclient_utils.rmtree(self.base_path)
+      gclient_scm.os.path.exists(self.root_dir).AndReturn(True)
+      gclient_scm.scm.SVN.Capture(['--version', '--quiet'], None
+          ).AndReturn('1.5.1')
+      gclient_scm.scm.SVN.RunAndGetFileList(
+          options.verbose,
+          ['checkout', self.url, self.base_path, '--force',
+           '--ignore-externals'],
+          cwd=self.root_dir,
+          file_list=[])
+  
+      gclient_scm.scm.SVN._CaptureInfo([], self.base_path+'/.'
+          ).AndReturn({'Revision': 100})
+  
+      self.mox.ReplayAll()
+      scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
+                              relpath=self.relpath)
+      file_list = []
+      scm.update(options, None, file_list)
+      self.checkstdout('_____ Conflicting directory found in %s. Removing.\n'
+                       % self.base_path)
+    finally:
+      gclient_scm.os.environ = old_environ
 
   def testUpdateGitSvn(self):
     options = self.Options(verbose=True)
@@ -1297,7 +1320,6 @@
     gclient_scm.os.path.isdir(self.base_path).AndReturn(True)
     gclient_scm.os.path.exists(os.path.join(self.base_path, '.git')
                                ).AndReturn(False)
-
     self.mox.StubOutWithMock(gclient_scm.GitWrapper, '_Clone', True)
     # pylint: disable=E1120
     gclient_scm.GitWrapper._Clone('refs/remotes/origin/master', self.url,
@@ -1326,7 +1348,6 @@
     gclient_scm.os.path.isdir(self.base_path).AndReturn(True)
     gclient_scm.os.path.exists(os.path.join(self.base_path, '.git')
                                ).AndReturn(False)
-
     self.mox.StubOutWithMock(gclient_scm.GitWrapper, '_Clone', True)
     # pylint: disable=E1120
     gclient_scm.GitWrapper._Clone(