From 810b866146eb402e007dfd4615c1aaa5526399e3 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 3 Nov 2016 11:35:16 +0100 Subject: [PATCH] internal/build: improve archives - enable compression for zip files - don't write half-complete archives --- build/ci.go | 17 +++++++++-------- internal/build/archive.go | 28 ++++++++++++++++++---------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/build/ci.go b/build/ci.go index 910de6d603..3b9bd51815 100644 --- a/build/ci.go +++ b/build/ci.go @@ -296,18 +296,20 @@ func doArchive(cmdline []string) { log.Fatal("unknown archive type: ", atype) } - env := build.Env() + var ( + env = build.Env() + base = archiveBasename(*arch, env) + geth = "geth-" + base + ext + alltools = "geth-alltools-" + base + ext + ) maybeSkipArchive(env) - - base := archiveBasename(*arch, env) - if err := build.WriteArchive("geth-"+base, ext, gethArchiveFiles); err != nil { + if err := build.WriteArchive(geth, gethArchiveFiles); err != nil { log.Fatal(err) } - if err := build.WriteArchive("geth-alltools-"+base, ext, allToolsArchiveFiles); err != nil { + if err := build.WriteArchive(alltools, allToolsArchiveFiles); err != nil { log.Fatal(err) } - - for _, archive := range []string{"geth-" + base + ext, "geth-alltools-" + base + ext} { + for _, archive := range []string{geth, alltools} { if err := archiveUpload(archive, *upload, *signer); err != nil { log.Fatal(err) } @@ -315,7 +317,6 @@ func doArchive(cmdline []string) { } func archiveBasename(arch string, env build.Environment) string { - // date := time.Now().UTC().Format("200601021504") platform := runtime.GOOS + "-" + arch archive := platform + "-" + build.VERSION() if env.Commit != "" { diff --git a/internal/build/archive.go b/internal/build/archive.go index 2a7090c0df..ac680ba63d 100644 --- a/internal/build/archive.go +++ b/internal/build/archive.go @@ -41,14 +41,14 @@ type Archive interface { Close() error } -func NewArchive(file *os.File) Archive { +func NewArchive(file *os.File) (Archive, string) { switch { case strings.HasSuffix(file.Name(), ".zip"): - return NewZipArchive(file) + return NewZipArchive(file), strings.TrimSuffix(file.Name(), ".zip") case strings.HasSuffix(file.Name(), ".tar.gz"): - return NewTarballArchive(file) + return NewTarballArchive(file), strings.TrimSuffix(file.Name(), ".tar.gz") default: - return nil + return nil, "" } } @@ -74,17 +74,24 @@ func AddFile(a Archive, file string) error { } // WriteArchive creates an archive containing the given files. -func WriteArchive(basename, ext string, files []string) error { - archfd, err := os.Create(basename + ext) +func WriteArchive(name string, files []string) (err error) { + archfd, err := os.Create(name) if err != nil { return err } - defer archfd.Close() - archive := NewArchive(archfd) + + defer func() { + archfd.Close() + // Remove the half-written archive on failure. + if err != nil { + os.Remove(name) + } + }() + archive, basename := NewArchive(archfd) if archive == nil { - return fmt.Errorf("unknown archive extension: %s", ext) + return fmt.Errorf("unknown archive extension") } - fmt.Println(basename + ext) + fmt.Println(name) if err := archive.Directory(basename); err != nil { return err } @@ -118,6 +125,7 @@ func (a *ZipArchive) Header(fi os.FileInfo) (io.Writer, error) { return nil, fmt.Errorf("can't make zip header: %v", err) } head.Name = a.dir + head.Name + head.Method = zip.Deflate w, err := a.zipw.CreateHeader(head) if err != nil { return nil, fmt.Errorf("can't add zip header: %v", err)