diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2014-02-05 11:21:14 +0100 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2014-02-05 12:07:57 +0100 |
commit | f44fd59ed7b3533bf9cbaa07969a8a57475a77aa (patch) | |
tree | 4189d1d8a06d04950c92144d8fd4e0eb07dec915 /src/refs.c | |
parent | 7ee8c7e6776a3c5b3a45cfd10ccf205eebb3f3fe (diff) | |
download | libgit2-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.c | 10 |
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, |