X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9887cbea6421c442de1439f8c0050f81c4474dfd..31c6426b70e2b277087188dad2b9b346c904f30b:/services/api/app/models/collection.rb diff --git a/services/api/app/models/collection.rb b/services/api/app/models/collection.rb index ea18789600..620b74a96a 100644 --- a/services/api/app/models/collection.rb +++ b/services/api/app/models/collection.rb @@ -8,6 +8,10 @@ class Collection < ArvadosModel t.add :files end + api_accessible :with_data, extend: :user do |t| + t.add :manifest_text + end + def redundancy_status if redundancy_confirmed_as.nil? 'unconfirmed' @@ -33,14 +37,14 @@ class Collection < ArvadosModel self.uuid.gsub! /$/, '+' + self.manifest_text.length.to_s true else - errors.add :uuid, 'uuid does not match checksum of manifest_text' + errors.add :uuid, 'does not match checksum of manifest_text' false end elsif self.manifest_text - errors.add :uuid, 'checksum for manifest_text not supplied in uuid' + errors.add :uuid, 'not supplied (must match checksum of manifest_text)' false else - errors.add :manifest_text, 'manifest_text not supplied' + errors.add :manifest_text, 'not supplied' false end end @@ -115,12 +119,28 @@ class Collection < ArvadosModel end end end + end - @files = [] - tmp.each do |k, v| - re = k.match(/^(.+)\/(.+)/) - @files << [re[1], re[2], v] + @files = [] + tmp.each do |k, v| + re = k.match(/^(.+)\/(.+)/) + @files << [re[1], re[2], v] + end + end + + def self.normalize_uuid uuid + hash_part = nil + size_part = nil + uuid.split('+').each do |token| + if token.match /^[0-9a-f]{32,}$/ + raise "uuid #{uuid} has multiple hash parts" if hash_part + hash_part = token + elsif token.match /^\d+$/ + raise "uuid #{uuid} has multiple size parts" if size_part + size_part = token end end + raise "uuid #{uuid} has no hash part" if !hash_part + [hash_part, size_part].compact.join '+' end end