denyNonFastForwards & co fail outside refs/<heads,tags>
From: Hallvard B Furuseth <hidden>
Date: 2016-06-15 22:50:55
config options receive.<denyNonFastForward, denyDeletes> do not work in
nonstandard ref namespaces. I stumbled over it in refs/notes/, but the
problem is general. Or if it this intentional, it is the git-config(1)
doc of these options which needs fixing.
Git version 1.7.4.2.
To reproduce:
########################################################################
#!/bin/sh
rm -rf hi ho
git --version
# Create initial repos
git init -q hi
(cd hi
git config receive.denyDeletes true
git config receive.denyNonFastForwards true
echo foo > foo && git add foo && git commit -q -m first foo)
git clone -q hi ho
# Make them diverge, except the checked-out branch
for r in hi ho; do
(cd $r
echo $r >> foo && git commit -q -m next foo
git update-ref refs/outside/test HEAD
git checkout -q -b br HEAD^
# Shut up a bit
git config advice.pushNonFastForward false
git gc --quiet
# For ssh push
git update-server-info)
done
cd ho
# Optional; makes no difference
#git config remote.origin.pushurl localhost:`pwd`/../hi
# Can push test despite 'deny's, fails as expeceted for master:
for b in refs/outside/test refs/heads/master; do
git push -f origin $b:$b
git push -f origin :$b
echo ""
done
# Just to check: Pushing the master normal way fails the same way.
git push -f origin
########################################################################
Output:
git version 1.7.4.2
To /tmp/hi
+ 1bb5836...5bf63f8 refs/outside/test -> refs/outside/test (forced update)
To /tmp/hi
- [deleted] refs/outside/test
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To /tmp/hi
! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to '/tmp/hi'
remote: error: denying ref deletion for refs/heads/master
To /tmp/hi
! [remote rejected] master (deletion prohibited)
error: failed to push some refs to '/tmp/hi'
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To /tmp/hi
! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to '/tmp/hi'
--
Hallvard