86 lines
2.2 KiB
Bash
Executable File
86 lines
2.2 KiB
Bash
Executable File
#!/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
|