All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Karthik Nayak <karthik.188@gmail.com>
Cc: git@vger.kernel.org,  jltobler@gmail.com,  ps@pks.im
Subject: Re: [PATCH v6 3/3] fetch: fix failed batched updates skipping operations
Date: Tue, 18 Nov 2025 10:03:17 -0800	[thread overview]
Message-ID: <xmqqv7j7dxqy.fsf@gitster.g> (raw)
In-Reply-To: <20251118-fix-tags-not-fetching-v6-3-2a2f15fc137e@gmail.com> (Karthik Nayak's message of "Tue, 18 Nov 2025 12:27:57 +0100")

Karthik Nayak <karthik.188@gmail.com> writes:

> Fix a regression introduced with batched updates in 0e358de64a (fetch:
> use batched reference updates, 2025-05-19) when fetching references. In
> the `do_fetch()` function, we jump to cleanup if committing the
> transaction fails, regardless of whether using batched or atomic
> updates. This skips three subsequent operations:
>
>   - Update 'FETCH_HEAD' as part of `commit_fetch_head()`.
>
>   - Add upstream tracking information via `set_upstream()`.
>
>   - Setting remote 'HEAD' values when `do_set_head` is true.
>
> For atomic updates, this is expected behavior. For batched updates,
> we want to continue with these operations even if some refs fail to
> update.
>
> Skipping `commit_fetch_head()` isn't actually a regression because
> 'FETCH_HEAD' is already updated via `append_fetch_head()` when not
> using '--atomic'. However, we add a test to validate this behavior.
>
> Skipping the other two operations (upstream tracking and remote HEAD)
> is a regression. Fix this by only jumping to cleanup when using
> '--atomic', allowing batched updates to continue with post-fetch
> operations. Add tests to prevent future regressions.

Other than the usual "unless you care about timestamps, do not use
'touch' only to create a file" applies, but other than that the
added tests look quite sensible.

About the second new test piece, it is a bit surprising that we
didn't have test for --set-upstream on successful fetch.  It does
not need REFFILES prerequisite, does it?

Thanks.

> diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
> index 4b113d7c27..f5c87d81fe 100755
> --- a/t/t5510-fetch.sh
> +++ b/t/t5510-fetch.sh
> @@ -1639,6 +1639,93 @@ test_expect_success "backfill tags when providing a refspec" '
>  	test_cmp expect actual
>  '
>  
> +test_expect_success REFFILES "FETCH_HEAD is updated even if ref updates fail" '
> +	test_when_finished rm -rf base repo &&
> +
> +	git init base &&
> +	(
> +		cd base &&
> +		test_commit "updated" &&
> +
> +		git update-ref refs/heads/foo @ &&
> +		git update-ref refs/heads/branch @
> +	) &&
> +
> +	git init --bare repo &&
> +	(
> +		cd repo &&
> +		! test -f FETCH_HEAD &&
> +		git remote add origin ../base &&
> +		touch refs/heads/foo.lock &&
> +		test_must_fail git fetch -f origin "refs/heads/*:refs/heads/*" 2>err &&
> +		test_grep "error: fetching ref refs/heads/foo failed: reference already exists" err &&
> +		test -f FETCH_HEAD
> +	)
> +'
> +
> +test_expect_success REFFILES "upstream tracking info is added with --set-upstream" '
> +	test_when_finished rm -rf base repo &&
> +
> +	git init --initial-branch=main base &&
> +	test_commit -C base "updated" &&
> +
> +	git init --bare --initial-branch=main repo &&
> +	(
> +		cd repo &&
> +		git remote add origin ../base &&
> +		git fetch origin --set-upstream main &&
> +		git config get branch.main.remote >actual &&
> +		echo "origin" >expect &&
> +		test_cmp expect actual
> +	)
> +'
> +
> +test_expect_success REFFILES "upstream tracking info is added even with conflicts" '
> +	test_when_finished rm -rf base repo &&
> +
> +	git init --initial-branch=main base &&
> +	test_commit -C base "updated" &&
> +
> +	git init --bare --initial-branch=main repo &&
> +	(
> +		cd repo &&
> +		git remote add origin ../base &&
> +		test_must_fail git config get branch.main.remote &&
> +
> +		mkdir -p refs/remotes/origin &&
> +		touch refs/remotes/origin/main.lock &&
> +		test_must_fail git fetch origin --set-upstream main &&
> +		git config get branch.main.remote >actual &&
> +		echo "origin" >expect &&
> +		test_cmp expect actual
> +	)
> +'
> +
> +test_expect_success REFFILES "HEAD is updated even with conflicts" '
> +	test_when_finished rm -rf base repo &&
> +
> +	git init base &&
> +	(
> +		cd base &&
> +		test_commit "updated" &&
> +
> +		git update-ref refs/heads/foo @ &&
> +		git update-ref refs/heads/branch @
> +	) &&
> +
> +	git init --bare repo &&
> +	(
> +		cd repo &&
> +		git remote add origin ../base &&
> +
> +		! test -f refs/remotes/origin/HEAD &&
> +		mkdir -p refs/remotes/origin &&
> +		touch refs/remotes/origin/branch.lock &&
> +		test_must_fail git fetch origin &&
> +		test -f refs/remotes/origin/HEAD
> +	)
> +'
> +
>  . "$TEST_DIRECTORY"/lib-httpd.sh
>  start_httpd

  reply	other threads:[~2025-11-18 18:03 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-03 13:49 [PATCH] fetch: fix non-conflicting tags not being committed Karthik Nayak
2025-11-03 17:53 ` Eric Sunshine
2025-11-03 21:22   ` Karthik Nayak
2025-11-03 20:52 ` Justin Tobler
2025-11-06  8:39 ` [PATCH v2] " Karthik Nayak
2025-11-06 11:50   ` Patrick Steinhardt
2025-11-06 18:56     ` Junio C Hamano
2025-11-07 13:15     ` Karthik Nayak
2025-11-07 14:07       ` Patrick Steinhardt
2025-11-07 15:13         ` Karthik Nayak
2025-11-06 22:10   ` Justin Tobler
2025-11-07 14:01     ` Karthik Nayak
2025-11-08 21:34 ` [PATCH v3 0/2] " Karthik Nayak
2025-11-08 21:34   ` [PATCH v3 1/2] fetch: extract out reference committing logic Karthik Nayak
2025-11-10  7:34     ` Patrick Steinhardt
2025-11-10 13:11       ` Karthik Nayak
2025-11-08 21:34   ` [PATCH v3 2/2] fetch: fix non-conflicting tags not being committed Karthik Nayak
2025-11-10  7:34     ` Patrick Steinhardt
2025-11-10 13:23       ` Karthik Nayak
2025-11-11 13:27 ` [PATCH v4 0/2] " Karthik Nayak
2025-11-11 13:27   ` [PATCH v4 1/2] fetch: extract out reference committing logic Karthik Nayak
2025-11-11 13:27   ` [PATCH v4 2/2] fetch: fix non-conflicting tags not being committed Karthik Nayak
2025-11-12  6:16     ` Patrick Steinhardt
2025-11-12  8:52       ` Karthik Nayak
2025-11-12 16:34         ` Junio C Hamano
2025-11-13 13:38 ` [PATCH v5 0/2] " Karthik Nayak
2025-11-13 13:38   ` [PATCH v5 1/2] fetch: extract out reference committing logic Karthik Nayak
2025-11-13 13:38   ` [PATCH v5 2/2] fetch: fix non-conflicting tags not being committed Karthik Nayak
2025-11-13 21:23     ` Junio C Hamano
2025-11-15 22:16       ` Karthik Nayak
2025-11-17  0:02         ` Junio C Hamano
2025-11-17 15:38           ` Karthik Nayak
2025-11-18 11:27 ` [PATCH v6 0/3] " Karthik Nayak
2025-11-18 11:27   ` [PATCH v6 1/3] fetch: extract out reference committing logic Karthik Nayak
2025-11-18 11:27   ` [PATCH v6 2/3] fetch: fix non-conflicting tags not being committed Karthik Nayak
2025-11-18 11:27   ` [PATCH v6 3/3] fetch: fix failed batched updates skipping operations Karthik Nayak
2025-11-18 18:03     ` Junio C Hamano [this message]
2025-11-19  8:59       ` Karthik Nayak
2025-11-19 21:46 ` [PATCH v7 0/3] fetch: fix non-conflicting tags not being committed Karthik Nayak
2025-11-19 21:46   ` [PATCH v7 1/3] fetch: extract out reference committing logic Karthik Nayak
2025-11-19 21:46   ` [PATCH v7 2/3] fetch: fix non-conflicting tags not being committed Karthik Nayak
2025-11-19 21:46   ` [PATCH v7 3/3] fetch: fix failed batched updates skipping operations Karthik Nayak
2025-11-19 22:20     ` Eric Sunshine
2025-11-19 23:08       ` Junio C Hamano
2025-11-21 11:00         ` Karthik Nayak
2025-11-21 11:13 ` [PATCH v8 0/3] fetch: fix non-conflicting tags not being committed Karthik Nayak
2025-11-21 11:13   ` [PATCH v8 1/3] fetch: extract out reference committing logic Karthik Nayak
2025-11-21 11:13   ` [PATCH v8 2/3] fetch: fix non-conflicting tags not being committed Karthik Nayak
2025-12-01 12:58     ` Patrick Steinhardt
2025-12-02 22:26       ` Karthik Nayak
2025-11-21 11:13   ` [PATCH v8 3/3] fetch: fix failed batched updates skipping operations Karthik Nayak
2025-12-01 12:58     ` Patrick Steinhardt
2025-12-02 22:35       ` Karthik Nayak
2025-11-21 19:58   ` [PATCH v8 0/3] fetch: fix non-conflicting tags not being committed Junio C Hamano

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=xmqqv7j7dxqy.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=jltobler@gmail.com \
    --cc=karthik.188@gmail.com \
    --cc=ps@pks.im \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.