git:track: List remote refs only on request

List only the local heads by default and require the remote refs to be
passed as arguments. For example:

	git track origin

To make this easier, add support of an `--all` flag to list all remote
refs.
This commit is contained in:
2025-08-25 13:50:13 +02:00
parent ddb279da7b
commit 5767210dce

View File

@@ -1,6 +1,20 @@
#!/usr/bin/env zsh
git for-each-ref --format='%(upstream),%(refname)' refs/heads refs/remotes \
local idx="${@[(ei)--help]}"
local flags_end="${@[(ei)--]}"
if (( idx < flags_end )); then
printf "Usage: $0 [--all] [REMOTE]..."
return 0
fi
idx="${@[(ei)--all]}"
if (( idx < flags_end )); then
# Replace --all flag with empty string. Will be replaced with
# refs/remotes/ later so that all remotes are listed
set -- "${@[1,$((idx-1))]}" "" "${@[$((idx+1)),-1]}"
fi
git for-each-ref --format='%(upstream),%(refname)' refs/heads "${@/#/refs/remotes/}" \
| sort -d \
| sed -Ez '
s:(^|\n|,)refs/(heads|remotes/):\1:g