diff mbox series

[v2,3/5] autobuild-run: make diffoscope output a JSON-formatted file as well

Message ID 20190810035902.14047-3-itsatharva@gmail.com
State Accepted
Headers show
Series [v2,1/5] autobuild-run: use different output directories for reproducible builds testing | expand

Commit Message

Atharva Lele Aug. 10, 2019, 3:59 a.m. UTC
Normal diffoscope output is readable by humans but not really
convenient when working with it in code. JSON can be easily
read and extracted information from.

We still keep the normal text version because it's easy to parse by a human,
but we limit its size to 40KB.

Signed-off-by: Atharva Lele <itsatharva@gmail.com>
---
Changes v1 -> v2:
  - Save text output as well as JSON
---
 scripts/autobuild-run | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Thomas Petazzoni Aug. 11, 2019, 1:41 p.m. UTC | #1
Hello Atharva,

On Sat, 10 Aug 2019 09:29:00 +0530
Atharva Lele <itsatharva@gmail.com> wrote:

>          reproducible_results = os.path.join(self.outputdir, "results", "reproducible_results")

I change the name of the JSON file to:

	diffoscope-results.json

> +        reproducible_results_text = os.path.join(self.outputdir, "results", "reproducible_results_text")

And the name of the text file to:

	diffoscope-results.txt

These names seem more sensible to me, and match better what we're
already using for other files in the build results.

I've applied to buildroot-test with this change. I have another
suggestion below, though.

>          # Using only tar images for now
>          build_1_image = os.path.join(self.outputdir, "images", "rootfs.tar")
>          build_2_image = os.path.join(self.outputdir_2, "images", "rootfs.tar")
> @@ -453,7 +454,9 @@ class Builder:
>                  prefix = prefix[13:-1]
>                  log_write(self.log, "INFO: running diffoscope on images")
>                  subprocess.call(["diffoscope", build_1_image, build_2_image,
> -                                "--tool-prefix-binutils", prefix], stdout=diff, stderr=self.log)
> +                                 "--tool-prefix-binutils", prefix, "--json", "-",

Instead of outputting the result to stdout, and then redirecting the
stdout to "diff", what about using diffoscope ability to directly
output to a file:

	"--json", reproducible_results, "--text", reproducible_results_text

Thanks!

Thomas
Atharva Lele Aug. 12, 2019, 9:22 a.m. UTC | #2
On Sun, Aug 11, 2019 at 7:11 PM Thomas Petazzoni
<thomas.petazzoni@bootlin.com> wrote:
>
> Hello Atharva,
>
> On Sat, 10 Aug 2019 09:29:00 +0530
> Atharva Lele <itsatharva@gmail.com> wrote:
>
> >          reproducible_results = os.path.join(self.outputdir, "results", "reproducible_results")
>
> I change the name of the JSON file to:
>
>         diffoscope-results.json
>
> > +        reproducible_results_text = os.path.join(self.outputdir, "results", "reproducible_results_text")
>
> And the name of the text file to:
>
>         diffoscope-results.txt
>
> These names seem more sensible to me, and match better what we're
> already using for other files in the build results.
>

Changing the names does make sense, thanks!

> I've applied to buildroot-test with this change. I have another
> suggestion below, though.
>
> >          # Using only tar images for now
> >          build_1_image = os.path.join(self.outputdir, "images", "rootfs.tar")
> >          build_2_image = os.path.join(self.outputdir_2, "images", "rootfs.tar")
> > @@ -453,7 +454,9 @@ class Builder:
> >                  prefix = prefix[13:-1]
> >                  log_write(self.log, "INFO: running diffoscope on images")
> >                  subprocess.call(["diffoscope", build_1_image, build_2_image,
> > -                                "--tool-prefix-binutils", prefix], stdout=diff, stderr=self.log)
> > +                                 "--tool-prefix-binutils", prefix, "--json", "-",
>
> Instead of outputting the result to stdout, and then redirecting the
> stdout to "diff", what about using diffoscope ability to directly
> output to a file:
>
>         "--json", reproducible_results, "--text", reproducible_results_text
>

You're right. It'd be better to have it consistent. I'll prepare a
patch to change it.

> Thanks!
>
> Thomas
> --
> Thomas Petazzoni, CTO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com

