Subject: bug#44889: [PATCH] rm: do not skip extra files when removal of empty directories fails

From: Pádraig Brady <[email-masked]>
Date: Thu, 26 Nov 2020 17:01:12 +0000

forcemerge 44889 44865 44883
stop

On 26/11/2020 14:35, Nick Alcock wrote:
> diff --git a/src/remove.c b/src/remove.c
> index 2d40c55cd..1150cf179 100644
> --- a/src/remove.c
> +++ b/src/remove.c
> @@ -508,8 +508,7 @@ rm_fts (FTS *fts, FTSENT *ent, struct rm_options const *x)
>               s = excise (fts, ent, x, true);
>               fts_skip_tree (fts, ent);
>             }
> -
> -        if (s != RM_OK)
> +        else if (s != RM_OK)
>             {
>               mark_ancestor_dirs (ent);
>               fts_skip_tree (fts, ent);

I think we'd still like to mark ancestors when failing to remove,
so that we don't prompt unnecessarily.
I think it would be better to do:

diff --git a/src/remove.c b/src/remove.c
index 2d40c55cd..adf948935 100644
--- a/src/remove.c
+++ b/src/remove.c
@@ -506,7 +506,8 @@ rm_fts (FTS *fts, FTSENT *ent, struct rm_options const *x)
              /* When we know (from prompt when in interactive mode)
                 that this is an empty directory, don't prompt twice.  */
              s = excise (fts, ent, x, true);
-            fts_skip_tree (fts, ent);
+            if (s == RM_OK)
+              fts_skip_tree (fts, ent);
            }

I've also adjusted the test slightly to not check for `tail`,
and another few cleanups.

I'll push in your name if you're ok with the above changes.

thanks,
Pádraig