aboutsummaryrefslogtreecommitdiff
path: root/repository/repository.go
blob: b60e002395fa58512885ccc19dcd3623d719e6bd (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
38
39
// Package repository opens stores and other objects to access a typical on-disk repo.
package repository

import (
	"os"

	"codeberg.org/lindenii/furgit/config"
	commitgraphread "codeberg.org/lindenii/furgit/format/commitgraph/read"
	objectid "codeberg.org/lindenii/furgit/object/id"
	objectstore "codeberg.org/lindenii/furgit/object/store"
	objectloose "codeberg.org/lindenii/furgit/object/store/loose"
	objectpacked "codeberg.org/lindenii/furgit/object/store/packed"
	refstore "codeberg.org/lindenii/furgit/ref/store"
)

// Repository represents a typical on-disk Git repository by composing
// its stores together for access.
//
// Open expects a root for the Git directory itself:
// a bare repository root or a non-bare ".git" directory.
//
// Accessors such as [Repository.Objects], [Repository.CommitGraph],
// [Repository.Refs], [Repository.Fetcher], and
// [Repository.LooseStoreForWriting] return repository-backed views.
//
// Labels: MT-Safe, Close-Caller.
type Repository struct {
	config *config.Config
	algo   objectid.Algorithm

	objects         objectstore.ReadingStore
	objectsRoot     *os.Root
	objectsPackRoot *os.Root
	objectsLoose    *objectloose.Store
	objectsPacked   *objectpacked.Store
	commitGraph     *commitgraphread.Reader
	refRoot         *os.Root
	refs            refstore.ReadWriteStore
}