Switch from kingpin to cobra

This enables easier use of sub-commands for flexibility
This commit is contained in:
2018-07-08 02:57:33 +01:00
parent 6883984950
commit 85cf2ac225
109 changed files with 9858 additions and 15045 deletions

62
main.go
View File

@@ -1,69 +1,19 @@
package main
import (
"bytes"
"fmt"
"log"
"strings"
"gopkg.in/alecthomas/kingpin.v2"
"github.com/jimeh/rbheapleak/cmd"
)
var (
name = "rbheapleak"
version = "dev"
commit = "unknown"
date = "unknown"
formatFlag = kingpin.Flag("format", "Output format (\"hex\" or \"full\")").
Short('f').Default("hex").String()
silentFlag = kingpin.Flag("silent", "Silence all info output").
Short('s').Bool()
file1Path = kingpin.Arg("dump-1", "Path to first heap dump file.").
Required().String()
file2Path = kingpin.Arg("dump-2", "Path to second heap dump file.").
Required().String()
file3Path = kingpin.Arg("dump-3", "Path to Third heap dump file.").
Required().String()
)
func versionString() string {
var buffer bytes.Buffer
var meta []string
buffer.WriteString(fmt.Sprintf("%s %s", name, version))
if commit != "unknown" {
meta = append(meta, commit)
}
if date != "unknown" {
meta = append(meta, date)
}
if len(meta) > 0 {
buffer.WriteString(fmt.Sprintf(" (%s)", strings.Join(meta, ", ")))
}
return buffer.String()
}
func main() {
kingpin.Version(versionString())
kingpin.Parse()
finder := NewLeakFinder(*file1Path, *file2Path, *file3Path)
finder.Verbose = !*silentFlag
err := finder.Process()
if err != nil {
log.Fatal(err)
}
if *formatFlag == "hex" {
finder.PrintLeakedAddresses()
} else if *formatFlag == "full" {
finder.PrintLeakedObjects()
}
cmd.Execute(&cmd.BuildInfo{
Version: version,
Commit: commit,
Date: date,
})
}