diff --git a/gclient.py b/gclient.py index 5c5c5ca5f5..80a15c3767 100755 --- a/gclient.py +++ b/gclient.py @@ -435,7 +435,8 @@ class Dependency(gclient_utils.WorkItem, DependencySettings): if isinstance(url, basestring): parsed_url = urlparse.urlparse(url) - if not parsed_url[0]: + if (not parsed_url[0] and + not re.match(r'^\w+\@[\w\.-]+\:[\w\/]+', parsed_url[2])): # A relative url. Fetch the real base. path = parsed_url[2] if not path.startswith('/'): diff --git a/gclient_utils.py b/gclient_utils.py index c394862f76..d082fb7e70 100644 --- a/gclient_utils.py +++ b/gclient_utils.py @@ -75,7 +75,10 @@ def SplitUrlRevision(url): regex = r'(ssh://(?:[-.\w]+@)?[-\w:\.]+/[-~\w\./]+)(?:@(.+))?' components = re.search(regex, url).groups() else: - components = url.split('@', 1) + components = url.rsplit('@', 1) + if re.match(r'^\w+\@', url) and '@' not in components[0]: + components = [url] + if len(components) == 1: components += [None] return tuple(components) diff --git a/tests/gclient_test.py b/tests/gclient_test.py index ea61b0a1d5..e3baa0f612 100755 --- a/tests/gclient_test.py +++ b/tests/gclient_test.py @@ -559,6 +559,15 @@ class GclientTest(trial_dir.TestCase): self.assertEqual(result, expected_deps) self.assertEqual(deps, orig_deps) + + def testLateOverride(self): + """Verifies expected behavior of LateOverride.""" + url = "git@github.com:dart-lang/spark.git" + d = gclient.Dependency(None, 'name', 'url', + None, None, None, None, None, '', True) + late_url = d.LateOverride(url) + self.assertEquals(url, late_url) + def testDepsOsOverrideDepsInDepsFile(self): """Verifies that a 'deps_os' path can override a 'deps' path. Also see testUpdateWithOsDeps above. diff --git a/tests/gclient_utils_test.py b/tests/gclient_utils_test.py index e8e667918a..39a3d772d8 100755 --- a/tests/gclient_utils_test.py +++ b/tests/gclient_utils_test.py @@ -124,6 +124,13 @@ class SplitUrlRevisionTestCase(GclientUtilBase): out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev)) self.assertEquals(out_rev, rev) self.assertEquals(out_url, url) + url = "git@github.com:dart-lang/spark.git" + out_url, out_rev = gclient_utils.SplitUrlRevision(url) + self.assertEquals(out_rev, None) + self.assertEquals(out_url, url) + out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev)) + self.assertEquals(out_rev, rev) + self.assertEquals(out_url, url) def testSVNUrl(self): url = "svn://example.com/test"