git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Phillip Wood <phillip.wood123@gmail.com>
To: Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>,
	git@vger.kernel.org
Cc: gitster@pobox.com, johannes.schindelin@gmx.de, me@ttaylorr.com,
	"Jeff Hostetler" <git@jeffhostetler.com>,
	"Elijah Newren" <newren@gmail.com>,
	"Derrick Stolee" <derrickstolee@github.com>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: Re: [PATCH 3/4] fetch: use new branch_checked_out() and add tests
Date: Tue, 14 Jun 2022 11:10:59 +0100	[thread overview]
Message-ID: <5137243d-ff20-e184-493b-29af64c408d9@gmail.com> (raw)
In-Reply-To: <4540dbeed385341f8c5b45134e1a65dc48c75b0c.1654718942.git.gitgitgadget@gmail.com>

Hi Stolee

On 08/06/2022 21:09, Derrick Stolee via GitGitGadget wrote:
> From: Derrick Stolee <derrickstolee@github.com>
> [...]

> diff --git a/builtin/fetch.c b/builtin/fetch.c
> index ac29c2b1ae3..1ba56240312 100644
> --- a/builtin/fetch.c
> +++ b/builtin/fetch.c
> @@ -885,7 +885,7 @@ static int update_local_ref(struct ref *ref,
>   			    struct worktree **worktrees)
>   {
>   	struct commit *current = NULL, *updated;
> -	const struct worktree *wt;
> +	char *path = NULL;
>   	const char *pretty_ref = prettify_refname(ref->name);
>   	int fast_forward = 0;
>   
> @@ -900,17 +900,17 @@ static int update_local_ref(struct ref *ref,
>   	}
>   
>   	if (!update_head_ok &&
> -	    (wt = find_shared_symref(worktrees, "HEAD", ref->name)) &&
> -	    !wt->is_bare && !is_null_oid(&ref->old_oid)) {
> +	    !is_null_oid(&ref->old_oid) &&
> +	    branch_checked_out(ref->name, &path)) {
>   		/*
>   		 * If this is the head, and it's not okay to update
>   		 * the head, and the old value of the head isn't empty...
>   		 */
>   		format_display(display, '!', _("[rejected]"),
> -			       wt->is_current ?
> -				       _("can't fetch in current branch") :
> -				       _("checked out in another worktree"),
> +			       path ? _("can't fetch in current branch") :
> +				      _("checked out in another worktree"),

I'm confused by this, isn't path always non-null?

Best Wishes

Phillip

>   			       remote, pretty_ref, summary_width);
> +		free(path);
>   		return 1;
>   	}
>   
> @@ -1434,19 +1434,16 @@ cleanup:
>   	return result;
>   }
>   
> -static void check_not_current_branch(struct ref *ref_map,
> -				     struct worktree **worktrees)
> +static void check_not_current_branch(struct ref *ref_map)
>   {
> -	const struct worktree *wt;
> +	char *path;
>   	for (; ref_map; ref_map = ref_map->next)
>   		if (ref_map->peer_ref &&
>   		    starts_with(ref_map->peer_ref->name, "refs/heads/") &&
> -		    (wt = find_shared_symref(worktrees, "HEAD",
> -					     ref_map->peer_ref->name)) &&
> -		    !wt->is_bare)
> +		    branch_checked_out(ref_map->peer_ref->name, &path))
>   			die(_("refusing to fetch into branch '%s' "
>   			      "checked out at '%s'"),
> -			    ref_map->peer_ref->name, wt->path);
> +			    ref_map->peer_ref->name, path);
>   }
>   
>   static int truncate_fetch_head(void)
> @@ -1650,7 +1647,7 @@ static int do_fetch(struct transport *transport,
>   	ref_map = get_ref_map(transport->remote, remote_refs, rs,
>   			      tags, &autotags);
>   	if (!update_head_ok)
> -		check_not_current_branch(ref_map, worktrees);
> +		check_not_current_branch(ref_map);
>   
>   	retcode = open_fetch_head(&fetch_head);
>   	if (retcode)
> diff --git a/t/t2407-worktree-heads.sh b/t/t2407-worktree-heads.sh
> index 12faca7f655..f3f8b0b2b79 100755
> --- a/t/t2407-worktree-heads.sh
> +++ b/t/t2407-worktree-heads.sh
> @@ -10,6 +10,15 @@ test_expect_success 'setup' '
>   		test_commit $i &&
>   		git branch wt-$i &&
>   		git worktree add wt-$i wt-$i || return 1
> +	done &&
> +
> +	# Create a server that updates each branch by one commit
> +	git clone . server &&
> +	git remote add server ./server &&
> +	for i in 1 2 3 4
> +	do
> +		git -C server checkout wt-$i &&
> +		test_commit -C server A-$i || return 1
>   	done
>   '
>   
> @@ -21,6 +30,16 @@ test_expect_success 'refuse to overwrite: checked out in worktree' '
>   	done
>   '
>   
> +test_expect_success 'refuse to overwrite during fetch' '
> +	test_must_fail git fetch server +refs/heads/wt-3:refs/heads/wt-3 2>err &&
> +	grep "refusing to fetch into branch '\''refs/heads/wt-3'\''" err &&
> +
> +	# General fetch into refs/heads/ will fail on first ref,
> +	# so use a generic error message check.
> +	test_must_fail git fetch server +refs/heads/*:refs/heads/* 2>err &&
> +	grep "refusing to fetch into branch" err
> +'
> +
>   test_expect_success 'refuse to overwrite: worktree in bisect' '
>   	test_when_finished test_might_fail git -C wt-4 bisect reset &&
>   
> @@ -31,7 +50,10 @@ test_expect_success 'refuse to overwrite: worktree in bisect' '
>   	) &&
>   
>   	test_must_fail git branch -f wt-4 HEAD 2>err &&
> -	grep "cannot force update the branch '\''wt-4'\'' checked out at" err
> +	grep "cannot force update the branch '\''wt-4'\'' checked out at" err &&
> +
> +	test_must_fail git fetch server +refs/heads/wt-4:refs/heads/wt-4 2>err &&
> +	grep "refusing to fetch into branch '\''refs/heads/wt-4'\''" err
>   '
>   
>   . "$TEST_DIRECTORY"/lib-rebase.sh
> @@ -47,7 +69,10 @@ test_expect_success 'refuse to overwrite: worktree in rebase' '
>   	) &&
>   
>   	test_must_fail git branch -f wt-4 HEAD 2>err &&
> -	grep "cannot force update the branch '\''wt-4'\'' checked out at" err
> +	grep "cannot force update the branch '\''wt-4'\'' checked out at" err &&
> +
> +	test_must_fail git fetch server +refs/heads/wt-4:refs/heads/wt-4 2>err &&
> +	grep "refusing to fetch into branch '\''refs/heads/wt-4'\''" err
>   '
>   
>   test_done


  parent reply	other threads:[~2022-06-14 10:11 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-08 20:08 [PATCH 0/4] Create branch_checked_out() helper Derrick Stolee via GitGitGadget
2022-06-08 20:08 ` [PATCH 1/4] branch: add " Derrick Stolee via GitGitGadget
2022-06-09 23:47   ` Junio C Hamano
2022-06-13 23:59   ` Ævar Arnfjörð Bjarmason
2022-06-14 13:32     ` Derrick Stolee
2022-06-14 15:24       ` Ævar Arnfjörð Bjarmason
2022-06-14 10:09   ` Phillip Wood
2022-06-14 11:22     ` Phillip Wood
2022-06-14 13:48     ` Derrick Stolee
2022-06-08 20:09 ` [PATCH 2/4] branch: check for bisects and rebases Derrick Stolee via GitGitGadget
2022-06-08 22:03   ` Junio C Hamano
2022-06-08 20:09 ` [PATCH 3/4] fetch: use new branch_checked_out() and add tests Derrick Stolee via GitGitGadget
2022-06-14  0:05   ` Ævar Arnfjörð Bjarmason
2022-06-14 10:10   ` Phillip Wood [this message]
2022-06-14 14:06     ` Derrick Stolee
2022-06-08 20:09 ` [PATCH 4/4] branch: use branch_checked_out() when deleting refs Derrick Stolee via GitGitGadget
2022-06-13 14:59 ` [PATCH 5/5] branch: fix branch_checked_out() leaks Derrick Stolee
2022-06-13 23:03   ` Junio C Hamano
2022-06-14  0:33   ` Ævar Arnfjörð Bjarmason
2022-06-14 15:37     ` Derrick Stolee
2022-06-14 16:43       ` Ævar Arnfjörð Bjarmason
2022-06-14 19:27 ` [PATCH v2 0/5] Create branch_checked_out() helper Derrick Stolee via GitGitGadget
2022-06-14 19:27   ` [PATCH v2 1/5] branch: add " Derrick Stolee via GitGitGadget
2022-06-14 19:27   ` [PATCH v2 2/5] branch: check for bisects and rebases Derrick Stolee via GitGitGadget
2022-06-14 19:27   ` [PATCH v2 3/5] fetch: use new branch_checked_out() and add tests Derrick Stolee via GitGitGadget
2022-06-14 19:27   ` [PATCH v2 4/5] branch: use branch_checked_out() when deleting refs Derrick Stolee via GitGitGadget
2022-06-14 19:27   ` [PATCH v2 5/5] branch: fix branch_checked_out() leaks Derrick Stolee via GitGitGadget
2022-06-19 13:58   ` [PATCH v2 0/5] Create branch_checked_out() helper Phillip Wood

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

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

  git send-email \
    --in-reply-to=5137243d-ff20-e184-493b-29af64c408d9@gmail.com \
    --to=phillip.wood123@gmail.com \
    --cc=avarab@gmail.com \
    --cc=derrickstolee@github.com \
    --cc=git@jeffhostetler.com \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=gitster@pobox.com \
    --cc=johannes.schindelin@gmx.de \
    --cc=me@ttaylorr.com \
    --cc=newren@gmail.com \
    --cc=phillip.wood@dunelm.org.uk \
    /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.
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 NNTP newsgroup(s).