Patchwork [1,of,9] obsolete: introduce a _succs class

login
register
mail settings
Submitter Boris Feld
Date July 6, 2017, 9:50 p.m.
Message ID <105c150648b0c43c240b.1499377809@FB>
Download mbox | patch
Permalink /patch/22045/
State Changes Requested, archived
Headers show

Comments

Boris Feld - July 6, 2017, 9:50 p.m.
# HG changeset patch
# User Boris Feld <boris.feld@octobus.net>
# Date 1499036035 -7200
#      Mon Jul 03 00:53:55 2017 +0200
# Node ID 105c150648b0c43c240b27047d0be89359932d10
# Parent  634b259079c55e5dc3aaaad38c3c73f87611d0be
# 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.

Patch

diff -r 634b259079c5 -r 105c150648b0 mercurial/obsutil.py
--- a/mercurial/obsutil.py	Tue Jul 04 22:35:52 2017 -0700
+++ b/mercurial/obsutil.py	Mon Jul 03 00:53:55 2017 +0200
@@ -311,6 +311,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
 
@@ -429,11 +432,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()
         else:
             # cases (3) and (4)
             #
@@ -471,7 +474,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
@@ -505,13 +508,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.