From a56ec0e0f1b829adc97263c75dfea16637adaf85 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Tue, 26 Jul 2022 23:35:23 +0400 Subject: [PATCH] =?UTF-8?q?dkbuild:=20am=C3=A9liorer=20clean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dkbuild | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/dkbuild b/dkbuild index c8dd9cc..0b871bd 100755 --- a/dkbuild +++ b/dkbuild @@ -139,6 +139,10 @@ $scriptname clean [OPTIONS] [DIRS...] -x, --untracked Utiliser l'option -x de git clean pour supprimer aussi les fichiers non suivis. + -a, --all + Supprimer aussi les fichiers listés par 'git status --ignored'. Cela + permet de supprimer un maximum de fichiers qui ne font pas partie du + projet. Cette option implique --untracked $scriptname composer DESTDIR [ACTION [PARAMS] [ARGS]] lancer composer dans le répertoire spécifié @@ -2585,28 +2589,58 @@ function _build_after() { ##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ## clean +function _clean_git_clean() { + LANG=C git clean -d $opt "$@" | + grep -vE '^(Would skip|Skipping) ' | + sed -r 's/^Would remove //' +} +function _clean_git_status() { + git status --porcelain --ignored | + grep '^!! ' | + sed 's/^...//' +} + function clean_action() { eval "$SHARED_LOCALS1" - local opt=-X + local opt=-X all= local -a args; args=( "${SHARED_ARGS1[@]}" -X,--ignored opt=-X -x,--untracked opt=-x + -a,--all all=1 ) parse_args "$@"; set -- "${args[@]}" + [ -n "$all" ] && opt=-x + edebug "clean_action" ensure_projdir local cleans - setx cleans=git clean -nd $opt "$@" - [ -n "$cleans" ] || return 0 - if check_interaction -c; then - eecho "$cleans" - ask_yesno "Voulez-vous supprimer ces fichiers?" O || die + setx cleans=_clean_git_clean -n "$@" + if [ -n "$cleans" ]; then + if check_interaction -c; then + einfo "via git clean" + eecho "$cleans" + ask_yesno "Voulez-vous supprimer ces fichiers?" O || die + fi + + _clean_git_clean -f "$@" || die fi - git clean -fd $opt "$@" + if [ -n "$all" ]; then + setx cleans=_clean_git_status + if [ -n "$cleans" ]; then + if check_interaction -c; then + einfo "via git status" + eecho "$cleans" + ask_yesno "Voulez-vous supprimer ces fichiers supplémentaires?" O || die + fi + + sed 's/^/Removing /' <<<"$cleans" + eval "cleans=($cleans);"' rm -rf "${cleans[@]}"' || die + fi + fi } ##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~