summaryrefslogtreecommitdiff
path: root/src/refs.c
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2014-02-05 11:21:14 +0100
committerCarlos Martín Nieto <cmn@dwim.me>2014-02-05 12:07:57 +0100
commitf44fd59ed7b3533bf9cbaa07969a8a57475a77aa (patch)
tree4189d1d8a06d04950c92144d8fd4e0eb07dec915 /src/refs.c
parent7ee8c7e6776a3c5b3a45cfd10ccf205eebb3f3fe (diff)
downloadlibgit2-f44fd59ed7b3533bf9cbaa07969a8a57475a77aa.tar.gz
refs: check the ref's old value when deleting
Recognize when the reference has changed since we loaded it.
Diffstat (limited to 'src/refs.c')
-rw-r--r--src/refs.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/refs.c b/src/refs.c
index f45c64246..90340d09c 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -116,7 +116,15 @@ void git_reference_free(git_reference *reference)
int git_reference_delete(git_reference *ref)
{
- return git_refdb_delete(ref->db, ref->name, NULL, NULL);
+ const git_oid *old_id = NULL;
+ const char *old_target = NULL;
+
+ if (ref->type == GIT_REF_OID)
+ old_id = &ref->target.oid;
+ else
+ old_target = ref->target.symbolic;
+
+ return git_refdb_delete(ref->db, ref->name, old_id, old_target);
}
int git_reference_lookup(git_reference **ref_out,