bootsnap 1.3.1-java → 1.3.2-java
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 +5 -5
- data/CHANGELOG.md +7 -0
- data/dev.yml +3 -1
- data/ext/bootsnap/bootsnap.c +2 -0
- data/lib/bootsnap.rb +1 -1
- data/lib/bootsnap/bundler.rb +3 -1
- data/lib/bootsnap/compile_cache/yaml.rb +1 -1
- data/lib/bootsnap/load_path_cache/cache.rb +11 -9
- data/lib/bootsnap/load_path_cache/change_observer.rb +9 -1
- data/lib/bootsnap/load_path_cache/core_ext/active_support.rb +25 -2
- data/lib/bootsnap/load_path_cache/loaded_features_index.rb +1 -1
- data/lib/bootsnap/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 929d3ddcf796d7d001890c5661403ce1ba3cd21dfe63fcce6986857f3c551c70
|
4
|
+
data.tar.gz: 5c8be3187f173b46127dc09e2fa98c83044d3a1f02a364ae3045d7d3abc85e23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63d4386909d722d027f355d46e719f4c843d3af2abfbd689abe55a8f20b21f01f3c25dbf3dc7bb0461d326dd69b8f0a5e849a7f8b033a7ac9b5344b1e00461f2
|
7
|
+
data.tar.gz: b832b7992a9b9a700fbdc1e84b1264544b207f03a172f1a95535b76f9ef8f2a8ae8585fee72dc55ad2c3873ed0b0f0122e87860baebae97b557916bbb9b1a395
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# 1.3.2
|
2
|
+
|
3
|
+
* Fix Spring + Bootsnap incompatibility when there are files with similar names.
|
4
|
+
* Fix `YAML.load_file` monkey patch to keep accepting File objects as arguments.
|
5
|
+
* Fix the API for `ActiveSupport::Dependencies#autoloadable_module?`.
|
6
|
+
* Some performance improvements.
|
7
|
+
|
1
8
|
# 1.3.1
|
2
9
|
|
3
10
|
* Change load path scanning to more correctly follow symlinks.
|
data/dev.yml
CHANGED
data/ext/bootsnap/bootsnap.c
CHANGED
@@ -269,6 +269,8 @@ cache_key_equal(struct bs_cache_key * k1, struct bs_cache_key * k2)
|
|
269
269
|
static VALUE
|
270
270
|
bs_rb_fetch(VALUE self, VALUE cachedir_v, VALUE path_v, VALUE handler)
|
271
271
|
{
|
272
|
+
FilePathValue(path_v);
|
273
|
+
|
272
274
|
Check_Type(cachedir_v, T_STRING);
|
273
275
|
Check_Type(path_v, T_STRING);
|
274
276
|
|
data/lib/bootsnap.rb
CHANGED
@@ -36,7 +36,7 @@ module Bootsnap
|
|
36
36
|
|
37
37
|
def self.setup_disable_trace
|
38
38
|
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.5.0')
|
39
|
-
warn("
|
39
|
+
warn("from #{caller_locations(1, 1)[0]}: The 'disable_trace' method is not allowed with this Ruby version. current: #{RUBY_VERSION}, allowed version: < 2.5.0")
|
40
40
|
else
|
41
41
|
RubyVM::InstructionSequence.compile_option = { trace_instruction: false }
|
42
42
|
end
|
data/lib/bootsnap/bundler.rb
CHANGED
@@ -2,11 +2,13 @@ module Bootsnap
|
|
2
2
|
module_function
|
3
3
|
|
4
4
|
def bundler?
|
5
|
+
return false unless defined?(::Bundler)
|
6
|
+
|
5
7
|
# Bundler environment variable
|
6
8
|
['BUNDLE_BIN_PATH', 'BUNDLE_GEMFILE'].each do |current|
|
7
9
|
return true if ENV.key?(current)
|
8
10
|
end
|
9
|
-
|
11
|
+
|
10
12
|
false
|
11
13
|
end
|
12
14
|
end
|
@@ -14,10 +14,10 @@ module Bootsnap
|
|
14
14
|
reinitialize
|
15
15
|
end
|
16
16
|
|
17
|
-
#
|
18
|
-
# e.g. given "/a/b/c/d" exists, and the path is ["/a/b"],
|
19
|
-
# is
|
20
|
-
def
|
17
|
+
# What is the path item that contains the dir as child?
|
18
|
+
# e.g. given "/a/b/c/d" exists, and the path is ["/a/b"], load_dir("c/d")
|
19
|
+
# is "/a/b".
|
20
|
+
def load_dir(dir)
|
21
21
|
reinitialize if stale?
|
22
22
|
@mutex.synchronize { @dirs[dir] }
|
23
23
|
end
|
@@ -108,7 +108,7 @@ module Bootsnap
|
|
108
108
|
@path_obj = path_obj
|
109
109
|
ChangeObserver.register(self, @path_obj)
|
110
110
|
@index = {}
|
111
|
-
@dirs =
|
111
|
+
@dirs = {}
|
112
112
|
@generated_at = now
|
113
113
|
push_paths_locked(*@path_obj)
|
114
114
|
end
|
@@ -132,10 +132,11 @@ module Bootsnap
|
|
132
132
|
p = Path.new(path)
|
133
133
|
@has_relative_paths = true if p.relative?
|
134
134
|
next if p.non_directory?
|
135
|
+
expanded_path = p.expanded_path
|
135
136
|
entries, dirs = p.entries_and_dirs(@store)
|
136
137
|
# push -> low precedence -> set only if unset
|
137
|
-
dirs.each { |dir| @dirs[dir] ||=
|
138
|
-
entries.each { |rel| @index[rel] ||=
|
138
|
+
dirs.each { |dir| @dirs[dir] ||= path }
|
139
|
+
entries.each { |rel| @index[rel] ||= expanded_path }
|
139
140
|
end
|
140
141
|
end
|
141
142
|
end
|
@@ -145,10 +146,11 @@ module Bootsnap
|
|
145
146
|
paths.map(&:to_s).reverse_each do |path|
|
146
147
|
p = Path.new(path)
|
147
148
|
next if p.non_directory?
|
149
|
+
expanded_path = p.expanded_path
|
148
150
|
entries, dirs = p.entries_and_dirs(@store)
|
149
151
|
# unshift -> high precedence -> unconditional set
|
150
|
-
dirs.each { |dir| @dirs[dir] =
|
151
|
-
entries.each { |rel| @index[rel] =
|
152
|
+
dirs.each { |dir| @dirs[dir] = path }
|
153
|
+
entries.each { |rel| @index[rel] = expanded_path }
|
152
154
|
end
|
153
155
|
end
|
154
156
|
end
|
@@ -25,6 +25,14 @@ module Bootsnap
|
|
25
25
|
super
|
26
26
|
end
|
27
27
|
|
28
|
+
# uniq! keeps the first occurance of each path, otherwise preserving
|
29
|
+
# order, preserving the effective load path
|
30
|
+
def uniq!(*args)
|
31
|
+
ret = super
|
32
|
+
@lpc_observer.reinitialize if block_given? || !args.empty?
|
33
|
+
ret
|
34
|
+
end
|
35
|
+
|
28
36
|
# For each method that modifies the array more aggressively, override
|
29
37
|
# the method to also have the observer completely reconstruct its state
|
30
38
|
# after the modification. Many of these could be made to modify the
|
@@ -34,7 +42,7 @@ module Bootsnap
|
|
34
42
|
%i(
|
35
43
|
[]= clear collect! compact! delete delete_at delete_if fill flatten!
|
36
44
|
insert keep_if map! pop reject! replace reverse! rotate! select!
|
37
|
-
shift shuffle! slice! sort! sort_by!
|
45
|
+
shift shuffle! slice! sort! sort_by!
|
38
46
|
).each do |method_name|
|
39
47
|
define_method(method_name) do |*args, &block|
|
40
48
|
ret = super(*args, &block)
|
@@ -10,6 +10,14 @@ module Bootsnap
|
|
10
10
|
Thread.current[:without_bootsnap_cache] = prev
|
11
11
|
end
|
12
12
|
|
13
|
+
def self.allow_bootsnap_retry(allowed)
|
14
|
+
prev = Thread.current[:without_bootsnap_retry] || false
|
15
|
+
Thread.current[:without_bootsnap_retry] = !allowed
|
16
|
+
yield
|
17
|
+
ensure
|
18
|
+
Thread.current[:without_bootsnap_retry] = prev
|
19
|
+
end
|
20
|
+
|
13
21
|
module ClassMethods
|
14
22
|
def autoload_paths=(o)
|
15
23
|
super
|
@@ -26,13 +34,19 @@ module Bootsnap
|
|
26
34
|
end
|
27
35
|
|
28
36
|
def autoloadable_module?(path_suffix)
|
29
|
-
Bootsnap::LoadPathCache.autoload_paths_cache.
|
37
|
+
Bootsnap::LoadPathCache.autoload_paths_cache.load_dir(path_suffix)
|
30
38
|
end
|
31
39
|
|
32
40
|
def remove_constant(const)
|
33
41
|
CoreExt::ActiveSupport.without_bootsnap_cache { super }
|
34
42
|
end
|
35
43
|
|
44
|
+
def require_or_load(*)
|
45
|
+
CoreExt::ActiveSupport.allow_bootsnap_retry(true) do
|
46
|
+
super
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
36
50
|
# If we can't find a constant using the patched implementation of
|
37
51
|
# search_for_file, try again with the default implementation.
|
38
52
|
#
|
@@ -40,8 +54,15 @@ module Bootsnap
|
|
40
54
|
# behaviour. The gymnastics here are a bit awkward, but it prevents
|
41
55
|
# 200+ lines of monkeypatches.
|
42
56
|
def load_missing_constant(from_mod, const_name)
|
43
|
-
|
57
|
+
CoreExt::ActiveSupport.allow_bootsnap_retry(false) do
|
58
|
+
super
|
59
|
+
end
|
44
60
|
rescue NameError => e
|
61
|
+
# This function can end up called recursively, we only want to
|
62
|
+
# retry at the top-level.
|
63
|
+
raise if Thread.current[:without_bootsnap_retry]
|
64
|
+
# If we already had cache disabled, there's no use retrying
|
65
|
+
raise if Thread.current[:without_bootsnap_cache]
|
45
66
|
# NoMethodError is a NameError, but we only want to handle actual
|
46
67
|
# NameError instances.
|
47
68
|
raise unless e.class == NameError
|
@@ -58,6 +79,8 @@ module Bootsnap
|
|
58
79
|
def depend_on(*)
|
59
80
|
super
|
60
81
|
rescue LoadError
|
82
|
+
# If we already had cache disabled, there's no use retrying
|
83
|
+
raise if Thread.current[:without_bootsnap_cache]
|
61
84
|
CoreExt::ActiveSupport.without_bootsnap_cache { super }
|
62
85
|
end
|
63
86
|
end
|
data/lib/bootsnap/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bootsnap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.2
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Burke Libbey
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -159,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
159
|
version: '0'
|
160
160
|
requirements: []
|
161
161
|
rubyforge_project:
|
162
|
-
rubygems_version: 2.
|
162
|
+
rubygems_version: 2.7.6
|
163
163
|
signing_key:
|
164
164
|
specification_version: 4
|
165
165
|
summary: Boot large ruby/rails apps faster
|