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