bootsnap 1.11.1 → 1.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +2 -2
- data/ext/bootsnap/bootsnap.c +0 -48
- data/lib/bootsnap/cli.rb +1 -1
- data/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb +0 -21
- data/lib/bootsnap/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 761e97c3b4772e9c0af1bd8391d70dddebd94addf88e9295e72a790a85deb5e0
|
4
|
+
data.tar.gz: 17f80fcf67adc6a4e7f9fb475d3e7d5c008c89b491e23804da1f2603e859888c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dca99dc5e57a644e627e8705958c8c4916a9c444c2a64788fd4214aa174d6c3eed7fc15ef7bdb6e06922fb8d1eef3beeff08e316aadbc3015a36e82b1a232309
|
7
|
+
data.tar.gz: 1c9ffc9c5c04694f4838693edda976f58925649f7b14411d61bec64eca10bb04548c5bb4e2be6ff897c8d5a0e929aa2cd885d017ccd1770530971fedba831ec3
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Unreleased
|
2
2
|
|
3
|
+
# 1.12.0
|
4
|
+
|
5
|
+
* `bootsnap precompile` CLI will now also precompile `Rakefile` and `.rake` files.
|
6
|
+
|
7
|
+
* Stop decorating `Module#autoload` as it was only useful for supporting Ruby 2.2 and older.
|
8
|
+
|
9
|
+
* Remove `uname` and other patform specific version from the cache keys. `RUBY_PLATFORM + RUBY_REVISION` should be
|
10
|
+
enough to ensure bytecode compatibility. This should improve caching for alpine based setups. See #409.
|
11
|
+
|
3
12
|
# 1.11.1
|
4
13
|
|
5
14
|
* Fix the `can't modify frozen Hash` error on load path cache mutation. See #411.
|
data/README.md
CHANGED
@@ -232,9 +232,9 @@ Bootsnap writes a cache file containing a 64 byte header followed by the cache c
|
|
232
232
|
is a cache key including several fields:
|
233
233
|
|
234
234
|
* `version`, hardcoded in bootsnap. Essentially a schema version;
|
235
|
-
* `ruby_platform`, A hash of `RUBY_PLATFORM` (e.g. x86_64-linux-gnu) variable
|
235
|
+
* `ruby_platform`, A hash of `RUBY_PLATFORM` (e.g. x86_64-linux-gnu) variable.
|
236
236
|
* `compile_option`, which changes with `RubyVM::InstructionSequence.compile_option` does;
|
237
|
-
* `ruby_revision`,
|
237
|
+
* `ruby_revision`, A hash of `RUBY_REVISION`, the exact version of Ruby;
|
238
238
|
* `size`, the size of the source file;
|
239
239
|
* `mtime`, the last-modification timestamp of the source file when it was compiled; and
|
240
240
|
* `data_size`, the number of bytes following the header, which we need to read it into a buffer.
|
data/ext/bootsnap/bootsnap.c
CHANGED
@@ -19,12 +19,6 @@
|
|
19
19
|
#include <errno.h>
|
20
20
|
#include <fcntl.h>
|
21
21
|
#include <sys/stat.h>
|
22
|
-
#ifndef _WIN32
|
23
|
-
#include <sys/utsname.h>
|
24
|
-
#endif
|
25
|
-
#ifdef __GLIBC__
|
26
|
-
#include <gnu/libc-version.h>
|
27
|
-
#endif
|
28
22
|
|
29
23
|
/* 1000 is an arbitrary limit; FNV64 plus some slashes brings the cap down to
|
30
24
|
* 981 for the cache dir */
|
@@ -205,29 +199,6 @@ bs_compile_option_crc32_set(VALUE self, VALUE crc32_v)
|
|
205
199
|
return Qnil;
|
206
200
|
}
|
207
201
|
|
208
|
-
/*
|
209
|
-
* We use FNV1a-64 to derive cache paths. The choice is somewhat arbitrary but
|
210
|
-
* it has several nice properties:
|
211
|
-
*
|
212
|
-
* - Tiny implementation
|
213
|
-
* - No external dependency
|
214
|
-
* - Solid performance
|
215
|
-
* - Solid randomness
|
216
|
-
* - 32 bits doesn't feel collision-resistant enough; 64 is nice.
|
217
|
-
*/
|
218
|
-
static uint64_t
|
219
|
-
fnv1a_64_iter_cstr(uint64_t h, const char *str)
|
220
|
-
{
|
221
|
-
unsigned char *s = (unsigned char *)str;
|
222
|
-
|
223
|
-
while (*s) {
|
224
|
-
h ^= (uint64_t)*s++;
|
225
|
-
h += (h << 1) + (h << 4) + (h << 5) + (h << 7) + (h << 8) + (h << 40);
|
226
|
-
}
|
227
|
-
|
228
|
-
return h;
|
229
|
-
}
|
230
|
-
|
231
202
|
static uint64_t
|
232
203
|
fnv1a_64_iter(uint64_t h, const VALUE str)
|
233
204
|
{
|
@@ -272,10 +243,6 @@ get_ruby_revision(void)
|
|
272
243
|
/*
|
273
244
|
* When ruby's version doesn't change, but it's recompiled on a different OS
|
274
245
|
* (or OS version), we need to invalidate the cache.
|
275
|
-
*
|
276
|
-
* We actually factor in some extra information here, to be extra confident
|
277
|
-
* that we don't try to re-use caches that will not be compatible, by factoring
|
278
|
-
* in utsname.version.
|
279
246
|
*/
|
280
247
|
static uint32_t
|
281
248
|
get_ruby_platform(void)
|
@@ -285,22 +252,7 @@ get_ruby_platform(void)
|
|
285
252
|
|
286
253
|
ruby_platform = rb_const_get(rb_cObject, rb_intern("RUBY_PLATFORM"));
|
287
254
|
hash = fnv1a_64(ruby_platform);
|
288
|
-
|
289
|
-
#ifdef _WIN32
|
290
|
-
return (uint32_t)(hash >> 32) ^ (uint32_t)GetVersion();
|
291
|
-
#elif defined(__GLIBC__)
|
292
|
-
hash = fnv1a_64_iter_cstr(hash, gnu_get_libc_version());
|
293
255
|
return (uint32_t)(hash >> 32);
|
294
|
-
#else
|
295
|
-
struct utsname utsname;
|
296
|
-
|
297
|
-
/* Not worth crashing if this fails; lose extra cache invalidation potential */
|
298
|
-
if (uname(&utsname) >= 0) {
|
299
|
-
hash = fnv1a_64_iter_cstr(hash, utsname.version);
|
300
|
-
}
|
301
|
-
|
302
|
-
return (uint32_t)(hash >> 32);
|
303
|
-
#endif
|
304
256
|
}
|
305
257
|
|
306
258
|
/*
|
data/lib/bootsnap/cli.rb
CHANGED
@@ -172,7 +172,7 @@ module Bootsnap
|
|
172
172
|
|
173
173
|
load_paths.each do |path|
|
174
174
|
if !exclude || !exclude.match?(path)
|
175
|
-
list_files(path, "
|
175
|
+
list_files(path, "**/{*.rb,*.rake,Rakefile}").each do |ruby_file|
|
176
176
|
if !exclude || !exclude.match?(ruby_file)
|
177
177
|
@work_pool.push(:ruby, ruby_file)
|
178
178
|
end
|
@@ -42,24 +42,3 @@ module Kernel
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
45
|
-
|
46
|
-
class Module
|
47
|
-
alias_method(:autoload_without_bootsnap, :autoload)
|
48
|
-
def autoload(const, path)
|
49
|
-
# NOTE: This may defeat LoadedFeaturesIndex, but it's not immediately
|
50
|
-
# obvious how to make it work. This feels like a pretty niche case, unclear
|
51
|
-
# if it will ever burn anyone.
|
52
|
-
#
|
53
|
-
# The challenge is that we don't control the point at which the entry gets
|
54
|
-
# added to $LOADED_FEATURES and won't be able to hook that modification
|
55
|
-
# since it's done in C-land.
|
56
|
-
resolved = Bootsnap::LoadPathCache.load_path_cache.find(Bootsnap.rb_get_path(path))
|
57
|
-
if Bootsnap::LoadPathCache::FALLBACK_SCAN.equal?(resolved)
|
58
|
-
autoload_without_bootsnap(const, path)
|
59
|
-
elsif resolved == false
|
60
|
-
return false
|
61
|
-
else
|
62
|
-
autoload_without_bootsnap(const, resolved || path)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
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.
|
4
|
+
version: 1.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Burke Libbey
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|