diff options
author | Vicent Marti <tanoku@gmail.com> | 2012-11-28 10:47:10 +0100 |
---|---|---|
committer | Vicent Marti <tanoku@gmail.com> | 2012-11-28 10:47:10 +0100 |
commit | 9507a434c6a1e70ccd8a2678fe35b092105be1db (patch) | |
tree | 73f8b9464e513337589a982ddfa54beb4bd677ea | |
parent | 64c5112188647fcbfbe2bbfb897abfbc21912ba8 (diff) | |
download | libgit2-9507a434c6a1e70ccd8a2678fe35b092105be1db.tar.gz |
odb: Add `git_odb_add_disk_alternate`
Loads a disk alternate by path to the ODB. Mimics the
`GIT_ALTERNATE_OBJECT_DIRECTORIES` shell var.
-rw-r--r-- | include/git2/odb.h | 17 | ||||
-rw-r--r-- | src/odb.c | 8 |
2 files changed, 23 insertions, 2 deletions
diff --git a/include/git2/odb.h b/include/git2/odb.h index f2633d11c..3854fa6f6 100644 --- a/include/git2/odb.h +++ b/include/git2/odb.h @@ -89,6 +89,23 @@ GIT_EXTERN(int) git_odb_add_backend(git_odb *odb, git_odb_backend *backend, int GIT_EXTERN(int) git_odb_add_alternate(git_odb *odb, git_odb_backend *backend, int priority); /** + * Add an on-disk alternate to an existing Object DB. + * + * Note that the added path must point to an `objects`, not + * to a full repository, to use it as an alternate store. + * + * Alternate backends are always checked for objects *after* + * all the main backends have been exhausted. + * + * Writing is disabled on alternate backends. + * + * @param odb database to add the backend to + * @param path path to the objects folder for the alternate + * @return 0 on success; error code otherwise + */ +GIT_EXTERN(int) git_odb_add_disk_alternate(git_odb *odb, const char *path); + +/** * Close an open object database. * * @param db database pointer to close. If NULL no action is taken. @@ -470,6 +470,11 @@ static int load_alternates(git_odb *odb, const char *objects_dir, int alternate_ return result; } +int git_odb_add_disk_alternate(git_odb *odb, const char *path) +{ + return add_default_backends(odb, path, 1, 0); +} + int git_odb_open(git_odb **out, const char *objects_dir) { git_odb *db; @@ -481,8 +486,7 @@ int git_odb_open(git_odb **out, const char *objects_dir) if (git_odb_new(&db) < 0) return -1; - if (add_default_backends(db, objects_dir, 0, 0) < 0) - { + if (add_default_backends(db, objects_dir, 0, 0) < 0) { git_odb_free(db); return -1; } |