btrfs/receive.go
Denys Smirnov b300237e77 Implement basic subvolume and snapshot commands. Exec-based send and receive.
* better code generator

* regenerate btrfs_tree.h constants

* implement subvolume create, delete and snapshot create commands

* exec-based snapshot send and receive
2016-09-15 20:39:46 +03:00

33 lines
555 B
Go

package btrfs
import (
"bytes"
"errors"
"io"
"os/exec"
)
func Receive(r io.Reader, mount string) error {
// TODO: write a native implementation?
//tf, err := ioutil.TempFile("","btrfs_snap")
//if err != nil {
// return err
//}
//defer func(){
// name := tf.Name()
// tf.Close()
// os.Remove(name)
//}()
buf := bytes.NewBuffer(nil)
cmd := exec.Command("btrfs", "receive", mount)
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
}