[PATCH 1 of 9 V3] obsolete: introduce a _succs class
Denis Laxalde
denis.laxalde at logilab.fr
Mon Aug 21 06:45:36 EDT 2017
Boris Feld a écrit :
> # HG changeset patch
> # User Boris Feld <boris.feld at octobus.net>
> # Date 1499036035 -7200
> # Mon Jul 03 00:53:55 2017 +0200
> # Node ID 328789121fa66b99c50ffa2fb139df700cf9fdc8
> # Parent 3cfc9070245fbaa8c4c010327f24d579a416370f
> # EXP-Topic obsfatetemplate
> obsolete: introduce a _succs class
>
> It will be useful later when we will be adding markers to _succs in order to
> represent a successorset with the list of markers from the root to each
> successors sets. This information will be needed for the obsfate template I will
> introduce.
>
> Makes it a subclass of list so all callers will continue to work.
>
> diff -r 3cfc9070245f -r 328789121fa6 mercurial/obsutil.py
> --- a/mercurial/obsutil.py Wed Aug 16 10:44:06 2017 -0700
> +++ b/mercurial/obsutil.py Mon Jul 03 00:53:55 2017 +0200
> @@ -327,6 +327,9 @@
> obsoleted.add(rev)
> return obsoleted
>
> +class _succs(list):
> + """small class to represent a successors with some metadata about it"""
> +
> def successorssets(repo, initialnode, closest=False, cache=None):
> """Return set of all latest successors of initial nodes
>
> @@ -445,11 +448,11 @@
> # case (2): end of walk.
> if current in repo:
> # We have a valid successors.
> - cache[current] = [(current,)]
> + cache[current] = [_succs((current,))]
> else:
> # Final obsolete version is unknown locally.
> # Do not count that as a valid successors
> - cache[current] = []
> + cache[current] = _succs()
While equivalent by value (at this point), it seems to me that this
should be kept as an empty list in "else" case (to keep
`type(cache[current]) == list`).
> else:
> # cases (3) and (4)
> #
> @@ -487,7 +490,7 @@
> if suc not in cache:
> if suc in stackedset:
> # cycle breaking
> - cache[suc] = []
> + cache[suc] = _succs()
> else:
> # case (3) If we have not computed successors sets
> # of one of those successors we add it to the
> @@ -521,13 +524,13 @@
> succssets = []
> for mark in sorted(succmarkers[current]):
> # successors sets contributed by this marker
> - markss = [[]]
> + markss = [_succs()]
> for suc in mark[1]:
> # cardinal product with previous successors
> productresult = []
> for prefix in markss:
> for suffix in cache[suc]:
> - newss = list(prefix)
> + newss = _succs(prefix)
> for part in suffix:
> # do not duplicated entry in successors set
> # first entry wins.
More information about the Mercurial-devel
mailing list