From 610ba20276de150fa1e0e30693613f149e920301 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Thu, 20 Nov 2025 15:32:59 +0100 Subject: [PATCH] Add version flag --- main.go | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 87a62b2..f80c688 100644 --- a/main.go +++ b/main.go @@ -3,10 +3,12 @@ package main import ( "bufio" "flag" + "fmt" "io" "log" "os" "path/filepath" + "runtime/debug" "sync/atomic" utils "git.site.quack-lab.dev/dave/cyutils" @@ -20,18 +22,27 @@ const ImportantColor = BRed const DefaultColor = Reset const PathColor = Green -var programName = os.Args[0] -var undo = false +var ( + programName = os.Args[0] + undo = false + version = "dev" +) func main() { recurse := flag.String("r", "", "recurse into directories") file := flag.String("f", "", "file to read instructions from") debug := flag.Bool("d", false, "debug") undoF := flag.Bool("u", false, "undo") + versionFlag := flag.Bool("v", false, "print version and exit") dryRun := flag.Bool("n", false, "dry run (no filesystem changes)") flag.Parse() undo = *undoF + if *versionFlag { + fmt.Println(getVersionString()) + return + } + setupLogging(*debug) if *dryRun { @@ -248,6 +259,44 @@ func ReadFromFilesRecursively(input string, output chan *LinkInstruction, status } } +func getVersionString() string { + if version != "" && version != "dev" { + return version + } + + if info, ok := debug.ReadBuildInfo(); ok { + if info.Main.Version != "" && info.Main.Version != "(devel)" { + return info.Main.Version + } + + var revision, modified, vcsTime string + for _, setting := range info.Settings { + switch setting.Key { + case "vcs.revision": + revision = setting.Value + case "vcs.modified": + modified = setting.Value + case "vcs.time": + vcsTime = setting.Value + } + } + if revision != "" { + if len(revision) > 7 { + revision = revision[:7] + } + if modified == "true" { + revision += "-dirty" + } + if vcsTime != "" { + revision += " (" + vcsTime + ")" + } + return revision + } + } + + return "dev" +} + func ReadFromFile(input string, output chan *LinkInstruction, status chan error, doclose bool) { if doclose { defer close(output)