On 9 Sep 2006 06:31:57 -0400, linux@xxxxxxxxxxx <linux@xxxxxxxxxxx> wrote:
> If the out of order revisions are a small amount of the total then > could be possible to have something like > > git rev-list --topo-order --with-appended-fixups HEAD > > Where, while git-rev-list is working _whithout sorting the whole tree > first_, when finds an out of order revision stores it in a fixup-list > buffer and *at the end* of normal git-rev-lsit the buffer is flushed > to receiver, so that the drawing logic does not change and the out of > order revisions arrive at the end, already packed, sorted and prepared > by git-rev-list. I don't think I understand your proposal. The problem arises when git-rev-list finds a commit that it should have listed before something that it has already output. Just for example: Commit D: Ancestor B Commit B: Ancestor A Commit C: Ancestor B Commit C is the problem, because if git-rev-list has already output B, there's no way to back up and insert it in the right place. How is waiting to output the already-behind-schedule commit C going to help anything?
It helps in a number of ways from receiver point of view. - Receiver doesn't need to keep a sorted list of loaded revisions. - Receiver doesn't need to stop parsing input and redraw the graph in the middle of the loading. - Receiver doesn't need to check for possible out of order commits when loading data, but can be assured data that arrives is --topo-order consistent (although my not be complete) - Split the in order parsing code (performance critical and common case) from fixup-code (run at the end and on a small set of commits). - Much faster implementation because the sorting is done only in git-rev-list and only once. Following your example my suggestion was something like this: Instead of: git-rev-list HEAD Commit D: Ancestor B Commit B: Ancestor A Commit C: Ancestor B Commit A: Ancestor E Commit E: Ancestor F Commit F: Ancestor G .... Commit V: Ancestor Z git-rev-list --topo-order ----with-appended-fixups HEAD sends something like: Commit D: Ancestor B Commit B: Ancestor A Commit A: Ancestor E Commit E: Ancestor F Commit F: Ancestor G .... Commit V: Ancestor Z (* end of correct sorted commits and start of out of order commits*) Commit C: Ancestor B ...... Commit N: Ancestor M So that receiver drawing code designed with working with --topo-order kind output could as usual draws the graph until Commit V: Ancestor Z (but without waiting for git-rev-list latency!!) and the new fixup code could *at the end* loop across *already sorted* fixup set: Commit C: Ancestor B ...... Commit N: Ancestor M and update the graph in one go. Of course some flag/syntax should be introduced to trigger the end of sorted code and beginning of fixups in git-rev-list output stream. Marco - 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