summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2010-02-05 19:21:58 -0800
committerJeremy Kemper <jeremy@bitsweat.net>2010-02-05 19:53:09 -0800
commitd19c57794774e9978541a10c5e9dfa177fe6c683 (patch)
tree767c33dd81b7365d3b9e9d4880f2c0ed0d44ca47
parente400f1d6116e43c47c89490a9a23296c54f18f84 (diff)
downloadbundler-d19c57794774e9978541a10c5e9dfa177fe6c683.tar.gz
Locked environment checks for Gemfile changes
-rw-r--r--lib/bundler/runtime.rb8
-rw-r--r--lib/bundler/templates/environment.erb13
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