| package packp |
| |
| import ( |
| "fmt" |
| ) |
| |
| type stateFn func() stateFn |
| |
| const ( |
| // common |
| hashSize = 40 |
| |
| // advrefs |
| head = "HEAD" |
| noHead = "capabilities^{}" |
| ) |
| |
| var ( |
| // common |
| sp = []byte(" ") |
| eol = []byte("\n") |
| eq = []byte{'='} |
| |
| // advertised-refs |
| null = []byte("\x00") |
| peeled = []byte("^{}") |
| noHeadMark = []byte(" capabilities^{}\x00") |
| |
| // upload-request |
| want = []byte("want ") |
| shallow = []byte("shallow ") |
| deepen = []byte("deepen") |
| deepenCommits = []byte("deepen ") |
| deepenSince = []byte("deepen-since ") |
| deepenReference = []byte("deepen-not ") |
| |
| // shallow-update |
| unshallow = []byte("unshallow ") |
| |
| // server-response |
| ack = []byte("ACK") |
| nak = []byte("NAK") |
| |
| // updreq |
| shallowNoSp = []byte("shallow") |
| ) |
| |
| func isFlush(payload []byte) bool { |
| return len(payload) == 0 |
| } |
| |
| // ErrUnexpectedData represents an unexpected data decoding a message |
| type ErrUnexpectedData struct { |
| Msg string |
| Data []byte |
| } |
| |
| // NewErrUnexpectedData returns a new ErrUnexpectedData containing the data and |
| // the message given |
| func NewErrUnexpectedData(msg string, data []byte) error { |
| return &ErrUnexpectedData{Msg: msg, Data: data} |
| } |
| |
| func (err *ErrUnexpectedData) Error() string { |
| if len(err.Data) == 0 { |
| return err.Msg |
| } |
| |
| return fmt.Sprintf("%s (%s)", err.Msg, err.Data) |
| } |