diff options
author | Carl Lerche <carllerche@mac.com> | 2009-07-30 10:57:59 -0700 |
---|---|---|
committer | Carl Lerche <carllerche@mac.com> | 2009-07-30 10:59:34 -0700 |
commit | 76b821f8f1c8ebc3f3693c718a9735a109813a7b (patch) | |
tree | eb339964fd91948acd9b50b3d65c004dfda7939a | |
parent | e9961cf5a9b7339a281cda717f8c5fe760e2796b (diff) | |
download | bundler-76b821f8f1c8ebc3f3693c718a9735a109813a7b.tar.gz |
Fix the bundler to work correctly with prerelease gems
-rw-r--r-- | lib/bundler/repository.rb | 3 | ||||
-rw-r--r-- | lib/bundler/resolver.rb | 8 | ||||
-rw-r--r-- | spec/bundler/installer_spec.rb | 11 | ||||
-rw-r--r-- | spec/spec_helper.rb | 11 |
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 |