gel 0.3.0 → 0.8.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -3
  3. data/RELEASING.md +12 -0
  4. data/exe/gel +4 -2
  5. data/gemlib/gel/stub.rb +20 -0
  6. data/lib/gel/catalog/common.rb +4 -2
  7. data/lib/gel/catalog/compact_index.rb +6 -10
  8. data/lib/gel/catalog/dependency_index.rb +10 -10
  9. data/lib/gel/catalog/legacy_index.rb +4 -6
  10. data/lib/gel/catalog/marshal_hacks.rb +2 -0
  11. data/lib/gel/catalog.rb +33 -52
  12. data/lib/gel/catalog_set.rb +100 -0
  13. data/lib/gel/command/help.rb +13 -2
  14. data/lib/gel/command/lock.rb +3 -3
  15. data/lib/gel/command/open.rb +24 -0
  16. data/lib/gel/command/shell_setup.rb +11 -8
  17. data/lib/gel/command/stub.rb +45 -2
  18. data/lib/gel/command/version.rb +7 -0
  19. data/lib/gel/command.rb +43 -6
  20. data/lib/gel/compatibility/rubygems.rb +10 -197
  21. data/lib/gel/compatibility.rb +2 -2
  22. data/lib/gel/config.rb +41 -7
  23. data/lib/gel/db.rb +93 -83
  24. data/lib/gel/direct_gem.rb +16 -4
  25. data/lib/gel/environment.rb +542 -249
  26. data/lib/gel/error.rb +156 -24
  27. data/lib/gel/gemfile_parser.rb +74 -12
  28. data/lib/gel/gemspec_parser.rb +26 -7
  29. data/lib/gel/git_catalog.rb +15 -3
  30. data/lib/gel/git_depot.rb +62 -28
  31. data/lib/gel/httpool.rb +5 -2
  32. data/lib/gel/installer.rb +61 -23
  33. data/lib/gel/lock_loader.rb +87 -112
  34. data/lib/gel/lock_parser.rb +23 -31
  35. data/lib/gel/locked_store.rb +30 -21
  36. data/lib/gel/multi_store.rb +13 -4
  37. data/lib/gel/null_solver.rb +67 -0
  38. data/lib/gel/package/abortable.rb +18 -0
  39. data/lib/gel/package/installer.rb +124 -49
  40. data/lib/gel/package.rb +21 -4
  41. data/lib/gel/path_catalog.rb +1 -1
  42. data/lib/gel/pinboard.rb +4 -2
  43. data/lib/gel/platform.rb +38 -0
  44. data/lib/gel/pub_grub/package.rb +67 -0
  45. data/lib/gel/pub_grub/preference_strategy.rb +10 -6
  46. data/lib/gel/pub_grub/solver.rb +37 -0
  47. data/lib/gel/pub_grub/source.rb +64 -92
  48. data/lib/gel/resolved_gem_set.rb +234 -0
  49. data/lib/gel/runtime.rb +3 -3
  50. data/lib/gel/set.rb +62 -0
  51. data/lib/gel/stdlib.rb +83 -0
  52. data/lib/gel/store.rb +94 -25
  53. data/lib/gel/store_catalog.rb +2 -2
  54. data/lib/gel/store_gem.rb +54 -6
  55. data/lib/gel/stub_set.rb +32 -2
  56. data/lib/gel/support/cgi_escape.rb +34 -0
  57. data/lib/gel/support/gem_platform.rb +0 -2
  58. data/lib/gel/support/sha512.rb +142 -0
  59. data/lib/gel/support/tar/tar_writer.rb +2 -2
  60. data/lib/gel/tail_file.rb +2 -1
  61. data/lib/gel/util.rb +108 -0
  62. data/lib/gel/vendor/pstore.rb +3 -0
  63. data/lib/gel/vendor/pub_grub.rb +3 -0
  64. data/lib/gel/vendor/ruby_digest.rb +3 -0
  65. data/lib/gel/vendor_catalog.rb +38 -0
  66. data/lib/gel/version.rb +1 -1
  67. data/lib/gel.rb +15 -0
  68. data/man/man1/gel-exec.1 +1 -1
  69. data/man/man1/gel-install.1 +1 -1
  70. data/man/man1/gel.1 +14 -1
  71. data/{lib/gel/compatibility → slib}/bundler/cli.rb +0 -0
  72. data/{lib/gel/compatibility → slib}/bundler/friendly_errors.rb +0 -0
  73. data/{lib/gel/compatibility/rubygems/dependency_installer.rb → slib/bundler/gem_helper.rb} +0 -0
  74. data/slib/bundler/gem_tasks.rb +0 -0
  75. data/{lib/gel/compatibility → slib}/bundler/setup.rb +0 -0
  76. data/{lib/gel/compatibility → slib}/bundler.rb +39 -3
  77. data/{lib/gel/compatibility → slib}/rubygems/command.rb +0 -0
  78. data/slib/rubygems/dependency_installer.rb +12 -0
  79. data/{lib/gel/compatibility → slib}/rubygems/gem_runner.rb +0 -0
  80. data/slib/rubygems/package.rb +6 -0
  81. data/slib/rubygems/package_task.rb +7 -0
  82. data/slib/rubygems/specification.rb +0 -0
  83. data/slib/rubygems/version.rb +0 -0
  84. data/slib/rubygems.rb +297 -0
  85. data/vendor/pstore/LICENSE.txt +22 -0
  86. data/vendor/pstore/lib/pstore.rb +488 -0
  87. data/vendor/pub_grub/LICENSE.txt +21 -0
  88. data/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  89. data/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +183 -0
  90. data/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  91. data/vendor/pub_grub/lib/pub_grub/incompatibility.rb +143 -0
  92. data/vendor/pub_grub/lib/pub_grub/package.rb +35 -0
  93. data/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  94. data/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  95. data/vendor/pub_grub/lib/pub_grub/solve_failure.rb +17 -0
  96. data/vendor/pub_grub/lib/pub_grub/static_package_source.rb +53 -0
  97. data/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  98. data/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  99. data/vendor/pub_grub/lib/pub_grub/version_constraint.rb +124 -0
  100. data/vendor/pub_grub/lib/pub_grub/version_range.rb +399 -0
  101. data/vendor/pub_grub/lib/pub_grub/version_solver.rb +247 -0
  102. data/vendor/pub_grub/lib/pub_grub/version_union.rb +174 -0
  103. data/vendor/pub_grub/lib/pub_grub.rb +31 -0
  104. data/vendor/ruby-digest/UNLICENSE +24 -0
  105. data/vendor/ruby-digest/lib/ruby_digest.rb +812 -0
  106. metadata +95 -19
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../../vendor/ruby-digest/lib/ruby_digest"
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "package"
4
+
5
+ class Gel::VendorCatalog
6
+ attr_reader :path
7
+
8
+ def initialize(path)
9
+ @path = path
10
+ @cache = {}
11
+ end
12
+
13
+ def prepare
14
+ Dir["#{@path}/*.gem"].each do |filename|
15
+ @filename = filename
16
+ Gel::Package.extract(filename, self)
17
+ @filename = nil
18
+ end
19
+ end
20
+
21
+ # Gel::Package.extract callback
22
+ def gem(spec)
23
+ @cache[spec.name] ||= {}
24
+ @cache[spec.name][Gel::Support::GemVersion.new(spec.version).to_s] = {
25
+ local_path: @filename,
26
+ dependencies: spec.runtime_dependencies.to_a.map { |n, pairs| [n, pairs.to_a.map { |pr| pr.join(" ") }] },
27
+ #ruby: spec.required_ruby_version,
28
+ }
29
+ end
30
+
31
+ def download_gem(name, version)
32
+ @cache.dig(name, version, :local_path)
33
+ end
34
+
35
+ def gem_info(name)
36
+ @cache[name]
37
+ end
38
+ end
data/lib/gel/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gel
4
- VERSION = "0.3.0"
4
+ VERSION = "0.8.0.pre1"
5
5
  end
