Merge branch 'ak/protect-any-current-branch'
"git fetch" without the "--update-head-ok" option ought to protect a checked out branch from getting updated, to prevent the working tree that checks it out to go out of sync. The code was written before the use of "git worktree" got widespread, and only checked the branch that was checked out in the current worktree, which has been updated. (originally called ak/fetch-not-overwrite-any-current-branch) * ak/protect-any-current-branch: branch: protect branches checked out in all worktrees receive-pack: protect current branch for bare repository worktree receive-pack: clean dead code from update_worktree() fetch: protect branches checked out in all worktrees worktree: simplify find_shared_symref() memory ownership model branch: lowercase error messages receive-pack: lowercase error messages fetch: lowercase error messages
This commit is contained in:
@ -1778,6 +1778,38 @@ test_expect_success 'denyCurrentBranch and worktrees' '
|
||||
test_must_fail git -C cloned push origin HEAD:new-wt &&
|
||||
test_config receive.denyCurrentBranch updateInstead &&
|
||||
git -C cloned push origin HEAD:new-wt &&
|
||||
test_path_exists new-wt/first.t &&
|
||||
test_must_fail git -C cloned push --delete origin new-wt
|
||||
'
|
||||
|
||||
test_expect_success 'denyCurrentBranch and bare repository worktrees' '
|
||||
test_when_finished "rm -fr bare.git" &&
|
||||
git clone --bare . bare.git &&
|
||||
git -C bare.git worktree add wt &&
|
||||
test_commit grape &&
|
||||
git -C bare.git config receive.denyCurrentBranch refuse &&
|
||||
test_must_fail git push bare.git HEAD:wt &&
|
||||
git -C bare.git config receive.denyCurrentBranch updateInstead &&
|
||||
git push bare.git HEAD:wt &&
|
||||
test_path_exists bare.git/wt/grape.t &&
|
||||
test_must_fail git push --delete bare.git wt
|
||||
'
|
||||
|
||||
test_expect_success 'refuse fetch to current branch of worktree' '
|
||||
test_when_finished "git worktree remove --force wt && git branch -D wt" &&
|
||||
git worktree add wt &&
|
||||
test_commit apple &&
|
||||
test_must_fail git fetch . HEAD:wt &&
|
||||
git fetch -u . HEAD:wt
|
||||
'
|
||||
|
||||
test_expect_success 'refuse fetch to current branch of bare repository worktree' '
|
||||
test_when_finished "rm -fr bare.git" &&
|
||||
git clone --bare . bare.git &&
|
||||
git -C bare.git worktree add wt &&
|
||||
test_commit banana &&
|
||||
test_must_fail git -C bare.git fetch .. HEAD:wt &&
|
||||
git -C bare.git fetch -u .. HEAD:wt
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Reference in New Issue
Block a user