réorganiser les scripts
This commit is contained in:
parent
8e347bc23e
commit
8ea5802429
@ -30,7 +30,7 @@ CONFIG_VARS=(
|
|||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
PMAN_TOOL_PUPS=UPSTREAM
|
PMAN_BRANCHES=(UPSTREAM DEVELOP FEATURE MAIN DIST)
|
||||||
PMAN_TOOL_PDEV=DEVELOP
|
PMAN_TOOL_PDEV=DEVELOP
|
||||||
PMAN_TOOL_PWIP=FEATURE
|
PMAN_TOOL_PWIP=FEATURE
|
||||||
PMAN_TOOL_PMAIN=MAIN
|
PMAN_TOOL_PMAIN=MAIN
|
||||||
@ -130,8 +130,6 @@ function should_delete_merged() {
|
|||||||
* IfMergeDest -- nom effectif de la branche source *si elle existe*, vide
|
* IfMergeDest -- nom effectif de la branche source *si elle existe*, vide
|
||||||
sinon"
|
sinon"
|
||||||
|
|
||||||
[ -n "$PMAN_TOOL" ] || PMAN_TOOL="$MYNAME"
|
|
||||||
PMAN_REF_BRANCH="PMAN_TOOL_${PMAN_TOOL^^}"; PMAN_REF_BRANCH="${!PMAN_REF_BRANCH}"
|
|
||||||
function set_pman_vars() {
|
function set_pman_vars() {
|
||||||
PmanRefBranch="${!PMAN_REF_BRANCH}"
|
PmanRefBranch="${!PMAN_REF_BRANCH}"
|
||||||
case "$PMAN_REF_BRANCH" in
|
case "$PMAN_REF_BRANCH" in
|
||||||
|
@ -3,6 +3,16 @@
|
|||||||
source "$(dirname -- "$0")/../load.sh" || exit 1
|
source "$(dirname -- "$0")/../load.sh" || exit 1
|
||||||
require: git pman pman.tool pman.conf
|
require: git pman pman.tool pman.conf
|
||||||
|
|
||||||
|
if [ "$MYNAME" == _pman ]; then
|
||||||
|
[ "$1" == --help ] && exit_with eecho "USAGE: _pman tool [args]"
|
||||||
|
PMAN_TOOL=_pman
|
||||||
|
PMAN_REF_BRANCH="${1^^}"; shift
|
||||||
|
array_contains PMAN_BRANCHES "$PMAN_REF_BRANCH" || die "$PMAN_REF_BRANCH: invalid branch"
|
||||||
|
else
|
||||||
|
PMAN_TOOL="${MYNAME^^}"
|
||||||
|
PMAN_REF_BRANCH="PMAN_TOOL_${PMAN_TOOL}"; PMAN_REF_BRANCH="${!PMAN_REF_BRANCH}"
|
||||||
|
fi
|
||||||
|
|
||||||
loaded_config=
|
loaded_config=
|
||||||
if check_gitdir; then
|
if check_gitdir; then
|
||||||
load_branches all
|
load_branches all
|
60
bin/pwip
60
bin/pwip
@ -1,60 +0,0 @@
|
|||||||
#!/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.conf
|
|
||||||
|
|
||||||
git_cleancheckout_DIRTY="\
|
|
||||||
Vous avez des modifications locales.
|
|
||||||
Enregistrez ces modifications avant de créer une nouvelle branche"
|
|
||||||
|
|
||||||
chdir=
|
|
||||||
Origin=
|
|
||||||
ConfigBranch=
|
|
||||||
ConfigFile=
|
|
||||||
[ -z "$PMAN_NO_PUSH" ] && Push=1 || Push=
|
|
||||||
args=(
|
|
||||||
"créer une branche de feature"
|
|
||||||
"<feature>"
|
|
||||||
-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. cette option est prioritaire sur --config-branch
|
|
||||||
par défaut, utiliser le fichier .pman.conf dans le répertoire du dépôt s'il existe"
|
|
||||||
-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"
|
|
||||||
)
|
|
||||||
parse_args "$@"; set -- "${args[@]}"
|
|
||||||
|
|
||||||
# charger la configuration
|
|
||||||
ensure_gitdir "$chdir"
|
|
||||||
load_branches all
|
|
||||||
load_config "$MYNAME"
|
|
||||||
load_branches current
|
|
||||||
|
|
||||||
branch="$1"
|
|
||||||
if [ -z "$branch" -a ${#FeatureBranches[*]} -eq 1 ]; then
|
|
||||||
branch="${FeatureBranches[0]}"
|
|
||||||
fi
|
|
||||||
[ -n "$branch" ] || die "Vous devez spécifier la branche à créer"
|
|
||||||
branch="$FEATURE${branch#$FEATURE}"
|
|
||||||
|
|
||||||
resolve_should_push
|
|
||||||
git_ensure_cleancheckout
|
|
||||||
|
|
||||||
if array_contains AllBranches "$branch"; then
|
|
||||||
git checkout -q "$branch"
|
|
||||||
else
|
|
||||||
# si la branche source n'existe pas, la créer
|
|
||||||
args=(--origin "$Origin")
|
|
||||||
if [ -n "$ConfigFile" ]; then args+=(--config-file "$ConfigFile")
|
|
||||||
elif [ -n "$ConfigBranch" ]; then args+=(--config-branch "$ConfigBranch")
|
|
||||||
fi
|
|
||||||
[ -z "$Push" ] && args+=(--no-push)
|
|
||||||
exec "$MYDIR/pman" "${args[@]}" "$branch"
|
|
||||||
fi
|
|
372
wip/pman
372
wip/pman
@ -1,372 +0,0 @@
|
|||||||
#!/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.conf
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Informations
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
SHOW_VARS=(
|
|
||||||
--Configuration
|
|
||||||
"${CONFIG_VARS[@]}"
|
|
||||||
--Paramètres
|
|
||||||
CurrentBranch
|
|
||||||
CurrentType=SrcType
|
|
||||||
)
|
|
||||||
|
|
||||||
function show_action() {
|
|
||||||
local var src
|
|
||||||
echo_setv ConfigBranch="$ConfigBranch"
|
|
||||||
echo_setv ConfigFile="$(ppath "$ConfigFile")"
|
|
||||||
for var in "${SHOW_VARS[@]}"; do
|
|
||||||
if [ "${var#--}" != "$var" ]; then
|
|
||||||
estep "${var#--}"
|
|
||||||
else
|
|
||||||
splitfsep "$var" = var src
|
|
||||||
[ -n "$src" ] || src="$var"
|
|
||||||
echo_setv "$var=${!src}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Initialisation
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
function _init_config() {
|
|
||||||
if [ ! -f .pman.conf -o -n "$ForceCreate" ]; then
|
|
||||||
ac_set_tmpfile config
|
|
||||||
cp "$ConfigFile" "$config"
|
|
||||||
"${EDITOR:-nano}" "$config"
|
|
||||||
[ -s "$config" ] || return 1
|
|
||||||
|
|
||||||
cp "$config" .pman.conf
|
|
||||||
if testdiff .pman.conf "$ConfigFile"; then
|
|
||||||
ConfigFile="$(pwd)/.pman.conf"
|
|
||||||
load_config
|
|
||||||
load_branches current "$SrcBranch"
|
|
||||||
fi
|
|
||||||
git add .pman.conf
|
|
||||||
fi
|
|
||||||
if [ ! -f ".gitignore" ]; then
|
|
||||||
echo >.gitignore "\
|
|
||||||
.~lock*#
|
|
||||||
.*.swp"
|
|
||||||
git add .gitignore
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
function init_repo_action() {
|
|
||||||
local -a push_branches; local config
|
|
||||||
|
|
||||||
[ ${#LocalBranches[*]} -eq 0 ] || die "Ce dépôt a déjà été initialisé"
|
|
||||||
|
|
||||||
_init_config || exit_with ewarn "Initialisation du dépôt annulée"
|
|
||||||
|
|
||||||
einfo "Création de la branche $MAIN"
|
|
||||||
git symbolic-ref HEAD "refs/heads/$MAIN"
|
|
||||||
git commit -m "commit initial"
|
|
||||||
push_branches+=("$MAIN")
|
|
||||||
|
|
||||||
einfo "Création de la branche $DEVELOP"
|
|
||||||
git checkout -b "$DEVELOP"
|
|
||||||
push_branches+=("$DEVELOP")
|
|
||||||
|
|
||||||
_push_branches
|
|
||||||
}
|
|
||||||
|
|
||||||
function init_config_action() {
|
|
||||||
local -a push_branches; local config
|
|
||||||
|
|
||||||
[ -f .pman.conf -a -z "$ForceCreate" ] && die "La configuration pman a déjà été initialisée"
|
|
||||||
|
|
||||||
resolve_should_push
|
|
||||||
|
|
||||||
_init_config || exit_with ewarn "Initialisation de la configuration annulée"
|
|
||||||
git commit -m "configuration pman"
|
|
||||||
push_branches+=("$CurrentBranch")
|
|
||||||
|
|
||||||
_push_branches
|
|
||||||
}
|
|
||||||
|
|
||||||
function _init_composer() {
|
|
||||||
if [ ! -f .composer.pman.yml -o -n "$ForceCreate" ]; then
|
|
||||||
ac_set_tmpfile config
|
|
||||||
cat >"$config" <<EOF
|
|
||||||
# -*- coding: utf-8 mode: yaml -*- vim:sw=2:sts=2:et:ai:si:sta:fenc=utf-8
|
|
||||||
|
|
||||||
composer:
|
|
||||||
match_prefix:
|
|
||||||
match_prefix-dev:
|
|
||||||
profiles: [ dev, dist ]
|
|
||||||
dev:
|
|
||||||
link: true
|
|
||||||
require:
|
|
||||||
reqire-dev:
|
|
||||||
dist:
|
|
||||||
link: false
|
|
||||||
require:
|
|
||||||
reqire-dev:
|
|
||||||
EOF
|
|
||||||
"${EDITOR:-nano}" "$config"
|
|
||||||
[ -s "$config" ] || return 1
|
|
||||||
|
|
||||||
cp "$config" .composer.pman.yml
|
|
||||||
git add .composer.pman.yml
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
function init_composer_action() {
|
|
||||||
local -a push_branches; local config
|
|
||||||
|
|
||||||
[ -f .composer.pman.yml -a -z "$ForceCreate" ] && die "La configuration pman composer a déjà été initialisée"
|
|
||||||
|
|
||||||
resolve_should_push
|
|
||||||
|
|
||||||
_init_composer || exit_with ewarn "Initialisation de la configuration annulée"
|
|
||||||
git commit -m "configuration pman composer"
|
|
||||||
push_branches+=("$CurrentBranch")
|
|
||||||
|
|
||||||
_push_branches
|
|
||||||
}
|
|
||||||
|
|
||||||
function _ensure_main_branch() {
|
|
||||||
[ -n "$MAIN" ] || die "La branche MAIN n'a pas été définie"
|
|
||||||
[ -n "$MainBranch" ] || die "$MAIN: cette branche n'existe pas (le dépôt a-t-il été initialisé?)"
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkout_main_action() {
|
|
||||||
if [ -z "$MainBranch" ]; then
|
|
||||||
array_contains AllBranches "$MAIN" && exit_with enote "\
|
|
||||||
$MAIN: une branche du même nom existe dans l'origine
|
|
||||||
git checkout $MAIN"
|
|
||||||
_ensure_main_branch
|
|
||||||
fi
|
|
||||||
git checkout -q "$MAIN"
|
|
||||||
}
|
|
||||||
|
|
||||||
function _ensure_develop_branch() {
|
|
||||||
[ -n "$DEVELOP" ] || die "La branche DEVELOP n'a pas été définie"
|
|
||||||
[ "$1" == init -o -n "$DevelopBranch" ] || die "$DEVELOP: cette branche n'existe pas (le dépôt a-t-il été initialisé?)"
|
|
||||||
}
|
|
||||||
|
|
||||||
function init_develop_action() {
|
|
||||||
local -a push_branches
|
|
||||||
|
|
||||||
if [ -z "$DevelopBranch" ]; then
|
|
||||||
array_contains AllBranches "$DEVELOP" && exit_with enote "\
|
|
||||||
$DEVELOP: une branche du même nom existe dans l'origine
|
|
||||||
git checkout $DEVELOP"
|
|
||||||
_ensure_main_branch
|
|
||||||
_ensure_develop_branch init
|
|
||||||
|
|
||||||
resolve_should_push
|
|
||||||
|
|
||||||
enote "Vous allez créer la branche ${COULEUR_VERTE}$DEVELOP${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$MAIN${COULEUR_NORMALE}"
|
|
||||||
ask_yesno "Voulez-vous continuer?" O || die
|
|
||||||
|
|
||||||
einfo "Création de la branche $DEVELOP"
|
|
||||||
git checkout -b "$DEVELOP" "$MAIN" || die
|
|
||||||
push_branches+=("$DEVELOP")
|
|
||||||
|
|
||||||
_push_branches
|
|
||||||
fi
|
|
||||||
git checkout -q "$DEVELOP"
|
|
||||||
}
|
|
||||||
|
|
||||||
function _ensure_upstream_branch() {
|
|
||||||
[ -n "$UPSTREAM" ] || die "La branche UPSTREAM n'a pas été définie"
|
|
||||||
[ "$1" == init -o -n "$UpstreamBranch" ] || die "$UPSTREAM: cette branche n'existe pas (le dépôt a-t-il été initialisé?)"
|
|
||||||
}
|
|
||||||
|
|
||||||
function init_upstream_action() {
|
|
||||||
local -a push_branches; local config
|
|
||||||
|
|
||||||
if [ -z "$UpstreamBranch" ]; then
|
|
||||||
array_contains AllBranches "$UPSTREAM" && exit_with enote "\
|
|
||||||
$UPSTREAM: une branche du même nom existe dans l'origine
|
|
||||||
git checkout $UPSTREAM"
|
|
||||||
_ensure_develop_branch
|
|
||||||
_ensure_upstream_branch init
|
|
||||||
|
|
||||||
resolve_should_push
|
|
||||||
|
|
||||||
enote "Vous allez créer la branche ${COULEUR_VERTE}$UPSTREAM${COULEUR_NORMALE}"
|
|
||||||
ask_yesno "Voulez-vous continuer?" O || die
|
|
||||||
|
|
||||||
# faire une copie de la configuration actuelle
|
|
||||||
ac_set_tmpfile config
|
|
||||||
cp "$ConfigFile" "$config"
|
|
||||||
|
|
||||||
einfo "Création de la branche $UPSTREAM"
|
|
||||||
git checkout --orphan "$UPSTREAM" || die
|
|
||||||
git rm -rf .
|
|
||||||
cp "$config" .pman.conf
|
|
||||||
git add .pman.conf
|
|
||||||
git commit -m "commit initial"
|
|
||||||
push_branches+=("$UPSTREAM")
|
|
||||||
|
|
||||||
einfo "Fusion dans $DEVELOP"
|
|
||||||
git checkout "$DEVELOP"
|
|
||||||
git merge \
|
|
||||||
--no-ff -m "<pman>Intégration initiale de la branche $UPSTREAM" \
|
|
||||||
-srecursive -Xours --allow-unrelated-histories \
|
|
||||||
"$UPSTREAM"
|
|
||||||
push_branches+=("$DEVELOP")
|
|
||||||
|
|
||||||
_push_branches
|
|
||||||
fi
|
|
||||||
git checkout -q "$UPSTREAM"
|
|
||||||
}
|
|
||||||
|
|
||||||
function _ensure_dist_branch() {
|
|
||||||
[ -n "$DIST" ] || die "La branche DIST n'a pas été définie"
|
|
||||||
[ "$1" == init -o -n "$DistBranch" ] || die "$DIST: cette branche n'existe pas (le dépôt a-t-il été initialisé?)"
|
|
||||||
}
|
|
||||||
|
|
||||||
function init_dist_action() {
|
|
||||||
local -a push_branches
|
|
||||||
|
|
||||||
if [ -z "$DistBranch" ]; then
|
|
||||||
array_contains AllBranches "$DIST" && exit_with enote "\
|
|
||||||
$DIST: une branche du même nom existe dans l'origine
|
|
||||||
git checkout $DIST"
|
|
||||||
_ensure_main_branch
|
|
||||||
_ensure_dist_branch init
|
|
||||||
|
|
||||||
resolve_should_push
|
|
||||||
|
|
||||||
enote "Vous allez créer la branche ${COULEUR_VERTE}$DIST${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$MAIN${COULEUR_NORMALE}"
|
|
||||||
ask_yesno "Voulez-vous continuer?" O || die
|
|
||||||
|
|
||||||
einfo "Création de la branche $DIST"
|
|
||||||
git checkout -b "$DIST" "$MAIN" || die
|
|
||||||
push_branches+=("$DIST")
|
|
||||||
|
|
||||||
_push_branches
|
|
||||||
fi
|
|
||||||
git checkout -q "$DIST"
|
|
||||||
}
|
|
||||||
|
|
||||||
function init_feature_action() {
|
|
||||||
local -a push_branches; local branch
|
|
||||||
|
|
||||||
[ -n "$FEATURE" ] || die "La branche FEATURE n'a pas été définie"
|
|
||||||
branch="${1#$FEATURE}"
|
|
||||||
[ -n "$branch" ] || die "Vous devez spécifier le nom de la branche"
|
|
||||||
branch="$FEATURE$branch"
|
|
||||||
|
|
||||||
if ! array_contains LocalBranches "$branch"; then
|
|
||||||
array_contains AllBranches "$branch" && exit_with enote "\
|
|
||||||
$branch: une branche du même nom existe dans l'origine
|
|
||||||
git checkout $branch"
|
|
||||||
_ensure_develop_branch
|
|
||||||
|
|
||||||
resolve_should_push
|
|
||||||
|
|
||||||
enote "Vous allez créer la branche ${COULEUR_VERTE}$branch${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$DEVELOP${COULEUR_NORMALE}"
|
|
||||||
ask_yesno "Voulez-vous continuer?" O || die
|
|
||||||
|
|
||||||
einfo "Création de la branche $branch"
|
|
||||||
git checkout -b "$branch" "$DEVELOP" || die
|
|
||||||
push_branches+=("$branch")
|
|
||||||
|
|
||||||
_push_branches
|
|
||||||
fi
|
|
||||||
git checkout -q "$branch"
|
|
||||||
}
|
|
||||||
|
|
||||||
function init_action() {
|
|
||||||
local what="${1:-develop}"; shift
|
|
||||||
case "$what" in
|
|
||||||
init|repo|r) init_repo_action "$@";;
|
|
||||||
config) init_config_action "$@";;
|
|
||||||
composer) init_composer_action "$@";;
|
|
||||||
main|m) checkout_main_action;;
|
|
||||||
develop|dev|d) init_develop_action "$@";;
|
|
||||||
upstream|up|u) init_upstream_action "$@";;
|
|
||||||
dist|x) init_dist_action "$@";;
|
|
||||||
*) init_feature_action "$what" "$@";;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Programme principal
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
chdir=
|
|
||||||
ConfigBranch=
|
|
||||||
ConfigFile=
|
|
||||||
action=init
|
|
||||||
Origin=
|
|
||||||
[ -z "$PMAN_NO_PUSH" ] && Push=1 || Push=
|
|
||||||
ForceCreate=
|
|
||||||
args=(
|
|
||||||
"gérer un projet git"
|
|
||||||
"\
|
|
||||||
repo|config|composer
|
|
||||||
develop|upstream|dist
|
|
||||||
|
|
||||||
INITIALISATION
|
|
||||||
|
|
||||||
Par défaut, le script agit en mode initialisation qui permet de créer et/ou
|
|
||||||
configurer certaines branches du dépôt si elles n'existent pas déjà
|
|
||||||
|
|
||||||
repo
|
|
||||||
initialiser un dépôt vide et créer les branches $MAIN et $DEVELOP
|
|
||||||
|
|
||||||
develop
|
|
||||||
créer la branche $DEVELOP
|
|
||||||
upstream
|
|
||||||
créer la branche ${UPSTREAM:-UPSTREAM} en tant que source de la branche $DEVELOP
|
|
||||||
dist
|
|
||||||
créer la branche ${DIST:-DIST} en tant que destination de la branche $MAIN
|
|
||||||
anything
|
|
||||||
créer la branche ${FEATURE}anything à partir de la branche $DEVELOP"
|
|
||||||
-d:,--chdir:BASEDIR chdir= "répertoire dans lequel se placer avant de lancer les opérations"
|
|
||||||
-B:,--config-branch ConfigBranch= "++\
|
|
||||||
branche à partir de laquelle charger la configuration"
|
|
||||||
-c:,--config-file:CONFIG ConfigFile= "++\
|
|
||||||
fichier de configuration des branches. cette option est prioritaire sur --config-branch
|
|
||||||
par défaut, utiliser le fichier .pman.conf dans le répertoire du dépôt s'il existe"
|
|
||||||
-w,--show-config action=show "++\
|
|
||||||
afficher la configuration chargée"
|
|
||||||
--composer-select-profile action=composer_select_profile "\
|
|
||||||
sélectionner le profil composer spécifié en argument"
|
|
||||||
-O:,--origin Origin= "++\
|
|
||||||
origine vers laquelle pousser les branches"
|
|
||||||
-n,--no-push Push= "\
|
|
||||||
ne pas pousser les branches vers leur origine après leur création"
|
|
||||||
--push Push=1 "++\
|
|
||||||
pousser les branches vers leur origine après leur création.
|
|
||||||
c'est l'option par défaut"
|
|
||||||
-f,--force-create ForceCreate=1 "\
|
|
||||||
Avec config, forcer la (re)création du fichier .pman.conf"
|
|
||||||
)
|
|
||||||
parse_args "$@"; set -- "${args[@]}"
|
|
||||||
|
|
||||||
# charger la configuration
|
|
||||||
ensure_gitdir "$chdir"
|
|
||||||
load_branches all
|
|
||||||
load_config "$MYNAME"
|
|
||||||
load_branches current
|
|
||||||
|
|
||||||
# puis faire l'action que l'on nous demande
|
|
||||||
case "$action" in
|
|
||||||
show)
|
|
||||||
show_action "$@"
|
|
||||||
;;
|
|
||||||
init)
|
|
||||||
git_ensure_cleancheckout
|
|
||||||
init_action "$@"
|
|
||||||
;;
|
|
||||||
composer_select_profile)
|
|
||||||
exec "$MYDIR/_pman-$action.php" "$@"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
die "$action: action non implémentée"
|
|
||||||
;;
|
|
||||||
esac
|
|
262
wip/pmer
262
wip/pmer
@ -1,262 +0,0 @@
|
|||||||
#!/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.conf
|
|
||||||
|
|
||||||
git_cleancheckout_DIRTY="\
|
|
||||||
Vous avez des modifications locales.
|
|
||||||
Enregistrez ces modifications avant de fusionner la branche"
|
|
||||||
|
|
||||||
function show_action() {
|
|
||||||
local commits
|
|
||||||
setx commits=_list_commits
|
|
||||||
if [ -n "$commits" ]; then
|
|
||||||
if [ $ShowLevel -ge 2 ]; then
|
|
||||||
{
|
|
||||||
echo "\
|
|
||||||
# Commits à fusionner $SrcBranch --> $DestBranch
|
|
||||||
|
|
||||||
$commits
|
|
||||||
"
|
|
||||||
_sd_COLOR=always _show_diff
|
|
||||||
} | less -eRF
|
|
||||||
else
|
|
||||||
einfo "Commits à fusionner $SrcBranch --> $DestBranch"
|
|
||||||
eecho "$commits"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function ensure_branches() {
|
|
||||||
[ -n "$SrcBranch" -a -n "$DestBranch" ] ||
|
|
||||||
die "$SrcBranch: Aucune configuration de fusion trouvée pour cette branche"
|
|
||||||
|
|
||||||
array_contains LocalBranches "$SrcBranch" || die "$SrcBranch: branche source introuvable"
|
|
||||||
array_contains LocalBranches "$DestBranch" || die "$DestBranch: branche destination introuvable"
|
|
||||||
}
|
|
||||||
|
|
||||||
function merge_action() {
|
|
||||||
[ -z "$ShouldPush" ] && enote "\
|
|
||||||
L'option --no-push a été forcée puisque ce dépôt n'a pas d'origine"
|
|
||||||
|
|
||||||
enote "\
|
|
||||||
Ce script va
|
|
||||||
- fusionner la branche ${COULEUR_BLEUE}$SrcBranch${COULEUR_NORMALE} dans ${COULEUR_ROUGE}$DestBranch${COULEUR_NORMALE}${Push:+
|
|
||||||
- pousser les branches modifiées}"
|
|
||||||
ask_yesno "Voulez-vous continuer?" O || die
|
|
||||||
|
|
||||||
local script=".git/pman-merge.sh"
|
|
||||||
local -a push_branches delete_branches
|
|
||||||
local hook
|
|
||||||
local comment=
|
|
||||||
local or_die=" || exit 1"
|
|
||||||
|
|
||||||
_mscript_start
|
|
||||||
_scripta <<EOF
|
|
||||||
################################################################################
|
|
||||||
# merge
|
|
||||||
if [ -n "\$merge" ]; then
|
|
||||||
esection "Fusionner la branche"
|
|
||||||
EOF
|
|
||||||
hook="BEFORE_MERGE_${SrcType^^}"; [ -n "${!hook}" ] && _scripta <<EOF
|
|
||||||
(
|
|
||||||
${!hook}
|
|
||||||
)$or_die
|
|
||||||
EOF
|
|
||||||
_mscript_merge_branch
|
|
||||||
hook="AFTER_MERGE_${SrcType^^}"; [ -n "${!hook}" ] && _scripta <<EOF
|
|
||||||
(
|
|
||||||
${!hook}
|
|
||||||
)$or_die
|
|
||||||
EOF
|
|
||||||
_scripta <<EOF
|
|
||||||
fi
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if [ -n "$ShouldDelete" ]; then
|
|
||||||
_scripta <<EOF
|
|
||||||
################################################################################
|
|
||||||
# delete
|
|
||||||
if [ -n "\$delete" ]; then
|
|
||||||
esection "Supprimer la branche"
|
|
||||||
EOF
|
|
||||||
_mscript_delete_branch
|
|
||||||
hook="AFTER_DELETE_${SrcType^^}"; [ -n "${!hook}" ] && _scripta <<EOF
|
|
||||||
(
|
|
||||||
${!hook}
|
|
||||||
)$or_die
|
|
||||||
EOF
|
|
||||||
_scripta <<EOF
|
|
||||||
fi
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
_scripta <<EOF
|
|
||||||
################################################################################
|
|
||||||
# push
|
|
||||||
if [ -n "\$push" ]; then
|
|
||||||
esection "Pousser les branches"
|
|
||||||
EOF
|
|
||||||
hook="BEFORE_PUSH_${DestType^^}"; [ -n "${!hook}" ] && _scripta <<EOF
|
|
||||||
(
|
|
||||||
${!hook}
|
|
||||||
)$or_die
|
|
||||||
EOF
|
|
||||||
_script_push_branches
|
|
||||||
if [ ${#delete_branches[*]} -gt 0 ]; then
|
|
||||||
_scripta <<<"if [ -n \"\$delete\" ]; then"
|
|
||||||
push_branches=("${delete_branches[@]}")
|
|
||||||
_script_push_branches
|
|
||||||
_scripta <<<fi
|
|
||||||
fi
|
|
||||||
hook="AFTER_PUSH_${DestType^^}"; [ -n "${!hook}" ] && _scripta <<EOF
|
|
||||||
(
|
|
||||||
${!hook}
|
|
||||||
)$or_die
|
|
||||||
EOF
|
|
||||||
_scripta <<EOF
|
|
||||||
fi
|
|
||||||
EOF
|
|
||||||
|
|
||||||
[ -n "$Delete" -o -z "$ShouldDelete" ] && Deleted=1 || Deleted=
|
|
||||||
[ -n "$ShouldDelete" -a -n "$Delete" ] && ShouldDelete=
|
|
||||||
[ -n "$ShouldPush" -a -n "$Push" ] && ShouldPush=
|
|
||||||
if [ -n "$_Fake" ]; then
|
|
||||||
cat "$script"
|
|
||||||
elif ! "$script" merge ${Delete:+delete} ${Push:+push}; then
|
|
||||||
eimportant "\
|
|
||||||
Le script $script a été lancé avec les arguments 'merge${Delete:+ delete}${Push:+ push}'
|
|
||||||
En cas d'erreur de merge, veuillez corriger les erreurs puis continuer avec
|
|
||||||
git merge --continue
|
|
||||||
Sinon, veuillez consulter le script et/ou le relancer
|
|
||||||
./$script${Delete:+ delete}${Push:+ push}"
|
|
||||||
die
|
|
||||||
elif [ -n "$Deleted" -a -n "$Push" ]; then
|
|
||||||
[ -n "$_KeepScript" ] || rm "$script"
|
|
||||||
[ -n "$AfterMerge" ] && eval "$AfterMerge"
|
|
||||||
else
|
|
||||||
local msg="\
|
|
||||||
Le script $script a été lancé avec les arguments 'merge${Delete:+ delete}${Push:+ push}'
|
|
||||||
Vous pouvez consulter le script et/ou le relancer
|
|
||||||
./$script${ShouldDelete:+ delete}${ShouldPush:+ push}"
|
|
||||||
[ -n "$AfterMerge" ] && msg="$msg
|
|
||||||
Il y a aussi les commandes supplémentaires suivantes:
|
|
||||||
${AfterMerge//
|
|
||||||
/
|
|
||||||
}"
|
|
||||||
einfo "$msg"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Programme principal
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
chdir=
|
|
||||||
Origin=
|
|
||||||
ConfigBranch=
|
|
||||||
ConfigFile=
|
|
||||||
_Fake=
|
|
||||||
_KeepScript=
|
|
||||||
action=merge
|
|
||||||
ShowLevel=0
|
|
||||||
TechMerge=
|
|
||||||
SquashMsg=
|
|
||||||
[ -z "$PMAN_NO_PUSH" ] && Push=1 || Push=
|
|
||||||
[ -z "$PMAN_NO_DELETE" ] && Delete=1 || Delete=
|
|
||||||
AfterMerge=
|
|
||||||
args=(
|
|
||||||
"fusionner la branche source dans la branche destination correspondante"
|
|
||||||
" [source]
|
|
||||||
|
|
||||||
CONFIGURATION
|
|
||||||
|
|
||||||
Le fichier .pman.conf contient la configuration des branches. Les variables
|
|
||||||
supplémentaires suivantes peuvent être définies:
|
|
||||||
BEFORE_MERGE_<srcType>
|
|
||||||
AFTER_MERGE_<srcType>
|
|
||||||
AFTER_DELETE_<srcType>
|
|
||||||
BEFORE_PUSH_<destType>
|
|
||||||
AFTER_PUSH_<destType>
|
|
||||||
srcType et destType pouvant valoir UPSTREAM, DEVELOP, FEATURE, RELEASE, MAIN, HOTFIX, DIST"
|
|
||||||
-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. cette option est prioritaire sur --config-branch
|
|
||||||
par défaut, utiliser le fichier .pman.conf dans le répertoire du dépôt s'il existe"
|
|
||||||
--fake _Fake=1 "++option non documentée"
|
|
||||||
--keep-script _KeepScript=1 "++option non documentée"
|
|
||||||
-w,--show '$action=show; inc@ ShowLevel' "\
|
|
||||||
lister les modifications qui seraient fusionnées dans la branche destination"
|
|
||||||
-b,--rebase action=rebase "\
|
|
||||||
lancer git rebase -i sur la branche source. cela permet de réordonner les
|
|
||||||
commits pour nettoyer l'historique avant la fusion"
|
|
||||||
--merge action=merge "++\
|
|
||||||
fusionner la branche source dans la branche destination correspondante.
|
|
||||||
c'est l'action par défaut"
|
|
||||||
--tech-merge TechMerge=1 "++option non documentée"
|
|
||||||
-s:,--squash:COMMIT_MSG SquashMsg= "\
|
|
||||||
fusionner les modifications de la branche comme un seul commit.
|
|
||||||
cette option ne devrait pas être utilisée avec --no-delete"
|
|
||||||
-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"
|
|
||||||
-k,--no-delete Delete= "\
|
|
||||||
ne pas supprimer la branche après la fusion dans la destination"
|
|
||||||
--delete Delete=1 "++\
|
|
||||||
supprimer la branche après la fusion dans la destination.
|
|
||||||
c'est l'option par défaut"
|
|
||||||
-f,--force-merge ForceMerge=1 "++\
|
|
||||||
forcer la fusion pour une branche qui devrait être traitée par prel"
|
|
||||||
-a:,--after-merge AfterMerge= "\
|
|
||||||
évaluer le script spécifié après une fusion *réussie*"
|
|
||||||
)
|
|
||||||
parse_args "$@"; set -- "${args[@]}"
|
|
||||||
|
|
||||||
# charger la configuration
|
|
||||||
ensure_gitdir "$chdir"
|
|
||||||
load_branches all
|
|
||||||
load_config "$MYNAME"
|
|
||||||
load_branches current "$1"
|
|
||||||
|
|
||||||
resolve_should_push quiet
|
|
||||||
|
|
||||||
# puis faire l'action que l'on nous demande
|
|
||||||
case "$action" in
|
|
||||||
show)
|
|
||||||
git_check_cleancheckout || ewarn "$git_cleancheckout_DIRTY"
|
|
||||||
ensure_branches
|
|
||||||
show_action "$@"
|
|
||||||
;;
|
|
||||||
merge)
|
|
||||||
ShouldDelete=1
|
|
||||||
no_merge_msg="$SrcBranch: cette branche doit être fusionnée dans $DestBranch avec prel"
|
|
||||||
if [ "$SrcType" == develop ]; then
|
|
||||||
[ -z "$ForceMerge" ] && die "$no_merge_msg"
|
|
||||||
[ -n "$AfterMerge" ] || setx AfterMerge=qvals git checkout -q "$SrcBranch"
|
|
||||||
elif [ "$SrcType" == release -o "$SrcType" == hotfix ]; then
|
|
||||||
die "$no_merge_msg"
|
|
||||||
fi
|
|
||||||
# n'autoriser la suppression que pour feature
|
|
||||||
[ "$SrcType" == feature ] || ShouldDelete=
|
|
||||||
[ -z "$ShouldDelete" ] && Delete=
|
|
||||||
[ -z "$_Fake" ] && git_ensure_cleancheckout
|
|
||||||
if array_contains LocalBranches "$SrcBranch"; then
|
|
||||||
ensure_branches
|
|
||||||
merge_action "$@"
|
|
||||||
elif array_contains AllBranches "$SrcBranch"; then
|
|
||||||
enote "$SrcBranch: une branche du même nom existe dans l'origine"
|
|
||||||
die "$SrcBranch: branche locale introuvable"
|
|
||||||
else
|
|
||||||
die "$SrcBranch: branche introuvable"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
die "$action: action non implémentée"
|
|
||||||
;;
|
|
||||||
esac
|
|
292
wip/prel
292
wip/prel
@ -1,292 +0,0 @@
|
|||||||
#!/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.conf
|
|
||||||
|
|
||||||
git_cleancheckout_DIRTY="\
|
|
||||||
Vous avez des modifications locales.
|
|
||||||
Enregistrez ces modifications avant de créer une release"
|
|
||||||
|
|
||||||
function show_action() {
|
|
||||||
local commits
|
|
||||||
setx commits=_list_commits
|
|
||||||
if [ -n "$commits" ]; then
|
|
||||||
if [ $ShowLevel -ge 2 ]; then
|
|
||||||
{
|
|
||||||
echo "\
|
|
||||||
# Commits à fusionner $SrcBranch --> $DestBranch
|
|
||||||
|
|
||||||
$commits
|
|
||||||
"
|
|
||||||
_sd_COLOR=always _show_diff
|
|
||||||
} | less -eRF
|
|
||||||
else
|
|
||||||
einfo "Commits à fusionner $SrcBranch --> $DestBranch"
|
|
||||||
eecho "$commits"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function ensure_branches() {
|
|
||||||
[ -n "$SrcBranch" -a -n "$DestBranch" ] ||
|
|
||||||
die "$SrcBranch: Aucune configuration de fusion trouvée pour cette branche"
|
|
||||||
|
|
||||||
array_contains LocalBranches "$SrcBranch" || die "$SrcBranch: branche source introuvable"
|
|
||||||
array_contains LocalBranches "$DestBranch" || die "$DestBranch: branche destination introuvable"
|
|
||||||
|
|
||||||
Tag="$TAG_PREFIX$Version$TAG_SUFFIX"
|
|
||||||
local -a tags
|
|
||||||
setx -a tags=git tag -l "${TAG_PREFIX}*${TAG_SUFFIX}"
|
|
||||||
if [ -z "$ForceCreate" ]; then
|
|
||||||
array_contains tags "$Tag" && die "$Tag: le tag correspondant à la version existe déjà"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function create_release_action() {
|
|
||||||
if [ -n "$ReleaseBranch" ]; then
|
|
||||||
Version="${ReleaseBranch#$RELEASE}"
|
|
||||||
Tag="$TAG_PREFIX$Version$TAG_SUFFIX"
|
|
||||||
merge_release_action "$@"; return $?
|
|
||||||
elif [ -n "$HotfixBranch" ]; then
|
|
||||||
Version="${HotfixBranch#$HOTFIX}"
|
|
||||||
Tag="$TAG_PREFIX$Version$TAG_SUFFIX"
|
|
||||||
merge_hotfix_action "$@"; return $?
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ -n "$ManualRelease" ] && ewarn "\
|
|
||||||
L'option --no-merge a été forcée puisque ce dépôt ne supporte pas les releases automatiques"
|
|
||||||
[ -z "$ShouldPush" ] && enote "\
|
|
||||||
L'option --no-push a été forcée puisque ce dépôt n'a pas d'origine"
|
|
||||||
|
|
||||||
if [ -z "$Version" -a -n "$CurrentVersion" -a -f VERSION.txt ]; then
|
|
||||||
Version="$(<VERSION.txt)"
|
|
||||||
Tag="$TAG_PREFIX$Version$TAG_SUFFIX"
|
|
||||||
fi
|
|
||||||
if [ -z "$Version" ]; then
|
|
||||||
[ -f VERSION.txt ] && einfo "La version actuelle est $(<VERSION.txt)"
|
|
||||||
die "Vous devez spécifier la version de la nouvelle release avec l'une des options -v ou -C"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ReleaseBranch="${RELEASE}$Version"
|
|
||||||
if [ -n "$Merge" ]; then
|
|
||||||
enote "\
|
|
||||||
Ce script va:
|
|
||||||
- créer la branche de release ${COULEUR_VERTE}$ReleaseBranch${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$SrcBranch${COULEUR_NORMALE}
|
|
||||||
- la provisionner avec une description des changements
|
|
||||||
- la fusionner dans la branche destination ${COULEUR_ROUGE}$DestBranch${COULEUR_NORMALE}${Push:+
|
|
||||||
- pousser les branches modifiées}"
|
|
||||||
else
|
|
||||||
enote "\
|
|
||||||
Ce script va:
|
|
||||||
- créer la branche de release ${COULEUR_VERTE}$ReleaseBranch${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$SrcBranch${COULEUR_NORMALE}
|
|
||||||
- la provisionner avec une description des changements
|
|
||||||
Vous devrez:
|
|
||||||
- mettre à jour les informations de release puis relancer ce script"
|
|
||||||
fi
|
|
||||||
ask_yesno "Voulez-vous continuer?" O || die
|
|
||||||
|
|
||||||
local script=".git/pman-release.sh"
|
|
||||||
local -a push_branches push_tags
|
|
||||||
local comment=
|
|
||||||
local or_die=" || exit 1"
|
|
||||||
|
|
||||||
_rscript_start
|
|
||||||
_scripta <<EOF
|
|
||||||
################################################################################
|
|
||||||
# create
|
|
||||||
if [ -n "\$create" ]; then
|
|
||||||
esection "Création de la release"
|
|
||||||
EOF
|
|
||||||
[ -n "$BEFORE_CREATE_RELEASE" ] && _scripta <<EOF
|
|
||||||
(
|
|
||||||
$BEFORE_CREATE_RELEASE
|
|
||||||
)$or_die
|
|
||||||
EOF
|
|
||||||
_rscript_create_release_branch
|
|
||||||
[ -n "$AFTER_CREATE_RELEASE" ] && _scripta <<EOF
|
|
||||||
(
|
|
||||||
$AFTER_CREATE_RELEASE
|
|
||||||
)$or_die
|
|
||||||
EOF
|
|
||||||
_scripta <<EOF
|
|
||||||
fi
|
|
||||||
EOF
|
|
||||||
|
|
||||||
_scripta <<EOF
|
|
||||||
################################################################################
|
|
||||||
# merge
|
|
||||||
if [ -n "\$merge" ]; then
|
|
||||||
esection "Fusionner la release"
|
|
||||||
EOF
|
|
||||||
[ -n "$BEFORE_MERGE_RELEASE" ] && _scripta <<EOF
|
|
||||||
(
|
|
||||||
$BEFORE_MERGE_RELEASE
|
|
||||||
)$or_die
|
|
||||||
EOF
|
|
||||||
_rscript_merge_release_branch "$DestBranch" "$Tag"
|
|
||||||
_rscript_merge_release_branch "$SrcBranch"
|
|
||||||
_rscript_delete_release_branch
|
|
||||||
[ -n "$AFTER_MERGE_RELEASE" ] && _scripta <<EOF
|
|
||||||
(
|
|
||||||
$AFTER_MERGE_RELEASE
|
|
||||||
)$or_die
|
|
||||||
EOF
|
|
||||||
_scripta <<EOF
|
|
||||||
fi
|
|
||||||
EOF
|
|
||||||
|
|
||||||
_scripta <<EOF
|
|
||||||
################################################################################
|
|
||||||
# push
|
|
||||||
if [ -n "\$push" ]; then
|
|
||||||
esection "Pousser branches et tags"
|
|
||||||
EOF
|
|
||||||
[ -n "$BEFORE_PUSH_RELEASE" ] && _scripta <<EOF
|
|
||||||
(
|
|
||||||
$BEFORE_PUSH_RELEASE
|
|
||||||
)$or_die
|
|
||||||
EOF
|
|
||||||
_script_push_branches
|
|
||||||
_script_push_tags
|
|
||||||
[ -n "$AFTER_PUSH_RELEASE" ] && _scripta <<EOF
|
|
||||||
(
|
|
||||||
$AFTER_PUSH_RELEASE
|
|
||||||
)$or_die
|
|
||||||
EOF
|
|
||||||
_scripta <<EOF
|
|
||||||
fi
|
|
||||||
EOF
|
|
||||||
|
|
||||||
[ -z "$ManualRelease" -a -n "$Merge" ] && ShouldMerge= || ShouldMerge=1
|
|
||||||
[ -n "$ShouldPush" -a -n "$Push" ] && ShouldPush=
|
|
||||||
if [ -n "$_Fake" ]; then
|
|
||||||
cat "$script"
|
|
||||||
elif ! "$script" create ${Merge:+merge} ${Push:+push}; then
|
|
||||||
eimportant "\
|
|
||||||
Le script $script a été lancé avec les arguments 'create${Merge:+ merge}${Push:+ push}'
|
|
||||||
En cas d'erreur de merge, veuillez corriger les erreurs puis continuer avec
|
|
||||||
git merge --continue
|
|
||||||
Veuillez aussi consulter le script et/ou le relancer
|
|
||||||
./$script${Push:+ push}"
|
|
||||||
die
|
|
||||||
elif [ -n "$Merge" -a -n "$Push" ]; then
|
|
||||||
[ -n "$_KeepScript" ] || rm "$script"
|
|
||||||
else
|
|
||||||
einfo "\
|
|
||||||
Le script $script a été lancé avec les arguments 'create${Merge:+ merge}${Push:+ push}'
|
|
||||||
Vous pouvez consulter le script et/ou le relancer
|
|
||||||
./$script${ShouldMerge:+ merge}${ShouldPush:+ push}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function merge_release_action() {
|
|
||||||
enote "\
|
|
||||||
Vous allez:
|
|
||||||
- fusionner la branche de release ${COULEUR_VERTE}$ReleaseBranch${COULEUR_NORMALE}
|
|
||||||
dans la branche destination ${COULEUR_ROUGE}$DestBranch${COULEUR_NORMALE}"
|
|
||||||
ask_yesno "Voulez-vous continuer?" O || die
|
|
||||||
}
|
|
||||||
|
|
||||||
function merge_hotfix_action() {
|
|
||||||
enote "\
|
|
||||||
Vous allez intégrer la branche de hotfix ${COULEUR_JAUNE}$HotfixBranch${COULEUR_NORMALE}
|
|
||||||
dans la branche destination ${COULEUR_ROUGE}$DestBranch${COULEUR_NORMALE}"
|
|
||||||
ask_yesno "Voulez-vous continuer?" O || die
|
|
||||||
}
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Programme principal
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
chdir=
|
|
||||||
Origin=
|
|
||||||
ConfigBranch=
|
|
||||||
ConfigFile=
|
|
||||||
_Fake=
|
|
||||||
_KeepScript=
|
|
||||||
action=release
|
|
||||||
ShowLevel=0
|
|
||||||
[ -z "$PMAN_NO_MERGE" ] && Merge=1 || Merge=
|
|
||||||
[ -z "$PMAN_NO_PUSH" ] && Push=1 || Push=
|
|
||||||
Version=
|
|
||||||
CurrentVersion=
|
|
||||||
ForceCreate=
|
|
||||||
args=(
|
|
||||||
"faire une nouvelle release à partir de la branche source"
|
|
||||||
" -v VERSION [source]
|
|
||||||
|
|
||||||
CONFIGURATION
|
|
||||||
Le fichier .pman.conf contient la configuration des branches. Les variables
|
|
||||||
supplémentaires suivantes peuvent être définies:
|
|
||||||
BEFORE_CREATE_RELEASE
|
|
||||||
AFTER_CREATE_RELEASE
|
|
||||||
BEFORE_MERGE_RELEASE
|
|
||||||
AFTER_MERGE_RELEASE
|
|
||||||
BEFORE_PUSH_RELEASE
|
|
||||||
AFTER_PUSH_RELEASE"
|
|
||||||
-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. cette option est prioritaire sur --config-branch
|
|
||||||
par défaut, utiliser le fichier .pman.conf dans le répertoire du dépôt s'il existe"
|
|
||||||
--fake _Fake=1 "++option non documentée"
|
|
||||||
--keep-script _KeepScript=1 "++option non documentée"
|
|
||||||
-w,--show '$action=show; inc@ ShowLevel' "\
|
|
||||||
lister les modifications qui seraient intégrées dans la release"
|
|
||||||
--release action=release "++\
|
|
||||||
créer la release.
|
|
||||||
c'est l'action par défaut"
|
|
||||||
-k,--no-merge Merge= "\
|
|
||||||
ne pas fusionner la branche de release après l'avoir créée. implique --no-push"
|
|
||||||
--merge Merge=1 "++\
|
|
||||||
fusionner la branche de release après l'avoir créée.
|
|
||||||
c'est l'option par défaut"
|
|
||||||
-n,--no-push Push= "\
|
|
||||||
ne pas pousser les branches vers leur origine après la création de la release"
|
|
||||||
--push Push=1 "++\
|
|
||||||
pousser les branches vers leur origine après la création de la release.
|
|
||||||
c'est l'option par défaut"
|
|
||||||
-v:,--version:VERSION Version= "\
|
|
||||||
spécifier la version de la release à créer"
|
|
||||||
-C,--current-version CurrentVersion=1 "++\
|
|
||||||
si aucune version n'est spécifiée, prendre la version présente dans le fichier VERSION.txt"
|
|
||||||
-f,--force-create ForceCreate=1 "\
|
|
||||||
forcer la création de la release même si le tag correspond à la version existe déjà"
|
|
||||||
)
|
|
||||||
parse_args "$@"; set -- "${args[@]}"
|
|
||||||
|
|
||||||
# charger la configuration
|
|
||||||
ensure_gitdir "$chdir"
|
|
||||||
load_branches all
|
|
||||||
load_config "$MYNAME"
|
|
||||||
load_branches current "$1"; shift
|
|
||||||
|
|
||||||
[ -n "$Merge" -a -n "$NOAUTO" ] && ManualRelease=1 || ManualRelease=
|
|
||||||
[ -n "$ManualRelease" ] && Merge=
|
|
||||||
[ -z "$Merge" ] && Push=
|
|
||||||
|
|
||||||
resolve_should_push quiet
|
|
||||||
|
|
||||||
# puis faire l'action que l'on nous demande
|
|
||||||
case "$action" in
|
|
||||||
show)
|
|
||||||
git_check_cleancheckout || ewarn "$git_cleancheckout_DIRTY"
|
|
||||||
ensure_branches
|
|
||||||
show_action "$@"
|
|
||||||
;;
|
|
||||||
release)
|
|
||||||
[ -z "$_Fake" ] && git_ensure_cleancheckout
|
|
||||||
ensure_branches
|
|
||||||
case "$SrcType" in
|
|
||||||
release) merge_release_action "$@";;
|
|
||||||
hotfix) merge_hotfix_action "$@";;
|
|
||||||
*) create_release_action "$@";;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
die "$action: action non implémentée"
|
|
||||||
;;
|
|
||||||
esac
|
|
60
wip/pwip.orig
Executable file
60
wip/pwip.orig
Executable file
@ -0,0 +1,60 @@
|
|||||||
|
#!/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.conf
|
||||||
|
|
||||||
|
git_cleancheckout_DIRTY="\
|
||||||
|
Vous avez des modifications locales.
|
||||||
|
Enregistrez ces modifications avant de créer une nouvelle branche"
|
||||||
|
|
||||||
|
chdir=
|
||||||
|
Origin=
|
||||||
|
ConfigBranch=
|
||||||
|
ConfigFile=
|
||||||
|
[ -z "$PMAN_NO_PUSH" ] && Push=1 || Push=
|
||||||
|
args=(
|
||||||
|
"créer une branche de feature"
|
||||||
|
"<feature>"
|
||||||
|
-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. cette option est prioritaire sur --config-branch
|
||||||
|
par défaut, utiliser le fichier .pman.conf dans le répertoire du dépôt s'il existe"
|
||||||
|
-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"
|
||||||
|
)
|
||||||
|
parse_args "$@"; set -- "${args[@]}"
|
||||||
|
|
||||||
|
# charger la configuration
|
||||||
|
ensure_gitdir "$chdir"
|
||||||
|
load_branches all
|
||||||
|
load_config "$MYNAME"
|
||||||
|
load_branches current
|
||||||
|
|
||||||
|
branch="$1"
|
||||||
|
if [ -z "$branch" -a ${#FeatureBranches[*]} -eq 1 ]; then
|
||||||
|
branch="${FeatureBranches[0]}"
|
||||||
|
fi
|
||||||
|
[ -n "$branch" ] || die "Vous devez spécifier la branche à créer"
|
||||||
|
branch="$FEATURE${branch#$FEATURE}"
|
||||||
|
|
||||||
|
resolve_should_push
|
||||||
|
git_ensure_cleancheckout
|
||||||
|
|
||||||
|
if array_contains AllBranches "$branch"; then
|
||||||
|
git checkout -q "$branch"
|
||||||
|
else
|
||||||
|
# si la branche source n'existe pas, la créer
|
||||||
|
args=(--origin "$Origin")
|
||||||
|
if [ -n "$ConfigFile" ]; then args+=(--config-file "$ConfigFile")
|
||||||
|
elif [ -n "$ConfigBranch" ]; then args+=(--config-branch "$ConfigBranch")
|
||||||
|
fi
|
||||||
|
[ -z "$Push" ] && args+=(--no-push)
|
||||||
|
exec "$MYDIR/pman" "${args[@]}" "$branch"
|
||||||
|
fi
|
Loading…
x
Reference in New Issue
Block a user