diff options
Diffstat (limited to 'src/cmd/buildid')
-rw-r--r-- | src/cmd/buildid/buildid.go | 80 | ||||
-rw-r--r-- | src/cmd/buildid/doc.go | 19 |
2 files changed, 99 insertions, 0 deletions
diff --git a/src/cmd/buildid/buildid.go b/src/cmd/buildid/buildid.go new file mode 100644 index 0000000..72ad80d --- /dev/null +++ b/src/cmd/buildid/buildid.go @@ -0,0 +1,80 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "flag" + "fmt" + "log" + "os" + "strings" + + "cmd/internal/buildid" +) + +func usage() { + fmt.Fprintf(os.Stderr, "usage: go tool buildid [-w] file\n") + flag.PrintDefaults() + os.Exit(2) +} + +var wflag = flag.Bool("w", false, "write build ID") + +func main() { + log.SetPrefix("buildid: ") + log.SetFlags(0) + flag.Usage = usage + flag.Parse() + if flag.NArg() != 1 { + usage() + } + + file := flag.Arg(0) + id, err := buildid.ReadFile(file) + if err != nil { + log.Fatal(err) + } + if !*wflag { + fmt.Printf("%s\n", id) + return + } + + // Keep in sync with src/cmd/go/internal/work/buildid.go:updateBuildID + + f, err := os.Open(file) + if err != nil { + log.Fatal(err) + } + matches, hash, err := buildid.FindAndHash(f, id, 0) + f.Close() + if err != nil { + log.Fatal(err) + } + + // <= go 1.7 doesn't embed the contentID or actionID, so no slash is present + if !strings.Contains(id, "/") { + log.Fatalf("%s: build ID is a legacy format...binary too old for this tool", file) + } + + newID := id[:strings.LastIndex(id, "/")] + "/" + buildid.HashToString(hash) + if len(newID) != len(id) { + log.Fatalf("%s: build ID length mismatch %q vs %q", file, id, newID) + } + + if len(matches) == 0 { + return + } + + f, err = os.OpenFile(file, os.O_RDWR, 0) + if err != nil { + log.Fatal(err) + } + if err := buildid.Rewrite(f, matches, newID); err != nil { + log.Fatal(err) + } + if err := f.Close(); err != nil { + log.Fatal(err) + } +} diff --git a/src/cmd/buildid/doc.go b/src/cmd/buildid/doc.go new file mode 100644 index 0000000..a554d79 --- /dev/null +++ b/src/cmd/buildid/doc.go @@ -0,0 +1,19 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Buildid displays or updates the build ID stored in a Go package or binary. + +Usage: + + go tool buildid [-w] file + +By default, buildid prints the build ID found in the named file. +If the -w option is given, buildid rewrites the build ID found in +the file to accurately record a content hash of the file. + +This tool is only intended for use by the go command or +other build systems. +*/ +package main |