Class: FPM::Util::TarWriter
- Inherits:
-
Gem::Package::TarWriter
- Object
- Gem::Package::TarWriter
- FPM::Util::TarWriter
- Defined in:
- lib/fpm/util/tar_writer.rb
Overview
Like the ::Gem::Package::TarWriter but contains some backports and bug fixes
Instance Method Summary collapse
-
#add_symlink(name, target, mode) ⇒ Object
Backport Symlink Support to TarWriter github.com/rubygems/rubygems/blob/4a778c9c2489745e37bcc2d0a8f12c601a9c517f/lib/rubygems/package/tar_writer.rb#L239-L253.
- #split_name(name) ⇒ Object
Instance Method Details
#add_symlink(name, target, mode) ⇒ Object
Backport Symlink Support to TarWriter github.com/rubygems/rubygems/blob/4a778c9c2489745e37bcc2d0a8f12c601a9c517f/lib/rubygems/package/tar_writer.rb#L239-L253
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/fpm/util/tar_writer.rb', line 66 def add_symlink(name, target, mode) check_closed name, prefix = split_name name header = ::Gem::Package::TarHeader.new(:name => name, :mode => mode, :size => 0, :typeflag => "2", :linkname => target, :prefix => prefix, :mtime => Time.now).to_s @io.write header self end |
#split_name(name) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/fpm/util/tar_writer.rb', line 35 def split_name(name) if name.bytesize > 256 then raise ::Gem::Package::TooLongFileName.new("File \"#{name}\" has a too long path (should be 256 or less)") end prefix = '' if name.bytesize > 100 then parts = name.split('/', -1) # parts are never empty here name = parts.pop # initially empty for names with a trailing slash ("foo/.../bar/") prefix = parts.join('/') # if empty, then it's impossible to split (parts is empty too) while !parts.empty? && (prefix.bytesize > 155 || name.empty?) name = parts.pop + '/' + name prefix = parts.join('/') end if name.bytesize > 100 or prefix.empty? then raise ::Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long name (should be 100 or less)") end if prefix.bytesize > 155 then raise ::Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long base path (should be 155 or less)") end end return name, prefix end |