diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2010-02-05 19:21:58 -0800 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2010-02-05 19:53:09 -0800 |
commit | d19c57794774e9978541a10c5e9dfa177fe6c683 (patch) | |
tree | 767c33dd81b7365d3b9e9d4880f2c0ed0d44ca47 | |
parent | e400f1d6116e43c47c89490a9a23296c54f18f84 (diff) | |
download | bundler-d19c57794774e9978541a10c5e9dfa177fe6c683.tar.gz |
Locked environment checks for Gemfile changes
-rw-r--r-- | lib/bundler/runtime.rb | 8 | ||||
-rw-r--r-- | lib/bundler/templates/environment.erb | 13 |
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/bundler/runtime.rb b/lib/bundler/runtime.rb index a39c81703a..80fe144c6d 100644 --- a/lib/bundler/runtime.rb +++ b/lib/bundler/runtime.rb @@ -1,4 +1,4 @@ -require "digest/md5" +require "digest/sha1" module Bundler class Runtime < Environment @@ -184,7 +184,7 @@ module Bundler def details details = {} - details["hash"] = Digest::SHA1.hexdigest(File.read("#{root}/Gemfile")) + details["hash"] = gemfile_fingerprint details["sources"] = sources.map { |s| { s.class.name.split("::").last => s.options} } details["specs"] = specs.map do |s| @@ -197,6 +197,10 @@ module Bundler details end + def gemfile_fingerprint + Digest::SHA1.hexdigest(File.read("#{root}/Gemfile")) + end + def autorequires_for_groups(*groups) autorequires = Hash.new { |h,k| h[k] = [] } @definition.dependencies.each do |dep| diff --git a/lib/bundler/templates/environment.erb b/lib/bundler/templates/environment.erb index 7fa95c965c..a3d555758d 100644 --- a/lib/bundler/templates/environment.erb +++ b/lib/bundler/templates/environment.erb @@ -1,16 +1,27 @@ +require 'digest/sha1' + # DO NOT MODIFY THIS FILE module Bundler + FINGERPRINT = <%= gemfile_fingerprint.inspect %> LOAD_PATHS = <%= load_paths.inspect %> AUTOREQUIRES = <%= autorequires_for_groups.inspect %> + def self.match_fingerprint + print = Digest::SHA1.hexdigest(File.read(File.expand_path('../../Gemfile', __FILE__))) + unless print == FINGERPRINT + abort 'Gemfile changed since you last locked. Please `bundle lock` to relock.' + end + end + def self.setup(*groups) + match_fingerprint LOAD_PATHS.each { |path| $LOAD_PATH.unshift path } end def self.require(*groups) groups = [:default] if groups.empty? groups.each do |group| - AUTOREQUIRES[group].each { |file| Kernel.require file } + (AUTOREQUIRES[group] || []).each { |file| Kernel.require file } end end |