From d410b6f5d8a887a6ec57cef85602d25d4e928602 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Fri, 25 Oct 2019 12:42:30 +0200
Subject: [PATCH] [mdr] more verbose & robustified channel closing

---
 src/plugins/markdown-report/md_gen.ml    | 10 ++++------
 src/plugins/markdown-report/sarif_gen.ml | 22 +++++++++++-----------
 2 files changed, 15 insertions(+), 17 deletions(-)

diff --git a/src/plugins/markdown-report/md_gen.ml b/src/plugins/markdown-report/md_gen.ml
index 3ddf29b5c5b..a868fb4d753 100644
--- a/src/plugins/markdown-report/md_gen.ml
+++ b/src/plugins/markdown-report/md_gen.ml
@@ -621,12 +621,10 @@ let gen_report ~draft:is_draft () =
     :: elements
   in
   let doc = Markdown.pandoc ~title ~authors elements in
+  let file = Mdr_params.Output.get() in
   try
-    let out = open_out (Mdr_params.Output.get()) in
-    let fmt = Format.formatter_of_out_channel out in
-    Markdown.pp_pandoc fmt doc;
-    close_out out
+    Command.print_file file (fun fmt -> Markdown.pp_pandoc fmt doc) ;
+    Mdr_params.result "Report %s generated" file
   with Sys_error s ->
     Mdr_params.warning
-      "Unable to open %s for writing (%s). No report will be generated"
-      (Mdr_params.Output.get()) s
+      "Unable to open %s for writing (%s). No report generated" file s
diff --git a/src/plugins/markdown-report/sarif_gen.ml b/src/plugins/markdown-report/sarif_gen.ml
index 5efe92ff894..3a23295f21b 100644
--- a/src/plugins/markdown-report/sarif_gen.ml
+++ b/src/plugins/markdown-report/sarif_gen.ml
@@ -182,14 +182,14 @@ let gen_run remarks =
 let generate () =
   let remarks = get_remarks () in
   let runs = [ gen_run remarks ] in
-  let json = Schema.create ~runs () in
-  let out = Mdr_params.Output.get () in
-  let chan =
-    if out = "" then stdout
-    else begin
-      try open_out out
-      with Sys_error s ->
-        Mdr_params.abort "Unable to open output file %s: %s" out s
-    end
-  in
-  Yojson.Safe.to_channel chan (Schema.to_yojson json)
+  let json = Schema.create ~runs () |> Schema.to_yojson in
+  let file = Mdr_params.Output.get () in
+  if file = "" then
+    Log.print_on_output (fun fmt -> Yojson.Safe.pretty_print fmt json)
+  else
+    try
+      Command.write_file file
+        (fun out -> Yojson.Safe.pretty_to_channel ~std:true out json) ;
+      Mdr_params.result "Report %s generated" file
+    with Sys_error s ->
+      Mdr_params.abort "Unable to generate %s (%s)" file s
-- 
GitLab