summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColby Swandale <hello@colby.fyi>2018-05-20 17:41:18 +1000
committerColby Swandale <hello@colby.fyi>2018-06-06 21:15:52 +1000
commit3f64291ec5b8d848f3fab18a26fc0b501d9a62e0 (patch)
treeb1dbe2b1bae8a838799cb09a17e3924ff623d5b7
parent0c5d3b8c1f391aa5175321675ecd91ee6a1f231b (diff)
downloadbundler-3f64291ec5b8d848f3fab18a26fc0b501d9a62e0.tar.gz
add option to Bundler#mkdir_p to force Bundler to not use sudo
-rw-r--r--lib/bundler.rb4
-rw-r--r--spec/bundler/bundler_spec.rb28
2 files changed, 30 insertions, 2 deletions
diff --git a/lib/bundler.rb b/lib/bundler.rb
index 9944ebd051..3239e83885 100644
--- a/lib/bundler.rb
+++ b/lib/bundler.rb
@@ -373,8 +373,8 @@ EOF
@requires_sudo = settings.allow_sudo? && sudo_present && sudo_needed
end
- def mkdir_p(path)
- if requires_sudo?
+ def mkdir_p(path, options = {})
+ if requires_sudo? && !options[:no_sudo]
sudo "mkdir -p '#{path}'" unless File.exist?(path)
else
SharedHelpers.filesystem_access(path, :write) do |p|
diff --git a/spec/bundler/bundler_spec.rb b/spec/bundler/bundler_spec.rb
index 131146119e..ecff1b0d28 100644
--- a/spec/bundler/bundler_spec.rb
+++ b/spec/bundler/bundler_spec.rb
@@ -190,6 +190,34 @@ EOF
end
end
+ describe "#mkdir_p" do
+ it "creates a folder at the given path" do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack"
+ G
+
+ Bundler.mkdir_p(bundled_app.join("foo", "bar"))
+ expect(bundled_app.join("foo", "bar")).to exist
+ end
+
+ context "when mkdir_p requires sudo" do
+ it "creates a new folder using sudo" do
+ expect(Bundler).to receive(:requires_sudo?).and_return(true)
+ expect(Bundler).to receive(:sudo).and_return true
+ Bundler.mkdir_p(bundled_app.join("foo"))
+ end
+ end
+
+ context "with :no_sudo option" do
+ it "forces mkdir_p to not use sudo" do
+ expect(Bundler).to receive(:requires_sudo?).and_return(true)
+ expect(Bundler).to_not receive(:sudo)
+ Bundler.mkdir_p(bundled_app.join("foo"), :no_sudo => true)
+ end
+ end
+ end
+
describe "#user_home" do
context "home directory is set" do
it "should return the user home" do