Re: Finding file revisions
- From
Daniel Barkalow <barkalow@iabervon.org>
- Date
- Apr 28, 2005, 16:08 UTC
- Message-ID
- <Pine.LNX.4.21.0504281147500.30848-100000@iabervon.org>
- In-Reply-To
- <200504271251.00635.mason@suse.com>
On Wed, 27 Apr 2005, Chris Mason wrote:
> I haven't seen a tool yet to find which changeset modified a given file, so > I whipped up something. The basic idea is to:
What is the answer supposed to be in the presence of merges? It seems like you shouldn't report the merge that brought in the change, but rather (assuming it's available) the changeset that originally made it.
That is:
go through the history tree:
if a commit has a parent with a different version:
if it also has a parent with the same version as the child, ignore the
different parent(s) and enqueue the same parent(s)
otherwise, report it (for a single head, it's the original change; for
a merge, it merged two changes to the file)
otherwise, enqueue all the parentsSorting by time is probably not useful, because there must be some source of the current version, and all paths going back, after ignoring versions that were replaced by it in a merge, must go back to that source, so depth-first search is fastest. (If there are multiple possible solutions, then it means that multiple people applied the same patch, and any of them should do).
This should be easy in C, but difficult in something that isn't generating the history info itself.
-Daniel *This .sig left intentionally blank*