| #ifndef ODB_SOURCE_FILES_H |
| #define ODB_SOURCE_FILES_H |
| |
| #include "odb/source.h" |
| |
| struct odb_source_loose; |
| struct packfile_store; |
| |
| /* |
| * 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 packfile_store *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); |
| |
| /* |
| * 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 '%d' to files", source->type); |
| return container_of(source, struct odb_source_files, base); |
| } |
| |
| #endif |