| Index: gclient.py
|
| diff --git a/gclient.py b/gclient.py
|
| index 76de96f6ece8ecab6c3c385c789a48c12dd0a5ef..c91068487f96017fabf8c93e91f6aeee0a69fab9 100755
|
| --- a/gclient.py
|
| +++ b/gclient.py
|
| @@ -514,15 +514,9 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
|
| """Parses the DEPS file for this dependency."""
|
| assert not self.deps_parsed
|
| assert not self.dependencies
|
| - # One thing is unintuitive, vars = {} must happen before Var() use.
|
| - local_scope = {}
|
| - var = self.VarImpl(self.custom_vars, local_scope)
|
| - global_scope = {
|
| - 'File': self.FileImpl,
|
| - 'From': self.FromImpl,
|
| - 'Var': var.Lookup,
|
| - 'deps_os': {},
|
| - }
|
| +
|
| + deps_content = None
|
| + use_strict = False
|
| filepath = os.path.join(self.root.root_dir, self.name, self.deps_file)
|
| if not os.path.isfile(filepath):
|
| logging.info(
|
| @@ -531,11 +525,39 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
|
| else:
|
| deps_content = gclient_utils.FileRead(filepath)
|
| logging.debug('ParseDepsFile(%s) read:\n%s' % (self.name, deps_content))
|
| + use_strict = 'use strict' in deps_content.splitlines()[0]
|
| +
|
| + local_scope = {}
|
| + if deps_content:
|
| + # One thing is unintuitive, vars = {} must happen before Var() use.
|
| + var = self.VarImpl(self.custom_vars, local_scope)
|
| + if use_strict:
|
| + logging.info(
|
| + 'ParseDepsFile(%s): Strict Mode Enabled', self.name)
|
| + global_scope = {
|
| + '__builtins__': {'None': None},
|
| + 'Var': var.Lookup,
|
| + 'deps_os': {},
|
| + }
|
| + else:
|
| + global_scope = {
|
| + 'File': self.FileImpl,
|
| + 'From': self.FromImpl,
|
| + 'Var': var.Lookup,
|
| + 'deps_os': {},
|
| + }
|
| # Eval the content.
|
| try:
|
| exec(deps_content, global_scope, local_scope)
|
| except SyntaxError, e:
|
| gclient_utils.SyntaxErrorToError(filepath, e)
|
| + if use_strict:
|
| + for key, val in local_scope.iteritems():
|
| + if not isinstance(val, (dict, list, tuple, str)):
|
| + raise gclient_utils.Error(
|
| + 'ParseDepsFile(%s): Strict mode disallows %r -> %r' %
|
| + (self.name, key, val))
|
| +
|
| deps = local_scope.get('deps', {})
|
| if 'recursion' in local_scope:
|
| self.recursion_override = local_scope.get('recursion')
|
|
|