dkbuild: améliorer clean

This commit is contained in:
Jephté Clain 2022-07-26 23:35:23 +04:00
parent d6e78b9665
commit a56ec0e0f1
1 changed files with 41 additions and 7 deletions

48
dkbuild
View File

@ -139,6 +139,10 @@ $scriptname clean [OPTIONS] [DIRS...]
-x, --untracked -x, --untracked
Utiliser l'option -x de git clean pour supprimer aussi les fichiers non Utiliser l'option -x de git clean pour supprimer aussi les fichiers non
suivis. 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]] $scriptname composer DESTDIR [ACTION [PARAMS] [ARGS]]
lancer composer dans le répertoire spécifié lancer composer dans le répertoire spécifié
@ -2585,28 +2589,58 @@ function _build_after() {
##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
## clean ## 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() { function clean_action() {
eval "$SHARED_LOCALS1" eval "$SHARED_LOCALS1"
local opt=-X local opt=-X all=
local -a args; args=( local -a args; args=(
"${SHARED_ARGS1[@]}" "${SHARED_ARGS1[@]}"
-X,--ignored opt=-X -X,--ignored opt=-X
-x,--untracked opt=-x -x,--untracked opt=-x
-a,--all all=1
) )
parse_args "$@"; set -- "${args[@]}" parse_args "$@"; set -- "${args[@]}"
[ -n "$all" ] && opt=-x
edebug "clean_action" edebug "clean_action"
ensure_projdir ensure_projdir
local cleans local cleans
setx cleans=git clean -nd $opt "$@" setx cleans=_clean_git_clean -n "$@"
[ -n "$cleans" ] || return 0 if [ -n "$cleans" ]; then
if check_interaction -c; then if check_interaction -c; then
eecho "$cleans" einfo "via git clean"
ask_yesno "Voulez-vous supprimer ces fichiers?" O || die eecho "$cleans"
ask_yesno "Voulez-vous supprimer ces fichiers?" O || die
fi
_clean_git_clean -f "$@" || die
fi 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
} }
##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~