From 32e217a450115c47740c18bdef998c9ac16fc1c2 Mon Sep 17 00:00:00 2001 From: Alejandro R Mosteo Date: Thu, 27 Feb 2025 13:01:54 +0100 Subject: [PATCH] fix: don't crash on `alr --format show --external` (#1871) * fix: missing headers in show --external table * New test * Remove non-structured output when --format * Fix collateral damage --- src/alr/alr-commands-show.adb | 19 ++++++++++-------- .../tests/index/external-from-output/test.py | 5 ++--- .../tests/show/external-structured/test.py | 20 +++++++++++++++++++ .../tests/show/external-structured/test.yaml | 4 ++++ 4 files changed, 37 insertions(+), 11 deletions(-) create mode 100644 testsuite/tests/show/external-structured/test.py create mode 100644 testsuite/tests/show/external-structured/test.yaml diff --git a/src/alr/alr-commands-show.adb b/src/alr/alr-commands-show.adb index 0d255846..8cb35d48 100644 --- a/src/alr/alr-commands-show.adb +++ b/src/alr/alr-commands-show.adb @@ -96,7 +96,9 @@ package body Alr.Commands.Show is Rel.Print; end if; - if Rel.Origin.Is_System then + if Rel.Origin.Is_System and then + not Alire.Utils.Tables.Structured_Output + then Put_Line ("Platform package: " & Rel.Origin.Package_Name); end if; @@ -175,15 +177,16 @@ package body Alr.Commands.Show is Cmd : Command) is use Alire; Table : Utils.Tables.Table; + Structured : Boolean renames Utils.Tables.Structured_Output; begin if Alire.Index.Crate (Name).Externals.Is_Empty then Trace.Info ("No externals defined for the requested crate."); else Table - .Append ("Kind") - .Append ("Description") - .Append ("Details") - .Append ("Available"); + .Header ("Kind") + .Header ("Description") + .Header ("Details") + .Header ("Available"); for External of Alire.Index.Crate (Name).Externals loop Table.New_Row; @@ -207,14 +210,14 @@ package body Alr.Commands.Show is for I in Detail.First_Index .. Detail.Last_Index loop -- Skip last element, which is unknown distro Table - .Append (if I = Detail.First_Index + .Append (if I = Detail.First_Index or else Structured then External.Kind else "") - .Append (if I = Detail.First_Index + .Append (if I = Detail.First_Index or else Structured then External.Image else "") .Append (Detail (I)) - .Append (if I = Detail.First_Index + .Append (if I = Detail.First_Index or else Structured then Available.Image_One_Line else ""); if I /= Detail.Last_Index then diff --git a/testsuite/tests/index/external-from-output/test.py b/testsuite/tests/index/external-from-output/test.py index 8be389e7..d09f606c 100644 --- a/testsuite/tests/index/external-from-output/test.py +++ b/testsuite/tests/index/external-from-output/test.py @@ -16,7 +16,7 @@ assert_eq('Not found: make*\n' # External definition p = run_alr('show', 'make', '--external') -assert_eq('Kind Description Details Available\n' +assert_eq('KIND DESCRIPTION DETAILS AVAILABLE\n' 'Executable make --version .*Make ([\\d\\.]+).* True\n', p.out) @@ -38,8 +38,7 @@ assert_match(".*There are external definitions for the crate.", # External definition check (crate is actually there) p = run_alr('show', 'bad_switch', '--external') -assert_eq('Kind Description ' - 'Details Available\n' +assert_eq('KIND DESCRIPTION DETAILS AVAILABLE\n' 'Executable make --bad-nonexistent-switch ' '.*Make ([\\d\\.]+).* True\n', p.out) diff --git a/testsuite/tests/show/external-structured/test.py b/testsuite/tests/show/external-structured/test.py new file mode 100644 index 00000000..ae3e2d7b --- /dev/null +++ b/testsuite/tests/show/external-structured/test.py @@ -0,0 +1,20 @@ +""" +Verify output of `--format show --external` doesn't crash and is as expected. +""" + +from drivers.alr import run_alr +from drivers.asserts import assert_eq, assert_match + +assert_eq("""\ +[ + { + "kind": "Executable", + "description": "echo 1.0", + "details": "([\\\\d\\\\.]+).*", + "available": "True" + } +] +""", +run_alr("--format", "show", "gnat_external", "--external").out) + +print("SUCCESS") diff --git a/testsuite/tests/show/external-structured/test.yaml b/testsuite/tests/show/external-structured/test.yaml new file mode 100644 index 00000000..90178fa7 --- /dev/null +++ b/testsuite/tests/show/external-structured/test.yaml @@ -0,0 +1,4 @@ +driver: python-script +indexes: + compiler_only_index: + in_fixtures: true -- 2.39.5