Fix the way the temporary directory is created.

It is much cleaner and works for cases where the directory is not writeable.

Also fix an unrelated unit test.

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@34080 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gcl.py b/gcl.py
index b347a4d..d25f9d5 100755
--- a/gcl.py
+++ b/gcl.py
@@ -715,6 +715,13 @@
   else:
     os.chdir(root)
 
+  # If the user specified a custom diff command in their svn config file,
+  # then it'll be used when we do svn diff, which we don't want to happen
+  # since we want the unified diff.  Using --diff-cmd=diff doesn't always
+  # work, since they can have another diff executable in their path that
+  # gives different line endings.  So we use a bogus temp directory as the
+  # config directory, which gets around these problems.
+  bogus_dir = tempfile.mkdtemp()
   diff = []
   for filename in files:
     # TODO(maruel): Use SVN.DiffItem().
@@ -722,19 +729,6 @@
     # when the file is deleted.
     if SVN.CaptureInfo(filename).get('Node Kind') == 'directory':
       continue
-    # If the user specified a custom diff command in their svn config file,
-    # then it'll be used when we do svn diff, which we don't want to happen
-    # since we want the unified diff.  Using --diff-cmd=diff doesn't always
-    # work, since they can have another diff executable in their path that
-    # gives different line endings.  So we use a bogus temp directory as the
-    # config directory, which gets around these problems.
-    if sys.platform.startswith("win"):
-      parent_dir = tempfile.gettempdir()
-    else:
-      parent_dir = sys.path[0]  # tempdir is not secure.
-    bogus_dir = os.path.join(parent_dir, "temp_svn_config")
-    if not os.path.exists(bogus_dir):
-      os.mkdir(bogus_dir)
     output = RunShell(["svn", "diff", "--config-dir", bogus_dir, filename])
     if output:
       diff.append(output)
@@ -745,6 +739,7 @@
     else:
       # The file is not modified anymore. It should be removed from the set.
       pass
+  shutil.rmtree(bogus_dir)
   os.chdir(previous_cwd)
   return "".join(diff)