From 5500eac06eac5872f069a6dbaa77b42b603a78be Mon Sep 17 00:00:00 2001 From: Alejandro R Mosteo Date: Wed, 14 Feb 2024 10:40:11 +0100 Subject: [PATCH] Fix bugs related to tmp file creation in corner cases (#1561) * fix: tmp dir being defined but not existing * Improved log message for temp file creation * Prevent deleting a tmp folder not created by us --- src/alire/alire-directories.adb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/alire/alire-directories.adb b/src/alire/alire-directories.adb index a7364152..51413aa6 100644 --- a/src/alire/alire-directories.adb +++ b/src/alire/alire-directories.adb @@ -662,6 +662,9 @@ package body Alire.Directories is end if; + Trace.Debug ("Selected name for tempfile: " & (+This.Name) + & " when at dir: " & Current); + Temp_Registry.Add (+This.Name); end Initialize; @@ -673,6 +676,9 @@ package body Alire.Directories is is begin if This.FD in GNAT.OS_Lib.Invalid_FD then + -- Ensure parent location exists + Create_Tree (Parent (This.Filename)); + This.FD := GNAT.OS_Lib.Create_Output_Text_File (This.Filename); end if; @@ -744,10 +750,10 @@ package body Alire.Directories is end if; -- Remove temp dir if empty to keep things tidy, and avoid modifying - -- lots of tests. + -- lots of tests, but only when within <>/alire/tmp - if Ada.Directories.Simple_Name (Parent (This.Filename)) = - Paths.Temp_Folder_Inside_Working_Folder + if Ada.Directories.Simple_Name (Parent (Parent (This.Filename))) = + Paths.Working_Folder_Inside_Root then AAA.Directories.Remove_Folder_If_Empty (Parent (This.Filename)); end if; -- 2.39.5