Skip to content

Commit b680b3e

Browse files
committed
fix: address reviewer comments
1 parent 7e50ba6 commit b680b3e

1 file changed

Lines changed: 45 additions & 13 deletions

File tree

bin/git-forgit

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,12 +1003,20 @@ _forgit_ignore_clean() {
10031003
[[ -d "$FORGIT_GI_REPO_LOCAL" ]] && rm -rf "$FORGIT_GI_REPO_LOCAL"
10041004
}
10051005

1006+
_forgit_filter_existing_paths() {
1007+
while read -r path; do
1008+
[[ -d "$path" ]] && echo "$path"
1009+
done
1010+
}
1011+
10061012
_forgit_worktree_preview() {
10071013
local sha
10081014
# trailing space in grep to avoid matching worktrees with a common path
10091015
sha=$(git worktree list | grep "$1 " | awk '{print $2}')
1010-
# bare git-dir has no history
1011-
[[ "$sha" == "(bare)" ]] && return
1016+
if [[ "$sha" == "(bare)" ]]; then
1017+
printf "%b(bare)%b %s\n" '\e[0;33m' '\e[0m' 'No history for git dir'
1018+
return
1019+
fi
10121020
_forgit_worktree_preview_git_opts=()
10131021
_forgit_parse_array _forgit_worktree_preview_git_opts "$FORGIT_WORKTREE_PREVIEW_GIT_OPTS"
10141022
# the trailing '--' ensures that this works for branches that have a name
@@ -1018,9 +1026,10 @@ _forgit_worktree_preview() {
10181026

10191027
_forgit_worktree_jump() {
10201028
_forgit_inside_work_tree || _forgit_inside_git_dir || return 1
1021-
local count tree opts
1022-
count=$(git worktree list | wc -l)
1029+
local worktree_list count tree opts
1030+
worktree_list=$(git worktree list | grep -vE "prunable$" | awk '{print $1}' | _forgit_filter_existing_paths)
10231031

1032+
count=$(echo "$worktree_list" | wc -l)
10241033
[[ $count -eq 1 ]] && return 1
10251034

10261035
opts="
@@ -1030,7 +1039,7 @@ _forgit_worktree_jump() {
10301039
$FORGIT_WORKTREE_JUMP_FZF_OPTS
10311040
"
10321041

1033-
tree=$(git worktree list | awk '{print $1}' | FZF_DEFAULT_OPTS="$opts" fzf)
1042+
tree=$(echo "$worktree_list" | FZF_DEFAULT_OPTS="$opts" fzf)
10341043
[[ -z "$tree" ]] && return 1
10351044
echo "$tree"
10361045
}
@@ -1043,16 +1052,21 @@ _forgit_git_worktree_lock() {
10431052

10441053
_forgit_worktree_lock() {
10451054
_forgit_inside_work_tree || _forgit_inside_git_dir || return 1
1055+
if [[ $# -ne 0 ]]; then
1056+
git worktree lock "$@"
1057+
worktree_lock_status=$?
1058+
return $worktree_lock_status
1059+
fi
10461060
local tree opts
10471061

10481062
opts="
10491063
$FORGIT_FZF_DEFAULT_OPTS
1050-
+s -m --tiebreak=index
1064+
+s +m --tiebreak=index
10511065
--preview=\"$FORGIT worktree_preview {1}\"
10521066
$FORGIT_WORKTREE_LOCK_FZF_OPTS
10531067
"
10541068

1055-
tree=$(git worktree list | awk '{print $1}' | grep -v "(bare)" | FZF_DEFAULT_OPTS="$opts" fzf)
1069+
tree=$(git worktree list | grep -vE "\(bare\)|locked" | awk '{print $1}' | FZF_DEFAULT_OPTS="$opts" fzf)
10561070
[[ -z "$tree" ]] && return 1
10571071
_forgit_git_worktree_lock "$tree"
10581072
}
@@ -1065,32 +1079,50 @@ _forgit_git_worktree_remove() {
10651079

10661080
_forgit_worktree_remove() {
10671081
_forgit_inside_work_tree || _forgit_inside_git_dir || return 1
1068-
local tree opts
1082+
if [[ $# -ne 0 ]]; then
1083+
git worktree remove "$@"
1084+
worktree_remove_status=$?
1085+
return $worktree_remove_status
1086+
fi
1087+
local worktree_list tree opts
1088+
worktree_list=$(git worktree list | grep -v "(bare)")
1089+
1090+
count=$(echo "$worktree_list" | wc -l)
1091+
[[ $count -eq 1 ]] && return 1
10691092

10701093
opts="
10711094
$FORGIT_FZF_DEFAULT_OPTS
1072-
+s -m --tiebreak=index --header-lines=1
1095+
+s +m --tiebreak=index
10731096
--preview=\"$FORGIT worktree_preview {1}\"
10741097
$FORGIT_WORKTREE_REMOVE_FZF_OPTS
10751098
"
10761099

1077-
tree=$(git worktree list | awk '{print $1}' | grep -v "(bare)" | FZF_DEFAULT_OPTS="$opts" fzf)
1100+
tree=$(echo "$worktree_list" | awk '{print $1}' | FZF_DEFAULT_OPTS="$opts" fzf)
10781101
[[ -z "$tree" ]] && return 1
10791102
_forgit_git_worktree_remove "$tree"
10801103
}
10811104

10821105
_forgit_worktree_unlock() {
10831106
_forgit_inside_work_tree || _forgit_inside_git_dir || return 1
1084-
local tree opts
1107+
if [[ $# -ne 0 ]]; then
1108+
git worktree unlock "$@"
1109+
worktree_unlock_status=$?
1110+
return $worktree_unlock_status
1111+
fi
1112+
local worktree_list tree opts
1113+
1114+
worktree_list=$(git worktree list | grep -v "(bare)" | grep -E "locked$")
1115+
count=$(echo "$worktree_list" | wc -l)
1116+
[[ $count -eq 1 ]] && return 1
10851117

10861118
opts="
10871119
$FORGIT_FZF_DEFAULT_OPTS
1088-
+s -m --tiebreak=index --header-lines=1
1120+
+s +m --tiebreak=index
10891121
--preview=\"$FORGIT worktree_preview {1}\"
10901122
$FORGIT_WORKTREE_UNLOCK_FZF_OPTS
10911123
"
10921124

1093-
tree=$(git worktree list | awk '{print $1}' | grep -v "(bare)" | FZF_DEFAULT_OPTS="$opts" fzf)
1125+
tree=$(echo "$worktree_list" | awk '{print $1}' | FZF_DEFAULT_OPTS="$opts" fzf)
10941126
[[ -z "$tree" ]] && return 1
10951127
git worktree unlock "$tree"
10961128
}

0 commit comments

Comments
 (0)