From f13250e6a926640c4d0ee858f84fcf8036d612aa Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Wed, 22 Nov 2017 14:47:56 -0500 Subject: ahhh --- backend.go | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'backend.go') diff --git a/backend.go b/backend.go index fc67d82..72242a1 100644 --- a/backend.go +++ b/backend.go @@ -2,6 +2,7 @@ package libfastimport import ( "bufio" + "fmt" "io" "git.lukeshu.com/go/libfastimport/textproto" @@ -15,6 +16,8 @@ type Backend struct { fiw *textproto.FIWriter cbr *textproto.CatBlobReader + inCommit bool + err error onErr func(error) error } @@ -45,12 +48,27 @@ func NewBackend(fastImport io.WriteCloser, catBlob io.Reader, onErr func(error) return ret } +// will panic if Cmd is a type that may only be used in a commit but +// we aren't in a commit. func (b *Backend) Do(cmd Cmd) error { if b.err == nil { return b.err } - err := cmd.fiWriteCmd(b.fiw) + switch cmd.fiCmdClass() { + case cmdClassCommand: + _, b.inCommit = cmd.(CmdCommit) + case cmdClassCommit: + if !b.inCommit { + panic(fmt.Errorf("Cannot issue commit sub-command outside of a commit: %[1]T(%#[1]v)", cmd)) + } + case cmdClassComment: + /* do nothing */ + default: + panic(fmt.Errorf("invalid cmdClass: %d", cmd.fiCmdClass())) + } + + err := cmd.fiCmdWrite(b.fiw) if err != nil { return b.onErr(err) } @@ -59,7 +77,7 @@ func (b *Backend) Do(cmd Cmd) error { return b.onErr(err) } - if _, ok := cmd.(CmdDone); ok { + if _, isDone := cmd.(CmdDone); isDone { return b.onErr(nil) } -- cgit v1.2.3