mirror of
https://github.com/git/git.git
synced 2026-03-05 06:57:37 +01:00
odb/source: make freshen_object() 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
c8c7337c24
commit
941c1fad13
12
odb.c
12
odb.c
@@ -959,18 +959,10 @@ int odb_freshen_object(struct object_database *odb,
|
||||
const struct object_id *oid)
|
||||
{
|
||||
struct odb_source *source;
|
||||
|
||||
odb_prepare_alternates(odb);
|
||||
for (source = odb->sources; source; source = source->next) {
|
||||
struct odb_source_files *files = odb_source_files_downcast(source);
|
||||
|
||||
if (packfile_store_freshen_object(files->packed, oid))
|
||||
for (source = odb->sources; source; source = source->next)
|
||||
if (odb_source_freshen_object(source, oid))
|
||||
return 1;
|
||||
|
||||
if (odb_source_loose_freshen_object(source, oid))
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -88,6 +88,16 @@ static int odb_source_files_for_each_object(struct odb_source *source,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int odb_source_files_freshen_object(struct odb_source *source,
|
||||
const struct object_id *oid)
|
||||
{
|
||||
struct odb_source_files *files = odb_source_files_downcast(source);
|
||||
if (packfile_store_freshen_object(files->packed, oid) ||
|
||||
odb_source_loose_freshen_object(source, oid))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct odb_source_files *odb_source_files_new(struct object_database *odb,
|
||||
const char *path,
|
||||
bool local)
|
||||
@@ -105,6 +115,7 @@ struct odb_source_files *odb_source_files_new(struct object_database *odb,
|
||||
files->base.read_object_info = odb_source_files_read_object_info;
|
||||
files->base.read_object_stream = odb_source_files_read_object_stream;
|
||||
files->base.for_each_object = odb_source_files_for_each_object;
|
||||
files->base.freshen_object = odb_source_files_freshen_object;
|
||||
|
||||
/*
|
||||
* Ideally, we would only ever store absolute paths in the source. This
|
||||
|
||||
23
odb/source.h
23
odb/source.h
@@ -184,6 +184,18 @@ struct odb_source {
|
||||
odb_for_each_object_cb cb,
|
||||
void *cb_data,
|
||||
unsigned flags);
|
||||
|
||||
/*
|
||||
* This callback is expected to freshen the given object so that its
|
||||
* last access time is set to the current time. This is used to ensure
|
||||
* that objects that are recent will not get garbage collected even if
|
||||
* they were unreachable.
|
||||
*
|
||||
* Returns 0 in case the object does not exist, 1 in case the object
|
||||
* has been freshened.
|
||||
*/
|
||||
int (*freshen_object)(struct odb_source *source,
|
||||
const struct object_id *oid);
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -292,4 +304,15 @@ static inline int odb_source_for_each_object(struct odb_source *source,
|
||||
return source->for_each_object(source, request, cb, cb_data, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Freshen an object in the object database by updating its timestamp.
|
||||
* Returns 1 in case the object has been freshened, 0 in case the object does
|
||||
* not exist.
|
||||
*/
|
||||
static inline int odb_source_freshen_object(struct odb_source *source,
|
||||
const struct object_id *oid)
|
||||
{
|
||||
return source->freshen_object(source, oid);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user