Files
git/odb/source.h
Patrick Steinhardt cfcfdf6592 odb: split struct odb_source into separate header
Subsequent commits will expand the `struct odb_source` to become a
generic interface for accessing an object database source. As part of
these refactorings we'll add a set of function pointers that will
significantly expand the structure overall.

Prepare for this by splitting out the `struct odb_source` into a
separate header. This keeps the high-level object database interface
detached from the low-level object database sources.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-23 13:49:59 -08:00

61 lines
1.8 KiB
C

#ifndef ODB_SOURCE_H
#define ODB_SOURCE_H
/*
* The source is the part of the object database that stores the actual
* objects. It thus encapsulates the logic to read and write the specific
* on-disk format. An object database can have multiple sources:
*
* - The primary source, which is typically located in "$GIT_DIR/objects".
* This is where new objects are usually written to.
*
* - Alternate sources, which are configured via "objects/info/alternates" or
* via the GIT_ALTERNATE_OBJECT_DIRECTORIES environment variable. These
* alternate sources are only used to read objects.
*/
struct odb_source {
struct odb_source *next;
/* Object database that owns this object source. */
struct object_database *odb;
/* Private state for loose objects. */
struct odb_source_loose *loose;
/* Should only be accessed directly by packfile.c and midx.c. */
struct packfile_store *packfiles;
/*
* Figure out whether this is the local source of the owning
* repository, which would typically be its ".git/objects" directory.
* This local object directory is usually where objects would be
* written to.
*/
bool local;
/*
* This object store is ephemeral, so there is no need to fsync.
*/
int will_destroy;
/*
* Path to the source. If this is a relative path, it is relative to
* the current working directory.
*/
char *path;
};
/*
* Allocate and initialize a new source for the given object database located
* at `path`. `local` indicates whether or not the source is the local and thus
* primary object source of the object database.
*/
struct odb_source *odb_source_new(struct object_database *odb,
const char *path,
bool local);
/* Free the object database source, releasing all associated resources. */
void odb_source_free(struct odb_source *source);
#endif