aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/buildid
diff options
context:
space:
mode:
authorHiroshi Ioka <hirochachacha@gmail.com>2017-12-19 23:59:56 +0900
committerRuss Cox <rsc@golang.org>2018-01-04 16:56:51 +0000
commitafd090c0c07b86de1cdeb2415d3fc187709832ac (patch)
treed4f0e75478961ed96911c7343d256436f125f469 /src/cmd/buildid
parente676dbbdaf20e00609ba4cddfd55619a1e530b21 (diff)
downloadgo-afd090c0c07b86de1cdeb2415d3fc187709832ac.tar.gz
go-afd090c0c07b86de1cdeb2415d3fc187709832ac.zip
cmd/buildid: fix rewrite algorithm
Update rewrite algorithm by coping code from go/internal/work/buildid:updateBuildID. Probably, this is not the best option. We could provide high-level API in cmd/internal/buildid in the future. Fixes #23181 Change-Id: I336a7c50426ab39bc9998b55c372af61a4fb21a7 Reviewed-on: https://go-review.googlesource.com/84735 Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/cmd/buildid')
-rw-r--r--src/cmd/buildid/buildid.go29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/cmd/buildid/buildid.go b/src/cmd/buildid/buildid.go
index 8d810ffdd9..1c7b228c98 100644
--- a/src/cmd/buildid/buildid.go
+++ b/src/cmd/buildid/buildid.go
@@ -22,6 +22,21 @@ func usage() {
var wflag = flag.Bool("w", false, "write build ID")
+// taken from cmd/go/internal/work/buildid.go
+func hashToString(h [32]byte) string {
+ const b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
+ const chunks = 5
+ var dst [chunks * 4]byte
+ for i := 0; i < chunks; i++ {
+ v := uint32(h[3*i])<<16 | uint32(h[3*i+1])<<8 | uint32(h[3*i+2])
+ dst[4*i+0] = b64[(v>>18)&0x3F]
+ dst[4*i+1] = b64[(v>>12)&0x3F]
+ dst[4*i+2] = b64[(v>>6)&0x3F]
+ dst[4*i+3] = b64[v&0x3F]
+ }
+ return string(dst[:])
+}
+
func main() {
log.SetPrefix("buildid: ")
log.SetFlags(0)
@@ -41,6 +56,8 @@ func main() {
return
}
+ // Keep in sync with src/cmd/go/internal/work/buildid.go:updateBuildID
+
f, err := os.Open(file)
if err != nil {
log.Fatal(err)
@@ -51,14 +68,14 @@ func main() {
}
f.Close()
- tail := id
- if i := strings.LastIndex(id, "."); i >= 0 {
- tail = tail[i+1:]
+ newID := id[:strings.LastIndex(id, "/")] + "/" + hashToString(hash)
+ if len(newID) != len(id) {
+ log.Fatalf("%s: build ID length mismatch %q vs %q", file, id, newID)
}
- if len(tail) != len(hash)*2 {
- log.Fatalf("%s: cannot find %d-byte hash in id %s", file, len(hash), id)
+
+ if len(matches) == 0 {
+ return
}
- newID := id[:len(id)-len(tail)] + fmt.Sprintf("%x", hash)
f, err = os.OpenFile(file, os.O_WRONLY, 0)
if err != nil {