On 4/3/2018 12:51 PM, Derrick Stolee wrote:
This is the first of several "small" patches that follow the serialized
Git commit graph patch (ds/commit-graph).
As described in Documentation/technical/commit-graph.txt, the generation
number of a commit is one more than the maximum generation number among
its parents (trivially, a commit with no parents has generation number
one).
This series makes the computation of generation numbers part of the
commit-graph write process.
Finally, generation numbers are used to order commits in the priority
queue in paint_down_to_common(). This allows a constant-time check in
queue_has_nonstale() instead of the previous linear-time check.
This does not have a significant performance benefit in repositories
of normal size, but in the Windows repository, some merge-base
calculations improve from 3.1s to 2.9s. A modest speedup, but provides
an actual consumer of generation numbers as a starting point.
A more substantial refactoring of revision.c is required before making
'git log --graph' use generation numbers effectively.
This patch series depends on v7 of ds/commit-graph.
Derrick Stolee (6):
object.c: parse commit in graph first
commit: add generation number to struct commmit
commit-graph: compute generation numbers
commit: sort by generation number in paint_down_to_common()
commit.c: use generation number to stop merge-base walks
commit-graph.txt: update design doc with generation numbers
This patch is also available as a GitHub pull request [1]
[1] https://github.com/derrickstolee/git/pull/5