Skip to content

Commit fc333ac

Browse files
committed
refactor: extract resolve_repo_context helper (#112)
Consolidates the 3-line repo context boilerplate (discover_repo_root, resolve_base_dir, cfg_default prefix) that was duplicated across 9 cmd_* handlers into a single resolve_repo_context() function in lib/core.sh.
1 parent c82d930 commit fc333ac

2 files changed

Lines changed: 27 additions & 38 deletions

File tree

bin/gtr

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -229,12 +229,8 @@ cmd_create() {
229229
fi
230230

231231
# Get repo info
232-
local repo_root
233-
repo_root=$(discover_repo_root) || exit 1
234-
235-
local base_dir prefix
236-
base_dir=$(resolve_base_dir "$repo_root")
237-
prefix=$(cfg_default gtr.worktrees.prefix GTR_WORKTREES_PREFIX "")
232+
resolve_repo_context || exit 1
233+
local repo_root="$_ctx_repo_root" base_dir="$_ctx_base_dir" prefix="$_ctx_prefix"
238234

239235
# Get branch name if not provided
240236
if [ -z "$branch_name" ]; then
@@ -437,10 +433,8 @@ cmd_remove() {
437433
exit 1
438434
fi
439435

440-
local repo_root base_dir prefix
441-
repo_root=$(discover_repo_root) || exit 1
442-
base_dir=$(resolve_base_dir "$repo_root")
443-
prefix=$(cfg_default gtr.worktrees.prefix GTR_WORKTREES_PREFIX "")
436+
resolve_repo_context || exit 1
437+
local repo_root="$_ctx_repo_root" base_dir="$_ctx_base_dir" prefix="$_ctx_prefix"
444438

445439
for identifier in $identifiers; do
446440
# Resolve target branch
@@ -536,10 +530,8 @@ cmd_rename() {
536530
exit 1
537531
fi
538532

539-
local repo_root base_dir prefix
540-
repo_root=$(discover_repo_root) || exit 1
541-
base_dir=$(resolve_base_dir "$repo_root")
542-
prefix=$(cfg_default gtr.worktrees.prefix GTR_WORKTREES_PREFIX "")
533+
resolve_repo_context || exit 1
534+
local repo_root="$_ctx_repo_root" base_dir="$_ctx_base_dir" prefix="$_ctx_prefix"
543535

544536
# Resolve old worktree
545537
local target is_main old_path old_branch
@@ -624,10 +616,8 @@ cmd_go() {
624616
fi
625617

626618
local identifier="$1"
627-
local repo_root base_dir prefix
628-
repo_root=$(discover_repo_root) || exit 1
629-
base_dir=$(resolve_base_dir "$repo_root")
630-
prefix=$(cfg_default gtr.worktrees.prefix GTR_WORKTREES_PREFIX "")
619+
resolve_repo_context || exit 1
620+
local repo_root="$_ctx_repo_root" base_dir="$_ctx_base_dir" prefix="$_ctx_prefix"
631621

632622
# Resolve target branch
633623
local target is_main worktree_path branch
@@ -684,10 +674,8 @@ cmd_run() {
684674
exit 1
685675
fi
686676

687-
local repo_root base_dir prefix
688-
repo_root=$(discover_repo_root) || exit 1
689-
base_dir=$(resolve_base_dir "$repo_root")
690-
prefix=$(cfg_default gtr.worktrees.prefix GTR_WORKTREES_PREFIX "")
677+
resolve_repo_context || exit 1
678+
local repo_root="$_ctx_repo_root" base_dir="$_ctx_base_dir" prefix="$_ctx_prefix"
691679

692680
# Resolve target branch
693681
local target is_main worktree_path branch
@@ -763,10 +751,8 @@ cmd_copy() {
763751
fi
764752

765753
# Get repo context
766-
local repo_root base_dir prefix
767-
repo_root=$(discover_repo_root) || exit 1
768-
base_dir=$(resolve_base_dir "$repo_root")
769-
prefix=$(cfg_default gtr.worktrees.prefix GTR_WORKTREES_PREFIX "")
754+
resolve_repo_context || exit 1
755+
local repo_root="$_ctx_repo_root" base_dir="$_ctx_base_dir" prefix="$_ctx_prefix"
770756

771757
# Resolve source path
772758
local src_target src_path
@@ -868,10 +854,8 @@ cmd_editor() {
868854
editor=$(cfg_default gtr.editor.default GTR_EDITOR_DEFAULT "none" defaults.editor)
869855
fi
870856

871-
local repo_root base_dir prefix
872-
repo_root=$(discover_repo_root) || exit 1
873-
base_dir=$(resolve_base_dir "$repo_root")
874-
prefix=$(cfg_default gtr.worktrees.prefix GTR_WORKTREES_PREFIX "")
857+
resolve_repo_context || exit 1
858+
local repo_root="$_ctx_repo_root" base_dir="$_ctx_base_dir" prefix="$_ctx_prefix"
875859

876860
# Resolve target branch
877861
local target worktree_path branch
@@ -944,10 +928,8 @@ cmd_ai() {
944928
# Load AI adapter
945929
load_ai_adapter "$ai_tool"
946930

947-
local repo_root base_dir prefix
948-
repo_root=$(discover_repo_root) || exit 1
949-
base_dir=$(resolve_base_dir "$repo_root")
950-
prefix=$(cfg_default gtr.worktrees.prefix GTR_WORKTREES_PREFIX "")
931+
resolve_repo_context || exit 1
932+
local repo_root="$_ctx_repo_root" base_dir="$_ctx_base_dir" prefix="$_ctx_prefix"
951933

952934
# Resolve target branch
953935
local target worktree_path branch
@@ -1080,10 +1062,8 @@ cmd_clean() {
10801062
log_info "Pruned stale worktree administrative files"
10811063
fi
10821064

1083-
local repo_root base_dir prefix
1084-
repo_root=$(discover_repo_root) || exit 1
1085-
base_dir=$(resolve_base_dir "$repo_root")
1086-
prefix=$(cfg_default gtr.worktrees.prefix GTR_WORKTREES_PREFIX "")
1065+
resolve_repo_context || exit 1
1066+
local repo_root="$_ctx_repo_root" base_dir="$_ctx_base_dir" prefix="$_ctx_prefix"
10871067

10881068
if [ ! -d "$base_dir" ]; then
10891069
log_info "No worktrees directory to clean"

lib/core.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,15 @@ list_worktrees() {
456456
git worktree list
457457
}
458458

459+
# Resolve common repo context used by most cmd_* handlers.
460+
# Sets globals: _ctx_repo_root, _ctx_base_dir, _ctx_prefix
461+
# Usage: resolve_repo_context || exit 1
462+
resolve_repo_context() {
463+
_ctx_repo_root=$(discover_repo_root) || return 1
464+
_ctx_base_dir=$(resolve_base_dir "$_ctx_repo_root")
465+
_ctx_prefix=$(cfg_default gtr.worktrees.prefix GTR_WORKTREES_PREFIX "")
466+
}
467+
459468
# List all worktree branch names (excluding main repo)
460469
# Usage: list_worktree_branches base_dir prefix
461470
# Returns: newline-separated list of branch names

0 commit comments

Comments
 (0)