bootsnap 1.4.4 → 1.9.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +129 -0
  3. data/README.md +46 -15
  4. data/exe/bootsnap +5 -0
  5. data/ext/bootsnap/bootsnap.c +276 -87
  6. data/ext/bootsnap/extconf.rb +20 -14
  7. data/lib/bootsnap/bundler.rb +1 -0
  8. data/lib/bootsnap/cli/worker_pool.rb +135 -0
  9. data/lib/bootsnap/cli.rb +281 -0
  10. data/lib/bootsnap/compile_cache/iseq.rb +51 -11
  11. data/lib/bootsnap/compile_cache/json.rb +79 -0
  12. data/lib/bootsnap/compile_cache/yaml.rb +141 -39
  13. data/lib/bootsnap/compile_cache.rb +14 -4
  14. data/lib/bootsnap/explicit_require.rb +1 -0
  15. data/lib/bootsnap/load_path_cache/cache.rb +47 -26
  16. data/lib/bootsnap/load_path_cache/change_observer.rb +4 -1
  17. data/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb +18 -20
  18. data/lib/bootsnap/load_path_cache/core_ext/loaded_features.rb +1 -0
  19. data/lib/bootsnap/load_path_cache/loaded_features_index.rb +51 -15
  20. data/lib/bootsnap/load_path_cache/path.rb +3 -2
  21. data/lib/bootsnap/load_path_cache/path_scanner.rb +50 -26
  22. data/lib/bootsnap/load_path_cache/realpath_cache.rb +5 -5
  23. data/lib/bootsnap/load_path_cache/store.rb +39 -15
  24. data/lib/bootsnap/load_path_cache.rb +3 -16
  25. data/lib/bootsnap/setup.rb +2 -36
  26. data/lib/bootsnap/version.rb +2 -1
  27. data/lib/bootsnap.rb +106 -17
  28. metadata +18 -32
  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/shipit.rubygems.yml +0 -0
@@ -5,7 +5,6 @@ require_relative('../explicit_require')
5
5
  module Bootsnap
6
6
  module LoadPathCache
7
7
  module PathScanner
8
- ALL_FILES = "/{,**/*/**/}*"
9
8
  REQUIRABLE_EXTENSIONS = [DOT_RB] + DL_EXTENSIONS
10
9
  NORMALIZE_NATIVE_EXTENSIONS = !DL_EXTENSIONS.include?(LoadPathCache::DOT_SO)
11
10
  ALTERNATIVE_NATIVE_EXTENSIONS_PATTERN = /\.(o|bundle|dylib)\z/
@@ -16,34 +15,59 @@ module Bootsnap
16
15
  ''
17
16
  end
18
17
 
19
- def self.call(path)
20
- path = path.to_s
21
-
22
- relative_slice = (path.size + 1)..-1
23
- # If the bundle path is a descendent of this path, we do additional
24
- # checks to prevent recursing into the bundle path as we recurse
25
- # through this path. We don't want to scan the bundle path because
26
- # anything useful in it will be present on other load path items.
27
- #
28
- # This can happen if, for example, the user adds '.' to the load path,
29
- # and the bundle path is '.bundle'.
30
- contains_bundle_path = BUNDLE_PATH.start_with?(path)
31
-
32
- dirs = []
33
- requirables = []
34
-
35
- Dir.glob(path + ALL_FILES).each do |absolute_path|
36
- next if contains_bundle_path && absolute_path.start_with?(BUNDLE_PATH)
37
- relative_path = absolute_path.slice(relative_slice)
38
-
39
- if File.directory?(absolute_path)
40
- dirs << relative_path
41
- elsif REQUIRABLE_EXTENSIONS.include?(File.extname(relative_path))
42
- requirables << relative_path
18
+ class << self
19
+ def call(path)
20
+ path = File.expand_path(path.to_s).freeze
21
+ return [[], []] unless File.directory?(path)
22
+
23
+ # If the bundle path is a descendent of this path, we do additional
24
+ # checks to prevent recursing into the bundle path as we recurse
25
+ # through this path. We don't want to scan the bundle path because
26
+ # anything useful in it will be present on other load path items.
27
+ #
28
+ # This can happen if, for example, the user adds '.' to the load path,
29
+ # and the bundle path is '.bundle'.
30
+ contains_bundle_path = BUNDLE_PATH.start_with?(path)
31
+
32
+ dirs = []
33
+ requirables = []
34
+ walk(path, nil) do |relative_path, absolute_path, is_directory|
35
+ if is_directory
36
+ dirs << os_path(relative_path)
37
+ !contains_bundle_path || !absolute_path.start_with?(BUNDLE_PATH)
38
+ elsif relative_path.end_with?(*REQUIRABLE_EXTENSIONS)
39
+ requirables << os_path(relative_path)
40
+ end
43
41
  end
42
+ [requirables, dirs]
44
43
  end
45
44
 
46
- [requirables, dirs]
45
+ def walk(absolute_dir_path, relative_dir_path, &block)
46
+ Dir.foreach(absolute_dir_path) do |name|
47
+ next if name.start_with?('.')
48
+ relative_path = relative_dir_path ? File.join(relative_dir_path, name) : name
49
+
50
+ absolute_path = "#{absolute_dir_path}/#{name}"
51
+ if File.directory?(absolute_path)
52
+ if yield relative_path, absolute_path, true
53
+ walk(absolute_path, relative_path, &block)
54
+ end
55
+ else
56
+ yield relative_path, absolute_path, false
57
+ end
58
+ end
59
+ end
60
+
61
+ if RUBY_VERSION >= '3.1'
62
+ def os_path(path)
63
+ path.freeze
64
+ end
65
+ else
66
+ def os_path(path)
67
+ path.force_encoding(Encoding::US_ASCII) if path.ascii_only?
68
+ path.freeze
69
+ end
70
+ end
47
71
  end
48
72
  end
49
73
  end
@@ -15,15 +15,15 @@ module Bootsnap
15
15
 
16
16
  def realpath(caller_location, path)
17
17
  base = File.dirname(caller_location)
18
- file = find_file(File.expand_path(path, base))
19
- dir = File.dirname(file)
20
- File.join(dir, File.basename(file))
18
+ abspath = File.expand_path(path, base).freeze
19
+ find_file(abspath)
21
20
  end
22
21
 
23
22
  def find_file(name)
24
- ['', *CACHED_EXTENSIONS].each do |ext|
23
+ return File.realpath(name).freeze if File.exist?(name)
24
+ CACHED_EXTENSIONS.each do |ext|
25
25
  filename = "#{name}#{ext}"
26
- return File.realpath(filename) if File.exist?(filename)
26
+ return File.realpath(filename).freeze if File.exist?(filename)
27
27
  end
28
28
  name
29
29
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require_relative('../explicit_require')
2
3
 
3
4
  Bootsnap::ExplicitRequire.with_gems('msgpack') { require('msgpack') }
@@ -6,12 +7,15 @@ Bootsnap::ExplicitRequire.from_rubylibdir('fileutils')
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
12
+
9
13
  NestedTransactionError = Class.new(StandardError)
10
14
  SetOutsideTransactionNotAllowed = Class.new(StandardError)
11
15
 
12
16
  def initialize(store_path)
13
17
  @store_path = store_path
14
- @in_txn = false
18
+ @txn_mutex = Mutex.new
15
19
  @dirty = false
16
20
  load_data
17
21
  end
@@ -21,7 +25,7 @@ module Bootsnap
21
25
  end
22
26
 
23
27
  def fetch(key)
24
- raise(SetOutsideTransactionNotAllowed) unless @in_txn
28
+ raise(SetOutsideTransactionNotAllowed) unless @txn_mutex.owned?
25
29
  v = get(key)
26
30
  unless v
27
31
  @dirty = true
@@ -32,7 +36,7 @@ module Bootsnap
32
36
  end
33
37
 
34
38
  def set(key, value)
35
- raise(SetOutsideTransactionNotAllowed) unless @in_txn
39
+ raise(SetOutsideTransactionNotAllowed) unless @txn_mutex.owned?
36
40
  if value != @data[key]
37
41
  @dirty = true
38
42
  @data[key] = value
@@ -40,12 +44,14 @@ module Bootsnap
40
44
  end
41
45
 
42
46
  def transaction
43
- raise(NestedTransactionError) if @in_txn
44
- @in_txn = true
45
- yield
46
- ensure
47
- commit_transaction
48
- @in_txn = false
47
+ raise(NestedTransactionError) if @txn_mutex.owned?
48
+ @txn_mutex.synchronize do
49
+ begin
50
+ yield
51
+ ensure
52
+ commit_transaction
53
+ end
54
+ end
49
55
  end
50
56
 
51
57
  private
@@ -59,12 +65,23 @@ module Bootsnap
59
65
 
60
66
  def load_data
61
67
  @data = begin
62
- MessagePack.load(File.binread(@store_path))
63
- # handle malformed data due to upgrade incompatability
68
+ data = File.open(@store_path, encoding: Encoding::BINARY) do |io|
69
+ MessagePack.load(io)
70
+ end
71
+ if data.is_a?(Hash) && data[VERSION_KEY] == CURRENT_VERSION
72
+ data
73
+ else
74
+ default_data
75
+ end
76
+ # handle malformed data due to upgrade incompatibility
64
77
  rescue Errno::ENOENT, MessagePack::MalformedFormatError, MessagePack::UnknownExtTypeError, EOFError
65
- {}
66
- rescue ArgumentError => e
67
- e.message =~ /negative array size/ ? {} : raise
78
+ default_data
79
+ rescue ArgumentError => error
80
+ if error.message =~ /negative array size/
81
+ default_data
82
+ else
83
+ raise
84
+ end
68
85
  end
69
86
  end
70
87
 
@@ -76,10 +93,17 @@ module Bootsnap
76
93
  exclusive_write = File::Constants::CREAT | File::Constants::EXCL | File::Constants::WRONLY
77
94
  # `encoding:` looks redundant wrt `binwrite`, but necessary on windows
78
95
  # because binary is part of mode.
79
- File.binwrite(tmp, MessagePack.dump(@data), mode: exclusive_write, encoding: Encoding::BINARY)
96
+ File.open(tmp, mode: exclusive_write, encoding: Encoding::BINARY) do |io|
97
+ MessagePack.dump(@data, io, freeze: true)
98
+ end
80
99
  FileUtils.mv(tmp, @store_path)
81
100
  rescue Errno::EEXIST
82
101
  retry
102
+ rescue SystemCallError
103
+ end
104
+
105
+ def default_data
106
+ { VERSION_KEY => CURRENT_VERSION }
83
107
  end
84
108
  end
85
109
  end
@@ -28,10 +28,9 @@ module Bootsnap
28
28
  CACHED_EXTENSIONS = DLEXT2 ? [DOT_RB, DLEXT, DLEXT2] : [DOT_RB, DLEXT]
29
29
 
30
30
  class << self
31
- attr_reader(:load_path_cache, :autoload_paths_cache,
32
- :loaded_features_index, :realpath_cache)
31
+ attr_reader(:load_path_cache, :loaded_features_index, :realpath_cache)
33
32
 
34
- def setup(cache_path:, development_mode:, active_support: true)
33
+ def setup(cache_path:, development_mode:)
35
34
  unless supported?
36
35
  warn("[bootsnap/setup] Load path caching is not supported on this implementation of Ruby") if $VERBOSE
37
36
  return
@@ -45,23 +44,11 @@ module Bootsnap
45
44
  @load_path_cache = Cache.new(store, $LOAD_PATH, development_mode: development_mode)
46
45
  require_relative('load_path_cache/core_ext/kernel_require')
47
46
  require_relative('load_path_cache/core_ext/loaded_features')
48
-
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
60
47
  end
61
48
 
62
49
  def supported?
63
50
  RUBY_ENGINE == 'ruby' &&
64
- RUBY_PLATFORM =~ /darwin|linux|bsd/
51
+ RUBY_PLATFORM =~ /darwin|linux|bsd|mswin|mingw|cygwin/
65
52
  end
66
53
  end
67
54
  end
@@ -1,38 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require_relative('../bootsnap')
2
3
 
3
- env = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || ENV['ENV']
4
- development_mode = ['', nil, 'development'].include?(env)
5
-
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
- )
4
+ Bootsnap.default_setup
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Bootsnap
2
- VERSION = "1.4.4"
3
+ VERSION = "1.9.4"
3
4
  end
data/lib/bootsnap.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative('bootsnap/version')
2
4
  require_relative('bootsnap/bundler')
3
5
  require_relative('bootsnap/load_path_cache')
@@ -6,42 +8,129 @@ require_relative('bootsnap/compile_cache')
6
8
  module Bootsnap
7
9
  InvalidConfiguration = Class.new(StandardError)
8
10
 
11
+ class << self
12
+ attr_reader :logger
13
+ end
14
+
15
+ def self.log!
16
+ self.logger = $stderr.method(:puts)
17
+ end
18
+
19
+ def self.logger=(logger)
20
+ @logger = logger
21
+ if logger.respond_to?(:debug)
22
+ self.instrumentation = ->(event, path) { @logger.debug("[Bootsnap] #{event} #{path}") }
23
+ else
24
+ self.instrumentation = ->(event, path) { @logger.call("[Bootsnap] #{event} #{path}") }
25
+ end
26
+ end
27
+
28
+ def self.instrumentation=(callback)
29
+ @instrumentation = callback
30
+ if respond_to?(:instrumentation_enabled=, true)
31
+ self.instrumentation_enabled = !!callback
32
+ end
33
+ end
34
+
35
+ def self._instrument(event, path)
36
+ @instrumentation.call(event, path)
37
+ end
38
+
9
39
  def self.setup(
10
40
  cache_dir:,
11
41
  development_mode: true,
12
42
  load_path_cache: true,
13
- autoload_paths_cache: true,
14
- disable_trace: false,
43
+ autoload_paths_cache: nil,
44
+ disable_trace: nil,
15
45
  compile_cache_iseq: true,
16
- compile_cache_yaml: true
46
+ compile_cache_yaml: true,
47
+ compile_cache_json: true
17
48
  )
18
- if autoload_paths_cache && !load_path_cache
19
- raise(InvalidConfiguration, "feature 'autoload_paths_cache' depends on feature 'load_path_cache'")
49
+ unless autoload_paths_cache.nil?
50
+ warn "[DEPRECATED] Bootsnap's `autoload_paths_cache:` option is deprecated and will be removed. " \
51
+ "If you use Zeitwerk this option is useless, and if you are still using the classic autoloader " \
52
+ "upgrading is recommended."
53
+ end
54
+
55
+ unless disable_trace.nil?
56
+ warn "[DEPRECATED] Bootsnap's `disable_trace:` option is deprecated and will be removed. " \
57
+ "If you use Ruby 2.5 or newer this option is useless, if not upgrading is recommended."
20
58
  end
21
59
 
22
- setup_disable_trace if disable_trace
60
+ if compile_cache_iseq && !iseq_cache_supported?
61
+ warn "Ruby 2.5 has a bug that break code tracing when code is loaded from cache. It is recommened " \
62
+ "to turn `compile_cache_iseq` off on Ruby 2.5"
63
+ end
23
64
 
24
65
  Bootsnap::LoadPathCache.setup(
25
- cache_path: cache_dir + '/bootsnap-load-path-cache',
66
+ cache_path: cache_dir + '/bootsnap/load-path-cache',
26
67
  development_mode: development_mode,
27
- active_support: autoload_paths_cache
28
68
  ) if load_path_cache
29
69
 
30
70
  Bootsnap::CompileCache.setup(
31
- cache_dir: cache_dir + '/bootsnap-compile-cache',
71
+ cache_dir: cache_dir + '/bootsnap/compile-cache',
32
72
  iseq: compile_cache_iseq,
33
- yaml: compile_cache_yaml
73
+ yaml: compile_cache_yaml,
74
+ json: compile_cache_json,
34
75
  )
35
76
  end
36
77
 
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",
78
+ def self.iseq_cache_supported?
79
+ return @iseq_cache_supported if defined? @iseq_cache_supported
80
+
81
+ ruby_version = Gem::Version.new(RUBY_VERSION)
82
+ @iseq_cache_supported = ruby_version < Gem::Version.new('2.5.0') || ruby_version >= Gem::Version.new('2.6.0')
83
+ end
84
+
85
+ def self.default_setup
86
+ env = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || ENV['ENV']
87
+ development_mode = ['', nil, 'development'].include?(env)
88
+
89
+ unless ENV['DISABLE_BOOTSNAP']
90
+ cache_dir = ENV['BOOTSNAP_CACHE_DIR']
91
+ unless cache_dir
92
+ config_dir_frame = caller.detect do |line|
93
+ line.include?('/config/')
94
+ end
95
+
96
+ unless config_dir_frame
97
+ $stderr.puts("[bootsnap/setup] couldn't infer cache directory! Either:")
98
+ $stderr.puts("[bootsnap/setup] 1. require bootsnap/setup from your application's config directory; or")
99
+ $stderr.puts("[bootsnap/setup] 2. Define the environment variable BOOTSNAP_CACHE_DIR")
100
+
101
+ raise("couldn't infer bootsnap cache directory")
102
+ end
103
+
104
+ path = config_dir_frame.split(/:\d+:/).first
105
+ path = File.dirname(path) until File.basename(path) == 'config'
106
+ app_root = File.dirname(path)
107
+
108
+ cache_dir = File.join(app_root, 'tmp', 'cache')
109
+ end
110
+
111
+
112
+ setup(
113
+ cache_dir: cache_dir,
114
+ development_mode: development_mode,
115
+ load_path_cache: !ENV['DISABLE_BOOTSNAP_LOAD_PATH_CACHE'],
116
+ compile_cache_iseq: !ENV['DISABLE_BOOTSNAP_COMPILE_CACHE'] && iseq_cache_supported?,
117
+ compile_cache_yaml: !ENV['DISABLE_BOOTSNAP_COMPILE_CACHE'],
118
+ compile_cache_json: !ENV['DISABLE_BOOTSNAP_COMPILE_CACHE'],
42
119
  )
43
- else
44
- RubyVM::InstructionSequence.compile_option = { trace_instruction: false }
120
+
121
+ if ENV['BOOTSNAP_LOG']
122
+ log!
123
+ end
124
+ end
125
+ end
126
+
127
+ if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
128
+ def self.absolute_path?(path)
129
+ path[1] == ':'
130
+ end
131
+ else
132
+ def self.absolute_path?(path)
133
+ path.start_with?('/')
45
134
  end
46
135
  end
47
136
  end
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.4
4
+ version: 1.9.4
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-04-24 00:00:00.000000000 Z
11
+ date: 2022-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,28 +28,28 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake-compiler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
@@ -97,44 +97,31 @@ dependencies:
97
97
  description: Boot large ruby/rails apps faster
98
98
  email:
99
99
  - burke.libbey@shopify.com
100
- executables: []
100
+ executables:
101
+ - bootsnap
101
102
  extensions:
102
103
  - ext/bootsnap/extconf.rb
103
104
  extra_rdoc_files: []
104
105
  files:
105
- - ".github/CODEOWNERS"
106
- - ".github/probots.yml"
107
- - ".gitignore"
108
- - ".rubocop.yml"
109
- - ".travis.yml"
110
106
  - CHANGELOG.md
111
- - CODE_OF_CONDUCT.md
112
- - CONTRIBUTING.md
113
- - Gemfile
114
107
  - LICENSE.txt
115
- - README.jp.md
116
108
  - 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
109
+ - exe/bootsnap
125
110
  - ext/bootsnap/bootsnap.c
126
111
  - ext/bootsnap/bootsnap.h
127
112
  - ext/bootsnap/extconf.rb
128
113
  - lib/bootsnap.rb
129
114
  - lib/bootsnap/bundler.rb
115
+ - lib/bootsnap/cli.rb
116
+ - lib/bootsnap/cli/worker_pool.rb
130
117
  - lib/bootsnap/compile_cache.rb
131
118
  - lib/bootsnap/compile_cache/iseq.rb
119
+ - lib/bootsnap/compile_cache/json.rb
132
120
  - lib/bootsnap/compile_cache/yaml.rb
133
121
  - lib/bootsnap/explicit_require.rb
134
122
  - lib/bootsnap/load_path_cache.rb
135
123
  - lib/bootsnap/load_path_cache/cache.rb
136
124
  - lib/bootsnap/load_path_cache/change_observer.rb
137
- - lib/bootsnap/load_path_cache/core_ext/active_support.rb
138
125
  - lib/bootsnap/load_path_cache/core_ext/kernel_require.rb
139
126
  - lib/bootsnap/load_path_cache/core_ext/loaded_features.rb
140
127
  - lib/bootsnap/load_path_cache/loaded_features_index.rb
@@ -144,7 +131,6 @@ files:
144
131
  - lib/bootsnap/load_path_cache/store.rb
145
132
  - lib/bootsnap/setup.rb
146
133
  - lib/bootsnap/version.rb
147
- - shipit.rubygems.yml
148
134
  homepage: https://github.com/Shopify/bootsnap
149
135
  licenses:
150
136
  - MIT
@@ -152,6 +138,7 @@ metadata:
152
138
  bug_tracker_uri: https://github.com/Shopify/bootsnap/issues
153
139
  changelog_uri: https://github.com/Shopify/bootsnap/blob/master/CHANGELOG.md
154
140
  source_code_uri: https://github.com/Shopify/bootsnap
141
+ allowed_push_host: https://rubygems.org
155
142
  post_install_message:
156
143
  rdoc_options: []
157
144
  require_paths:
@@ -160,15 +147,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
160
147
  requirements:
161
148
  - - ">="
162
149
  - !ruby/object:Gem::Version
163
- version: 2.0.0
150
+ version: 2.3.0
164
151
  required_rubygems_version: !ruby/object:Gem::Requirement
165
152
  requirements:
166
153
  - - ">="
167
154
  - !ruby/object:Gem::Version
168
155
  version: '0'
169
156
  requirements: []
170
- rubyforge_project:
171
- rubygems_version: 2.7.6
157
+ rubygems_version: 3.2.20
172
158
  signing_key:
173
159
  specification_version: 4
174
160
  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
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- *.bundle
11
- *.so
12
- *.o
13
- *.a
14
- *.gem
15
- *.db
16
- mkmf.log
17
- .rubocop-*
data/.rubocop.yml DELETED
@@ -1,20 +0,0 @@
1
- inherit_from:
2
- - http://shopify.github.io/ruby-style-guide/rubocop.yml
3
-
4
- AllCops:
5
- Exclude:
6
- - 'vendor/**/*'
7
- - 'tmp/**/*'
8
- TargetRubyVersion: '2.2'
9
-
10
- # This doesn't take into account retrying from an exception
11
- Lint/HandleExceptions:
12
- Enabled: false
13
-
14
- # allow String.new to create mutable strings
15
- Style/EmptyLiteral:
16
- Enabled: false
17
-
18
- # allow the use of globals which makes sense in a CLI app like this
19
- Style/GlobalVars:
20
- Enabled: false
data/.travis.yml DELETED
@@ -1,21 +0,0 @@
1
- language: ruby
2
- sudo: false
3
-
4
- os:
5
- - linux
6
- - osx
7
-
8
- rvm:
9
- - ruby-2.4
10
- - ruby-2.5
11
- - ruby-head
12
-
13
- matrix:
14
- allow_failures:
15
- - rvm: ruby-head
16
- include:
17
- - rvm: jruby
18
- os: linux
19
- env: MINIMAL_SUPPORT=1
20
-
21
- script: bin/ci