Two things I use fuzzy finder for:
1. flog: go to git branches I had checked out in the past quickly
2. pr: preview and check out PRs I've been assigned to review
flog () {
branch="$(
git branch --sort=-committerdate --format="%(committerdate:relative)%09%(refname:short)%09%(subject)" \
| column -ts $'\t' \
| fzf \
| sed 's/.*ago \+\([^ ]*\) .*/\1/'
)"
git co $branch || (
echo -n "git co $branch" | pbcopy
)
}
errcho() {
echo "$@" 1>&2
}
jq_query=$(cat <<- EOF
map(
{ key: "\(.number)"
, value:
{ line: "\(.number):\(if .isDraft then "" else " " end):\(.author.login):\(.title):\(.headRefName)"
, body: "# \(.number): \(.title)
## \(.headRefName)
\(.body)"
}
}
)
| from_entries
EOF
)
pr () {
local gh_user=${1:-}
if [ -z "$gh_user" ]; then
gh_user="@me"
fi
tmpFile=$(mktemp /tmp/prs-XXXXXX.json)
cleanup () {
rm "$tmpFile"
}
trap cleanup EXIT
gh pr list -S "review-requested:${gh_user}" \
--json number,title,headRefName,body,author,isDraft \
| jq -r "$jq_query" > "$tmpFile"
preview_command="\
jq -r '.[\"{1}\"].body' $tmpFile \
| pandoc -f gfm -t markdown \
| glow -s light -
"
pr_number=$(
jq -r \
'to_entries | map(.value.line) | join("
")' \
"$tmpFile" \
| column -t -s: \
| fzf \
--ansi \
--delimiter=' ' \
--preview="$preview_command" \
--preview-window=up:80% \
| grep -o '^[0-9]\+'
)
if [ -n "$pr_number" ]; then
errcho "checking out #$pr_number"
gh pr checkout "$pr_number" && gh pr view --web "$pr_number" && git pull || echo -e "gh pr checkout $pr_number && gh pr view --web $pr_number && git pull"
else
errcho "canceled"
fi
}