aboutsummaryrefslogtreecommitdiff
path: root/cmd/dendrite-upgrade-tests/tar.go
diff options
context:
space:
mode:
authorkegsay <kegan@matrix.org>2021-07-07 12:06:17 +0100
committerGitHub <noreply@github.com>2021-07-07 12:06:17 +0100
commitd72d634391b937810c23c1c5cd9724ecfd96caf0 (patch)
tree37b76d6c62fb92ac0ed06cbdea366f92d354bd02 /cmd/dendrite-upgrade-tests/tar.go
parentbcd3ef38d0c288ebbad54e8cd05f78ff22376c02 (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.go57
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
+}