| #ifndef ODB_SOURCE_FILES_H | |
| #define ODB_SOURCE_FILES_H | |
| #include "odb/source.h" | |
| struct odb_source_loose; | |
| struct odb_source_packed; | |
| /* | |
| * The files object database source uses a combination of loose objects and | |
| * packfiles. It is the default backend used by Git to store objects. | |
| */ | |
| struct odb_source_files { | |
| struct odb_source base; | |
| struct odb_source_loose *loose; | |
| struct odb_source_packed *packed; | |
| }; | |
| /* Allocate and initialize a new object source. */ | |
| struct odb_source_files *odb_source_files_new(struct object_database *odb, | |
| const char *path, | |
| bool local); | |
| /* | |
| * Optimize the files object database source by repacking loose objects and | |
| * packfiles as needed. Returns 0 on success, a negative error code otherwise. | |
| */ | |
| int odb_source_files_optimize(struct odb_source *source, | |
| const struct odb_optimize_options *opts); | |
| /* | |
| * Check whether optimization of the files object database source is required | |
| * given the provided options. Returns true if optimization should be | |
| * performed, false otherwise. | |
| */ | |
| bool odb_source_files_optimize_required(struct odb_source *source, | |
| const struct odb_optimize_options *opts); | |
| /* | |
| * Cast the given object database source to the files backend. This will cause | |
| * a BUG in case the source doesn't use this backend. | |
| */ | |
| static inline struct odb_source_files *odb_source_files_downcast(struct odb_source *source) | |
| { | |
| if (source->type != ODB_SOURCE_FILES) | |
| BUG("trying to downcast source of type '%s' to '%s'", | |
| odb_source_type_to_name(source->type), | |
| odb_source_type_to_name(ODB_SOURCE_FILES)); | |
| return container_of(source, struct odb_source_files, base); | |
| } | |
| #endif |