diff options
Diffstat (limited to 'src/backends/sqlite.c')
-rw-r--r-- | src/backends/sqlite.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/backends/sqlite.c b/src/backends/sqlite.c index abf14f180..c9c3b8049 100644 --- a/src/backends/sqlite.c +++ b/src/backends/sqlite.c @@ -103,6 +103,21 @@ int sqlite_backend__read(void **data_p, size_t *len_p, git_otype *type_p, git_od return error == GIT_SUCCESS ? GIT_SUCCESS : git__rethrow(error, "SQLite backend: Failed to read"); } +int sqlite_backend__read_unique_short_oid(git_oid *out_oid, void **data_p, size_t *len_p, git_otype *type_p, git_odb_backend *_backend, + const git_oid *short_oid, unsigned int len) { + if (len >= GIT_OID_HEXSZ) { + /* Just match the full identifier */ + int error = sqlite_backend__read(data_p, len_p, type_p, _backend, short_oid); + if (error == GIT_SUCCESS) + git_oid_cpy(out_oid, short_oid); + + return error; + } else if (len < GIT_OID_HEXSZ) { + /* TODO */ + return git__throw(GIT_ENOTIMPLEMENTED, "Sqlite backend cannot search objects from short oid"); + } +} + int sqlite_backend__exists(git_odb_backend *_backend, const git_oid *oid) { sqlite_backend *backend; @@ -255,6 +270,7 @@ int git_odb_backend_sqlite(git_odb_backend **backend_out, const char *sqlite_db) goto cleanup; backend->parent.read = &sqlite_backend__read; + backend->parent.read_unique_short_oid = &sqlite_backend__read_unique_short_oid; backend->parent.read_header = &sqlite_backend__read_header; backend->parent.write = &sqlite_backend__write; backend->parent.exists = &sqlite_backend__exists; |