Fast implementation of Git in pure Go codeberg.org/lindenii/furgit
git go
6
fork

Configure Feed

Select the types of activity you want to include in your feed.

repository: Add commit-graph

Runxi Yu efe3045a 9b29ce32

+56 -3
+7
repository/close.go
··· 22 22 } 23 23 } 24 24 25 + if repo.commitGraph != nil { 26 + err := repo.commitGraph.Close() 27 + if err != nil { 28 + errs = append(errs, err) 29 + } 30 + } 31 + 25 32 if repo.objectsPacked != nil { 26 33 err := repo.objectsPacked.Close() 27 34 if err != nil {
+37
repository/commit_graph.go
··· 1 + package repository 2 + 3 + import ( 4 + "errors" 5 + "os" 6 + 7 + commitgraphread "codeberg.org/lindenii/furgit/format/commitgraph/read" 8 + objectid "codeberg.org/lindenii/furgit/object/id" 9 + ) 10 + 11 + func openCommitGraph(root *os.Root, algo objectid.Algorithm) (*commitgraphread.Reader, error) { 12 + reader, err := commitgraphread.Open(root, algo, commitgraphread.OpenChain) 13 + if err == nil { 14 + return reader, nil 15 + } 16 + 17 + var malformed *commitgraphread.MalformedError 18 + if errors.As(err, &malformed) && 19 + malformed.Path == "info/commit-graphs/commit-graph-chain" && 20 + malformed.Reason == "missing commit-graph-chain" { 21 + reader, err = commitgraphread.Open(root, algo, commitgraphread.OpenSingle) 22 + if errors.Is(err, os.ErrNotExist) { 23 + return nil, nil 24 + } 25 + 26 + return reader, err 27 + } 28 + 29 + return nil, err 30 + } 31 + 32 + // CommitGraph returns the configured commit-graph reader, if available. 33 + // 34 + // Labels: Life-Parent, Close-No. 35 + func (repo *Repository) CommitGraph() *commitgraphread.Reader { 36 + return repo.commitGraph 37 + }
+7
repository/open.go
··· 44 44 repo.objectsLoose = objectsLoose 45 45 repo.objectsPacked = objectsPacked 46 46 47 + commitGraph, err := openCommitGraph(objectsRoot, algo) 48 + if err != nil { 49 + return nil, err 50 + } 51 + 52 + repo.commitGraph = commitGraph 53 + 47 54 refRoot, err := root.OpenRoot(".") 48 55 if err != nil { 49 56 return nil, fmt.Errorf("repository: open root for refs: %w", err)
+5 -3
repository/repository.go
··· 5 5 "os" 6 6 7 7 "codeberg.org/lindenii/furgit/config" 8 + commitgraphread "codeberg.org/lindenii/furgit/format/commitgraph/read" 8 9 objectid "codeberg.org/lindenii/furgit/object/id" 9 10 objectstore "codeberg.org/lindenii/furgit/object/store" 10 11 objectloose "codeberg.org/lindenii/furgit/object/store/loose" ··· 18 19 // Open expects a root for the Git directory itself: 19 20 // a bare repository root or a non-bare ".git" directory. 20 21 // 21 - // Accessors such as [Repository.Objects], [Repository.Refs], 22 - // [Repository.Fetcher], and [Repository.LooseStoreForWriting] return 23 - // repository-backed views. 22 + // Accessors such as [Repository.Objects], [Repository.CommitGraph], 23 + // [Repository.Refs], [Repository.Fetcher], and 24 + // [Repository.LooseStoreForWriting] return repository-backed views. 24 25 // 25 26 // Labels: MT-Safe, Close-Caller. 26 27 type Repository struct { ··· 32 33 objectsPackRoot *os.Root 33 34 objectsLoose *objectloose.Store 34 35 objectsPacked *objectpacked.Store 36 + commitGraph *commitgraphread.Reader 35 37 refRoot *os.Root 36 38 refs refstore.ReadWriteStore 37 39 }