mirror of
https://chromium.googlesource.com/chromium/tools/depot_tools.git
synced 2026-01-11 18:51:29 +00:00
gclient_eval: Make compatible with Python 3.
Bug: 984182 Change-Id: I9485614658efa0ea9d50ea666210af63c3b97adc Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/1716131 Reviewed-by: Andrii Shyshkalov <tandrii@chromium.org> Commit-Queue: Edward Lesmes <ehmaldonado@chromium.org>
This commit is contained in:
@@ -11,18 +11,13 @@ import tokenize
|
|||||||
import gclient_utils
|
import gclient_utils
|
||||||
|
|
||||||
from third_party import schema
|
from third_party import schema
|
||||||
|
from third_party import six
|
||||||
|
|
||||||
if sys.version_info.major == 2:
|
if six.PY2:
|
||||||
# We use cStringIO.StringIO because it is equivalent to Py3's io.StringIO.
|
# We use cStringIO.StringIO because it is equivalent to Py3's io.StringIO.
|
||||||
from cStringIO import StringIO
|
from cStringIO import StringIO
|
||||||
else:
|
else:
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
|
||||||
|
|
||||||
# TODO(crbug.com/953884): Remove this when python3 migration is done.
|
|
||||||
try:
|
|
||||||
basestring
|
|
||||||
except NameError:
|
|
||||||
# pylint: disable=redefined-builtin
|
# pylint: disable=redefined-builtin
|
||||||
basestring = str
|
basestring = str
|
||||||
|
|
||||||
@@ -57,7 +52,7 @@ class _NodeDict(collections.MutableMapping):
|
|||||||
def MoveTokens(self, origin, delta):
|
def MoveTokens(self, origin, delta):
|
||||||
if self.tokens:
|
if self.tokens:
|
||||||
new_tokens = {}
|
new_tokens = {}
|
||||||
for pos, token in self.tokens.iteritems():
|
for pos, token in six.iteritems(self.tokens):
|
||||||
if pos[0] >= origin:
|
if pos[0] >= origin:
|
||||||
pos = (pos[0] + delta, pos[1])
|
pos = (pos[0] + delta, pos[1])
|
||||||
token = token[:2] + (pos,) + token[3:]
|
token = token[:2] + (pos,) + token[3:]
|
||||||
@@ -245,7 +240,7 @@ def _gclient_eval(node_or_string, filename='<unknown>', vars_dict=None):
|
|||||||
raise KeyError(
|
raise KeyError(
|
||||||
'%s was used as a variable, but was not declared in the vars dict '
|
'%s was used as a variable, but was not declared in the vars dict '
|
||||||
'(file %r, line %s)' % (
|
'(file %r, line %s)' % (
|
||||||
e.message, filename, getattr(node, 'lineno', '<unknown>')))
|
e.args[0], filename, getattr(node, 'lineno', '<unknown>')))
|
||||||
elif isinstance(node, ast.Num):
|
elif isinstance(node, ast.Num):
|
||||||
return node.n
|
return node.n
|
||||||
elif isinstance(node, ast.Tuple):
|
elif isinstance(node, ast.Tuple):
|
||||||
@@ -514,14 +509,14 @@ def Parse(content, validate_syntax, filename, vars_override=None,
|
|||||||
|
|
||||||
if 'deps_os' in result:
|
if 'deps_os' in result:
|
||||||
deps = result.setdefault('deps', {})
|
deps = result.setdefault('deps', {})
|
||||||
for os_name, os_deps in result['deps_os'].iteritems():
|
for os_name, os_deps in six.iteritems(result['deps_os']):
|
||||||
os_deps = _StandardizeDeps(os_deps, vars_dict)
|
os_deps = _StandardizeDeps(os_deps, vars_dict)
|
||||||
_MergeDepsOs(deps, os_deps, os_name)
|
_MergeDepsOs(deps, os_deps, os_name)
|
||||||
del result['deps_os']
|
del result['deps_os']
|
||||||
|
|
||||||
if 'hooks_os' in result:
|
if 'hooks_os' in result:
|
||||||
hooks = result.setdefault('hooks', [])
|
hooks = result.setdefault('hooks', [])
|
||||||
for os_name, os_hooks in result['hooks_os'].iteritems():
|
for os_name, os_hooks in six.iteritems(result['hooks_os']):
|
||||||
for hook in os_hooks:
|
for hook in os_hooks:
|
||||||
UpdateCondition(hook, 'and', 'checkout_' + os_name)
|
UpdateCondition(hook, 'and', 'checkout_' + os_name)
|
||||||
hooks.extend(os_hooks)
|
hooks.extend(os_hooks)
|
||||||
@@ -569,6 +564,9 @@ def EvaluateCondition(condition, variables, referenced_variables=None):
|
|||||||
# between arguments for GN to be passed verbatim, and ones to
|
# between arguments for GN to be passed verbatim, and ones to
|
||||||
# be evaluated.
|
# be evaluated.
|
||||||
return node.id
|
return node.id
|
||||||
|
elif not sys.version_info[:2] < (3, 4) and isinstance(
|
||||||
|
node, ast.NameConstant): # Since Python 3.4
|
||||||
|
return node.value
|
||||||
elif isinstance(node, ast.BoolOp) and isinstance(node.op, ast.Or):
|
elif isinstance(node, ast.BoolOp) and isinstance(node.op, ast.Or):
|
||||||
if len(node.values) != 2:
|
if len(node.values) != 2:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ class GClientEvalTest(unittest.TestCase):
|
|||||||
input_data = ['{'] + ['"%s": "%s",' % (n, n) for n in test_case] + ['}']
|
input_data = ['{'] + ['"%s": "%s",' % (n, n) for n in test_case] + ['}']
|
||||||
expected = [(str(n), str(n)) for n in test_case]
|
expected = [(str(n), str(n)) for n in test_case]
|
||||||
result = gclient_eval._gclient_eval(''.join(input_data))
|
result = gclient_eval._gclient_eval(''.join(input_data))
|
||||||
self.assertEqual(expected, result.items())
|
self.assertEqual(expected, list(result.items()))
|
||||||
|
|
||||||
|
|
||||||
class ExecTest(unittest.TestCase):
|
class ExecTest(unittest.TestCase):
|
||||||
|
|||||||
Reference in New Issue
Block a user