git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] revision: fix --left/right-only use with unrelated histories
@ 2025-03-30  5:49 Matt Hunter
  2025-03-30  8:31 ` Johannes Sixt
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Matt Hunter @ 2025-03-30  5:49 UTC (permalink / raw)
  To: git; +Cc: Matt Hunter

This is a similar fix as 023756f4eb (revision walker: --cherry-pick is a
limited operation), but for the --left-only and --right-only options.

When computing a symmetric difference between two unrelated histories,
no suitable merge base exists, and so no boundary commit is flagged as
UNINTERESTING.  Previously, we relied on the presence of such boundary
to trigger limiting and thus consideration of either "revs->left_only"
or "revs->right_only".

A number of other entries in the option parser have started including
overrides for "revs->limited = 1".  Do the same for these options.

Signed-off-by: Matt Hunter <m@lfurio.us>
---

Patch applies to the current maint branch (git v2.49.0).

I made a best guess at what the most logical home for this test case
should be, so please let me know if somewhere else is preferred.  All
tests pass when this is cherry-picked to seen.  There is only a minor
conflict, as a few different tests have appeared in this same spot.

 revision.c               |  2 ++
 t/t6000-rev-list-misc.sh | 12 ++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/revision.c b/revision.c
index c4390f0938..e045445bc3 100644
--- a/revision.c
+++ b/revision.c
@@ -2488,10 +2488,12 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
 			die(_("options '%s' and '%s' cannot be used together"),
 			    "--left-only", "--right-only/--cherry");
 		revs->left_only = 1;
+		revs->limited = 1;
 	} else if (!strcmp(arg, "--right-only")) {
 		if (revs->left_only)
 			die(_("options '%s' and '%s' cannot be used together"), "--right-only", "--left-only");
 		revs->right_only = 1;
+		revs->limited = 1;
 	} else if (!strcmp(arg, "--cherry")) {
 		if (revs->left_only)
 			die(_("options '%s' and '%s' cannot be used together"), "--cherry", "--left-only");
diff --git a/t/t6000-rev-list-misc.sh b/t/t6000-rev-list-misc.sh
index 6289a2e8b0..58f1f746e0 100755
--- a/t/t6000-rev-list-misc.sh
+++ b/t/t6000-rev-list-misc.sh
@@ -182,4 +182,16 @@ test_expect_success 'rev-list --unpacked' '
 	test_cmp expect actual
 '
 
+test_expect_success 'rev-list one-sided unrelated symmetric diff' '
+	test_tick &&
+	git commit --allow-empty -m xyz &&
+	git branch cmp &&
+	git rebase --force-rebase --root &&
+
+	git rev-list --left-only  HEAD...cmp >head &&
+	git rev-list --right-only HEAD...cmp >cmp  &&
+
+	test $(comm -12 <(sort head) <(sort cmp) | wc -l) = "0"
+'
+
 test_done

base-commit: 683c54c999c301c2cd6f715c411407c413b1d84e
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2025-04-11 14:42 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-30  5:49 [PATCH] revision: fix --left/right-only use with unrelated histories Matt Hunter
2025-03-30  8:31 ` Johannes Sixt
2025-04-01  9:56   ` Junio C Hamano
2025-03-30 10:11 ` Phillip Wood
2025-03-30 10:54   ` Matt Hunter
2025-04-02 13:12     ` phillip.wood123
2025-04-04  5:13       ` Matt Hunter
2025-03-30 11:24 ` [PATCH v2] " Matt Hunter
2025-04-11 14:41   ` Junio C Hamano

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).