Browse Source

Fixes #44

Pierre Curto 6 years ago
parent
commit
151614e05c

+ 14 - 0
internal/cmdflag/buildinfo.go

@@ -0,0 +1,14 @@
+// +build go1.12
+
+package cmdflag
+
+import (
+	"runtime/debug"
+)
+
+func buildinfo() string {
+	if bi, ok := debug.ReadBuildInfo(); ok {
+		return bi.Main.Version
+	}
+	return "no version available (not built with module support)"
+}

+ 7 - 0
internal/cmdflag/buildinfo_lt_1_12.go

@@ -0,0 +1,7 @@
+// +build !go1.12
+
+package cmdflag
+
+func buildinfo() string {
+	return "no version available"
+}

+ 5 - 9
internal/cmdflag/cmdflag.go

@@ -8,7 +8,6 @@ import (
 	"os"
 	"path/filepath"
 	"runtime"
-	"runtime/debug"
 	"strings"
 	"sync"
 )
@@ -22,7 +21,7 @@ const VersionBoolFlag = "version"
 // Usage is the function used for help.
 var Usage = func() {
 	fset := flag.CommandLine
-	out := fset.Output()
+	out := fsetOutput(fset)
 
 	program := programName(os.Args[0])
 	fmt.Fprintf(out, "Usage of %s:\n", program)
@@ -98,7 +97,7 @@ func Parse() error {
 	// Global flags.
 	fset := flag.CommandLine
 	fset.Usage = Usage
-	out := fset.Output()
+	out := fsetOutput(fset)
 
 	if err := fset.Parse(args[1:]); err != nil {
 		return err
@@ -111,12 +110,9 @@ func Parse() error {
 			if b, ok := v.Get().(bool); ok && b {
 				// The flag was defined as a bool and is set.
 				program := programName(args[0])
-				if bi, ok := debug.ReadBuildInfo(); ok {
-					fmt.Fprintf(out, "%s version %s", program, bi.Main.Version)
-				} else {
-					fmt.Fprintf(out, "%s no version available (not built with module support)", program)
-				}
-				fmt.Fprintf(out, " %s/%s\n", runtime.GOOS, runtime.GOARCH)
+				fmt.Fprintf(out, "%s version %s %s/%s\n",
+					program, buildinfo(),
+					runtime.GOOS, runtime.GOARCH)
 				return nil
 			}
 		}

+ 12 - 0
internal/cmdflag/fset.go

@@ -0,0 +1,12 @@
+// +build go1.10
+
+package cmdflag
+
+import (
+	"flag"
+	"io"
+)
+
+func fsetOutput(fs *flag.FlagSet) io.Writer {
+	return fs.Output()
+}

+ 13 - 0
internal/cmdflag/fset_1_10.go

@@ -0,0 +1,13 @@
+// +build !go1.10
+
+package cmdflag
+
+import (
+	"flag"
+	"io"
+	"os"
+)
+
+func fsetOutput(fs *flag.FlagSet) io.Writer {
+	return os.Stderr
+}