* gnu/packages/ruby.scm (ruby): Update to 2.3.1. [origin] Add symlink patch. * gnu/packages/patches/ruby-symlinkfix.patch: New file. * gnu/local.mk (dist_patch_DATA): Add patch.
		
			
				
	
	
		
			53 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| Fix symlinks to '..' to fix rubygems improperly expanding symlinked
 | |
| paths. Without this fix, some gems fail to install. This patch is applied in
 | |
| rubygems 2.5.2, but ruby version 2.3.1 bundles an older version of rubygems
 | |
| (2.5.1).
 | |
| 
 | |
| --- a/lib/rubygems/package.rb
 | |
| +++ b/lib/rubygems/package.rb
 | |
| @@ -383,7 +383,7 @@ def extract_tar_gz io, destination_dir, pattern = "*" # :nodoc:
 | |
|            FileUtils.chmod entry.header.mode, destination
 | |
|          end if entry.file?
 | |
| 
 | |
| -        File.symlink(install_location(entry.header.linkname, destination_dir), destination) if entry.symlink?
 | |
| +        File.symlink(entry.header.linkname, destination) if entry.symlink?
 | |
| 
 | |
|          verbose destination
 | |
|        end
 | |
| diff --git a/test/rubygems/test_gem_package.rb b/test/rubygems/test_gem_package.rb
 | |
| index 7848bc2..f287bd3 100644
 | |
| --- a/test/rubygems/test_gem_package.rb
 | |
| +++ b/test/rubygems/test_gem_package.rb
 | |
| @@ -428,19 +428,25 @@ def test_extract_tar_gz_absolute
 | |
|                   "#{@destination} is not allowed", e.message)
 | |
|    end
 | |
| 
 | |
| -  def test_extract_tar_gz_symlink_absolute
 | |
| +  def test_extract_tar_gz_symlink_relative_path
 | |
| +    skip 'symlink not supported' if Gem.win_platform?
 | |
| +
 | |
|      package = Gem::Package.new @gem
 | |
| 
 | |
|      tgz_io = util_tar_gz do |tar|
 | |
| -      tar.add_symlink 'code.rb', '/absolute.rb', 0644
 | |
| +      tar.add_file    'relative.rb', 0644 do |io| io.write 'hi' end
 | |
| +      tar.mkdir       'lib',         0755
 | |
| +      tar.add_symlink 'lib/foo.rb', '../relative.rb', 0644
 | |
|      end
 | |
| 
 | |
| -    e = assert_raises Gem::Package::PathError do
 | |
| -      package.extract_tar_gz tgz_io, @destination
 | |
| -    end
 | |
| +    package.extract_tar_gz tgz_io, @destination
 | |
| 
 | |
| -    assert_equal("installing into parent path /absolute.rb of " +
 | |
| -                 "#{@destination} is not allowed", e.message)
 | |
| +    extracted = File.join @destination, 'lib/foo.rb'
 | |
| +    assert_path_exists extracted
 | |
| +    assert_equal '../relative.rb',
 | |
| +                 File.readlink(extracted)
 | |
| +    assert_equal 'hi',
 | |
| +                 File.read(extracted)
 | |
|    end
 | |
| 
 | |
|    def test_extract_tar_gz_directory
 |