commit: add generation number to struct commit
commit83073cc994cc3cd364f3f213478b9162476e8e44
authorDerrick Stolee <dstolee@microsoft.com>
Wed, 25 Apr 2018 14:37:55 +0000 (25 14:37 +0000)
committerJunio C Hamano <gitster@pobox.com>
Tue, 22 May 2018 03:36:25 +0000 (22 12:36 +0900)
treee5b239f23a72baa58e0dd3a76f8fc391a6ca2fb1
parent8fb572af5f4e3bef2415ac2dba8d76d37235b489
commit: add generation number to struct commit

The generation number of a commit is defined recursively as follows:

* If a commit A has no parents, then the generation number of A is one.
* If a commit A has parents, then the generation number of A is one
  more than the maximum generation number among the parents of A.

Add a uint32_t generation field to struct commit so we can pass this
information to revision walks. We use three special values to signal
the generation number is invalid:

GENERATION_NUMBER_INFINITY 0xFFFFFFFF
GENERATION_NUMBER_MAX 0x3FFFFFFF
GENERATION_NUMBER_ZERO 0

The first (_INFINITY) means the generation number has not been loaded or
computed. The second (_MAX) means the generation number is too large to
store in the commit-graph file. The third (_ZERO) means the generation
number was loaded from a commit graph file that was written by a version
of git that did not support generation numbers.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
alloc.c
commit-graph.c
commit.h