summaryrefslogtreecommitdiff
path: root/src/refdb.c
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2013-05-30 03:47:10 +0200
committerVicent Marti <tanoku@gmail.com>2013-05-30 03:47:10 +0200
commit4e6e2ff26f5a04a4628aa0d81e5d5d73acf28ec4 (patch)
tree9a6d20bb0d7e8b390bbb0a5b0a67a493ea778fd6 /src/refdb.c
parentec24e542969f9d49e41e4c2cb3eac2259b1818c2 (diff)
downloadlibgit2-4e6e2ff26f5a04a4628aa0d81e5d5d73acf28ec4.tar.gz
...Aaaand this works
Diffstat (limited to 'src/refdb.c')
-rw-r--r--src/refdb.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/src/refdb.c b/src/refdb.c
index e0701d347..d8daa7773 100644
--- a/src/refdb.c
+++ b/src/refdb.c
@@ -165,14 +165,40 @@ void git_refdb_iterator_free(git_reference_iterator *iter)
iter->free(iter);
}
-int git_refdb_write(git_refdb *db, const git_reference *ref)
+int git_refdb_write(git_refdb *db, git_reference *ref, int force)
{
assert(db && db->backend);
- return db->backend->write(db->backend, ref);
+
+ GIT_REFCOUNT_INC(db);
+ ref->db = db;
+
+ return db->backend->write(db->backend, ref, force);
+}
+
+int git_refdb_rename(
+ git_reference **out,
+ git_refdb *db,
+ const char *old_name,
+ const char *new_name,
+ int force)
+{
+ int error;
+
+ assert(db && db->backend);
+ error = db->backend->rename(out, db->backend, old_name, new_name, force);
+ if (error < 0)
+ return error;
+
+ if (out) {
+ GIT_REFCOUNT_INC(db);
+ (*out)->db = db;
+ }
+
+ return 0;
}
-int git_refdb_delete(struct git_refdb *db, const git_reference *ref)
+int git_refdb_delete(struct git_refdb *db, const char *ref_name)
{
assert(db && db->backend);
- return db->backend->delete(db->backend, ref);
+ return db->backend->delete(db->backend, ref_name);
}