7868: Allow admin to add arguments to "docker run" commands.
[arvados.git] / sdk / cli / bin / arv
index bddad989dda338b7b468ba757640270e976d199e..185a5b0673f1dc1c5afc5ed6530386d8255daaf4 100755 (executable)
@@ -5,6 +5,7 @@
 # Ward Vandewege <ward@curoverse.com>
 
 require 'fileutils'
+require 'shellwords'
 
 if RUBY_VERSION < '1.9.3' then
   abort <<-EOS
@@ -88,7 +89,7 @@ end
 subcommands = %w(copy create edit get keep pipeline run tag ws)
 
 def exec_bin bin, opts
-  bin_path = `which #{bin}`.strip
+  bin_path = `which #{bin.shellescape}`.strip
   if bin_path.empty?
     raise "#{bin}: command not found"
   end
@@ -110,15 +111,12 @@ def check_subcommands client, arvados, subcommand, global_opts, remaining_opts
     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'
@@ -322,11 +320,6 @@ def arv_edit client, arvados, global_opts, remaining_opts
     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
 
@@ -341,9 +334,9 @@ def arv_edit client, arvados, global_opts, 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
 
@@ -354,9 +347,9 @@ 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 get [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