Class: Gem::Package::TarWriter

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_backup/source/abstract.rb

Constant Summary collapse

'././@LongLink'

Instance Method Summary collapse

Instance Method Details

Raises:

  • (Gem::Package::NonSeekableIO)


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/simple_backup/source/abstract.rb', line 11

def add_long_link(name, mode)
  check_closed

  raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos=

  init_pos = @io.pos
  @io.write "\0" * 512 # placeholder for the header
  @io.write name
  size = @io.pos - init_pos - 512

  remainder = (512 - (size % 512)) % 512
  @io.write "\0" * remainder

  final_pos = @io.pos
  @io.pos = init_pos

  header = Gem::Package::TarHeader.new name: LONGLINK_NAME, mode: mode,
                                       size: size, prefix: '',
                                       typeflag: 'L'

  @io.write header
  @io.pos = final_pos

  self
end

#add_longname_file(*arguments) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/simple_backup/source/abstract.rb', line 37

def add_longname_file(*arguments)
  tries ||= 1
  if block_given?
    add_file(*arguments, &Proc.new)
  else
    add_file(*arguments)
  end
rescue Gem::Package::TooLongFileName => e
  add_long_link *arguments
  arguments.first.slice!(0, 100)

  retry if (tries -= 1) >= 0
  raise e
end