1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-03-17 20:47:50 +02:00

Merge pull request #260 from goreleaser/archive

using goreleaser/archive
This commit is contained in:
Carlos Alexandro Becker 2017-06-23 19:32:17 -03:00 committed by GitHub
commit 2764d13877
7 changed files with 12 additions and 191 deletions

8
Gopkg.lock generated
View File

@ -31,6 +31,12 @@
packages = ["query"]
revision = "53e6ce116135b80d037921a7fdd5138cf32d7a8a"
[[projects]]
name = "github.com/goreleaser/archive"
packages = [".","tar","zip"]
revision = "caa5f3f5742eb0535631e94fa5e171c74c0144b7"
version = "v1.0.0"
[[projects]]
branch = "master"
name = "github.com/mattn/go-zglob"
@ -94,6 +100,6 @@
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
inputs-digest = "d6da23d2c5d62fbc0e9d6effeeea88169d4c5add4eb620087f17af4853a41cc4"
inputs-digest = "15a60b1efa147cc2507589fd45e4b767e118c6853c6ae2e2728a6ba01b818fe4"
solver-name = "gps-cdcl"
solver-version = 1

View File

@ -64,7 +64,9 @@
## what source location any dependent projects specify.
# source = "https://github.com/myfork/package.git"
[[constraint]]
name = "github.com/goreleaser/archive"
version = "1.0.0"
[[constraint]]
branch = "master"

View File

@ -1,64 +0,0 @@
// Package tar implements the Archive interface providing tar.gz archiving
// and compression.
package tar
import (
"archive/tar"
"compress/gzip"
"io"
"os"
)
// Archive as tar.gz
type Archive struct {
gw *gzip.Writer
tw *tar.Writer
}
// Close all closeables
func (a Archive) Close() error {
if err := a.tw.Close(); err != nil {
return err
}
if err := a.gw.Close(); err != nil {
return err
}
return nil
}
// New tar.gz archive
func New(target *os.File) Archive {
gw := gzip.NewWriter(target)
tw := tar.NewWriter(gw)
return Archive{
gw: gw,
tw: tw,
}
}
// Add file to the archive
func (a Archive) Add(name, path string) (err error) {
file, err := os.Open(path)
if err != nil {
return
}
defer func() {
_ = file.Close()
}()
stat, err := file.Stat()
if err != nil || stat.IsDir() {
return
}
header := new(tar.Header)
header.Name = name
header.Size = stat.Size()
header.Mode = int64(stat.Mode())
header.ModTime = stat.ModTime()
if err := a.tw.WriteHeader(header); err != nil {
return err
}
if _, err := io.Copy(a.tw, file); err != nil {
return err
}
return
}

View File

@ -1,34 +0,0 @@
package tar
import (
"io/ioutil"
"os"
"testing"
"github.com/stretchr/testify/assert"
)
func TestTarGzFile(t *testing.T) {
var assert = assert.New(t)
folder, err := ioutil.TempDir("", "targztest")
assert.NoError(err)
file, err := os.Create(folder + "/folder.tar.gz")
assert.NoError(err)
empty, err := os.Create(folder + "/empty.txt")
assert.NoError(err)
empty2, err := os.Create(folder + "/empty2.txt")
assert.NoError(err)
assert.NoError(os.Mkdir(folder+"/folder-inside", 0755))
archive := New(file)
assert.NoError(archive.Add("empty.txt", empty.Name()))
assert.Error(archive.Add("dont.txt", empty.Name()+"_nope"))
assert.NoError(archive.Add("empty.txt", folder+"/folder-inside"))
assert.NoError(archive.Close())
assert.Error(archive.Add("empty2.txt", empty2.Name()))
}

View File

@ -1,45 +0,0 @@
// Package zip implements the Archive interface providing zip archiving
// and compression.
package zip
import (
"archive/zip"
"io"
"os"
)
// Archive zip struct
type Archive struct {
z *zip.Writer
}
// Close all closeables
func (a Archive) Close() error {
return a.z.Close()
}
// New zip archive
func New(target *os.File) Archive {
return Archive{
z: zip.NewWriter(target),
}
}
// Add a file to the zip archive
func (a Archive) Add(name, path string) (err error) {
file, err := os.Open(path)
if err != nil {
return
}
stat, err := file.Stat()
if err != nil || stat.IsDir() {
return
}
defer func() { _ = file.Close() }()
f, err := a.z.Create(name)
if err != nil {
return err
}
_, err = io.Copy(f, file)
return err
}

View File

@ -1,30 +0,0 @@
package zip
import (
"io/ioutil"
"os"
"testing"
"github.com/stretchr/testify/assert"
)
func TestZipFile(t *testing.T) {
var assert = assert.New(t)
folder, err := ioutil.TempDir("", "ziptest")
assert.NoError(err)
file, err := os.Create(folder + "/folder.zip")
assert.NoError(err)
empty, err := os.Create(folder + "/empty.txt")
assert.NoError(err)
assert.NoError(os.Mkdir(folder+"/folder-inside", 0755))
archive := New(file)
assert.NoError(archive.Add("empty.txt", empty.Name()))
assert.NoError(archive.Add("empty.txt", folder+"/folder-inside"))
assert.Error(archive.Add("dont.txt", empty.Name()+"_nope"))
assert.NoError(archive.Close())
}

View File

@ -9,10 +9,9 @@ import (
"strings"
"github.com/apex/log"
"github.com/goreleaser/archive"
"github.com/goreleaser/goreleaser/context"
"github.com/goreleaser/goreleaser/internal/ext"
"github.com/goreleaser/goreleaser/internal/tar"
"github.com/goreleaser/goreleaser/internal/zip"
"github.com/mattn/go-zglob"
"golang.org/x/sync/errgroup"
)
@ -38,12 +37,6 @@ func (Pipe) Run(ctx *context.Context) error {
return g.Wait()
}
// Archive represents a compression archive files from disk can be written to.
type Archive interface {
Close() error
Add(name, path string) error
}
func create(ctx *context.Context, platform, name string) error {
var folder = filepath.Join(ctx.Config.Dist, name)
var format = formatFor(ctx, platform)
@ -53,7 +46,7 @@ func create(ctx *context.Context, platform, name string) error {
}
log.WithField("archive", file.Name()).Info("creating")
defer func() { _ = file.Close() }()
var archive = archiveFor(file, format)
var archive = archive.New(file)
defer func() { _ = archive.Close() }()
files, err := findFiles(ctx)
@ -84,13 +77,6 @@ func findFiles(ctx *context.Context) (result []string, err error) {
return
}
func archiveFor(file *os.File, format string) Archive {
if format == "zip" {
return zip.New(file)
}
return tar.New(file)
}
func formatFor(ctx *context.Context, platform string) string {
for _, override := range ctx.Config.Archive.FormatOverrides {
if strings.HasPrefix(platform, override.Goos) {