Add capacity to obidistribute to save gzipped files

This commit is contained in:
2023-02-17 12:52:19 +01:00
parent 6fd426d8be
commit 9554a32490
9 changed files with 124 additions and 30 deletions

69
pkg/goutils/gzipfile.go Normal file
View File

@@ -0,0 +1,69 @@
package goutils
import (
"bufio"
"compress/gzip"
"os"
)
type Wfile struct {
compressed bool
f *os.File
gf *gzip.Writer
fw *bufio.Writer
}
func OpenWritingFile(name string, compressed bool, append bool) (*Wfile, error) {
flags := os.O_WRONLY | os.O_CREATE
if append {
flags |= os.O_APPEND
}
fi, err := os.OpenFile(name, flags, 0660)
if err != nil {
return nil, err
}
var gf *gzip.Writer
var fw *bufio.Writer
if compressed {
gf = gzip.NewWriter(fi)
fw = bufio.NewWriter(gf)
} else {
gf = nil
fw = bufio.NewWriter(fi)
}
return &Wfile{compressed: compressed,
f: fi,
gf: gf,
fw: fw,
}, nil
}
func (w *Wfile) Write(p []byte) (n int, err error) {
return w.fw.Write(p)
}
func (w *Wfile) WriteString(s string) (n int, err error) {
return w.fw.Write([]byte(s))
}
func (w *Wfile) Close() error {
var err error
err = nil
if w.compressed {
err = w.gf.Close()
}
err2 := w.f.Close()
if err == nil {
err = err2
}
return err
}