summaryrefslogtreecommitdiff
path: root/lib/bundler/source
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bundler/source')
-rw-r--r--lib/bundler/source/git.rb8
-rw-r--r--lib/bundler/source/git/git_proxy.rb111
-rw-r--r--lib/bundler/source/path.rb6
-rw-r--r--lib/bundler/source/path/installer.rb16
4 files changed, 69 insertions, 72 deletions
diff --git a/lib/bundler/source/git.rb b/lib/bundler/source/git.rb
index 7c1533ad90..0b4d76939b 100644
--- a/lib/bundler/source/git.rb
+++ b/lib/bundler/source/git.rb
@@ -230,6 +230,10 @@ module Bundler
@allow_remote || @allow_cached
end
+ def local?
+ @local
+ end
+
private
def serialize_gemspecs_in(destination)
@@ -256,10 +260,6 @@ module Bundler
cached_revision && super
end
- def local?
- @local
- end
-
def requires_checkout?
allow_git_ops? && !local? && !cached_revision_checked_out?
end
diff --git a/lib/bundler/source/git/git_proxy.rb b/lib/bundler/source/git/git_proxy.rb
index 7612eb16c6..9a4b7fe523 100644
--- a/lib/bundler/source/git/git_proxy.rb
+++ b/lib/bundler/source/git/git_proxy.rb
@@ -18,7 +18,7 @@ module Bundler
def initialize(command)
msg = String.new
msg << "Bundler is trying to run a `git #{command}` at runtime. You probably need to run `bundle install`. However, "
- msg << "this error message could probably be more useful. Please submit a ticket at https://github.com/bundler/bundler/issues "
+ msg << "this error message could probably be more useful. Please submit a ticket at https://github.com/rubygems/bundler/issues "
msg << "with steps to reproduce as well as the following\n\nCALLER: #{caller.join("\n")}"
super msg
end
@@ -27,21 +27,21 @@ module Bundler
class GitCommandError < GitError
attr_reader :command
- def initialize(command, path = nil, extra_info = nil)
+ def initialize(command, path, destination_path, extra_info = nil)
@command = command
msg = String.new
- msg << "Git error: command `git #{command}` in directory #{SharedHelpers.pwd} has failed."
+ msg << "Git error: command `git #{command}` in directory #{destination_path} has failed."
msg << "\n#{extra_info}" if extra_info
- msg << "\nIf this error persists you could try removing the cache directory '#{path}'" if path && path.exist?
+ msg << "\nIf this error persists you could try removing the cache directory '#{path}'" if path.exist?
super msg
end
end
class MissingGitRevisionError < GitCommandError
- def initialize(command, path, ref, repo)
+ def initialize(command, path, destination_path, ref, repo)
msg = "Revision #{ref} does not exist in the repository #{repo}. Maybe you misspelled it?"
- super command, path, msg
+ super command, path, destination_path, msg
end
end
@@ -62,26 +62,18 @@ module Bundler
end
def revision
- return @revision if @revision
-
- begin
- @revision ||= find_local_revision
- rescue GitCommandError => e
- raise MissingGitRevisionError.new(e.command, path, ref, URICredentialsFilter.credential_filtered_uri(uri))
- end
-
- @revision
+ @revision ||= find_local_revision
end
def branch
- @branch ||= allowed_in_path do
- git("rev-parse --abbrev-ref HEAD").strip
+ @branch ||= allowed_with_path do
+ git("rev-parse --abbrev-ref HEAD", :dir => path).strip
end
end
def contains?(commit)
- allowed_in_path do
- result, status = git_null("branch --contains #{commit}")
+ allowed_with_path do
+ result, status = git_null("branch --contains #{commit}", :dir => path)
status.success? && result =~ /^\* (.*)$/
end
end
@@ -108,8 +100,8 @@ module Bundler
return unless extra_ref
end
- in_path do
- git_retry %(fetch --force --quiet --tags #{uri_escaped_with_configured_credentials} "refs/heads/*:refs/heads/*" #{extra_ref})
+ with_path do
+ git_retry %(fetch --force --quiet --tags #{uri_escaped_with_configured_credentials} "refs/heads/*:refs/heads/*" #{extra_ref}), :dir => path
end
end
@@ -133,58 +125,54 @@ module Bundler
end
end
# method 2
- SharedHelpers.chdir(destination) do
- git_retry %(fetch --force --quiet --tags "#{path}")
+ git_retry %(fetch --force --quiet --tags "#{path}"), :dir => destination
- begin
- git "reset --hard #{@revision}"
- rescue GitCommandError => e
- raise MissingGitRevisionError.new(e.command, path, @revision, URICredentialsFilter.credential_filtered_uri(uri))
- end
+ begin
+ git "reset --hard #{@revision}", :dir => destination
+ rescue GitCommandError => e
+ raise MissingGitRevisionError.new(e.command, path, destination, @revision, URICredentialsFilter.credential_filtered_uri(uri))
+ end
- if submodules
- git_retry "submodule update --init --recursive"
- elsif Gem::Version.create(version) >= Gem::Version.create("2.9.0")
- git_retry "submodule deinit --all --force"
- end
+ if submodules
+ git_retry "submodule update --init --recursive", :dir => destination
+ elsif Gem::Version.create(version) >= Gem::Version.create("2.9.0")
+ git_retry "submodule deinit --all --force", :dir => destination
end
end
private
- def git_null(command)
- command_with_no_credentials = URICredentialsFilter.credential_filtered_string(command, uri)
- raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
+ def git_null(command, dir: SharedHelpers.pwd)
+ check_allowed(command)
out, status = SharedHelpers.with_clean_git_env do
- capture_and_ignore_stderr("git #{command}")
+ capture_and_ignore_stderr("git #{command}", :chdir => dir.to_s)
end
[URICredentialsFilter.credential_filtered_string(out, uri), status]
end
- def git_retry(command)
+ def git_retry(command, dir: SharedHelpers.pwd)
Bundler::Retry.new("`git #{URICredentialsFilter.credential_filtered_string(command, uri)}`", GitNotAllowedError).attempts do
- git(command)
+ git(command, :dir => dir)
end
end
- def git(command, check_errors = true, error_msg = nil)
- command_with_no_credentials = URICredentialsFilter.credential_filtered_string(command, uri)
- raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
+ def git(command, dir: SharedHelpers.pwd)
+ command_with_no_credentials = check_allowed(command)
out, status = SharedHelpers.with_clean_git_env do
- capture_and_filter_stderr(uri, "git #{command}")
+ capture_and_filter_stderr(uri, "git #{command}", :chdir => dir.to_s)
end
- stdout_with_no_credentials = URICredentialsFilter.credential_filtered_string(out, uri)
- raise GitCommandError.new(command_with_no_credentials, path, error_msg) if check_errors && !status.success?
- stdout_with_no_credentials
+ raise GitCommandError.new(command_with_no_credentials, path, dir) unless status.success?
+
+ URICredentialsFilter.credential_filtered_string(out, uri)
end
def has_revision_cached?
return unless @revision
- in_path { git("cat-file -e #{@revision}") }
+ with_path { git("cat-file -e #{@revision}", :dir => path) }
true
rescue GitError
false
@@ -195,9 +183,11 @@ module Bundler
end
def find_local_revision
- allowed_in_path do
- git("rev-parse --verify #{Shellwords.shellescape(ref)}", true).strip
+ allowed_with_path do
+ git("rev-parse --verify #{Shellwords.shellescape(ref)}", :dir => path).strip
end
+ rescue GitCommandError => e
+ raise MissingGitRevisionError.new(e.command, path, path, ref, URICredentialsFilter.credential_filtered_uri(uri))
end
# Escape the URI for git commands
@@ -230,27 +220,32 @@ module Bundler
@git ? @git.allow_git_ops? : true
end
- def in_path(&blk)
+ def with_path(&blk)
checkout unless path.exist?
- _ = URICredentialsFilter # load it before we chdir
- SharedHelpers.chdir(path, &blk)
+ blk.call
end
- def allowed_in_path
- return in_path { yield } if allow?
+ def allowed_with_path
+ return with_path { yield } if allow?
raise GitError, "The git source #{uri} is not yet checked out. Please run `bundle install` before trying to start your application"
end
- def capture_and_filter_stderr(uri, cmd)
+ def check_allowed(command)
+ command_with_no_credentials = URICredentialsFilter.credential_filtered_string(command, uri)
+ raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
+ command_with_no_credentials
+ end
+
+ def capture_and_filter_stderr(uri, cmd, chdir: SharedHelpers.pwd)
require "open3"
- return_value, captured_err, status = Open3.capture3(cmd)
+ return_value, captured_err, status = Open3.capture3(cmd, :chdir => chdir)
Bundler.ui.warn URICredentialsFilter.credential_filtered_string(captured_err, uri) if uri && !captured_err.empty?
[return_value, status]
end
- def capture_and_ignore_stderr(cmd)
+ def capture_and_ignore_stderr(cmd, chdir: SharedHelpers.pwd)
require "open3"
- return_value, _, status = Open3.capture3(cmd)
+ return_value, _, status = Open3.capture3(cmd, :chdir => chdir)
[return_value, status]
end
end
diff --git a/lib/bundler/source/path.rb b/lib/bundler/source/path.rb
index f98f5155fb..e73e33d922 100644
--- a/lib/bundler/source/path.rb
+++ b/lib/bundler/source/path.rb
@@ -132,7 +132,11 @@ module Bundler
end
def expand(somepath)
- somepath.expand_path(root_path)
+ if Bundler.current_ruby.jruby? # TODO: Unify when https://github.com/rubygems/bundler/issues/7598 fixed upstream and all supported jrubies include the fix
+ somepath.expand_path(root_path).expand_path
+ else
+ somepath.expand_path(root_path)
+ end
rescue ArgumentError => e
Bundler.ui.debug(e)
raise PathError, "There was an error while trying to use the path " \
diff --git a/lib/bundler/source/path/installer.rb b/lib/bundler/source/path/installer.rb
index a0357ffa39..909e248412 100644
--- a/lib/bundler/source/path/installer.rb
+++ b/lib/bundler/source/path/installer.rb
@@ -26,18 +26,16 @@ module Bundler
end
def post_install
- SharedHelpers.chdir(@gem_dir) do
- run_hooks(:pre_install)
+ run_hooks(:pre_install)
- unless @disable_extensions
- build_extensions
- run_hooks(:post_build)
- end
+ unless @disable_extensions
+ build_extensions
+ run_hooks(:post_build)
+ end
- generate_bin unless spec.executables.nil? || spec.executables.empty?
+ generate_bin unless spec.executables.nil? || spec.executables.empty?
- run_hooks(:post_install)
- end
+ run_hooks(:post_install)
ensure
Bundler.rm_rf(@tmp_dir) if Bundler.requires_sudo?
end