#!/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 function git_status() { local status r cwd status="$(git -c color.status=always status "$@" 2>&1)"; r=$? if [ -n "$status" ]; then cwd="$Cwd" [ -n "$cwd" ] || cwd="$(pwd)" setx cwd=ppath2 "$cwd" "$OrigCwd" etitle "$cwd" if [ $r -eq 0 ]; then echo "$status" else eerror "$status" fi eend fi } function git_statuses() { local cwd="$(pwd)" dir for dir in "$@"; do cd "$dir" || die git_status --porcelain cd "$cwd" done } chdir= all= composer= args=( "afficher l'état du dépôt" "[-d chdir] [-a patterns...] Si l'option -a est utilisée, ce script accepte comme arguments une liste de patterns permettant de filtrer les répertoires concernés" -d:,--chdir:BASEDIR chdir= "répertoire dans lequel se placer avant de lancer les opérations" -a,--all all=1 "faire l'opération sur tous les sous-répertoires de BASEDIR qui sont des dépôts git" -r,--composer composer=1 "faire l'opération sur tous les projets composer dépendants" ) parse_args "$@"; set -- "${args[@]}" setx OrigCwd=pwd if [ -n "$chdir" ]; then cd "$chdir" || die fi Cwd= if [ -n "$all" ]; then # liste de sous répertoires if [ $# -gt 0 ]; then # si on a une liste de patterns, l'utiliser setx -a dirs=ls_dirs . "$@" else dirs=() for dir in */.git; do [ -d "$dir" ] || continue dirs+=("${dir%/.git}") done fi git_statuses "${dirs[@]}" elif [ -n "$composer" ]; then # projets dépendants git_ensure_gitvcs setx toplevel=git_get_toplevel cd "$toplevel" || die setx cwd=ppath2 . "$OrigCwd" [ -f composer.json ] || die "$cwd: ce n'est pas un projet composer" setx -a dirs="$MYDIR/_pman-composer_local_deps.php" git_statuses "${dirs[@]}" else # répertoire courant uniquement git_ensure_gitvcs Cwd="$(git_get_toplevel)" args=() isatty || args+=(--porcelain) git_status "${args[@]}" fi