##// END OF EJS Templates
rank: naive rank property computation and retrieval...
marmoute -
r49606:2e949ede default
parent child Browse files
Show More
@@ -40,11 +40,13 b' from .revlogutils.constants import ('
40 40 COMP_MODE_DEFAULT,
41 41 COMP_MODE_INLINE,
42 42 COMP_MODE_PLAIN,
43 ENTRY_RANK,
43 44 FEATURES_BY_VERSION,
44 45 FLAG_GENERALDELTA,
45 46 FLAG_INLINE_DATA,
46 47 INDEX_HEADER,
47 48 KIND_CHANGELOG,
49 RANK_UNKNOWN,
48 50 REVLOGV0,
49 51 REVLOGV1,
50 52 REVLOGV1_FLAGS,
@@ -857,6 +859,22 b' class revlog(object):'
857 859
858 860 return len(self.revision(rev))
859 861
862 def fast_rank(self, rev):
863 """Return the rank of a revision if already known, or None otherwise.
864
865 The rank of a revision is the size of the sub-graph it defines as a
866 head. Equivalently, the rank of a revision `r` is the size of the set
867 `ancestors(r)`, `r` included.
868
869 This method returns the rank retrieved from the revlog in constant
870 time. It makes no attempt at computing unknown values for versions of
871 the revlog which do not persist the rank.
872 """
873 rank = self.index[rev][ENTRY_RANK]
874 if rank == RANK_UNKNOWN:
875 return None
876 return rank
877
860 878 def chainbase(self, rev):
861 879 base = self._chainbasecache.get(rev)
862 880 if base is not None:
@@ -2444,6 +2462,10 b' class revlog(object):'
2444 2462 # than ones we manually add.
2445 2463 sidedata_offset = 0
2446 2464
2465 rank = RANK_UNKNOWN
2466 if self._format_version == CHANGELOGV2:
2467 rank = len(list(self.ancestors([p1r, p2r], inclusive=True))) + 1
2468
2447 2469 e = revlogutils.entry(
2448 2470 flags=flags,
2449 2471 data_offset=offset,
@@ -2458,6 +2480,7 b' class revlog(object):'
2458 2480 sidedata_offset=sidedata_offset,
2459 2481 sidedata_compressed_length=len(serialized_sidedata),
2460 2482 sidedata_compression_mode=sidedata_compression_mode,
2483 rank=rank,
2461 2484 )
2462 2485
2463 2486 self.index.append(e)
General Comments 0
You need to be logged in to leave comments. Login now