internal/build: improve archives

- enable compression for zip files
- don't write half-complete archives
This commit is contained in:
Felix Lange 2016-11-03 11:35:16 +01:00
parent e685c8546f
commit 810b866146
2 changed files with 27 additions and 18 deletions

View file

@ -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 != "" {

View file

@ -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)
if archive == nil {
return fmt.Errorf("unknown archive extension: %s", ext)
defer func() {
archfd.Close()
// Remove the half-written archive on failure.
if err != nil {
os.Remove(name)
}
fmt.Println(basename + ext)
}()
archive, basename := NewArchive(archfd)
if archive == nil {
return fmt.Errorf("unknown archive extension")
}
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)