2986: Report parsing errors and print out contents instead of just blowing up.
authorPeter Amstutz <peter.amstutz@curoverse.com>
Fri, 20 Jun 2014 20:12:44 +0000 (16:12 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Fri, 20 Jun 2014 20:12:44 +0000 (16:12 -0400)
sdk/cli/bin/arv

index 355a947a55b5763239d95f1efae1ac606ea2b49b..0ad4a49af741b8889420eaa31d7aecf1eb53868e 100755 (executable)
@@ -220,14 +220,24 @@ def arv_edit client, arvados, global_opts, remaining_opts
     newcontent = tmp.read()
 
     newobj = {}
-    case global_opts[:format]
-    when 'json'
-      newobj = Oj.load(newcontent)
-    when 'yaml'
-      newobj = YAML.load(newcontent)
+    begin
+      case global_opts[:format]
+      when 'json'
+        newobj = Oj.load(newcontent)
+      when 'yaml'
+        newobj = YAML.load(newcontent)
+      end
+    rescue Exception => e
+      puts "Parse error! " + e.to_s
+      n = 1
+      newcontent.each_line do |line|
+        puts "#{n.to_s.rjust 4}  #{line}"
+        n += 1
+      end
+      exit 1
     end
-    tmp.close
-    tmp.unlink
+
+    tmp.close(true)
 
     if newobj != results
       api_method = 'arvados.' + rsc + '.update'