object-store: move function declarations to their respective subsystems

We carry declarations for a couple of functions in "object-store.h" that
are not defined in "object-store.c", but in a different subsystem. Move
these declarations to the respective headers whose matching code files
carry the corresponding definition.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
seen
Patrick Steinhardt 2025-04-29 09:52:18 +02:00 committed by Junio C Hamano
parent 0b8ed25b66
commit 1a793261c5
12 changed files with 106 additions and 103 deletions

View File

@ -12,7 +12,7 @@
#include "parse-options.h" #include "parse-options.h"
#include "quote.h" #include "quote.h"
#include "packfile.h" #include "packfile.h"
#include "object-store.h" #include "object-file.h"


static unsigned long garbage; static unsigned long garbage;
static off_t size_garbage; static off_t size_garbage;

View File

@ -28,7 +28,7 @@
#include "commit.h" #include "commit.h"
#include "commit-graph.h" #include "commit-graph.h"
#include "packfile.h" #include "packfile.h"
#include "object-store.h" #include "object-file.h"
#include "pack.h" #include "pack.h"
#include "pack-objects.h" #include "pack-objects.h"
#include "path.h" #include "path.h"

View File

@ -8,7 +8,7 @@
#include "copy.h" #include "copy.h"
#include "gettext.h" #include "gettext.h"
#include "hex.h" #include "hex.h"
#include "object-store.h" #include "object-file.h"
#include "attr.h" #include "attr.h"
#include "run-command.h" #include "run-command.h"
#include "quote.h" #include "quote.h"

View File

@ -8,7 +8,7 @@
#include "git-compat-util.h" #include "git-compat-util.h"
#include "diff.h" #include "diff.h"
#include "diffcore.h" #include "diffcore.h"
#include "object-store.h" #include "object-file.h"
#include "hashmap.h" #include "hashmap.h"
#include "mem-pool.h" #include "mem-pool.h"
#include "oid-array.h" #include "oid-array.h"

2
dir.c
View File

@ -17,7 +17,7 @@
#include "environment.h" #include "environment.h"
#include "gettext.h" #include "gettext.h"
#include "name-hash.h" #include "name-hash.h"
#include "object-store.h" #include "object-file.h"
#include "path.h" #include "path.h"
#include "refs.h" #include "refs.h"
#include "repository.h" #include "repository.h"

View File

@ -9,7 +9,7 @@
#include "environment.h" #include "environment.h"
#include "hex.h" #include "hex.h"
#include "object-name.h" #include "object-name.h"
#include "object-store.h" #include "object-file.h"
#include "repository.h" #include "repository.h"
#include "tmp-objdir.h" #include "tmp-objdir.h"
#include "commit.h" #include "commit.h"

View File

@ -3,6 +3,7 @@


#include "git-zlib.h" #include "git-zlib.h"
#include "object.h" #include "object.h"
#include "object-store.h"


struct index_state; struct index_state;


