Use a regex instead of shlex.split() to get remote url
shlex.spit(), in addition to doing str.split(' '), also strips out '\\'
from windows paths, which causes the cache_dir check to fail and Gclient to think
that we're not in cache_dir mode even if we are.
Instead of using shlex to strip data from a stdout log, I think regex is more
suited for this job.
BUG=405973
Review URL: https://codereview.chromium.org/497053002
git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@291446 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gclient_scm.py b/gclient_scm.py
index 0dabd26..f583431 100644
--- a/gclient_scm.py
+++ b/gclient_scm.py
@@ -11,7 +11,6 @@
import os
import posixpath
import re
-import shlex
import sys
import tempfile
import traceback
@@ -159,13 +158,19 @@
return getattr(self, command)(options, args, file_list)
+ @staticmethod
+ def _get_first_remote_url(checkout_path):
+ log = scm.GIT.Capture(
+ ['config', '--local', '--get-regexp', r'remote.*.url'],
+ cwd=checkout_path)
+ # Get the second token of the first line of the log.
+ return log.splitlines()[0].split(' ', 1)[1]
+
def GetActualRemoteURL(self, options):
"""Attempt to determine the remote URL for this SCMWrapper."""
# Git
if os.path.exists(os.path.join(self.checkout_path, '.git')):
- actual_remote_url = shlex.split(scm.GIT.Capture(
- ['config', '--local', '--get-regexp', r'remote.*.url'],
- cwd=self.checkout_path))[1]
+ actual_remote_url = self._get_first_remote_url(self.checkout_path)
# If a cache_dir is used, obtain the actual remote URL from the cache.
if getattr(self, 'cache_dir', None):
@@ -173,9 +178,7 @@
mirror = git_cache.Mirror(url)
if (mirror.exists() and mirror.mirror_path.replace('\\', '/') ==
actual_remote_url.replace('\\', '/')):
- actual_remote_url = shlex.split(scm.GIT.Capture(
- ['config', '--local', '--get-regexp', r'remote.*.url'],
- cwd=mirror.mirror_path))[1]
+ actual_remote_url = self._get_first_remote_url(mirror.mirror_path)
return actual_remote_url
# Svn