Remove the horribly stupid RevSort.START_ORDER
commit4cbdf0f79c2e90027e3bff02974b278e5cf452c1
authorShawn O. Pearce <spearce@spearce.org>
Fri, 13 Mar 2009 02:07:40 +0000 (12 19:07 -0700)
committerRobin Rosenberg <robin.rosenberg@dewire.com>
Sun, 15 Mar 2009 11:48:39 +0000 (15 12:48 +0100)
tree6f3a4a7ece7a1c8c09e3f63ddf9ffff6a5311032
parent6c7987b59eb3e987de8887b2e6776e12ef5a05ad
Remove the horribly stupid RevSort.START_ORDER

I must have been on crack the day I wrote 3b27268f49 ("Allow RevWalk
users to ask for FIFO style ordering").  Its a really bad idea.

Applications can get themselves into a situation where they process
one branch long before another, and then abort too early, before all
commits have been correctly flagged UNINTERESTING.

For example, given the graph:

  Z-A------------B
  |             /
  |    ---------
  \   /
   Q-R-S-T-U-V

If B is "interesting" and A,V are UNINTERESTING, without forcing the
commit timestamp ordering in the pending queue we wind up processing
all of B-Z, producing R,Q as "interesting" output in the process, and
terminate before S can even be parsed. Consequently we never push the
UNINTERESTING flag down onto R, and R,Q produced when they shouldn't.

We now require that the pending queue use a DateRevQueue instead of
the FIFORevQueue, so that in the above graph S must be parsed before
we can even consider R or A, even though R,A were reached earlier.
This of course still assumes there is no clock skew between S and R.
The next commit will address some limited clock skew issues.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
org.spearce.jgit/src/org/spearce/jgit/revwalk/PendingGenerator.java
org.spearce.jgit/src/org/spearce/jgit/revwalk/RevSort.java
org.spearce.jgit/src/org/spearce/jgit/revwalk/RevWalk.java
org.spearce.jgit/src/org/spearce/jgit/revwalk/StartGenerator.java