- results.select! { |k, v| remaining_opts.include? k }
- end
-
- content = ""
-
- case global_opts[:format]
- when 'json'
- content = Oj.dump(results, :indent => 1)
- when 'yaml'
- content = results.to_yaml
- end
-
- tmp_file = Tempfile.new([uuid, "." + global_opts[:format]])
- tmp_file.write(content)
- tmp_file.close
-
- newobj = run_editor tmp_file, global_opts
-
- begin
- if newobj != results
- api_method = 'arvados.' + rsc + '.update'
- dumped = Oj.dump(newobj)
-
- begin
- result = client.execute(:api_method => eval(api_method),
- :parameters => {"uuid" => uuid},
- :body_object => { rsc.singularize => dumped },
- :authenticated => false,
- :headers => {
- authorization: 'OAuth2 '+ENV['ARVADOS_API_TOKEN']
- })
- rescue Exception => e
- puts "Error communicating with server, error was #{e}"
- puts "Update body was:"
- puts dumped
- arv_edit_save_tmp tmp_file
- abort
- end
-
- begin
- results = JSON.parse result.body
- rescue JSON::ParserError => e
- arv_edit_save_tmp tmp_file
- abort "Failed to parse server response:\n" + e.to_s
- end
-
- if result.response.status != 200
- puts "Update failed. Server responded #{result.response.status}: #{results['errors']} "
- puts "Update body was:"
- puts dumped
- arv_edit_save_tmp tmp_file
- abort
- end
+ oldobj.select! { |k, v| remaining_opts.include? k }
+ end
+
+ edit_and_commit_object oldobj, uuid, global_opts do |newobj|
+ newobj.select! {|k| newobj[k] != oldobj[k]}
+ if !newobj.empty?
+ result = client.execute(:api_method => eval('arvados.' + rsc + '.update'),
+ :parameters => {"uuid" => uuid},
+ :body_object => { rsc.singularize => newobj },
+ :authenticated => false,
+ :headers => {
+ authorization: 'OAuth2 '+ENV['ARVADOS_API_TOKEN']
+ })
+ results = check_response result
+ puts "Updated object #{results['uuid']}"