Merge branch 'mh/left-right-limited'

"git log --{left,right}-only A...B", when A and B does not share
any common ancestor, now behaves as expected.

* mh/left-right-limited:
  revision: fix --left/right-only use with unrelated histories
This commit is contained in:
Junio C Hamano
2025-04-23 13:58:51 -07:00
2 changed files with 17 additions and 0 deletions

View File

@@ -2480,10 +2480,12 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
die(_("options '%s' and '%s' cannot be used together"), die(_("options '%s' and '%s' cannot be used together"),
"--left-only", "--right-only/--cherry"); "--left-only", "--right-only/--cherry");
revs->left_only = 1; revs->left_only = 1;
revs->limited = 1;
} else if (!strcmp(arg, "--right-only")) { } else if (!strcmp(arg, "--right-only")) {
if (revs->left_only) if (revs->left_only)
die(_("options '%s' and '%s' cannot be used together"), "--right-only", "--left-only"); die(_("options '%s' and '%s' cannot be used together"), "--right-only", "--left-only");
revs->right_only = 1; revs->right_only = 1;
revs->limited = 1;
} else if (!strcmp(arg, "--cherry")) { } else if (!strcmp(arg, "--cherry")) {
if (revs->left_only) if (revs->left_only)
die(_("options '%s' and '%s' cannot be used together"), "--cherry", "--left-only"); die(_("options '%s' and '%s' cannot be used together"), "--cherry", "--left-only");

View File

@@ -182,6 +182,21 @@ test_expect_success 'rev-list --unpacked' '
test_cmp expect actual 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 &&
sort head >head.sorted &&
sort cmp >cmp.sorted &&
comm -12 head.sorted cmp.sorted >actual &&
test_line_count = 0 actual
'
test_expect_success 'rev-list -z' ' test_expect_success 'rev-list -z' '
test_when_finished rm -rf repo && test_when_finished rm -rf repo &&