#!/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
}

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

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
    setx cwd=pwd
    for dir in "${dirs[@]}"; do
        cd "$dir" || die
        git_status --porcelain
        cd "$cwd"
    done
else
    # répertoire courant uniquement
    setx toplevel=git_get_toplevel
    [ -n "$toplevel" ] && Cwd="$toplevel"

    args=()
    isatty || args+=(--porcelain)
    git_status "${args[@]}"
fi