1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package gig
- import (
- "io"
- "bytes"
- "strings"
- "compress/zlib"
- )
- func readUntilNul(r io.Reader) (string, error) {
- buf := bytes.NewBuffer(make([]byte, 0))
- for {
- var b [1]byte
- _, err := r.Read(b[:])
- if err != nil {
- return "", err
- } else if b[0] == 0 {
- break
- }
- buf.WriteByte(b[0])
- }
- return buf.String(), nil
- }
- func split2(s, sep string) (head, tail string) {
- comps := strings.SplitN(s, sep, 2)
- head = comps[0]
- if len(comps) > 1 {
- tail = comps[1]
- }
- return
- }
- type zlibReadCloser struct {
- io.LimitedReader //R of io.LimitedReader is the zlib reader
- source io.ReadCloser //the underlying source
- }
- func (r *zlibReadCloser) Close() error {
- var e1, e2 error
- // this shouldn't fail ever actually, since the wrapped
- // object should have been an io.ReadCloser
- if rc, ok := r.LimitedReader.R.(io.Closer); ok {
- e1 = rc.Close()
- }
- e2 = r.source.Close()
- if e1 == nil && e2 == nil {
- return nil
- } else if e2 != nil {
- return e2
- }
- return e1
- }
- func (o *gitObject) wrapSourceWithDeflate() error {
- r, err := zlib.NewReader(o.source)
- if err != nil {
- return err
- }
- o.source = &zlibReadCloser{io.LimitedReader{R: r, N: o.size}, o.source}
- return nil
- }
- func (o *gitObject) wrapSource(rc io.ReadCloser) {
- o.source = &zlibReadCloser{io.LimitedReader{R: rc, N: o.size}, o.source}
- }
|