cmd/buildlet, cmd/release: disable pargzip for release builds
Fixes golang/go#19052
Change-Id: Icf2923ea72290bd99b78e1c2fd9675668157b3ac
Reviewed-on: https://go-review.googlesource.com/36910
Reviewed-by: Quentin Smith <quentin@golang.org>
diff --git a/buildlet/buildletclient.go b/buildlet/buildletclient.go
index 3473942..1985ce8 100644
--- a/buildlet/buildletclient.go
+++ b/buildlet/buildletclient.go
@@ -137,7 +137,8 @@
password string // basic auth password or empty for none
remoteBuildlet string // non-empty if for remote buildlets
- closeFuncs []func() // optional extra code to run on close
+ closeFuncs []func() // optional extra code to run on close
+ releaseMode bool
ctx context.Context
ctxCancel context.CancelFunc
@@ -154,6 +155,16 @@
broken bool // client is broken in some way
}
+// SetReleaseMode sets whether this client is being used in "release
+// mode", to prepare the final binaries to be shipped to uses. All
+// this mode does for now is disable pargzip multi-stream gzip
+// files. See golang.org/issue/19052.
+//
+// SetReleaseMode must be set before using the client.
+func (c *Client) SetReleaseMode(v bool) {
+ c.releaseMode = v
+}
+
func (c *Client) String() string {
if c == nil {
return "(nil *buildlet.Client)"
@@ -375,7 +386,11 @@
// GetTar returns a .tar.gz stream of the given directory, relative to the buildlet's work dir.
// The provided dir may be empty to get everything.
func (c *Client) GetTar(ctx context.Context, dir string) (io.ReadCloser, error) {
- req, err := http.NewRequest("GET", c.URL()+"/tgz?dir="+url.QueryEscape(dir), nil)
+ var args string
+ if c.releaseMode {
+ args = "&pargzip=0"
+ }
+ req, err := http.NewRequest("GET", c.URL()+"/tgz?dir="+url.QueryEscape(dir)+args, nil)
if err != nil {
return nil, err
}
diff --git a/cmd/buildlet/buildlet.go b/cmd/buildlet/buildlet.go
index 86916f9..d3a9cac 100644
--- a/cmd/buildlet/buildlet.go
+++ b/cmd/buildlet/buildlet.go
@@ -433,7 +433,12 @@
http.Error(w, "bogus dir", http.StatusBadRequest)
return
}
- zw := pargzip.NewWriter(w)
+ var zw io.WriteCloser
+ if r.FormValue("pargzip") == "0" {
+ zw = gzip.NewWriter(w)
+ } else {
+ zw = pargzip.NewWriter(w)
+ }
tw := tar.NewWriter(zw)
base := filepath.Join(*workDir, filepath.FromSlash(dir))
err := filepath.Walk(base, func(path string, fi os.FileInfo, err error) error {
diff --git a/cmd/release/release.go b/cmd/release/release.go
index cf64641..db34d8c 100644
--- a/cmd/release/release.go
+++ b/cmd/release/release.go
@@ -257,6 +257,7 @@
if err != nil {
return nil, err
}
+ bc.SetReleaseMode(true) // disable pargzip; golang.org/issue/19052
return bc, nil
}