data/lib/gel.rb CHANGED
@@ -3,6 +3,20 @@
3
3
  module Gel
4
4
  module Support
5
5
  end
6
+
7
+ module Vendor
8
+ end
9
+
10
+ def self.stub(name)
11
+ require_relative "gel/command"
12
+ Gel::Command.run(["stub", name, :stub, *ARGV])
13
+ end
14
+
15
+ # This can be used to e.g. identify $LOADED_FEATURES or source_locations
16
+ # entries that belong to the running Gel instance
17
+ def self.self_location
18
+ File.expand_path("..", __dir__)
19
+ end
6
20
  end
7
21
 
8
22
  require_relative "gel/support/gem_version"
@@ -15,6 +29,7 @@ require_relative "gel/store_gem"
15
29
  require_relative "gel/direct_gem"
16
30
  require_relative "gel/locked_store"
17
31
  require_relative "gel/multi_store"
32
+ require_relative "gel/error"
18
33
 
19
34
  require_relative "gel/gemspec_parser"
20
35
  require_relative "gel/gemfile_parser"
data/man/man1/gel-exec.1 CHANGED
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "GEL\-EXEC" "1" "March 2019" "" "Gel Manual"
4
+ .TH "GEL\-EXEC" "1" "June 2020" "" "Gel Manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBgel\-exec\fR \- run an executable with gel enabled
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "GEL\-INSTALL" "1" "March 2019" "" "Gel Manual"
4
+ .TH "GEL\-INSTALL" "1" "June 2020" "" "Gel Manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBgel\-install\fR \- install gems
data/man/man1/gel.1 CHANGED
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "GEL" "1" "March 2019" "" "Gel Manual"
4
+ .TH "GEL" "1" "January 2022" "" "Gel Manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBgel\fR \- a modern gem manager
@@ -12,6 +12,19 @@
12
12
  .SH "DESCRIPTION"
