finaliser l'implémentation

This commit is contained in:
Jephté Clain 2018-03-01 10:22:29 +04:00
parent 1ec281d746
commit 7408760ca7
3 changed files with 37 additions and 19 deletions

View File

@ -40,8 +40,5 @@
# Activer le mode offline pour git (pas de push automatique) # Activer le mode offline pour git (pas de push automatique)
#export UTOOLS_VCS_OFFLINE=1 #export UTOOLS_VCS_OFFLINE=1
# Activer automatiquement l'option --clean pour 'uproject update'
#export UTOOLS_VCS_CLEANUPDATE=1
# Faire un alias ssh pour ussh # Faire un alias ssh pour ussh
#export UTOOLS_USSH_ALIAS=1 #export UTOOLS_USSH_ALIAS=1

View File

@ -441,7 +441,7 @@ function git_commit() {
function git_status() { function git_status() {
git status "$@" git status "$@"
} }
function __git_update_lbranches() { function __gu_list_lbranches() {
git for-each-ref refs/heads/ --format='%(refname:short)' | git for-each-ref refs/heads/ --format='%(refname:short)' |
grep -vF master | grep -vF master |
grep -vF develop | grep -vF develop |
@ -449,20 +449,16 @@ function __git_update_lbranches() {
grep -v '^hotfix-' grep -v '^hotfix-'
} }
function git_update() { function git_update() {
local args autoff=1 clean=auto local args clean= autoff=1
parse_opts + "${PRETTYOPTS[@]}" \ parse_opts + "${PRETTYOPTS[@]}" \
-x '$_vcs_unsupported -x' \ -x '$_vcs_unsupported -x' \
-c,--clean-before clean=1 \ -c,--clean-before clean=1 \
--no-clean-before clean= \
-n,--no-autoff autoff= \ -n,--no-autoff autoff= \
@ args -- "$@" && set -- "${args[@]}" || { @ args -- "$@" && set -- "${args[@]}" || {
eerror "$args" eerror "$args"
return 1 return 1
} }
if [ "$clean" == auto ]; then
[ -n "$UTOOLS_VCS_CLEANUPDATE" ] && clean=1 || clean=
fi
if [ -z "$autoff" ]; then if [ -z "$autoff" ]; then
git pull "$@" git pull "$@"
return $? return $?
@ -471,15 +467,41 @@ function git_update() {
local branch orig_branch restore_branch remote rbranch pbranch local branch orig_branch restore_branch remote rbranch pbranch
local -a branches prbranches crbranches dbranches local -a branches prbranches crbranches dbranches
orig_branch="$(git_get_branch)"
if [ -n "$clean" ]; then if [ -n "$clean" ]; then
local l r; local -a error
git_ensure_cleancheckout git_ensure_cleancheckout
array_from_lines prbranches "$(git_list_rbranches)"
if git_have_branch develop; then if git_have_branch develop; then
git checkout -q develop if [ "$orig_branch" != develop ]; then
array_from_lines branches "$(__git_update_lbranches)" estep "basculement sur la branche develop"
git checkout -q develop
restore_branch=1
fi
array_from_lines prbranches "$(git_list_rbranches)"
array_from_lines branches "$(__gu_list_lbranches)"
for branch in "${branches[@]}"; do for branch in "${branches[@]}"; do
#XXX pour chaque branche, vérifier l'origine if array_contains prbranches "origin/$branch"; then
l="$(git rev-parse --verify --quiet "$branch")"
r="$(git rev-parse --verify --quiet "origin/$branch")"
if [ "$l" == "$r" ]; then
estepn "$branch: branche locale supprimée"
git branch -q -D "$branch"
else
array_add error "$branch"
fi
else
estep "$branch: branche locale gardée"
fi
done done
if [ "${#error[*]}" -gt 0 ]; then
eerror "Les branches locales suivantes diffèrent de l'origine: ${COULEUR_JAUNE}${error[*]}${COULEUR_NORMALE}"
enote "Si vous êtes *certains* qu'il n'y a aucune modification locale à garder:
- supprimez ces branches manuellement
- ou faites-en une copie locale
puis relancez cette commande."
return 1
fi
fi fi
fi fi
@ -549,7 +571,6 @@ Make your choice then delete the local branches:
return 0 return 0
fi fi
orig_branch="$(git_get_branch)"
array_from_lines branches "$(git_list_branches)" array_from_lines branches "$(git_list_branches)"
for branch in "${branches[@]}"; do for branch in "${branches[@]}"; do
remote="$(git_get_branch_remote "$branch")" remote="$(git_get_branch_remote "$branch")"
@ -573,7 +594,10 @@ You can merge manually with: git checkout $branch; git merge $pbranch"
fi fi
fi fi
done done
[ -n "$restore_branch" ] && git checkout -q "$orig_branch" if [ -n "$restore_branch" ]; then
[ -n "$clean" ] && estep "rebasculement sur la branche $orig_branch"
git checkout -q "$orig_branch"
fi
return 0 return 0
} }
function git_push() { function git_push() {

View File

@ -43,15 +43,12 @@ COMMANDS
Afficher l'état des fichiers versionnés et non versionnés. Afficher l'état des fichiers versionnés et non versionnés.
update [-x] update [-x]
Mettre à jour la copie locale avec la copie sur le serveur. Mettre à jour la copie locale avec la copie sur le serveur.
-x Ne pas mettre à jour les références externes (si appliquable) -x Ne pas mettre à jour les références externes (uniquement pour svn)
-c, --clean-before -c, --clean-before
Avant de faire git pull, supprimer toutes les branches locales qui Avant de faire git pull, supprimer toutes les branches locales qui
sont à jour par rapport à l'origine. La copie de travail doit être sont à jour par rapport à l'origine. La copie de travail doit être
propre. Basculer sur la branche develop avant de supprimer les propre. Basculer sur la branche develop avant de supprimer les
branches. S'il n'y a pas de branche develop, c'est un NOP. branches. S'il n'y a pas de branche develop, c'est un NOP.
--no-clean-before
Neutraliser l'activation de l'option --clean-before par la variable
UTOOLS_VCS_CLEANUPDATE si elle est renseignée.
-n, --no-autoff -n, --no-autoff
Ne pas faire de fast-forward automatique pour toutes les branches Ne pas faire de fast-forward automatique pour toutes les branches
traquées. Par défaut, s'il n'y a pas de modifications locales, traquées. Par défaut, s'il n'y a pas de modifications locales,