git-my/git-my
David O'Trakoun ec1f02f166 shell syntax
2015-03-29 23:26:48 -04:00

73 lines
1.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# git-my v0.1
#
# Lists (stale) (branches|tags) in the remote named (origin) (where you were
# the last committer)
#
# Copyright (c) 2015 David O'Trakoun <me@davidosomething.com>
#
# Usage:
# git my
#
# Options:
# @todo NOT IMPLEMENTED
# -U|--username="gitconfig user.name"
# -R|--remote=origin
# -T|--tags
# -B|--branches
# -F|--filter=mine,stale
#
set -eu
_check_in_repository() {
git rev-parse --git-dir > /dev/null 2>&1
}
_filter_mine() {
local git_user
git_user=$(git config --get user.name)
# use eval to not parse the fmt string
local my_remotes
my_remotes=$(echo "$1" | grep -i "^$git_user")
echo "$my_remotes" | awk -F'\t' '{ print $2 }'
}
# @TODO
_filter_stales() {
local raw_stales
raw_stales=$(git remote prune --dry-run origin)
echo "$raw_stales"
}
_main() {
if ! _check_in_repository ; then
echo "This is not a git repository."
exit 1
fi
# user.name<TAB>branch.name
# the TAB is used as a delimiter to awk with
# shellcheck disable=SC2016
local fmt='
a=%(authorname)
r=%(refname)
b=${r#refs/remotes/origin/}
printf "%s\t%s\n" "$a" "$b"
'
local cmd_everyones_remotes
cmd_everyones_remotes=$(
git for-each-ref --shell --format="$fmt" refs/remotes/origin
)
local everyones_remotes
everyones_remotes=$(eval "$cmd_everyones_remotes")
_filter_mine "$everyones_remotes"
}
_main