refs: on symref reflog expire, lock symref not referrent
When locking a symbolic ref to expire a reflog, lock the symbolic ref (using REF_NODEREF) instead of its referent. Add a test for this. Signed-off-by: David Turner <dturner@twopensource.com> Reviewed-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
2d0663b216
commit
41d796ed5c
@ -3314,7 +3314,8 @@ int reflog_expire(const char *refname, const unsigned char *sha1,
|
|||||||
* reference itself, plus we might need to update the
|
* reference itself, plus we might need to update the
|
||||||
* reference if --updateref was specified:
|
* reference if --updateref was specified:
|
||||||
*/
|
*/
|
||||||
lock = lock_ref_sha1_basic(refname, sha1, NULL, NULL, 0, &type, &err);
|
lock = lock_ref_sha1_basic(refname, sha1, NULL, NULL, REF_NODEREF,
|
||||||
|
&type, &err);
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
error("cannot lock ref '%s': %s", refname, err.buf);
|
error("cannot lock ref '%s': %s", refname, err.buf);
|
||||||
strbuf_release(&err);
|
strbuf_release(&err);
|
||||||
|
@ -338,4 +338,14 @@ test_expect_failure 'reflog with non-commit entries displays all entries' '
|
|||||||
test_line_count = 3 actual
|
test_line_count = 3 actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'reflog expire operates on symref not referrent' '
|
||||||
|
git branch -l the_symref &&
|
||||||
|
git branch -l referrent &&
|
||||||
|
git update-ref referrent HEAD &&
|
||||||
|
git symbolic-ref refs/heads/the_symref refs/heads/referrent &&
|
||||||
|
test_when_finished "rm -f .git/refs/heads/referrent.lock" &&
|
||||||
|
touch .git/refs/heads/referrent.lock &&
|
||||||
|
git reflog expire --expire=all the_symref
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user