class Ki::VersionImporter

Imports a version to KiHome

Public Instance Methods

delete_empty_source_dirs(source, source_dirs) click to toggle source
# File lib/data_access/version_helpers.rb, line 160
def delete_empty_source_dirs(source, source_dirs)
  if move_files
    expanded_source_dirs = {}
    source_dirs.each do |d|
      dir_entries(d).each do |expanded|
        expanded_source_dirs[expanded] = true
      end
    end
    expanded_source_dirs.keys.each do |dir|
      checked_dir = source.path(dir)
      if Dir.entries(checked_dir) == [".", ".."]
        FileUtils.rmdir(checked_dir)
      end
    end
  end
end
dir_entries(str) click to toggle source

splits dir path in to all components: foo/bar/baz, foo/bar, foo

# File lib/data_access/version_helpers.rb, line 178
def dir_entries(str)
  arr = str.split("/")
  ret = []
  c = arr.size
  while c > 0
    ret << File.join(arr[0..c])
    c-=1
  end
  ret
end
import(*args) click to toggle source

Imports a version to KiHome

  • import(file, binary_directory) expects two String parameters defining version file location and directory base for binaries

# File lib/data_access/version_helpers.rb, line 93
def import(*args)
  if args.size == 2
    file, input = args
    source = DirectoryBase.new(input)
    metadata = VersionMetadataFile.new(file)
  else
    raise "Not supported: '#{args.inspect}'"
  end
  test_version(file, input)

  import_from_metadata(metadata, source)
end
import_from_metadata(metadata, source=nil) click to toggle source
# File lib/data_access/version_helpers.rb, line 106
def import_from_metadata(metadata, source=nil)
  if specific_version_id && create_new_version
    raise "Can't define both specific_version_id '#{specific_version_id}' and create_new_version '#{create_new_version}'!"
  end

  if specific_version_id
    version_id = specific_version_id
  elsif create_new_version
    component_id = create_new_version
    version = finder.version(component_id)
    if version
      id = version.version_id.split("/").last
      version_number = (Integer(id) + 1).to_s
    else
      version_number = "1"
    end
    version_id = File.join(component_id, version_number)
  else
    version_id = metadata.version_id
  end

  version_arr = version_id.split("/")
  version_number = version_arr.delete_at(-1)
  component_id = version_arr.join("/")

  version = finder.version(version_id)
  if version && version.exists?
    raise "'#{version_id}' exists in repository already!"
  end

  # creates directories
  components_dir = ki_home.repositories.add_item("local").mkdir.components
  binary_dest = metadata_dir = components_dir.add_item(component_id).mkdir.versions.add_version(version_number).mkdir

  metadata_dir.metadata.cached_data = metadata.cached_data
  metadata_dir.metadata.version_id = version_id
  metadata_dir.metadata.save
  if move_files
    FileUtils.rm(metadata.path)
  end
  source_dirs = []
  metadata_dir.metadata.files.each do |file_info|
    file_path = file_info["path"]
    dir = File.dirname(file_path)
    if dir != "."
      source_dirs << dir
      binary_dest.mkdir(dir)
    end
    to_repo(source.path(file_path), binary_dest.path(file_path))
  end
  delete_empty_source_dirs(source, source_dirs)
end
test_version(file, input) click to toggle source
# File lib/data_access/version_helpers.rb, line 197
def test_version(file, input)
  all_ok = tester.ki_home(ki_home).test_version(Version.create_version(file, input))
  if !all_ok
    raise "Files are not ok!"
  end
end
to_repo(src, dest) click to toggle source
# File lib/data_access/version_helpers.rb, line 189
def to_repo(src, dest)
  if move_files
    FileUtils.mv(src, dest)
  else
    FileUtils.cp(src, dest)
  end
end