odb/source: make free() function pluggable

Introduce a new callback function in `struct odb_source` to make the
function pluggable.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt
2026-02-23 17:17:57 +01:00
committed by Junio C Hamano
parent 88c2f6bae8
commit b24837e932
4 changed files with 11 additions and 9 deletions

View File

@@ -18,10 +18,9 @@ static void odb_source_files_reparent(const char *name UNUSED,
files->base.path = path;
}
void odb_source_files_free(struct odb_source_files *files)
static void odb_source_files_free(struct odb_source *source)
{
if (!files)
return;
struct odb_source_files *files = odb_source_files_downcast(source);
chdir_notify_unregister(NULL, odb_source_files_reparent, files);
odb_source_loose_free(files->loose);
packfile_store_free(files->packed);
@@ -40,6 +39,8 @@ struct odb_source_files *odb_source_files_new(struct object_database *odb,
files->loose = odb_source_loose_new(&files->base);
files->packed = packfile_store_new(&files->base);
files->base.free = odb_source_files_free;
/*
* Ideally, we would only ever store absolute paths in the source. This
* is not (yet) possible though because we access and assume relative

View File

@@ -21,9 +21,6 @@ struct odb_source_files *odb_source_files_new(struct object_database *odb,
const char *path,
bool local);
/* Free the object source and release all associated resources. */
void odb_source_files_free(struct odb_source_files *files);
/*
* Cast the given object database source to the files backend. This will cause
* a BUG in case the source doesn't use this backend.

View File

@@ -25,11 +25,9 @@ void odb_source_init(struct odb_source *source,
void odb_source_free(struct odb_source *source)
{
struct odb_source_files *files;
if (!source)
return;
files = odb_source_files_downcast(source);
odb_source_files_free(files);
source->free(source);
}
void odb_source_release(struct odb_source *source)

View File

@@ -52,6 +52,12 @@ struct odb_source {
* the current working directory.
*/
char *path;
/*
* This callback is expected to free the underlying object database source and
* all associated resources. The function will never be called with a NULL pointer.
*/
void (*free)(struct odb_source *source);
};
/*