git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/2] merge-base: fix duplicates and not best ancestors in output

From
Василий Макаров <einmalfel@gmail.com>
Date
Dec 28, 2013, 10:22 UTC
Message-ID
<CABEtfDFu=Fc0SXbyFctEyiMCJwqxP25K9mdVhAB0X_vKHxvW_A@mail.gmail.com>

Hi there! First of all: I'm new to mailing-lists, sorry if I'm doing it wrong.

I've found a bug in git merge-base, causing it to show not best common ancestors and duplicates under some circumstances (example is given in attached test case). Problem cause is algorithm used in get_octopus_merge_bases(), it iteratively concatenates merge bases, and don't care if there are duplicates or decsendants/ancestors in result. What I suggest as a solution is to simply reduce bases list after get_octopus_merge_bases().

Here is the fix:
---
 builtin/merge-base.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/builtin/merge-base.c b/builtin/merge-base.c
index e88eb93..d6ad330 100644
--- a/builtin/merge-base.c
+++ b/builtin/merge-base.c
@@ -44,19 +44,19 @@ static struct commit *get_commit_reference(const char
*arg)
  return r;
 }

-static int handle_octopus(int count, const char **args, int reduce, int
show_all)
+static int handle_octopus(int count, const char **args, int reduce_only,
int show_all)
 {
  struct commit_list *revs = NULL;
  struct commit_list *result;
  int i;

- if (reduce)
+ if (reduce_only)
  show_all = 1;

  for (i = count - 1; i >= 0; i--)
  commit_list_insert(get_commit_reference(args[i]), &revs);

- result = reduce ? reduce_heads(revs) : get_octopus_merge_bases(revs);
+ result = reduce_heads(reduce_only ? revs : get_octopus_merge_bases(revs));

  if (!result)
  return 1;
-- 
1.8.3.1
Next: Junio C Hamano
Message 1 of 4 in “merge-base: fix duplicates and not best ancestors in output”
  1. 1/2 merge-base: fix duplicates and not best ancestors in outputВасилий Макаров, Dec 28, 2013
  2. Junio C HamanoDec 30, 2013
  3. Junio C HamanoDec 30, 2013
  4. Василий МакаровDec 31, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.