bootsnap 1.18.3 → 1.18.4
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 +6 -1
- data/ext/bootsnap/bootsnap.c +3 -13
- data/lib/bootsnap/cli.rb +11 -8
- data/lib/bootsnap/compile_cache/iseq.rb +1 -1
- data/lib/bootsnap/explicit_require.rb +5 -0
- data/lib/bootsnap/load_path_cache/store.rb +2 -0
- data/lib/bootsnap/version.rb +1 -1
- data/lib/bootsnap.rb +18 -6
- metadata +6 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2b2271b2fa08edc313e43ec1359be530fcb6b206a7b4b63f37065290289cbc9a
|
|
4
|
+
data.tar.gz: c5838e7d01c33320e765a2bf668c68c09fc6b0938fb8789653b526cb3c22a244
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 77168e700a54163bf4574fbf9f82fea681a01f7d0c5c3a55340d3dabc98959fce1176bebef4c4d25d18efa257ad5314f13ca978a77f5cb4288296c63a1b36871
|
|
7
|
+
data.tar.gz: cc770950cc3032a5033873457a23b19823c35d9d24285f3b13fb95848e51d8f34defca5396c7b545b5530381271979c93026401e4ac32d28ec0f89ceadd57823
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Unreleased
|
|
2
2
|
|
|
3
|
+
# 1.18.4
|
|
4
|
+
|
|
5
|
+
* Allow using bootsnap without bundler. See #488.
|
|
6
|
+
* Fix startup failure if the cache directory points to a broken symlink.
|
|
7
|
+
|
|
3
8
|
# 1.18.3
|
|
4
9
|
|
|
5
10
|
* Fix the cache corruption issue in the revalidation feature. See #474.
|
|
@@ -32,7 +37,7 @@
|
|
|
32
37
|
|
|
33
38
|
# 1.17.0
|
|
34
39
|
|
|
35
|
-
* Ensure `$LOAD_PATH.dup` is Ractor shareable to fix
|
|
40
|
+
* Ensure `$LOAD_PATH.dup` is Ractor shareable to fix a conflict with `did_you_mean`.
|
|
36
41
|
* Allow to ignore directories using absolute paths.
|
|
37
42
|
* Support YAML and JSON CompileCache on TruffleRuby.
|
|
38
43
|
* Support LoadPathCache on TruffleRuby.
|
data/ext/bootsnap/bootsnap.c
CHANGED
|
@@ -82,7 +82,7 @@ struct bs_cache_key {
|
|
|
82
82
|
STATIC_ASSERT(sizeof(struct bs_cache_key) == KEY_SIZE);
|
|
83
83
|
|
|
84
84
|
/* Effectively a schema version. Bumping invalidates all previous caches */
|
|
85
|
-
static const uint32_t current_version =
|
|
85
|
+
static const uint32_t current_version = 6;
|
|
86
86
|
|
|
87
87
|
/* hash of e.g. "x86_64-darwin17", invalidating when ruby is recompiled on a
|
|
88
88
|
* new OS ABI, etc. */
|
|
@@ -146,15 +146,6 @@ struct s2o_data;
|
|
|
146
146
|
struct i2o_data;
|
|
147
147
|
struct i2s_data;
|
|
148
148
|
|
|
149
|
-
/* https://bugs.ruby-lang.org/issues/13667 */
|
|
150
|
-
extern VALUE rb_get_coverages(void);
|
|
151
|
-
static VALUE
|
|
152
|
-
bs_rb_coverage_running(VALUE self)
|
|
153
|
-
{
|
|
154
|
-
VALUE cov = rb_get_coverages();
|
|
155
|
-
return RTEST(cov) ? Qtrue : Qfalse;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
149
|
static VALUE
|
|
159
150
|
bs_rb_get_path(VALUE self, VALUE fname)
|
|
160
151
|
{
|
|
@@ -193,7 +184,6 @@ Init_bootsnap(void)
|
|
|
193
184
|
rb_define_module_function(rb_mBootsnap, "instrumentation_enabled=", bs_instrumentation_enabled_set, 1);
|
|
194
185
|
rb_define_module_function(rb_mBootsnap_CompileCache_Native, "readonly=", bs_readonly_set, 1);
|
|
195
186
|
rb_define_module_function(rb_mBootsnap_CompileCache_Native, "revalidation=", bs_revalidation_set, 1);
|
|
196
|
-
rb_define_module_function(rb_mBootsnap_CompileCache_Native, "coverage_running?", bs_rb_coverage_running, 0);
|
|
197
187
|
rb_define_module_function(rb_mBootsnap_CompileCache_Native, "fetch", bs_rb_fetch, 4);
|
|
198
188
|
rb_define_module_function(rb_mBootsnap_CompileCache_Native, "precompile", bs_rb_precompile, 3);
|
|
199
189
|
rb_define_module_function(rb_mBootsnap_CompileCache_Native, "compile_option_crc32=", bs_compile_option_crc32_set, 1);
|
|
@@ -922,9 +912,9 @@ bs_fetch(char * path, VALUE path_v, char * cache_path, VALUE handler, VALUE args
|
|
|
922
912
|
goto succeed; /* output_data is now the correct return. */
|
|
923
913
|
|
|
924
914
|
#define CLEANUP \
|
|
925
|
-
if (status != Qfalse) bs_instrumentation(status, path_v); \
|
|
926
915
|
if (current_fd >= 0) close(current_fd); \
|
|
927
|
-
if (cache_fd >= 0) close(cache_fd);
|
|
916
|
+
if (cache_fd >= 0) close(cache_fd); \
|
|
917
|
+
if (status != Qfalse) bs_instrumentation(status, path_v);
|
|
928
918
|
|
|
929
919
|
succeed:
|
|
930
920
|
CLEANUP;
|
data/lib/bootsnap/cli.rb
CHANGED
|
@@ -36,16 +36,16 @@ module Bootsnap
|
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def precompile_command(*sources)
|
|
39
|
-
require "bootsnap/compile_cache
|
|
40
|
-
require "bootsnap/compile_cache/yaml"
|
|
41
|
-
require "bootsnap/compile_cache/json"
|
|
39
|
+
require "bootsnap/compile_cache"
|
|
42
40
|
|
|
43
41
|
fix_default_encoding do
|
|
44
|
-
Bootsnap::CompileCache
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
Bootsnap::CompileCache.setup(
|
|
43
|
+
cache_dir: cache_dir,
|
|
44
|
+
iseq: iseq,
|
|
45
|
+
yaml: yaml,
|
|
46
|
+
json: json,
|
|
47
|
+
revalidation: true,
|
|
48
|
+
)
|
|
49
49
|
|
|
50
50
|
@work_pool = WorkerPool.create(size: jobs, jobs: {
|
|
51
51
|
ruby: method(:precompile_ruby),
|
|
@@ -222,6 +222,9 @@ module Bootsnap
|
|
|
222
222
|
|
|
223
223
|
def parser
|
|
224
224
|
@parser ||= OptionParser.new do |opts|
|
|
225
|
+
opts.version = Bootsnap::VERSION
|
|
226
|
+
opts.program_name = "bootsnap"
|
|
227
|
+
|
|
225
228
|
opts.banner = "Usage: bootsnap COMMAND [ARGS]"
|
|
226
229
|
opts.separator ""
|
|
227
230
|
opts.separator "GLOBAL OPTIONS"
|
|
@@ -84,7 +84,7 @@ module Bootsnap
|
|
|
84
84
|
module InstructionSequenceMixin
|
|
85
85
|
def load_iseq(path)
|
|
86
86
|
# Having coverage enabled prevents iseq dumping/loading.
|
|
87
|
-
return nil if defined?(Coverage) &&
|
|
87
|
+
return nil if defined?(Coverage) && Coverage.running?
|
|
88
88
|
|
|
89
89
|
Bootsnap::CompileCache::ISeq.fetch(path.to_s)
|
|
90
90
|
rescue RuntimeError => error
|
|
@@ -25,6 +25,11 @@ module Bootsnap
|
|
|
25
25
|
# This is useful before bootsnap is fully-initialized to load gems that it
|
|
26
26
|
# depends on, without forcing full LOAD_PATH traversals.
|
|
27
27
|
def self.with_gems(*gems)
|
|
28
|
+
# Ensure the gems are activated (their paths are in $LOAD_PATH)
|
|
29
|
+
gems.each do |gem_name|
|
|
30
|
+
gem gem_name
|
|
31
|
+
end
|
|
32
|
+
|
|
28
33
|
orig = $LOAD_PATH.dup
|
|
29
34
|
$LOAD_PATH.clear
|
|
30
35
|
gems.each do |gem|
|
|
@@ -122,6 +122,8 @@ module Bootsnap
|
|
|
122
122
|
stack.reverse_each do |dir|
|
|
123
123
|
Dir.mkdir(dir)
|
|
124
124
|
rescue SystemCallError
|
|
125
|
+
# Check for broken symlinks. Calling File.realpath will raise Errno::ENOENT if that is the case
|
|
126
|
+
File.realpath(dir) if File.symlink?(dir)
|
|
125
127
|
raise unless File.directory?(dir)
|
|
126
128
|
end
|
|
127
129
|
end
|
data/lib/bootsnap/version.rb
CHANGED
data/lib/bootsnap.rb
CHANGED
|
@@ -83,7 +83,7 @@ module Bootsnap
|
|
|
83
83
|
env = ENV["RAILS_ENV"] || ENV["RACK_ENV"] || ENV["ENV"]
|
|
84
84
|
development_mode = ["", nil, "development"].include?(env)
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
if enabled?("BOOTSNAP")
|
|
87
87
|
cache_dir = ENV["BOOTSNAP_CACHE_DIR"]
|
|
88
88
|
unless cache_dir
|
|
89
89
|
config_dir_frame = caller.detect do |line|
|
|
@@ -112,11 +112,12 @@ module Bootsnap
|
|
|
112
112
|
setup(
|
|
113
113
|
cache_dir: cache_dir,
|
|
114
114
|
development_mode: development_mode,
|
|
115
|
-
load_path_cache:
|
|
116
|
-
compile_cache_iseq:
|
|
117
|
-
compile_cache_yaml:
|
|
118
|
-
compile_cache_json:
|
|
119
|
-
readonly:
|
|
115
|
+
load_path_cache: enabled?("BOOTSNAP_LOAD_PATH_CACHE"),
|
|
116
|
+
compile_cache_iseq: enabled?("BOOTSNAP_COMPILE_CACHE"),
|
|
117
|
+
compile_cache_yaml: enabled?("BOOTSNAP_COMPILE_CACHE"),
|
|
118
|
+
compile_cache_json: enabled?("BOOTSNAP_COMPILE_CACHE"),
|
|
119
|
+
readonly: bool_env("BOOTSNAP_READONLY"),
|
|
120
|
+
revalidation: bool_env("BOOTSNAP_REVALIDATE"),
|
|
120
121
|
ignore_directories: ignore_directories,
|
|
121
122
|
)
|
|
122
123
|
|
|
@@ -148,5 +149,16 @@ module Bootsnap
|
|
|
148
149
|
|
|
149
150
|
# Allow the C extension to redefine `rb_get_path` without warning.
|
|
150
151
|
alias_method :rb_get_path, :rb_get_path # rubocop:disable Lint/DuplicateMethods
|
|
152
|
+
|
|
153
|
+
private
|
|
154
|
+
|
|
155
|
+
def enabled?(key)
|
|
156
|
+
!ENV["DISABLE_#{key}"]
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def bool_env(key, default: false)
|
|
160
|
+
value = ENV.fetch(key) { default }
|
|
161
|
+
!["0", "false", false].include?(value)
|
|
162
|
+
end
|
|
151
163
|
end
|
|
152
164
|
end
|
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.18.
|
|
4
|
+
version: 1.18.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Burke Libbey
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-
|
|
11
|
+
date: 2024-08-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: msgpack
|
|
@@ -68,7 +68,7 @@ metadata:
|
|
|
68
68
|
changelog_uri: https://github.com/Shopify/bootsnap/blob/main/CHANGELOG.md
|
|
69
69
|
source_code_uri: https://github.com/Shopify/bootsnap
|
|
70
70
|
allowed_push_host: https://rubygems.org
|
|
71
|
-
post_install_message:
|
|
71
|
+
post_install_message:
|
|
72
72
|
rdoc_options: []
|
|
73
73
|
require_paths:
|
|
74
74
|
- lib
|
|
@@ -83,8 +83,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
83
83
|
- !ruby/object:Gem::Version
|
|
84
84
|
version: '0'
|
|
85
85
|
requirements: []
|
|
86
|
-
rubygems_version: 3.5.
|
|
87
|
-
signing_key:
|
|
86
|
+
rubygems_version: 3.5.16
|
|
87
|
+
signing_key:
|
|
88
88
|
specification_version: 4
|
|
89
89
|
summary: Boot large ruby/rails apps faster
|
|
90
90
|
test_files: []
|