From 84b048aa2985f6a00e846d4e5e50352c44f13c28 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Thu, 21 Mar 2024 22:47:17 -0500 Subject: [PATCH] --go-src + --recursive --- Makefile | 4 ++-- argv.go | 6 +++++- main.go | 18 ++++++++++++++---- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 54862c2..1993b72 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ VERSION = $(shell git describe --tags) run: build @#./go-clone --work github.com/rclone/rclone @# ./go-clone --work go.wit.com/apps/basicwindow - ./go-clone go.wit.com/apps/basicwindow + ./go-clone # test using --no-work against ~/go/src homeGoSrc: build @@ -13,7 +13,7 @@ homeGoSrc: build ./go-clone --no-work go.wit.com/apps/basicwindow modernc: build - ./go-clone --no-work modernc.org/sqlite + ./go-clone --no-work --recursive modernc.org/sqlite vet: @GO111MODULE=off go vet diff --git a/argv.go b/argv.go index cfdd3d4..77a4999 100644 --- a/argv.go +++ b/argv.go @@ -8,14 +8,18 @@ package main type args struct { Repo string `arg:"positional" help:"go import path"` - Work bool `arg:"--work" help:"make a work directory"` + // Work bool `arg:"--work" help:"make a work directory"` NoWork bool `arg:"--no-work" help:"do not make or modify the go.work file"` + GoSrc bool `arg:"--go-src" help:"only work in ~/go/src"` DryRun bool `arg:"--dry-run" help:"show what would be run"` Recursive bool `arg:"--recursive" help:"resursively clone all dependencies"` } func (a args) Description() string { return ` +By default, go-clone will find your go.work file and work from there. +Otherwise, it will create a work/ directory. + This will recursively clone the sources for this app into a work/ directory: go-clone --recursive go.wit.com/apps/go-clone diff --git a/main.go b/main.go index 93ed536..c9ecb2d 100644 --- a/main.go +++ b/main.go @@ -27,6 +27,7 @@ func main() { os.Exit(0) } + // figures out where you're go.work file is wdir, err := findWorkFile() if err != nil { log.Info(err) @@ -93,6 +94,11 @@ func main() { // look for or make a go.work file // otherwise use ~/go/src func findWorkFile() (string, error) { + if myargs.GoSrc { + // user put --go-src on the command line so use ~/go/src + return useGoSrc() + } + pwd, err := os.Getwd() if err == nil { // Check for go.work in the current directory and then move up until root @@ -103,7 +109,7 @@ func findWorkFile() (string, error) { } // if the user added '--work' on the cmdline, make a work directory and init the go.work file - if myargs.Work { + if ! myargs.NoWork { pwd, err = os.Getwd() newpwd := filepath.Join(pwd, "work") shell.Mkdir(newpwd) @@ -119,13 +125,17 @@ func findWorkFile() (string, error) { } // there are no go.work files, resume the ~/go/src behavior from prior to golang 1.22 - // this is the 'old way" and works fine for me. I use it because I like the ~/go/src directory - // because I know exactly what is in it: GO stuff & nothing else + return useGoSrc() +} + +// this is the 'old way" and works fine for me. I use it because I like the ~/go/src directory +// because I know exactly what is in it: GO stuff & nothing else +func useGoSrc() (string, error) { homeDir, err := os.UserHomeDir() if err != nil { return "", err } - pwd = filepath.Join(homeDir, "go/src") + pwd := filepath.Join(homeDir, "go/src") shell.Mkdir(pwd) os.Chdir(pwd) return pwd, nil