13
13
  Gel is a minimal package manager for the Ruby programming language\.
14
14
  .
15
+ .SH "ENVIRONMENT VARIABLES"
16
+ .
17
+ .IP "\(bu" 4
18
+ \fBGEL_GEMFILE\fR The path to the gemfile gel should use
19
+ .
20
+ .IP "\(bu" 4
21
+ \fBGEL_LOCKFILE\fR The path to the lockfile that gel should use
22
+ .
23
+ .IP "\(bu" 4
24
+ \fBGEL_CACHE\fR The path to the gel version information cache
25
+ .
26
+ .IP "" 0
27
+ .
15
28
  .SH "GEL COMMANDS"
16
29
  .
17
30
  .TP
File without changes
File without changes
File without changes
@@ -1,19 +1,50 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bundler
4
+ ORIGINAL_ENV = ::ENV.to_h
5
+
6
+ VERSION = "3.compat"
7
+
4
8
  def self.setup
5
9
  Gel::Environment.activate(output: $stderr)
6
10
  end
7
11
 
12
+ def self.original_env
13
+ ORIGINAL_ENV.dup
14
+ end
15
+
8
16
  def self.require(*groups)
9
17
  Gel::Environment.require_groups(*groups)
10
18
  end
11
19
 
20
+ def self.ruby_scope
21
+ ""
22
+ end
23
+
24
+ def self.default_gemfile
25
+ Kernel.require "pathname"
26
+ ::Pathname.new(Gel::Environment.find_gemfile(error: false) || "Gemfile")
27
+ end
28
+
12
29
  def self.default_lockfile
13
- Pathname.new(Gel::Environment.lockfile_name)
30
+ Kernel.require "pathname"
31
+ ::Pathname.new(Gel::Environment.lockfile_name)
14
32
  end
15
33
 
16
- module Rubygems
34
+ def self.bundle_path
35
+ base_store = Gel::Environment.store
36
+ base_store = base_store.inner if base_store.is_a?(Gel::LockedStore)
37
+
38
+ Kernel.require "pathname"
39
+ ::Pathname.new(base_store.root)
40
+ end
41
+
42
+ def self.root
43
+ Kernel.require "pathname"
44
+ ::Pathname.new(Gel::Environment.gemfile.filename).dirname
45
+ end
46
+
47
+ module RubygemsIntegration
17
48
  def self.loaded_specs(gem_name)
18
49
  Gem::Specification.new(Gel::Environment.activated_gems[gem_name])
19
50
  end
