All of lore.kernel.org
 help / color / mirror / Atom feed
From: kristofferhaugsbakk@fastmail.com
To: git@vger.kernel.org
Cc: Kristoffer Haugsbakk <code@khaugsbakk.name>,
	christian.couder@gmail.com, newren@gmail.com,
	Siddharth Asthana <siddharthasthana31@gmail.com>,
	Phillip Wood <phillip.wood@dunelm.org.uk>,
	Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v2 2/5] replay: find *onto only after testing for ref name
Date: Tue, 30 Dec 2025 16:01:48 +0100	[thread overview]
Message-ID: <V2_~axonto_after_ref_test.17d@msgid.xyz> (raw)
In-Reply-To: <V2_CV_replay_die_descr.17b@msgid.xyz>

From: Kristoffer Haugsbakk <code@khaugsbakk.name>

We are about to make `peel_committish` die when it cannot find
a commit-ish instead of returning `NULL`. But that would make e.g.
`git replay --advance=refs/non-existent` die with a less descriptive
error message; the highest-level error message is that the name does
not exist as a ref, not that we cannot find a commit-ish based on
the name.

Let’s try to find the ref and only after that try to peel to
as a commit-ish.

Also add a regression test to protect this error-order from future
modifications.

Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name>
---

Notes (series):
    v2: [new]
    
    Fallout of v1. Needs to be moved so that the new error message does not
    “shadow” this one.
    
    See: https://lore.kernel.org/git/xmqqpl85pb7k.fsf@gitster.g/

 builtin/replay.c         | 2 +-
 t/t3650-replay-basics.sh | 7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/builtin/replay.c b/builtin/replay.c
index 54849f65c87..35813140e99 100644
--- a/builtin/replay.c
+++ b/builtin/replay.c
@@ -184,18 +184,18 @@ static void populate_for_onto_or_advance_mode(struct repository *repo,
 		char *fullname = NULL;
 
 		if (!*advance_name)
 			BUG("expected either onto_name or *advance_name in this function");
 
-		*onto = peel_committish(repo, *advance_name);
 		if (repo_dwim_ref(repo, *advance_name, strlen(*advance_name),
 			     &oid, &fullname, 0) == 1) {
 			free(*advance_name);
 			*advance_name = fullname;
 		} else {
 			die(_("argument to --advance must be a reference"));
 		}
+		*onto = peel_committish(repo, *advance_name);
 		if (rinfo.positive_refexprs > 1)
 			die(_("cannot advance target with multiple sources because ordering would be ill-defined"));
 	}
 	strset_clear(&rinfo.negative_refs);
 	strset_clear(&rinfo.positive_refs);
diff --git a/t/t3650-replay-basics.sh b/t/t3650-replay-basics.sh
index 58b37599357..7dea62f064f 100755
--- a/t/t3650-replay-basics.sh
+++ b/t/t3650-replay-basics.sh
@@ -49,10 +49,17 @@ test_expect_success 'setup' '
 
 test_expect_success 'setup bare' '
 	git clone --bare . bare
 '
 
+test_expect_success 'argument to --advance must be a reference' '
+	echo "fatal: argument to --advance must be a reference" >expect &&
+	oid=$(git rev-parse main) &&
+	test_must_fail git replay --advance=$oid topic1..topic2 2>actual &&
+	test_cmp expect actual
+'
+
 test_expect_success 'using replay to rebase two branches, one on top of other' '
 	git replay --onto main topic1..topic2 >result &&
 
 	test_line_count = 1 result &&
 
-- 
2.52.0.10.g08704017180


  parent reply	other threads:[~2025-12-30 15:03 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-22 22:04 [PATCH 0/2] replay: die descriptively when invalid commit-ish kristofferhaugsbakk
2025-12-22 22:04 ` [PATCH 1/2] " kristofferhaugsbakk
2025-12-23  3:12   ` Junio C Hamano
2025-12-23 10:52     ` Phillip Wood
2025-12-23 13:41       ` Junio C Hamano
2025-12-30 14:30       ` Kristoffer Haugsbakk
2025-12-22 22:04 ` [PATCH 2/2] t3650: add more regression tests for failure conditions kristofferhaugsbakk
2025-12-23 10:58   ` Phillip Wood
2025-12-30 14:33     ` Kristoffer Haugsbakk
2025-12-23  3:16 ` [PATCH 0/2] replay: die descriptively when invalid commit-ish Junio C Hamano
2025-12-30 14:33   ` Kristoffer Haugsbakk
2025-12-24  3:03 ` Elijah Newren
2025-12-30 14:31   ` Kristoffer Haugsbakk
2025-12-30 15:01 ` [PATCH v2 0/5] " kristofferhaugsbakk
2025-12-30 15:01   ` [PATCH v2 1/5] replay: remove dead code and rearrange kristofferhaugsbakk
2025-12-30 22:50     ` Elijah Newren
2025-12-30 23:37       ` Junio C Hamano
2026-01-02  9:51       ` Kristoffer Haugsbakk
2025-12-30 15:01   ` kristofferhaugsbakk [this message]
2025-12-30 22:51     ` [PATCH v2 2/5] replay: find *onto only after testing for ref name Elijah Newren
2025-12-30 15:01   ` [PATCH v2 3/5] replay: die descriptively when invalid commit-ish is given kristofferhaugsbakk
2025-12-30 22:52     ` Elijah Newren
2026-01-02 11:11       ` Kristoffer Haugsbakk
2025-12-30 15:01   ` [PATCH v2 4/5] replay: die if we cannot parse object kristofferhaugsbakk
2025-12-30 15:01   ` [PATCH v2 5/5] t3650: add more regression tests for failure conditions kristofferhaugsbakk
2025-12-30 22:53   ` [PATCH v2 0/5] replay: die descriptively when invalid commit-ish Elijah Newren
2026-01-05 19:53   ` [PATCH v3 0/6] " kristofferhaugsbakk
2026-01-05 19:53     ` [PATCH v3 1/6] replay: remove dead code and rearrange kristofferhaugsbakk
2026-01-05 19:53     ` [PATCH v3 2/6] replay: find *onto only after testing for ref name kristofferhaugsbakk
2026-01-05 19:53     ` [PATCH v3 3/6] replay: die descriptively when invalid commit-ish is given kristofferhaugsbakk
2026-01-05 19:53     ` [PATCH v3 4/6] replay: improve code comment and die message kristofferhaugsbakk
2026-01-05 19:53     ` [PATCH v3 5/6] replay: die if we cannot parse object kristofferhaugsbakk
2026-01-05 19:53     ` [PATCH v3 6/6] t3650: add more regression tests for failure conditions kristofferhaugsbakk
2026-01-06 23:12     ` [PATCH v3 0/6] replay: die descriptively when invalid commit-ish Elijah Newren
2026-01-07  3:56       ` 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='V2_~axonto_after_ref_test.17d@msgid.xyz' \
    --to=kristofferhaugsbakk@fastmail.com \
    --cc=christian.couder@gmail.com \
    --cc=code@khaugsbakk.name \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=newren@gmail.com \
    --cc=phillip.wood@dunelm.org.uk \
    --cc=siddharthasthana31@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.
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.