bootsnap 1.4.5 → 1.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +227 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +57 -20
  5. data/exe/bootsnap +5 -0
  6. data/ext/bootsnap/bootsnap.c +301 -155
  7. data/ext/bootsnap/extconf.rb +22 -14
  8. data/lib/bootsnap/bundler.rb +2 -0
  9. data/lib/bootsnap/cli/worker_pool.rb +136 -0
  10. data/lib/bootsnap/cli.rb +281 -0
  11. data/lib/bootsnap/compile_cache/iseq.rb +64 -19
  12. data/lib/bootsnap/compile_cache/json.rb +93 -0
  13. data/lib/bootsnap/compile_cache/yaml.rb +333 -42
  14. data/lib/bootsnap/compile_cache.rb +26 -8
  15. data/lib/bootsnap/explicit_require.rb +5 -3
  16. data/lib/bootsnap/load_path_cache/cache.rb +65 -37
  17. data/lib/bootsnap/load_path_cache/change_observer.rb +19 -3
  18. data/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb +28 -83
  19. data/lib/bootsnap/load_path_cache/core_ext/loaded_features.rb +2 -0
  20. data/lib/bootsnap/load_path_cache/loaded_features_index.rb +63 -29
  21. data/lib/bootsnap/load_path_cache/path.rb +42 -19
  22. data/lib/bootsnap/load_path_cache/path_scanner.rb +60 -29
  23. data/lib/bootsnap/load_path_cache/store.rb +64 -23
  24. data/lib/bootsnap/load_path_cache.rb +31 -38
  25. data/lib/bootsnap/setup.rb +3 -36
  26. data/lib/bootsnap/version.rb +3 -1
  27. data/lib/bootsnap.rb +127 -36
  28. metadata +15 -99
  29. data/.github/CODEOWNERS +0 -2
  30. data/.github/probots.yml +0 -2
  31. data/.gitignore +0 -17
  32. data/.rubocop.yml +0 -20
  33. data/.travis.yml +0 -21
  34. data/CODE_OF_CONDUCT.md +0 -74
  35. data/CONTRIBUTING.md +0 -21
  36. data/Gemfile +0 -8
  37. data/README.jp.md +0 -231
  38. data/Rakefile +0 -12
  39. data/bin/ci +0 -10
  40. data/bin/console +0 -14
  41. data/bin/setup +0 -8
  42. data/bin/test-minimal-support +0 -7
  43. data/bin/testunit +0 -8
  44. data/bootsnap.gemspec +0 -45
  45. data/dev.yml +0 -10
  46. data/lib/bootsnap/load_path_cache/core_ext/active_support.rb +0 -106
  47. data/lib/bootsnap/load_path_cache/realpath_cache.rb +0 -32
  48. data/shipit.rubygems.yml +0 -0
@@ -1,19 +1,23 @@
1
- require_relative('../explicit_require')
1
+ # frozen_string_literal: true
2
2
 
3
- Bootsnap::ExplicitRequire.with_gems('msgpack') { require('msgpack') }
4
- Bootsnap::ExplicitRequire.from_rubylibdir('fileutils')
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
- # TODO: Remove conditional once Ruby 2.2 support is dropped.
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
- @dirty = true
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
- begin
47
- yield
48
- ensure
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
- MessagePack.load(File.binread(@store_path))
66
- # handle malformed data due to upgrade incompatability
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 => e
70
- e.message =~ /negative array size/ ? {} : raise
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 * 100000).to_i}.tmp"
78
- FileUtils.mkpath(File.dirname(tmp))
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.binwrite(tmp, MessagePack.dump(@data), mode: exclusive_write, encoding: Encoding::BINARY)
83
- FileUtils.mv(tmp, @store_path)
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
- ReturnFalse = Class.new(StandardError)
6
- FallbackScan = Class.new(StandardError)
5
+ FALLBACK_SCAN = BasicObject.new
7
6
 
8
- DOT_RB = '.rb'
9
- DOT_SO = '.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('DLEXT', 'DLEXT2')
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, :autoload_paths_cache,
32
- :loaded_features_index, :realpath_cache)
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:, active_support: true)
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
- require_relative('load_path_cache/core_ext/kernel_require')
47
- require_relative('load_path_cache/core_ext/loaded_features')
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
- if active_support
50
- # this should happen after setting up the initial cache because it
51
- # loads a lot of code. It's better to do after +require+ is optimized.
52
- require('active_support/dependencies')
53
- @autoload_paths_cache = Cache.new(
54
- store,
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 == 'ruby' &&
64
- RUBY_PLATFORM =~ /darwin|linux|bsd/
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('load_path_cache/path_scanner')
72
- require_relative('load_path_cache/path')
73
- require_relative('load_path_cache/cache')
74
- require_relative('load_path_cache/store')
75
- require_relative('load_path_cache/change_observer')
76
- require_relative('load_path_cache/loaded_features_index')
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
@@ -1,38 +1,5 @@
1
- require_relative('../bootsnap')
1
+ # frozen_string_literal: true
2
2
 
3
- env = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || ENV['ENV']
4
- development_mode = ['', nil, 'development'].include?(env)
3
+ require_relative("../bootsnap")
5
4
 
6
- cache_dir = ENV['BOOTSNAP_CACHE_DIR']
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bootsnap
2
- VERSION = "1.4.5"
4
+ VERSION = "1.16.0"
3
5
  end
data/lib/bootsnap.rb CHANGED
@@ -1,47 +1,138 @@
1
- require_relative('bootsnap/version')
2
- require_relative('bootsnap/bundler')
3
- require_relative('bootsnap/load_path_cache')
4
- require_relative('bootsnap/compile_cache')
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
- def self.setup(
10
- cache_dir:,
11
- development_mode: true,
12
- load_path_cache: true,
13
- autoload_paths_cache: true,
14
- disable_trace: false,
15
- compile_cache_iseq: true,
16
- compile_cache_yaml: true
17
- )
18
- if autoload_paths_cache && !load_path_cache
19
- raise(InvalidConfiguration, "feature 'autoload_paths_cache' depends on feature 'load_path_cache'")
20
- end
21
-
22
- setup_disable_trace if disable_trace
23
-
24
- Bootsnap::LoadPathCache.setup(
25
- cache_path: cache_dir + '/bootsnap-load-path-cache',
26
- development_mode: development_mode,
27
- active_support: autoload_paths_cache
28
- ) if load_path_cache
29
-
30
- Bootsnap::CompileCache.setup(
31
- cache_dir: cache_dir + '/bootsnap-compile-cache',
32
- iseq: compile_cache_iseq,
33
- yaml: compile_cache_yaml
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
- end
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
- def self.setup_disable_trace
38
- if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.5.0')
39
- warn(
40
- "from #{caller_locations(1, 1)[0]}: The 'disable_trace' method is not allowed with this Ruby version. " \
41
- "current: #{RUBY_VERSION}, allowed version: < 2.5.0",
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
- RubyVM::InstructionSequence.compile_option = { trace_instruction: false }
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.5
4
+ version: 1.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Burke Libbey
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-28 00:00:00.000000000 Z
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.0'
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.0'
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
- - Rakefile
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/master/CHANGELOG.md
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.0.0
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.0.2
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
@@ -1,2 +0,0 @@
1
- # mvm:maintainer
2
- * @burke
data/.github/probots.yml DELETED
@@ -1,2 +0,0 @@
1
- enabled:
2
- - cla