diff options
author | kegsay <kegan@matrix.org> | 2021-07-07 12:06:17 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-07 12:06:17 +0100 |
commit | d72d634391b937810c23c1c5cd9724ecfd96caf0 (patch) | |
tree | 37b76d6c62fb92ac0ed06cbdea366f92d354bd02 /cmd/dendrite-upgrade-tests/tar.go | |
parent | bcd3ef38d0c288ebbad54e8cd05f78ff22376c02 (diff) |
Add dendrite-upgrade-test (#1901)
* Add WIP binary for testing dendrite version upgrades
* WIP dendrite upgrade work
* Finish dendrite upgrade checks
* go mod tidy
* Review comments; print container logs on failure
* Linting
Diffstat (limited to 'cmd/dendrite-upgrade-tests/tar.go')
-rw-r--r-- | cmd/dendrite-upgrade-tests/tar.go | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/cmd/dendrite-upgrade-tests/tar.go b/cmd/dendrite-upgrade-tests/tar.go new file mode 100644 index 00000000..9eadbb3d --- /dev/null +++ b/cmd/dendrite-upgrade-tests/tar.go @@ -0,0 +1,57 @@ +package main + +import ( + "archive/tar" + "compress/gzip" + "io" + "os" + "path/filepath" + "strings" +) + +// From https://gist.github.com/mimoo/25fc9716e0f1353791f5908f94d6e726 +// Modified to strip off top-level when compressing +func compress(src string, buf io.Writer) error { + // tar > gzip > buf + zr := gzip.NewWriter(buf) + tw := tar.NewWriter(zr) + + // walk through every file in the folder + _ = filepath.Walk(src, func(file string, fi os.FileInfo, e error) error { + // generate tar header + header, err := tar.FileInfoHeader(fi, file) + if err != nil { + return err + } + + // must provide real name + // (see https://golang.org/src/archive/tar/common.go?#L626) + header.Name = strings.TrimPrefix(filepath.ToSlash(file), src+"/") + // write header + if err := tw.WriteHeader(header); err != nil { + return err + } + // if not a dir, write file content + if !fi.IsDir() { + data, err := os.Open(file) + if err != nil { + return err + } + if _, err := io.Copy(tw, data); err != nil { + return err + } + } + return nil + }) + + // produce tar + if err := tw.Close(); err != nil { + return err + } + // produce gzip + if err := zr.Close(); err != nil { + return err + } + // + return nil +} |