summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Lerche <carllerche@mac.com>2009-07-30 10:57:59 -0700
committerCarl Lerche <carllerche@mac.com>2009-07-30 10:59:34 -0700
commit76b821f8f1c8ebc3f3693c718a9735a109813a7b (patch)
treeeb339964fd91948acd9b50b3d65c004dfda7939a
parente9961cf5a9b7339a281cda717f8c5fe760e2796b (diff)
downloadbundler-76b821f8f1c8ebc3f3693c718a9735a109813a7b.tar.gz
Fix the bundler to work correctly with prerelease gems
-rw-r--r--lib/bundler/repository.rb3
-rw-r--r--lib/bundler/resolver.rb8
-rw-r--r--spec/bundler/installer_spec.rb11
-rw-r--r--spec/spec_helper.rb11
4 files changed, 26 insertions, 7 deletions
diff --git a/lib/bundler/repository.rb b/lib/bundler/repository.rb
index 7880342cb6..5c554edc9c 100644
--- a/lib/bundler/repository.rb
+++ b/lib/bundler/repository.rb
@@ -33,6 +33,7 @@ module Bundler
def install_cached_gem(name, version, options = {})
cached_gem = cache_path.join("#{name}-#{version}.gem")
+ # TODO: Add a warning if cached_gem is not a file
if cached_gem.file?
Bundler.logger.info "Installing #{name}-#{version}.gem"
installer = Gem::Installer.new(cached_gem.to_s, options.merge(
@@ -58,7 +59,7 @@ module Bundler
def cached_gems
cache_files.map do |f|
full_name = File.basename(f).gsub(/\.gem$/, '')
- full_name.split(/-(?=[\d.]+$)/)
+ full_name.split(/-(?=[^-]+$)/)
end
end
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb
index 2a98f34dae..0966a877f6 100644
--- a/lib/bundler/resolver.rb
+++ b/lib/bundler/resolver.rb
@@ -82,7 +82,13 @@ module Bundler
# this gem. This is so that if no versions work, we can figure out the best
# place to backtrack to.
conflicts = Set.new
- @index.search(current).reverse_each do |spec|
+
+ # Fetch all gem versions matching the requirement
+ #
+ # TODO: Warn / error when no matching versions are found.
+ matching_versions = @index.search(current)
+
+ matching_versions.reverse_each do |spec|
conflict = resolve_requirement(spec, current, reqs.dup, activated.dup)
conflicts << conflict if conflict
end
diff --git a/spec/bundler/installer_spec.rb b/spec/bundler/installer_spec.rb
index e416ada066..09a19fce3b 100644
--- a/spec/bundler/installer_spec.rb
+++ b/spec/bundler/installer_spec.rb
@@ -106,6 +106,17 @@ describe "Installing gems" do
end
end
+ it "works with prerelease gems" do
+ m = build_manifest <<-Gemfile
+ sources.clear
+ source "file://#{gem_repo1}"
+ gem "webrat", "0.4.4.racktest"
+ Gemfile
+ m.install
+ tmp_file("vendor", "gems").should have_cached_gem("webrat-0.4.4.racktest")
+ tmp_file("vendor", "gems").should have_installed_gem("webrat-0.4.4.racktest")
+ end
+
it "outputs a logger message for each gem that is installed" do
setup
@manifest.install
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index a4cd2df389..a7678c78a8 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,10 +1,11 @@
-$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
-$:.push File.join(File.dirname(__FILE__))
+$:.unshift File.expand_path(File.join(File.dirname(__FILE__)))
+$:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
+require "rubygems"
require "bundler"
-require "builders"
+
+require "spec"
require "matchers"
-require "pathname"
-require "pp"
+require "builders"
require "rbconfig"
class Pathname