@ -25,6 +26,16 @@ int index_path(struct index_state *istate, struct object_id *oid, const char *pa


struct object_directory; struct object_directory;


/*
* Populate and return the loose object cache array corresponding to the
* given object ID.
*/
struct oidtree *odb_loose_cache(struct object_directory *odb,
const struct object_id *oid);

/* Empty the loose object cache for the specified object directory. */
void odb_clear_loose_cache(struct object_directory *odb);

/* /*
* Put in `buf` the name of the file in the local object database that * Put in `buf` the name of the file in the local object database that
* would be used to store a loose object with the specified oid. * would be used to store a loose object with the specified oid.
@ -42,6 +53,68 @@ int has_loose_object_nonlocal(const struct object_id *);


int has_loose_object(const struct object_id *); int has_loose_object(const struct object_id *);


void *map_loose_object(struct repository *r, const struct object_id *oid,
unsigned long *size);

/*
* Iterate over the files in the loose-object parts of the object
* directory "path", triggering the following callbacks:
*
* - loose_object is called for each loose object we find.
*
* - loose_cruft is called for any files that do not appear to be
* loose objects. Note that we only look in the loose object
* directories "objects/[0-9a-f]{2}/", so we will not report
* "objects/foobar" as cruft.
*
* - loose_subdir is called for each top-level hashed subdirectory
* of the object directory (e.g., "$OBJDIR/f0"). It is called
* after the objects in the directory are processed.
*
* Any callback that is NULL will be ignored. Callbacks returning non-zero
* will end the iteration.
*
* In the "buf" variant, "path" is a strbuf which will also be used as a
* scratch buffer, but restored to its original contents before
* the function returns.
*/
typedef int each_loose_object_fn(const struct object_id *oid,
const char *path,
void *data);
typedef int each_loose_cruft_fn(const char *basename,
const char *path,
void *data);
typedef int each_loose_subdir_fn(unsigned int nr,
const char *path,
void *data);
int for_each_file_in_obj_subdir(unsigned int subdir_nr,
struct strbuf *path,
each_loose_object_fn obj_cb,
each_loose_cruft_fn cruft_cb,
each_loose_subdir_fn subdir_cb,
void *data);
int for_each_loose_file_in_objdir(const char *path,
each_loose_object_fn obj_cb,
each_loose_cruft_fn cruft_cb,
each_loose_subdir_fn subdir_cb,
void *data);
int for_each_loose_file_in_objdir_buf(struct strbuf *path,
each_loose_object_fn obj_cb,
each_loose_cruft_fn cruft_cb,
each_loose_subdir_fn subdir_cb,
void *data);

/*
* Iterate over all accessible loose objects without respect to
* reachability. By default, this includes both local and alternate objects.
* The order in which objects are visited is unspecified.
*
* Any flags specific to packs are ignored.
*/
int for_each_loose_object(each_loose_object_fn, void *,
enum for_each_object_flags flags);


/** /**
* format_object_header() is a thin wrapper around s xsnprintf() that * format_object_header() is a thin wrapper around s xsnprintf() that
* writes the initial "<type> <obj-len>" part of the loose object * writes the initial "<type> <obj-len>" part of the loose object
@ -158,6 +231,10 @@ int finalize_object_file(const char *tmpfile, const char *filename);
int finalize_object_file_flags(const char *tmpfile, const char *filename, int finalize_object_file_flags(const char *tmpfile, const char *filename,
enum finalize_object_file_flags flags); enum finalize_object_file_flags flags);


void hash_object_file(const struct git_hash_algo *algo, const void *buf,
unsigned long len, enum object_type type,
struct object_id *oid);

/* Helper to check and "touch" a file */ /* Helper to check and "touch" a file */
int check_and_freshen_file(const char *fn, int freshen); int check_and_freshen_file(const char *fn, int freshen);



View File

@ -19,7 +19,7 @@
#include "oidtree.h" #include "oidtree.h"
#include "packfile.h" #include "packfile.h"
#include "pretty.h" #include "pretty.h"
#include "object-store.h" #include "object-file.h"
#include "read-cache-ll.h" #include "read-cache-ll.h"
#include "repo-settings.h" #include "repo-settings.h"
#include "repository.h" #include "repository.h"

View File

@ -82,16 +82,6 @@ struct object_directory *set_temporary_primary_odb(const char *dir, int will_des
*/ */
void restore_primary_odb(struct object_directory *restore_odb, const char *old_path); void restore_primary_odb(struct object_directory *restore_odb, const char *old_path);


/*
* Populate and return the loose object cache array corresponding to the
* given object ID.
*/
struct oidtree *odb_loose_cache(struct object_directory *odb,
const struct object_id *oid);

/* Empty the loose object cache for the specified object directory. */
void odb_clear_loose_cache(struct object_directory *odb);

struct packed_git; struct packed_git;
struct multi_pack_index; struct multi_pack_index;
struct cached_object_entry; struct cached_object_entry;
@ -189,9 +179,6 @@ void raw_object_store_clear(struct raw_object_store *o);
*/ */
int odb_mkstemp(struct strbuf *temp_filename, const char *pattern); int odb_mkstemp(struct strbuf *temp_filename, const char *pattern);


void *map_loose_object(struct repository *r, const struct object_id *oid,
unsigned long *size);

void *repo_read_object_file(struct repository *r, void *repo_read_object_file(struct repository *r,
const struct object_id *oid, const struct object_id *oid,
enum object_type *type, enum object_type *type,
@ -200,10 +187,6 @@ void *repo_read_object_file(struct repository *r,
/* Read and unpack an object file into memory, write memory to an object file */ /* Read and unpack an object file into memory, write memory to an object file */
int oid_object_info(struct repository *r, const struct object_id *, unsigned long *); int oid_object_info(struct repository *r, const struct object_id *, unsigned long *);


void hash_object_file(const struct git_hash_algo *algo, const void *buf,
unsigned long len, enum object_type type,
struct object_id *oid);

/* /*
* Add an object file to the in-memory object store, without writing it * Add an object file to the in-memory object store, without writing it
* to disk. * to disk.
@ -340,56 +323,7 @@ static inline void obj_read_unlock(void)
if(obj_read_use_lock) if(obj_read_use_lock)
pthread_mutex_unlock(&obj_read_mutex); pthread_mutex_unlock(&obj_read_mutex);
} }

/* Flags for for_each_*_object(). */
/*
* Iterate over the files in the loose-object parts of the object
* directory "path", triggering the following callbacks:
*
* - loose_object is called for each loose object we find.
*
* - loose_cruft is called for any files that do not appear to be
* loose objects. Note that we only look in the loose object
* directories "objects/[0-9a-f]{2}/", so we will not report
* "objects/foobar" as cruft.
*
* - loose_subdir is called for each top-level hashed subdirectory
* of the object directory (e.g., "$OBJDIR/f0"). It is called
* after the objects in the directory are processed.
*
* Any callback that is NULL will be ignored. Callbacks returning non-zero
* will end the iteration.
*
* In the "buf" variant, "path" is a strbuf which will also be used as a
* scratch buffer, but restored to its original contents before
* the function returns.
*/
typedef int each_loose_object_fn(const struct object_id *oid,
const char *path,
void *data);
typedef int each_loose_cruft_fn(const char *basename,
const char *path,
void *data);
typedef int each_loose_subdir_fn(unsigned int nr,
const char *path,
void *data);
int for_each_file_in_obj_subdir(unsigned int subdir_nr,
struct strbuf *path,
each_loose_object_fn obj_cb,
each_loose_cruft_fn cruft_cb,
each_loose_subdir_fn subdir_cb,
void *data);
int for_each_loose_file_in_objdir(const char *path,
each_loose_object_fn obj_cb,
each_loose_cruft_fn cruft_cb,
each_loose_subdir_fn subdir_cb,
void *data);
int for_each_loose_file_in_objdir_buf(struct strbuf *path,
each_loose_object_fn obj_cb,
each_loose_cruft_fn cruft_cb,
each_loose_subdir_fn subdir_cb,
void *data);

/* Flags for for_each_*_object() below. */
enum for_each_object_flags { enum for_each_object_flags {
/* Iterate only over local objects, not alternates. */ /* Iterate only over local objects, not alternates. */
FOR_EACH_OBJECT_LOCAL_ONLY = (1<<0), FOR_EACH_OBJECT_LOCAL_ONLY = (1<<0),
@ -409,33 +343,6 @@ enum for_each_object_flags {
FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS = (1<<4), FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS = (1<<4),
}; };


/*
* Iterate over all accessible loose objects without respect to
* reachability. By default, this includes both local and alternate objects.
* The order in which objects are visited is unspecified.
*
* Any flags specific to packs are ignored.
*/
int for_each_loose_object(each_loose_object_fn, void *,
enum for_each_object_flags flags);

/*
* Iterate over all accessible packed objects without respect to reachability.
* By default, this includes both local and alternate packs.
*
* Note that some objects may appear twice if they are found in multiple packs.
* Each pack is visited in an unspecified order. By default, objects within a
* pack are visited in pack-idx order (i.e., sorted by oid).
*/
typedef int each_packed_object_fn(const struct object_id *oid,
struct packed_git *pack,
uint32_t pos,
void *data);
int for_each_object_in_pack(struct packed_git *p,
each_packed_object_fn, void *data,
enum for_each_object_flags flags);
int for_each_packed_object(struct repository *repo, each_packed_object_fn cb,
void *data, enum for_each_object_flags flags);


void *read_object_with_reference(struct repository *r, void *read_object_with_reference(struct repository *r,
const struct object_id *oid, const struct object_id *oid,

View File

@ -3,6 +3,7 @@


#include "list.h" #include "list.h"
#include "object.h" #include "object.h"
#include "object-store.h"
#include "oidset.h" #include "oidset.h"


/* in object-store.h */ /* in object-store.h */
@ -117,6 +118,24 @@ void for_each_file_in_pack_dir(const char *objdir,
each_file_in_pack_dir_fn fn, each_file_in_pack_dir_fn fn,
void *data); void *data);


/*
* Iterate over all accessible packed objects without respect to reachability.
* By default, this includes both local and alternate packs.
*
* Note that some objects may appear twice if they are found in multiple packs.
* Each pack is visited in an unspecified order. By default, objects within a
* pack are visited in pack-idx order (i.e., sorted by oid).
*/
typedef int each_packed_object_fn(const struct object_id *oid,
struct packed_git *pack,
uint32_t pos,
void *data);
int for_each_object_in_pack(struct packed_git *p,
each_packed_object_fn, void *data,
enum for_each_object_flags flags);
int for_each_packed_object(struct repository *repo, each_packed_object_fn cb,
void *data, enum for_each_object_flags flags);

/* A hook to report invalid files in pack directory */ /* A hook to report invalid files in pack directory */
#define PACKDIR_FILE_PACK 1 #define PACKDIR_FILE_PACK 1
#define PACKDIR_FILE_IDX 2 #define PACKDIR_FILE_IDX 2

View File

@ -2,7 +2,7 @@


#include "git-compat-util.h" #include "git-compat-util.h"
#include "gettext.h" #include "gettext.h"
#include "object-store.h" #include "object-file.h"
#include "packfile.h" #include "packfile.h"
#include "progress.h" #include "progress.h"
#include "prune-packed.h" #include "prune-packed.h"

View File

@ -14,7 +14,7 @@
#include "list-objects.h" #include "list-objects.h"
#include "packfile.h" #include "packfile.h"
#include "worktree.h" #include "worktree.h"
#include "object-store.h" #include "object-file.h"
#include "pack-bitmap.h" #include "pack-bitmap.h"
#include "pack-mtimes.h" #include "pack-mtimes.h"
#include "config.h" #include "config.h"