Class: Drydock::TarWriter

Inherits:
Gem::Package::TarWriter
  • Object
show all
Defined in:
lib/drydock/tar_writer.rb

Instance Method Summary collapse

Instance Method Details

#add_entry(name, mode: 0644, mtime: Time.now, uid: 0, gid: 0) {|RestrictedStream.new(@io)| ... } ⇒ Object

Yields:

  • (RestrictedStream.new(@io))

Raises:

  • (Gem::Package::NonSeekableIO)


5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/drydock/tar_writer.rb', line 5

def add_entry(name, mode: 0644, mtime: Time.now, uid: 0, gid: 0)
  check_closed

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

  name, prefix = split_name(name)

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

  yield RestrictedStream.new(@io) if block_given?

  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: name, mode: mode,
    size: size, prefix: prefix, mtime: mtime
  )
  @io.write header
  @io.pos = final_pos

  self
end