Update Go-Git to take advantage of LargeObjectThreshold (#16316)
Following the merging of https://github.com/go-git/go-git/pull/330 we can now add a setting to avoid go-git reading and caching large objects. Signed-off-by: Andrew Thornton <art27@cantab.net>tokarchuk/v1.17
parent
4f26e0ac0e
commit
9979983283
@ -0,0 +1,79 @@ |
|||||||
|
package dotgit |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
"io" |
||||||
|
"os" |
||||||
|
|
||||||
|
"github.com/go-git/go-git/v5/plumbing" |
||||||
|
"github.com/go-git/go-git/v5/plumbing/format/objfile" |
||||||
|
"github.com/go-git/go-git/v5/utils/ioutil" |
||||||
|
) |
||||||
|
|
||||||
|
var _ (plumbing.EncodedObject) = &EncodedObject{} |
||||||
|
|
||||||
|
type EncodedObject struct { |
||||||
|
dir *DotGit |
||||||
|
h plumbing.Hash |
||||||
|
t plumbing.ObjectType |
||||||
|
sz int64 |
||||||
|
} |
||||||
|
|
||||||
|
func (e *EncodedObject) Hash() plumbing.Hash { |
||||||
|
return e.h |
||||||
|
} |
||||||
|
|
||||||
|
func (e *EncodedObject) Reader() (io.ReadCloser, error) { |
||||||
|
f, err := e.dir.Object(e.h) |
||||||
|
if err != nil { |
||||||
|
if os.IsNotExist(err) { |
||||||
|
return nil, plumbing.ErrObjectNotFound |
||||||
|
} |
||||||
|
|
||||||
|
return nil, err |
||||||
|
} |
||||||
|
r, err := objfile.NewReader(f) |
||||||
|
if err != nil { |
||||||
|
return nil, err |
||||||
|
} |
||||||
|
|
||||||
|
t, size, err := r.Header() |
||||||
|
if err != nil { |
||||||
|
_ = r.Close() |
||||||
|
return nil, err |
||||||
|
} |
||||||
|
if t != e.t { |
||||||
|
_ = r.Close() |
||||||
|
return nil, objfile.ErrHeader |
||||||
|
} |
||||||
|
if size != e.sz { |
||||||
|
_ = r.Close() |
||||||
|
return nil, objfile.ErrHeader |
||||||
|
} |
||||||
|
return ioutil.NewReadCloserWithCloser(r, f.Close), nil |
||||||
|
} |
||||||
|
|
||||||
|
func (e *EncodedObject) SetType(plumbing.ObjectType) {} |
||||||
|
|
||||||
|
func (e *EncodedObject) Type() plumbing.ObjectType { |
||||||
|
return e.t |
||||||
|
} |
||||||
|
|
||||||
|
func (e *EncodedObject) Size() int64 { |
||||||
|
return e.sz |
||||||
|
} |
||||||
|
|
||||||
|
func (e *EncodedObject) SetSize(int64) {} |
||||||
|
|
||||||
|
func (e *EncodedObject) Writer() (io.WriteCloser, error) { |
||||||
|
return nil, fmt.Errorf("Not supported") |
||||||
|
} |
||||||
|
|
||||||
|
func NewEncodedObject(dir *DotGit, h plumbing.Hash, t plumbing.ObjectType, size int64) *EncodedObject { |
||||||
|
return &EncodedObject{ |
||||||
|
dir: dir, |
||||||
|
h: h, |
||||||
|
t: t, |
||||||
|
sz: size, |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue