#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname -- "$0")/../load.sh" || exit 1 require: git pman pman.tool pman.conf loaded_config= if check_gitdir; then load_branches all load_config set_pman_vars load_branches current loaded_config=1 else set_pman_vars fi BranchDesc= MergeSrcDesc= MergeDestDesc= if [ -n "$PMAN_REF_BRANCH" ]; then BranchDesc="${COULEUR_BLANCHE}<$PMAN_REF_BRANCH>" [ -n "$PmanRefBranch" -a -n "$PMAN_UNIQUE" ] && BranchDesc="$BranchDesc ($PmanRefBranch)" BranchDesc="$BranchDesc${COULEUR_NORMALE}" fi if [ -n "$PMAN_MERGE_SRC" ]; then MergeSrcDesc="${COULEUR_BLEUE}<$PMAN_MERGE_SRC>" [ -n "$PmanMergeSrc" -a -n "$PMAN_UNIQUE" ] && MergeSrcDesc="$MergeSrcDesc ($PmanMergeSrc)" MergeSrcDesc="$MergeSrcDesc${COULEUR_NORMALE}" fi if [ -n "$PMAN_MERGE_DEST" ]; then MergeDestDesc="${COULEUR_ROUGE}<$PMAN_MERGE_DEST>" [ -n "$PmanMergeDest" -a -n "$PMAN_UNIQUE" ] && MergeDestDesc="$MergeDestDesc ($PmanMergeDest)" MergeDestDesc="$MergeDestDesc${COULEUR_NORMALE}" fi [ -n "$PMAN_UNIQUE" ] && purpose="gérer la branche $BranchDesc" || purpose="gérer les branches $BranchDesc" usage="--checkout" variables= args=( -d:,--chdir:BASEDIR chdir= "\ répertoire dans lequel se placer avant de lancer les opérations" -O:,--origin Origin= "++\ origine à partir de laquelle les branches distantes sont considérées" -B:,--config-branch ConfigBranch= "++\ branche à partir de laquelle charger la configuration" -c:,--config-file:CONFIG ConfigFile= "++\ fichier de configuration des branches. le fichier .pman.conf dans le répertoire du dépôt est utilisé par défaut s'il existe. cette option est prioritaire sur --config-branch" --fake _Fake=1 "++option non documentée" --keep-script _KeepScript=1 "++option non documentée" --dump action=dump "++afficher les noms des branches" ) if [ -n "$PmanRefBranch" -a -n "$PMAN_UNIQUE" ]; then args+=( --checkout action=checkout "++\ créer le cas échéant la branche $BranchDesc et basculer vers elle. c'est l'option par défaut" ) elif [ -z "$PMAN_UNIQUE" ]; then args+=( --checkout action=checkout "\ créer le cas échéant la branche $BranchDesc et basculer vers elle. c'est l'option par défaut" ) else args+=( --checkout action=checkout "\ créer la branche $MergeDestDesc et basculer vers elle. c'est l'option par défaut" ) fi if [ -n "$PMAN_MERGE_SRC" -a -n "$PMAN_MERGE_DEST" ]; then if [ -n "$PMAN_UNIQUE" ]; then usage="${usage}|--show|--merge" else usage="${usage} $PMAN_REF_BRANCH --show|--merge" fi [ "$PMAN_REF_BRANCH" != "$PMAN_MERGE_SRC" ] && bewareDir=" NB: la fusion se fait dans le sens inverse" || bewareDir= variables="\ Les variables supplémentaires suivantes peuvent être définies: BEFORE_MERGE_${PMAN_MERGE_SRC} AFTER_MERGE_${PMAN_MERGE_SRC}" args+=( -w,--show '$action=show; inc@ ShowLevel' "\ lister ce qui serait fusionné dans la branche $MergeDestDesc" # -b,--rebase action=rebase "\ #lancer git rebase -i sur la branche $MergeSrcDesc. cela permet de réordonner #les commits pour nettoyer l'historique avant la fusion" -m,--merge action=merge "\ fusionner la branche $MergeSrcDesc dans la branche $MergeDestDesc$bewareDir" --tech-merge TechMerge=1 "++option non documentée" -s:,--squash:COMMIT_MSG SquashMsg= "\ fusionner les modifications de la branche comme un seul commit" ) if [ -n "$PMAN_PREL_MERGE" ]; then args+=( -f,--force-merge ForceMerge=1 "++\ forcer la fusion pour une branche qui devrait être traitée par prel" ) fi args+=( -n,--no-push Push= "\ ne pas pousser les branches vers leur origine après la fusion" --push Push=1 "++\ pousser les branches vers leur origine après la fusion. c'est l'option par défaut" ) if [ -n "$PMAN_DELETE_MERGED" ]; then variables="${variables} AFTER_DELETE_${PMAN_MERGE_SRC}" args+=( -k,--no-delete Delete= "\ ne pas supprimer la branche $MergeSrcDesc après la fusion dans la branche $MergeDestDesc. cette option ne devrait pas être utilisée avec --squash" --delete Delete=1 "++\ supprimer la branche $MergeSrcDesc après la fusion dans la branche $MergeDestDesc. c'est l'option par défaut" ) fi if [ -n "$PMAN_MERGE_DEST" ]; then variables="${variables} BEFORE_PUSH_${PMAN_MERGE_DEST} AFTER_PUSH_${PMAN_MERGE_DEST}" fi args+=( -a:,--after-merge AfterMerge= "\ évaluer le script spécifié après une fusion *réussie*" ) fi chdir= Origin= ConfigBranch= ConfigFile= _Fake= _KeepScript= action=checkout ShowLevel=0 TechMerge= SquashMsg= Push=1 Delete=1 AfterMerge= args=( "$purpose" "\ $usage CONFIGURATION Le fichier .pman.conf contient la configuration des branches. $variables" "${args[@]}" ) parse_args "$@"; set -- "${args[@]}" if [ -z "$loaded_config" -o -n "$chdir" -o -n "$ConfigFile" -o -n "$ConfigBranch" ]; then # charger la configuration ensure_gitdir "$chdir" load_branches all load_config set_pman_vars load_branches current fi resolve_should_push quiet "${action}_action" "$@"