From 02227af4e5e8eef1872ddca1a6ab1f5677d910f5 Mon Sep 17 00:00:00 2001 From: Alejandro R Mosteo Date: Sun, 9 Feb 2025 17:09:48 +0100 Subject: [PATCH] fix: report unloadable pin during pin updates (#1843) --- src/alire/alire-roots.adb | 6 +++- .../tests/pin/invalid-linked-manifest/test.py | 30 +++++++++++++++++++ .../pin/invalid-linked-manifest/test.yaml | 5 ++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 testsuite/tests/pin/invalid-linked-manifest/test.py create mode 100644 testsuite/tests/pin/invalid-linked-manifest/test.yaml diff --git a/src/alire/alire-roots.adb b/src/alire/alire-roots.adb index 52de836e..722fb833 100644 --- a/src/alire/alire-roots.adb +++ b/src/alire/alire-roots.adb @@ -1041,7 +1041,7 @@ package body Alire.Roots is -- reprocess it if Linked.Contains (Crate) then - Trace.Debug ("Skipping adding of already added link target: " + Trace.Debug ("Skipping addition of already added link target: " & Utils.TTY.Name (Crate)); return; else @@ -1072,6 +1072,10 @@ package body Alire.Roots is & " but found " & Utils.TTY.Name (Target.Value.Name)); end if; + elsif Target.Is_Broken then + Trace.Error ("Invalid manifest in pinned crate at " + & TTY.URL (Pin.Path) & ":"); + Raise_Checked_Error (Target.Message); else Trace.Debug ("No crate found at pin location " & Pin.Relative_Path); diff --git a/testsuite/tests/pin/invalid-linked-manifest/test.py b/testsuite/tests/pin/invalid-linked-manifest/test.py new file mode 100644 index 00000000..dcd958fb --- /dev/null +++ b/testsuite/tests/pin/invalid-linked-manifest/test.py @@ -0,0 +1,30 @@ +""" +https://github.com/alire-project/alire/issues/1822 +Check that a link to a suddenly invalid manifest is not silently ignored +""" + +from drivers.alr import alr_pin, init_local_crate, run_alr +from drivers.asserts import assert_substring + +# We start by linking to a crate with a valid manifest + +LINKED = "linked" + +init_local_crate() +init_local_crate(LINKED, enter=False) +alr_pin(LINKED, path=LINKED) + +# Verify that the crate is linked as expected +assert_substring(f"{LINKED} file:{LINKED}", run_alr("pin").out) + +# Invalidate the manifest +with open(f"{LINKED}/alire.toml", "w") as f: + f.write("nope") + +# Verify that updating fails +p = run_alr("update", complain_on_error=False) + +# Check the error message +assert_substring("Invalid manifest in pinned crate at", p.out) + +print("SUCCESS") \ No newline at end of file diff --git a/testsuite/tests/pin/invalid-linked-manifest/test.yaml b/testsuite/tests/pin/invalid-linked-manifest/test.yaml new file mode 100644 index 00000000..c34d695d --- /dev/null +++ b/testsuite/tests/pin/invalid-linked-manifest/test.yaml @@ -0,0 +1,5 @@ +driver: python-script +build_mode: both +indexes: + basic_index: + in_fixtures: true -- 2.39.5