git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Hariom Verma via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Hariom Verma <hariom18599@gmail.com>
Subject: [PATCH v3 0/3] [GSoC] receive.denyCurrentBranch: respect all worktrees
Date: Sun, 23 Feb 2020 18:57:07 +0000	[thread overview]
Message-ID: <pull.535.v3.git.1582484231.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.535.v2.git.1582410908.gitgitgadget@gmail.com>

The receive.denyCurrentBranch config option controls what happens if you
push to a branch that is checkout into a non-bare repository. By default, it
rejects it. It can be disabled via ignore or warn. Another yet trickier
option is updateInstead.

When receive.denyCurrentBranch is set to updateInstead, a push that tries to
update the branch that is currently checked out is accepted only when the
index and the working tree exactly matches the currently checked out commit,
in which case the index and the working tree are updated to match the pushed
commit. Otherwise, the push is refused.

However, this setting was forgotten when the git worktree command was
introduced: only the main worktree's current branch is respected. [ fixes:
#331 ]

Incidently, this change also fixes another bug i.e. 
receive.denyCurrentBranch = true was ignored when pushing into a non-bare
repository using ref namespaces.

Thanks, @dscho for helping me out.

Regards, Hariom

Hariom Verma (3):
  get_main_worktree(): allow it to be called in the Git directory
  t5509: use a bare repository for test push target
  receive.denyCurrentBranch: respect all worktrees

 builtin/receive-pack.c           | 37 +++++++++++++++++---------------
 t/t5509-fetch-push-namespaces.sh | 13 ++++++++++-
 t/t5516-fetch-push.sh            | 11 ++++++++++
 worktree.c                       |  1 +
 4 files changed, 44 insertions(+), 18 deletions(-)


base-commit: 232378479ee6c66206d47a9be175e3a39682aea6
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-535%2Fharry-hov%2Fdeny-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-535/harry-hov/deny-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/535

Range-diff vs v2:

 1:  8718facbc95 = 1:  8718facbc95 get_main_worktree(): allow it to be called in the Git directory
 2:  5c749e044a3 ! 2:  ae749310f06 t5509: initialized `pushee` as bare repository
     @@ -1,6 +1,6 @@
      Author: Hariom Verma <hariom18599@gmail.com>
      
     -    t5509: initialized `pushee` as bare repository
     +    t5509: use a bare repository for test push target
      
          `receive.denyCurrentBranch` currently has a bug where it allows pushing
          into non-bare repository using namespaces as long as it does not have any
 3:  b3e573d44a9 < -:  ----------- bug: denyCurrentBranch and unborn branch with ref namespace
 4:  61e5f75a6f9 ! 3:  d21a590d6c2 receive.denyCurrentBranch: respect all worktrees
     @@ -134,11 +134,18 @@
       	test_cmp expect actual
       '
       
     --test_expect_failure 'denyCurrentBranch and unborn branch with ref namespace' '
      +test_expect_success 'denyCurrentBranch and unborn branch with ref namespace' '
     - 	cd original &&
     - 	git init unborn &&
     - 	git remote add unborn-namespaced "ext::git --namespace=namespace %s unborn" &&
     ++	(
     ++		cd original &&
     ++		git init unborn &&
     ++		git remote add unborn-namespaced "ext::git --namespace=namespace %s unborn" &&
     ++		test_must_fail git push unborn-namespaced HEAD:master &&
     ++		git -C unborn config receive.denyCurrentBranch updateInstead &&
     ++		git push unborn-namespaced HEAD:master
     ++	)
     ++'
     ++
     + test_done
      
       diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
       --- a/t/t5516-fetch-push.sh

-- 
gitgitgadget

  parent reply	other threads:[~2020-02-23 18:57 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-13 18:59 [PATCH 0/3] [GSoC] receive.denyCurrentBranch: respect all worktrees Hariom Verma via GitGitGadget
2020-02-13 18:59 ` [PATCH 1/3] get_main_worktree(): allow it to be called in the Git directory Hariom Verma via GitGitGadget
2020-02-13 18:59 ` [PATCH 2/3] t5509: initialized `pushee` as bare repository Hariom Verma via GitGitGadget
2020-02-13 20:14   ` Junio C Hamano
2020-02-13 20:34     ` Junio C Hamano
2020-02-14 11:59     ` Johannes Schindelin
2020-02-14 15:03       ` Junio C Hamano
2020-02-15 21:52         ` Hariom verma
2020-02-16 23:49           ` Junio C Hamano
2020-02-22 22:54             ` Hariom verma
2020-02-13 18:59 ` [PATCH 3/3] receive.denyCurrentBranch: respect all worktrees Hariom Verma via GitGitGadget
2020-02-22 22:35 ` [PATCH v2 0/4] [GSoC] " Hariom Verma via GitGitGadget
2020-02-22 22:35   ` [PATCH v2 1/4] get_main_worktree(): allow it to be called in the Git directory Hariom Verma via GitGitGadget
2020-02-22 22:35   ` [PATCH v2 2/4] t5509: initialized `pushee` as bare repository Hariom Verma via GitGitGadget
2020-02-23  6:24     ` Junio C Hamano
2020-02-22 22:35   ` [PATCH v2 3/4] bug: denyCurrentBranch and unborn branch with ref namespace Hariom Verma via GitGitGadget
2020-02-23  6:10     ` Junio C Hamano
2020-02-22 22:35   ` [PATCH v2 4/4] receive.denyCurrentBranch: respect all worktrees Hariom Verma via GitGitGadget
2020-02-23  6:18     ` Junio C Hamano
2020-02-23 18:57   ` Hariom Verma via GitGitGadget [this message]
2020-02-23 18:57     ` [PATCH v3 1/3] get_main_worktree(): allow it to be called in the Git directory Hariom Verma via GitGitGadget
2020-02-24  1:42       ` Eric Sunshine
2020-02-24 11:09         ` Hariom verma
2020-02-24 17:00           ` Eric Sunshine
2020-02-24 18:58           ` Johannes Schindelin
2020-02-24 22:27             ` Eric Sunshine
2020-02-27 15:58               ` Johannes Schindelin
2020-02-24 19:13           ` Junio C Hamano
2020-02-23 18:57     ` [PATCH v3 2/3] t5509: use a bare repository for test push target Hariom Verma via GitGitGadget
2020-02-23 18:57     ` [PATCH v3 3/3] receive.denyCurrentBranch: respect all worktrees Hariom Verma via GitGitGadget

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=pull.535.v3.git.1582484231.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=hariom18599@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).