// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main /* this parses the command line arguements this enables command line options from other packages like 'gui' and 'log' */ import ( "os" "go.wit.com/lib/debugger" "go.wit.com/lib/fhelp" "go.wit.com/lib/gui/logsettings" "go.wit.com/lib/gui/prep" "go.wit.com/log" ) var argv args type args struct { Git *GitCmd `arg:"subcommand:git" help:"git stuff"` Build *BuildCmd `arg:"subcommand:build" help:"build and install things"` ListPkgs *EmptyCmd `arg:"subcommand:list" help:"list all the packages on mirrors.wit.com"` 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"` RepoMap string `arg:"--repomap" help:"location of the repomap"` DryRun bool `arg:"--dry-run" help:"only show what would be packaged"` Install bool `arg:"--install" help:"go install the binaries first"` Verbose bool `arg:"--verbose" help:"be loud about it"` Force bool `arg:"--force" help:"rebuild everything"` Recursive bool `arg:"--recursive" help:"go-clone --recursive"` WITCOM bool `arg:"--witcom" help:"add the GPL header"` Max int32 `arg:"--max" help:"stop building after max builds"` } type BuildCmd struct { Debian *DebianCmd `arg:"subcommand:debian" help:"build missing .deb packages"` MacBuild *EmptyCmd `arg:"subcommand:macos" help:"build macos packages"` Install *DefaultCmd `arg:"subcommand:install" help:"run make install in each repo"` } type DebianCmd struct { Release bool `arg:"--release" help:"use go-deb --release"` DryRun bool `arg:"--dry-run" help:"only show what would be packaged"` Verbose bool `arg:"--verbose" help:"be loud about it"` Force bool `arg:"--force" help:"rebuild everything"` Quick bool `arg:"--quick" help:"only build repos with new versions"` } type CloneCmd struct { Check *EmptyCmd `arg:"subcommand:check" help:"check urls against the repomap"` Fix *EmptyCmd `arg:"subcommand:fix" help:"fix urls from the repomap"` Repomap *EmptyCmd `arg:"subcommand:repomap" help:"make updated repomap"` 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:"show what has not yet come to pass"` Verbose bool `arg:"--verbose" help:"be loud about it"` Force bool `arg:"--force" help:"rebuild everything"` } type GitCmd struct { Log *EmptyCmd `arg:"subcommand:log" help:"git log"` Who *EmptyCmd `arg:"subcommand:who" help:"git who"` Tag *EmptyCmd `arg:"subcommand:tag" help:"show tags"` Pull *EmptyCmd `arg:"subcommand:pull" help:"pull the wit standard paths"` Push *EmptyCmd `arg:"subcommand:push" help:"push the wit standard paths"` } type EmptyCmd struct { } func init() { if debugger.ArgDebug() { log.Info("cmd line --debugger == true") go func() { log.Sleep(2) debugger.DebugWindow() }() } if debugger.ArgLogger() { log.Info("cmd line --loggger == true") go func() { log.Sleep(4) logsettings.LogWindow() logsettings.LogWindow() }() } } func (args) Buildtime() (string, string) { return BUILDTIME, VERSION } func (args) Version() string { return "wit-test " + VERSION + " Built on " + BUILDTIME } /* handles shell autocomplete */ func (args) Appname() string { return ARGNAME } func (a args) DoAutoComplete(pb *prep.Auto) { base := []string{"--version", "build", "upgrade", "git", "--force"} if _, err := fhelp.CheckCmd("zood"); err == nil { base = append(base, "zoo") } 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") } if pb.Cmd == "" { pb.Autocomplete3(base) } else { pb.SubCommand(pb.Goargs...) } os.Exit(0) }