feat: add fzf functions to interact with git worktrees
These have to be functions sadly because `cd` doesn't work otherwise. This just means there is more reason to have subcommand aliases on a shell level. :) Heavily based on nerdypeppers stuff[https://peppe.rs/posts/curing_a_case_of_git-UX/].
This commit is contained in:
parent
a74ea2571a
commit
180152ba4a
1 changed files with 48 additions and 0 deletions
|
@ -42,6 +42,54 @@ in {
|
|||
'';
|
||||
|
||||
initExtra = ''
|
||||
gwa() {
|
||||
[[ "$1" ]] || {
|
||||
echo "required branch name argument" >&2
|
||||
return 1
|
||||
}
|
||||
|
||||
local repo="''${PWD##*/}"
|
||||
local uuid="$(< /proc/sys/kernel/random/uuid)"
|
||||
local basepath="$HOME/worktrees"
|
||||
local path="$basepath/$repo-$uuid"
|
||||
|
||||
mkdir -p "$basepath"
|
||||
git worktree add "$path" -b "$1" && cd "$path"
|
||||
}
|
||||
|
||||
gwd() {
|
||||
local res="$(
|
||||
set -o pipefail
|
||||
git worktree list | \
|
||||
${pkgs.fzf}/bin/fzf --preview 'git log --color --decorate --oneline' \
|
||||
--preview-window=up \
|
||||
--cycle \
|
||||
--query "$1" |\
|
||||
cut -d' ' -f1
|
||||
)"
|
||||
|
||||
[[ $? -eq 0 ]] && echo "$res" && git worktree remove "$res"
|
||||
}
|
||||
|
||||
gwg() {
|
||||
local res="$(
|
||||
set -o pipefail
|
||||
|
||||
local trees="$(git worktree list | ${pkgs.fzf}/bin/fzf --filter "$1" --no-sort)"
|
||||
if [[ "$(wc -l <<<"$trees")" -eq 1 ]]; then
|
||||
printf '%s\n' "$trees"
|
||||
else
|
||||
printf '%s\n' "$trees" | \
|
||||
${pkgs.fzf}/bin/fzf --preview='git log --color --decorate --oneline' \
|
||||
--preview-window=up \
|
||||
--cycle \
|
||||
--query "$1"
|
||||
fi | cut -d' ' -f1
|
||||
)"
|
||||
|
||||
[[ $? -eq 0 ]] && echo "$res" && cd "$res"
|
||||
}
|
||||
|
||||
__prompt() {
|
||||
local status="$?"
|
||||
local row
|
||||
|
|
Loading…
Reference in a new issue