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.
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