Thanks alot for your answer, Konstantin, I will try to think a bit more for some acceptable user-level solution, and if I don't come up with anything good I will bring up the question to "main Git list", as you suggest.
Thanks again, Blind. 12 януари 2013, събота, 13:04:45 UTC+2, Konstantin Khomoutov написа: > > On Sat, 12 Jan 2013 14:47:03 +0400 > Konstantin Khomoutov <flat...@users.sourceforge.net <javascript:>> wrote: > > [...] > > You could roll your own history walking using calls to the > > `git cat-file` plumbing command > [...] > > You could first try a no-brainer approach though: start from the > > specified revision (say, HEAD), capture what's available in the tree > > associated with it and then go down the history looking for a moment > > where the *name* of an object as recorded in the tree of the starting > > revision changes its SHA-1 > [...] > > As to implementation: > > 1) Call `git cat-file commit <rev>` for the starting revision, > parse out committer, author, date, SHA-1 hashes of the parent commits > and the tree associated with this revision. > > 2) Call `git cat-file tree <tree_sha1_hash>` on the tree's hash obtained > on the previous step. Parse the contents of the returned tree > object, remember the names, types and SHA-1 hashes of all the > objects listed in it. > > 3) Take the first parent commit obtained on step (1), and perform steps > (1) and (2) for it. After the step (2), compare the trees, object > by object: an object might be either missing in this parent tree > which means it was added in the tree you started with, or change its > SHA-1 hash which means it has been changed in the tree you started > with. > > Note that lines of history ending in a merge commit might converge to a > single commit down the history which is typical for a feature branches. > The `git merge-base` command is there to find such base commits. > --