mirror of
https://github.com/go-gitea/gitea
synced 2025-07-20 17:28:37 +00:00
* update github.com/alecthomas/chroma v0.8.0 -> v0.8.1 * github.com/blevesearch/bleve v1.0.10 -> v1.0.12 * editorconfig-core-go v2.1.1 -> v2.3.7 * github.com/gliderlabs/ssh v0.2.2 -> v0.3.1 * migrate editorconfig.ParseBytes to Parse * github.com/shurcooL/vfsgen to 0d455de96546 * github.com/go-git/go-git/v5 v5.1.0 -> v5.2.0 * github.com/google/uuid v1.1.1 -> v1.1.2 * github.com/huandu/xstrings v1.3.0 -> v1.3.2 * github.com/klauspost/compress v1.10.11 -> v1.11.1 * github.com/markbates/goth v1.61.2 -> v1.65.0 * github.com/mattn/go-sqlite3 v1.14.0 -> v1.14.4 * github.com/mholt/archiver v3.3.0 -> v3.3.2 * github.com/microcosm-cc/bluemonday 4f7140c49acb -> v1.0.4 * github.com/minio/minio-go v7.0.4 -> v7.0.5 * github.com/olivere/elastic v7.0.9 -> v7.0.20 * github.com/urfave/cli v1.20.0 -> v1.22.4 * github.com/prometheus/client_golang v1.1.0 -> v1.8.0 * github.com/xanzy/go-gitlab v0.37.0 -> v0.38.1 * mvdan.cc/xurls v2.1.0 -> v2.2.0 Co-authored-by: Lauris BH <lauris@nix.lv>
73 lines
1.9 KiB
Go
Vendored
73 lines
1.9 KiB
Go
Vendored
package plumbing
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
)
|
|
|
|
// MemoryObject on memory Object implementation
|
|
type MemoryObject struct {
|
|
t ObjectType
|
|
h Hash
|
|
cont []byte
|
|
sz int64
|
|
}
|
|
|
|
// Hash returns the object Hash, the hash is calculated on-the-fly the first
|
|
// time it's called, in all subsequent calls the same Hash is returned even
|
|
// if the type or the content have changed. The Hash is only generated if the
|
|
// size of the content is exactly the object size.
|
|
func (o *MemoryObject) Hash() Hash {
|
|
if o.h == ZeroHash && int64(len(o.cont)) == o.sz {
|
|
o.h = ComputeHash(o.t, o.cont)
|
|
}
|
|
|
|
return o.h
|
|
}
|
|
|
|
// Type return the ObjectType
|
|
func (o *MemoryObject) Type() ObjectType { return o.t }
|
|
|
|
// SetType sets the ObjectType
|
|
func (o *MemoryObject) SetType(t ObjectType) { o.t = t }
|
|
|
|
// Size return the size of the object
|
|
func (o *MemoryObject) Size() int64 { return o.sz }
|
|
|
|
// SetSize set the object size, a content of the given size should be written
|
|
// afterwards
|
|
func (o *MemoryObject) SetSize(s int64) { o.sz = s }
|
|
|
|
// Reader returns an io.ReadCloser used to read the object's content.
|
|
//
|
|
// For a MemoryObject, this reader is seekable.
|
|
func (o *MemoryObject) Reader() (io.ReadCloser, error) {
|
|
return nopCloser{bytes.NewReader(o.cont)}, nil
|
|
}
|
|
|
|
// Writer returns a ObjectWriter used to write the object's content.
|
|
func (o *MemoryObject) Writer() (io.WriteCloser, error) {
|
|
return o, nil
|
|
}
|
|
|
|
func (o *MemoryObject) Write(p []byte) (n int, err error) {
|
|
o.cont = append(o.cont, p...)
|
|
o.sz = int64(len(o.cont))
|
|
|
|
return len(p), nil
|
|
}
|
|
|
|
// Close releases any resources consumed by the object when it is acting as a
|
|
// ObjectWriter.
|
|
func (o *MemoryObject) Close() error { return nil }
|
|
|
|
// nopCloser exposes the extra methods of bytes.Reader while nopping Close().
|
|
//
|
|
// This allows clients to attempt seeking in a cached Blob's Reader.
|
|
type nopCloser struct {
|
|
*bytes.Reader
|
|
}
|
|
|
|
// Close does nothing.
|
|
func (nc nopCloser) Close() error { return nil }
|