X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/506289bac3ad672715c66b9dc06b770e9be0ef13..b7fe2ea36c87fa648f019c20679b50ab462aec5a:/sdk/cli/bin/arv diff --git a/sdk/cli/bin/arv b/sdk/cli/bin/arv index 0d9051c831..59bdfae81a 100755 --- a/sdk/cli/bin/arv +++ b/sdk/cli/bin/arv @@ -2,7 +2,7 @@ # Arvados cli client # -# Ward Vandewege +# Ward Vandewege require 'fileutils' @@ -53,17 +53,25 @@ end class Google::APIClient def discovery_document(api, version) api = api.to_s - return @discovery_documents["#{api}:#{version}"] ||= + discovery_uri = self.discovery_uri(api, version) + discovery_uri_hash = Digest::MD5.hexdigest(discovery_uri) + return @discovery_documents[discovery_uri_hash] ||= begin # fetch new API discovery doc if stale - cached_doc = File.expand_path '~/.cache/arvados/discovery_uri.json' - if not File.exist?(cached_doc) or (Time.now - File.mtime(cached_doc)) > 86400 + cached_doc = File.expand_path "~/.cache/arvados/discovery-#{discovery_uri_hash}.json" rescue nil + + if cached_doc.nil? or not File.exist?(cached_doc) or (Time.now - File.mtime(cached_doc)) > 86400 response = self.execute!(:http_method => :get, - :uri => self.discovery_uri(api, version), + :uri => discovery_uri, :authenticated => false) - FileUtils.makedirs(File.dirname cached_doc) - File.open(cached_doc, 'w') do |f| - f.puts response.body + + begin + FileUtils.makedirs(File.dirname cached_doc) + File.open(cached_doc, 'w') do |f| + f.puts response.body + end + rescue + return JSON.load response.body end end @@ -85,8 +93,8 @@ end def init_config # read authentication data from arvados configuration file if present lineno = 0 - config_file = File.expand_path('~/.config/arvados/settings.conf') - if File.exist? config_file then + config_file = File.expand_path('~/.config/arvados/settings.conf') rescue nil + if not config_file.nil? and File.exist? config_file then File.open(config_file, 'r').each do |line| lineno = lineno + 1 # skip comments @@ -104,7 +112,7 @@ def init_config end end -subcommands = %w(keep pipeline tag ws edit) +subcommands = %w(keep pipeline run tag ws edit) def check_subcommands client, arvados, subcommand, global_opts, remaining_opts case subcommand @@ -134,6 +142,8 @@ def check_subcommands client, arvados, subcommand, global_opts, remaining_opts puts "Available methods: run" end abort + when 'run' + exec `which arv-run`.strip, *remaining_opts when 'tag' exec `which arv-tag`.strip, *remaining_opts when 'ws' @@ -350,10 +360,6 @@ end def help_resources(option_parser, discovery_document, resource) option_parser.educate - - if not resource.nil? and resource != '--help' then - Trollop::die "Unknown resource type #{resource.inspect}" - end exit 255 end