diff options
author | Hiroshi Ioka <hirochachacha@gmail.com> | 2017-12-19 23:59:56 +0900 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2018-01-04 16:56:51 +0000 |
commit | afd090c0c07b86de1cdeb2415d3fc187709832ac (patch) | |
tree | d4f0e75478961ed96911c7343d256436f125f469 /src/cmd/buildid | |
parent | e676dbbdaf20e00609ba4cddfd55619a1e530b21 (diff) | |
download | go-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.go | 29 |
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 { |