diff mbox series

buildstats-diff: find last two buildstats files if none are specified

Message ID 20250516103324.963974-1-ross.burton@arm.com
State New
Headers show
Series buildstats-diff: find last two buildstats files if none are specified | expand

Commit Message

Ross Burton May 16, 2025, 10:33 a.m. UTC
If no buildstats directories are specified, then find the last two runs
under BUILDDIR.

Signed-off-by: Ross Burton <ross.burton@arm.com>
---
 scripts/buildstats-diff | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

Comments

Richard Purdie May 16, 2025, 10:37 a.m. UTC | #1
On Fri, 2025-05-16 at 11:33 +0100, Ross Burton via lists.openembedded.org wrote:
> If no buildstats directories are specified, then find the last two runs
> under BUILDDIR.
> 
> Signed-off-by: Ross Burton <ross.burton@arm.com>
> ---
>  scripts/buildstats-diff | 25 +++++++++++++++++++++++--
>  1 file changed, 23 insertions(+), 2 deletions(-)
> 
> diff --git a/scripts/buildstats-diff b/scripts/buildstats-diff
> index c9aa76a8faf..0e975ddcfc9 100755
> --- a/scripts/buildstats-diff
> +++ b/scripts/buildstats-diff
> @@ -12,6 +12,7 @@ import glob
>  import logging
>  import math
>  import os
> +import pathlib
>  import sys
>  from operator import attrgetter
>  
> @@ -251,11 +252,31 @@ Script for comparing buildstats of two separate builds."""
>                               "average over them")
>      parser.add_argument('--only-task', dest='only_tasks', metavar='TASK', action='append', default=[],
>                          help="Only include TASK in report. May be specified multiple times")
> -    parser.add_argument('buildstats1', metavar='BUILDSTATS1', help="'Left' buildstat")
> -    parser.add_argument('buildstats2', metavar='BUILDSTATS2', help="'Right' buildstat")
> +    parser.add_argument('buildstats1', metavar='BUILDSTATS1', nargs="?", help="'Left' buildstat")
> +    parser.add_argument('buildstats2', metavar='BUILDSTATS2', nargs="?", help="'Right' buildstat")
>  
>      args = parser.parse_args(argv)
>  
> +    if args.buildstats1 and args.buildstats2:
> +        # Both paths specified
> +        pass
> +    elif args.buildstats1 or args.buildstats2:
> +        # Just one path specified, this is an error
> +        parser.print_usage(sys.stderr)
> +        print("Either specify two buildstats paths, or none to use the last two paths.", file=sys.stderr)
> +        sys.exit(1)
> +    else:
> +        # No paths specified, try to find the last two buildstats
> +        try:
> +            buildstats_dir = pathlib.Path(os.environ["BUILDDIR"]) / "tmp" / "buildstats"
> +            paths = sorted(buildstats_dir.iterdir())
> +            args.buildstats2 = paths.pop()
> +            args.buildstats1 = paths.pop()
> +        except KeyError:
> +            parser.print_usage(sys.stderr)
> +            print("Build environment has not been configured, cannot find buildstats", file=sys.stderr)
> +            sys.exit(1)
> +
>      # We do not nedd/want to read all buildstats if we just want to look at the
>      # package versions
>      if args.ver_diff:

Should this print something so the user knows which ones it picked?

Cheers,

Richard
Ross Burton May 16, 2025, 10:42 a.m. UTC | #2
> On 16 May 2025, at 11:37, Richard Purdie <richard.purdie@linuxfoundation.org> wrote:
> 
> Should this print something so the user knows which ones it picked?

Good point, v2 sent.

Ross
diff mbox series

Patch

diff --git a/scripts/buildstats-diff b/scripts/buildstats-diff
index c9aa76a8faf..0e975ddcfc9 100755
--- a/scripts/buildstats-diff
+++ b/scripts/buildstats-diff
@@ -12,6 +12,7 @@  import glob
 import logging
 import math
 import os
+import pathlib
 import sys
 from operator import attrgetter
 
@@ -251,11 +252,31 @@  Script for comparing buildstats of two separate builds."""
                              "average over them")
     parser.add_argument('--only-task', dest='only_tasks', metavar='TASK', action='append', default=[],
                         help="Only include TASK in report. May be specified multiple times")
-    parser.add_argument('buildstats1', metavar='BUILDSTATS1', help="'Left' buildstat")
-    parser.add_argument('buildstats2', metavar='BUILDSTATS2', help="'Right' buildstat")
+    parser.add_argument('buildstats1', metavar='BUILDSTATS1', nargs="?", help="'Left' buildstat")
+    parser.add_argument('buildstats2', metavar='BUILDSTATS2', nargs="?", help="'Right' buildstat")
 
     args = parser.parse_args(argv)
 
+    if args.buildstats1 and args.buildstats2:
+        # Both paths specified
+        pass
+    elif args.buildstats1 or args.buildstats2:
+        # Just one path specified, this is an error
+        parser.print_usage(sys.stderr)
+        print("Either specify two buildstats paths, or none to use the last two paths.", file=sys.stderr)
+        sys.exit(1)
+    else:
+        # No paths specified, try to find the last two buildstats
+        try:
+            buildstats_dir = pathlib.Path(os.environ["BUILDDIR"]) / "tmp" / "buildstats"
+            paths = sorted(buildstats_dir.iterdir())
+            args.buildstats2 = paths.pop()
+            args.buildstats1 = paths.pop()
+        except KeyError:
+            parser.print_usage(sys.stderr)
+            print("Build environment has not been configured, cannot find buildstats", file=sys.stderr)
+            sys.exit(1)
+
     # We do not nedd/want to read all buildstats if we just want to look at the
     # package versions
     if args.ver_diff: