Handle cases where '.' show up in svn status and is deleted

This would cause random try job failures, especially when switching around
DEPS <-> svn directory conversion.

R=dpranke@chromium.org
BUG=
TEST=


Review URL: http://codereview.chromium.org/8431021

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@108144 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/tests/gclient_scm_test.py b/tests/gclient_scm_test.py
index 44d23aa..908b322 100755
--- a/tests/gclient_scm_test.py
+++ b/tests/gclient_scm_test.py
@@ -196,6 +196,7 @@
     gclient_scm.os.path.isdir(self.base_path).AndReturn(True)
     gclient_scm.os.path.isdir(join(self.base_path, '.svn')).AndReturn(True)
     gclient_scm.scm.SVN.CaptureStatus(self.base_path).AndReturn([])
+    gclient_scm.os.path.isdir(self.base_path).AndReturn(True)
     gclient_scm.scm.SVN.RunAndGetFileList(
         options.verbose,
         ['update', '--revision', 'BASE', '--ignore-externals'],
@@ -222,6 +223,7 @@
     gclient_scm.os.path.islink(file_path).AndReturn(False)
     gclient_scm.os.path.isdir(file_path).AndReturn(True)
     gclient_scm.gclient_utils.RemoveDirectory(file_path)
+    gclient_scm.os.path.isdir(self.base_path).AndReturn(True)
     gclient_scm.scm.SVN.RunAndGetFileList(
         options.verbose,
         ['update', '--revision', 'BASE', '--ignore-externals'],
@@ -235,6 +237,33 @@
     scm.revert(options, self.args, file_list2)
     self.checkstdout(('%s\n' % file_path))
 
+  def testRevertDot(self):
+    self.mox.StubOutWithMock(gclient_scm.SVNWrapper, 'update')
+    options = self.Options(verbose=True)
+    gclient_scm.os.path.isdir(self.base_path).AndReturn(True)
+    gclient_scm.os.path.isdir(join(self.base_path, '.svn')).AndReturn(True)
+    items = [
+      ('~      ', '.'),
+    ]
+    gclient_scm.scm.SVN.CaptureStatus(self.base_path).AndReturn(items)
+    file_path = join(self.base_path, '.')
+    gclient_scm.os.path.exists(file_path).AndReturn(True)
+    gclient_scm.os.path.isfile(file_path).AndReturn(False)
+    gclient_scm.os.path.islink(file_path).AndReturn(False)
+    gclient_scm.os.path.isdir(file_path).AndReturn(True)
+    gclient_scm.gclient_utils.RemoveDirectory(file_path)
+    gclient_scm.os.path.isdir(self.base_path).AndReturn(False)
+    # The mock is unbound so self is not necessary.
+    # pylint: disable=E1120
+    gclient_scm.SVNWrapper.update(options, [], ['.'])
+
+    self.mox.ReplayAll()
+    scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
+                            relpath=self.relpath)
+    file_list2 = []
+    scm.revert(options, self.args, file_list2)
+    self.checkstdout(('%s\n' % file_path))
+
   def testStatus(self):
     options = self.Options(verbose=True)
     gclient_scm.os.path.isdir(self.base_path).AndReturn(True)