fork0@xxxxxxxxxxx (Alex Riesen) writes: > To my deep disappointment, it didn't work out as good as I hoped: one > program I see most often and for longest time in the process list > (git-diff-tree) is a too complex thing to be put directly into > merge-recursive.c, so any help in this direction will be greatly > appreciated. Actually, diff-tree is (and to similar degree the internal diff machinery is) quite reusable as library piece, far more reusable than other parts of the core git. If you present what you want to achieve nicely and ask politely I might even get conned into helping you interface with the rest of your code ;-). I am guessing that you want to find out how to do the diff-tree -M used by the recursive merge without spitting out patch text nor raw output. That's quite doable and should be easy. Most likely you would use NO_OUTPUT option when you call diff_tree(). First look at builtin-diff.c::builtin_diff_tree() to see how you can call the diff machinery given two tree object names. diff_tree() itself does not emit the diff, but leaves the result in "diff queue". After calling diff_tree(), inspect diff_queued_diff() and use the result to do whatever sensible. The queue is an array of diff_filepair that records the (path, sha1, mode) among other things from old tree and from new tree (the one from the old tree is called "one", and the new tree is called "two"). So if you have one->path = "old-name.c" and two->path = "new-name.c" then you see the old-name.c file was renamed to new-name.c When you are done, do not forget to call diff_flush() to get rid of queued_diff(); otherwise you would leak. Have fun. - : 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