Index: fetch.py |
diff --git a/fetch.py b/fetch.py |
index e579f916ed4c32411bcc8eefd9e1d96aeaff3166..5335f75a4419e283f0179e356e427668be49b0c8 100755 |
--- a/fetch.py |
+++ b/fetch.py |
@@ -101,17 +101,31 @@ class GclientGitCheckout(GclientCheckout, GitCheckout): |
def __init__(self, options, spec, root): |
super(GclientGitCheckout, self).__init__(options, spec, root) |
assert 'solutions' in self.spec |
- keys = ['solutions', 'target_os', 'target_os_only'] |
- gclient_spec = '\n'.join('%s = %s' % (key, self.spec[key]) |
- for key in keys if key in self.spec) |
- self.spec['gclient_spec'] = gclient_spec |
+ |
+ def _format_spec(self): |
+ def _format_literal(lit): |
+ if isinstance(lit, basestring): |
+ return '"%s"' % lit |
+ if isinstance(lit, list): |
+ return '[%s]' % ', '.join(_format_literal(i) for i in lit) |
+ return '%r' % lit |
+ soln_strings = [] |
+ for soln in self.spec['solutions']: |
+ soln_string= '\n'.join(' "%s": %s,' % (key, _format_literal(value)) |
+ for key, value in soln.iteritems()) |
+ soln_strings.append(' {\n%s\n },' % soln_string) |
+ gclient_spec = 'solutions = [\n%s\n]\n' % '\n'.join(soln_strings) |
+ extra_keys = ['target_os', 'target_os_only'] |
+ gclient_spec += ''.join('%s = %s\n' % (key, _format_literal(self.spec[key])) |
+ for key in extra_keys if key in self.spec) |
+ return gclient_spec |
def exists(self): |
return os.path.exists(os.path.join(os.getcwd(), self.root)) |
def init(self): |
# Configure and do the gclient checkout. |
- self.run_gclient('config', '--spec', self.spec['gclient_spec']) |
+ self.run_gclient('config', '--spec', self._format_spec()) |
sync_cmd = ['sync'] |
if self.options.nohooks: |
sync_cmd.append('--nohooks') |