[PATCH] tests: use find+rm, not perl, to remove temporary directories.

Karl Berry <[email protected]>
Newsgroups gmane.comp.sysutils.automake.patches
Message-ID <[email protected]>
Here's my proposed patch to use chmod and rm -rf (again), instead of
deltree.pl.

In the verbose output in case of failure, I split the difference and
added a terminating line "end ls ...", but did not prefix the ls
output. While I was testing, that seemed the most usable.

Jim, anyone ... look ok? --thanks, karl.
rmrf.diff (application/octet-stream, 2.1 KB)
From 44345f89372d7c662f8cf9a7bf7a92cc9fabab80 Mon Sep 17 00:00:00 2001
From: Karl Berry <[email protected]>
Date: Sat, 18 Jan 2020 18:06:23 -0800
Subject: [PATCH] tests: use find+rm, not perl, to remove temporary
 directories.

This change fixes automake bug#39078:
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=39078

* t/ax/test-lib.sh (rm_rf_): run chmod -R u+rwx and rm -rf,
instead of calling our t/ax/deltree.pl script.  This reverses the
change of 2013-05-16.  It made sense to write and use deltree
at that point, but unfortunately as of perl-5.28.0
(File::Path.pm version 2.15), rmtree no longer removes a tree with
unreadable subdirectories, such as we (intentionally) have.  So we
might as well go back to rm -rf.  The unconditional recursive chmod
instead of the previously-used more complex find command will
hopefully prove portable.  See the bug report for more details.

Our deltree.pl is not used for anything else, but nevertheless
leaving it in our source tree for now, for ease of reversion
and comparison.
---
 t/ax/test-lib.sh | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/t/ax/test-lib.sh b/t/ax/test-lib.sh
index 57afc07..69e98fb 100644
--- a/t/ax/test-lib.sh
+++ b/t/ax/test-lib.sh
@@ -197,7 +197,27 @@ seq_ ()
 rm_rf_ ()
 {
   test $# -gt 0 || return 0
-  $PERL "$am_testaux_srcdir"/deltree.pl "$@"
+  chmod -R u+rwx "$@" || :
+  rm -rf "$@" # if it fails, ok, we fail
+  _am_rmrf_status=$?
+  #
+  # In the past, we ran this Perl script instead of the above
+  # chmod && rm.  See the ChangeLog for details.
+  #$PERL "$am_testaux_srcdir"/deltree.pl "$@"
+  #
+  # Let's fail up front if anything remains after the supposed removal.
+  for _am_rmrf_v
+  do
+    if test -e "$_am_rmrf_v"; then
+      echo "$me (test-lib.sh:rm_rf_): tree not removed: $_am_rmrf_v" >&2
+      echo "$me (test-lib.sh:rm_rf_): ls -alR follows:" >&2
+      ls -alR $_am_rmrf_v >&2 # should always be there
+      echo "$me (test-lib.sh:rm_rf_): " \
+           "end ls of tree not removed ($_am_rmrf_v)." >&2
+      _am_rmrf_status=2
+    fi
+  done
+  return $_am_rmrf_status
 }
 
 commented_sed_unindent_prog='
-- 
1.8.3.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.