aboutsummaryrefslogtreecommitdiff
path: root/repository/repository.go
blob: cce7316115d8b8c7a707ea6801712e0aeb39bf4e (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
// Package repository wires object and ref storage for one Git repository.
package repository

import (
	"os"

	"codeberg.org/lindenii/furgit/config"
	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
// their 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 Objects, Refs, Resolver, and LooseStoreForWriting return
// views backed by resources owned by Repository. Those values borrow the
// repository's stores and filesystem roots and must not be used after Close.
type Repository struct {
	config *config.Config
	algo   objectid.Algorithm

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