aboutsummaryrefslogtreecommitdiff
path: root/repository/commit_graph.go
blob: 3f0a0888d3e9b34b59fadee8960f64f31db94568 (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package repository

import (
	"errors"
	"os"

	commitgraphread "codeberg.org/lindenii/furgit/format/commitgraph/read"
	objectid "codeberg.org/lindenii/furgit/object/id"
)

func openCommitGraph(root *os.Root, algo objectid.Algorithm) (*commitgraphread.Reader, error) {
	reader, err := commitgraphread.Open(root, algo, commitgraphread.OpenChain)
	if err == nil {
		return reader, nil
	}

	var malformed *commitgraphread.MalformedError
	if errors.As(err, &malformed) &&
		malformed.Path == "info/commit-graphs/commit-graph-chain" &&
		malformed.Reason == "missing commit-graph-chain" {
		reader, err = commitgraphread.Open(root, algo, commitgraphread.OpenSingle)
		if errors.Is(err, os.ErrNotExist) {
			return nil, nil //nolint:nilnil
		}

		return reader, err
	}

	return nil, err
}

// CommitGraph returns the configured commit-graph reader, if available.
//
// Labels: Life-Parent, Close-No.
func (repo *Repository) CommitGraph() *commitgraphread.Reader {
	return repo.commitGraph
}