aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-01 00:42:36 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-01 00:42:36 +0000
commit5db8f999431b22b31c4feecbabb498047bc3e6d2 (patch)
tree995b3e8242aa2b0d03a153c664c79e331f6dd387
parent18a3774438469b6da3f44635e38c8b00f36c4cd7 (diff)
downloadruby-5db8f999431b22b31c4feecbabb498047bc3e6d2.tar.gz
* lib/rubygems.rb: Search for gem deps file up the directory tree.
* test/rubygems/test_gem.rb: Test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38097 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--lib/rubygems.rb23
-rw-r--r--test/rubygems/test_gem.rb35
3 files changed, 61 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index e1fef523aa..b702f8e399 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat Dec 1 09:42:13 2012 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems.rb: Search for gem deps file up the directory tree.
+ * test/rubygems/test_gem.rb: Test for above.
+
Sat Dec 1 09:33:32 2012 Eric Hodel <drbrain@segment7.net>
* test/runner.rb: Set GEM_HOME, GEM_PATH and GEM_SKIP to empty set.
diff --git a/lib/rubygems.rb b/lib/rubygems.rb
index 89f718da24..914204858c 100644
--- a/lib/rubygems.rb
+++ b/lib/rubygems.rb
@@ -187,9 +187,28 @@ module Gem
path = path.dup.untaint
if path == "-"
- path = GEM_DEP_FILES.find { |f| File.exists?(f) }
+ here = Dir.pwd
+ start = here
- return unless path
+ begin
+ while true
+ path = GEM_DEP_FILES.find { |f| File.exists?(f) }
+
+ if path
+ path = File.join here, path
+ break
+ end
+
+ Dir.chdir ".."
+
+ # If we're at a toplevel, stop.
+ return if Dir.pwd == here
+
+ here = Dir.pwd
+ end
+ ensure
+ Dir.chdir start
+ end
end
return unless File.exists? path
diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb
index bbc18d42f0..20e411a7e4 100644
--- a/test/rubygems/test_gem.rb
+++ b/test/rubygems/test_gem.rb
@@ -1402,6 +1402,41 @@ class TestGem < Gem::TestCase
assert_equal '["a-1", "b-1", "c-1"]', out.strip
end
+ def test_looks_for_gemdeps_files_automatically_on_start_in_parent_dir
+ util_clear_gems
+
+ a = new_spec "a", "1", nil, "lib/a.rb"
+ b = new_spec "b", "1", nil, "lib/b.rb"
+ c = new_spec "c", "1", nil, "lib/c.rb"
+
+ install_specs a, b, c
+
+ path = File.join @tempdir, "gem.deps.rb"
+
+ File.open path, "w" do |f|
+ f.puts "gem 'a'"
+ f.puts "gem 'b'"
+ f.puts "gem 'c'"
+ end
+
+ path = File.join(@tempdir, "gd-tmp")
+ install_gem a, :install_dir => path
+ install_gem b, :install_dir => path
+ install_gem c, :install_dir => path
+
+ ENV['GEM_PATH'] = path
+ ENV['RUBYGEMS_GEMDEPS'] = "-"
+
+ Dir.mkdir "sub1"
+ out = Dir.chdir "sub1" do
+ `#{Gem.ruby.untaint} -I #{LIB_PATH.untaint} -rubygems -e "p Gem.loaded_specs.values.map(&:full_name).sort"`
+ end
+
+ Dir.rmdir "sub1"
+
+ assert_equal '["a-1", "b-1", "c-1"]', out.strip
+ end
+
def with_plugin(path)
test_plugin_path = File.expand_path("test/rubygems/plugin/#{path}",
@@project_dir)