96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.5 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
 | |
| }
 | |
| 
 | |
| # sans arguments, il y a un comportement spécial
 | |
| [ $# -eq 0 ] && NoArgs=1 || NoArgs=
 | |
| 
 | |
| 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[@]}"
 | |
| 
 | |
| if [ -n "$NoArgs" ]; then
 | |
|     # si aucun argument n'est spécifié et si on n'est pas dans un projet git,
 | |
|     # afficher le status de tous les sous répertoires
 | |
|     setx toplevel=git_get_toplevel
 | |
|     [ -z "$toplevel" ] && all=1
 | |
| fi
 | |
| 
 | |
| 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
 |