summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Giddins <segiddins@segiddins.me>2017-02-10 09:57:59 -0800
committerSamuel Giddins <segiddins@segiddins.me>2017-02-10 09:57:59 -0800
commit8cf7d8c488cc24334a0022cfc9b89fe95659ec52 (patch)
tree3341abfacaddfb5992904d7b0d026c604494c8f0
parentef559704bb4a2b9163a5be8616634e3aea830a16 (diff)
downloadbundler-seg-read-only-fs-no-global-settings.tar.gz
[Settings] Allow not reading the global config file when there is no $HOME and $TMPDIR is not writableseg-read-only-fs-no-global-settings
-rw-r--r--lib/bundler.rb2
-rw-r--r--lib/bundler/settings.rb6
-rw-r--r--spec/bundler/settings_spec.rb13
3 files changed, 19 insertions, 2 deletions
diff --git a/lib/bundler.rb b/lib/bundler.rb
index c98dece747..914bdb3762 100644
--- a/lib/bundler.rb
+++ b/lib/bundler.rb
@@ -176,7 +176,7 @@ module Bundler
tmp_home_path.join(login).tap(&:mkpath)
end
rescue => e
- raise "#{warning}\nBundler also failed to create a temporary home directory at `#{path}':\n#{e}"
+ raise e.exception("#{warning}\nBundler also failed to create a temporary home directory at `#{path}':\n#{e}")
end
def user_bundle_path
diff --git a/lib/bundler/settings.rb b/lib/bundler/settings.rb
index e98940721e..7339f721ad 100644
--- a/lib/bundler/settings.rb
+++ b/lib/bundler/settings.rb
@@ -285,7 +285,11 @@ module Bundler
if ENV["BUNDLE_CONFIG"] && !ENV["BUNDLE_CONFIG"].empty?
Pathname.new(ENV["BUNDLE_CONFIG"])
else
- Bundler.user_bundle_path.join("config")
+ begin
+ Bundler.user_bundle_path.join("config")
+ rescue PermissionError, GenericSystemCallError
+ nil
+ end
end
end
diff --git a/spec/bundler/settings_spec.rb b/spec/bundler/settings_spec.rb
index c67ae81bac..020897882c 100644
--- a/spec/bundler/settings_spec.rb
+++ b/spec/bundler/settings_spec.rb
@@ -62,6 +62,19 @@ that would suck --ehhh=oh geez it looks like i might have broken bundler somehow
end
end
+ describe "#global_config_file" do
+ context "when $HOME is not accessible" do
+ context "when $TMPDIR is not writable" do
+ it "does not raise" do
+ expect(Bundler.rubygems).to receive(:user_home).twice.and_return(nil)
+ expect(FileUtils).to receive(:mkpath).twice.with(File.join(Dir.tmpdir, "bundler", "home")).and_raise(Errno::EROFS, "Read-only file system @ dir_s_mkdir - /tmp/bundler")
+
+ expect(subject.send(:global_config_file)).to be_nil
+ end
+ end
+ end
+ end
+
describe "#[]" do
context "when the local config file is not found" do
subject(:settings) { described_class.new }