diff options
| -rw-r--r-- | argv.go | 12 | ||||
| -rw-r--r-- | doClone.go | 61 | ||||
| -rw-r--r-- | main.go | 10 | ||||
| -rw-r--r-- | repomap.go | 53 | ||||
| -rw-r--r-- | resources/repomap | 99 |
5 files changed, 176 insertions, 59 deletions
@@ -28,7 +28,7 @@ type args struct { MakeInstall *DefaultCmd `arg:"subcommand:install" help:"run make install in each repo"` ListPkgs *EmptyCmd `arg:"subcommand:list" help:"list all the packages on mirrors.wit.com"` Test *EmptyCmd `arg:"subcommand:test" help:"test build everything first"` - Clone *EmptyCmd `arg:"subcommand:repomap-clone" help:"go-clone from a gowebd repomap"` + Clone *CloneCmd `arg:"subcommand:clone" help:"go-clone from a gowebd repomap"` Rdate *EmptyCmd `arg:"subcommand:rdate" help:"standard rdate"` Zoo *EmptyCmd `arg:"subcommand:zoo" help:"WIT Private Cloud info"` Upgrade *UpgradeCmd `arg:"subcommand:upgrade" help:"apt upgrade packages installed from mirrors.wit.com"` @@ -49,13 +49,18 @@ type DebianCmd struct { Force bool `arg:"--force" help:"rebuild everything"` } +type CloneCmd struct { + DryRun bool `arg:"--dry-run" help:"show what has not yet come to pass"` + Verbose bool `arg:"--verbose" help:"be loud about it"` +} + type UpgradeCmd struct { DryRun bool `arg:"--dry-run" help:"don't really do anything"` Force bool `arg:"--force" help:"force un-install and re-install each package"` } type DefaultCmd struct { - DryRun bool `arg:"--dry-run" help:"only show what would be packaged"` + DryRun bool `arg:"--dry-run" help:"show what has not yet come to pass"` Verbose bool `arg:"--verbose" help:"be loud about it"` Force bool `arg:"--force" help:"rebuild everything"` } @@ -113,6 +118,9 @@ func (a args) DoAutoComplete(pb *prep.Auto) { if _, err := fhelp.CheckCmd("forge"); err == nil { base = append(base, "forge") } + if _, err := fhelp.CheckCmd("go-clone"); err == nil { + base = append(base, "clone") + } if areSuperuser() { base = append(base, "upgrade") base = append(base, "rdate") diff --git a/doClone.go b/doClone.go new file mode 100644 index 0000000..528edd0 --- /dev/null +++ b/doClone.go @@ -0,0 +1,61 @@ +// Copyright 2017-2025 WIT.COM Inc. All rights reserved. +// Use of this source code is governed by the GPL 3.0 + +package main + +import ( + "strings" + + "go.wit.com/lib/config" + "go.wit.com/lib/gui/shell" + "go.wit.com/log" +) + +// +// go-clone everything from wit +// + +func doClone() error { + initForge() + + data, err := resources.ReadFile("resources/repomap") + if err != nil { + log.Info("open repomap failed", err) + return err + } + if len(data) == 0 { + log.Info("resources/repomap is empty") + return config.ErrEmpty + } + + for _, line := range strings.Split(string(data), "\n") { + if line == "" { + continue + } + if strings.HasPrefix(line, "#") { + continue + } + parts := strings.Fields(line) + gopath := parts[0] + repo := me.forge.Repos.FindByNamespace(gopath) + if repo != nil { + if argv.Verbose { + log.Info("already have", repo.FullPath) + } + continue + } + var cmd []string + cmd = []string{"go-clone", "--non-recursive", gopath} + if argv.DryRun { + log.Info("run:", cmd) + } else { + log.Info("should run:", cmd) + if _, err := shell.RunRealtimeError(cmd); err != nil { + if !argv.Force { + badExit(err) + } + } + } + } + return nil +} @@ -5,6 +5,7 @@ package main import ( "debug/buildinfo" + "embed" "fmt" "os" "path/filepath" @@ -20,6 +21,9 @@ var BUILDTIME string // used for shell auto completion var ARGNAME string = "wit" // todo: get this from $0 ? +//go:embed resources/* +var resources embed.FS + func main() { me = new(mainType) me.once.Do(initMain) @@ -45,10 +49,8 @@ func main() { } if argv.Clone != nil { - if argv.RepoMap != "" { - repomap(argv.RepoMap) - okExit("") - } + doClone() + okExit("") } if argv.WITCOM { diff --git a/repomap.go b/repomap.go deleted file mode 100644 index 6ab056a..0000000 --- a/repomap.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2017-2025 WIT.COM Inc. All rights reserved. -// Use of this source code is governed by the GPL 3.0 - -package main - -import ( - "os" - "strings" - - "go.wit.com/lib/gui/shell" - "go.wit.com/log" -) - -// -// go-clone everything from a gowebd repomap file (go.wit.com has examples) -// - -func repomap(filename string) { - log.DaemonMode(true) - - data, err := os.ReadFile(argv.RepoMap) - if err != nil { - log.Info("open repomap failed", err) - return - } - - for _, line := range strings.Split(string(data), "\n") { - if line == "" { - continue - } - if strings.HasPrefix(line, "#") { - continue - } - parts := strings.Fields(line) - gopath := parts[0] - repo := me.forge.FindByGoPath(gopath) - var cmd []string - if argv.Recursive { - cmd = []string{"go-clone", "--recursive", gopath} - } else { - cmd = []string{"go-clone", gopath} - } - if repo == nil { - if argv.DryRun { - log.Info("run:", cmd) - } else { - shell.RunRealtime(cmd) - } - } else { - log.Info("already ran:", cmd) - } - } -} diff --git a/resources/repomap b/resources/repomap new file mode 100644 index 0000000..18a29cb --- /dev/null +++ b/resources/repomap @@ -0,0 +1,99 @@ +# core libraries + +go.wit.com/gui gitea.wit.com/gui/gui The GUI API intended for Control Panels +go.wit.com/widget gitea.wit.com/gui/widget Primitive Definitions for Buttons, Dropdowns, etc. +go.wit.com/log gitea.wit.com/wit/log a wrapper attempt around log for the GUI + +# Applications (<a href="http://mirrors.wit.com/">mirrors.wit.com</a>) + +go.wit.com/apps/go-clone gitea.wit.com/gui/go-clone recursively 'git clone' golang packages +go.wit.com/apps/forge gitea.wit.com/jcarr/forge A federated git automation tool <a href="https://mirrors.wit.com/guidemo/forge-gocui-demo.webm">CUI Demo</a> <a href="https://mirrors.wit.com/guidemo/forge-andlabs-ui-GTK.webm">GTK Demo</a> +go.wit.com/apps/autogenpb gitea.wit.com/jcarr/autogenpb autogen Marshal(), Sort(), Gui(), Http() .pb.go files +go.wit.com/apps/go-deb gitea.wit.com/jcarr/go-deb Turns anything into a .deb package +go.wit.com/apps/virtigo gitea.wit.com/jcarr/virtigo control your homelab cluster (pre-alpha) +go.wit.com/apps/go-mod-clean gitea.wit.com/jcarr/go-mod-clean clean go.mod and go.sum files before publishing +go.wit.com/apps/argv github.com/alexflint/argv shell autocomplete +go.wit.com/apps/autotypist gitea.wit.com/jcarr/autotypist +go.wit.com/apps/control-panel-dns gitea.wit.com/jcarr/control-panel-dns +go.wit.com/apps/networkQuality github.com/wit-go/networkQuality +go.wit.com/apps/regex gitea.wit.com/jcarr/regex +go.wit.com/apps/guireleaser gitea.wit.com/jcarr/guireleaser +go.wit.com/apps/control-panel-droplet gitea.wit.com/wit/control-panel-digitalocean +go.wit.com/apps/control-panel-cloudflare gitea.wit.com/wit/control-panel-cloudflare +go.wit.com/apps/control-panel-vpn gitea.wit.com/jcarr/control-panel-vpn +go.wit.com/apps/zookeeper gitea.wit.com/jcarr/zookeeper +go.wit.com/apps/utils/go-gui-toolkits gitea.wit.com/gui/go-gui-toolkits +go.wit.com/apps/utils/gowebd gitea.wit.com/jcarr/gowebd generates this website: go.wit.com +go.wit.com/apps/utils/fixup gitea.wit.com/jcarr/fixup a tool to make riscv sdcards +go.wit.com/apps/utils/forged gitea.wit.com/jcarr/forged +go.wit.com/apps/utils/powerpaneld gitea.wit.com/jcarr/powerpaneld +go.wit.com/apps/utils/virtigoctl gitea.wit.com/jcarr/virtigoctl +go.wit.com/apps/utils/startxplacement gitea.wit.com/jcarr/xstartplacement +go.wit.com/apps/utils/wit-utils gitea.wit.com/jcarr/wit-utils +go.wit.com/apps/utils/wit-test gitea.wit.com/jcarr/wit-test +go.wit.com/apps/utils/going2git gitea.wit.com/jcarr/going2git + +# GO plugin GUI demos + +go.wit.com/apps/helloworld gitea.wit.com/gui/helloworld A simple GUI Demo <a href="http://mirrors.wit.com/guidemo/helloworld-demo.webm">Video Demo</a> +go.wit.com/apps/basicwindow gitea.wit.com/jcarr/basicwindow A bit more of a GUI Demo +go.wit.com/apps/gadgetwindow gitea.wit.com/jcarr/gadgetwindow A more complicated GUI Demo used for debugging the toolkits + +# GO GUI toolkit plugins +go.wit.com/toolkits/tree gitea.wit.com/toolkits/tree common toolkit plugin code +go.wit.com/toolkits/andlabs gitea.wit.com/toolkits/andlabs Platform Native GUI (GTK on Linux and Cocoa on MacOS, Windows needs golang plugins) +go.wit.com/toolkits/gocui gitea.wit.com/toolkits/gocui A console based GUI (like ncurses) +go.wit.com/toolkits/nocui gitea.wit.com/toolkits/nocui A minimum toolkit plugin using STDIN/STDOUT +go.wit.com/toolkits/pixelgl gitea.wit.com/jcarr/pixelgl an experiment with opengl (no widgets yet) +go.wit.com/toolkits/fyne gitea.wit.com/jcarr/fyne fyne.io (early stages. only makes windows and buttons) +go.wit.com/toolkits/debian gitea.wit.com/toolkits/debian + +# libraries +go.wit.com/lib/gadgets gitea.wit.com/gui/gadgets Some common collections of widgets +go.wit.com/lib/debugger gitea.wit.com/gui/debugger An attempt at a debugger +go.wit.com/lib/gui/repostatus gitea.wit.com/jcarr/repostatus +go.wit.com/lib/gui/repolist gitea.wit.com/jcarr/repolist +go.wit.com/lib/gui/linuxstatus gitea.wit.com/jcarr/linuxstatus +go.wit.com/lib/gui/logsettings gitea.wit.com/jcarr/logsettings +go.wit.com/lib/gui/digitalocean gitea.wit.com/gui/digitalocean import / export droplets from your virtigo private cloud +go.wit.com/lib/gui/cloudflare gitea.wit.com/gui/cloudflare +go.wit.com/lib/gui/gowit gitea.wit.com/jcarr/gowit +go.wit.com/lib/gui/prep gitea.wit.com/jcarr/prep +go.wit.com/lib/gui/shell gitea.wit.com/wit/shell +go.wit.com/lib/virtigolib gitea.wit.com/jcarr/virtigolib libvirtxml <-> protobuf for virtigo +go.wit.com/lib/daemons/virtigod gitea.wit.com/jcarr/virtigod the virtigo hypervisor daemon +go.wit.com/lib/daemons/zood gitea.wit.com/jcarr/zood a simple daemon for zookeeper +go.wit.com/lib/daemons/gus gitea.wit.com/jcarr/gus "Phantastic Gus" your network squirrel +go.wit.com/lib/libgit2 gitea.wit.com/jcarr/git2go +go.wit.com/lib/libme gitea.wit.com/jcarr/libme +go.wit.com/lib/libgit2go gitea.wit.com/jcarr/git2go fixed for libgit2 v1.9 (works on debian sid) +go.wit.com/lib/fhelp gitea.wit.com/jcarr/fhelp +go.wit.com/lib/http/ginpb gitea.wit.com/jcarr/ginpb +go.wit.com/lib/hostname gitea.wit.com/jcarr/hostname os.Hostname() wrapper +go.wit.com/lib/cobol gitea.wit.com/jcarr/cobol +go.wit.com/lib/config gitea.wit.com/jcarr/pbconfig use .proto config files in your applications +go.wit.com/lib/xgb github.com/jezek/xgb + +# protobuf libraries +go.wit.com/lib/protobuf/bugpb gitea.wit.com/jcarr/bugpb protobuf for git-bug +go.wit.com/lib/protobuf/forgepb gitea.wit.com/jcarr/forgepb protobuf for forge +go.wit.com/lib/protobuf/chatpb gitea.wit.com/jcarr/chatpb protobuf for Google's Gemini +go.wit.com/lib/protobuf/httppb gitea.wit.com/jcarr/httppb protobuf for http headers +go.wit.com/lib/protobuf/gitpb gitea.wit.com/jcarr/gitpb protobuf for git repos +go.wit.com/lib/protobuf/guipb gitea.wit.com/jcarr/guipb protobuf for the GUI toolkits +go.wit.com/lib/protobuf/virtpb gitea.wit.com/jcarr/virtpb protobuf for virtigo +go.wit.com/lib/protobuf/witpb gitea.wit.com/wit/witProtobuf +go.wit.com/lib/protobuf/zoopb gitea.wit.com/jcarr/zoopb protobuf for zookeeper + +# Support packages (forked for experiments) + +go.wit.com/dev/alexflint/arg gitea.wit.com/jcarr/go-arg slight minor modifications to 'go-arg' +go.wit.com/dev/alexflint/scalar gitea.wit.com/jcarr/go-scalar +go.wit.com/dev/andlabs/ui gitea.wit.com/interesting/andlabs-ui attempts to add RiscV support +go.wit.com/dev/andlabs/libui gitea.wit.com/interesting/libui +go.wit.com/dev/davecgh/spew gitea.wit.com/jcarr/go-spew +go.wit.com/dev/posener/complete gitea.wit.com/interesting/complete + +go.wit.com/dev/test/gogit3 gitea.wit.com/jcarr/gogit2 + +# debian package instructions: |
