lib/bundler/definition.rb in bundler-1.0.0.beta.9 vs lib/bundler/definition.rb in bundler-1.0.0.beta.10
- old
+ new
@@ -1,9 +1,11 @@
require "digest/sha1"
module Bundler
class Definition
+ include GemHelpers
+
attr_reader :dependencies, :platforms, :sources
def self.build(gemfile, lockfile, unlock)
unlock ||= {}
gemfile = Pathname.new(gemfile).expand_path
@@ -32,17 +34,27 @@
def initialize(lockfile, dependencies, sources, unlock)
@dependencies, @sources, @unlock = dependencies, sources, unlock
@remote = false
@specs = nil
+ @lockfile_contents = ""
- if lockfile && File.exists?(lockfile) && unlock != true
- locked = LockfileParser.new(File.read(lockfile))
+ if lockfile && File.exists?(lockfile)
+ @lockfile_contents = File.read(lockfile)
+ locked = LockfileParser.new(@lockfile_contents)
@platforms = locked.platforms
- @locked_deps = locked.dependencies
- @last_resolve = SpecSet.new(locked.specs)
- @locked_sources = locked.sources
+
+ if unlock != true
+ @locked_deps = locked.dependencies
+ @last_resolve = SpecSet.new(locked.specs)
+ @locked_sources = locked.sources
+ else
+ @unlock = {}
+ @locked_deps = []
+ @last_resolve = SpecSet.new([])
+ @locked_sources = []
+ end
else
@unlock = {}
@platforms = []
@locked_deps = []
@last_resolve = SpecSet.new([])
@@ -50,11 +62,11 @@
end
@unlock[:gems] ||= []
@unlock[:sources] ||= []
- current_platform = Gem.platforms.map { |p| p.to_generic }.compact.last
+ current_platform = Gem.platforms.map { |p| generic(p) }.compact.last
@platforms |= [current_platform]
converge
end
@@ -139,10 +151,20 @@
def groups
dependencies.map { |d| d.groups }.flatten.uniq
end
+ def lock(file)
+ contents = to_lock
+
+ return if @lockfile_contents == contents
+
+ File.open(file, 'w') do |f|
+ f.puts contents
+ end
+ end
+
def to_lock
out = ""
sorted_sources.each do |source|
# Add the source header
@@ -265,10 +287,10 @@
def expand_dependencies(dependencies, remote = false)
deps = []
dependencies.each do |dep|
dep.gem_platforms(@platforms).each do |p|
- deps << DepProxy.new(dep, p) if remote || p == Gem::Platform.local.to_generic
+ deps << DepProxy.new(dep, p) if remote || p == generic(Gem::Platform.local)
end
end
deps
end