btrfs/receive.go
2017-11-27 20:43:55 +02:00

59 lines
1.1 KiB
Go

package btrfs
import (
"bytes"
"errors"
"io"
"os"
"os/exec"
"path/filepath"
"syscall"
)
const nativeReceive = false
func Receive(r io.Reader, dstDir string) error {
if !nativeReceive {
buf := bytes.NewBuffer(nil)
cmd := exec.Command("btrfs", "receive", dstDir)
cmd.Stdin = r
cmd.Stderr = buf
if err := cmd.Run(); err != nil {
if buf.Len() != 0 {
return errors.New(buf.String())
}
return err
}
return nil
}
var err error
dstDir, err = filepath.Abs(dstDir)
if err != nil {
return err
}
realMnt, err := findMountRoot(dstDir)
if err != nil {
return err
}
dir, err := os.OpenFile(dstDir, os.O_RDONLY|syscall.O_NOATIME, 0755)
if err != nil {
return err
}
mnt, err := os.OpenFile(realMnt, os.O_RDONLY|syscall.O_NOATIME, 0755)
if err != nil {
return err
}
// We want to resolve the path to the subvolume we're sitting in
// so that we can adjust the paths of any subvols we want to receive in.
subvolID, err := getFileRootID(mnt)
if err != nil {
return err
}
//sr, err := send.NewStreamReader(r)
//if err != nil {
// return err
//}
_, _ = dir, subvolID
panic("not implemented")
}