X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9f2325b6c76c7e57d9410bb18f804f4754ae85b3..074f020c32c55c017433ac5a294a5e0b73b360ad:/sdk/ruby/lib/arvados/keep.rb diff --git a/sdk/ruby/lib/arvados/keep.rb b/sdk/ruby/lib/arvados/keep.rb index 62f231f73d..b2096b5ea0 100644 --- a/sdk/ruby/lib/arvados/keep.rb +++ b/sdk/ruby/lib/arvados/keep.rb @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 + module Keep class Locator # A Locator is used to parse and manipulate Keep locator strings. @@ -35,7 +39,7 @@ module Keep def self.parse(tok) begin Locator.parse!(tok) - rescue ArgumentError => e + rescue ArgumentError nil end end @@ -47,19 +51,19 @@ module Keep raise ArgumentError.new "locator is nil or empty" end - m = LOCATOR_REGEXP.match(tok.strip) + m = LOCATOR_REGEXP.match(tok) unless m raise ArgumentError.new "not a valid locator #{tok}" end - tokhash, _, toksize, _, trailer = m[1..5] + tokhash, _, toksize, _, _, trailer = m[1..6] tokhints = [] if trailer trailer.split('+').each do |hint| - if hint =~ /^[[:upper:]][[:alnum:]@_-]+$/ + if hint =~ /^[[:upper:]][[:alnum:]@_-]*$/ tokhints.push(hint) else - raise ArgumentError.new "unknown hint #{hint}" + raise ArgumentError.new "invalid hint #{hint}" end end end @@ -112,7 +116,7 @@ module Keep stream_name = nil block_tokens = [] file_tokens = [] - line.scan /\S+/ do |token| + line.scan(/\S+/) do |token| if stream_name.nil? stream_name = unescape token elsif file_tokens.empty? and Locator.valid? token @@ -152,7 +156,7 @@ module Keep @text.each_line do |line| stream_name = nil in_file_tokens = false - line.scan /\S+/ do |token| + line.scan(/\S+/) do |token| if stream_name.nil? stream_name = unescape token elsif in_file_tokens or not Locator.valid? token @@ -231,6 +235,10 @@ module Keep # Verify that a given manifest is valid according to # https://arvados.org/projects/arvados/wiki/Keep_manifest_format def self.validate! manifest + raise ArgumentError.new "No manifest found" if !manifest + + return true if manifest.empty? + raise ArgumentError.new "Invalid manifest: does not end with newline" if !manifest.end_with?("\n") line_count = 0 manifest.each_line do |line|