Instead of dynamically downloading these as needed during a build, this checks in those two dependencies directly into the Wren repo. That's a little lame because users of Wren who aren't building the CLI don't actually need them, but they aren't too big, so it's not a huge deal. It makes builds (particularly on Travis) more reliable, because they don't have to pull down additional content over the network.
47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
# Copyright 2014 Google Inc. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""A clone of the default copy.deepcopy that doesn't handle cyclic
|
|
structures or complex types except for dicts and lists. This is
|
|
because gyp copies so large structure that small copy overhead ends up
|
|
taking seconds in a project the size of Chromium."""
|
|
|
|
class Error(Exception):
|
|
pass
|
|
|
|
__all__ = ["Error", "deepcopy"]
|
|
|
|
def deepcopy(x):
|
|
"""Deep copy operation on gyp objects such as strings, ints, dicts
|
|
and lists. More than twice as fast as copy.deepcopy but much less
|
|
generic."""
|
|
|
|
try:
|
|
return _deepcopy_dispatch[type(x)](x)
|
|
except KeyError:
|
|
raise Error('Unsupported type %s for deepcopy. Use copy.deepcopy ' +
|
|
'or expand simple_copy support.' % type(x))
|
|
|
|
_deepcopy_dispatch = d = {}
|
|
|
|
def _deepcopy_atomic(x):
|
|
return x
|
|
|
|
for x in (type(None), int, long, float,
|
|
bool, str, unicode, type):
|
|
d[x] = _deepcopy_atomic
|
|
|
|
def _deepcopy_list(x):
|
|
return [deepcopy(a) for a in x]
|
|
d[list] = _deepcopy_list
|
|
|
|
def _deepcopy_dict(x):
|
|
y = {}
|
|
for key, value in x.iteritems():
|
|
y[deepcopy(key)] = deepcopy(value)
|
|
return y
|
|
d[dict] = _deepcopy_dict
|
|
|
|
del d
|