38 lines
816 B
Bash
Executable file
38 lines
816 B
Bash
Executable file
#!/bin/zsh
|
|
#dep:git
|
|
|
|
zparseopts -D -E u=untracked -untracked=untracked h=help -help=help
|
|
|
|
if [[ $help ]]; then
|
|
<<-HELP
|
|
Usage: git dirties [-u] [REPOS]
|
|
|
|
List which of the given repos (or repos that are direct subdirectories of
|
|
the current dir if none are given) have uncommitted changes to tracked files.
|
|
|
|
Options:
|
|
-u, --untracked Also show repos that have untracked files (but no changes)
|
|
HELP
|
|
exit 0
|
|
fi
|
|
|
|
if [[ -z $@ ]]; then
|
|
dirs=( *(/) )
|
|
else
|
|
dirs=( "$@" )
|
|
fi
|
|
|
|
if [[ -t 0 ]]; then printf '\e[92mRepos with uncommited changes:\e[0m\n' >&2; fi
|
|
|
|
for dir in $dirs; do
|
|
if [[ -d $dir/.git ]]; then
|
|
changes=$(git --git-dir=$dir/.git --work-tree=$dir status --porcelain)
|
|
if [[ -z $untracked ]]; then
|
|
changes=$(echo $changes | grep -v '^??')
|
|
fi
|
|
if [[ -n $changes ]]; then
|
|
echo $dir
|
|
fi
|
|
fi
|
|
done
|