[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