libv8 6.0.286.44.0beta1 → 6.0.286.54.0beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -2
- data/ext/libv8/location.rb +1 -1
- data/ext/libv8/paths.rb +1 -1
- data/lib/libv8/version.rb +1 -1
- data/patches/0001-Build-a-standalone-static-library.patch +1 -1
- data/patches/0002-Don-t-compile-unnecessary-stuff.patch +9 -11
- data/patches/0003-Use-the-fPIC-flag-for-the-static-library.patch +1 -1
- data/patches/0004-Do-not-embed-debug-symbols-in-macOS-libraries.patch +1 -1
- data/patches/0005-Fix-GCC-7-build-errors.patch +1 -1
- data/spec/location_spec.rb +1 -1
- data/vendor/depot_tools/.gitattributes +1 -1
- data/vendor/depot_tools/bootstrap/win/manifest.txt +1 -1
- data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +1 -1
- data/vendor/depot_tools/bootstrap/win/win_tools.bat +1 -1
- data/vendor/depot_tools/cipd +2 -3
- data/vendor/depot_tools/cipd.ps1 +2 -6
- data/vendor/depot_tools/cipd_bin_setup.bat +1 -1
- data/vendor/depot_tools/cipd_bin_setup.sh +3 -1
- data/vendor/depot_tools/cipd_client_version +1 -1
- data/vendor/depot_tools/cpplint.py +0 -31
- data/vendor/depot_tools/gclient.py +162 -88
- data/vendor/depot_tools/gclient_utils.py +5 -0
- data/vendor/depot_tools/gerrit_client.py +0 -0
- data/vendor/depot_tools/gerrit_util.py +2 -2
- data/vendor/depot_tools/git_cl.py +25 -12
- data/vendor/depot_tools/infra/config/recipes.cfg +2 -2
- data/vendor/depot_tools/led +1 -1
- data/vendor/depot_tools/led.bat +1 -1
- data/vendor/depot_tools/my_activity.py +26 -16
- data/vendor/depot_tools/presubmit_canned_checks.py +1 -1
- data/vendor/depot_tools/presubmit_support.py +15 -4
- data/vendor/depot_tools/recipes/README.recipes.md +21 -14
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +18 -11
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref_custom.json +29 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_empty_revision.json +156 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +27 -1
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +11 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +8 -9
- data/vendor/depot_tools/recipes/recipes.py +2 -2
- data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +162 -0
- data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.py +53 -0
- data/vendor/depot_tools/update_depot_tools +13 -7
- data/vendor/depot_tools/update_depot_tools.bat +7 -2
- data/vendor/depot_tools/vpython +1 -1
- data/vendor/depot_tools/vpython.bat +1 -1
- data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +7 -3
- data/vendor/v8/AUTHORS +1 -0
- data/vendor/v8/codereview.settings +2 -4
- data/vendor/v8/include/v8-version.h +1 -1
- data/vendor/v8/src/builtins/builtins-array-gen.cc +1 -0
- data/vendor/v8/src/compiler/escape-analysis.cc +1 -4
- data/vendor/v8/src/compiler/load-elimination.cc +1 -1
- data/vendor/v8/src/d8.cc +1 -0
- data/vendor/v8/src/map-updater.cc +39 -2
- data/vendor/v8/src/map-updater.h +9 -2
- data/vendor/v8/src/objects-debug.cc +7 -1
- data/vendor/v8/src/objects.cc +33 -6
- data/vendor/v8/src/objects.h +0 -1
- data/vendor/v8/src/objects/map-inl.h +15 -0
- data/vendor/v8/src/objects/map.h +6 -0
- data/vendor/v8/src/v8.gyp +7 -0
- data/vendor/v8/src/wasm/wasm-module.cc +10 -8
- data/vendor/v8/tools/run-tests.py +1 -1
- metadata +6 -5
- data/vendor/depot_tools/win_toolchain/7z/7z.dll +0 -0
- data/vendor/depot_tools/win_toolchain/7z/7z.exe +0 -0
- data/vendor/depot_tools/win_toolchain/7z/LICENSE +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91d67fd3a863b85bccfc38a1416c7382ea245228
|
4
|
+
data.tar.gz: b0089b40f9d4baa10876231a50acc1460ff6599c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c27163faaf1d7f9149315d3b0c2528a8ae680f0e486649f8d2e8889e18723e3f3fd631fb854346e3dd8fa275adae162abdd29e67fbfc7ef00d41ccc47901be91
|
7
|
+
data.tar.gz: 1278dcaed4fb81ed8636ec69d54b554ebc1b563c4c4df1cff1e357ddd8d9b597dfaf498f7af6a39edf297f810c364740e8c5198a56a0d070ef252dd28b18fb24
|
data/CHANGELOG.md
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
###
|
1
|
+
### v6.0.286.54.0 - Unreleased
|
2
2
|
|
3
|
-
* Update upstream v8 version to 6.0.286.
|
3
|
+
* Update upstream v8 version to 6.0.286.54
|
4
4
|
* V8 source is no longer pulled using the fetch command from depot_tools but is
|
5
5
|
instead added as a submodule in the current tree
|
6
6
|
* Hooks are no longer ran after syncing V8's upstream dependencies
|
7
|
+
* Reordered libraries in accordance with the V8 wiki
|
8
|
+
* Added groups around the library flags in accordance with the V8 wiki
|
7
9
|
|
8
10
|
### v5.9.211.38.0, v5.9.211.38.1 - 2017-07-26
|
9
11
|
|
data/ext/libv8/location.rb
CHANGED
@@ -29,7 +29,7 @@ module Libv8
|
|
29
29
|
|
30
30
|
def configure(context = MkmfContext.new)
|
31
31
|
context.incflags.insert 0, Libv8::Paths.include_paths.map{ |p| "-I#{p}" }.join(" ") + " "
|
32
|
-
context.ldflags.insert 0, Libv8::Paths.object_paths.join(" ") + " "
|
32
|
+
context.ldflags.insert 0, "-Wl,--start-group " + Libv8::Paths.object_paths.join(" ") + " -Wl,--end-group "
|
33
33
|
end
|
34
34
|
|
35
35
|
def verify_installation!
|
data/ext/libv8/paths.rb
CHANGED
data/lib/libv8/version.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
From
|
1
|
+
From 6c28fb0319c5e2e7afad4b5731fc0ded86e1f7e7 Mon Sep 17 00:00:00 2001
|
2
2
|
From: Petko Bordjukov <bordjukov@gmail.com>
|
3
3
|
Date: Mon, 25 Jul 2016 00:00:19 +0300
|
4
4
|
Subject: [PATCH 1/5] Build a standalone static library
|
@@ -1,18 +1,18 @@
|
|
1
|
-
From
|
1
|
+
From 31d199f67ff88be5576869abcc23ecf219fa1e6f Mon Sep 17 00:00:00 2001
|
2
2
|
From: Petko Bordjukov <bordjukov@gmail.com>
|
3
|
-
Date:
|
3
|
+
Date: Fri, 28 Jul 2017 11:11:08 +0300
|
4
4
|
Subject: [PATCH 2/5] Don't compile unnecessary stuff
|
5
5
|
|
6
6
|
---
|
7
|
-
Makefile |
|
7
|
+
Makefile | 12 +++---------
|
8
8
|
gypfiles/all.gyp | 33 ---------------------------------
|
9
|
-
2 files changed,
|
9
|
+
2 files changed, 3 insertions(+), 42 deletions(-)
|
10
10
|
|
11
11
|
diff --git a/Makefile b/Makefile
|
12
|
-
index ed5b3a7fab..
|
12
|
+
index ed5b3a7fab..04eddb5e8a 100644
|
13
13
|
--- a/Makefile
|
14
14
|
+++ b/Makefile
|
15
|
-
@@ -265,
|
15
|
+
@@ -265,15 +265,9 @@ ANDROID_ARCHES = android_ia32 android_x64 android_arm android_arm64 \
|
16
16
|
android_mipsel android_x87
|
17
17
|
|
18
18
|
# List of files that trigger Makefile regeneration:
|
@@ -25,14 +25,12 @@ index ed5b3a7fab..360dc3a1a1 100644
|
|
25
25
|
- tools/parser-shell.gyp testing/gmock.gyp testing/gtest.gyp \
|
26
26
|
- buildtools/third_party/libc++abi/libc++abi.gyp \
|
27
27
|
- buildtools/third_party/libc++/libc++.gyp samples/samples.gyp \
|
28
|
-
- src/third_party/vtune/v8vtune.gyp src/d8.gyp
|
29
28
|
+GYPFILES = gypfiles/shim_headers.gypi gypfiles/features.gypi \
|
30
|
-
+ gypfiles/standalone.gypi gypfiles/
|
31
|
-
+
|
32
|
-
|
29
|
+
+ gypfiles/standalone.gypi gypfiles/all.gyp \
|
30
|
+
+ gypfiles/mac/asan.gyp src/v8.gyp tools/parser-shell.gyp \
|
31
|
+
src/third_party/vtune/v8vtune.gyp src/d8.gyp
|
33
32
|
|
34
33
|
# If vtunejit=on, the v8vtune.gyp will be appended.
|
35
|
-
ifeq ($(vtunejit), on)
|
36
34
|
diff --git a/gypfiles/all.gyp b/gypfiles/all.gyp
|
37
35
|
index bc9d9650eb..96820a0ecc 100644
|
38
36
|
--- a/gypfiles/all.gyp
|
@@ -1,4 +1,4 @@
|
|
1
|
-
From
|
1
|
+
From fe76837b00357250a01ad71c4cce4b7524dd765f Mon Sep 17 00:00:00 2001
|
2
2
|
From: Petko Bordjukov <bordjukov@gmail.com>
|
3
3
|
Date: Mon, 25 Jul 2016 00:05:47 +0300
|
4
4
|
Subject: [PATCH 3/5] Use the -fPIC flag for the static library
|
@@ -1,4 +1,4 @@
|
|
1
|
-
From
|
1
|
+
From 7b00cf7c2c13d4c528bccd3bc4a91426f4e35145 Mon Sep 17 00:00:00 2001
|
2
2
|
From: Jb Aviat <jb@sqreen.io>
|
3
3
|
Date: Mon, 27 Feb 2017 11:14:42 +0200
|
4
4
|
Subject: [PATCH 4/5] Do not embed debug symbols in macOS libraries
|
@@ -1,4 +1,4 @@
|
|
1
|
-
From
|
1
|
+
From a8f772b3a6bcfad871b4d09935727032faf84df2 Mon Sep 17 00:00:00 2001
|
2
2
|
From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= <mic.besace@gmail.com>
|
3
3
|
Date: Tue, 20 Jun 2017 13:14:38 +0200
|
4
4
|
Subject: [PATCH 5/5] Fix GCC 7 build errors
|
data/spec/location_spec.rb
CHANGED
@@ -64,7 +64,7 @@ describe "libv8 locations" do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
it "prepends the locations of any libv8 objects on the the ldflags" do
|
67
|
-
expect(@context.ldflags).to eql "/foo\\ bar/v8/out/x64.release/obj.target/tools/gyp/libv8_base.a /foo\\ bar/v8/out/x64.release/obj.target/tools/gyp/
|
67
|
+
expect(@context.ldflags).to eql "-Wl,--start-group /foo\\ bar/v8/out/x64.release/obj.target/tools/gyp/libv8_base.a /foo\\ bar/v8/out/x64.release/obj.target/tools/gyp/libv8_libbase.a /foo\\ bar/v8/out/x64.release/obj.target/tools/gyp/libv8_snapshot.a /foo\\ bar/v8/out/x64.release/obj.target/tools/gyp/libv8_libplatform.a /foo\\ bar/v8/out/x64.release/obj.target/tools/gyp/libv8_libsampler.a -Wl,--end-group -lobjc -lpthread"
|
68
68
|
end
|
69
69
|
end
|
70
70
|
end
|
@@ -58,7 +58,7 @@ set WIN_TOOLS_EXTRA_ARGS=%WIN_TOOLS_EXTRA_ARGS% --win-tools-name "%WIN_TOOLS_NAM
|
|
58
58
|
:: Install our CIPD packages. The CIPD client self-bootstraps.
|
59
59
|
:: See "//cipd.bat" and "//cipd.ps1" for more information.
|
60
60
|
set CIPD_EXE=%WIN_TOOLS_ROOT_DIR%\cipd.bat
|
61
|
-
call "%CIPD_EXE%" ensure -ensure-file "%~dp0%CIPD_MANIFEST%" -root "%WIN_TOOLS_PATH%"
|
61
|
+
call "%CIPD_EXE%" ensure -log-level warning -ensure-file "%~dp0%CIPD_MANIFEST%" -root "%WIN_TOOLS_PATH%"
|
62
62
|
if errorlevel 1 goto :END
|
63
63
|
|
64
64
|
:: This executes "win_tools.py" using the bundle's Python interpreter.
|
data/vendor/depot_tools/cipd
CHANGED
@@ -49,8 +49,7 @@ CLIENT="$MYPATH/.cipd_client"
|
|
49
49
|
USER_AGENT="depot_tools/$(git -C $MYPATH rev-parse HEAD 2>/dev/null || echo "???")"
|
50
50
|
|
51
51
|
if [ ! -e "$CLIENT" ]; then
|
52
|
-
echo "Bootstrapping cipd client for ${PLAT}-${ARCH}..."
|
53
|
-
echo "From $URL"
|
52
|
+
echo "Bootstrapping cipd client for ${PLAT}-${ARCH} from ${URL}..."
|
54
53
|
if hash curl 2> /dev/null ; then
|
55
54
|
# Download the client into a temporary file, then move it into the final
|
56
55
|
# location atomically.
|
@@ -60,7 +59,7 @@ if [ ! -e "$CLIENT" ]; then
|
|
60
59
|
mktemp -p "$MYPATH" 2>/dev/null || \
|
61
60
|
mktemp "$MYPATH/.cipd_client.XXXXXXX")
|
62
61
|
|
63
|
-
curl "$URL" -f -A "$USER_AGENT" -L -o "$CIPD_CLIENT_TMP"
|
62
|
+
curl "$URL" -s --show-error -f -A "$USER_AGENT" -L -o "$CIPD_CLIENT_TMP"
|
64
63
|
chmod +x "$CIPD_CLIENT_TMP"
|
65
64
|
|
66
65
|
set +e
|
data/vendor/depot_tools/cipd.ps1
CHANGED
@@ -49,12 +49,8 @@ while ($true) {
|
|
49
49
|
$cipd_lock_file = [IO.File]::OpenWrite($cipd_lock)
|
50
50
|
|
51
51
|
if (!(Test-Path $client)) {
|
52
|
-
echo "Bootstrapping cipd client for $plat-$arch..."
|
53
|
-
echo "From $url"
|
52
|
+
echo "Bootstrapping cipd client for $plat-$arch from $url..."
|
54
53
|
|
55
|
-
# TODO(iannucci): It would be really nice if there was a way to get this to
|
56
|
-
# show progress without also completely destroying the download speed, but
|
57
|
-
# I can't seem to find a way to do it. Patches welcome :)
|
58
54
|
$wc = (New-Object System.Net.WebClient)
|
59
55
|
$wc.Headers.add('User-Agent', $user_agent)
|
60
56
|
$wc.DownloadFile($url, $client)
|
@@ -68,4 +64,4 @@ while ($true) {
|
|
68
64
|
$cipd_lock_file.close()
|
69
65
|
}
|
70
66
|
}
|
71
|
-
}
|
67
|
+
}
|
@@ -3,4 +3,4 @@
|
|
3
3
|
:: Use of this source code is governed by a BSD-style license that can be
|
4
4
|
:: found in the LICENSE file.
|
5
5
|
|
6
|
-
"%~dp0\cipd.bat" ensure -ensure-file "%~dp0\cipd_manifest.txt" -root "%~dp0\.cipd_bin"
|
6
|
+
"%~dp0\cipd.bat" ensure -log-level warning -ensure-file "%~dp0\cipd_manifest.txt" -root "%~dp0\.cipd_bin"
|
@@ -5,6 +5,8 @@
|
|
5
5
|
function cipd_bin_setup {
|
6
6
|
local MYPATH=$(dirname "${BASH_SOURCE[0]}")
|
7
7
|
|
8
|
-
"$MYPATH/cipd" ensure
|
8
|
+
"$MYPATH/cipd" ensure \
|
9
|
+
-log-level warning \
|
10
|
+
-ensure-file "$MYPATH/cipd_manifest.txt" \
|
9
11
|
-root "$MYPATH/.cipd_bin"
|
10
12
|
}
|
@@ -1 +1 @@
|
|
1
|
-
git_revision:
|
1
|
+
git_revision:cf5b0de14e94b06274d15e84b19449f580576e80
|
@@ -3045,36 +3045,6 @@ def CheckComment(line, filename, linenum, next_line_start, error):
|
|
3045
3045
|
'Should have a space between // and comment')
|
3046
3046
|
|
3047
3047
|
|
3048
|
-
def CheckAccess(filename, clean_lines, linenum, nesting_state, error):
|
3049
|
-
"""Checks for improper use of DISALLOW* macros.
|
3050
|
-
|
3051
|
-
Args:
|
3052
|
-
filename: The name of the current file.
|
3053
|
-
clean_lines: A CleansedLines instance containing the file.
|
3054
|
-
linenum: The number of the line to check.
|
3055
|
-
nesting_state: A NestingState instance which maintains information about
|
3056
|
-
the current stack of nested blocks being parsed.
|
3057
|
-
error: The function to call with any errors found.
|
3058
|
-
"""
|
3059
|
-
line = clean_lines.elided[linenum] # get rid of comments and strings
|
3060
|
-
|
3061
|
-
matched = Match((r'\s*(DISALLOW_COPY_AND_ASSIGN|'
|
3062
|
-
r'DISALLOW_IMPLICIT_CONSTRUCTORS)'), line)
|
3063
|
-
if not matched:
|
3064
|
-
return
|
3065
|
-
if nesting_state.stack and isinstance(nesting_state.stack[-1], _ClassInfo):
|
3066
|
-
if nesting_state.stack[-1].access != 'private':
|
3067
|
-
error(filename, linenum, 'readability/constructors', 3,
|
3068
|
-
'%s must be in the private: section' % matched.group(1))
|
3069
|
-
|
3070
|
-
else:
|
3071
|
-
# Found DISALLOW* macro outside a class declaration, or perhaps it
|
3072
|
-
# was used inside a function when it should have been part of the
|
3073
|
-
# class declaration. We could issue a warning here, but it
|
3074
|
-
# probably resulted in a compiler error already.
|
3075
|
-
pass
|
3076
|
-
|
3077
|
-
|
3078
3048
|
def CheckSpacing(filename, clean_lines, linenum, nesting_state, error):
|
3079
3049
|
"""Checks for the correctness of various spacing issues in the code.
|
3080
3050
|
|
@@ -4303,7 +4273,6 @@ def CheckStyle(filename, clean_lines, linenum, file_extension, nesting_state,
|
|
4303
4273
|
CheckBraces(filename, clean_lines, linenum, error)
|
4304
4274
|
CheckTrailingSemicolon(filename, clean_lines, linenum, error)
|
4305
4275
|
CheckEmptyBlockBody(filename, clean_lines, linenum, error)
|
4306
|
-
CheckAccess(filename, clean_lines, linenum, nesting_state, error)
|
4307
4276
|
CheckSpacing(filename, clean_lines, linenum, nesting_state, error)
|
4308
4277
|
CheckOperatorSpacing(filename, clean_lines, linenum, error)
|
4309
4278
|
CheckParenthesisSpacing(filename, clean_lines, linenum, error)
|
@@ -194,7 +194,8 @@ class Hook(object):
|
|
194
194
|
not gclient_eval.EvaluateCondition(self._condition, self._variables)):
|
195
195
|
return
|
196
196
|
|
197
|
-
cmd =
|
197
|
+
cmd = [arg.format(**self._variables) for arg in self._action]
|
198
|
+
|
198
199
|
if cmd[0] == 'python':
|
199
200
|
# If the hook specified "python" as the first item, the action is a
|
200
201
|
# Python script. Run it by starting a new copy of the same
|
@@ -221,32 +222,16 @@ class Hook(object):
|
|
221
222
|
gclient_utils.CommandToStr(cmd), elapsed_time))
|
222
223
|
|
223
224
|
|
224
|
-
class
|
225
|
-
class VarImpl(object):
|
226
|
-
def __init__(self, custom_vars, local_scope):
|
227
|
-
self._custom_vars = custom_vars
|
228
|
-
self._local_scope = local_scope
|
229
|
-
|
230
|
-
def Lookup(self, var_name):
|
231
|
-
"""Implements the Var syntax."""
|
232
|
-
if var_name in self._custom_vars:
|
233
|
-
return self._custom_vars[var_name]
|
234
|
-
elif var_name in self._local_scope.get("vars", {}):
|
235
|
-
return self._local_scope["vars"][var_name]
|
236
|
-
raise gclient_utils.Error("Var is not defined: %s" % var_name)
|
237
|
-
|
238
|
-
|
239
|
-
class DependencySettings(GClientKeywords):
|
225
|
+
class DependencySettings(object):
|
240
226
|
"""Immutable configuration settings."""
|
241
227
|
def __init__(
|
242
|
-
self, parent, url, managed, custom_deps, custom_vars,
|
228
|
+
self, parent, raw_url, url, managed, custom_deps, custom_vars,
|
243
229
|
custom_hooks, deps_file, should_process, relative,
|
244
230
|
condition, condition_value):
|
245
|
-
GClientKeywords.__init__(self)
|
246
|
-
|
247
231
|
# These are not mutable:
|
248
232
|
self._parent = parent
|
249
233
|
self._deps_file = deps_file
|
234
|
+
self._raw_url = raw_url
|
250
235
|
self._url = url
|
251
236
|
# The condition as string (or None). Useful to keep e.g. for flatten.
|
252
237
|
self._condition = condition
|
@@ -324,8 +309,14 @@ class DependencySettings(GClientKeywords):
|
|
324
309
|
def custom_hooks(self):
|
325
310
|
return self._custom_hooks[:]
|
326
311
|
|
312
|
+
@property
|
313
|
+
def raw_url(self):
|
314
|
+
"""URL before variable expansion."""
|
315
|
+
return self._raw_url
|
316
|
+
|
327
317
|
@property
|
328
318
|
def url(self):
|
319
|
+
"""URL after variable expansion."""
|
329
320
|
return self._url
|
330
321
|
|
331
322
|
@property
|
@@ -354,12 +345,12 @@ class DependencySettings(GClientKeywords):
|
|
354
345
|
class Dependency(gclient_utils.WorkItem, DependencySettings):
|
355
346
|
"""Object that represents a dependency checkout."""
|
356
347
|
|
357
|
-
def __init__(self, parent, name, url, managed, custom_deps,
|
348
|
+
def __init__(self, parent, name, raw_url, url, managed, custom_deps,
|
358
349
|
custom_vars, custom_hooks, deps_file, should_process,
|
359
350
|
relative, condition, condition_value):
|
360
351
|
gclient_utils.WorkItem.__init__(self, name)
|
361
352
|
DependencySettings.__init__(
|
362
|
-
self, parent, url, managed, custom_deps, custom_vars,
|
353
|
+
self, parent, raw_url, url, managed, custom_deps, custom_vars,
|
363
354
|
custom_hooks, deps_file, should_process, relative,
|
364
355
|
condition, condition_value)
|
365
356
|
|
@@ -553,7 +544,7 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
|
|
553
544
|
raise gclient_utils.Error('Unknown url type')
|
554
545
|
|
555
546
|
@staticmethod
|
556
|
-
def MergeWithOsDeps(deps, deps_os, target_os_list):
|
547
|
+
def MergeWithOsDeps(deps, deps_os, target_os_list, process_all_deps):
|
557
548
|
"""Returns a new "deps" structure that is the deps sent in updated
|
558
549
|
with information from deps_os (the deps_os section of the DEPS
|
559
550
|
file) that matches the list of target os."""
|
@@ -570,7 +561,7 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
|
|
570
561
|
if isinstance(value, basestring):
|
571
562
|
value = {'url': value}
|
572
563
|
assert isinstance(value, collections.Mapping), (key, value)
|
573
|
-
value['should_process'] = dep_os in target_os_list
|
564
|
+
value['should_process'] = dep_os in target_os_list or process_all_deps
|
574
565
|
|
575
566
|
# Handle collisions/overrides.
|
576
567
|
if key in new_deps and new_deps[key] != value:
|
@@ -636,21 +627,25 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
|
|
636
627
|
condition = None
|
637
628
|
condition_value = True
|
638
629
|
if isinstance(dep_value, basestring):
|
639
|
-
|
630
|
+
raw_url = dep_value
|
640
631
|
else:
|
641
632
|
# This should be guaranteed by schema checking in gclient_eval.
|
642
633
|
assert isinstance(dep_value, collections.Mapping)
|
643
|
-
|
634
|
+
raw_url = dep_value['url']
|
644
635
|
# Take into account should_process metadata set by MergeWithOsDeps.
|
645
636
|
should_process = (should_process and
|
646
637
|
dep_value.get('should_process', True))
|
647
638
|
condition = dep_value.get('condition')
|
639
|
+
|
640
|
+
url = raw_url.format(**self.get_vars())
|
641
|
+
|
648
642
|
if condition:
|
649
643
|
condition_value = gclient_eval.EvaluateCondition(
|
650
644
|
condition, self.get_vars())
|
651
|
-
|
645
|
+
if not self._get_option('process_all_deps', False):
|
646
|
+
should_process = should_process and condition_value
|
652
647
|
deps_to_add.append(Dependency(
|
653
|
-
self, name, url, None, None, self.custom_vars, None,
|
648
|
+
self, name, raw_url, url, None, None, self.custom_vars, None,
|
654
649
|
deps_file, should_process, use_relative_paths, condition,
|
655
650
|
condition_value))
|
656
651
|
deps_to_add.sort(key=lambda x: x.name)
|
@@ -685,10 +680,8 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
|
|
685
680
|
|
686
681
|
local_scope = {}
|
687
682
|
if deps_content:
|
688
|
-
# One thing is unintuitive, vars = {} must happen before Var() use.
|
689
|
-
var = self.VarImpl(self.custom_vars, local_scope)
|
690
683
|
global_scope = {
|
691
|
-
'Var':
|
684
|
+
'Var': lambda var_name: '{%s}' % var_name,
|
692
685
|
'deps_os': {},
|
693
686
|
}
|
694
687
|
# Eval the content.
|
@@ -715,9 +708,14 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
|
|
715
708
|
self._gn_args_file = local_scope.get('gclient_gn_args_file')
|
716
709
|
self._gn_args = local_scope.get('gclient_gn_args', [])
|
717
710
|
|
711
|
+
self._vars = local_scope.get('vars', {})
|
712
|
+
if self.parent:
|
713
|
+
for key, value in self.parent.get_vars().iteritems():
|
714
|
+
if key in self._vars:
|
715
|
+
self._vars[key] = value
|
718
716
|
# Since we heavily post-process things, freeze ones which should
|
719
717
|
# reflect original state of DEPS.
|
720
|
-
self._vars = gclient_utils.freeze(
|
718
|
+
self._vars = gclient_utils.freeze(self._vars)
|
721
719
|
|
722
720
|
# If use_relative_paths is set in the DEPS file, regenerate
|
723
721
|
# the dictionary using paths relative to the directory containing
|
@@ -734,7 +732,10 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
|
|
734
732
|
elif self._relative:
|
735
733
|
rel_prefix = os.path.dirname(self.name)
|
736
734
|
|
737
|
-
deps =
|
735
|
+
deps = {}
|
736
|
+
for key, value in local_scope.get('deps', {}).iteritems():
|
737
|
+
deps[key.format(**self.get_vars())] = value
|
738
|
+
|
738
739
|
if 'recursion' in local_scope:
|
739
740
|
self.recursion_override = local_scope.get('recursion')
|
740
741
|
logging.warning(
|
@@ -770,7 +771,8 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
|
|
770
771
|
if target_os_list and not self._get_option(
|
771
772
|
'do_not_merge_os_specific_entries', False):
|
772
773
|
deps = self.MergeWithOsDeps(
|
773
|
-
deps, local_scope['deps_os'], target_os_list
|
774
|
+
deps, local_scope['deps_os'], target_os_list,
|
775
|
+
self._get_option('process_all_deps', False))
|
774
776
|
|
775
777
|
deps_to_add = self._deps_to_objects(
|
776
778
|
self._postprocess_deps(deps, rel_prefix), use_relative_paths)
|
@@ -1168,6 +1170,7 @@ class GClient(Dependency):
|
|
1168
1170
|
"linux2": "unix",
|
1169
1171
|
"linux3": "unix",
|
1170
1172
|
"android": "android",
|
1173
|
+
"ios": "ios",
|
1171
1174
|
}
|
1172
1175
|
|
1173
1176
|
DEFAULT_CLIENT_FILE_TEXT = ("""\
|
@@ -1203,7 +1206,7 @@ solutions = [
|
|
1203
1206
|
# Do not change previous behavior. Only solution level and immediate DEPS
|
1204
1207
|
# are processed.
|
1205
1208
|
self._recursion_limit = 2
|
1206
|
-
Dependency.__init__(self, None, None, None, True, None, None, None,
|
1209
|
+
Dependency.__init__(self, None, None, None, None, True, None, None, None,
|
1207
1210
|
'unused', True, None, None, True)
|
1208
1211
|
self._options = options
|
1209
1212
|
if options.deps_os:
|
@@ -1267,7 +1270,7 @@ it or fix the checkout.
|
|
1267
1270
|
else:
|
1268
1271
|
self._enforced_os = tuple(set(self._enforced_os).union(target_os))
|
1269
1272
|
|
1270
|
-
cache_dir = config_dict.get('cache_dir')
|
1273
|
+
cache_dir = config_dict.get('cache_dir', self._options.cache_dir)
|
1271
1274
|
if cache_dir:
|
1272
1275
|
cache_dir = os.path.join(self.root_dir, cache_dir)
|
1273
1276
|
cache_dir = os.path.abspath(cache_dir)
|
@@ -1286,7 +1289,7 @@ it or fix the checkout.
|
|
1286
1289
|
for s in config_dict.get('solutions', []):
|
1287
1290
|
try:
|
1288
1291
|
deps_to_add.append(Dependency(
|
1289
|
-
self, s['name'], s['url'],
|
1292
|
+
self, s['name'], s['url'], s['url'],
|
1290
1293
|
s.get('managed', True),
|
1291
1294
|
s.get('custom_deps', {}),
|
1292
1295
|
s.get('custom_vars', {}),
|
@@ -1719,6 +1722,31 @@ class Flattener(object):
|
|
1719
1722
|
assert self._deps_string is not None
|
1720
1723
|
return self._deps_string
|
1721
1724
|
|
1725
|
+
def _pin_dep(self, dep):
|
1726
|
+
"""Pins a dependency to specific full revision sha.
|
1727
|
+
|
1728
|
+
Arguments:
|
1729
|
+
dep (Dependency): dependency to process
|
1730
|
+
"""
|
1731
|
+
if dep.parsed_url is None:
|
1732
|
+
return
|
1733
|
+
|
1734
|
+
# Make sure the revision is always fully specified (a hash),
|
1735
|
+
# as opposed to refs or tags which might change. Similarly,
|
1736
|
+
# shortened shas might become ambiguous; make sure to always
|
1737
|
+
# use full one for pinning.
|
1738
|
+
url, revision = gclient_utils.SplitUrlRevision(dep.parsed_url)
|
1739
|
+
if revision and gclient_utils.IsFullGitSha(revision):
|
1740
|
+
return
|
1741
|
+
|
1742
|
+
scm = gclient_scm.CreateSCM(
|
1743
|
+
dep.parsed_url, self._client.root_dir, dep.name, dep.outbuf)
|
1744
|
+
revinfo = scm.revinfo(self._client._options, [], None)
|
1745
|
+
|
1746
|
+
dep._parsed_url = dep._url = '%s@%s' % (url, revinfo)
|
1747
|
+
raw_url, _ = gclient_utils.SplitUrlRevision(dep._raw_url)
|
1748
|
+
dep._raw_url = '%s@%s' % (raw_url, revinfo)
|
1749
|
+
|
1722
1750
|
def _flatten(self, pin_all_deps=False):
|
1723
1751
|
"""Runs the flattener. Saves resulting DEPS string.
|
1724
1752
|
|
@@ -1727,19 +1755,29 @@ class Flattener(object):
|
|
1727
1755
|
in DEPS
|
1728
1756
|
"""
|
1729
1757
|
for solution in self._client.dependencies:
|
1730
|
-
self.
|
1758
|
+
self._add_dep(solution)
|
1759
|
+
self._flatten_dep(solution)
|
1731
1760
|
|
1732
1761
|
if pin_all_deps:
|
1733
1762
|
for dep in self._deps.itervalues():
|
1734
|
-
|
1735
|
-
|
1736
|
-
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
1741
|
-
|
1742
|
-
|
1763
|
+
self._pin_dep(dep)
|
1764
|
+
|
1765
|
+
for os_deps in self._deps_os.itervalues():
|
1766
|
+
for dep in os_deps.itervalues():
|
1767
|
+
self._pin_dep(dep)
|
1768
|
+
|
1769
|
+
deps_files = set()
|
1770
|
+
def add_deps_file(dep):
|
1771
|
+
deps_path = os.path.join(self._client.root_dir, dep.name, dep.deps_file)
|
1772
|
+
if not os.path.exists(deps_path):
|
1773
|
+
return
|
1774
|
+
assert dep.parsed_url
|
1775
|
+
deps_files.add((dep.parsed_url, dep.deps_file))
|
1776
|
+
for dep in self._deps.itervalues():
|
1777
|
+
add_deps_file(dep)
|
1778
|
+
for os_deps in self._deps_os.itervalues():
|
1779
|
+
for dep in os_deps.itervalues():
|
1780
|
+
add_deps_file(dep)
|
1743
1781
|
|
1744
1782
|
self._deps_string = '\n'.join(
|
1745
1783
|
_GNSettingsToLines(
|
@@ -1752,65 +1790,95 @@ class Flattener(object):
|
|
1752
1790
|
_HooksToLines('pre_deps_hooks', self._pre_deps_hooks) +
|
1753
1791
|
_HooksOsToLines(self._hooks_os) +
|
1754
1792
|
_VarsToLines(self._vars) +
|
1793
|
+
['# %s, %s' % (url, deps_file)
|
1794
|
+
for url, deps_file in sorted(deps_files)] +
|
1755
1795
|
['']) # Ensure newline at end of file.
|
1756
1796
|
|
1757
|
-
def
|
1758
|
-
"""
|
1797
|
+
def _add_dep(self, dep):
|
1798
|
+
"""Helper to add a dependency to flattened DEPS.
|
1759
1799
|
|
1760
1800
|
Arguments:
|
1761
|
-
|
1801
|
+
dep (Dependency): dependency to add
|
1762
1802
|
"""
|
1763
|
-
self.
|
1764
|
-
|
1803
|
+
assert dep.name not in self._deps or self._deps.get(dep.name) == dep, (
|
1804
|
+
dep.name, self._deps.get(dep.name))
|
1805
|
+
if dep.url:
|
1806
|
+
self._deps[dep.name] = dep
|
1807
|
+
|
1808
|
+
def _add_os_dep(self, os_dep, dep_os):
|
1809
|
+
"""Helper to add an OS-specific dependency to flattened DEPS.
|
1765
1810
|
|
1766
|
-
|
1811
|
+
Arguments:
|
1812
|
+
os_dep (Dependency): dependency to add
|
1813
|
+
dep_os (str): name of the OS
|
1814
|
+
"""
|
1815
|
+
assert (
|
1816
|
+
os_dep.name not in self._deps_os.get(dep_os, {}) or
|
1817
|
+
self._deps_os.get(dep_os, {}).get(os_dep.name) == os_dep), (
|
1818
|
+
os_dep.name, self._deps_os.get(dep_os, {}).get(os_dep.name))
|
1819
|
+
if os_dep.url:
|
1820
|
+
# OS-specific deps need to have their full URL resolved manually.
|
1821
|
+
assert not os_dep.parsed_url, (os_dep, os_dep.parsed_url)
|
1822
|
+
os_dep._parsed_url = os_dep.LateOverride(os_dep.url)
|
1823
|
+
|
1824
|
+
self._deps_os.setdefault(dep_os, {})[os_dep.name] = os_dep
|
1825
|
+
|
1826
|
+
def _flatten_dep(self, dep, dep_os=None):
|
1767
1827
|
"""Visits a dependency in order to flatten it (see CMDflatten).
|
1768
1828
|
|
1769
1829
|
Arguments:
|
1770
1830
|
dep (Dependency): dependency to process
|
1831
|
+
dep_os (str or None): name of the OS |dep| is specific to
|
1771
1832
|
"""
|
1772
|
-
|
1833
|
+
logging.debug('_flatten_dep(%s, %s)', dep.name, dep_os)
|
1773
1834
|
|
1774
|
-
|
1775
|
-
|
1835
|
+
if not dep.deps_parsed:
|
1836
|
+
dep.ParseDepsFile()
|
1837
|
+
|
1838
|
+
self._allowed_hosts.update(dep.allowed_hosts)
|
1776
1839
|
|
1777
1840
|
for key, value in dep.get_vars().iteritems():
|
1778
|
-
|
1841
|
+
# Make sure there are no conflicting variables. It is fine however
|
1842
|
+
# to use same variable name, as long as the value is consistent.
|
1843
|
+
assert key not in self._vars or self._vars[key][1] == value
|
1779
1844
|
self._vars[key] = (dep, value)
|
1780
1845
|
|
1781
|
-
self._hooks.extend([(dep, hook) for hook in dep.deps_hooks])
|
1782
1846
|
self._pre_deps_hooks.extend([(dep, hook) for hook in dep.pre_deps_hooks])
|
1783
1847
|
|
1848
|
+
if dep_os:
|
1849
|
+
if dep.deps_hooks:
|
1850
|
+
self._hooks_os.setdefault(dep_os, []).extend(
|
1851
|
+
[(dep, hook) for hook in dep.deps_hooks])
|
1852
|
+
else:
|
1853
|
+
self._hooks.extend([(dep, hook) for hook in dep.deps_hooks])
|
1854
|
+
|
1855
|
+
for sub_dep in dep.dependencies:
|
1856
|
+
if dep_os:
|
1857
|
+
self._add_os_dep(sub_dep, dep_os)
|
1858
|
+
else:
|
1859
|
+
self._add_dep(sub_dep)
|
1860
|
+
|
1784
1861
|
for hook_os, os_hooks in dep.os_deps_hooks.iteritems():
|
1785
1862
|
self._hooks_os.setdefault(hook_os, []).extend(
|
1786
1863
|
[(dep, hook) for hook in os_hooks])
|
1787
1864
|
|
1788
|
-
|
1789
|
-
|
1790
|
-
|
1791
|
-
for recurse_dep_name in (dep.recursedeps or []):
|
1792
|
-
self._flatten_recurse(deps_by_name[recurse_dep_name])
|
1793
|
-
|
1794
|
-
def _flatten_recurse(self, dep):
|
1795
|
-
"""Helper for flatten that recurses into |dep|'s dependencies.
|
1796
|
-
|
1797
|
-
Arguments:
|
1798
|
-
dep (Dependency): dependency to process
|
1799
|
-
"""
|
1800
|
-
self._add_deps_os(dep)
|
1801
|
-
|
1802
|
-
for sub_dep in dep.dependencies:
|
1803
|
-
self._flatten_dep(sub_dep)
|
1804
|
-
|
1805
|
-
def _add_deps_os(self, dep):
|
1806
|
-
"""Helper for flatten that collects deps_os from |dep|.
|
1865
|
+
for sub_dep_os, os_deps in dep.os_dependencies.iteritems():
|
1866
|
+
for os_dep in os_deps:
|
1867
|
+
self._add_os_dep(os_dep, sub_dep_os)
|
1807
1868
|
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
1869
|
+
# Process recursedeps. |deps_by_name| is a map where keys are dependency
|
1870
|
+
# names, and values are maps of OS names to |Dependency| instances.
|
1871
|
+
# |None| in place of OS name means the dependency is not OS-specific.
|
1872
|
+
deps_by_name = dict((d.name, {None: d}) for d in dep.dependencies)
|
1873
|
+
for sub_dep_os, os_deps in dep.os_dependencies.iteritems():
|
1812
1874
|
for os_dep in os_deps:
|
1813
|
-
|
1875
|
+
assert sub_dep_os not in deps_by_name.get(os_dep.name, {}), (
|
1876
|
+
os_dep.name, sub_dep_os)
|
1877
|
+
deps_by_name.setdefault(os_dep.name, {})[sub_dep_os] = os_dep
|
1878
|
+
for recurse_dep_name in (dep.recursedeps or []):
|
1879
|
+
dep_info = deps_by_name[recurse_dep_name]
|
1880
|
+
for sub_dep_os, os_dep in dep_info.iteritems():
|
1881
|
+
self._flatten_dep(os_dep, dep_os=(sub_dep_os or dep_os))
|
1814
1882
|
|
1815
1883
|
|
1816
1884
|
def CMDflatten(parser, args):
|
@@ -1824,6 +1892,7 @@ def CMDflatten(parser, args):
|
|
1824
1892
|
|
1825
1893
|
options.do_not_merge_os_specific_entries = True
|
1826
1894
|
options.nohooks = True
|
1895
|
+
options.process_all_deps = True
|
1827
1896
|
client = GClient.LoadCurrentConfig(options)
|
1828
1897
|
|
1829
1898
|
# Only print progress if we're writing to a file. Otherwise, progress updates
|
@@ -1875,7 +1944,7 @@ def _DepsToLines(deps):
|
|
1875
1944
|
s.extend([
|
1876
1945
|
' # %s' % dep.hierarchy(include_url=False),
|
1877
1946
|
' "%s": {' % (name,),
|
1878
|
-
' "url": "%s",' % (dep.
|
1947
|
+
' "url": "%s",' % (dep.raw_url,),
|
1879
1948
|
] + condition_part + [
|
1880
1949
|
' },',
|
1881
1950
|
'',
|
@@ -1897,7 +1966,7 @@ def _DepsOsToLines(deps_os):
|
|
1897
1966
|
s.extend([
|
1898
1967
|
' # %s' % dep.hierarchy(include_url=False),
|
1899
1968
|
' "%s": {' % (name,),
|
1900
|
-
' "url": "%s",' % (dep.
|
1969
|
+
' "url": "%s",' % (dep.raw_url,),
|
1901
1970
|
] + condition_part + [
|
1902
1971
|
' },',
|
1903
1972
|
'',
|
@@ -2043,10 +2112,6 @@ def CMDconfig(parser, args):
|
|
2043
2112
|
'to have the main solution untouched by gclient '
|
2044
2113
|
'(gclient will check out unmanaged dependencies but '
|
2045
2114
|
'will never sync them)')
|
2046
|
-
parser.add_option('--cache-dir',
|
2047
|
-
help='(git only) Cache all git repos into this dir and do '
|
2048
|
-
'shared clones from the cache, instead of cloning '
|
2049
|
-
'directly from the remote. (experimental)')
|
2050
2115
|
parser.set_defaults(config_filename=None)
|
2051
2116
|
(options, args) = parser.parse_args(args)
|
2052
2117
|
if options.output_config_file:
|
@@ -2197,6 +2262,9 @@ def CMDsync(parser, args):
|
|
2197
2262
|
parser.add_option('--do-not-merge-os-specific-entries', action='store_true',
|
2198
2263
|
help='INTERNAL ONLY - disables merging of deps_os and '
|
2199
2264
|
'hooks_os to dependencies and hooks')
|
2265
|
+
parser.add_option('--process-all-deps', action='store_true',
|
2266
|
+
help='Check out all deps, even for different OS-es, '
|
2267
|
+
'or with conditions evaluating to false')
|
2200
2268
|
parser.add_option('--upstream', action='store_true',
|
2201
2269
|
help='Make repo state match upstream branch.')
|
2202
2270
|
parser.add_option('--output-json',
|
@@ -2417,6 +2485,12 @@ class OptionParser(optparse.OptionParser):
|
|
2417
2485
|
'--spec',
|
2418
2486
|
help='create a gclient file containing the provided string. Due to '
|
2419
2487
|
'Cygwin/Python brokenness, it can\'t contain any newlines.')
|
2488
|
+
self.add_option(
|
2489
|
+
'--cache-dir',
|
2490
|
+
help='(git only) Cache all git repos into this dir and do '
|
2491
|
+
'shared clones from the cache, instead of cloning '
|
2492
|
+
'directly from the remote. (experimental)',
|
2493
|
+
default=os.environ.get('GCLIENT_CACHE_DIR'))
|
2420
2494
|
self.add_option(
|
2421
2495
|
'--no-nag-max', default=False, action='store_true',
|
2422
2496
|
help='Ignored for backwards compatibility.')
|