lib/bundler.rb in bundler-1.17.0.pre.1 vs lib/bundler.rb in bundler-1.17.0.pre.2

- old
+ new

@@ -189,18 +189,36 @@ tmp_home_path.mkpath tmp_home_path.chmod(0o777) end tmp_home_path.join(login).tap(&:mkpath) end - rescue => e + rescue RuntimeError => e raise e.exception("#{warning}\nBundler also failed to create a temporary home directory at `#{path}':\n#{e}") end - def user_bundle_path - Pathname.new(user_home).join(".bundle") + def user_bundle_path(dir = "home") + env_var, fallback = case dir + when "home" + ["BUNDLE_USER_HOME", Pathname.new(user_home).join(".bundle")] + when "cache" + ["BUNDLE_USER_CACHE", user_bundle_path.join("cache")] + when "config" + ["BUNDLE_USER_CONFIG", user_bundle_path.join("config")] + when "plugin" + ["BUNDLE_USER_PLUGIN", user_bundle_path.join("plugin")] + else + raise BundlerError, "Unknown user path requested: #{dir}" + end + # `fallback` will already be a Pathname, but Pathname.new() is + # idempotent so it's OK + Pathname.new(ENV.fetch(env_var, fallback)) end + def user_cache + user_bundle_path("cache") + end + def home bundle_path.join("bundler") end def install_path @@ -209,14 +227,10 @@ def specs_path bundle_path.join("specifications") end - def user_cache - user_bundle_path.join("cache") - end - def root @root ||= begin SharedHelpers.root rescue GemfileNotFound bundle_dir = default_bundle_dir @@ -351,12 +365,16 @@ # bins are written to a different location on OS X bin_dir = Pathname.new(Bundler.system_bindir) bin_dir = bin_dir.parent until bin_dir.exist? # if any directory is not writable, we need sudo - files = [path, bin_dir] | Dir[path.join("build_info/*").to_s] | Dir[path.join("*").to_s] - sudo_needed = files.any? {|f| !File.writable?(f) } + files = [path, bin_dir] | Dir[bundle_path.join("build_info/*").to_s] | Dir[bundle_path.join("*").to_s] + unwritable_files = files.reject {|f| File.writable?(f) } + sudo_needed = !unwritable_files.empty? + if sudo_needed + Bundler.ui.warn "Following files may not be writable, so sudo is needed:\n #{unwritable_files.sort.map(&:to_s).join("\n ")}" + end end @requires_sudo_ran = true @requires_sudo = settings.allow_sudo? && sudo_present && sudo_needed end @@ -414,10 +432,10 @@ end end def load_marshal(data) Marshal.load(data) - rescue => e + rescue StandardError => e raise MarshalError, "#{e.class}: #{e.message}" end def load_gemspec(file, validate = false) @gemspec_cache ||= {}