mirror of
https://github.com/git/git.git
synced 2026-02-27 18:29:43 +00:00
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>
61 lines
1.8 KiB
C
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
|