On 09/21/10 02:15, Seth Robertson wrote: > > 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html