X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/5bbd6abc7a32c6912db5f36f0af5a923ac4b7c79..1f438358f952fe296bd6aebaa1f868ddb366fb7e:/services/api/app/models/collection.rb diff --git a/services/api/app/models/collection.rb b/services/api/app/models/collection.rb index a50c47b6a3..ac845f50ad 100644 --- a/services/api/app/models/collection.rb +++ b/services/api/app/models/collection.rb @@ -6,10 +6,13 @@ class Collection < ArvadosModel api_accessible :user, extend: :common do |t| t.add :data_size t.add :files + t.add :manifest_text end - api_accessible :with_data, extend: :user do |t| - t.add :manifest_text + def self.attributes_required_columns + super.merge({ "data_size" => ["manifest_text"], + "files" => ["manifest_text"], + }) end def redundancy_status @@ -159,12 +162,15 @@ class Collection < ArvadosModel joins("JOIN collections ON links.head_uuid = collections.uuid"). order("links.created_at DESC") - # If the search term is a Collection locator with an associated - # Docker image hash link, return that Collection. - coll_matches = base_search. - where(link_class: "docker_image_hash", collections: {uuid: search_term}) - if match = coll_matches.first - return [match.head_uuid] + # If the search term is a Collection locator that contains one file + # that looks like a Docker image, return it. + if loc = Locator.parse(search_term) + loc.strip_hints! + coll_match = readable_by(*readers).where(uuid: loc.to_s).first + if coll_match and (coll_match.files.size == 1) and + (coll_match.files[0][1] =~ /^[0-9A-Fa-f]{64}\.tar$/) + return [loc.to_s] + end end # Find Collections with matching Docker image repository+tag pairs.