diff options
author | Samuel Giddins <segiddins@segiddins.me> | 2023-08-31 14:44:58 -0500 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2023-09-21 18:30:37 +0000 |
commit | 812c8196b69b15713e7bdc9843329d9c490497a8 (patch) | |
tree | 49b7f1b3508d7b8924e78380a5793de9b8079530 | |
parent | e9ed0b3068f54f32d5116ff9d73833d96229fde9 (diff) |
[rubygems/rubygems] Remove usage of Dir.chdir that just execute a subprocess
Preferring instead to spawn the subprocess in the correct directory
https://github.com/rubygems/rubygems/commit/ad5abd6a45
-rw-r--r-- | lib/bundler/build_metadata.rb | 2 | ||||
-rw-r--r-- | lib/bundler/cli/gem.rb | 4 | ||||
-rw-r--r-- | lib/bundler/cli/open.rb | 12 | ||||
-rw-r--r-- | lib/rubygems/commands/open_command.rb | 4 | ||||
-rw-r--r-- | test/rubygems/test_gem_commands_open_command.rb | 7 |
5 files changed, 13 insertions, 16 deletions
diff --git a/lib/bundler/build_metadata.rb b/lib/bundler/build_metadata.rb index 8bffb2fae7..29fa833588 100644 --- a/lib/bundler/build_metadata.rb +++ b/lib/bundler/build_metadata.rb @@ -29,7 +29,7 @@ module Bundler # commit instance variable then we can't determine its commits SHA. git_dir = File.expand_path("../../../.git", __dir__) if File.directory?(git_dir) - return @git_commit_sha = Dir.chdir(git_dir) { `git rev-parse --short HEAD`.strip.freeze } + return @git_commit_sha = IO.popen(%w[git rev-parse --short HEAD], { :chdir => git_dir }, &:read).strip.freeze end @git_commit_sha ||= "unknown" diff --git a/lib/bundler/cli/gem.rb b/lib/bundler/cli/gem.rb index 1645283a2c..4ec61cec5d 100644 --- a/lib/bundler/cli/gem.rb +++ b/lib/bundler/cli/gem.rb @@ -233,9 +233,7 @@ module Bundler end if use_git - Dir.chdir(target) do - `git add .` - end + IO.popen(%w[git add .], { :chdir => target }, &:read) end # Open gemspec in editor diff --git a/lib/bundler/cli/open.rb b/lib/bundler/cli/open.rb index 8522ec92d6..87c1c3b1db 100644 --- a/lib/bundler/cli/open.rb +++ b/lib/bundler/cli/open.rb @@ -18,13 +18,11 @@ module Bundler Bundler.ui.info "Unable to open #{name} because it's a default gem, so the directory it would normally be installed to does not exist." else root_path = spec.full_gem_path - Dir.chdir(root_path) do - require "shellwords" - command = Shellwords.split(editor) << File.join([root_path, path].compact) - Bundler.with_original_env do - system(*command) - end || Bundler.ui.info("Could not run '#{command.join(" ")}'") - end + require "shellwords" + command = Shellwords.split(editor) << File.join([root_path, path].compact) + Bundler.with_original_env do + system(*command, { :chdir => root_path }) + end || Bundler.ui.info("Could not run '#{command.join(" ")}'") end end end diff --git a/lib/rubygems/commands/open_command.rb b/lib/rubygems/commands/open_command.rb index 5a13074a1d..f342fa6c6b 100644 --- a/lib/rubygems/commands/open_command.rb +++ b/lib/rubygems/commands/open_command.rb @@ -70,9 +70,7 @@ class Gem::Commands::OpenCommand < Gem::Command end def open_editor(path) - Dir.chdir(path) do - system(*@editor.split(/\s+/) + [path]) - end + system(*@editor.split(/\s+/) + [path], { :chdir => path }) end def spec_for(name) diff --git a/test/rubygems/test_gem_commands_open_command.rb b/test/rubygems/test_gem_commands_open_command.rb index 2519a20883..d9e518048c 100644 --- a/test/rubygems/test_gem_commands_open_command.rb +++ b/test/rubygems/test_gem_commands_open_command.rb @@ -22,20 +22,23 @@ class TestGemCommandsOpenCommand < Gem::TestCase def test_execute @cmd.options[:args] = %w[foo] - @cmd.options[:editor] = "#{ruby_with_rubygems_in_load_path} -eexit --" + @cmd.options[:editor] = (ruby_with_rubygems_in_load_path + ["-e", "puts(ARGV,Dir.pwd)", "--"]).join(" ") gem "foo", "1.0.0" spec = gem "foo", "1.0.1" assert_nothing_raised Gem::MockGemUi::TermError do - Dir.stub(:chdir, spec.full_gem_path) do + stdout, stderr = capture_subprocess_io do use_ui @ui do @cmd.execute end end + assert_equal [spec.full_gem_path, spec.full_gem_path], stdout.split("\n") + assert_equal "", stderr end assert_equal "", @ui.error + assert_equal "", @ui.output end def test_wrong_version |