diff options
| author | Jeff Carr <[email protected]> | 2024-03-07 19:30:09 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2024-03-07 19:30:09 -0600 |
| commit | b5825e93dd9a8d6923c9a0058c8ed3bd4f52ceb8 (patch) | |
| tree | f5be387a96db679b0a827fd55bc87f5f32349d83 | |
| parent | 57c61847c02e9b2f3c2e36f9c77c9dcb8da01b8c (diff) | |
look for and use any go.work filev0.0.2
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | main.go | 114 |
3 files changed, 86 insertions, 31 deletions
@@ -2,4 +2,5 @@ go.mod go.sum /files/* +/work/* go-clone @@ -1,7 +1,7 @@ VERSION = $(shell git describe --tags) run: build - ./go-clone github.com/rclone/rclone + ./go-clone --work github.com/rclone/rclone vet: @GO111MODULE=off go vet @@ -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") +} |
