git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: Ivan Tse via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Ivan Tse <ivan.tse1@gmail.com>
Subject: Re: [PATCH v2] refs: return conflict error when checking packed refs
Date: Fri, 3 May 2024 08:38:23 +0200	[thread overview]
Message-ID: <ZjSGX1eK-kSFKK1u@tanuki> (raw)
In-Reply-To: <pull.1716.v2.git.git.1714711829698.gitgitgadget@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3285 bytes --]

On Fri, May 03, 2024 at 04:50:29AM +0000, Ivan Tse via GitGitGadget wrote:
> From: Ivan Tse <ivan.tse1@gmail.com>
> 
> The TRANSACTION_NAME_CONFLICT error code refers to a failure to create a
> ref due to a name conflict with another ref. An example of this is a
> directory/file conflict such as ref names A/B and A.
> 
> "git fetch" uses this error code to more accurately describe the error
> by recommending to the user that they try running "git remote prune" to
> remove any old refs that are deleted by the remote which would clear up
> any directory/file conflicts.
> 
> This helpful error message is not displayed when the conflicted ref is
> stored in packed refs. This change fixes this by ensuring error return
> code consistency in `lock_raw_ref`.
> 
> Signed-off-by: Ivan Tse <ivan.tse1@gmail.com>
> ---
>     refs: return conflict error when checking packed refs
>     
>     Changes against v1:
>     
>      * added test for the error message during git fetch
>     
>     Thanks for reviewing! I've gone ahead and attempted to add tests for
>     this behavior. It tests that the error message is shown for both cases
>     when the ref is stored as loose vs packed-refs. How does this test look?
>     Also, should this test have a REFFILES prerequisite?

There is no need for the REFFILES prerequisite as you never access refs
on disk directly, but instead use our plumbing commands. Furthermore, we
do want to verify that both backends behave the same here. If the test
failed with the "reftable" backend I'd consider that to be a bug in the
backend.

[snip]
> diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
> index 33d34d5ae9e..ae0828e26a1 100755
> --- a/t/t5510-fetch.sh
> +++ b/t/t5510-fetch.sh
> @@ -1091,6 +1091,22 @@ test_expect_success 'branchname D/F conflict resolved by --prune' '
>  	test_cmp expect actual
>  '
>  
> +test_expect_success 'branchname D/F conflict rejected with targeted error message' '
> +	git clone . df-conflict-error &&
> +	git branch dir_conflict &&
> +	(
> +		cd df-conflict-error &&
> +		git update-ref refs/remotes/origin/dir_conflict/file HEAD &&
> +		test_must_fail git fetch 2>../err &&
> +		git pack-refs --all &&
> +		test_must_fail git fetch 2>../err-packed
> +	) &&
> +	test_grep "error: some local refs could not be updated; try running" err &&
> +	test_grep " '\''git remote prune origin'\'' to remove any old, conflicting branches" err &&
> +	test_grep "error: some local refs could not be updated; try running" err-packed &&
> +	test_grep " '\''git remote prune origin'\'' to remove any old, conflicting branches" err-packed

I would personally add those calls to `test_grep` right after the
respective fetches to make the test a bit easier to follow.

Also, instead of using '\''`, you can use the "${SQ}" variable to insert
single quotes. So, something like this:

    test_grep " ${SQ}git remote prune origin${SQ} to remove any old, conflicting branches" err &&

Other than that this patch looks good to me, thanks!

Patrick

> +'
> +
>  test_expect_success 'fetching a one-level ref works' '
>  	test_commit extra &&
>  	git reset --hard HEAD^ &&
> 
> base-commit: d4cc1ec35f3bcce816b69986ca41943f6ce21377
> -- 
> gitgitgadget
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2024-05-03  6:38 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-30 14:50 [PATCH] refs: return conflict error when checking packed refs Ivan Tse via GitGitGadget
2024-05-02 12:38 ` Patrick Steinhardt
2024-05-03  4:50 ` [PATCH v2] " Ivan Tse via GitGitGadget
2024-05-03  6:38   ` Patrick Steinhardt [this message]
2024-05-04  3:04   ` [PATCH v3] " Ivan Tse via GitGitGadget
2024-05-06  6:47     ` Patrick Steinhardt
2024-05-06 11:40     ` Karthik Nayak
2024-05-06 19:01       ` Junio C Hamano
2024-05-07  5:51         ` Ivan Tse
2024-05-07 13:37           ` Karthik Nayak
2024-05-08  1:39             ` Ivan Tse

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=ZjSGX1eK-kSFKK1u@tanuki \
    --to=ps@pks.im \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=ivan.tse1@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).