[ARVADOS] updated: 35e39f925dae467785ed1b1fa752dd4f76133414
git at public.curoverse.com
git at public.curoverse.com
Fri Sep 5 09:16:15 EDT 2014
Summary of changes:
.../app/controllers/actions_controller.rb | 51 ++++++++--------------
apps/workbench/app/helpers/collections_helper.rb | 21 +++++----
2 files changed, 29 insertions(+), 43 deletions(-)
via 35e39f925dae467785ed1b1fa752dd4f76133414 (commit)
from 5828355672e3fc7926125dcc35882a642a4cde1a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 35e39f925dae467785ed1b1fa752dd4f76133414
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date: Fri Sep 5 09:15:48 2014 -0400
3710: Refactored code to reduce redundancy. Use select() to get the manifest
text instead of reloading each object for performance.
diff --git a/apps/workbench/app/controllers/actions_controller.rb b/apps/workbench/app/controllers/actions_controller.rb
index a5c2e94..b1beb9f 100644
--- a/apps/workbench/app/controllers/actions_controller.rb
+++ b/apps/workbench/app/controllers/actions_controller.rb
@@ -112,64 +112,47 @@ class ActionsController < ApplicationController
end
expose_action :combine_selected_files_into_collection do
- lst = []
+ uuids = []
+ pdhs = []
files = []
params["selection"].each do |s|
a = ArvadosBase::resource_class_for_uuid s
- uuid_with_optional_file = false
- m = nil
if a == Link
begin
- m = CollectionsHelper.match(Link.find(s).head_uuid)
+ if (m = CollectionsHelper.match(Link.find(s).head_uuid))
+ pdhs.append(m[1] + m[2])
+ files.append(m)
+ end
rescue
end
elsif (m = CollectionsHelper.match(s))
- m
- else
- m = CollectionsHelper.match_uuid_with_optional_filepath(s)
- uuid_with_optional_file = true
- end
-
- if uuid_with_optional_file
- lst.append(m[1])
+ pdhs.append(m[1] + m[2])
files.append(m)
- elsif m and m[1] and m[2]
- lst.append(m[1] + m[2])
+ elsif (m = CollectionsHelper.match_uuid_with_optional_filepath(s))
+ uuids.append(m[1])
files.append(m)
end
end
- lst = lst.uniq
+ pdhs = pdhs.uniq
+ uuids = uuids.uniq
chash = {}
- collections = Collection.where(uuid: lst)
- collections.each do |c|
- c.reload()
+ Collection.select([:uuid, :manifest_text]).where(uuid: uuids).each do |c|
chash[c.uuid] = c
end
- collections = Collection.where(portable_data_hash: lst)
- collections.each do |c|
- c.reload()
+ Collection.select([:portable_data_hash, :manifest_text]).where(portable_data_hash: pdhs).each do |c|
chash[c.portable_data_hash] = c
end
combined = ""
files.each do |m|
- if CollectionsHelper.match_uuid_with_optional_filepath(m[0])
- mt = chash[m[1]].andand.manifest_text
- if m[2].andand.size>0
- combined += arv_normalize mt, '--extract', m[2][1..-1]
- else
- combined += mt
- end
+ mt = chash[m[1]+m[2]].andand.manifest_text
+ if not m[4].nil? and m[4].size > 1
+ combined += arv_normalize mt, '--extract', m[4][1..-1]
else
- mt = chash[m[1]+m[2]].andand.manifest_text
- if m[4].andand.size>0
- combined += arv_normalize mt, '--extract', m[4][1..-1]
- else
- combined += mt
- end
+ combined += mt
end
end
diff --git a/apps/workbench/app/helpers/collections_helper.rb b/apps/workbench/app/helpers/collections_helper.rb
index c1ceb8b..23a440a 100644
--- a/apps/workbench/app/helpers/collections_helper.rb
+++ b/apps/workbench/app/helpers/collections_helper.rb
@@ -6,24 +6,27 @@ module CollectionsHelper
end
##
- # Regex match for collection UUIDs, returns a regex match object with the
+ # Regex match for collection portable data hash, returns a regex match object with the
# hash in group 1, (optional) size in group 2, (optional) subsequent uuid
# fields in group 3, and (optional) file path within the collection as group
- # 4; or nil for no match.
+ # 4
+ # returns nil for no match.
#
- # +uuid+ the uuid string to match
+ # +pdh+ the portable data hash string to match
#
- def self.match(uuid)
- /^([a-f0-9]{32})(\+[0-9]+)?(\+.*?)?(\/.*)?$/.match(uuid.to_s)
+ def self.match(pdh)
+ /^([a-f0-9]{32})(\+\d+)(\+[^+]+)*?(\/.*)?$/.match(pdh.to_s)
end
##
- # Regex match for collection UUID or "UUID/file" path.
- # Returns a regex match object with the
- # UUID in group 1, (optional) file path in group 2; or nil for no match.
+ # Regex match for collection UUIDs, returns a regex match object with the
+ # uuid in group 1, empty groups 2 and 3 (for consistency with the match
+ # method above), and (optional) file path within the collection as group
+ # 4.
+ # returns nil for no match.
#
def self.match_uuid_with_optional_filepath(uuid_with_optional_file)
- /^([0-9a-z]{5}-[0-9a-z]{5}-[0-9a-z]{15})(\/*.*)$/.match(uuid_with_optional_file.to_s)
+ /^([0-9a-z]{5}-4zz18-[0-9a-z]{15})()()(\/.*)?$/.match(uuid_with_optional_file.to_s)
end
##
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list