Compare commits

...

2 Commits

Author SHA1 Message Date
c90fd27d9b feat: implement list 2026-01-25 20:43:36 +01:00
5e43d76ef9 feat: implement first version of switch 2026-01-25 20:36:08 +01:00

60
main.go
View File

@@ -32,6 +32,16 @@ func Getwtd() (string, error) {
return wtd, nil return wtd, nil
} }
func GetWorktree(cwd string, name string) (string, error) {
wtd, err := Getwtd()
if err != nil {
return "", err
}
project := filepath.Base(cwd)
return filepath.Join(wtd, project, name), nil
}
func Init(ctx context.Context, cmd *cli.Command) error { func Init(ctx context.Context, cmd *cli.Command) error {
fmt.Println("init") fmt.Println("init")
cwd, err := os.Getwd() cwd, err := os.Getwd()
@@ -75,6 +85,54 @@ func Init(ctx context.Context, cmd *cli.Command) error {
return nil return nil
} }
func Switch(ctx context.Context, cmd *cli.Command) error {
branch := strings.TrimSpace(cmd.Args().Get(0))
if len(branch) == 0 {
return fmt.Errorf("no worktree name given")
}
cwd, err := os.Getwd()
if err != nil {
return err
}
worktree, err := GetWorktree(cwd, branch)
if err != nil {
return err
}
if !exists(worktree) {
if err := exec.Command("git", "worktree", "add", worktree, branch).Run(); err != nil {
return err
}
}
if _, err := os.Lstat(cwd); err == nil {
if err := os.Remove(cwd); err != nil {
return err
}
}
return os.Symlink(worktree, cwd)
}
func List(ctx context.Context, cmd *cli.Command) error {
wtd, err := Getwtd()
if err != nil {
return err
}
project, err := os.Getwd()
if err != nil {
return err
}
dirs, err := os.ReadDir(filepath.Join(wtd, filepath.Base(project)))
if err != nil {
return err
}
for i := range dirs {
fmt.Println(dirs[i].Name())
}
return nil
}
func main() { func main() {
cmd := cli.Command{ cmd := cli.Command{
Name: "wt", Name: "wt",
@@ -88,9 +146,11 @@ func main() {
}, },
{ {
Name: "list", Name: "list",
Action: List,
}, },
{ {
Name: "switch", Name: "switch",
Action: Switch,
}, },
}, },
} }