X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/6a4c33f0b3689f97d18b2d75f54787245c1ebeb9..2024ca087c3b9c99ebb792011b60fecdf1486467:/apps/workbench/app/controllers/actions_controller.rb diff --git a/apps/workbench/app/controllers/actions_controller.rb b/apps/workbench/app/controllers/actions_controller.rb index 6fbdf29f46..d1dc0fca35 100644 --- a/apps/workbench/app/controllers/actions_controller.rb +++ b/apps/workbench/app/controllers/actions_controller.rb @@ -10,6 +10,19 @@ class ActionsController < ApplicationController ArvadosBase::resource_class_for_uuid(params[:uuid]) end + def show + @object = model_class.andand.find(params[:uuid]) + if @object.is_a? Link and + @object.link_class == 'name' and + ArvadosBase::resource_class_for_uuid(@object.head_uuid) == Collection + redirect_to collection_path(id: @object.uuid) + elsif @object + redirect_to @object + else + raise ActiveRecord::RecordNotFound + end + end + def post params.keys.collect(&:to_sym).each do |param| if @@exposed_actions[param] @@ -39,7 +52,7 @@ class ActionsController < ApplicationController tail_uuid: @object.uuid, head_uuid: src.uuid, link_class: 'name', - name: @object.uuid) + name: src.uuid) else case action when :copy @@ -70,11 +83,33 @@ class ActionsController < ApplicationController redirect_to @object end + def arv_normalize mt, *opts + r = "" + IO.popen(['arv-normalize'] + opts, 'w+b') do |io| + io.write mt + io.close_write + while buf = io.read(2**16) + r += buf + end + end + r + end + expose_action :combine_selected_files_into_collection do lst = [] files = [] params["selection"].each do |s| - m = CollectionsHelper.match(s) + a = ArvadosBase::resource_class_for_uuid s + m = nil + if a == Link + begin + m = CollectionsHelper.match(Link.find(s).head_uuid) + rescue + end + else + m = CollectionsHelper.match(s) + end + if m and m[1] and m[2] lst.append(m[1] + m[2]) files.append(m) @@ -93,32 +128,20 @@ class ActionsController < ApplicationController files.each do |m| mt = chash[m[1]+m[2]].manifest_text if m[4] - IO.popen(['arv-normalize', '--extract', m[4][1..-1]], 'w+b') do |io| - io.write mt - io.close_write - while buf = io.read(2**20) - combined += buf - end - end + combined += arv_normalize mt, '--extract', m[4][1..-1] else combined += chash[m[1]+m[2]].manifest_text end end - normalized = '' - IO.popen(['arv-normalize'], 'w+b') do |io| - io.write combined - io.close_write - while buf = io.read(2**20) - normalized += buf - end - end + normalized = arv_normalize combined + normalized_stripped = arv_normalize combined, '--strip' require 'digest/md5' d = Digest::MD5.new() - d << normalized - newuuid = "#{d.hexdigest}+#{normalized.length}" + d << normalized_stripped + newuuid = "#{d.hexdigest}+#{normalized_stripped.length}" env = Hash[ENV]. merge({ @@ -132,10 +155,9 @@ class ActionsController < ApplicationController }) IO.popen([env, 'arv-put', '--raw'], 'w+b') do |io| - io.write normalized + io.write normalized_stripped io.close_write - while buf = io.read(2**20) - + while buf = io.read(2**16) end end