aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.golangci.yaml21
-rw-r--r--format/commitgraph/read/bloom.go8
-rw-r--r--format/commitgraph/read/edges.go4
-rw-r--r--format/commitgraph/read/errors.go30
-rw-r--r--format/commitgraph/read/generation.go2
-rw-r--r--format/commitgraph/read/hash.go10
-rw-r--r--format/commitgraph/read/layer_open.go2
-rw-r--r--format/commitgraph/read/layer_parse.go46
-rw-r--r--format/commitgraph/read/layer_pos.go4
-rw-r--r--format/commitgraph/read/lookup.go4
-rw-r--r--format/commitgraph/read/open_chain.go10
-rw-r--r--format/commitgraph/read/parents.go4
-rw-r--r--format/commitgraph/read/position.go2
-rw-r--r--format/commitgraph/read/read_test.go8
-rw-r--r--format/pack/ingest/drain.go10
-rw-r--r--format/pack/ingest/entry.go6
-rw-r--r--format/pack/ingest/entry_prefix.go18
-rw-r--r--format/pack/ingest/errors.go40
-rw-r--r--format/pack/ingest/flush.go4
-rw-r--r--format/pack/ingest/header.go8
-rw-r--r--format/pack/ingest/ingest.go4
-rw-r--r--format/pack/ingest/ingest_test.go8
-rw-r--r--format/pack/ingest/record_content.go2
-rw-r--r--format/pack/ingest/record_delta.go10
-rw-r--r--format/pack/ingest/record_inflate.go6
-rw-r--r--format/pack/ingest/record_resolve.go8
-rw-r--r--format/pack/ingest/thin_fix.go4
-rw-r--r--format/pack/ingest/trailer.go4
-rw-r--r--format/pktline/errors.go7
-rw-r--r--format/sideband64k/errors.go7
-rw-r--r--internal/adler32/adler32_amd64.go1
-rw-r--r--internal/adler32/bench_test.go1
-rw-r--r--internal/bufpool/class.go1
-rw-r--r--internal/bufpool/pool.go1
-rw-r--r--internal/compress/zlib/reader.go1
-rw-r--r--internal/compress/zlib/reader_test.go1
-rw-r--r--internal/compress/zlib/writer.go1
-rw-r--r--internal/compress/zlib/writer_test.go2
-rw-r--r--internal/lru/get.go2
-rw-r--r--internal/lru/peek.go2
-rw-r--r--internal/lru/remove.go2
-rw-r--r--internal/testgit/repo_tag_annotated.go3
-rw-r--r--object/parse.go34
-rw-r--r--objectid/algorithms.go5
-rw-r--r--objectstore/mix/mru.go2
-rw-r--r--objectstored/blob.go2
-rw-r--r--objectstored/commit.go2
-rw-r--r--objectstored/objectstored.go2
-rw-r--r--objectstored/tree.go2
-rw-r--r--reachability/ancestor.go4
-rw-r--r--reachability/errors.go12
-rw-r--r--reachability/helpers.go4
-rw-r--r--reachability/integration_test.go4
-rw-r--r--reachability/peel.go2
-rw-r--r--reachability/unit_test.go12
-rw-r--r--reachability/walk_expand_commits.go2
-rw-r--r--reachability/walk_expand_commits_graph.go2
-rw-r--r--reachability/walk_expand_objects.go4
-rw-r--r--reachability/walk_verify.go2
-rw-r--r--refstore/chain/resolve.go2
-rw-r--r--refstore/loose/resolve.go4
-rw-r--r--refstore/packed/resolve.go2
-rw-r--r--refstore/shorten.go1
-rw-r--r--repository/objects.go3
-rw-r--r--repository/refs.go3
-rw-r--r--repository/stored.go4
66 files changed, 243 insertions, 192 deletions
diff --git a/.golangci.yaml b/.golangci.yaml
index 2befef15..3c8128ed 100644
--- a/.golangci.yaml
+++ b/.golangci.yaml
@@ -7,17 +7,12 @@ linters:
- internal/compress/flate
- internal/compress/internal
disable:
- - depguard # not sensible for us
- dupword # extremely normal in tests and a pretty unnecessary linter
- goconst # unnecessary especially for our parsing code; many false positives
- - mnd # same as above
- - lll # poor standard
- - ireturn # not an issue
- - perfsprint # silly fmt.Errorf vs errors.New suggestion
+ - mnd # unnecessary especially for our parsing code; many false positives
+ - lll # common sense is much better than these sort of rules
- gosmopolitan # completely normal to have CJK and such in tests
- - gochecknoglobals # unlikely to be introduce accidentally and are usually intentional
- nonamedreturns # named returns are often good for clarity
- - errname # ErrXXX is better than XXXError
- wsl # outdated, use wsl_v5 instead
- varnamelen # it's rather reasonable to have counters like i, even when it spans quite a bit
- gocyclo # cyclomatic metrics aren't that good
@@ -31,6 +26,18 @@ linters:
- gocognit # tmp: should consider sometime
settings:
+ perfsprint:
+ errorf: false
+ depguard:
+ rules:
+ Main:
+ list-mode: strict
+ files:
+ - $all
+ allow:
+ - $gostd
+ - codeberg.org/lindenii/furgit
+ - golang.org/x
gosec:
excludes:
- G301 # UNIX permissions
diff --git a/format/commitgraph/read/bloom.go b/format/commitgraph/read/bloom.go
index 9b66f458..e00b800f 100644
--- a/format/commitgraph/read/bloom.go
+++ b/format/commitgraph/read/bloom.go
@@ -38,7 +38,7 @@ func (reader *Reader) BloomVersion() uint8 {
// BloomFilterAt returns one commit's changed-path Bloom filter.
//
-// Returns ErrBloomUnavailable when this commit graph has no Bloom data.
+// Returns BloomUnavailableError when this commit graph has no Bloom data.
func (reader *Reader) BloomFilterAt(pos Position) (*bloom.Filter, error) {
layer, err := reader.layerByPosition(pos)
if err != nil {
@@ -46,7 +46,7 @@ func (reader *Reader) BloomFilterAt(pos Position) (*bloom.Filter, error) {
}
if layer.chunkBloomIndex == nil || layer.chunkBloomData == nil || layer.bloomSettings == nil {
- return nil, &ErrBloomUnavailable{Pos: pos}
+ return nil, &BloomUnavailableError{Pos: pos}
}
start, end, err := bloomRange(layer, pos.Index)
@@ -86,7 +86,7 @@ func bloomRange(layer *layer, commitIndex uint32) (int, int, error) {
}
if end < start {
- return 0, 0, &ErrMalformed{Path: layer.path, Reason: "invalid BIDX range"}
+ return 0, 0, &MalformedError{Path: layer.path, Reason: "invalid BIDX range"}
}
bdatLen := len(layer.chunkBloomData) - bloom.DataHeaderSize
@@ -97,7 +97,7 @@ func bloomRange(layer *layer, commitIndex uint32) (int, int, error) {
}
if end > bdatLenU32 {
- return 0, 0, &ErrMalformed{Path: layer.path, Reason: "BIDX range out of BDAT bounds"}
+ return 0, 0, &MalformedError{Path: layer.path, Reason: "BIDX range out of BDAT bounds"}
}
startInt, err := intconv.Uint64ToInt(uint64(start))
diff --git a/format/commitgraph/read/edges.go b/format/commitgraph/read/edges.go
index de8bab60..96ffeb6d 100644
--- a/format/commitgraph/read/edges.go
+++ b/format/commitgraph/read/edges.go
@@ -9,7 +9,7 @@ import (
func (reader *Reader) decodeExtraEdgeList(layer *layer, edgeStart uint32) ([]Position, error) {
if len(layer.chunkExtraEdges) == 0 {
- return nil, &ErrMalformed{Path: layer.path, Reason: "missing EDGE chunk"}
+ return nil, &MalformedError{Path: layer.path, Reason: "missing EDGE chunk"}
}
out := make([]Position, 0)
@@ -24,7 +24,7 @@ func (reader *Reader) decodeExtraEdgeList(layer *layer, edgeStart uint32) ([]Pos
}
if off+4 > len(layer.chunkExtraEdges) {
- return nil, &ErrMalformed{Path: layer.path, Reason: "EDGE index out of range"}
+ return nil, &MalformedError{Path: layer.path, Reason: "EDGE index out of range"}
}
word := binary.BigEndian.Uint32(layer.chunkExtraEdges[off : off+4])
diff --git a/format/commitgraph/read/errors.go b/format/commitgraph/read/errors.go
index 9d0eca04..8dd02a60 100644
--- a/format/commitgraph/read/errors.go
+++ b/format/commitgraph/read/errors.go
@@ -6,53 +6,53 @@ import (
"codeberg.org/lindenii/furgit/objectid"
)
-// ErrNotFound reports a missing commit graph entry by object ID.
-type ErrNotFound struct {
+// NotFoundError reports a missing commit graph entry by object ID.
+type NotFoundError struct {
OID objectid.ObjectID
}
// Error implements error.
-func (err *ErrNotFound) Error() string {
+func (err *NotFoundError) Error() string {
return fmt.Sprintf("format/commitgraph: object not found: %s", err.OID)
}
-// ErrPositionOutOfRange reports an invalid graph position.
-type ErrPositionOutOfRange struct {
+// PositionOutOfRangeError reports an invalid graph position.
+type PositionOutOfRangeError struct {
Pos Position
}
// Error implements error.
-func (err *ErrPositionOutOfRange) Error() string {
+func (err *PositionOutOfRangeError) Error() string {
return fmt.Sprintf("format/commitgraph: position out of range: graph=%d index=%d", err.Pos.Graph, err.Pos.Index)
}
-// ErrMalformed reports malformed commit-graph data.
-type ErrMalformed struct {
+// MalformedError reports malformed commit-graph data.
+type MalformedError struct {
Path string
Reason string
}
// Error implements error.
-func (err *ErrMalformed) Error() string {
+func (err *MalformedError) Error() string {
return fmt.Sprintf("format/commitgraph: malformed %q: %s", err.Path, err.Reason)
}
-// ErrUnsupportedVersion reports unsupported commit-graph version.
-type ErrUnsupportedVersion struct {
+// UnsupportedVersionError reports unsupported commit-graph version.
+type UnsupportedVersionError struct {
Version uint8
}
// Error implements error.
-func (err *ErrUnsupportedVersion) Error() string {
+func (err *UnsupportedVersionError) Error() string {
return fmt.Sprintf("format/commitgraph: unsupported version %d", err.Version)
}
-// ErrBloomUnavailable reports missing changed-path bloom data at one position.
-type ErrBloomUnavailable struct {
+// BloomUnavailableError reports missing changed-path bloom data at one position.
+type BloomUnavailableError struct {
Pos Position
}
// Error implements error.
-func (err *ErrBloomUnavailable) Error() string {
+func (err *BloomUnavailableError) Error() string {
return fmt.Sprintf("format/commitgraph: bloom unavailable at position graph=%d index=%d", err.Pos.Graph, err.Pos.Index)
}
diff --git a/format/commitgraph/read/generation.go b/format/commitgraph/read/generation.go
index d1f0ebe7..62e47996 100644
--- a/format/commitgraph/read/generation.go
+++ b/format/commitgraph/read/generation.go
@@ -34,7 +34,7 @@ func (reader *Reader) readGenerationV2(layer *layer, index uint32, commitTime ui
}
if gdo2Off+8 > len(layer.chunkGenerationOv) {
- return 0, &ErrMalformed{Path: layer.path, Reason: "GDO2 index out of range"}
+ return 0, &MalformedError{Path: layer.path, Reason: "GDO2 index out of range"}
}
overflow := binary.BigEndian.Uint64(layer.chunkGenerationOv[gdo2Off : gdo2Off+8])
diff --git a/format/commitgraph/read/hash.go b/format/commitgraph/read/hash.go
index 3f30df91..e9543eac 100644
--- a/format/commitgraph/read/hash.go
+++ b/format/commitgraph/read/hash.go
@@ -16,7 +16,7 @@ func (reader *Reader) HashVersion() uint8 {
func validateChainBaseHashes(algo objectid.Algorithm, chain []string, idx int, graph *layer) error {
if idx == 0 {
if len(graph.chunkBaseGraphs) != 0 {
- return &ErrMalformed{Path: graph.path, Reason: "unexpected BASE chunk in first graph"}
+ return &MalformedError{Path: graph.path, Reason: "unexpected BASE chunk in first graph"}
}
return nil
@@ -26,7 +26,7 @@ func validateChainBaseHashes(algo objectid.Algorithm, chain []string, idx int, g
expectedLen := idx * hashSize
if len(graph.chunkBaseGraphs) != expectedLen {
- return &ErrMalformed{
+ return &MalformedError{
Path: graph.path,
Reason: fmt.Sprintf("BASE chunk length %d does not match expected %d", len(graph.chunkBaseGraphs), expectedLen),
}
@@ -42,7 +42,7 @@ func validateChainBaseHashes(algo objectid.Algorithm, chain []string, idx int, g
}
if baseHash.String() != chain[i] {
- return &ErrMalformed{
+ return &MalformedError{
Path: graph.path,
Reason: fmt.Sprintf("BASE chunk mismatch at index %d", i),
}
@@ -55,7 +55,7 @@ func validateChainBaseHashes(algo objectid.Algorithm, chain []string, idx int, g
func verifyTrailerHash(data []byte, algo objectid.Algorithm, path string) error {
hashSize := algo.Size()
if len(data) < hashSize {
- return &ErrMalformed{Path: path, Reason: "file too short for trailer"}
+ return &MalformedError{Path: path, Reason: "file too short for trailer"}
}
hashImpl, err := algo.New()
@@ -72,7 +72,7 @@ func verifyTrailerHash(data []byte, algo objectid.Algorithm, path string) error
want := data[len(data)-hashSize:]
if !bytes.Equal(got, want) {
- return &ErrMalformed{Path: path, Reason: "trailer hash mismatch"}
+ return &MalformedError{Path: path, Reason: "trailer hash mismatch"}
}
return nil
diff --git a/format/commitgraph/read/layer_open.go b/format/commitgraph/read/layer_open.go
index bf126960..1190108e 100644
--- a/format/commitgraph/read/layer_open.go
+++ b/format/commitgraph/read/layer_open.go
@@ -26,7 +26,7 @@ func openLayer(root *os.Root, relPath string, algo objectid.Algorithm) (*layer,
if size < int64(commitgraph.HeaderSize+commitgraph.FanoutSize+algo.Size()) {
_ = file.Close()
- return nil, &ErrMalformed{Path: relPath, Reason: "file too short"}
+ return nil, &MalformedError{Path: relPath, Reason: "file too short"}
}
mapLen, err := intconv.Int64ToUint64(size)
diff --git a/format/commitgraph/read/layer_parse.go b/format/commitgraph/read/layer_parse.go
index dca9f416..b615010f 100644
--- a/format/commitgraph/read/layer_parse.go
+++ b/format/commitgraph/read/layer_parse.go
@@ -11,19 +11,19 @@ import (
func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
if len(layer.data) < commitgraph.HeaderSize {
- return &ErrMalformed{Path: layer.path, Reason: "file too short"}
+ return &MalformedError{Path: layer.path, Reason: "file too short"}
}
header := layer.data[:commitgraph.HeaderSize]
signature := binary.BigEndian.Uint32(header[:4])
if signature != commitgraph.FileSignature {
- return &ErrMalformed{Path: layer.path, Reason: "invalid signature"}
+ return &MalformedError{Path: layer.path, Reason: "invalid signature"}
}
version := header[4]
if version != commitgraph.FileVersion {
- return &ErrUnsupportedVersion{Version: version}
+ return &UnsupportedVersionError{Version: version}
}
expectedHashVersion, err := intconv.Uint32ToUint8(algo.PackHashID())
@@ -33,7 +33,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
hashVersion := header[5]
if hashVersion != expectedHashVersion {
- return &ErrMalformed{Path: layer.path, Reason: "hash version does not match object format"}
+ return &MalformedError{Path: layer.path, Reason: "hash version does not match object format"}
}
numChunks := int(header[6])
@@ -44,7 +44,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
tocEnd := tocStart + tocLen
if tocEnd > len(layer.data) {
- return &ErrMalformed{Path: layer.path, Reason: "truncated chunk table"}
+ return &MalformedError{Path: layer.path, Reason: "truncated chunk table"}
}
type tocEntry struct {
@@ -65,7 +65,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
}
if entries[len(entries)-1].id != 0 {
- return &ErrMalformed{Path: layer.path, Reason: "missing chunk table terminator"}
+ return &MalformedError{Path: layer.path, Reason: "missing chunk table terminator"}
}
trailerStart := len(layer.data) - algo.Size()
@@ -74,7 +74,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
for i := range numChunks {
entry := entries[i]
if entry.id == 0 {
- return &ErrMalformed{Path: layer.path, Reason: "early chunk table terminator"}
+ return &MalformedError{Path: layer.path, Reason: "early chunk table terminator"}
}
next := entries[i+1]
@@ -90,11 +90,11 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
}
if start < tocEnd || end < start || end > trailerStart {
- return &ErrMalformed{Path: layer.path, Reason: "invalid chunk offsets"}
+ return &MalformedError{Path: layer.path, Reason: "invalid chunk offsets"}
}
if _, exists := chunks[entry.id]; exists {
- return &ErrMalformed{Path: layer.path, Reason: "duplicate chunk id"}
+ return &MalformedError{Path: layer.path, Reason: "duplicate chunk id"}
}
chunks[entry.id] = layer.data[start:end]
@@ -102,7 +102,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
oidf := chunks[commitgraph.ChunkOIDF]
if len(oidf) != commitgraph.FanoutSize {
- return &ErrMalformed{Path: layer.path, Reason: "invalid OIDF length"}
+ return &MalformedError{Path: layer.path, Reason: "invalid OIDF length"}
}
layer.chunkOIDFanout = oidf
@@ -113,7 +113,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
next := binary.BigEndian.Uint32(oidf[(i+1)*4 : (i+2)*4])
if cur > next {
- return &ErrMalformed{Path: layer.path, Reason: "non-monotonic OIDF fanout"}
+ return &MalformedError{Path: layer.path, Reason: "non-monotonic OIDF fanout"}
}
}
@@ -133,7 +133,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
}
if len(oidl) != oidlWantLen {
- return &ErrMalformed{Path: layer.path, Reason: "invalid OIDL length"}
+ return &MalformedError{Path: layer.path, Reason: "invalid OIDL length"}
}
layer.chunkOIDLookup = oidl
@@ -154,7 +154,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
}
if len(cdat) != cdatWantLen {
- return &ErrMalformed{Path: layer.path, Reason: "invalid CDAT length"}
+ return &MalformedError{Path: layer.path, Reason: "invalid CDAT length"}
}
layer.chunkCommit = cdat
@@ -169,7 +169,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
}
if len(gda2) != wantLen {
- return &ErrMalformed{Path: layer.path, Reason: "invalid GDA2 length"}
+ return &MalformedError{Path: layer.path, Reason: "invalid GDA2 length"}
}
layer.chunkGeneration = gda2
@@ -178,7 +178,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
gdo2 := chunks[commitgraph.ChunkGDO2]
if len(gdo2) != 0 {
if len(gdo2)%8 != 0 {
- return &ErrMalformed{Path: layer.path, Reason: "invalid GDO2 length"}
+ return &MalformedError{Path: layer.path, Reason: "invalid GDO2 length"}
}
layer.chunkGenerationOv = gdo2
@@ -187,7 +187,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
edge := chunks[commitgraph.ChunkEDGE]
if len(edge) != 0 {
if len(edge)%4 != 0 {
- return &ErrMalformed{Path: layer.path, Reason: "invalid EDGE length"}
+ return &MalformedError{Path: layer.path, Reason: "invalid EDGE length"}
}
layer.chunkExtraEdges = edge
@@ -196,7 +196,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
base := chunks[commitgraph.ChunkBASE]
if baseCount == 0 {
if len(base) != 0 {
- return &ErrMalformed{Path: layer.path, Reason: "unexpected BASE chunk"}
+ return &MalformedError{Path: layer.path, Reason: "unexpected BASE chunk"}
}
} else {
wantLen64 := uint64(baseCount) * hashSizeU64
@@ -207,7 +207,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
}
if len(base) != wantLen {
- return &ErrMalformed{Path: layer.path, Reason: "invalid BASE length"}
+ return &MalformedError{Path: layer.path, Reason: "invalid BASE length"}
}
layer.chunkBaseGraphs = base
@@ -220,7 +220,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
bdat := chunks[commitgraph.ChunkBDAT]
if len(bidx) != 0 || len(bdat) != 0 { //nolint:nestif
if len(bidx) == 0 || len(bdat) == 0 {
- return &ErrMalformed{Path: layer.path, Reason: "BIDX/BDAT must both be present"}
+ return &MalformedError{Path: layer.path, Reason: "BIDX/BDAT must both be present"}
}
bidxWantLen64 := uint64(layer.numCommits) * 4
@@ -231,11 +231,11 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
}
if len(bidx) != bidxWantLen {
- return &ErrMalformed{Path: layer.path, Reason: "invalid BIDX length"}
+ return &MalformedError{Path: layer.path, Reason: "invalid BIDX length"}
}
if len(bdat) < bloom.DataHeaderSize {
- return &ErrMalformed{Path: layer.path, Reason: "invalid BDAT length"}
+ return &MalformedError{Path: layer.path, Reason: "invalid BDAT length"}
}
settings, err := bloom.ParseSettings(bdat)
@@ -250,7 +250,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
cur := binary.BigEndian.Uint32(bidx[off : off+4])
if i > 0 && cur < prev {
- return &ErrMalformed{Path: layer.path, Reason: "non-monotonic BIDX"}
+ return &MalformedError{Path: layer.path, Reason: "non-monotonic BIDX"}
}
bdatDataLen := len(bdat) - bloom.DataHeaderSize
@@ -261,7 +261,7 @@ func parseLayer(layer *layer, algo objectid.Algorithm) error { //nolint:maintidx
}
if cur > bdatDataLenU32 {
- return &ErrMalformed{Path: layer.path, Reason: "BIDX offset out of range"}
+ return &MalformedError{Path: layer.path, Reason: "BIDX offset out of range"}
}
prev = cur
diff --git a/format/commitgraph/read/layer_pos.go b/format/commitgraph/read/layer_pos.go
index b93a842e..7b87b381 100644
--- a/format/commitgraph/read/layer_pos.go
+++ b/format/commitgraph/read/layer_pos.go
@@ -9,12 +9,12 @@ func (reader *Reader) layerByPosition(pos Position) (*layer, error) {
}
if graphIdx < 0 || graphIdx >= len(reader.layers) {
- return nil, &ErrPositionOutOfRange{Pos: pos}
+ return nil, &PositionOutOfRangeError{Pos: pos}
}
layer := &reader.layers[graphIdx]
if pos.Index >= layer.numCommits {
- return nil, &ErrPositionOutOfRange{Pos: pos}
+ return nil, &PositionOutOfRangeError{Pos: pos}
}
return layer, nil
diff --git a/format/commitgraph/read/lookup.go b/format/commitgraph/read/lookup.go
index cfd3b8cc..6ba25a18 100644
--- a/format/commitgraph/read/lookup.go
+++ b/format/commitgraph/read/lookup.go
@@ -8,7 +8,7 @@ import (
// Lookup resolves one object ID to one graph position.
func (reader *Reader) Lookup(oid objectid.ObjectID) (Position, error) {
if oid.Algorithm() != reader.algo {
- return Position{}, &ErrNotFound{OID: oid}
+ return Position{}, &NotFoundError{OID: oid}
}
for layerIdx := len(reader.layers) - 1; layerIdx >= 0; layerIdx-- {
@@ -25,5 +25,5 @@ func (reader *Reader) Lookup(oid objectid.ObjectID) (Position, error) {
}
}
- return Position{}, &ErrNotFound{OID: oid}
+ return Position{}, &NotFoundError{OID: oid}
}
diff --git a/format/commitgraph/read/open_chain.go b/format/commitgraph/read/open_chain.go
index f64040bc..8d5ec268 100644
--- a/format/commitgraph/read/open_chain.go
+++ b/format/commitgraph/read/open_chain.go
@@ -17,7 +17,7 @@ func openChain(root *os.Root, algo objectid.Algorithm) (*Reader, error) {
file, err := root.Open(chainPath)
if err != nil {
if errors.Is(err, os.ErrNotExist) {
- return nil, &ErrMalformed{Path: chainPath, Reason: "missing commit-graph-chain"}
+ return nil, &MalformedError{Path: chainPath, Reason: "missing commit-graph-chain"}
}
return nil, err
@@ -47,7 +47,7 @@ func openChain(root *os.Root, algo objectid.Algorithm) (*Reader, error) {
}
if len(hashes) == 0 {
- return nil, &ErrMalformed{Path: chainPath, Reason: "empty chain"}
+ return nil, &MalformedError{Path: chainPath, Reason: "empty chain"}
}
layers := make([]layer, 0, len(hashes))
@@ -70,7 +70,7 @@ func openChain(root *os.Root, algo objectid.Algorithm) (*Reader, error) {
if len(hashHex) != algo.HexLen() {
closeLayers(layers)
- return nil, &ErrMalformed{
+ return nil, &MalformedError{
Path: chainPath,
Reason: fmt.Sprintf("invalid graph hash length at line %d", i+1),
}
@@ -90,7 +90,7 @@ func openChain(root *os.Root, algo objectid.Algorithm) (*Reader, error) {
closeLayers(layers)
- return nil, &ErrMalformed{
+ return nil, &MalformedError{
Path: relPath,
Reason: fmt.Sprintf("BASE count %d does not match chain depth %d", loaded.baseCount, i),
}
@@ -114,7 +114,7 @@ func openChain(root *os.Root, algo objectid.Algorithm) (*Reader, error) {
closeLayers(layers)
- return nil, &ErrMalformed{Path: relPath, Reason: "total commit count overflow"}
+ return nil, &MalformedError{Path: relPath, Reason: "total commit count overflow"}
}
total = totalNext
diff --git a/format/commitgraph/read/parents.go b/format/commitgraph/read/parents.go
index 0f8024ab..fcaad8b6 100644
--- a/format/commitgraph/read/parents.go
+++ b/format/commitgraph/read/parents.go
@@ -35,7 +35,7 @@ func (reader *Reader) decodeParents(layer *layer, p1, p2 uint32) (ParentRef, Par
}
if len(parents) == 0 {
- return ParentRef{}, ParentRef{}, nil, &ErrMalformed{Path: layer.path, Reason: "empty EDGE list"}
+ return ParentRef{}, ParentRef{}, nil, &MalformedError{Path: layer.path, Reason: "empty EDGE list"}
}
parent2 := ParentRef{Valid: true, Pos: parents[0]}
@@ -52,7 +52,7 @@ func (reader *Reader) decodeSingleParent(raw uint32) (ParentRef, error) {
}
if raw&commitgraph.ParentExtraMask != 0 {
- return ParentRef{}, &ErrMalformed{
+ return ParentRef{}, &MalformedError{
Path: "commit-graph",
Reason: "unexpected EDGE marker in single-parent slot",
}
diff --git a/format/commitgraph/read/position.go b/format/commitgraph/read/position.go
index f92f5b3a..b2e1138b 100644
--- a/format/commitgraph/read/position.go
+++ b/format/commitgraph/read/position.go
@@ -31,7 +31,7 @@ func (reader *Reader) globalToPosition(global uint32) (Position, error) {
}
}
- return Position{}, &ErrMalformed{
+ return Position{}, &MalformedError{
Path: "commit-graph",
Reason: fmt.Sprintf("parent global position out of range: %d", global),
}
diff --git a/format/commitgraph/read/read_test.go b/format/commitgraph/read/read_test.go
index 80091c5b..35384930 100644
--- a/format/commitgraph/read/read_test.go
+++ b/format/commitgraph/read/read_test.go
@@ -157,16 +157,16 @@ func TestBloomUnavailableWithoutChangedPaths(t *testing.T) {
_, err = reader.BloomFilterAt(pos)
if err == nil {
- t.Fatal("BloomFilterAt() error = nil, want ErrBloomUnavailable")
+ t.Fatal("BloomFilterAt() error = nil, want BloomUnavailableError")
}
- var unavailable *read.ErrBloomUnavailable
+ var unavailable *read.BloomUnavailableError
if !errors.As(err, &unavailable) {
- t.Fatalf("BloomFilterAt() error type = %T, want *ErrBloomUnavailable", err)
+ t.Fatalf("BloomFilterAt() error type = %T, want *BloomUnavailableError", err)
}
if unavailable.Pos != pos {
- t.Fatalf("ErrBloomUnavailable.Pos = %+v, want %+v", unavailable.Pos, pos)
+ t.Fatalf("BloomUnavailableError.Pos = %+v, want %+v", unavailable.Pos, pos)
}
})
}
diff --git a/format/pack/ingest/drain.go b/format/pack/ingest/drain.go
index b92683c3..671423fb 100644
--- a/format/pack/ingest/drain.go
+++ b/format/pack/ingest/drain.go
@@ -18,7 +18,7 @@ func drainEntryPayload(state *ingestState, record objectRecord) (int64, uint64,
reader, err := zlib.NewReader(state.stream)
if err != nil {
- return 0, 0, zero, &ErrMalformedPackEntry{Offset: record.offset, Reason: fmt.Sprintf("open zlib stream: %v", err)}
+ return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("open zlib stream: %v", err)}
}
defer func() { _ = reader.Close() }()
@@ -28,7 +28,7 @@ func drainEntryPayload(state *ingestState, record objectRecord) (int64, uint64,
if packfmt.IsBaseObjectType(record.packedType) {
header, ok := objectheader.Encode(record.packedType, record.declaredSize)
if !ok {
- return 0, 0, zero, &ErrMalformedPackEntry{Offset: record.offset, Reason: "encode object header"}
+ return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: "encode object header"}
}
hashImpl, err := state.algo.New()
@@ -40,7 +40,7 @@ func drainEntryPayload(state *ingestState, record objectRecord) (int64, uint64,
n, err := io.Copy(hashImpl, reader)
if err != nil {
- return 0, 0, zero, &ErrMalformedPackEntry{Offset: record.offset, Reason: fmt.Sprintf("inflate base object: %v", err)}
+ return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("inflate base object: %v", err)}
}
total = n
@@ -56,7 +56,7 @@ func drainEntryPayload(state *ingestState, record objectRecord) (int64, uint64,
if record.packedType == objecttype.TypeOfsDelta || record.packedType == objecttype.TypeRefDelta {
n, err := io.Copy(io.Discard, reader)
if err != nil {
- return 0, 0, zero, &ErrMalformedPackEntry{Offset: record.offset, Reason: fmt.Sprintf("inflate delta payload: %v", err)}
+ return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("inflate delta payload: %v", err)}
}
total = n
@@ -64,5 +64,5 @@ func drainEntryPayload(state *ingestState, record objectRecord) (int64, uint64,
return total, reader.InputConsumed(), zero, nil
}
- return 0, 0, zero, &ErrMalformedPackEntry{Offset: record.offset, Reason: "unsupported payload type"}
+ return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: "unsupported payload type"}
}
diff --git a/format/pack/ingest/entry.go b/format/pack/ingest/entry.go
index f6c9074e..f89ad4c8 100644
--- a/format/pack/ingest/entry.go
+++ b/format/pack/ingest/entry.go
@@ -22,7 +22,7 @@ func scanOneEntry(state *ingestState, startOffset uint64) (uint64, error) {
}
if contentLen != record.declaredSize {
- return 0, &ErrMalformedPackEntry{
+ return 0, &MalformedPackEntryError{
Offset: startOffset,
Reason: fmt.Sprintf("inflated size mismatch got %d want %d", contentLen, record.declaredSize),
}
@@ -30,7 +30,7 @@ func scanOneEntry(state *ingestState, startOffset uint64) (uint64, error) {
endOffset := startOffset + uint64(record.headerLen) + consumedInput
if endOffset > state.stream.consumed {
- return 0, &ErrMalformedPackEntry{
+ return 0, &MalformedPackEntryError{
Offset: startOffset,
Reason: fmt.Sprintf("entry end offset overflow got %d > stream %d", endOffset, state.stream.consumed),
}
@@ -40,7 +40,7 @@ func scanOneEntry(state *ingestState, startOffset uint64) (uint64, error) {
record.dataOffset = startOffset + uint64(record.headerLen)
if record.packedLen < uint64(record.headerLen) {
- return 0, &ErrMalformedPackEntry{Offset: startOffset, Reason: "negative payload span"}
+ return 0, &MalformedPackEntryError{Offset: startOffset, Reason: "negative payload span"}
}
crc, err := state.stream.endEntryCRC()
diff --git a/format/pack/ingest/entry_prefix.go b/format/pack/ingest/entry_prefix.go
index 6ffb1c56..85493798 100644
--- a/format/pack/ingest/entry_prefix.go
+++ b/format/pack/ingest/entry_prefix.go
@@ -16,7 +16,7 @@ func parseEntryPrefix(state *ingestState, startOffset uint64) (objectRecord, err
first, err := state.stream.ReadByte()
if err != nil {
- return record, &ErrMalformedPackEntry{Offset: startOffset, Reason: fmt.Sprintf("read first header byte: %v", err)}
+ return record, &MalformedPackEntryError{Offset: startOffset, Reason: fmt.Sprintf("read first header byte: %v", err)}
}
record.packedType = objecttype.Type((first >> 4) & 0x07)
@@ -28,7 +28,7 @@ func parseEntryPrefix(state *ingestState, startOffset uint64) (objectRecord, err
for b&0x80 != 0 {
b, err = state.stream.ReadByte()
if err != nil {
- return record, &ErrMalformedPackEntry{Offset: startOffset, Reason: fmt.Sprintf("read size continuation: %v", err)}
+ return record, &MalformedPackEntryError{Offset: startOffset, Reason: fmt.Sprintf("read size continuation: %v", err)}
}
headerLen++
@@ -37,7 +37,7 @@ func parseEntryPrefix(state *ingestState, startOffset uint64) (objectRecord, err
}
if size < 0 {
- return record, &ErrMalformedPackEntry{Offset: startOffset, Reason: "negative declared size"}
+ return record, &MalformedPackEntryError{Offset: startOffset, Reason: "negative declared size"}
}
record.declaredSize = size
@@ -49,12 +49,12 @@ func parseEntryPrefix(state *ingestState, startOffset uint64) (objectRecord, err
err := state.stream.readFull(baseRaw)
if err != nil {
- return record, &ErrMalformedPackEntry{Offset: startOffset, Reason: fmt.Sprintf("read ref base: %v", err)}
+ return record, &MalformedPackEntryError{Offset: startOffset, Reason: fmt.Sprintf("read ref base: %v", err)}
}
baseID, err := objectid.FromBytes(state.algo, baseRaw)
if err != nil {
- return record, &ErrMalformedPackEntry{Offset: startOffset, Reason: fmt.Sprintf("parse ref base: %v", err)}
+ return record, &MalformedPackEntryError{Offset: startOffset, Reason: fmt.Sprintf("parse ref base: %v", err)}
}
record.baseObject = baseID
@@ -68,11 +68,11 @@ func parseEntryPrefix(state *ingestState, startOffset uint64) (objectRecord, err
case objecttype.TypeOfsDelta:
dist, consumed, err := readOfsDistanceFromStream(state.stream)
if err != nil {
- return record, &ErrMalformedPackEntry{Offset: startOffset, Reason: err.Error()}
+ return record, &MalformedPackEntryError{Offset: startOffset, Reason: err.Error()}
}
if startOffset <= dist {
- return record, &ErrMalformedPackEntry{Offset: startOffset, Reason: "ofs base offset out of bounds"}
+ return record, &MalformedPackEntryError{Offset: startOffset, Reason: "ofs base offset out of bounds"}
}
record.baseOffset = startOffset - dist
@@ -84,9 +84,9 @@ func parseEntryPrefix(state *ingestState, startOffset uint64) (objectRecord, err
headerLen += consumedUint32
case objecttype.TypeInvalid, objecttype.TypeFuture:
- return record, &ErrMalformedPackEntry{Offset: startOffset, Reason: fmt.Sprintf("unsupported object type %d", record.packedType)}
+ return record, &MalformedPackEntryError{Offset: startOffset, Reason: fmt.Sprintf("unsupported object type %d", record.packedType)}
default:
- return record, &ErrMalformedPackEntry{Offset: startOffset, Reason: fmt.Sprintf("unsupported object type %d", record.packedType)}
+ return record, &MalformedPackEntryError{Offset: startOffset, Reason: fmt.Sprintf("unsupported object type %d", record.packedType)}
}
record.headerLen = headerLen
diff --git a/format/pack/ingest/errors.go b/format/pack/ingest/errors.go
index cd65d3cf..82b662b5 100644
--- a/format/pack/ingest/errors.go
+++ b/format/pack/ingest/errors.go
@@ -5,64 +5,64 @@ import (
"fmt"
)
-// ErrInvalidPackHeader reports an invalid or unsupported pack header.
-type ErrInvalidPackHeader struct {
+// InvalidPackHeaderError reports an invalid or unsupported pack header.
+type InvalidPackHeaderError struct {
Reason string
}
// Error implements error.
-func (err *ErrInvalidPackHeader) Error() string {
- return fmt.Sprintf("format/pack/ingest: invalid pack header: %s", err.Reason)
+func (err *InvalidPackHeaderError) Error() string {
+ return "format/pack/ingest: invalid pack header: " + err.Reason
}
-// ErrPackTrailerMismatch reports a mismatch between computed and trailer pack hash.
-type ErrPackTrailerMismatch struct{}
+// PackTrailerMismatchError reports a mismatch between computed and trailer pack hash.
+type PackTrailerMismatchError struct{}
// Error implements error.
-func (err *ErrPackTrailerMismatch) Error() string {
+func (err *PackTrailerMismatchError) Error() string {
return "format/pack/ingest: pack trailer hash mismatch"
}
-// ErrThinPackUnresolved reports unresolved REF deltas when fixThin is disabled
+// ThinPackUnresolvedError reports unresolved REF deltas when fixThin is disabled
// or when required bases cannot be found in base.
-type ErrThinPackUnresolved struct {
+type ThinPackUnresolvedError struct {
Count int
}
// Error implements error.
-func (err *ErrThinPackUnresolved) Error() string {
+func (err *ThinPackUnresolvedError) Error() string {
return fmt.Sprintf("format/pack/ingest: unresolved thin deltas: %d", err.Count)
}
-// ErrMalformedPackEntry reports malformed entry encoding at one pack offset.
-type ErrMalformedPackEntry struct {
+// MalformedPackEntryError reports malformed entry encoding at one pack offset.
+type MalformedPackEntryError struct {
Offset uint64
Reason string
}
// Error implements error.
-func (err *ErrMalformedPackEntry) Error() string {
+func (err *MalformedPackEntryError) Error() string {
return fmt.Sprintf("format/pack/ingest: malformed pack entry at offset %d: %s", err.Offset, err.Reason)
}
-// ErrDeltaCycle reports a detected cycle in delta dependency resolution.
-type ErrDeltaCycle struct {
+// DeltaCycleError reports a detected cycle in delta dependency resolution.
+type DeltaCycleError struct {
Offset uint64
}
// Error implements error.
-func (err *ErrDeltaCycle) Error() string {
+func (err *DeltaCycleError) Error() string {
return fmt.Sprintf("format/pack/ingest: delta cycle detected at offset %d", err.Offset)
}
-// ErrDestinationWrite reports destination I/O failures.
-type ErrDestinationWrite struct {
+// DestinationWriteError reports destination I/O failures.
+type DestinationWriteError struct {
Op string
}
// Error implements error.
-func (err *ErrDestinationWrite) Error() string {
- return fmt.Sprintf("format/pack/ingest: destination write failure: %s", err.Op)
+func (err *DestinationWriteError) Error() string {
+ return "format/pack/ingest: destination write failure: " + err.Op
}
var errExternalThinBase = errors.New("format/pack/ingest: external thin base required")
diff --git a/format/pack/ingest/flush.go b/format/pack/ingest/flush.go
index 4742ead1..96753170 100644
--- a/format/pack/ingest/flush.go
+++ b/format/pack/ingest/flush.go
@@ -18,11 +18,11 @@ func (scanner *streamScanner) flushConsumedPrefix() error {
for written < scanner.off {
n, err := scanner.dstFile.Write(scanner.buf[written:scanner.off])
if err != nil {
- return &ErrDestinationWrite{Op: fmt.Sprintf("write pack: %v", err)}
+ return &DestinationWriteError{Op: fmt.Sprintf("write pack: %v", err)}
}
if n == 0 {
- return &ErrDestinationWrite{Op: "write pack: short write"}
+ return &DestinationWriteError{Op: "write pack: short write"}
}
written += n
diff --git a/format/pack/ingest/header.go b/format/pack/ingest/header.go
index 88663760..fba2b175 100644
--- a/format/pack/ingest/header.go
+++ b/format/pack/ingest/header.go
@@ -13,21 +13,21 @@ func readAndValidatePackHeader(state *ingestState) error {
err := state.stream.readFull(hdr[:])
if err != nil {
- return &ErrInvalidPackHeader{Reason: fmt.Sprintf("read header: %v", err)}
+ return &InvalidPackHeaderError{Reason: fmt.Sprintf("read header: %v", err)}
}
if binary.BigEndian.Uint32(hdr[:4]) != pack.Signature {
- return &ErrInvalidPackHeader{Reason: "signature mismatch"}
+ return &InvalidPackHeaderError{Reason: "signature mismatch"}
}
version := binary.BigEndian.Uint32(hdr[4:8])
if !pack.VersionSupported(version) {
- return &ErrInvalidPackHeader{Reason: fmt.Sprintf("unsupported version %d", version)}
+ return &InvalidPackHeaderError{Reason: fmt.Sprintf("unsupported version %d", version)}
}
state.objectCountHeader = binary.BigEndian.Uint32(hdr[8:12])
if state.objectCountHeader == 0 {
- return &ErrInvalidPackHeader{Reason: "zero objects"}
+ return &InvalidPackHeaderError{Reason: "zero objects"}
}
return nil
diff --git a/format/pack/ingest/ingest.go b/format/pack/ingest/ingest.go
index df6c6627..22007d27 100644
--- a/format/pack/ingest/ingest.go
+++ b/format/pack/ingest/ingest.go
@@ -39,7 +39,7 @@ func ingest(state *ingestState) (out Result, err error) {
}
if len(state.unresolvedRefDeltas) > 0 {
- return Result{}, &ErrThinPackUnresolved{Count: len(state.unresolvedRefDeltas)}
+ return Result{}, &ThinPackUnresolvedError{Count: len(state.unresolvedRefDeltas)}
}
err = verifyResolvedRecords(state)
@@ -49,7 +49,7 @@ func ingest(state *ingestState) (out Result, err error) {
err = state.packFile.Sync()
if err != nil {
- return Result{}, &ErrDestinationWrite{Op: fmt.Sprintf("sync pack: %v", err)}
+ return Result{}, &DestinationWriteError{Op: fmt.Sprintf("sync pack: %v", err)}
}
err = writeIdx(state)
diff --git a/format/pack/ingest/ingest_test.go b/format/pack/ingest/ingest_test.go
index 1bc2ec0f..13f7ee85 100644
--- a/format/pack/ingest/ingest_test.go
+++ b/format/pack/ingest/ingest_test.go
@@ -246,9 +246,9 @@ func TestIngestThinPackWithoutFixReturnsUnresolved(t *testing.T) {
t.Fatal("Ingest error = nil, want error")
}
- var unresolved *ingest.ErrThinPackUnresolved
+ var unresolved *ingest.ThinPackUnresolvedError
if !errors.As(err, &unresolved) {
- t.Fatalf("Ingest error type = %T (%v), want *ErrThinPackUnresolved", err, err)
+ t.Fatalf("Ingest error type = %T (%v), want *ThinPackUnresolvedError", err, err)
}
matches, err := filepath.Glob(filepath.Join(packDir, "pack-*.pack"))
@@ -362,9 +362,9 @@ func TestIngestPackTrailerMismatch(t *testing.T) {
t.Fatal("Ingest error = nil, want error")
}
- var mismatch *ingest.ErrPackTrailerMismatch
+ var mismatch *ingest.PackTrailerMismatchError
if !errors.As(err, &mismatch) {
- t.Fatalf("Ingest error type = %T (%v), want *ErrPackTrailerMismatch", err, err)
+ t.Fatalf("Ingest error type = %T (%v), want *PackTrailerMismatchError", err, err)
}
matches, err := filepath.Glob(filepath.Join(packDir, "pack-*.pack"))
diff --git a/format/pack/ingest/record_content.go b/format/pack/ingest/record_content.go
index 1d4f27c3..8fef44b9 100644
--- a/format/pack/ingest/record_content.go
+++ b/format/pack/ingest/record_content.go
@@ -20,7 +20,7 @@ func readBaseRecordContent(state *ingestState, idx int) (objecttype.Type, []byte
}
if int64(len(content)) != record.declaredSize {
- return objecttype.TypeInvalid, nil, &ErrMalformedPackEntry{
+ return objecttype.TypeInvalid, nil, &MalformedPackEntryError{
Offset: record.offset,
Reason: fmt.Sprintf("base content size mismatch got %d want %d", len(content), record.declaredSize),
}
diff --git a/format/pack/ingest/record_delta.go b/format/pack/ingest/record_delta.go
index 67db608e..4a3d5810 100644
--- a/format/pack/ingest/record_delta.go
+++ b/format/pack/ingest/record_delta.go
@@ -20,7 +20,7 @@ func applyDeltaRecord(state *ingestState, idx int, baseType objecttype.Type, bas
}
if int64(len(deltaPayload)) != record.declaredSize {
- return objecttype.TypeInvalid, nil, &ErrMalformedPackEntry{
+ return objecttype.TypeInvalid, nil, &MalformedPackEntryError{
Offset: record.offset,
Reason: fmt.Sprintf("delta payload size mismatch got %d want %d", len(deltaPayload), record.declaredSize),
}
@@ -28,14 +28,14 @@ func applyDeltaRecord(state *ingestState, idx int, baseType objecttype.Type, bas
srcSize, dstSize, err := readDeltaHeaderSizes(deltaPayload)
if err != nil {
- return objecttype.TypeInvalid, nil, &ErrMalformedPackEntry{
+ return objecttype.TypeInvalid, nil, &MalformedPackEntryError{
Offset: record.offset,
Reason: fmt.Sprintf("read delta header: %v", err),
}
}
if srcSize != len(baseContent) {
- return objecttype.TypeInvalid, nil, &ErrMalformedPackEntry{
+ return objecttype.TypeInvalid, nil, &MalformedPackEntryError{
Offset: record.offset,
Reason: fmt.Sprintf("delta source size mismatch got %d want %d", srcSize, len(baseContent)),
}
@@ -43,14 +43,14 @@ func applyDeltaRecord(state *ingestState, idx int, baseType objecttype.Type, bas
content, err := deltaapply.Apply(baseContent, deltaPayload)
if err != nil {
- return objecttype.TypeInvalid, nil, &ErrMalformedPackEntry{
+ return objecttype.TypeInvalid, nil, &MalformedPackEntryError{
Offset: record.offset,
Reason: fmt.Sprintf("apply delta: %v", err),
}
}
if len(content) != dstSize {
- return objecttype.TypeInvalid, nil, &ErrMalformedPackEntry{
+ return objecttype.TypeInvalid, nil, &MalformedPackEntryError{
Offset: record.offset,
Reason: fmt.Sprintf("delta result size mismatch got %d want %d", len(content), dstSize),
}
diff --git a/format/pack/ingest/record_inflate.go b/format/pack/ingest/record_inflate.go
index a8d68c07..b8eca25b 100644
--- a/format/pack/ingest/record_inflate.go
+++ b/format/pack/ingest/record_inflate.go
@@ -12,7 +12,7 @@ import (
func inflateRecordPayload(state *ingestState, idx int) ([]byte, error) {
record := state.records[idx]
if record.packedLen < uint64(record.headerLen) {
- return nil, &ErrMalformedPackEntry{Offset: record.offset, Reason: "entry packed span underflow"}
+ return nil, &MalformedPackEntryError{Offset: record.offset, Reason: "entry packed span underflow"}
}
compressedOffset := record.offset + uint64(record.headerLen)
@@ -32,14 +32,14 @@ func inflateRecordPayload(state *ingestState, idx int) ([]byte, error) {
reader, err := zlib.NewReader(section)
if err != nil {
- return nil, &ErrMalformedPackEntry{Offset: record.offset, Reason: fmt.Sprintf("open payload zlib: %v", err)}
+ return nil, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("open payload zlib: %v", err)}
}
defer func() { _ = reader.Close() }()
out, err := io.ReadAll(reader)
if err != nil {
- return nil, &ErrMalformedPackEntry{Offset: record.offset, Reason: fmt.Sprintf("inflate payload: %v", err)}
+ return nil, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("inflate payload: %v", err)}
}
return out, nil
diff --git a/format/pack/ingest/record_resolve.go b/format/pack/ingest/record_resolve.go
index 6ef5e857..fad8ee7f 100644
--- a/format/pack/ingest/record_resolve.go
+++ b/format/pack/ingest/record_resolve.go
@@ -14,7 +14,7 @@ func resolveRecord(state *ingestState, idx int, visiting map[int]struct{}) (obje
}
if _, ok := visiting[idx]; ok {
- return objecttype.TypeInvalid, nil, &ErrDeltaCycle{Offset: state.records[idx].offset}
+ return objecttype.TypeInvalid, nil, &DeltaCycleError{Offset: state.records[idx].offset}
}
visiting[idx] = struct{}{}
@@ -60,7 +60,7 @@ func resolveRecord(state *ingestState, idx int, visiting map[int]struct{}) (obje
case objecttype.TypeOfsDelta:
baseIdx, ok := state.offsetToRecord[record.baseOffset]
if !ok {
- return objecttype.TypeInvalid, nil, &ErrMalformedPackEntry{
+ return objecttype.TypeInvalid, nil, &MalformedPackEntryError{
Offset: record.offset,
Reason: "missing ofs-delta base entry",
}
@@ -86,12 +86,12 @@ func resolveRecord(state *ingestState, idx int, visiting map[int]struct{}) (obje
objecttype.TypeBlob,
objecttype.TypeTag,
objecttype.TypeFuture:
- return objecttype.TypeInvalid, nil, &ErrMalformedPackEntry{
+ return objecttype.TypeInvalid, nil, &MalformedPackEntryError{
Offset: record.offset,
Reason: "unsupported delta type",
}
default:
- return objecttype.TypeInvalid, nil, &ErrMalformedPackEntry{
+ return objecttype.TypeInvalid, nil, &MalformedPackEntryError{
Offset: record.offset,
Reason: "unsupported delta type",
}
diff --git a/format/pack/ingest/thin_fix.go b/format/pack/ingest/thin_fix.go
index 65ce131c..f21ef98a 100644
--- a/format/pack/ingest/thin_fix.go
+++ b/format/pack/ingest/thin_fix.go
@@ -13,11 +13,11 @@ func maybeFixThin(state *ingestState) error {
}
if !state.fixThin {
- return &ErrThinPackUnresolved{Count: len(state.unresolvedRefDeltas)}
+ return &ThinPackUnresolvedError{Count: len(state.unresolvedRefDeltas)}
}
if state.base == nil {
- return &ErrThinPackUnresolved{Count: len(state.unresolvedRefDeltas)}
+ return &ThinPackUnresolvedError{Count: len(state.unresolvedRefDeltas)}
}
hashSize := int64(state.algo.Size())
diff --git a/format/pack/ingest/trailer.go b/format/pack/ingest/trailer.go
index 4dba3884..ea945b10 100644
--- a/format/pack/ingest/trailer.go
+++ b/format/pack/ingest/trailer.go
@@ -20,7 +20,7 @@ func (scanner *streamScanner) finishAndFlushTrailer() error {
err := scanner.readFull(trailer)
if err != nil {
- return &ErrPackTrailerMismatch{}
+ return &PackTrailerMismatchError{}
}
scanner.packTrailer = append(scanner.packTrailer[:0], trailer...)
@@ -38,7 +38,7 @@ func (scanner *streamScanner) finishAndFlushTrailer() error {
computed := scanner.hash.Sum(nil)
if !bytes.Equal(computed, trailer) {
- return &ErrPackTrailerMismatch{}
+ return &PackTrailerMismatchError{}
}
return nil
diff --git a/format/pktline/errors.go b/format/pktline/errors.go
index d07227e6..866ff467 100644
--- a/format/pktline/errors.go
+++ b/format/pktline/errors.go
@@ -1,9 +1,6 @@
package pktline
-import (
- "errors"
- "fmt"
-)
+import "errors"
var (
// ErrInvalidLength indicates a malformed 4-byte hexadecimal length header.
@@ -30,5 +27,5 @@ func (e *ProtocolError) Error() string {
return "pktline: protocol error"
}
- return fmt.Sprintf("pktline: protocol error: %s", e.Reason)
+ return "pktline: protocol error: " + e.Reason
}
diff --git a/format/sideband64k/errors.go b/format/sideband64k/errors.go
index c04d7caa..44e7c165 100644
--- a/format/sideband64k/errors.go
+++ b/format/sideband64k/errors.go
@@ -1,9 +1,6 @@
package sideband64k
-import (
- "errors"
- "fmt"
-)
+import "errors"
var (
// ErrTooLarge indicates a payload exceeds configured sideband data limits.
@@ -26,5 +23,5 @@ func (e *ProtocolError) Error() string {
return "sideband64k: protocol error"
}
- return fmt.Sprintf("sideband64k: protocol error: %s", e.Reason)
+ return "sideband64k: protocol error: " + e.Reason
}
diff --git a/internal/adler32/adler32_amd64.go b/internal/adler32/adler32_amd64.go
index 7dfab299..7c3d4746 100644
--- a/internal/adler32/adler32_amd64.go
+++ b/internal/adler32/adler32_amd64.go
@@ -14,6 +14,7 @@ import (
// Size of an Adler-32 checksum in bytes.
const Size = 4
+//nolint:gochecknoglobals
var hasAVX2 = cpu.X86.HasAVX2
// digest represents the partial evaluation of a checksum.
diff --git a/internal/adler32/bench_test.go b/internal/adler32/bench_test.go
index d2aebe8f..1161221a 100644
--- a/internal/adler32/bench_test.go
+++ b/internal/adler32/bench_test.go
@@ -8,6 +8,7 @@ import (
const benchmarkSize = 64 * 1024
+//nolint:gochecknoglobals
var data = make([]byte, benchmarkSize)
func init() { //nolint:gochecknoinits
diff --git a/internal/bufpool/class.go b/internal/bufpool/class.go
index 60842d5e..92b9742a 100644
--- a/internal/bufpool/class.go
+++ b/internal/bufpool/class.go
@@ -1,5 +1,6 @@
package bufpool
+//nolint:gochecknoglobals
var sizeClasses = [...]int{
DefaultBufferCap,
64 << 10,
diff --git a/internal/bufpool/pool.go b/internal/bufpool/pool.go
index 30a4a2fb..d776eaa8 100644
--- a/internal/bufpool/pool.go
+++ b/internal/bufpool/pool.go
@@ -2,6 +2,7 @@ package bufpool
import "sync"
+//nolint:gochecknoglobals
var bufferPools = func() []sync.Pool {
pools := make([]sync.Pool, len(sizeClasses))
for i, classCap := range sizeClasses {
diff --git a/internal/compress/zlib/reader.go b/internal/compress/zlib/reader.go
index 3cf0066e..1f6d4337 100644
--- a/internal/compress/zlib/reader.go
+++ b/internal/compress/zlib/reader.go
@@ -58,6 +58,7 @@ var (
ErrHeader = errors.New("zlib: invalid header")
)
+//nolint:gochecknoglobals
var readerPool = sync.Pool{
New: func() any {
r := new(Reader)
diff --git a/internal/compress/zlib/reader_test.go b/internal/compress/zlib/reader_test.go
index c64bd5b0..2cfa8a97 100644
--- a/internal/compress/zlib/reader_test.go
+++ b/internal/compress/zlib/reader_test.go
@@ -24,6 +24,7 @@ type zlibTest struct {
// Compare-to-golden test data was generated by the ZLIB example program at
// https://www.zlib.net/zpipe.c
+//nolint:gochecknoglobals
var zlibTests = []zlibTest{
{
"truncated empty",
diff --git a/internal/compress/zlib/writer.go b/internal/compress/zlib/writer.go
index 8a5562fb..05808eb6 100644
--- a/internal/compress/zlib/writer.go
+++ b/internal/compress/zlib/writer.go
@@ -37,6 +37,7 @@ type Writer struct {
wroteHeader bool
}
+//nolint:gochecknoglobals
var writerPool = sync.Pool{
New: func() any {
return new(Writer)
diff --git a/internal/compress/zlib/writer_test.go b/internal/compress/zlib/writer_test.go
index e67a3539..541aac65 100644
--- a/internal/compress/zlib/writer_test.go
+++ b/internal/compress/zlib/writer_test.go
@@ -15,12 +15,14 @@ import (
"codeberg.org/lindenii/furgit/internal/compress/zlib"
)
+//nolint:gochecknoglobals
var filenames = []string{
"../testdata/gettysburg.txt",
"../testdata/e.txt",
"../testdata/pi.txt",
}
+//nolint:gochecknoglobals
var data = []string{
"test a reasonable sized string that can be compressed",
}
diff --git a/internal/lru/get.go b/internal/lru/get.go
index 92196003..81383945 100644
--- a/internal/lru/get.go
+++ b/internal/lru/get.go
@@ -1,6 +1,8 @@
package lru
// Get returns value for key and marks it most-recently-used.
+//
+//nolint:ireturn
func (cache *Cache[K, V]) Get(key K) (V, bool) {
elem, ok := cache.items[key]
if !ok {
diff --git a/internal/lru/peek.go b/internal/lru/peek.go
index 3a308394..8aced931 100644
--- a/internal/lru/peek.go
+++ b/internal/lru/peek.go
@@ -1,6 +1,8 @@
package lru
// Peek returns value for key without changing recency.
+//
+//nolint:ireturn
func (cache *Cache[K, V]) Peek(key K) (V, bool) {
elem, ok := cache.items[key]
if !ok {
diff --git a/internal/lru/remove.go b/internal/lru/remove.go
index 79735edf..3b1f2c93 100644
--- a/internal/lru/remove.go
+++ b/internal/lru/remove.go
@@ -3,6 +3,8 @@ package lru
import "container/list"
// Remove deletes key from the cache.
+//
+//nolint:ireturn
func (cache *Cache[K, V]) Remove(key K) (V, bool) {
elem, ok := cache.items[key]
if !ok {
diff --git a/internal/testgit/repo_tag_annotated.go b/internal/testgit/repo_tag_annotated.go
index 7e9bfbf5..56bd6a0c 100644
--- a/internal/testgit/repo_tag_annotated.go
+++ b/internal/testgit/repo_tag_annotated.go
@@ -1,7 +1,6 @@
package testgit
import (
- "fmt"
"testing"
"codeberg.org/lindenii/furgit/objectid"
@@ -12,5 +11,5 @@ func (testRepo *TestRepo) TagAnnotated(tb testing.TB, name string, target object
tb.Helper()
testRepo.Run(tb, "tag", "-a", name, target.String(), "-m", message)
- return testRepo.RevParse(tb, fmt.Sprintf("refs/tags/%s", name))
+ return testRepo.RevParse(tb, "refs/tags/"+name)
}
diff --git a/object/parse.go b/object/parse.go
index 1b15f377..9afe5cb8 100644
--- a/object/parse.go
+++ b/object/parse.go
@@ -8,7 +8,26 @@ import (
"codeberg.org/lindenii/furgit/objecttype"
)
+// ParseObjectWithHeader parses a loose object in "type size\x00body" format.
+//
+//nolint:ireturn
+func ParseObjectWithHeader(raw []byte, algo objectid.Algorithm) (Object, error) {
+ ty, size, headerLen, ok := objectheader.Parse(raw)
+ if !ok {
+ return nil, fmt.Errorf("object: malformed object header")
+ }
+
+ body := raw[headerLen:]
+ if int64(len(body)) != size {
+ return nil, fmt.Errorf("object: size mismatch: header says %d bytes, body has %d", size, len(body))
+ }
+
+ return ParseObjectWithoutHeader(ty, body, algo)
+}
+
// ParseObjectWithoutHeader parses a typed object body.
+//
+//nolint:ireturn
func ParseObjectWithoutHeader(ty objecttype.Type, body []byte, algo objectid.Algorithm) (Object, error) {
switch ty {
case objecttype.TypeBlob:
@@ -25,18 +44,3 @@ func ParseObjectWithoutHeader(ty objecttype.Type, body []byte, algo objectid.Alg
return nil, fmt.Errorf("object: unsupported object type %d", ty)
}
}
-
-// ParseObjectWithHeader parses a loose object in "type size\\x00body" format.
-func ParseObjectWithHeader(raw []byte, algo objectid.Algorithm) (Object, error) {
- ty, size, headerLen, ok := objectheader.Parse(raw)
- if !ok {
- return nil, fmt.Errorf("object: malformed object header")
- }
-
- body := raw[headerLen:]
- if int64(len(body)) != size {
- return nil, fmt.Errorf("object: size mismatch: header says %d bytes, body has %d", size, len(body))
- }
-
- return ParseObjectWithoutHeader(ty, body, algo)
-}
diff --git a/objectid/algorithms.go b/objectid/algorithms.go
index a07edf7b..404d3bbf 100644
--- a/objectid/algorithms.go
+++ b/objectid/algorithms.go
@@ -26,6 +26,7 @@ type algorithmDetails struct {
new func() hash.Hash
}
+//nolint:gochecknoglobals
var algorithmTable = [...]algorithmDetails{
AlgorithmUnknown: {},
AlgorithmSHA1: {
@@ -61,7 +62,9 @@ var algorithmTable = [...]algorithmDetails{
}
var (
- algorithmByName = map[string]Algorithm{}
+ //nolint:gochecknoglobals
+ algorithmByName = map[string]Algorithm{}
+ //nolint:gochecknoglobals
supportedAlgorithms []Algorithm
)
diff --git a/objectstore/mix/mru.go b/objectstore/mix/mru.go
index 11782d5f..52176cab 100644
--- a/objectstore/mix/mru.go
+++ b/objectstore/mix/mru.go
@@ -8,6 +8,7 @@ type backendNode struct {
next *backendNode
}
+//nolint:ireturn
func (mix *Mix) firstBackend() objectstore.Store {
mix.mu.RLock()
defer mix.mu.RUnlock()
@@ -19,6 +20,7 @@ func (mix *Mix) firstBackend() objectstore.Store {
return mix.backendHead.backend
}
+//nolint:ireturn
func (mix *Mix) nextBackend(current objectstore.Store) objectstore.Store {
mix.mu.RLock()
defer mix.mu.RUnlock()
diff --git a/objectstored/blob.go b/objectstored/blob.go
index 26584ce5..b3a867c3 100644
--- a/objectstored/blob.go
+++ b/objectstored/blob.go
@@ -25,6 +25,8 @@ func (stored *StoredBlob) ID() objectid.ObjectID {
}
// Object returns the parsed blob as the generic object interface.
+//
+//nolint:ireturn
func (stored *StoredBlob) Object() object.Object {
return stored.blob
}
diff --git a/objectstored/commit.go b/objectstored/commit.go
index 0bcd1e3f..de22e847 100644
--- a/objectstored/commit.go
+++ b/objectstored/commit.go
@@ -22,6 +22,8 @@ func (stored *StoredCommit) ID() objectid.ObjectID {
}
// Object returns the parsed commit as the generic object interface.
+//
+//nolint:ireturn
func (stored *StoredCommit) Object() object.Object {
return stored.commit
}
diff --git a/objectstored/objectstored.go b/objectstored/objectstored.go
index f50b27ee..b05496df 100644
--- a/objectstored/objectstored.go
+++ b/objectstored/objectstored.go
@@ -22,6 +22,8 @@ func (stored *StoredTag) ID() objectid.ObjectID {
}
// Object returns the parsed tag as the generic object interface.
+//
+//nolint:ireturn
func (stored *StoredTag) Object() object.Object {
return stored.tag
}
diff --git a/objectstored/tree.go b/objectstored/tree.go
index 3c6e53de..46e6ce6c 100644
--- a/objectstored/tree.go
+++ b/objectstored/tree.go
@@ -22,6 +22,8 @@ func (stored *StoredTree) ID() objectid.ObjectID {
}
// Object returns the parsed tree as the generic object interface.
+//
+//nolint:ireturn
func (stored *StoredTree) Object() object.Object {
return stored.tree
}
diff --git a/reachability/ancestor.go b/reachability/ancestor.go
index 98a2c080..211aed01 100644
--- a/reachability/ancestor.go
+++ b/reachability/ancestor.go
@@ -57,7 +57,7 @@ func (r *Reachability) isAncestorGraph(ancestor, descendant objectid.ObjectID) (
ancestorPos, err := r.graph.Lookup(ancestor)
if err != nil {
- var notFound *commitgraphread.ErrNotFound
+ var notFound *commitgraphread.NotFoundError
if errors.As(err, &notFound) {
return false, false, nil
}
@@ -67,7 +67,7 @@ func (r *Reachability) isAncestorGraph(ancestor, descendant objectid.ObjectID) (
descendantPos, err := r.graph.Lookup(descendant)
if err != nil {
- var notFound *commitgraphread.ErrNotFound
+ var notFound *commitgraphread.NotFoundError
if errors.As(err, &notFound) {
return false, false, nil
}
diff --git a/reachability/errors.go b/reachability/errors.go
index 7d0d9a18..0f0c6047 100644
--- a/reachability/errors.go
+++ b/reachability/errors.go
@@ -7,24 +7,24 @@ import (
"codeberg.org/lindenii/furgit/objecttype"
)
-// ErrObjectMissing indicates that a referenced object is absent from the store.
-type ErrObjectMissing struct {
+// ObjectMissingError indicates that a referenced object is absent from the store.
+type ObjectMissingError struct {
OID objectid.ObjectID
}
-func (e *ErrObjectMissing) Error() string {
+func (e *ObjectMissingError) Error() string {
return fmt.Sprintf("reachability: missing object %s", e.OID)
}
-// ErrObjectType indicates that a referenced object has a different type than
+// ObjectTypeError indicates that a referenced object has a different type than
// what traversal expected on that edge.
-type ErrObjectType struct {
+type ObjectTypeError struct {
OID objectid.ObjectID
Got objecttype.Type
Want objecttype.Type
}
-func (e *ErrObjectType) Error() string {
+func (e *ObjectTypeError) Error() string {
gotName, gotOK := objecttype.Name(e.Got)
if !gotOK {
gotName = fmt.Sprintf("type(%d)", e.Got)
diff --git a/reachability/helpers.go b/reachability/helpers.go
index 41a2f80b..9fdc99d8 100644
--- a/reachability/helpers.go
+++ b/reachability/helpers.go
@@ -39,7 +39,7 @@ func (r *Reachability) readHeaderType(id objectid.ObjectID) (objecttype.Type, er
ty, _, err := r.store.ReadHeader(id)
if err != nil {
if errors.Is(err, objectstore.ErrObjectNotFound) {
- return objecttype.TypeInvalid, &ErrObjectMissing{OID: id}
+ return objecttype.TypeInvalid, &ObjectMissingError{OID: id}
}
return objecttype.TypeInvalid, err
@@ -61,7 +61,7 @@ func (r *Reachability) readBytesContent(id objectid.ObjectID) ([]byte, error) {
_, content, err := r.store.ReadBytesContent(id)
if err != nil {
if errors.Is(err, objectstore.ErrObjectNotFound) {
- return nil, &ErrObjectMissing{OID: id}
+ return nil, &ObjectMissingError{OID: id}
}
return nil, err
diff --git a/reachability/integration_test.go b/reachability/integration_test.go
index 079ce5fc..c7c5c63d 100644
--- a/reachability/integration_test.go
+++ b/reachability/integration_test.go
@@ -236,9 +236,9 @@ func TestCheckConnectedMissingObject(t *testing.T) {
t.Fatal("expected error")
}
- var missing *reachability.ErrObjectMissing
+ var missing *reachability.ObjectMissingError
if !errors.As(err, &missing) {
- t.Fatalf("expected ErrObjectMissing, got %T (%v)", err, err)
+ t.Fatalf("expected ObjectMissingError, got %T (%v)", err, err)
}
if missing.OID != treeID {
diff --git a/reachability/peel.go b/reachability/peel.go
index 7b9e7bf1..e8120ef7 100644
--- a/reachability/peel.go
+++ b/reachability/peel.go
@@ -20,7 +20,7 @@ func (r *Reachability) peelRootToDomain(id objectid.ObjectID, domain Domain) (ob
if ty != objecttype.TypeTag {
if domain == DomainCommits && ty != objecttype.TypeCommit {
- return objectid.ObjectID{}, &ErrObjectType{OID: id, Got: ty, Want: objecttype.TypeCommit}
+ return objectid.ObjectID{}, &ObjectTypeError{OID: id, Got: ty, Want: objecttype.TypeCommit}
}
return id, nil
diff --git a/reachability/unit_test.go b/reachability/unit_test.go
index 8f19cfcd..2fef2b48 100644
--- a/reachability/unit_test.go
+++ b/reachability/unit_test.go
@@ -233,9 +233,9 @@ func TestWalkDomainCommitsRejectsNonCommitRootAfterPeel(t *testing.T) {
t.Fatal("expected error")
}
- var typeErr *reachability.ErrObjectType
+ var typeErr *reachability.ObjectTypeError
if !errors.As(err, &typeErr) {
- t.Fatalf("expected ErrObjectType, got %T (%v)", err, err)
+ t.Fatalf("expected ObjectTypeError, got %T (%v)", err, err)
}
if typeErr.Got != objecttype.TypeTree || typeErr.Want != objecttype.TypeCommit {
@@ -349,9 +349,9 @@ func TestCheckConnectedReturnsConcreteMissingObject(t *testing.T) {
t.Fatal("expected error")
}
- var missing *reachability.ErrObjectMissing
+ var missing *reachability.ObjectMissingError
if !errors.As(err, &missing) {
- t.Fatalf("expected ErrObjectMissing, got %T (%v)", err, err)
+ t.Fatalf("expected ObjectMissingError, got %T (%v)", err, err)
}
if missing.OID != missingParent {
@@ -441,9 +441,9 @@ func TestIsAncestorRejectsNonCommitAfterPeel(t *testing.T) {
t.Fatal("expected error")
}
- var typeErr *reachability.ErrObjectType
+ var typeErr *reachability.ObjectTypeError
if !errors.As(err, &typeErr) {
- t.Fatalf("expected ErrObjectType, got %T (%v)", err, err)
+ t.Fatalf("expected ObjectTypeError, got %T (%v)", err, err)
}
})
}
diff --git a/reachability/walk_expand_commits.go b/reachability/walk_expand_commits.go
index 11c5c692..e72092f4 100644
--- a/reachability/walk_expand_commits.go
+++ b/reachability/walk_expand_commits.go
@@ -63,7 +63,7 @@ func (walk *Walk) expandCommits(item walkItem) ([]walkItem, error) {
return []walkItem{{id: tag.Target, want: objecttype.TypeInvalid}}, nil
case objecttype.TypeTree, objecttype.TypeBlob, objecttype.TypeInvalid,
objecttype.TypeFuture, objecttype.TypeOfsDelta, objecttype.TypeRefDelta:
- return nil, &ErrObjectType{OID: item.id, Got: ty, Want: objecttype.TypeCommit}
+ return nil, &ObjectTypeError{OID: item.id, Got: ty, Want: objecttype.TypeCommit}
}
return nil, fmt.Errorf("reachability: unreachable object type %d", ty)
diff --git a/reachability/walk_expand_commits_graph.go b/reachability/walk_expand_commits_graph.go
index bbdc0ade..90e52112 100644
--- a/reachability/walk_expand_commits_graph.go
+++ b/reachability/walk_expand_commits_graph.go
@@ -11,7 +11,7 @@ import (
func (walk *Walk) expandCommitsFromGraph(id objectid.ObjectID) ([]walkItem, bool, error) {
pos, err := walk.reachability.graph.Lookup(id)
if err != nil {
- var notFound *commitgraphread.ErrNotFound
+ var notFound *commitgraphread.NotFoundError
if errors.As(err, &notFound) {
return nil, false, nil
}
diff --git a/reachability/walk_expand_objects.go b/reachability/walk_expand_objects.go
index 97cab79c..9dc2ff80 100644
--- a/reachability/walk_expand_objects.go
+++ b/reachability/walk_expand_objects.go
@@ -14,7 +14,7 @@ func (walk *Walk) expandObjects(item walkItem) ([]walkItem, error) {
}
if item.want != objecttype.TypeInvalid && ty != item.want {
- return nil, &ErrObjectType{OID: item.id, Got: ty, Want: item.want}
+ return nil, &ObjectTypeError{OID: item.id, Got: ty, Want: item.want}
}
switch ty {
@@ -76,7 +76,7 @@ func (walk *Walk) expandObjects(item walkItem) ([]walkItem, error) {
return []walkItem{{id: tag.Target, want: tag.TargetType}}, nil
case objecttype.TypeInvalid, objecttype.TypeFuture, objecttype.TypeOfsDelta, objecttype.TypeRefDelta:
- return nil, &ErrObjectType{OID: item.id, Got: ty, Want: item.want}
+ return nil, &ObjectTypeError{OID: item.id, Got: ty, Want: item.want}
}
return nil, fmt.Errorf("reachability: unreachable object type %d", ty)
diff --git a/reachability/walk_verify.go b/reachability/walk_verify.go
index 46798f5a..82eb7566 100644
--- a/reachability/walk_verify.go
+++ b/reachability/walk_verify.go
@@ -13,7 +13,7 @@ func (walk *Walk) validateCommitObject(id objectid.ObjectID) error {
}
if ty != objecttype.TypeCommit {
- return &ErrObjectType{OID: id, Got: ty, Want: objecttype.TypeCommit}
+ return &ObjectTypeError{OID: id, Got: ty, Want: objecttype.TypeCommit}
}
content, err := walk.readBytesContent(id)
diff --git a/refstore/chain/resolve.go b/refstore/chain/resolve.go
index 66ba821e..007c3668 100644
--- a/refstore/chain/resolve.go
+++ b/refstore/chain/resolve.go
@@ -9,6 +9,8 @@ import (
)
// Resolve resolves a reference from the first backend that has it.
+//
+//nolint:ireturn
func (chain *Chain) Resolve(name string) (ref.Ref, error) {
for i, backend := range chain.backends {
if backend == nil {
diff --git a/refstore/loose/resolve.go b/refstore/loose/resolve.go
index 076c4098..5c5298b8 100644
--- a/refstore/loose/resolve.go
+++ b/refstore/loose/resolve.go
@@ -12,6 +12,8 @@ import (
)
// Resolve resolves a loose reference name to symbolic or detached form.
+//
+//nolint:ireturn
func (store *Store) Resolve(name string) (ref.Ref, error) {
if name == "" {
return nil, refstore.ErrReferenceNotFound
@@ -63,6 +65,8 @@ func (store *Store) ResolveFully(name string) (ref.Detached, error) {
}
// resolveOne resolves one loose ref file without symbolic recursion.
+//
+//nolint:ireturn
func (store *Store) resolveOne(name string) (ref.Ref, error) {
data, err := store.root.ReadFile(name)
if err != nil {
diff --git a/refstore/packed/resolve.go b/refstore/packed/resolve.go
index 8be0a2a3..37e291a5 100644
--- a/refstore/packed/resolve.go
+++ b/refstore/packed/resolve.go
@@ -6,6 +6,8 @@ import (
)
// Resolve resolves a packed reference name to a detached ref.
+//
+//nolint:ireturn
func (store *Store) Resolve(name string) (ref.Ref, error) {
detached, ok := store.byName[name]
if !ok {
diff --git a/refstore/shorten.go b/refstore/shorten.go
index 250ab01f..ae20a52e 100644
--- a/refstore/shorten.go
+++ b/refstore/shorten.go
@@ -7,6 +7,7 @@ type shortenRule struct {
suffix string
}
+//nolint:gochecknoglobals
var shortenRules = [...]shortenRule{
{prefix: "", suffix: ""},
{prefix: "refs/", suffix: ""},
diff --git a/repository/objects.go b/repository/objects.go
index c8278150..63cad4ed 100644
--- a/repository/objects.go
+++ b/repository/objects.go
@@ -12,6 +12,7 @@ import (
objectpacked "codeberg.org/lindenii/furgit/objectstore/packed"
)
+//nolint:ireturn
func openObjectStore(root *os.Root, algo objectid.Algorithm) (objectstore.Store, *objectloose.Store, error) {
objectsRoot, err := root.OpenRoot("objects")
if err != nil {
@@ -64,6 +65,8 @@ func openObjectStore(root *os.Root, algo objectid.Algorithm) (objectstore.Store,
}
// Objects returns the configured object store.
+//
+//nolint:ireturn
func (repo *Repository) Objects() objectstore.Store {
return repo.objects
}
diff --git a/repository/refs.go b/repository/refs.go
index bdcab843..f3ce6435 100644
--- a/repository/refs.go
+++ b/repository/refs.go
@@ -12,6 +12,7 @@ import (
refpacked "codeberg.org/lindenii/furgit/refstore/packed"
)
+//nolint:ireturn
func openRefStore(root *os.Root, algo objectid.Algorithm) (out refstore.Store, err error) {
looseRoot, err := root.OpenRoot(".")
if err != nil {
@@ -47,6 +48,8 @@ func openRefStore(root *os.Root, algo objectid.Algorithm) (out refstore.Store, e
}
// Refs returns the configured ref store.
+//
+//nolint:ireturn
func (repo *Repository) Refs() refstore.Store {
return repo.refs
}
diff --git a/repository/stored.go b/repository/stored.go
index 1e92dc40..d7ee5267 100644
--- a/repository/stored.go
+++ b/repository/stored.go
@@ -10,6 +10,8 @@ import (
)
// ReadStored reads, parses, and wraps one object by ID.
+//
+//nolint:ireturn
func (repo *Repository) ReadStored(id objectid.ObjectID) (objectstored.StoredObject, error) {
parsed, err := repo.readParsedObject(id)
if err != nil {
@@ -91,6 +93,8 @@ func (repo *Repository) ReadStoredTag(id objectid.ObjectID) (*objectstored.Store
}
// readParsedObject reads bytes content from storage and parses one object.
+//
+//nolint:ireturn
func (repo *Repository) readParsedObject(id objectid.ObjectID) (object.Object, error) {
ty, content, err := repo.objects.ReadBytesContent(id)
if err != nil {