#!/usr/bin/env bash # Helpers partagés par git-deploy et git-hotfix. À sourcer, pas à exécuter. # Config git-native (aucun .env) deploy_source() { git config deploy.source 2>/dev/null || echo master; } deploy_push() { git config --bool deploy.push 2>/dev/null || echo false; } # Erreur AVANT toute mutation : on sort sans rien avoir touché. die() { echo "✗ $*" >&2; exit 1; } # Refuse de continuer si une opération git est déjà en cours (merge/rebase/…). assert_clean_git_state() { local gd; gd=$(git rev-parse --git-dir) [ ! -e "$gd/MERGE_HEAD" ] || die "Un merge est déjà en cours. Termine-le d'abord." [ ! -e "$gd/CHERRY_PICK_HEAD" ] || die "Un cherry-pick est en cours. Termine-le d'abord." [ ! -e "$gd/REVERT_HEAD" ] || die "Un revert est en cours. Termine-le d'abord." [ -z "$(ls -d "$gd"/rebase-* 2>/dev/null)" ] || die "Un rebase est en cours. Termine-le d'abord." } # Affiche l'état + le plan, puis demande confirmation. Non → sortie sans mutation. confirm() { echo echo "── État actuel ─────────────────────────────" git status --short --branch echo "── Opérations prévues ──────────────────────" printf '%s\n' "$1" echo "────────────────────────────────────────────" local ans="" printf "Confirmer ? [O/n] " read -r ans || ans="" case "$ans" in n|N|non|Non|NON|no) echo "✗ Annulé — aucun changement effectué."; exit 0 ;; *) return 0 ;; esac }