bootsnap 1.7.0 → 1.7.1.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/ext/bootsnap/bootsnap.c +25 -12
- data/ext/bootsnap/extconf.rb +19 -14
- data/lib/bootsnap.rb +13 -3
- data/lib/bootsnap/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0b30bf90689abcc2b7bbf899f5469b13a0bcd1c3f859da4d2f1422e625ba421
|
4
|
+
data.tar.gz: 323168b5881481f0c6b2d062347507dd0ed10182154efe8e01972b2c587a333a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d9be90c2caa46e141c071578a51754ae0de9f6659525a91b2558f0cb4cd089a87ca8d497ae8b8328272ad3bc2d966755f62e7196a2b6fa4f37232005e5f07e0
|
7
|
+
data.tar.gz: f298d0721e888a931d93df1b2720170581ccd9ee4457b118fc443fd06ff16e5e93ed35ca42cf99a5f84a9c71747689a20feb01fe59c848a3a89fce20b44430ad
|
data/CHANGELOG.md
CHANGED
data/ext/bootsnap/bootsnap.c
CHANGED
@@ -105,8 +105,7 @@ static VALUE bs_rb_fetch(VALUE self, VALUE cachedir_v, VALUE path_v, VALUE handl
|
|
105
105
|
static VALUE bs_rb_precompile(VALUE self, VALUE cachedir_v, VALUE path_v, VALUE handler);
|
106
106
|
|
107
107
|
/* Helpers */
|
108
|
-
static
|
109
|
-
static void bs_cache_path(const char * cachedir, const char * path, char (* cache_path)[MAX_CACHEPATH_SIZE]);
|
108
|
+
static void bs_cache_path(const char * cachedir, const VALUE path, char (* cache_path)[MAX_CACHEPATH_SIZE]);
|
110
109
|
static int bs_read_key(int fd, struct bs_cache_key * key);
|
111
110
|
static int cache_key_equal(struct bs_cache_key * k1, struct bs_cache_key * k2);
|
112
111
|
static VALUE bs_fetch(char * path, VALUE path_v, char * cache_path, VALUE handler, VALUE args);
|
@@ -211,7 +210,7 @@ bs_compile_option_crc32_set(VALUE self, VALUE crc32_v)
|
|
211
210
|
* - 32 bits doesn't feel collision-resistant enough; 64 is nice.
|
212
211
|
*/
|
213
212
|
static uint64_t
|
214
|
-
|
213
|
+
fnv1a_64_iter_cstr(uint64_t h, const char *str)
|
215
214
|
{
|
216
215
|
unsigned char *s = (unsigned char *)str;
|
217
216
|
|
@@ -224,7 +223,21 @@ fnv1a_64_iter(uint64_t h, const char *str)
|
|
224
223
|
}
|
225
224
|
|
226
225
|
static uint64_t
|
227
|
-
|
226
|
+
fnv1a_64_iter(uint64_t h, const VALUE str)
|
227
|
+
{
|
228
|
+
unsigned char *s = (unsigned char *)RSTRING_PTR(str);
|
229
|
+
unsigned char *str_end = (unsigned char *)RSTRING_PTR(str) + RSTRING_LEN(str);
|
230
|
+
|
231
|
+
while (s < str_end) {
|
232
|
+
h ^= (uint64_t)*s++;
|
233
|
+
h += (h << 1) + (h << 4) + (h << 5) + (h << 7) + (h << 8) + (h << 40);
|
234
|
+
}
|
235
|
+
|
236
|
+
return h;
|
237
|
+
}
|
238
|
+
|
239
|
+
static uint64_t
|
240
|
+
fnv1a_64(const VALUE str)
|
228
241
|
{
|
229
242
|
uint64_t h = (uint64_t)0xcbf29ce484222325ULL;
|
230
243
|
return fnv1a_64_iter(h, str);
|
@@ -245,7 +258,7 @@ get_ruby_revision(void)
|
|
245
258
|
} else {
|
246
259
|
uint64_t hash;
|
247
260
|
|
248
|
-
hash = fnv1a_64(
|
261
|
+
hash = fnv1a_64(ruby_revision);
|
249
262
|
return (uint32_t)(hash >> 32);
|
250
263
|
}
|
251
264
|
}
|
@@ -265,19 +278,19 @@ get_ruby_platform(void)
|
|
265
278
|
VALUE ruby_platform;
|
266
279
|
|
267
280
|
ruby_platform = rb_const_get(rb_cObject, rb_intern("RUBY_PLATFORM"));
|
268
|
-
hash = fnv1a_64(
|
281
|
+
hash = fnv1a_64(ruby_platform);
|
269
282
|
|
270
283
|
#ifdef _WIN32
|
271
284
|
return (uint32_t)(hash >> 32) ^ (uint32_t)GetVersion();
|
272
285
|
#elif defined(__GLIBC__)
|
273
|
-
hash =
|
286
|
+
hash = fnv1a_64_iter_cstr(hash, gnu_get_libc_version());
|
274
287
|
return (uint32_t)(hash >> 32);
|
275
288
|
#else
|
276
289
|
struct utsname utsname;
|
277
290
|
|
278
291
|
/* Not worth crashing if this fails; lose extra cache invalidation potential */
|
279
292
|
if (uname(&utsname) >= 0) {
|
280
|
-
hash =
|
293
|
+
hash = fnv1a_64_iter_cstr(hash, utsname.version);
|
281
294
|
}
|
282
295
|
|
283
296
|
return (uint32_t)(hash >> 32);
|
@@ -292,13 +305,13 @@ get_ruby_platform(void)
|
|
292
305
|
* The path will look something like: <cachedir>/12/34567890abcdef
|
293
306
|
*/
|
294
307
|
static void
|
295
|
-
bs_cache_path(const char * cachedir, const
|
308
|
+
bs_cache_path(const char * cachedir, const VALUE path, char (* cache_path)[MAX_CACHEPATH_SIZE])
|
296
309
|
{
|
297
310
|
uint64_t hash = fnv1a_64(path);
|
298
311
|
uint8_t first_byte = (hash >> (64 - 8));
|
299
312
|
uint64_t remainder = hash & 0x00ffffffffffffff;
|
300
313
|
|
301
|
-
sprintf(*cache_path, "%s/%
|
314
|
+
sprintf(*cache_path, "%s/%02"PRIx8"/%014"PRIx64, cachedir, first_byte, remainder);
|
302
315
|
}
|
303
316
|
|
304
317
|
/*
|
@@ -344,7 +357,7 @@ bs_rb_fetch(VALUE self, VALUE cachedir_v, VALUE path_v, VALUE handler, VALUE arg
|
|
344
357
|
char cache_path[MAX_CACHEPATH_SIZE];
|
345
358
|
|
346
359
|
/* generate cache path to cache_path */
|
347
|
-
bs_cache_path(cachedir,
|
360
|
+
bs_cache_path(cachedir, path_v, &cache_path);
|
348
361
|
|
349
362
|
return bs_fetch(path, path_v, cache_path, handler, args);
|
350
363
|
}
|
@@ -371,7 +384,7 @@ bs_rb_precompile(VALUE self, VALUE cachedir_v, VALUE path_v, VALUE handler)
|
|
371
384
|
char cache_path[MAX_CACHEPATH_SIZE];
|
372
385
|
|
373
386
|
/* generate cache path to cache_path */
|
374
|
-
bs_cache_path(cachedir,
|
387
|
+
bs_cache_path(cachedir, path_v, &cache_path);
|
375
388
|
|
376
389
|
return bs_precompile(path, path_v, cache_path, handler);
|
377
390
|
}
|
data/ext/bootsnap/extconf.rb
CHANGED
@@ -1,19 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require("mkmf")
|
3
|
-
$CFLAGS << ' -O3 '
|
4
|
-
$CFLAGS << ' -std=c99'
|
5
3
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
$CFLAGS << ' -Wall'
|
10
|
-
$CFLAGS << ' -Werror'
|
11
|
-
$CFLAGS << ' -Wextra'
|
12
|
-
$CFLAGS << ' -Wpedantic'
|
4
|
+
if RUBY_ENGINE == 'ruby'
|
5
|
+
$CFLAGS << ' -O3 '
|
6
|
+
$CFLAGS << ' -std=c99'
|
13
7
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
8
|
+
# ruby.h has some -Wpedantic fails in some cases
|
9
|
+
# (e.g. https://github.com/Shopify/bootsnap/issues/15)
|
10
|
+
unless ['0', '', nil].include?(ENV['BOOTSNAP_PEDANTIC'])
|
11
|
+
$CFLAGS << ' -Wall'
|
12
|
+
$CFLAGS << ' -Werror'
|
13
|
+
$CFLAGS << ' -Wextra'
|
14
|
+
$CFLAGS << ' -Wpedantic'
|
15
|
+
|
16
|
+
$CFLAGS << ' -Wno-unused-parameter' # VALUE self has to be there but we don't care what it is.
|
17
|
+
$CFLAGS << ' -Wno-keyword-macro' # hiding return
|
18
|
+
$CFLAGS << ' -Wno-gcc-compat' # ruby.h 2.6.0 on macos 10.14, dunno
|
19
|
+
end
|
18
20
|
|
19
|
-
create_makefile("bootsnap/bootsnap")
|
21
|
+
create_makefile("bootsnap/bootsnap")
|
22
|
+
else
|
23
|
+
File.write("Makefile", dummy_makefile($srcdir).join(""))
|
24
|
+
end
|
data/lib/bootsnap.rb
CHANGED
@@ -54,6 +54,11 @@ module Bootsnap
|
|
54
54
|
"If you use Ruby 2.5 or newer this option is useless, if not upgrading is recommended."
|
55
55
|
end
|
56
56
|
|
57
|
+
if compile_cache_iseq && !iseq_cache_supported?
|
58
|
+
warn "Ruby 2.5 has a bug that break code tracing when code is loaded from cache. It is recommened " \
|
59
|
+
"to turn `compile_cache_iseq` off on Ruby 2.5"
|
60
|
+
end
|
61
|
+
|
57
62
|
Bootsnap::LoadPathCache.setup(
|
58
63
|
cache_path: cache_dir + '/bootsnap/load-path-cache',
|
59
64
|
development_mode: development_mode,
|
@@ -66,6 +71,13 @@ module Bootsnap
|
|
66
71
|
)
|
67
72
|
end
|
68
73
|
|
74
|
+
def self.iseq_cache_supported?
|
75
|
+
return @iseq_cache_supported if defined? @iseq_cache_supported
|
76
|
+
|
77
|
+
ruby_version = Gem::Version.new(RUBY_VERSION)
|
78
|
+
@iseq_cache_supported = ruby_version < Gem::Version.new('2.5.0') || ruby_version >= Gem::Version.new('2.6.0')
|
79
|
+
end
|
80
|
+
|
69
81
|
def self.default_setup
|
70
82
|
env = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || ENV['ENV']
|
71
83
|
development_mode = ['', nil, 'development'].include?(env)
|
@@ -92,14 +104,12 @@ module Bootsnap
|
|
92
104
|
cache_dir = File.join(app_root, 'tmp', 'cache')
|
93
105
|
end
|
94
106
|
|
95
|
-
ruby_version = Gem::Version.new(RUBY_VERSION)
|
96
|
-
iseq_cache_enabled = ruby_version < Gem::Version.new('2.5.0') || ruby_version >= Gem::Version.new('2.5.4')
|
97
107
|
|
98
108
|
setup(
|
99
109
|
cache_dir: cache_dir,
|
100
110
|
development_mode: development_mode,
|
101
111
|
load_path_cache: !ENV['DISABLE_BOOTSNAP_LOAD_PATH_CACHE'],
|
102
|
-
compile_cache_iseq: !ENV['DISABLE_BOOTSNAP_COMPILE_CACHE'] &&
|
112
|
+
compile_cache_iseq: !ENV['DISABLE_BOOTSNAP_COMPILE_CACHE'] && iseq_cache_supported?,
|
103
113
|
compile_cache_yaml: !ENV['DISABLE_BOOTSNAP_COMPILE_CACHE'],
|
104
114
|
)
|
105
115
|
|
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.7.
|
4
|
+
version: 1.7.1.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Burke Libbey
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-02-
|
11
|
+
date: 2021-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -149,9 +149,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
149
149
|
version: 2.3.0
|
150
150
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
151
151
|
requirements:
|
152
|
-
- - "
|
152
|
+
- - ">"
|
153
153
|
- !ruby/object:Gem::Version
|
154
|
-
version:
|
154
|
+
version: 1.3.1
|
155
155
|
requirements: []
|
156
156
|
rubygems_version: 3.0.3
|
157
157
|
signing_key:
|