Thanks for merging and thanks for the review!
Atharva Lele Aug. 13, 2019, 4:07 a.m. UTC | #3
On Sun, Aug 11, 2019 at 7:11 PM Thomas Petazzoni
<thomas.petazzoni@bootlin.com> wrote:
>
> Hello Atharva,
>
> On Sat, 10 Aug 2019 09:29:00 +0530
> Atharva Lele <itsatharva@gmail.com> wrote:
>
> >          reproducible_results = os.path.join(self.outputdir, "results", "reproducible_results")
>
> I change the name of the JSON file to:
>
>         diffoscope-results.json
>
> > +        reproducible_results_text = os.path.join(self.outputdir, "results", "reproducible_results_text")
>

There's a typo here. Variable is named reproducible_results_txt in the
patch, but in the diffoscope command I have used
reproducible_results_text. I'll send a patch fixing this and the
command consistency.

> And the name of the text file to:
>
>         diffoscope-results.txt
>
> These names seem more sensible to me, and match better what we're
> already using for other files in the build results.
>
> I've applied to buildroot-test with this change. I have another
> suggestion below, though.
>
> >          # Using only tar images for now
> >          build_1_image = os.path.join(self.outputdir, "images", "rootfs.tar")
> >          build_2_image = os.path.join(self.outputdir_2, "images", "rootfs.tar")
> > @@ -453,7 +454,9 @@ class Builder:
> >                  prefix = prefix[13:-1]
> >                  log_write(self.log, "INFO: running diffoscope on images")
> >                  subprocess.call(["diffoscope", build_1_image, build_2_image,
> > -                                "--tool-prefix-binutils", prefix], stdout=diff, stderr=self.log)
> > +                                 "--tool-prefix-binutils", prefix, "--json", "-",
>
> Instead of outputting the result to stdout, and then redirecting the
> stdout to "diff", what about using diffoscope ability to directly
> output to a file:
>
>         "--json", reproducible_results, "--text", reproducible_results_text
>
> Thanks!
>
> Thomas
> --
> Thomas Petazzoni, CTO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
Thomas Petazzoni Aug. 13, 2019, 12:29 p.m. UTC | #4
Hello Atharva,

On Tue, 13 Aug 2019 09:37:27 +0530
Atharva Lele <itsatharva@gmail.com> wrote:

> > > +        reproducible_results_text = os.path.join(self.outputdir, "results", "reproducible_results_text")  
> >  
> 
> There's a typo here. Variable is named reproducible_results_txt in the
> patch, but in the diffoscope command I have used
> reproducible_results_text. I'll send a patch fixing this and the
> command consistency.

My bad. I initially started changing the variable names to something
more sensible, such as "diffoscope_results_json" and
"diffoscope_results_txt" and then changed my mind, as it should have
been a separate patch. But apparently, I undid my change incorrectly.
Sorry about this.

Thomas
diff mbox series

Patch

diff --git a/scripts/autobuild-run b/scripts/autobuild-run
index 69766b2..6adfa99 100755
--- a/scripts/autobuild-run
+++ b/scripts/autobuild-run
@@ -440,6 +440,7 @@  class Builder:
         """
 
         reproducible_results = os.path.join(self.outputdir, "results", "reproducible_results")
+        reproducible_results_text = os.path.join(self.outputdir, "results", "reproducible_results_text")
         # Using only tar images for now
         build_1_image = os.path.join(self.outputdir, "images", "rootfs.tar")
         build_2_image = os.path.join(self.outputdir_2, "images", "rootfs.tar")
@@ -453,7 +454,9 @@  class Builder:
                 prefix = prefix[13:-1]
                 log_write(self.log, "INFO: running diffoscope on images")
                 subprocess.call(["diffoscope", build_1_image, build_2_image,
-                                "--tool-prefix-binutils", prefix], stdout=diff, stderr=self.log)
+                                 "--tool-prefix-binutils", prefix, "--json", "-",
+                                 "--text", reproducible_results_text, "--max-text-report-size", "40000"],
+                                stdout=diff, stderr=self.log)
             else:
                 log_write(self.log, "INFO: diffoscope not installed, falling back to cmp")
                 subprocess.call(["cmp", "-b", build_1_image, build_2_image], stdout=diff, stderr=self.log)