summaryrefslogtreecommitdiff
path: root/backend.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2017-11-16 10:08:15 -0500
committerLuke Shumaker <lukeshu@lukeshu.com>2017-11-16 10:08:15 -0500
commitce0f40c125ff838d332c1974c8e505e4be1e409b (patch)
treef78a992881f07421ae9cc5afc259ca5527614df1 /backend.go
parentefc7a5ebc9e10983571c080017100a8b39eee1d0 (diff)
more
Diffstat (limited to 'backend.go')
-rw-r--r--backend.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/backend.go b/backend.go
new file mode 100644
index 0000000..4d03d46
--- /dev/null
+++ b/backend.go
@@ -0,0 +1,70 @@
+package libfastimport
+
+import (
+ "io"
+ "bufio"
+
+ "git.lukeshu.com/go/libfastimport/textproto"
+)
+
+// A Backend is something that consumes a fast-import stream; the
+// Backend object provides methods for writing to it.
+type Backend struct {
+ w *bufio.Writer
+ fiw *textproto.FIWriter
+ cbr *textproto.CatBlobReader
+}
+
+func NewBackend(fastImport io.Writer, catBlob io.Reader) *Backend {
+ ret := Backend{}
+ ret.w = bufio.NewWriter(fastImport)
+ ret.fiw = textproto.NewFIWriter(ret.w)
+ if catBlob != nil {
+ ret.cbr = textproto.NewCatBlobReader(catBlob)
+ }
+ return &ret
+}
+
+func (b *Backend) Do(cmd Cmd) error {
+ err := cmd.fiWriteCmd(b.fiw)
+ if err != nil {
+ return err
+ }
+ return b.w.Flush()
+}
+
+func (b *Backend) GetMark(cmd CmdGetMark) (string, error) {
+ err := b.Do(cmd)
+ if err != nil {
+ return "", err
+ }
+ line, err := b.cbr.ReadLine()
+ if err != nil {
+ return "", err
+ }
+ return cbpGetMark(line)
+}
+
+func (b *Backend) CatBlob(cmd CmdCatBlob) (sha1 string, data string, err error) {
+ err = b.Do(cmd)
+ if err != nil {
+ return "", "", err
+ }
+ line, err := b.cbr.ReadLine()
+ if err != nil {
+ return "", "", err
+ }
+ return cbpCatBlob(line)
+}
+
+func (b *Backend) Ls(cmd CmdLs) (mode textproto.Mode, dataref string, path textproto.Path, err error) {
+ err = b.Do(cmd)
+ if err != nil {
+ return 0, "", "", err
+ }
+ line, err := b.cbr.ReadLine()
+ if err != nil {
+ return 0, "", "", err
+ }
+ return cbpLs(line)
+}