comparison mercurial/obsolete.py @ 33734:0c3112f17610

obsolete: rename precursor into predecessor in obsolete docstrings The renaming is done according to https://www.mercurial-scm.org/wiki/CEDVocabulary. Differential Revision: https://phab.mercurial-scm.org/D246
author Boris Feld <boris.feld@octobus.net>
date Wed, 02 Aug 2017 19:48:06 +0200
parents d5acd967f95a
children e6d8ee3c9ec3
comparison
equal deleted inserted replaced
33733:d5acd967f95a 33734:0c3112f17610
18 building new tools to reconcile conflicting rewrite actions. To 18 building new tools to reconcile conflicting rewrite actions. To
19 facilitate conflict resolution, markers include various annotations 19 facilitate conflict resolution, markers include various annotations
20 besides old and news changeset identifiers, such as creation date or 20 besides old and news changeset identifiers, such as creation date or
21 author name. 21 author name.
22 22
23 The old obsoleted changeset is called a "precursor" and possible 23 The old obsoleted changeset is called a "predecessor" and possible
24 replacements are called "successors". Markers that used changeset X as 24 replacements are called "successors". Markers that used changeset X as
25 a precursor are called "successor markers of X" because they hold 25 a predecessor are called "successor markers of X" because they hold
26 information about the successors of X. Markers that use changeset Y as 26 information about the successors of X. Markers that use changeset Y as
27 a successors are call "precursor markers of Y" because they hold 27 a successors are call "predecessor markers of Y" because they hold
28 information about the precursors of Y. 28 information about the predecessors of Y.
29 29
30 Examples: 30 Examples:
31 31
32 - When changeset A is replaced by changeset A', one marker is stored: 32 - When changeset A is replaced by changeset A', one marker is stored:
33 33
292 # 2: two parents stored, 292 # 2: two parents stored,
293 # 3: no parent data stored 293 # 3: no parent data stored
294 # 294 #
295 # - uint8: number of metadata entries M 295 # - uint8: number of metadata entries M
296 # 296 #
297 # - 20 or 32 bytes: precursor changeset identifier. 297 # - 20 or 32 bytes: predecessor changeset identifier.
298 # 298 #
299 # - N*(20 or 32) bytes: successors changesets identifiers. 299 # - N*(20 or 32) bytes: successors changesets identifiers.
300 # 300 #
301 # - P*(20 or 32) bytes: parents of the precursors changesets. 301 # - P*(20 or 32) bytes: parents of the predecessors changesets.
302 # 302 #
303 # - M*(uint8, uint8): size of all metadata entries (key and value) 303 # - M*(uint8, uint8): size of all metadata entries (key and value)
304 # 304 #
305 # - remaining bytes: the metadata, each (key, value) pair after the other. 305 # - remaining bytes: the metadata, each (key, value) pair after the other.
306 _fm1version = 1 306 _fm1version = 1
504 504
505 class obsstore(object): 505 class obsstore(object):
506 """Store obsolete markers 506 """Store obsolete markers
507 507
508 Markers can be accessed with two mappings: 508 Markers can be accessed with two mappings:
509 - precursors[x] -> set(markers on precursors edges of x) 509 - predecessors[x] -> set(markers on predecessors edges of x)
510 - successors[x] -> set(markers on successors edges of x) 510 - successors[x] -> set(markers on successors edges of x)
511 - children[x] -> set(markers on precursors edges of children(x) 511 - children[x] -> set(markers on predecessors edges of children(x)
512 """ 512 """
513 513
514 fields = ('prec', 'succs', 'flag', 'meta', 'date', 'parents') 514 fields = ('prec', 'succs', 'flag', 'meta', 'date', 'parents')
515 # prec: nodeid, precursor changesets 515 # prec: nodeid, predecessors changesets
516 # succs: tuple of nodeid, successor changesets (0-N length) 516 # succs: tuple of nodeid, successor changesets (0-N length)
517 # flag: integer, flag field carrying modifier for the markers (see doc) 517 # flag: integer, flag field carrying modifier for the markers (see doc)
518 # meta: binary blob, encoded metadata dictionary 518 # meta: binary blob, encoded metadata dictionary
519 # date: (float, int) tuple, date of marker creation 519 # date: (float, int) tuple, date of marker creation
520 # parents: (tuple of nodeid) or None, parents of precursors 520 # parents: (tuple of nodeid) or None, parents of predecessors
521 # None is used when no data has been recorded 521 # None is used when no data has been recorded
522 522
523 def __init__(self, svfs, defaultformat=_fm1version, readonly=False): 523 def __init__(self, svfs, defaultformat=_fm1version, readonly=False):
524 # caches for various obsolescence related cache 524 # caches for various obsolescence related cache
525 self.caches = {} 525 self.caches = {}
705 705
706 "relevant" to a set of nodes mean: 706 "relevant" to a set of nodes mean:
707 707
708 - marker that use this changeset as successor 708 - marker that use this changeset as successor
709 - prune marker of direct children on this changeset 709 - prune marker of direct children on this changeset
710 - recursive application of the two rules on precursors of these markers 710 - recursive application of the two rules on predecessors of these
711 markers
711 712
712 It is a set so you cannot rely on order.""" 713 It is a set so you cannot rely on order."""
713 714
714 pendingnodes = set(nodes) 715 pendingnodes = set(nodes)
715 seenmarkers = set() 716 seenmarkers = set()
945 torev = cl.nodemap.get 946 torev = cl.nodemap.get
946 for ctx in repo.set('(not public()) and (not obsolete())'): 947 for ctx in repo.set('(not public()) and (not obsolete())'):
947 rev = ctx.rev() 948 rev = ctx.rev()
948 # We only evaluate mutable, non-obsolete revision 949 # We only evaluate mutable, non-obsolete revision
949 node = ctx.node() 950 node = ctx.node()
950 # (future) A cache of precursors may worth if split is very common 951 # (future) A cache of predecessors may worth if split is very common
951 for pnode in obsutil.allprecursors(repo.obsstore, [node], 952 for pnode in obsutil.allprecursors(repo.obsstore, [node],
952 ignoreflags=bumpedfix): 953 ignoreflags=bumpedfix):
953 prev = torev(pnode) # unfiltered! but so is phasecache 954 prev = torev(pnode) # unfiltered! but so is phasecache
954 if (prev is not None) and (phase(repo, prev) <= public): 955 if (prev is not None) and (phase(repo, prev) <= public):
955 # we have a public precursor 956 # we have a public predecessor
956 bumped.add(rev) 957 bumped.add(rev)
957 break # Next draft! 958 break # Next draft!
958 return bumped 959 return bumped
959 960
960 @cachefor('divergent') 961 @cachefor('divergent')