package binfo import ( "fmt" "strings" ) type SummaryMode uint const ( ModeModule SummaryMode = 1 << iota ModeBuild ModeCGO ModeVCS ModeMultiline ) func (b Binfo) Summarize(name string, version string, mode SummaryMode) string { wants := func(test SummaryMode) bool { return mode&test == test } var ( brk string sep string ) if wants(ModeMultiline) { brk = "\n" sep = "\n" } else { brk = " " sep = ", " } lines := make([]string, 0, 4) if wants(ModeModule) { lines = append( lines, fmt.Sprintf("module %s (%s) (sum %s)", b.Module.Path, b.Module.Version, b.Module.Sum), ) } if wants(ModeBuild) { lines = append( lines, fmt.Sprintf("built with %s (%s) (mode %s)", b.Build.Compiler, b.Build.GoVersion, b.Build.Mode), ) } if wants(ModeCGO) { if b.CGO.Enabled { lines = append( lines, fmt.Sprintf("with cgo (c %q) (cpp %q) (cxx %q) (ld %q)", b.CGO.Flags.C, b.CGO.Flags.CPP, b.CGO.Flags.CXX, b.CGO.Flags.LD), ) } else { lines = append( lines, "without cgo", ) } } if wants(ModeVCS) { var m string if b.VCS.Modified { m = " (modified)" } else { m = "" } lines = append( lines, fmt.Sprintf("via %s (rev %s) (at %s)%s", b.VCS.Name, b.VCS.Revision, b.VCS.Time.Format("2006-01-02 15:04:05"), m), ) } j := strings.Join(lines, sep) if name == "" { return j } else { return fmt.Sprintf("%s %s:%s%s", name, version, brk, j) } }