Skip to content

Commit

Permalink
Add support for -version=raw to print the Go version.Info
Browse files Browse the repository at this point in the history
This can be helpful to print the internal fields of the version
information that will contain more details about the git tree than the
short -version output will.

Tested:
- Tested getting the raw version:
  $ _output/go/bin/kubecfg -version=raw
  version.Info{Major:"0", Minor:"1+", GitVersion:"v2.2.1-33-gdc4becd9765393", GitCommit:"dc4becd9765393fa05a3eb06f6af9e00068fe0c5", GitTreeState:"dirty"}

- Tested getting the simple version:
  $ _output/go/bin/kubecfg -version
  Kubernetes version 0.1+, build dc4becd

- Tested getting the help output:
  $ _output/go/bin/kubecfg 2>&1 | grep -- -version
    -version=false: Print version information and quit

- Made sure -version=true and -version=false works, that -version with
  an invalid argument works as expected (prints usage help) and that
  -version followed by space will not try to use the next word as its
  argument (i.e. `-version raw` prints the version but not the raw one.)

Signed-off-by: Filipe Brandenburger <filbranden@google.com>
  • Loading branch information
filbranden committed Aug 30, 2014
1 parent dc4becd commit 2421c73
Showing 1 changed file with 56 additions and 2 deletions.
58 changes: 56 additions & 2 deletions pkg/version/flag/flag.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,72 @@ import (
"flag"
"fmt"
"os"
"strconv"

"github.com/GoogleCloudPlatform/kubernetes/pkg/version"
)

type versionValue int

const (
VersionFalse versionValue = 0
VersionTrue versionValue = 1
VersionRaw versionValue = 2
)

const strRawVersion string = "raw"

func (v *versionValue) IsBoolFlag() bool {
return true
}

func (v *versionValue) Get() interface{} {
return versionValue(*v)
}

func (v *versionValue) Set(s string) error {
if s == strRawVersion {
*v = VersionRaw
return nil
}
boolVal, err := strconv.ParseBool(s)
if boolVal {
*v = VersionTrue
} else {
*v = VersionFalse
}
return err
}

func (v *versionValue) String() string {
if *v == VersionRaw {
return strRawVersion
}
return fmt.Sprintf("%v", bool(*v == VersionTrue))
}

func VersionVar(p *versionValue, name string, value versionValue, usage string) {
*p = value
flag.Var(p, name, usage)
}

func Version(name string, value versionValue, usage string) *versionValue {
p := new(versionValue)
VersionVar(p, name, value, usage)
return p
}

var (
versionFlag = flag.Bool("version", false, "Print version information and quit")
versionFlag = Version("version", VersionFalse, "Print version information and quit")
)

// PrintAndExitIfRequested will check if the -version flag was passed
// and, if so, print the version and exit.
func PrintAndExitIfRequested() {
if *versionFlag {
if *versionFlag == VersionRaw {
fmt.Printf("%#v\n", version.Get())
os.Exit(0)
} else if *versionFlag == VersionTrue {
fmt.Printf("Kubernetes %s\n", version.Get())
os.Exit(0)
}
Expand Down

0 comments on commit 2421c73

Please sign in to comment.