#!/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 status "$@" 2>&1)"; r=$? if [ -n "$status" ]; then setx cwd=ppath2 "$(pwd)" "$OrigCwd" etitle "$cwd" if [ $r -eq 0 ]; then echo "$status" else eerror "$status" fi eend fi } chdir= all= 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" ) parse_args "$@"; set -- "${args[@]}" setx OrigCwd=pwd if [ -n "$chdir" ]; then cd "$chdir" || die fi 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 setx cwd=pwd for dir in "${dirs[@]}"; do cd "$dir" || die git_status --porcelain cd "$cwd" done else # répertoire courant uniquement args=() isatty || args+=(--porcelain) git_status "${args[@]}" fi