diff --git a/gclient.py b/gclient.py index 3a70aa9ae..f8df1acd9 100755 --- a/gclient.py +++ b/gclient.py @@ -1858,6 +1858,9 @@ class CipdDependency(Dependency): def ToLines(self): """Return a list of lines representing this in a DEPS file.""" + def escape_cipd_var(package): + return package.replace('{', '{{').replace('}', '}}') + s = [] self._CreatePackageIfNecessary() if self._cipd_package.authority_for_subdir: @@ -1873,7 +1876,7 @@ class CipdDependency(Dependency): cmp=lambda x, y: cmp(x.name, y.name)): s.extend([ ' {', - ' "package": "%s",' % p.name, + ' "package": "%s",' % escape_cipd_var(p.name), ' "version": "%s",' % p.version, ' },', ]) diff --git a/testing_support/fake_repos.py b/testing_support/fake_repos.py index 0ed3220ae..61a6ec02e 100755 --- a/testing_support/fake_repos.py +++ b/testing_support/fake_repos.py @@ -730,6 +730,7 @@ deps = { self._commit_git('repo_14', { 'DEPS': textwrap.dedent("""\ + vars = {} deps = { 'src/cipd_dep': { 'packages': [ @@ -753,6 +754,15 @@ deps = { ], 'dep_type': 'cipd', }, + 'src/cipd_dep_with_cipd_variable': { + 'packages': [ + { + 'package': 'package3/${{platform}}', + 'version': '1.2', + }, + ], + 'dep_type': 'cipd', + }, }"""), 'origin': 'git/repo_14@2\n' }) diff --git a/tests/gclient_smoketest.py b/tests/gclient_smoketest.py index bded04e85..26642a0e0 100755 --- a/tests/gclient_smoketest.py +++ b/tests/gclient_smoketest.py @@ -1423,6 +1423,17 @@ class GClientSmokeGIT(GClientSmokeBase): ' "dep_type": "cipd",', ' },', '', + ' # src -> src/cipd_dep_with_cipd_variable', + ' "src/cipd_dep_with_cipd_variable": {', + ' "packages": [', + ' {', + ' "package": "package3/${{platform}}",', + ' "version": "1.2",', + ' },', + ' ],', + ' "dep_type": "cipd",', + ' },', + '', '}', '', '# ' + self.git_base + 'repo_14, DEPS', @@ -1797,6 +1808,9 @@ class GClientSmokeCipd(GClientSmokeBase): '@Subdir src/cipd_dep', 'package0 0.1', '', + '@Subdir src/cipd_dep_with_cipd_variable', + 'package3/${platform} 1.2', + '', ], contents.splitlines())