package drmdb
import (
"archive/tar"
"compress/gzip"
"io"
"io/ioutil"
"os"
"path/filepath"
)
const licenseFile = "LICENSE"
func writeSnapshotFile(tw *tar.Writer, p string, fi os.FileInfo) error {
f, err := os.Open(p)
if err != nil {
return err
}
defer f.Close()
if fi == nil {
fi, err = f.Stat()
if err != nil {
return err
}
}
h, err := tar.FileInfoHeader(fi, "")
if err != nil {
return err
}
if err := tw.WriteHeader(h); err != nil {
return err
}
_, err = io.Copy(tw, f)
return err
}
func writeSnapshot(w io.Writer) error {
gw := gzip.NewWriter(w)
defer gw.Close()
tw := tar.NewWriter(gw)
defer tw.Close()
if err := writeSnapshotFile(tw, licenseFile, nil); err != nil {
return err
}
files, err := ioutil.ReadDir(dbDir)
if err != nil {
return err
}
for _, fi := range files {
p := filepath.Join(dbDir, fi.Name())
if err := writeSnapshotFile(tw, p, fi); err != nil {
return err
}
}
return nil
}