Class: Bigrig::Tar

Inherits:
Object
  • Object
show all
Defined in:
lib/bigrig/tar.rb

Class Method Summary collapse

Class Method Details

.add_file(tar, prefixed_file_name, unprefixed_file_name) ⇒ Object



25
26
27
28
29
30
31
32
33
34
# File 'lib/bigrig/tar.rb', line 25

def add_file(tar, prefixed_file_name, unprefixed_file_name)
  stat = File.stat(prefixed_file_name)

  stat.file? || return
  tar.add_file_simple(
    unprefixed_file_name, stat.mode, stat.size
  ) do |tar_file|
    IO.copy_stream(File.open(prefixed_file_name, 'rb'), tar_file)
  end
end

.create_dir_tar(directory) ⇒ Object



4
5
6
7
8
9
10
11
# File 'lib/bigrig/tar.rb', line 4

def create_dir_tar(directory)
  tempfile = create_temp_file
  directory += '/' unless directory.end_with?('/')

  create_relative_dir_tar(directory, tempfile)

  File.new(tempfile.path, 'r')
end

.create_relative_dir_tar(directory, output) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/bigrig/tar.rb', line 13

def create_relative_dir_tar(directory, output)
  ignore_matchers = read_docker_ignore(directory).map { |x| GoMatcher.new x }

  Gem::Package::TarWriter.new(output) do |tar|
    Find.find(directory) do |prefixed_file_name|
      unprefixed_file_name = prefixed_file_name[directory.length..-1]
      ignore_matchers.detect { |x| x.matches? unprefixed_file_name } && next
      add_file tar, prefixed_file_name, unprefixed_file_name
    end
  end
end

.create_temp_fileObject



36
37
38
39
# File 'lib/bigrig/tar.rb', line 36

def create_temp_file
  tempfile_name = Dir::Tmpname.create('out') {}
  File.open(tempfile_name, 'wb+')
end

.read_docker_ignore(directory) ⇒ Object



41
42
43
44
45
# File 'lib/bigrig/tar.rb', line 41

def read_docker_ignore(directory)
  File.read(File.join directory, '.dockerignore').split "\n"
rescue Errno::ENOENT
  []
end