blob: ea10885ed7b2ec7b1a69948160ac4bd9df83d25d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
package libfastimport
type UnsupportedCommand string
func (e UnsupportedCommand) Error() string {
return "Unsupported command: "+string(e)
}
type Parser struct {
fir *FIReader
cmd chan Cmd
}
func (p *Parser) GetCmd() (Cmd, error) {
for p.cmd == nil {
slice, err := p.fir.ReadSlice()
if err != nil {
return nil, err
}
err = p.putSlice(slice)
if err != nil {
return nil, err
}
}
return <-p.cmd, nil
}
func (p *Parser) putSlice(slice []byte) error {
if len(slice) < 1 {
return UnsupportedCommand(slice)
}
switch slice[0] {
case '#': // comment
case 'b': // blob
case 'c':
if len(slice) < 2 {
return UnsupportedCommand(slice)
}
switch slice[1] {
case 'o': // commit
case 'h': // checkpoint
case 'a': // cat-blob
default:
return UnsupportedCommand(slice)
}
case 'd': // done
case 'f': // feature
case 'g': // get-mark
case 'l': // ls
case 'o': // option
case 'p': // progress
case 'r': // reset
case 't': // tag
default:
return UnsupportedCommand(slice)
}
return nil // TODO
}
|