Commit 98023dfb authored by maruel@chromium.org's avatar maruel@chromium.org

Urls with /@ won't be processed correctly when used as a requirements.

This is important for parallel checkout.

R=dpranke@chromium.org
BUG=
TEST=


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

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@99981 0039d316-1c4b-4281-b951-d872f2087c98
parent ed6ce003
......@@ -172,6 +172,14 @@ class Dependency(GClientKeywords, gclient_utils.WorkItem):
# Required dependencies to run before running this one:
self.requirements = set()
# Post process the url to remove trailing slashes.
if isinstance(self.url, basestring):
# urls are sometime incorrectly written as proto://host/path/@rev. Replace
# it to proto://host/path@rev.
if self.url.count('@') > 1:
raise gclient_utils.Error('Invalid url "%s"' % self.url)
self.url = self.url.replace('/@', '@')
self._FindDependencies()
# Sanity checks
......@@ -263,8 +271,10 @@ class Dependency(GClientKeywords, gclient_utils.WorkItem):
break
if not found_dep:
raise gclient_utils.Error(
'Couldn\'t find %s in %s, referenced by %s\n%s' % (
sub_target, ref.name, self.name, str(self.root_parent())))
'Couldn\'t find %s in %s, referenced by %s (parent: %s)\n%s' % (
sub_target, ref.name, self.name, self.parent.name,
str(self.root_parent())))
# Call LateOverride() again.
parsed_url = found_dep.LateOverride(found_dep.url)
logging.info('%s, %s to %s' % (self.name, url, parsed_url))
......
......@@ -181,6 +181,13 @@ class GclientTest(trial_dir.TestCase):
pass
return items
def testAutofix(self):
# Invalid urls causes pain when specifying requirements. Make sure it's
# auto-fixed.
d = gclient.Dependency(
None, 'name', 'proto://host/path/@revision', None, None,
None, '', True)
self.assertEquals('proto://host/path@revision', d.url)
if __name__ == '__main__':
logging.basicConfig(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment