bootsnap 1.2.1-java → 1.3.0.beta2-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: be40c1a5f15f301e4f098c77ea1054c993c50894
4
- data.tar.gz: 220e7faba46321071d715b79ff9e069b74257b4d
3
+ metadata.gz: c23429f6bae9a603329d2efa2aa686e91d305a02
4
+ data.tar.gz: de49aa225d4c82832cf4471692ef52661e5c7c2b
5
5
  SHA512:
6
- metadata.gz: ee8e3951733ee8a92aa557fe9fc2b64c3b20a9dc444dc6a11b880ef012b7fdf60849a93b28879384bb1c66a8e348c1490d449e86c420a665dd48d695a6760804
7
- data.tar.gz: b231ccd8783e0b8c7315ae01e073f714ea54bea98c717b3976bae3761ca65be351743c7cc94ec8395432e536a05dbb9bda668a520a330f309fd3ec3b21d81163
6
+ metadata.gz: 87b7e39d81d09380239275c22db7fd5a76bfedb5bb8e5bf1fdd2c721054cb1b705ec1bcc1edaf1b5750bb69c61af852122c8db7406df481cfda25f04d29b9421
7
+ data.tar.gz: 11cc3544fb2744ee6c4778b7a82ef79395762298165d48d3a88612579d01c314aa7fef01bff372e8df15d4a7b3837a6a6ac9dc990596acf27148e18d1e0092d9
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 1.3.0
2
+
3
+ * Handle cases where load path entries are symlinked (https://github.com/Shopify/bootsnap/pull/136)
4
+
1
5
  # 1.2.1
2
6
 
3
7
  * Fix method visibility of `Kernel#require`.
data/README.md CHANGED
@@ -10,7 +10,7 @@ to optimize and cache expensive computations. See [How Does This Work](#how-does
10
10
 
11
11
  ## Usage
12
12
 
13
- This gem works on MacOS and Linux.
13
+ This gem works on macOS and Linux.
14
14
 
15
15
  Add `bootsnap` to your `Gemfile`:
16
16
 
@@ -21,12 +21,14 @@ module Bootsnap
21
21
  CACHED_EXTENSIONS = DLEXT2 ? [DOT_RB, DLEXT, DLEXT2] : [DOT_RB, DLEXT]
22
22
 
23
23
  class << self
24
- attr_reader :load_path_cache, :autoload_paths_cache, :loaded_features_index
24
+ attr_reader :load_path_cache, :autoload_paths_cache,
25
+ :loaded_features_index, :realpath_cache
25
26
 
26
27
  def setup(cache_path:, development_mode:, active_support: true)
27
28
  store = Store.new(cache_path)
28
29
 
29
30
  @loaded_features_index = LoadedFeaturesIndex.new
31
+ @realpath_cache = RealpathCache.new
30
32
 
31
33
  @load_path_cache = Cache.new(store, $LOAD_PATH, development_mode: development_mode)
32
34
  require_relative 'load_path_cache/core_ext/kernel_require'
@@ -53,3 +55,4 @@ require_relative 'load_path_cache/cache'
53
55
  require_relative 'load_path_cache/store'
54
56
  require_relative 'load_path_cache/change_observer'
55
57
  require_relative 'load_path_cache/loaded_features_index'
58
+ require_relative 'load_path_cache/realpath_cache'
@@ -9,7 +9,7 @@ module Bootsnap
9
9
  @development_mode = development_mode
10
10
  @store = store
11
11
  @mutex = defined?(::Mutex) ? ::Mutex.new : ::Thread::Mutex.new # TODO: Remove once Ruby 2.2 support is dropped.
12
- @path_obj = path_obj
12
+ @path_obj = path_obj.map! { |f| File.exist?(f) ? File.realpath(f) : f }
13
13
  @has_relative_paths = nil
14
14
  reinitialize
15
15
  end
@@ -36,6 +36,14 @@ module Kernel
36
36
  require_with_bootsnap_lfi(path)
37
37
  end
38
38
 
39
+ alias_method :require_relative_without_bootsnap, :require_relative
40
+ def require_relative(path)
41
+ realpath = Bootsnap::LoadPathCache.realpath_cache.call(
42
+ caller_locations(1..1).first.absolute_path, path
43
+ )
44
+ require(realpath)
45
+ end
46
+
39
47
  alias_method :load_without_bootsnap, :load
40
48
  def load(path, wrap = false)
41
49
  if resolved = Bootsnap::LoadPathCache.load_path_cache.find(path)
@@ -78,6 +86,14 @@ class << Kernel
78
86
  require_with_bootsnap_lfi(path)
79
87
  end
80
88
 
89
+ alias_method :require_relative_without_bootsnap, :require_relative
90
+ def require_relative(path)
91
+ realpath = Bootsnap::LoadPathCache.realpath_cache.call(
92
+ caller_locations(1..1).first.absolute_path, path
93
+ )
94
+ require(realpath)
95
+ end
96
+
81
97
  alias_method :load_without_bootsnap, :load
82
98
  def load(path, wrap = false)
83
99
  if resolved = Bootsnap::LoadPathCache.load_path_cache.find(path)
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootsnap
4
+ module LoadPathCache
5
+ class RealpathCache
6
+ def initialize
7
+ @cache = Hash.new { |h, k| h[k] = realpath(*k) }
8
+ end
9
+
10
+ def call(*key)
11
+ @cache[key]
12
+ end
13
+
14
+ private
15
+
16
+ def realpath(caller_location, path)
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))
21
+ end
22
+
23
+ def find_file(name)
24
+ ['', *CACHED_EXTENSIONS].each do |ext|
25
+ filename = "#{name}#{ext}"
26
+ return File.realpath(filename) if File.exist?(filename)
27
+ end
28
+ name
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,3 +1,3 @@
1
1
  module Bootsnap
2
- VERSION = "1.2.1"
2
+ VERSION = "1.3.0.beta2"
3
3
  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.2.1
4
+ version: 1.3.0.beta2
5
5
  platform: java
6
6
  authors:
7
7
  - Burke Libbey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-23 00:00:00.000000000 Z
11
+ date: 2018-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -134,6 +134,7 @@ files:
134
134
  - lib/bootsnap/load_path_cache/loaded_features_index.rb
135
135
  - lib/bootsnap/load_path_cache/path.rb
136
136
  - lib/bootsnap/load_path_cache/path_scanner.rb
137
+ - lib/bootsnap/load_path_cache/realpath_cache.rb
137
138
  - lib/bootsnap/load_path_cache/store.rb
138
139
  - lib/bootsnap/setup.rb
139
140
  - lib/bootsnap/version.rb
@@ -153,9 +154,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
153
154
  version: 2.0.0
154
155
  required_rubygems_version: !ruby/object:Gem::Requirement
155
156
  requirements:
156
- - - ">="
157
+ - - ">"
157
158
  - !ruby/object:Gem::Version
158
- version: '0'
159
+ version: 1.3.1
159
160
  requirements: []
160
161
  rubyforge_project:
161
162
  rubygems_version: 2.4.8