bootsnap 1.4.5 → 1.16.0
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 +227 -0
- data/LICENSE.txt +1 -1
- data/README.md +57 -20
- data/exe/bootsnap +5 -0
- data/ext/bootsnap/bootsnap.c +301 -155
- data/ext/bootsnap/extconf.rb +22 -14
- data/lib/bootsnap/bundler.rb +2 -0
- data/lib/bootsnap/cli/worker_pool.rb +136 -0
- data/lib/bootsnap/cli.rb +281 -0
- data/lib/bootsnap/compile_cache/iseq.rb +64 -19
- data/lib/bootsnap/compile_cache/json.rb +93 -0
- data/lib/bootsnap/compile_cache/yaml.rb +333 -42
- data/lib/bootsnap/compile_cache.rb +26 -8
- data/lib/bootsnap/explicit_require.rb +5 -3
- data/lib/bootsnap/load_path_cache/cache.rb +65 -37
- data/lib/bootsnap/load_path_cache/change_observer.rb +19 -3
- data/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb +28 -83
- data/lib/bootsnap/load_path_cache/core_ext/loaded_features.rb +2 -0
- data/lib/bootsnap/load_path_cache/loaded_features_index.rb +63 -29
- data/lib/bootsnap/load_path_cache/path.rb +42 -19
- data/lib/bootsnap/load_path_cache/path_scanner.rb +60 -29
- data/lib/bootsnap/load_path_cache/store.rb +64 -23
- data/lib/bootsnap/load_path_cache.rb +31 -38
- data/lib/bootsnap/setup.rb +3 -36
- data/lib/bootsnap/version.rb +3 -1
- data/lib/bootsnap.rb +127 -36
- metadata +15 -99
- data/.github/CODEOWNERS +0 -2
- data/.github/probots.yml +0 -2
- data/.gitignore +0 -17
- data/.rubocop.yml +0 -20
- data/.travis.yml +0 -21
- data/CODE_OF_CONDUCT.md +0 -74
- data/CONTRIBUTING.md +0 -21
- data/Gemfile +0 -8
- data/README.jp.md +0 -231
- data/Rakefile +0 -12
- data/bin/ci +0 -10
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/bin/test-minimal-support +0 -7
- data/bin/testunit +0 -8
- data/bootsnap.gemspec +0 -45
- data/dev.yml +0 -10
- data/lib/bootsnap/load_path_cache/core_ext/active_support.rb +0 -106
- data/lib/bootsnap/load_path_cache/realpath_cache.rb +0 -32
- data/shipit.rubygems.yml +0 -0
@@ -1,19 +1,23 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
require_relative("../explicit_require")
|
4
|
+
|
5
|
+
Bootsnap::ExplicitRequire.with_gems("msgpack") { require("msgpack") }
|
5
6
|
|
6
7
|
module Bootsnap
|
7
8
|
module LoadPathCache
|
8
9
|
class Store
|
10
|
+
VERSION_KEY = "__bootsnap_ruby_version__"
|
11
|
+
CURRENT_VERSION = "#{RUBY_REVISION}-#{RUBY_PLATFORM}".freeze # rubocop:disable Style/RedundantFreeze
|
12
|
+
|
9
13
|
NestedTransactionError = Class.new(StandardError)
|
10
14
|
SetOutsideTransactionNotAllowed = Class.new(StandardError)
|
11
15
|
|
12
|
-
def initialize(store_path)
|
16
|
+
def initialize(store_path, readonly: false)
|
13
17
|
@store_path = store_path
|
14
|
-
|
15
|
-
@txn_mutex = defined?(::Mutex) ? ::Mutex.new : ::Thread::Mutex.new
|
18
|
+
@txn_mutex = Mutex.new
|
16
19
|
@dirty = false
|
20
|
+
@readonly = readonly
|
17
21
|
load_data
|
18
22
|
end
|
19
23
|
|
@@ -23,10 +27,11 @@ module Bootsnap
|
|
23
27
|
|
24
28
|
def fetch(key)
|
25
29
|
raise(SetOutsideTransactionNotAllowed) unless @txn_mutex.owned?
|
30
|
+
|
26
31
|
v = get(key)
|
27
32
|
unless v
|
28
|
-
@dirty = true
|
29
33
|
v = yield
|
34
|
+
mark_for_mutation!
|
30
35
|
@data[key] = v
|
31
36
|
end
|
32
37
|
v
|
@@ -34,27 +39,32 @@ module Bootsnap
|
|
34
39
|
|
35
40
|
def set(key, value)
|
36
41
|
raise(SetOutsideTransactionNotAllowed) unless @txn_mutex.owned?
|
42
|
+
|
37
43
|
if value != @data[key]
|
38
|
-
|
44
|
+
mark_for_mutation!
|
39
45
|
@data[key] = value
|
40
46
|
end
|
41
47
|
end
|
42
48
|
|
43
49
|
def transaction
|
44
50
|
raise(NestedTransactionError) if @txn_mutex.owned?
|
51
|
+
|
45
52
|
@txn_mutex.synchronize do
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
commit_transaction
|
50
|
-
end
|
53
|
+
yield
|
54
|
+
ensure
|
55
|
+
commit_transaction
|
51
56
|
end
|
52
57
|
end
|
53
58
|
|
54
59
|
private
|
55
60
|
|
61
|
+
def mark_for_mutation!
|
62
|
+
@dirty = true
|
63
|
+
@data = @data.dup if @data.frozen?
|
64
|
+
end
|
65
|
+
|
56
66
|
def commit_transaction
|
57
|
-
if @dirty
|
67
|
+
if @dirty && !@readonly
|
58
68
|
dump_data
|
59
69
|
@dirty = false
|
60
70
|
end
|
@@ -62,27 +72,58 @@ module Bootsnap
|
|
62
72
|
|
63
73
|
def load_data
|
64
74
|
@data = begin
|
65
|
-
|
66
|
-
|
75
|
+
data = File.open(@store_path, encoding: Encoding::BINARY) do |io|
|
76
|
+
MessagePack.load(io, freeze: true)
|
77
|
+
end
|
78
|
+
if data.is_a?(Hash) && data[VERSION_KEY] == CURRENT_VERSION
|
79
|
+
data
|
80
|
+
else
|
81
|
+
default_data
|
82
|
+
end
|
83
|
+
# handle malformed data due to upgrade incompatibility
|
67
84
|
rescue Errno::ENOENT, MessagePack::MalformedFormatError, MessagePack::UnknownExtTypeError, EOFError
|
68
|
-
|
69
|
-
rescue ArgumentError =>
|
70
|
-
|
85
|
+
default_data
|
86
|
+
rescue ArgumentError => error
|
87
|
+
if error.message =~ /negative array size/
|
88
|
+
default_data
|
89
|
+
else
|
90
|
+
raise
|
91
|
+
end
|
71
92
|
end
|
72
93
|
end
|
73
94
|
|
74
95
|
def dump_data
|
75
96
|
# Change contents atomically so other processes can't get invalid
|
76
97
|
# caches if they read at an inopportune time.
|
77
|
-
tmp = "#{@store_path}.#{Process.pid}.#{(rand *
|
78
|
-
|
98
|
+
tmp = "#{@store_path}.#{Process.pid}.#{(rand * 100_000).to_i}.tmp"
|
99
|
+
mkdir_p(File.dirname(tmp))
|
79
100
|
exclusive_write = File::Constants::CREAT | File::Constants::EXCL | File::Constants::WRONLY
|
80
101
|
# `encoding:` looks redundant wrt `binwrite`, but necessary on windows
|
81
102
|
# because binary is part of mode.
|
82
|
-
File.
|
83
|
-
|
103
|
+
File.open(tmp, mode: exclusive_write, encoding: Encoding::BINARY) do |io|
|
104
|
+
MessagePack.dump(@data, io)
|
105
|
+
end
|
106
|
+
File.rename(tmp, @store_path)
|
84
107
|
rescue Errno::EEXIST
|
85
108
|
retry
|
109
|
+
rescue SystemCallError
|
110
|
+
end
|
111
|
+
|
112
|
+
def default_data
|
113
|
+
{VERSION_KEY => CURRENT_VERSION}
|
114
|
+
end
|
115
|
+
|
116
|
+
def mkdir_p(path)
|
117
|
+
stack = []
|
118
|
+
until File.directory?(path)
|
119
|
+
stack.push path
|
120
|
+
path = File.dirname(path)
|
121
|
+
end
|
122
|
+
stack.reverse_each do |dir|
|
123
|
+
Dir.mkdir(dir)
|
124
|
+
rescue SystemCallError
|
125
|
+
raise unless File.directory?(dir)
|
126
|
+
end
|
86
127
|
end
|
87
128
|
end
|
88
129
|
end
|
@@ -2,20 +2,14 @@
|
|
2
2
|
|
3
3
|
module Bootsnap
|
4
4
|
module LoadPathCache
|
5
|
-
|
6
|
-
FallbackScan = Class.new(StandardError)
|
5
|
+
FALLBACK_SCAN = BasicObject.new
|
7
6
|
|
8
|
-
DOT_RB =
|
9
|
-
DOT_SO =
|
10
|
-
SLASH =
|
11
|
-
|
12
|
-
# If a NameError happens several levels deep, don't re-handle it
|
13
|
-
# all the way up the chain: mark it once and bubble it up without
|
14
|
-
# more retries.
|
15
|
-
ERROR_TAG_IVAR = :@__bootsnap_rescued
|
7
|
+
DOT_RB = ".rb"
|
8
|
+
DOT_SO = ".so"
|
9
|
+
SLASH = "/"
|
16
10
|
|
17
11
|
DL_EXTENSIONS = ::RbConfig::CONFIG
|
18
|
-
.values_at(
|
12
|
+
.values_at("DLEXT", "DLEXT2")
|
19
13
|
.reject { |ext| !ext || ext.empty? }
|
20
14
|
.map { |ext| ".#{ext}" }
|
21
15
|
.freeze
|
@@ -27,52 +21,51 @@ module Bootsnap
|
|
27
21
|
|
28
22
|
CACHED_EXTENSIONS = DLEXT2 ? [DOT_RB, DLEXT, DLEXT2] : [DOT_RB, DLEXT]
|
29
23
|
|
24
|
+
@enabled = false
|
25
|
+
|
30
26
|
class << self
|
31
|
-
attr_reader(:load_path_cache, :
|
32
|
-
|
27
|
+
attr_reader(:load_path_cache, :loaded_features_index, :enabled)
|
28
|
+
alias_method :enabled?, :enabled
|
29
|
+
remove_method(:enabled)
|
33
30
|
|
34
|
-
def setup(cache_path:, development_mode:,
|
31
|
+
def setup(cache_path:, development_mode:, ignore_directories:, readonly: false)
|
35
32
|
unless supported?
|
36
33
|
warn("[bootsnap/setup] Load path caching is not supported on this implementation of Ruby") if $VERBOSE
|
37
34
|
return
|
38
35
|
end
|
39
36
|
|
40
|
-
store = Store.new(cache_path)
|
37
|
+
store = Store.new(cache_path, readonly: readonly)
|
41
38
|
|
42
39
|
@loaded_features_index = LoadedFeaturesIndex.new
|
43
|
-
@realpath_cache = RealpathCache.new
|
44
40
|
|
45
41
|
@load_path_cache = Cache.new(store, $LOAD_PATH, development_mode: development_mode)
|
46
|
-
|
47
|
-
|
42
|
+
PathScanner.ignored_directories = ignore_directories if ignore_directories
|
43
|
+
@enabled = true
|
44
|
+
require_relative("load_path_cache/core_ext/kernel_require")
|
45
|
+
require_relative("load_path_cache/core_ext/loaded_features")
|
46
|
+
end
|
48
47
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
::ActiveSupport::Dependencies.autoload_paths,
|
56
|
-
development_mode: development_mode
|
57
|
-
)
|
58
|
-
require_relative('load_path_cache/core_ext/active_support')
|
59
|
-
end
|
48
|
+
def unload!
|
49
|
+
@enabled = false
|
50
|
+
@loaded_features_index = nil
|
51
|
+
@realpath_cache = nil
|
52
|
+
@load_path_cache = nil
|
53
|
+
ChangeObserver.unregister($LOAD_PATH)
|
60
54
|
end
|
61
55
|
|
62
56
|
def supported?
|
63
|
-
RUBY_ENGINE ==
|
64
|
-
|
57
|
+
RUBY_ENGINE == "ruby" &&
|
58
|
+
RUBY_PLATFORM =~ /darwin|linux|bsd|mswin|mingw|cygwin/
|
65
59
|
end
|
66
60
|
end
|
67
61
|
end
|
68
62
|
end
|
69
63
|
|
70
64
|
if Bootsnap::LoadPathCache.supported?
|
71
|
-
require_relative(
|
72
|
-
require_relative(
|
73
|
-
require_relative(
|
74
|
-
require_relative(
|
75
|
-
require_relative(
|
76
|
-
require_relative(
|
77
|
-
require_relative('load_path_cache/realpath_cache')
|
65
|
+
require_relative("load_path_cache/path_scanner")
|
66
|
+
require_relative("load_path_cache/path")
|
67
|
+
require_relative("load_path_cache/cache")
|
68
|
+
require_relative("load_path_cache/store")
|
69
|
+
require_relative("load_path_cache/change_observer")
|
70
|
+
require_relative("load_path_cache/loaded_features_index")
|
78
71
|
end
|
data/lib/bootsnap/setup.rb
CHANGED
@@ -1,38 +1,5 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
development_mode = ['', nil, 'development'].include?(env)
|
3
|
+
require_relative("../bootsnap")
|
5
4
|
|
6
|
-
|
7
|
-
unless cache_dir
|
8
|
-
config_dir_frame = caller.detect do |line|
|
9
|
-
line.include?('/config/')
|
10
|
-
end
|
11
|
-
|
12
|
-
unless config_dir_frame
|
13
|
-
$stderr.puts("[bootsnap/setup] couldn't infer cache directory! Either:")
|
14
|
-
$stderr.puts("[bootsnap/setup] 1. require bootsnap/setup from your application's config directory; or")
|
15
|
-
$stderr.puts("[bootsnap/setup] 2. Define the environment variable BOOTSNAP_CACHE_DIR")
|
16
|
-
|
17
|
-
raise("couldn't infer bootsnap cache directory")
|
18
|
-
end
|
19
|
-
|
20
|
-
path = config_dir_frame.split(/:\d+:/).first
|
21
|
-
path = File.dirname(path) until File.basename(path) == 'config'
|
22
|
-
app_root = File.dirname(path)
|
23
|
-
|
24
|
-
cache_dir = File.join(app_root, 'tmp', 'cache')
|
25
|
-
end
|
26
|
-
|
27
|
-
ruby_version = Gem::Version.new(RUBY_VERSION)
|
28
|
-
iseq_cache_enabled = ruby_version < Gem::Version.new('2.5.0') || ruby_version >= Gem::Version.new('2.6.0')
|
29
|
-
|
30
|
-
Bootsnap.setup(
|
31
|
-
cache_dir: cache_dir,
|
32
|
-
development_mode: development_mode,
|
33
|
-
load_path_cache: true,
|
34
|
-
autoload_paths_cache: true, # assume rails. open to PRs to impl. detection
|
35
|
-
disable_trace: false,
|
36
|
-
compile_cache_iseq: iseq_cache_enabled,
|
37
|
-
compile_cache_yaml: true,
|
38
|
-
)
|
5
|
+
Bootsnap.default_setup
|
data/lib/bootsnap/version.rb
CHANGED
data/lib/bootsnap.rb
CHANGED
@@ -1,47 +1,138 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require_relative(
|
4
|
-
require_relative(
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative("bootsnap/version")
|
4
|
+
require_relative("bootsnap/bundler")
|
5
|
+
require_relative("bootsnap/load_path_cache")
|
6
|
+
require_relative("bootsnap/compile_cache")
|
5
7
|
|
6
8
|
module Bootsnap
|
7
9
|
InvalidConfiguration = Class.new(StandardError)
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
11
|
+
class << self
|
12
|
+
attr_reader :logger
|
13
|
+
|
14
|
+
def log!
|
15
|
+
self.logger = $stderr.method(:puts)
|
16
|
+
end
|
17
|
+
|
18
|
+
def logger=(logger)
|
19
|
+
@logger = logger
|
20
|
+
self.instrumentation = if logger.respond_to?(:debug)
|
21
|
+
->(event, path) { @logger.debug("[Bootsnap] #{event} #{path}") }
|
22
|
+
else
|
23
|
+
->(event, path) { @logger.call("[Bootsnap] #{event} #{path}") }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def instrumentation=(callback)
|
28
|
+
@instrumentation = callback
|
29
|
+
if respond_to?(:instrumentation_enabled=, true)
|
30
|
+
self.instrumentation_enabled = !!callback
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def _instrument(event, path)
|
35
|
+
@instrumentation.call(event, path)
|
36
|
+
end
|
37
|
+
|
38
|
+
def setup(
|
39
|
+
cache_dir:,
|
40
|
+
development_mode: true,
|
41
|
+
load_path_cache: true,
|
42
|
+
ignore_directories: nil,
|
43
|
+
readonly: false,
|
44
|
+
compile_cache_iseq: true,
|
45
|
+
compile_cache_yaml: true,
|
46
|
+
compile_cache_json: true
|
34
47
|
)
|
35
|
-
|
48
|
+
if load_path_cache
|
49
|
+
Bootsnap::LoadPathCache.setup(
|
50
|
+
cache_path: "#{cache_dir}/bootsnap/load-path-cache",
|
51
|
+
development_mode: development_mode,
|
52
|
+
ignore_directories: ignore_directories,
|
53
|
+
readonly: readonly,
|
54
|
+
)
|
55
|
+
end
|
36
56
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
57
|
+
Bootsnap::CompileCache.setup(
|
58
|
+
cache_dir: "#{cache_dir}/bootsnap/compile-cache",
|
59
|
+
iseq: compile_cache_iseq,
|
60
|
+
yaml: compile_cache_yaml,
|
61
|
+
json: compile_cache_json,
|
62
|
+
readonly: readonly,
|
42
63
|
)
|
64
|
+
end
|
65
|
+
|
66
|
+
def unload_cache!
|
67
|
+
LoadPathCache.unload!
|
68
|
+
end
|
69
|
+
|
70
|
+
def default_setup
|
71
|
+
env = ENV["RAILS_ENV"] || ENV["RACK_ENV"] || ENV["ENV"]
|
72
|
+
development_mode = ["", nil, "development"].include?(env)
|
73
|
+
|
74
|
+
unless ENV["DISABLE_BOOTSNAP"]
|
75
|
+
cache_dir = ENV["BOOTSNAP_CACHE_DIR"]
|
76
|
+
unless cache_dir
|
77
|
+
config_dir_frame = caller.detect do |line|
|
78
|
+
line.include?("/config/")
|
79
|
+
end
|
80
|
+
|
81
|
+
unless config_dir_frame
|
82
|
+
$stderr.puts("[bootsnap/setup] couldn't infer cache directory! Either:")
|
83
|
+
$stderr.puts("[bootsnap/setup] 1. require bootsnap/setup from your application's config directory; or")
|
84
|
+
$stderr.puts("[bootsnap/setup] 2. Define the environment variable BOOTSNAP_CACHE_DIR")
|
85
|
+
|
86
|
+
raise("couldn't infer bootsnap cache directory")
|
87
|
+
end
|
88
|
+
|
89
|
+
path = config_dir_frame.split(/:\d+:/).first
|
90
|
+
path = File.dirname(path) until File.basename(path) == "config"
|
91
|
+
app_root = File.dirname(path)
|
92
|
+
|
93
|
+
cache_dir = File.join(app_root, "tmp", "cache")
|
94
|
+
end
|
95
|
+
|
96
|
+
ignore_directories = if ENV.key?("BOOTSNAP_IGNORE_DIRECTORIES")
|
97
|
+
ENV["BOOTSNAP_IGNORE_DIRECTORIES"].split(",")
|
98
|
+
end
|
99
|
+
|
100
|
+
setup(
|
101
|
+
cache_dir: cache_dir,
|
102
|
+
development_mode: development_mode,
|
103
|
+
load_path_cache: !ENV["DISABLE_BOOTSNAP_LOAD_PATH_CACHE"],
|
104
|
+
compile_cache_iseq: !ENV["DISABLE_BOOTSNAP_COMPILE_CACHE"],
|
105
|
+
compile_cache_yaml: !ENV["DISABLE_BOOTSNAP_COMPILE_CACHE"],
|
106
|
+
compile_cache_json: !ENV["DISABLE_BOOTSNAP_COMPILE_CACHE"],
|
107
|
+
readonly: !!ENV["BOOTSNAP_READONLY"],
|
108
|
+
ignore_directories: ignore_directories,
|
109
|
+
)
|
110
|
+
|
111
|
+
if ENV["BOOTSNAP_LOG"]
|
112
|
+
log!
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
if RbConfig::CONFIG["host_os"] =~ /mswin|mingw|cygwin/
|
118
|
+
def absolute_path?(path)
|
119
|
+
path[1] == ":"
|
120
|
+
end
|
43
121
|
else
|
44
|
-
|
122
|
+
def absolute_path?(path)
|
123
|
+
path.start_with?("/")
|
124
|
+
end
|
45
125
|
end
|
126
|
+
|
127
|
+
# This is a semi-accurate ruby implementation of the native `rb_get_path(VALUE)` function.
|
128
|
+
# The native version is very intricate and may behave differently on windows etc.
|
129
|
+
# But we only use it for non-MRI platform.
|
130
|
+
def rb_get_path(fname)
|
131
|
+
path_path = fname.respond_to?(:to_path) ? fname.to_path : fname
|
132
|
+
String.try_convert(path_path) || raise(TypeError, "no implicit conversion of #{path_path.class} into String")
|
133
|
+
end
|
134
|
+
|
135
|
+
# Allow the C extension to redefine `rb_get_path` without warning.
|
136
|
+
alias_method :rb_get_path, :rb_get_path # rubocop:disable Lint/DuplicateMethods
|
46
137
|
end
|
47
138
|
end
|
metadata
CHANGED
@@ -1,157 +1,73 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bootsnap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Burke Libbey
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '10.0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '10.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rake-compiler
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: minitest
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '5.0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '5.0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: mocha
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '1.2'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '1.2'
|
83
13
|
- !ruby/object:Gem::Dependency
|
84
14
|
name: msgpack
|
85
15
|
requirement: !ruby/object:Gem::Requirement
|
86
16
|
requirements:
|
87
17
|
- - "~>"
|
88
18
|
- !ruby/object:Gem::Version
|
89
|
-
version: '1.
|
19
|
+
version: '1.2'
|
90
20
|
type: :runtime
|
91
21
|
prerelease: false
|
92
22
|
version_requirements: !ruby/object:Gem::Requirement
|
93
23
|
requirements:
|
94
24
|
- - "~>"
|
95
25
|
- !ruby/object:Gem::Version
|
96
|
-
version: '1.
|
26
|
+
version: '1.2'
|
97
27
|
description: Boot large ruby/rails apps faster
|
98
28
|
email:
|
99
29
|
- burke.libbey@shopify.com
|
100
|
-
executables:
|
30
|
+
executables:
|
31
|
+
- bootsnap
|
101
32
|
extensions:
|
102
33
|
- ext/bootsnap/extconf.rb
|
103
34
|
extra_rdoc_files: []
|
104
35
|
files:
|
105
|
-
- ".github/CODEOWNERS"
|
106
|
-
- ".github/probots.yml"
|
107
|
-
- ".gitignore"
|
108
|
-
- ".rubocop.yml"
|
109
|
-
- ".travis.yml"
|
110
36
|
- CHANGELOG.md
|
111
|
-
- CODE_OF_CONDUCT.md
|
112
|
-
- CONTRIBUTING.md
|
113
|
-
- Gemfile
|
114
37
|
- LICENSE.txt
|
115
|
-
- README.jp.md
|
116
38
|
- README.md
|
117
|
-
-
|
118
|
-
- bin/ci
|
119
|
-
- bin/console
|
120
|
-
- bin/setup
|
121
|
-
- bin/test-minimal-support
|
122
|
-
- bin/testunit
|
123
|
-
- bootsnap.gemspec
|
124
|
-
- dev.yml
|
39
|
+
- exe/bootsnap
|
125
40
|
- ext/bootsnap/bootsnap.c
|
126
41
|
- ext/bootsnap/bootsnap.h
|
127
42
|
- ext/bootsnap/extconf.rb
|
128
43
|
- lib/bootsnap.rb
|
129
44
|
- lib/bootsnap/bundler.rb
|
45
|
+
- lib/bootsnap/cli.rb
|
46
|
+
- lib/bootsnap/cli/worker_pool.rb
|
130
47
|
- lib/bootsnap/compile_cache.rb
|
131
48
|
- lib/bootsnap/compile_cache/iseq.rb
|
49
|
+
- lib/bootsnap/compile_cache/json.rb
|
132
50
|
- lib/bootsnap/compile_cache/yaml.rb
|
133
51
|
- lib/bootsnap/explicit_require.rb
|
134
52
|
- lib/bootsnap/load_path_cache.rb
|
135
53
|
- lib/bootsnap/load_path_cache/cache.rb
|
136
54
|
- lib/bootsnap/load_path_cache/change_observer.rb
|
137
|
-
- lib/bootsnap/load_path_cache/core_ext/active_support.rb
|
138
55
|
- lib/bootsnap/load_path_cache/core_ext/kernel_require.rb
|
139
56
|
- lib/bootsnap/load_path_cache/core_ext/loaded_features.rb
|
140
57
|
- lib/bootsnap/load_path_cache/loaded_features_index.rb
|
141
58
|
- lib/bootsnap/load_path_cache/path.rb
|
142
59
|
- lib/bootsnap/load_path_cache/path_scanner.rb
|
143
|
-
- lib/bootsnap/load_path_cache/realpath_cache.rb
|
144
60
|
- lib/bootsnap/load_path_cache/store.rb
|
145
61
|
- lib/bootsnap/setup.rb
|
146
62
|
- lib/bootsnap/version.rb
|
147
|
-
- shipit.rubygems.yml
|
148
63
|
homepage: https://github.com/Shopify/bootsnap
|
149
64
|
licenses:
|
150
65
|
- MIT
|
151
66
|
metadata:
|
152
67
|
bug_tracker_uri: https://github.com/Shopify/bootsnap/issues
|
153
|
-
changelog_uri: https://github.com/Shopify/bootsnap/blob/
|
68
|
+
changelog_uri: https://github.com/Shopify/bootsnap/blob/main/CHANGELOG.md
|
154
69
|
source_code_uri: https://github.com/Shopify/bootsnap
|
70
|
+
allowed_push_host: https://rubygems.org
|
155
71
|
post_install_message:
|
156
72
|
rdoc_options: []
|
157
73
|
require_paths:
|
@@ -160,14 +76,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
160
76
|
requirements:
|
161
77
|
- - ">="
|
162
78
|
- !ruby/object:Gem::Version
|
163
|
-
version: 2.
|
79
|
+
version: 2.6.0
|
164
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
81
|
requirements:
|
166
82
|
- - ">="
|
167
83
|
- !ruby/object:Gem::Version
|
168
84
|
version: '0'
|
169
85
|
requirements: []
|
170
|
-
rubygems_version: 3.
|
86
|
+
rubygems_version: 3.3.3
|
171
87
|
signing_key:
|
172
88
|
specification_version: 4
|
173
89
|
summary: Boot large ruby/rails apps faster
|
data/.github/CODEOWNERS
DELETED
data/.github/probots.yml
DELETED