refactor(cmd): extract common manager creation boilerplate
Add getRig() helper in rig_helpers.go that encapsulates the common boilerplate for finding town root, loading rigs config, and retrieving a rig. This reduces duplication across 5 get*Manager functions: - getPolecatManager - getSessionManager - getCrewManager - getRefineryManager - getWitnessManager Closes gt-7sqi. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -8,7 +8,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/steveyegge/gastown/internal/config"
|
|
||||||
"github.com/steveyegge/gastown/internal/crew"
|
"github.com/steveyegge/gastown/internal/crew"
|
||||||
"github.com/steveyegge/gastown/internal/git"
|
"github.com/steveyegge/gastown/internal/git"
|
||||||
"github.com/steveyegge/gastown/internal/rig"
|
"github.com/steveyegge/gastown/internal/rig"
|
||||||
@@ -42,36 +41,23 @@ func inferRigFromCwd(townRoot string) (string, error) {
|
|||||||
|
|
||||||
// getCrewManager returns a crew manager for the specified or inferred rig.
|
// getCrewManager returns a crew manager for the specified or inferred rig.
|
||||||
func getCrewManager(rigName string) (*crew.Manager, *rig.Rig, error) {
|
func getCrewManager(rigName string) (*crew.Manager, *rig.Rig, error) {
|
||||||
// Find town root
|
// Handle optional rig inference from cwd
|
||||||
townRoot, err := workspace.FindFromCwdOrError()
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("not in a Gas Town workspace: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load rigs config
|
|
||||||
rigsConfigPath := filepath.Join(townRoot, "mayor", "rigs.json")
|
|
||||||
rigsConfig, err := config.LoadRigsConfig(rigsConfigPath)
|
|
||||||
if err != nil {
|
|
||||||
rigsConfig = &config.RigsConfig{Rigs: make(map[string]config.RigEntry)}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine rig
|
|
||||||
if rigName == "" {
|
if rigName == "" {
|
||||||
|
townRoot, err := workspace.FindFromCwdOrError()
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, fmt.Errorf("not in a Gas Town workspace: %w", err)
|
||||||
|
}
|
||||||
rigName, err = inferRigFromCwd(townRoot)
|
rigName, err = inferRigFromCwd(townRoot)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("could not determine rig (use --rig flag): %w", err)
|
return nil, nil, fmt.Errorf("could not determine rig (use --rig flag): %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get rig
|
_, r, err := getRig(rigName)
|
||||||
g := git.NewGit(townRoot)
|
|
||||||
rigMgr := rig.NewManager(townRoot, rigsConfig, g)
|
|
||||||
r, err := rigMgr.GetRig(rigName)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("rig '%s' not found", rigName)
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create crew manager
|
|
||||||
crewGit := git.NewGit(r.Path)
|
crewGit := git.NewGit(r.Path)
|
||||||
crewMgr := crew.NewManager(r, crewGit)
|
crewMgr := crew.NewManager(r, crewGit)
|
||||||
|
|
||||||
|
|||||||
@@ -10,14 +10,12 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/steveyegge/gastown/internal/config"
|
|
||||||
"github.com/steveyegge/gastown/internal/git"
|
"github.com/steveyegge/gastown/internal/git"
|
||||||
"github.com/steveyegge/gastown/internal/polecat"
|
"github.com/steveyegge/gastown/internal/polecat"
|
||||||
"github.com/steveyegge/gastown/internal/rig"
|
"github.com/steveyegge/gastown/internal/rig"
|
||||||
"github.com/steveyegge/gastown/internal/session"
|
"github.com/steveyegge/gastown/internal/session"
|
||||||
"github.com/steveyegge/gastown/internal/style"
|
"github.com/steveyegge/gastown/internal/style"
|
||||||
"github.com/steveyegge/gastown/internal/tmux"
|
"github.com/steveyegge/gastown/internal/tmux"
|
||||||
"github.com/steveyegge/gastown/internal/workspace"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Polecat command flags
|
// Polecat command flags
|
||||||
@@ -239,28 +237,11 @@ type PolecatListItem struct {
|
|||||||
|
|
||||||
// getPolecatManager creates a polecat manager for the given rig.
|
// getPolecatManager creates a polecat manager for the given rig.
|
||||||
func getPolecatManager(rigName string) (*polecat.Manager, *rig.Rig, error) {
|
func getPolecatManager(rigName string) (*polecat.Manager, *rig.Rig, error) {
|
||||||
// Find town root
|
_, r, err := getRig(rigName)
|
||||||
townRoot, err := workspace.FindFromCwdOrError()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("not in a Gas Town workspace: %w", err)
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load rigs config
|
|
||||||
rigsConfigPath := filepath.Join(townRoot, "mayor", "rigs.json")
|
|
||||||
rigsConfig, err := config.LoadRigsConfig(rigsConfigPath)
|
|
||||||
if err != nil {
|
|
||||||
rigsConfig = &config.RigsConfig{Rigs: make(map[string]config.RigEntry)}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get rig
|
|
||||||
g := git.NewGit(townRoot)
|
|
||||||
rigMgr := rig.NewManager(townRoot, rigsConfig, g)
|
|
||||||
r, err := rigMgr.GetRig(rigName)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("rig '%s' not found", rigName)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create polecat manager
|
|
||||||
polecatGit := git.NewGit(r.Path)
|
polecatGit := git.NewGit(r.Path)
|
||||||
mgr := polecat.NewManager(r, polecatGit)
|
mgr := polecat.NewManager(r, polecatGit)
|
||||||
|
|
||||||
|
|||||||
@@ -114,22 +114,9 @@ func init() {
|
|||||||
|
|
||||||
// getRefineryManager creates a refinery manager for a rig.
|
// getRefineryManager creates a refinery manager for a rig.
|
||||||
func getRefineryManager(rigName string) (*refinery.Manager, *rig.Rig, error) {
|
func getRefineryManager(rigName string) (*refinery.Manager, *rig.Rig, error) {
|
||||||
townRoot, err := workspace.FindFromCwdOrError()
|
_, r, err := getRig(rigName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("not in a Gas Town workspace: %w", err)
|
return nil, nil, err
|
||||||
}
|
|
||||||
|
|
||||||
rigsConfigPath := filepath.Join(townRoot, "mayor", "rigs.json")
|
|
||||||
rigsConfig, err := config.LoadRigsConfig(rigsConfigPath)
|
|
||||||
if err != nil {
|
|
||||||
rigsConfig = &config.RigsConfig{Rigs: make(map[string]config.RigEntry)}
|
|
||||||
}
|
|
||||||
|
|
||||||
g := git.NewGit(townRoot)
|
|
||||||
rigMgr := rig.NewManager(townRoot, rigsConfig, g)
|
|
||||||
r, err := rigMgr.GetRig(rigName)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("rig '%s' not found", rigName)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr := refinery.NewManager(r)
|
mgr := refinery.NewManager(r)
|
||||||
|
|||||||
36
internal/cmd/rig_helpers.go
Normal file
36
internal/cmd/rig_helpers.go
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"github.com/steveyegge/gastown/internal/config"
|
||||||
|
"github.com/steveyegge/gastown/internal/git"
|
||||||
|
"github.com/steveyegge/gastown/internal/rig"
|
||||||
|
"github.com/steveyegge/gastown/internal/workspace"
|
||||||
|
)
|
||||||
|
|
||||||
|
// getRig finds the town root and retrieves the specified rig.
|
||||||
|
// This is the common boilerplate extracted from get*Manager functions.
|
||||||
|
// Returns the town root path and rig instance.
|
||||||
|
func getRig(rigName string) (string, *rig.Rig, error) {
|
||||||
|
townRoot, err := workspace.FindFromCwdOrError()
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("not in a Gas Town workspace: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
rigsConfigPath := filepath.Join(townRoot, "mayor", "rigs.json")
|
||||||
|
rigsConfig, err := config.LoadRigsConfig(rigsConfigPath)
|
||||||
|
if err != nil {
|
||||||
|
rigsConfig = &config.RigsConfig{Rigs: make(map[string]config.RigEntry)}
|
||||||
|
}
|
||||||
|
|
||||||
|
g := git.NewGit(townRoot)
|
||||||
|
rigMgr := rig.NewManager(townRoot, rigsConfig, g)
|
||||||
|
r, err := rigMgr.GetRig(rigName)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("rig '%s' not found", rigName)
|
||||||
|
}
|
||||||
|
|
||||||
|
return townRoot, r, nil
|
||||||
|
}
|
||||||
@@ -181,28 +181,11 @@ func parseAddress(addr string) (rigName, polecatName string, err error) {
|
|||||||
|
|
||||||
// getSessionManager creates a session manager for the given rig.
|
// getSessionManager creates a session manager for the given rig.
|
||||||
func getSessionManager(rigName string) (*session.Manager, *rig.Rig, error) {
|
func getSessionManager(rigName string) (*session.Manager, *rig.Rig, error) {
|
||||||
// Find town root
|
_, r, err := getRig(rigName)
|
||||||
townRoot, err := workspace.FindFromCwdOrError()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("not in a Gas Town workspace: %w", err)
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load rigs config
|
|
||||||
rigsConfigPath := filepath.Join(townRoot, "mayor", "rigs.json")
|
|
||||||
rigsConfig, err := config.LoadRigsConfig(rigsConfigPath)
|
|
||||||
if err != nil {
|
|
||||||
rigsConfig = &config.RigsConfig{Rigs: make(map[string]config.RigEntry)}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get rig
|
|
||||||
g := git.NewGit(townRoot)
|
|
||||||
rigMgr := rig.NewManager(townRoot, rigsConfig, g)
|
|
||||||
r, err := rigMgr.GetRig(rigName)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("rig '%s' not found", rigName)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create session manager
|
|
||||||
t := tmux.NewTmux()
|
t := tmux.NewTmux()
|
||||||
mgr := session.NewManager(t, r)
|
mgr := session.NewManager(t, r)
|
||||||
|
|
||||||
|
|||||||
@@ -5,17 +5,13 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/steveyegge/gastown/internal/config"
|
|
||||||
"github.com/steveyegge/gastown/internal/git"
|
|
||||||
"github.com/steveyegge/gastown/internal/rig"
|
"github.com/steveyegge/gastown/internal/rig"
|
||||||
"github.com/steveyegge/gastown/internal/style"
|
"github.com/steveyegge/gastown/internal/style"
|
||||||
"github.com/steveyegge/gastown/internal/tmux"
|
"github.com/steveyegge/gastown/internal/tmux"
|
||||||
"github.com/steveyegge/gastown/internal/witness"
|
"github.com/steveyegge/gastown/internal/witness"
|
||||||
"github.com/steveyegge/gastown/internal/workspace"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Witness command flags
|
// Witness command flags
|
||||||
@@ -100,22 +96,9 @@ func init() {
|
|||||||
|
|
||||||
// getWitnessManager creates a witness manager for a rig.
|
// getWitnessManager creates a witness manager for a rig.
|
||||||
func getWitnessManager(rigName string) (*witness.Manager, *rig.Rig, error) {
|
func getWitnessManager(rigName string) (*witness.Manager, *rig.Rig, error) {
|
||||||
townRoot, err := workspace.FindFromCwdOrError()
|
_, r, err := getRig(rigName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("not in a Gas Town workspace: %w", err)
|
return nil, nil, err
|
||||||
}
|
|
||||||
|
|
||||||
rigsConfigPath := filepath.Join(townRoot, "mayor", "rigs.json")
|
|
||||||
rigsConfig, err := config.LoadRigsConfig(rigsConfigPath)
|
|
||||||
if err != nil {
|
|
||||||
rigsConfig = &config.RigsConfig{Rigs: make(map[string]config.RigEntry)}
|
|
||||||
}
|
|
||||||
|
|
||||||
g := git.NewGit(townRoot)
|
|
||||||
rigMgr := rig.NewManager(townRoot, rigsConfig, g)
|
|
||||||
r, err := rigMgr.GetRig(rigName)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("rig '%s' not found", rigName)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr := witness.NewManager(r)
|
mgr := witness.NewManager(r)
|
||||||
|
|||||||
Reference in New Issue
Block a user