Compare commits

..

1 Commits

Author SHA1 Message Date
Jeff Carr 37be03b462 forge pre-v1 2025-09-04 11:25:51 -05:00
7 changed files with 105 additions and 40 deletions

View File

@ -1,7 +1,7 @@
VERSION = $(shell git describe --tags) VERSION = $(shell git describe --tags)
BUILDTIME = $(shell date +%Y.%m.%d_%H%M) BUILDTIME = $(shell date +%Y.%m.%d_%H%M)
run: install run: install build-darwin build-darwin-arm64 build-windows
go-clone --version go-clone --version
vet: vet:
@ -51,7 +51,7 @@ nocui: build
clean: clean:
rm -f go.* rm -f go.*
-rm go-clone* -rm go-clone
go-mod-clean purge go-mod-clean purge
# this will test the golang.org/x -> googlesource override # this will test the golang.org/x -> googlesource override

20
argv.go
View File

@ -1,10 +1,5 @@
package main package main
import (
"fmt"
"os"
)
/* /*
this parses the command line arguements this parses the command line arguements
@ -36,18 +31,3 @@ Examples:
go-clone go.wit.com/apps/go-clone # 'git clone' go-clone go-clone go.wit.com/apps/go-clone # 'git clone' go-clone
` `
} }
func (a args) DoAutoComplete(argv []string) {
switch argv[0] {
case "checkout":
fmt.Println("user devel master ")
case "--recursive":
fmt.Println("true false")
default:
if argv[0] == ARGNAME {
// list the subcommands here
fmt.Println("--dry-run --recursive --work")
}
}
os.Exit(0)
}

View File

@ -68,7 +68,7 @@ func clone(gopath string) (*gitpb.Repo, error) {
gopath = CleanRepoURL(gopath) gopath = CleanRepoURL(gopath)
os.Setenv("REPO_AUTO_CLONE", "true") os.Setenv("REPO_AUTO_CLONE", "true")
// pb, _ := forge.NewGoPath(gopath) // pb, _ := forge.NewGoPath(gopath)
check := forge.FindAnyPath(filepath.Join(forge.Config.ReposDir, gopath)) check := forge.FindAnyPath(filepath.Join(forge.GetGoSrc(), gopath))
if check != nil { if check != nil {
if check.IsValidDir() { if check.IsValidDir() {
// repo already exists and is valid // repo already exists and is valid
@ -103,28 +103,28 @@ func recursiveClone(check *gitpb.Repo) error {
if check == nil { if check == nil {
return errors.New("repo was nil") return errors.New("repo was nil")
} }
log.Info("STARTING RECURSIVE CLONE", check.Namespace) log.Info("STARTING RECURSIVE CLONE", check.GetGoPath())
log.Info("STARTING RECURSIVE CLONE", check.Namespace) log.Info("STARTING RECURSIVE CLONE", check.GetGoPath())
// if just cloned, parse the go.sum file for deps // if just cloned, parse the go.sum file for deps
if check.ParseGoSum() { if check.ParseGoSum() {
} else { } else {
makeValidGoSum(check) makeValidGoSum(check)
} }
check.ReloadForce() check.Reload()
if check.GoDeps == nil { if check.GoDeps == nil {
log.Info("repo godeps == nil", check.Namespace) log.Info("repo godeps == nil", check.GetGoPath())
return errors.New("no go deps?") return errors.New("no go deps?")
} }
// probably this should never be 0 because GoPrimitive should have been true otherwise // probably this should never be 0 because GoPrimitive should have been true otherwise
if check.GoDeps.Len() == 0 { if check.GoDeps.Len() == 0 {
log.Info("repo len(godeps) == 0", check.Namespace) log.Info("repo len(godeps) == 0", check.GetGoPath())
return errors.New("go.sum never parsed?") return errors.New("go.sum never parsed?")
} }
log.Info("deps for", check.Namespace, "len()", check.GoDeps.Len()) log.Info("deps for", check.GetGoPath(), "len()", check.GoDeps.Len())
deps := check.GoDeps.SortByGoPath() deps := check.GoDeps.SortByGoPath()
for deps.Scan() { for deps.Scan() {
depRepo := deps.Next() depRepo := deps.Next()
@ -179,7 +179,7 @@ func makeValidGoSum(check *gitpb.Repo) error {
// if this fails, just use go mod // if this fails, just use go mod
if err := check.ValidGoSum(); err != nil { if err := check.ValidGoSum(); err != nil {
cmd := []string{"go", "mod", "init", check.Namespace} cmd := []string{"go", "mod", "init", check.GetGoPath()}
log.Info("try running", cmd) log.Info("try running", cmd)
if _, err := check.RunQuiet(cmd); err != nil { if _, err := check.RunQuiet(cmd); err != nil {
log.Info("go mod init failed", err) log.Info("go mod init failed", err)

28
go.mod Normal file
View File

@ -0,0 +1,28 @@
module go.wit.com/apps/go-clone
go 1.24.1
require (
go.wit.com/dev/alexflint/arg v1.6.2
go.wit.com/lib/gui/shell v0.22.30
go.wit.com/lib/protobuf/forgepb v0.0.123
go.wit.com/lib/protobuf/gitpb v0.0.112
go.wit.com/log v0.22.17
)
require (
github.com/alexflint/go-scalar v1.2.0 // indirect
github.com/destel/rill v0.8.0 // indirect
github.com/go-cmd/cmd v1.4.3 // indirect
github.com/google/uuid v1.6.0 // indirect
go.wit.com/gui v0.22.50 // indirect
go.wit.com/lib/cobol v0.0.3 // indirect
go.wit.com/lib/fhelp v0.0.15 // indirect
go.wit.com/lib/protobuf/bugpb v0.0.5 // indirect
go.wit.com/lib/protobuf/guipb v0.0.12 // indirect
go.wit.com/widget v1.1.30 // indirect
golang.org/x/sys v0.35.0 // indirect
golang.org/x/term v0.34.0 // indirect
golang.org/x/text v0.28.0 // indirect
google.golang.org/protobuf v1.36.8 // indirect
)

52
go.sum Normal file
View File

@ -0,0 +1,52 @@
github.com/alexflint/go-scalar v1.2.0 h1:WR7JPKkeNpnYIOfHRa7ivM21aWAdHD0gEWHCx+WQBRw=
github.com/alexflint/go-scalar v1.2.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oyLEBUZVhhS2o=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/destel/rill v0.8.0 h1:PzWvw4Du+9SUy87riG/Ef4GHQpYX8qDtPMYzu40Lqvw=
github.com/destel/rill v0.8.0/go.mod h1:srKuXzvGqINUEGYR5b/iwvW+L9/S35RxVHWGYbXNoO4=
github.com/go-cmd/cmd v1.4.3 h1:6y3G+3UqPerXvPcXvj+5QNPHT02BUw7p6PsqRxLNA7Y=
github.com/go-cmd/cmd v1.4.3/go.mod h1:u3hxg/ry+D5kwh8WvUkHLAMe2zQCaXd00t35WfQaOFk=
github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg=
github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
go.wit.com/dev/alexflint/arg v1.6.2 h1:5TSmo0qJnfSY82MrjjtxFOoX7EkTmMs/hsmOcCFxNmU=
go.wit.com/dev/alexflint/arg v1.6.2/go.mod h1:3MrBCZBVbb5vea1NpJ8pdwGoDXIAIOHcZqj0fGuRUrM=
go.wit.com/gui v0.22.50 h1:tYOM6FZba/HAn+7aieWBXxnz8/A6bfWYbmAWoKeJJGo=
go.wit.com/gui v0.22.50/go.mod h1:ulugUrJlDrt2tIoJYHoRJQY18+upZ0bF0gYNj3089Tc=
go.wit.com/lib/cobol v0.0.3 h1:INYKEyg8YgwxqmAxFYCoPS8MjR9T7wqd6s30fPffc7k=
go.wit.com/lib/cobol v0.0.3/go.mod h1:2SnyAHBsNYPkn1fjrSme23OkmfZZ8JRx4wphozf8QPg=
go.wit.com/lib/fhelp v0.0.15 h1:Mr51WDvzLBdVu1FpO/RxZdfFYPH77Ui8sZIXybffQPY=
go.wit.com/lib/fhelp v0.0.15/go.mod h1:zEIo2anni9klmU/tq8i3XDa4mL+PpRdMOMIafhXcb5g=
go.wit.com/lib/gui/shell v0.22.30 h1:d9Gjgry3P4bZCVz8WeOVodkp7IIerCl+74kfMPOV6qA=
go.wit.com/lib/gui/shell v0.22.30/go.mod h1:BWVNCsK4gyo085YJnTz+zqe/8N8tGKSMrCHfGWna4JE=
go.wit.com/lib/protobuf/bugpb v0.0.5 h1:o09DPLf4GwbU99vy8oVPdv2BNyEdRsy0wnFUnXiO8L0=
go.wit.com/lib/protobuf/bugpb v0.0.5/go.mod h1:FkkeImmqh67mOnz8MHM6Ohs6km9T8Vr4mdgztCypsSk=
go.wit.com/lib/protobuf/forgepb v0.0.123 h1:Qvse7WlwWl0OILwyBowa1GAxekeeyFxYoX3s34Cw87U=
go.wit.com/lib/protobuf/forgepb v0.0.123/go.mod h1:j21IY+RfJ3WydBLcotpa4qoQGovrmHwESFAU3SRU8Q8=
go.wit.com/lib/protobuf/gitpb v0.0.112 h1:9DgqMabum/VuUpfp9c+ifgNa0E6T29cRU8xrLoNp0sc=
go.wit.com/lib/protobuf/gitpb v0.0.112/go.mod h1:CM/g/APprOwB6R51uLZiOcKO9cS2gNAoD8NIurFdxSk=
go.wit.com/lib/protobuf/guipb v0.0.12 h1:Yxf0eCVRU4R+w33SulLSnkDMi6KiW/mL7O5nHEelVFU=
go.wit.com/lib/protobuf/guipb v0.0.12/go.mod h1:eD5DG8UozJli7Q6BDoIVNThJjcaTfsOi9AGwlk5gOUk=
go.wit.com/log v0.22.17 h1:rAnrUPbQ/k34Fxqq4buKofvwKRvODcV4/qiXJREiqD4=
go.wit.com/log v0.22.17/go.mod h1:XE4lTfAibWgwBJksIk7u3IEJ8xcBvNhnlewYAQGj2Ew=
go.wit.com/widget v1.1.30 h1:O/dIG7QtDrZkR5P6f8JAMyevBiMXSun9vL6F0KFAWV8=
go.wit.com/widget v1.1.30/go.mod h1:wj7TpAr2gk7Poa+v8XQkH1aidnTdgAa/a8GxrMtcztw=
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA=
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

19
main.go
View File

@ -4,7 +4,6 @@ import (
"os" "os"
"go.wit.com/dev/alexflint/arg" "go.wit.com/dev/alexflint/arg"
"go.wit.com/lib/gui/prep"
"go.wit.com/lib/protobuf/forgepb" "go.wit.com/lib/protobuf/forgepb"
"go.wit.com/lib/protobuf/gitpb" "go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log" "go.wit.com/log"
@ -14,8 +13,6 @@ import (
var VERSION string var VERSION string
var BUILDTIME string var BUILDTIME string
var ARGNAME string = "go-clone"
var pp *arg.Parser var pp *arg.Parser
var forge *forgepb.Forge var forge *forgepb.Forge
@ -23,11 +20,19 @@ var workingRepo *gitpb.Repo
func main() { func main() {
log.Info("go-clone version", VERSION, "built on", BUILDTIME) log.Info("go-clone version", VERSION, "built on", BUILDTIME)
// command line parsing & handling
prep.Bash(ARGNAME, argv.DoAutoComplete) // todo: make this: prep.Bash(argv)
pp = arg.MustParse(&argv) pp = arg.MustParse(&argv)
// for very new users or users unfamilar with the command line, this may help them
if argv.Repo == "help" || argv.Repo == "?" {
pp.WriteHelp(os.Stdout)
os.Exit(0)
}
if argv.Repo == "version" {
log.Info(argv.Version())
os.Exit(0)
}
// this package helps scan git repos
forge = forgepb.Init() forge = forgepb.Init()
var err error var err error
@ -86,6 +91,6 @@ func okExit(thing string) {
func badExit(err error) { func badExit(err error) {
log.Info("Total repositories:", forge.Repos.Len()) log.Info("Total repositories:", forge.Repos.Len())
log.Info("Finished go-clone with error", err, forge.Config.ReposDir) log.Info("Finished go-clone with error", err, forge.GetGoSrc())
os.Exit(-1) os.Exit(-1)
} }

View File

@ -10,10 +10,10 @@ func autoWork() {
if !argv.AutoWork { if !argv.AutoWork {
return return
} }
log.Info("About to re-create", forge.Config.ReposDir+"/go.work") log.Info("About to re-create", forge.GetGoSrc()+"/go.work")
shell.PathRun(forge.Config.ReposDir, []string{"mv", "go.work", "go.work.last"}) shell.PathRun(forge.GetGoSrc(), []string{"mv", "go.work", "go.work.last"})
forge.MakeGoWork() forge.MakeGoWork()
shell.PathRun(forge.Config.ReposDir, []string{"go", "work", "use"}) shell.PathRun(forge.GetGoSrc(), []string{"go", "work", "use"})
log.Info("") log.Info("")
log.Info("original go.work file saved as go.work.last") log.Info("original go.work file saved as go.work.last")
log.Info("") log.Info("")