summaryrefslogtreecommitdiff
path: root/backend.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2017-11-17 16:29:37 -0500
committerLuke Shumaker <lukeshu@lukeshu.com>2017-11-17 16:29:37 -0500
commitd9498148b860252c6f80eb6cd5acbd9fe07b2b8b (patch)
tree61ef914767f07df85688ccd7187da48efca25b64 /backend.go
parent5b3b19e1280ac879567f9299639f60e5b1dd0c14 (diff)
error callbacks
Diffstat (limited to 'backend.go')
-rw-r--r--backend.go54
1 files changed, 38 insertions, 16 deletions
diff --git a/backend.go b/backend.go
index 3bf07b5..b91ee88 100644
--- a/backend.go
+++ b/backend.go
@@ -13,58 +13,80 @@ type Backend struct {
w *bufio.Writer
fiw *textproto.FIWriter
cbr *textproto.CatBlobReader
+
+ onErr func(error) error
}
-func NewBackend(fastImport io.Writer, catBlob io.Reader) *Backend {
- ret := Backend{}
+func NewBackend(fastImport io.Writer, catBlob io.Reader, onErr func(error) error) *Backend {
+ ret := &Backend{}
ret.w = bufio.NewWriter(fastImport)
ret.fiw = textproto.NewFIWriter(ret.w)
if catBlob != nil {
ret.cbr = textproto.NewCatBlobReader(catBlob)
}
- return &ret
+ ret.onErr = onErr
+ return ret
}
func (b *Backend) Do(cmd Cmd) error {
err := cmd.fiWriteCmd(b.fiw)
if err != nil {
- return err
+ return b.onErr(err)
+ }
+ err = b.w.Flush()
+ if err != nil {
+ return b.onErr(err)
}
- return b.w.Flush()
+ return nil
}
-func (b *Backend) GetMark(cmd CmdGetMark) (string, error) {
- err := b.Do(cmd)
+func (b *Backend) GetMark(cmd CmdGetMark) (sha1 string, err error) {
+ err = b.Do(cmd)
if err != nil {
- return "", err
+ return
}
line, err := b.cbr.ReadLine()
if err != nil {
- return "", err
+ err = b.onErr(err)
+ return
+ }
+ sha1, err = cbpGetMark(line)
+ if err != nil {
+ err = b.onErr(err)
}
- return cbpGetMark(line)
+ return
}
func (b *Backend) CatBlob(cmd CmdCatBlob) (sha1 string, data string, err error) {
err = b.Do(cmd)
if err != nil {
- return "", "", err
+ return
}
line, err := b.cbr.ReadLine()
if err != nil {
- return "", "", err
+ err = b.onErr(err)
+ return
+ }
+ sha1, data, err = cbpCatBlob(line)
+ if err != nil {
+ err = b.onErr(err)
}
- return cbpCatBlob(line)
+ return
}
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
+ return
}
line, err := b.cbr.ReadLine()
if err != nil {
- return 0, "", "", err
+ err = b.onErr(err)
+ return
+ }
+ mode, dataref, path, err = cbpLs(line)
+ if err != nil {
+ err = b.onErr(err)
}
- return cbpLs(line)
+ return
}