dump: add --compress-zip flag to compress zip archives

This commit is contained in:
Phillipp Röll committed 2024-09-15 14:25:02 +02:00
1 parent c1532179d4
commit bad6c54a33
8 files changed
+48 -17

No files matched your search

+11 -9
View File
@@ -15,18 +15,20 @@ import (
// A Dumper writes trees and files from a repository to a Writer
// in an archive format.
type Dumper struct {
cache *bloblru.Cache
format string
repo restic.Loader
w io.Writer
cache *bloblru.Cache
format string
repo restic.Loader
w io.Writer
compress bool
}
func New(format string, repo restic.Loader, w io.Writer) *Dumper {
func New(format string, compress bool, repo restic.Loader, w io.Writer) *Dumper {
return &Dumper{
cache: bloblru.New(64 << 20),
format: format,
repo: repo,
w: w,
cache: bloblru.New(64 << 20),
format: format,
repo: repo,
w: w,
compress: compress,
}
}
+2 -2
View File
@@ -23,7 +23,7 @@ func prepareTempdirRepoSrc(t testing.TB, src archiver.TestDir) (string, restic.R
type CheckDump func(t *testing.T, testDir string, testDump *bytes.Buffer) error
func WriteTest(t *testing.T, format string, cd CheckDump) {
func WriteTest(t *testing.T, format string, compress bool, cd CheckDump) {
tests := []struct {
name string
args archiver.TestDir
@@ -85,7 +85,7 @@ func WriteTest(t *testing.T, format string, cd CheckDump) {
rtest.OK(t, err)
dst := &bytes.Buffer{}
d := New(format, repo, dst)
d := New(format, compress, repo, dst)
if err := d.DumpTree(ctx, tree, tt.target); err != nil {
t.Fatalf("Dumper.Run error = %v", err)
}
+12 -1
View File
@@ -2,6 +2,7 @@ package dump
import (
"archive/tar"
"compress/gzip"
"context"
"fmt"
"os"
@@ -13,12 +14,22 @@ import (
)
func (d *Dumper) dumpTar(ctx context.Context, ch <-chan *restic.Node) (err error) {
w := tar.NewWriter(d.w)
outer := d.w
if d.compress {
outer = gzip.NewWriter(outer)
}
w := tar.NewWriter(outer)
defer func() {
if err == nil {
err = w.Close()
err = errors.Wrap(err, "Close")
if gz, ok := outer.(*gzip.Writer); ok {
err = gz.Close()
err = errors.Wrap(err, "Close")
}
}
}()
+2 -1
View File
@@ -18,7 +18,8 @@ import (
)
func TestWriteTar(t *testing.T) {
WriteTest(t, "tar", checkTar)
WriteTest(t, "tar", false, checkTar)
WriteTest(t, "tar", true, checkTar)
}
func checkTar(t *testing.T, testDir string, srcTar *bytes.Buffer) error {
+4
View File
@@ -40,6 +40,10 @@ func (d *Dumper) dumpNodeZip(ctx context.Context, node *restic.Node, zw *zip.Wri
}
header.SetMode(node.Mode)
if d.compress {
header.Method = zip.Deflate
}
if node.Type == restic.NodeTypeDir {
header.Name += "/"
}
+2 -1
View File
@@ -12,7 +12,8 @@ import (
)
func TestWriteZip(t *testing.T) {
WriteTest(t, "zip", checkZip)
WriteTest(t, "zip", true, checkZip)
WriteTest(t, "zip", false, checkZip)
}
func readZipFile(f *zip.File) ([]byte, error) {