class Mamiya::Package

Constants

PATH_SUFFIXES

Attributes

meta[W]
path[R]

Public Class Methods

new(path) click to toggle source
# File lib/mamiya/package.rb, line 14
def initialize(path)
  @path_without_ext = Pathname.new(path.sub(PATH_SUFFIXES, ''))
  @meta_loaded_from_file = false
  @loaded_meta = nil
  meta # load
end

Public Instance Methods

application() click to toggle source
# File lib/mamiya/package.rb, line 48
def application
  meta['application'] || meta[:application]
end
build!(build_dir, exclude_from_package: [], dereference_symlinks: false, package_under: nil, logger: Mamiya::Logger.new) click to toggle source
# File lib/mamiya/package.rb, line 68
def build!(build_dir, exclude_from_package: [], dereference_symlinks: false, package_under: nil, logger: Mamiya::Logger.new)
  logger = logger['Package']

  exclude_from_package.push('.svn', '.git').uniq!

  build_dir = Pathname.new(build_dir)
  build_dir += package_under if package_under
  meta_in_build = build_dir.join('.mamiya.meta.json')

  meta['name'] = self.name
  File.write meta_in_build, self.meta.to_json

  Mamiya.chdir(build_dir) do
    excludes = exclude_from_package.flat_map { |exclude| ['--exclude', exclude] }
    dereference = dereference_symlinks ? ['-h'] : []

    cmd = ["tar", "czf", self.path.to_s,
           *dereference,
           *excludes,
           "."]

    logger.debug "$ #{cmd.join(' ')}"
    result = system(*cmd)
    raise InternalError, "failed to run: #{cmd.inspect}" unless result
  end

  checksum = self.checksum()
  raise InternalError, 'checksum should not be nil after package built' unless checksum
  meta['checksum'] = checksum

  File.write meta_path, self.meta.to_json
  nil
ensure
  if meta_in_build && meta_in_build.exist?
    meta_in_build.delete()
  end
end
checksum() click to toggle source
# File lib/mamiya/package.rb, line 52
def checksum
  return nil unless exist?
  Digest::SHA2.file(path).hexdigest
end
exist?()
Alias for: exists?
exists?() click to toggle source
# File lib/mamiya/package.rb, line 63
def exists?
  path.exist?
end
Also aliased as: exist?
extract_onto!(destination) click to toggle source
# File lib/mamiya/package.rb, line 106
def extract_onto!(destination)
  raise NotExists unless exist?
  Dir.mkdir(destination) unless File.directory?(destination)

  cmd = ["tar", "xf", path.to_s, "-C", destination.to_s]
  result = system(*cmd)
  raise InternalError, "Failed to run: #{cmd.inspect}" unless result

  nil
end
meta() click to toggle source
# File lib/mamiya/package.rb, line 36
def meta
  if !@meta_loaded_from_file && meta_path.exist?
    @meta_loaded_from_file = true
    loaded_meta = load_meta()
    if @loaded_meta == @meta
      @loaded_meta = loaded_meta
      @meta = load_meta()
    end
  end
  @meta ||= {}
end
meta_path() click to toggle source
# File lib/mamiya/package.rb, line 32
def meta_path
  Pathname.new(@path_without_ext.to_s + '.json')
end
name() click to toggle source
# File lib/mamiya/package.rb, line 24
def name
  meta['name'] || @path_without_ext.basename.to_s
end
valid?() click to toggle source
# File lib/mamiya/package.rb, line 57
def valid?
  raise NotExists, 'package not exist' unless exist?
  raise NotExists, 'meta not exist' unless meta_path.exist?
  !meta['checksum'] || checksum == meta['checksum']
end

Private Instance Methods

load_meta() click to toggle source
# File lib/mamiya/package.rb, line 119
def load_meta
  meta_path.exist? && JSON.parse(meta_path.read)
end