summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Lerche <carllerche@mac.com>2010-07-06 17:27:50 -0700
committerCarl Lerche <carllerche@mac.com>2010-07-06 17:29:15 -0700
commitc0e5a90023651d2b97d42e0c64c13f5aff27bc1e (patch)
treead8fbe021cc6ab53565504aba8a3ce0890dc1641
parentd0db5869bb3489eda49fbbe901c0455e43669fcf (diff)
downloadbundler-c0e5a90023651d2b97d42e0c64c13f5aff27bc1e.tar.gz
Don't add duplicate gemspecs to the lock file
-rw-r--r--lib/bundler/spec_set.rb9
-rw-r--r--spec/lock/flex_spec.rb30
2 files changed, 36 insertions, 3 deletions
diff --git a/lib/bundler/spec_set.rb b/lib/bundler/spec_set.rb
index 36faf1a6d5..263f56fb4b 100644
--- a/lib/bundler/spec_set.rb
+++ b/lib/bundler/spec_set.rb
@@ -92,7 +92,12 @@ module Bundler
end
def merge(set)
- SpecSet.new(sorted + set.to_a)
+ arr = sorted.dup
+ set.each do |s|
+ next if arr.any? { |s2| s2.name == s.name && s2.version == s.version && s2.platform == s.platform }
+ arr << s
+ end
+ SpecSet.new(arr)
end
private
@@ -126,4 +131,4 @@ module Bundler
end
end
end
-end \ No newline at end of file
+end
diff --git a/spec/lock/flex_spec.rb b/spec/lock/flex_spec.rb
index 84a900f78a..dfece0cd89 100644
--- a/spec/lock/flex_spec.rb
+++ b/spec/lock/flex_spec.rb
@@ -465,4 +465,32 @@ describe "the lockfile format" do
platform_specific
G
end
-end \ No newline at end of file
+
+ it "does not add duplicate gems" do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack"
+ G
+
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack"
+ gem "activesupport"
+ G
+
+ lockfile_should_be <<-G
+ GEM
+ remote: file:#{gem_repo1}/
+ specs:
+ activesupport (2.3.5)
+ rack (1.0.0)
+
+ PLATFORMS
+ ruby
+
+ DEPENDENCIES
+ activesupport
+ rack
+ G
+ end
+end