Class: Ki::VersionImporter

Inherits:
Object show all
Defined in:
lib/data_access/version_helpers.rb

Overview

Imports a version to KiHome

Instance Method Summary collapse

Instance Method Details

#delete_empty_source_dirs(source, source_dirs) ⇒ Object



160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# 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) ⇒ Object

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



178
179
180
181
182
183
184
185
186
187
# 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) ⇒ Object

Imports a version to KiHome

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



93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/data_access/version_helpers.rb', line 93

def import(*args)
  if args.size == 2
    file, input = args
    source = DirectoryBase.new(input)
     = VersionMetadataFile.new(file)
  else
    raise "Not supported: '#{args.inspect}'"
  end
  test_version(file, input)

  (, source)
end

#import_from_metadata(metadata, source = nil) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/data_access/version_helpers.rb', line 106

def (, 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 = .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 =  = components_dir.add_item(component_id).mkdir.versions.add_version(version_number).mkdir

  ..cached_data = .cached_data
  ..version_id = version_id
  ..save
  if move_files
    FileUtils.rm(.path)
  end
  source_dirs = []
  ..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) ⇒ Object



197
198
199
200
201
202
# 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) ⇒ Object



189
190
191
192
193
194
195
# 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