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

Re: Find out on which branch a commit was originally made

From
ASArtur Skawina <art.08.09@gmail.com>
Date
Sep 21, 2010, 02:12 UTC
Message-ID
<4C981475.10404@gmail.com>
In-Reply-To
<201009210015.o8L0FcJt020691@no.baka.org>
On 09/21/10 02:15, Seth Robertson wrote:
Show 17 quoted lines
> 
> I've discovered an error case in your pike script's logic (as and if I
> understand it).  If there are multiple children of the commit in
> question and those two children both merge onto the target branch, the
> path your program prints is incorrect (specifically, for reference B
> it prints D and then G--the correct answer is G only or a least D+H).
> It does not check to see whether a specific reachable merge commit is
> reachable by the path you have started to print.
> 
> ----master-----------G------H
>                     /      /
>                     |     /
>  --A-------D-----------F-
>           /         |
>  ----B---C          |
>       \             |
>        ----------E--/

I haven't checked, but I expect it to print exactly 'D' and 'G'. 'H' isn't interesting, as both parents already contain 'B'. Yes, 'D' could be omitted, but knowing where else 'B' also appeared /can/ be useful (and figuring out if it's safe to skip 'D' would be more expensive).

>     Unpikifying is left as an exercise for the user. ;)
> 
> I've converted it to perl and it now handles both your problem (which
I wasn't exactly thinking of perl when i wrote that... :)
> Of course it still suffers from reporting branches created after the
> reference you are interested in was created.

Well, at least git-find-branch-for, shows (some) merges _to_ other (topic/remote) branches, but after browsing the kernel history for a while i'm a bit surprised -- this causes significantly less problems than i expected.

I haven't looked at your script, so i'm not sure what exactly it tries to do, but i ran a quick test, using the kernel tree:

$ time git-find-branch-for 1f9c381fa3e0b9b9042e310c69df87eaf9b46ea4 
84e48b6d64fd Merge of master.kernel.org:/home/rmk/linux-2.6-rmk.git   050503 22:27
bfd4bda097f8 Merge with master.kernel.org:/pub/scm/linux/kernel/git/t 050505 12:59
325a479c4c11 Merge with temp tree to get David's gdb inferior calls p 050517 22:53
ad34ea2cc384 merge by hand - fix up rejections in Documentation/DocBo 050520 20:27
0m10.549s user   0m0.713s system   0m10.963s elapsed   102.74% CPU
$
$ time git-what-branch 1f9c381fa3e0b9b9042e310c69df87eaf9b46ea4 
1f9c381fa3e0b9b9042e310c69df87eaf9b46ea4 first merged onto v2.6.32.n using the following minimal path:
  v2.6.12-rc3-450-g1f9c381 merged up at v2.6.12-rc4-39-gad34ea2 (Fri May 20 22:27:44 2005)
  v2.6.12-rc4-39-gad34ea2 merged up at v2.6.12-rc3-590-gbfd4bda (Thu May  5 14:59:37 2005)
  v2.6.12-rc3-590-gbfd4bda merged up at v2.6.12-rc3-461-g84e48b6 (Wed May  4 00:27:24 2005)
  v2.6.12-rc3-461-g84e48b6 is on v2.6.32.n
18m29.771s user   0m29.681s system   18m4.897s elapsed   105.03% CPU
$

Results are similar, that one extra merge i'll have to take a look at later, but the cost difference...

artur
Previous: Seth RobertsonNext: Seth Robertson
Message 22 of 33 in “Find out on which branch a commit was originally made”
  1. Stefan HallerSep 18, 2010
  2. Ævar Arnfjörð BjarmasonSep 18, 2010
  3. Ævar Arnfjörð BjarmasonSep 18, 2010
  4. Tor ArntsenSep 18, 2010
  5. Stefan HallerSep 18, 2010
  6. Artur SkawinaSep 18, 2010
  7. Stefan HallerSep 19, 2010
  8. Clemens BuchacherSep 19, 2010
  9. Artur SkawinaSep 19, 2010
  10. Stefan HallerSep 19, 2010
  11. Artur SkawinaSep 19, 2010
  12. Robin RosenbergSep 19, 2010
  13. Seth RobertsonSep 19, 2010
  14. Artur SkawinaSep 19, 2010
  15. Seth RobertsonSep 19, 2010
  16. Artur SkawinaSep 20, 2010
  17. Seth RobertsonSep 20, 2010
  18. Stefan HallerSep 20, 2010
  19. Artur SkawinaSep 20, 2010
  20. Artur SkawinaSep 20, 2010
  21. Seth RobertsonSep 21, 2010
  22. Artur SkawinaSep 21, 2010
  23. ANNOUNCE git-what-branch (was Re: Find out on which branch a commit was originally made)Seth Robertson, Sep 22, 2010
  24. Artur SkawinaSep 22, 2010
  25. Seth RobertsonSep 22, 2010
  26. Stephen BashSep 23, 2010
  27. Ævar Arnfjörð BjarmasonSep 23, 2010
  28. Artur SkawinaSep 23, 2010
  29. Artur SkawinaSep 24, 2010
  30. Seth RobertsonSep 24, 2010
  31. Seth RobertsonSep 23, 2010
  32. Stefan HallerSep 20, 2010
  33. Bryan DrewerySep 24, 2010

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.