Currently the return status of e{cvs,svn,git}_clean is not at all
reliable, because only the last command in the pipeline is tested.
In addition, there are two pipelines in ecvs_clean, and the exit
status of the first one is completely ignored.

Another issue is that xargs -0 is an extension not specified by POSIX.
See patch included below, fixing both problems. (Note that this is
close to the implementation originally proposed in bug 210708 [1].)

Should we take this as an opportunity to split off these three
functions into their own eclass, e.g. vcs-clean.eclass?

Ulrich

[1] https://bugs.gentoo.org/210708


From 83c0afbfb4ef0c501c65dcd8e0c9c8bd30cdd70a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ulrich=20M=C3=BCller?= <[email protected]>
Date: Fri, 16 Feb 2018 07:47:46 +0100
Subject: [PATCH] eutils.eclass: More reliable return status for e*_clean.

In ecvs_clean, combine the two find commands into one, so that the
exit status of the first one won't be ignored.

Also use find -exec rather then find | xargs, so we don't have to
check the exit status of all commands in the pipeline.
---
 eclass/eutils.eclass | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/eclass/eutils.eclass b/eclass/eutils.eclass
index 8bbd561015ad..bce8cf1c2610 100644
--- a/eclass/eutils.eclass
+++ b/eclass/eutils.eclass
@@ -44,8 +44,8 @@ fi
 # internal CVS directories.  Defaults to $PWD.
 ecvs_clean() {
        [[ $# -eq 0 ]] && set -- .
-       find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf
-       find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf
+       find "$@" \( -type d -name 'CVS' -prune -o -type f -name '.cvs*' \) \
+               -exec rm -rf '{}' \+
 }
 
 # @FUNCTION: esvn_clean
@@ -55,7 +55,7 @@ ecvs_clean() {
 # internal Subversion directories.  Defaults to $PWD.
 esvn_clean() {
        [[ $# -eq 0 ]] && set -- .
-       find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
+       find "$@" -type d -name '.svn' -prune -exec rm -rf '{}' \+
 }
 
 # @FUNCTION: egit_clean
@@ -65,7 +65,7 @@ esvn_clean() {
 # contains internal Git directories.  Defaults to $PWD.
 egit_clean() {
        [[ $# -eq 0 ]] && set -- .
-       find "$@" -type d -name '.git*' -prune -print0 | xargs -0 rm -rf
+       find "$@" -type d -name '.git*' -prune -exec rm -rf '{}' \+
 }
 
 # @FUNCTION: emktemp
-- 
2.16.1

Attachment: pgpHJCo2nLSnB.pgp
Description: PGP signature

Reply via email to