summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-03-07 19:30:09 -0600
committerJeff Carr <[email protected]>2024-03-07 19:30:09 -0600
commitb5825e93dd9a8d6923c9a0058c8ed3bd4f52ceb8 (patch)
treef5be387a96db679b0a827fd55bc87f5f32349d83 /main.go
parent57c61847c02e9b2f3c2e36f9c77c9dcb8da01b8c (diff)
look for and use any go.work filev0.0.2
Diffstat (limited to 'main.go')
-rw-r--r--main.go114
1 files changed, 84 insertions, 30 deletions
diff --git a/main.go b/main.go
index e7a97f8..7b14246 100644
--- a/main.go
+++ b/main.go
@@ -1,6 +1,10 @@
package main
import (
+ "fmt"
+ "os"
+ "path/filepath"
+
"go.wit.com/dev/alexflint/arg"
"go.wit.com/gui"
"go.wit.com/lib/gui/repolist"
@@ -11,56 +15,106 @@ import (
var VERSION string
var rv *repolist.RepoList
+var myargs args
func main() {
-
- var myargs args
- // tmp := arg.MustParse(&myargs)
arg.MustParse(&myargs)
- if myargs.Work {
- shell.Mkdir("work")
- } else {
- // filepath := filepath.Join("/home/jcarr/go/src")
- // os.Chdir(filepath)
+ if myargs.Repo == "" {
+ // tmp.WriteHelp(os.Stdout)
+ // fmt.Println("hello world")
+ tmp := myargs.Description()
+ fmt.Println(tmp)
+ os.Exit(0)
+ }
+
+ wdir, err := findWorkFile()
+ if err != nil {
+ log.Info(err)
+ os.Exit(-1)
}
- // if myargs.Repo == "" {
- // // tmp.WriteHelp(os.Stdout)
- // // fmt.Println("hello world")
- // tmp := myargs.Description()
- // fmt.Println(tmp)
- // os.Exit(0)
- // }
+ log.Info("go.work directory:", wdir)
+ os.Setenv("REPO_WORK_PATH", wdir)
+
+ // readControlFile()
b := gui.RawBox()
rv = repolist.AutotypistView(b)
- // shell.TestTerminalColor()
- readControlFile()
-
- clone(myargs.Repo)
+ // clone(myargs.Repo)
rv.NewRepo(myargs.Repo)
- rv.NewRepo("go.wit.com/apps/helloworld")
+ // rv.NewRepo("go.wit.com/apps/helloworld")
for _, repo := range rv.AllRepos() {
log.Info("found repo", repo.GoPath(), repo.Status.Path())
}
- rv.Watchdog(func() {
- log.Info("watchdog")
- })
+ // rv.Watchdog(func() {
+ // log.Info("watchdog")
+ // })
}
func clone(path string) {
- shell.RunPath([]string{"git", "clone", path})
+ pwd, err := os.Getwd()
+ if err != nil {
+ return
+ }
+
+ shell.RunPath(pwd, []string{"git", "clone", path})
}
-func findWorkDir() {
- if myargs.Work {
- shell.Mkdir("work")
- shell.Mkdir("work")
+// look for or make a go.work file
+// otherwise use ~/go/src
+func findWorkFile() (string, error) {
+ pwd, err := os.Getwd()
+ if err == nil {
+ // Check for go.work in the current directory and then move up until root
+ pwd, err = digup(pwd)
+ if err == nil {
+ os.Chdir(pwd)
+ return pwd, nil
+ }
+
+ if myargs.Work {
+ pwd := filepath.Join(pwd, "work")
+ shell.Mkdir(pwd)
+ os.Chdir(pwd)
+ if _, err := os.Stat("go.work"); err == nil {
+ return pwd, nil
+ }
+ shell.RunPath(pwd, []string{"go", "work", "init"})
+ if shell.Exists("go.work") {
+ return pwd, nil
+ }
+ }
+ }
+
+ homeDir, err := os.UserHomeDir()
+ if err != nil {
+ return "", err
+ }
+ pwd = filepath.Join(homeDir, "go/src")
+ shell.Mkdir(pwd)
+ os.Chdir(pwd)
+ return pwd, nil
+}
+
+func digup(path string) (string, error) {
+ for {
+ workFilePath := filepath.Join(path, "go.work")
+ if _, err := os.Stat(workFilePath); err == nil {
+ return path, nil // Found the go.work file
+ } else if !os.IsNotExist(err) {
+ return "", err // An error other than not existing
+ }
+
+ parentPath := filepath.Dir(path)
+ if parentPath == path {
+ break // Reached the filesystem root
+ }
+ path = parentPath
}
- // filepath := filepath.Join("/home/jcarr/go/src")
- // os.Chdir(filepath)
+ return "", fmt.Errorf("no go.work file found")
+}