[rubygems/rubygems] Delete partial file and re-raise on Errno::ENOSPC.
Add test for not leaving empty files if ENOSPC is raised during 'gem install' https://github.com/rubygems/rubygems/commit/8e0e20f079
This commit is contained in:
parent
5fafff15c6
commit
82b86b4c97
@ -774,6 +774,10 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|||||||
open_file(path, "wb") do |io|
|
open_file(path, "wb") do |io|
|
||||||
io.write data
|
io.write data
|
||||||
end
|
end
|
||||||
|
rescue Errno::ENOSPC
|
||||||
|
# If we ran out of space but the file exists, it's *guaranteed* to be corrupted.
|
||||||
|
File.delete(path) if File.exist?(path)
|
||||||
|
raise
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -2222,6 +2222,37 @@ gem 'other', version
|
|||||||
assert_equal @spec, eval(File.read(@spec.spec_file))
|
assert_equal @spec, eval(File.read(@spec.spec_file))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_leaves_no_empty_cached_spec_when_no_more_disk_space
|
||||||
|
@spec = setup_base_spec
|
||||||
|
FileUtils.rm @spec.spec_file
|
||||||
|
assert_path_not_exist @spec.spec_file
|
||||||
|
|
||||||
|
@spec.files = %w[a.rb b.rb c.rb]
|
||||||
|
|
||||||
|
installer = Gem::Installer.for_spec @spec
|
||||||
|
installer.gem_home = @gemhome
|
||||||
|
|
||||||
|
File.class_eval do
|
||||||
|
alias_method :original_write, :write
|
||||||
|
|
||||||
|
def write(data)
|
||||||
|
raise Errno::ENOSPC
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_raise Errno::ENOSPC do
|
||||||
|
installer.write_spec
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_path_not_exist @spec.spec_file
|
||||||
|
ensure
|
||||||
|
File.class_eval do
|
||||||
|
remove_method :write
|
||||||
|
alias_method :write, :original_write # rubocop:disable Lint/DuplicateMethods
|
||||||
|
remove_method :original_write
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_dir
|
def test_dir
|
||||||
installer = setup_base_installer
|
installer = setup_base_installer
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user