@@ -31,7 +62,7 @@ module Bundler
31
62
  end
32
63
 
33
64
  def self.rubygems
34
- Rubygems
65
+ RubygemsIntegration
35
66
  end
36
67
 
37
68
  def self.with_original_env
@@ -44,6 +75,11 @@ module Bundler
44
75
  yield
45
76
  end
46
77
 
78
+ def self.with_unbundled_env
79
+ # TODO
80
+ yield
81
+ end
82
+
47
83
  def self.settings
48
84
  if gemfile = Gel::Environment.gemfile
49
85
  { "gemfile" => gemfile.filename }
File without changes
@@ -0,0 +1,12 @@
1
+ class Gem::DependencyInstaller
2
+ def install(name, requirement = nil)
3
+ require_relative "../../lib/gel/catalog"
4
+ require_relative "../../lib/gel/work_pool"
5
+
6
+ Gel::WorkPool.new(2) do |work_pool|
7
+ catalog = Gel::Catalog.new("https://rubygems.org", work_pool: work_pool)
8
+
9
+ return Gel::Environment.install_gem([catalog], name, requirement)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ require_relative "../../lib/gel/support/tar"
2
+
3
+ module Gem::Package
4
+ TarReader = ::Gel::Support::Tar::TarReader
5
+ TarWriter = ::Gel::Support::Tar::TarWriter
6
+ end
@@ -0,0 +1,7 @@
1
+ class Gem::PackageTask
2
+ def initialize(*)
3
+ end
4
+
5
+ def method_missing(*)
6
+ end
7
+ end
File without changes
File without changes
data/slib/rubygems.rb ADDED
@@ -0,0 +1,297 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The goal here is not to be a full drop-in replacement of RubyGems'
4
+ # API.
5
+ #
6
+ # The threshold is basically "things that already-popular/established
7
+ # gems assume are there without checking".
8
+
9
+ require_relative "../lib/gel/runtime"
10
+
11
+ module Gem
12
+ Version = Gel::Support::GemVersion
13
+ Requirement = Gel::Support::GemRequirement
14
+ Platform = Gel::Support::GemPlatform
15
+
16
+ VERSION = "3.compat"
17
+
18
+ autoload :Deprecate, "rubygems/deprecate"
19
+
20
+ class Dependency
21
+ attr_reader :name
22
+ attr_reader :requirement
23
+ attr_reader :type
24
+
25
+ def initialize(name, requirement, type = :runtime)
26
+ @name = name
27
+ @requirement = requirement
28
+ @type = type
29
+ end
30
+ end
31
+
32
+ LoadError = Class.new(::LoadError)
33
+
34
+ module StubSpecification
35
+ end
36
+
37
+ class Specification
38
+ include StubSpecification
39
+
40
+ class << self
41
+ include Enumerable
42
+ end
43
+
44
+ def self.load(filename)
45
+ new(Gel::DirectGem.new(File.dirname(filename), File.basename(filename, ".gemspec")))
46
+ end
47
+
48
+ def self.find_by_name(name, *requirements)
49
+ if g = Gel::Environment.find_gem(name, *requirements)
50
+ new(g)
51
+ else
52
+ # TODO: Should probably be a Gel exception instead?
53
+ raise Gem::LoadError, "Unable to find gem #{name.inspect}" + (requirements.empty? ? "" : " (#{requirements.join(", ")})")
54
+ end
55
+ end
56
+
57
+ def self.find_by_path(path)
58
+ if g = Gel::Environment.gem_for_path(path)
59
+ new(g)
60
+ end
61
+ end
62
+
63
+ def self.stubs
64
+ to_a
65
+ end
66
+
67
+ def self.latest_specs(prerelease = false)
68
+ # In a locked environment this is fine. To work properly with an
69
+ # unlocked store, we should be more selective.
70
+ Gel::Environment.store.each.map { |g| new(g) }
71
+ end
72
+
73
+ def self.each(&block)
74
+ Gel::Environment.store.each.map { |g| new(g) }.each(&block)
75
+ end
76
+
77
+ def initialize(*args, &definition)
78
+ if definition
79
+ # Someone's trying to manually execute a gemspec definition
80
+ # block. That's not something we particularly want to support
81
+ # (nor need to, for normal use), but it's something that people
82
+ # do, so...
83
+
84
+ @store_gem = Gel::DirectGem.from_block(*args, &definition)
85
+ elsif store_gem = args.size == 1 && args.first
86
+ @store_gem = store_gem
87
+ else
88
+ raise ArgumentError, "Expected a store_gem"
89
+ end
90
+ end
91
+
92
+ def stubbed?
93
+ true
94
+ end
95
+
96
+ def name
97
+ @store_gem.name
98
+ end
99
+
100
+ def version
101
+ Gem::Version.new(@store_gem.version)
102
+ end
103
+
104
+ def dependencies
105
+ @store_gem.dependencies.map do |name, pairs|
106
+ Gem::Dependency.new(name, Gem::Requirement.new(pairs.map { |op, ver| "#{op} #{ver}" }), :runtime)
107
+ end
108
+ end
109
+ alias runtime_dependencies dependencies
110
+
111
+ def gem_dir
112
+ @store_gem.root
113
+ end
114
+ alias full_gem_path gem_dir
115
+
116
+ def require_paths
117
+ @store_gem.relative_require_paths.map(&:dup)
118
+ end
119
+
120
+ def full_require_paths
121
+ @store_gem.require_paths.map(&:dup)
122
+ end
123
+
124
+ def platform
125
+ nil
126
+ end
127
+
128
+ def files
129
+ []
130
+ end
131
+ end
132
+
133
+ def self.try_activate(file)
134
+ Gel::Environment.resolve_gem_path(file) != file
135
+ rescue LoadError
136
+ false
137
+ end
138
+
139
+ def self.ruby
140
+ RbConfig.ruby
141
+ end
142
+
143
+ def self.platforms
144
+ Gel::Support::GemPlatform.platforms
145
+ end
146
+
147
+ def self.win_platform?
148
+ false
149
+ end
150
+
151
+ def self.loaded_specs
152
+ result = {}
153
+ Gel::Environment.activated_gems.each do |name, store_gem|
154
+ result[name] = Gem::Specification.new(store_gem)
155
+ end
156
+ result
157
+ end
158
+
159
+ def self.find_files(pattern)
160
+ Gel::Environment.store.each.
161
+ flat_map(&:require_paths).
162
+ flat_map { |dir| Dir[Gel::Util.join(dir, pattern)] }
163
+ end
164
+
165
+ def self.refresh
166
+ # no-op
167
+ end
168
+
169
+ def self.use_gemdeps
170
+ # no-op: we always do
171
+ end
172
+
173
+ def self.dir
174
+ Gel::Environment.store.root
175
+ end
176
+
177
+ def self.path
178
+ Gel::Environment.store.paths
179
+ end
180
+
181
+ def self.default_dir
182
+ dir
183
+ end
184
+
185
+ def self.activate_bin_path(gem_name, bin_name, version = nil)
186
+ if gem_name == "bundler" && bin_name == "bundle"
187
+ # Extra-special case: this is the bundler binstub, we need to
188
+ # re-exec to hand over.
189
+
190
+ ENV["RUBYLIB"] = Gel::Environment.original_rubylib
191
+ exec RbConfig.ruby, "--", $0, *ARGV
192
+ end
193
+
194
+ if gem_name == "gel" && bin_name == "gel"
195
+ # Another extra-special case: gel is already activated, but it's
196
+ # being invoked via a rubygems-installed binstub. We can't
197
+ # activate gel inside gel, but we also don't need to: we know
198
+ # exactly which file they need.
199
+
200
+ return File.expand_path("../exe/gel", __dir__)
201
+ end
202
+
203
+ if g = Gel::Environment.activated_gems[gem_name]
204
+ Gel::Environment.gem g.name, version if version
205
+ elsif g = Gel::Environment.find_gem(gem_name, *version) do |gg|
206
+ gg.executables.include?(bin_name)
207
+ end
208
+
209
+ Gel::Environment.gem g.name, g.version
210
+ elsif g = Gel::Environment.find_gem(gem_name, *version)
211
+ raise "#{g.name} (#{g.version}) doesn't contain executable #{bin_name.inspect}"
212
+ elsif version && Gel::Environment.find_gem(gem_name)
213
+ raise "#{gem_name} (#{version}) not available"
214
+ else
215
+ raise "Unknown gem #{gem_name.inspect}"
216
+ end
217
+
218
+ Gel::Environment.find_executable(bin_name, g.name, g.version)
219
+ rescue => ex
220
+ # This method may be our entry-point, if we're being invoked by a
221
+ # rubygems binstub. Detect that situation, and provide nicer error
222
+ # reporting.
223
+
224
+ raise unless locations = caller_locations(2, 2)
225
+ raise unless locations.size == 1
226
+ raise unless path = locations.first.absolute_path
227
+ raise unless File.exist?(path) && File.readable?(path)
228
+ raise unless File.open(path, "rb") { |f| f.read(1024).include?("\n# This file was generated by RubyGems.\n") }
229
+
230
+ require_relative "../lib/gel/command"
231
+ Gel::Command.handle_error(ex)
232
+ end
233
+
234
+ def self.bin_path(gem_name, bin_name, version = nil)
235
+ if gem_name == "gel" && bin_name == "gel"
236
+ return File.expand_path("../exe/gel", __dir__)
237
+ elsif g = Gel::Environment.activated_gems[gem_name]
238
+ Gel::Environment.gem g.name, version if version
239
+
240
+ Gel::Environment.find_executable(bin_name, g.name, g.version)
241
+ elsif Gel::Environment.find_gem(gem_name)
242
+ raise "Gem #{gem_name.inspect} is not active"
243
+ else
244
+ raise "Unknown gem #{gem_name.inspect}"
245
+ end
246
+ end
247
+ end
248
+
249
+ def gem(*args)
250
+ Gel::Environment.gem(*args)
251
+ end
252
+ private :gem
253
+
254
+ module Kernel
255
+ alias_method :require_without_gel, :require
256
+ singleton_class.alias_method :require, :require
257
+
258
+ module_eval <<'RUBY', "<internal:#{__FILE__}>", __LINE__ + 1
259
+ module_function
260
+
261
+ if ENV["GEL_DEBUG"]
262
+ def require(path)
263
+ before = $".last
264
+ resolved = Gel::Environment.resolve_gem_path(path)
265
+ require_without_gel resolved
266
+ ensure
267
+ last_loaded = $".last
268
+ if last_loaded == before
269
+ # Nothing new got loaded
270
+ elsif path.to_s.start_with?("/")
271
+ # It was already absolute; we don't care
272
+ elsif resolved != path
273
+ # We resolved it
274
+ elsif last_loaded.start_with?(RbConfig::CONFIG["prefix"])
275
+ # stdlib -- we should probably index these one day, but for
276
+ # now, it's fine
277
+ $stderr.puts "Gel: ruby stdlib found #{path.inspect} at #{last_loaded.inspect}"
278
+ elsif Gel::Environment.store.paths.any? { |path| last_loaded.start_with?(path) }
279
+ # Inside one of our managed gems... ideally, that's never
280
+ # supposed to happen
281
+ $stderr.puts "Gel: ruby found #{path.inspect} at #{last_loaded.inspect}"
282
+ else
283
+ # Application path, presumably?
284
+ end
285
+ end
286
+ else
287
+ def require(path)
288
+ require_without_gel Gel::Environment.resolve_gem_path(path)
289
+ end
290
+ end
291
+
292
+ alias_method :require, :require
293
+ singleton_class.alias_method :require, :require
294
+
295
+ private :require
296
+ RUBY
297
+ end
@@ -0,0 +1,22 @@
1
+ Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
2
+
3
+ Redistribution and use in source and binary forms, with or without
4
+ modification, are permitted provided that the following conditions
5
+ are met:
6
+ 1. Redistributions of source code must retain the above copyright
7
+ notice, this list of conditions and the following disclaimer.
8
+ 2. Redistributions in binary form must reproduce the above copyright
9
+ notice, this list of conditions and the following disclaimer in the
10
+ documentation and/or other materials provided with the distribution.
11
+
12
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
13
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
16
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
18
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
19
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
22
+ SUCH DAMAGE.