mirror of
https://github.com/git/git.git
synced 2026-02-28 10:47:33 +00:00
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:
committed by
Junio C Hamano
parent
88c2f6bae8
commit
b24837e932
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user