Add --branch flag to `gt rig add` to specify a custom default branch instead of auto-detecting from remote. This supports repositories that use non-standard default branches like `develop` or `release`. Changes: - Add --branch flag to `gt rig add` command - Store default_branch in rig config.json - Propagate default branch to refinery, witness, daemon, and all commands - Rename ensureMainBranch to ensureDefaultBranch for clarity - Add Rig.DefaultBranch() method for consistent access - Update crew/manager.go and swarm/manager.go to use rig config Based on PR #49 by @kustrun - rebased and extended with additional fixes. Co-authored-by: kustrun <kustrun@users.noreply.github.com> 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
92 lines
2.6 KiB
Go
92 lines
2.6 KiB
Go
// Package rig provides rig management functionality.
|
|
package rig
|
|
|
|
import (
|
|
"github.com/steveyegge/gastown/internal/config"
|
|
)
|
|
|
|
// Rig represents a managed repository in the workspace.
|
|
type Rig struct {
|
|
// Name is the rig identifier (directory name).
|
|
Name string `json:"name"`
|
|
|
|
// Path is the absolute path to the rig directory.
|
|
Path string `json:"path"`
|
|
|
|
// GitURL is the remote repository URL.
|
|
GitURL string `json:"git_url"`
|
|
|
|
// LocalRepo is an optional local repository used for reference clones.
|
|
LocalRepo string `json:"local_repo,omitempty"`
|
|
|
|
// Config is the rig-level configuration.
|
|
Config *config.BeadsConfig `json:"config,omitempty"`
|
|
|
|
// Polecats is the list of polecat names in this rig.
|
|
Polecats []string `json:"polecats,omitempty"`
|
|
|
|
// Crew is the list of crew worker names in this rig.
|
|
// Crew workers are user-managed persistent workspaces.
|
|
Crew []string `json:"crew,omitempty"`
|
|
|
|
// HasWitness indicates if the rig has a witness agent.
|
|
HasWitness bool `json:"has_witness"`
|
|
|
|
// HasRefinery indicates if the rig has a refinery agent.
|
|
HasRefinery bool `json:"has_refinery"`
|
|
|
|
// HasMayor indicates if the rig has a mayor clone.
|
|
HasMayor bool `json:"has_mayor"`
|
|
}
|
|
|
|
// AgentDirs are the standard agent directories in a rig.
|
|
// Note: witness doesn't have a /rig subdirectory (no clone needed).
|
|
var AgentDirs = []string{
|
|
"polecats",
|
|
"crew",
|
|
"refinery/rig",
|
|
"witness",
|
|
"mayor/rig",
|
|
}
|
|
|
|
// RigSummary provides a concise overview of a rig.
|
|
type RigSummary struct {
|
|
Name string `json:"name"`
|
|
PolecatCount int `json:"polecat_count"`
|
|
CrewCount int `json:"crew_count"`
|
|
HasWitness bool `json:"has_witness"`
|
|
HasRefinery bool `json:"has_refinery"`
|
|
}
|
|
|
|
// Summary returns a RigSummary for this rig.
|
|
func (r *Rig) Summary() RigSummary {
|
|
return RigSummary{
|
|
Name: r.Name,
|
|
PolecatCount: len(r.Polecats),
|
|
CrewCount: len(r.Crew),
|
|
HasWitness: r.HasWitness,
|
|
HasRefinery: r.HasRefinery,
|
|
}
|
|
}
|
|
|
|
// BeadsPath returns the path to use for beads operations.
|
|
// Returns the mayor/rig clone path if available (has proper sync-branch config),
|
|
// otherwise falls back to the rig root path.
|
|
// This ensures beads commands read from a location with git-synced beads data.
|
|
func (r *Rig) BeadsPath() string {
|
|
if r.HasMayor {
|
|
return r.Path + "/mayor/rig"
|
|
}
|
|
return r.Path
|
|
}
|
|
|
|
// DefaultBranch returns the configured default branch for this rig.
|
|
// Falls back to "main" if not configured or if config cannot be loaded.
|
|
func (r *Rig) DefaultBranch() string {
|
|
cfg, err := LoadRigConfig(r.Path)
|
|
if err != nil || cfg.DefaultBranch == "" {
|
|
return "main"
|
|
}
|
|
return cfg.DefaultBranch
|
|
}
|