# Ward Vandewege <ward@curoverse.com>
require 'fileutils'
+require 'shellwords'
if RUBY_VERSION < '1.9.3' then
abort <<-EOS
end
begin
- require 'curb'
- require 'rubygems'
- require 'arvados/google_api_client'
require 'json'
+ require 'net/http'
require 'pp'
- require 'trollop'
+ require 'tempfile'
+ require 'yaml'
+rescue LoadError => error
+ abort "Error loading libraries: #{error}\n"
+end
+
+begin
+ require 'rubygems'
+ # Load the gems with more requirements first, so we respect any version
+ # constraints they put on gems loaded later.
+ require 'arvados/google_api_client'
+ require 'active_support/inflector'
require 'andand'
+ require 'curb'
require 'oj'
- require 'active_support/inflector'
- require 'yaml'
- require 'tempfile'
- require 'net/http'
-rescue LoadError
+ require 'trollop'
+rescue LoadError => error
abort <<-EOS
+Error loading gems: #{error}
+
Please install all required gems:
- gem install activesupport andand curb google-api-client json oj trollop yaml
+ gem install arvados activesupport andand curb json oj trollop
EOS
end
end
-subcommands = %w(copy create edit keep pipeline run tag view ws)
+subcommands = %w(copy create edit get keep pipeline run tag ws)
def exec_bin bin, opts
- @bin_path = `which #{bin}`.strip
- if @bin_path.empty?
+ bin_path = `which #{bin.shellescape}`.strip
+ if bin_path.empty?
raise "#{bin}: command not found"
end
- exec @bin_path, *opts
+ exec bin_path, *opts
end
def check_subcommands client, arvados, subcommand, global_opts, remaining_opts
arv_create client, arvados, global_opts, remaining_opts
when 'edit'
arv_edit client, arvados, global_opts, remaining_opts
- when 'view'
- arv_view client, arvados, global_opts, remaining_opts
+ when 'get'
+ arv_get client, arvados, global_opts, remaining_opts
when 'copy', 'tag', 'ws', 'run'
exec_bin "arv-#{subcommand}", remaining_opts
when 'keep'
if ['get', 'put', 'ls', 'normalize'].index @sub then
# Native Arvados
exec_bin "arv-#{@sub}", remaining_opts
- elsif ['less', 'check'].index @sub then
- # wh* shims
- exec_bin "wh#{@sub}", remaining_opts
elsif @sub == 'docker'
exec_bin "arv-keepdocker", remaining_opts
else
puts "Usage: arv keep [method] [--parameters]\n"
puts "Use 'arv keep [method] --help' to get more information about specific methods.\n\n"
- puts "Available methods: ls, get, put, less, check, docker"
+ puts "Available methods: ls, get, put, docker"
end
abort
when 'pipeline'
Oj.load(newcontent)
when 'yaml'
YAML.load(newcontent)
+ else
+ abort "Unrecognized format #{global_opts[:format]}"
end
yield newobj
exit 255
end
- if not $stdout.tty?
- puts "Not connected to a TTY, cannot run interactive editor."
- exit 1
- end
-
rsc = lookup_uuid_rsc arvados, uuid
oldobj = fetch_rsc_obj client, arvados, rsc, uuid, remaining_opts
authorization: 'OAuth2 '+ENV['ARVADOS_API_TOKEN']
})
results = check_response result
- puts "Updated object #{results['uuid']}"
+ STDERR.puts "Updated object #{results['uuid']}"
else
- puts "Object is unchanged, did not update."
+ STDERR.puts "Object is unchanged, did not update."
end
end
exit 0
end
-def arv_view client, arvados, global_opts, remaining_opts
+def arv_get client, arvados, global_opts, remaining_opts
uuid = remaining_opts.shift
if uuid.nil? or uuid == "-h" or uuid == "--help"
puts head_banner
- puts "Usage: arv view [uuid] [fields...]\n\n"
- puts "Fetch the specified Arvados object, select the specified fields, \n"
- puts "and print a text representation (json or yaml, use --format).\n"
+ puts "Usage: arv [--format json|yaml] get [uuid] [fields...]\n\n"
+ puts "Fetch the specified Arvados object, select the specified fields,\n"
+ puts "and print a text representation.\n"
exit 255
end
end
end
- discovered_params.each do |k,v|
+ discovered_params.merge({resource => {'type' => 'object'}}).each do |k,v|
k = k.to_sym
if ['object', 'array'].index(v["type"]) and method_opts.has_key? k
if method_opts[k].andand.match /^\//