diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2017-11-16 10:08:15 -0500 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2017-11-16 10:08:15 -0500 |
commit | ce0f40c125ff838d332c1974c8e505e4be1e409b (patch) | |
tree | f78a992881f07421ae9cc5afc259ca5527614df1 /backend.go | |
parent | efc7a5ebc9e10983571c080017100a8b39eee1d0 (diff) |
more
Diffstat (limited to 'backend.go')
-rw-r--r-- | backend.go | 70 |
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) +} |