# HG changeset patch # User Boris Feld # Date 1499045278 -7200 # Node ID 34e10e09afa5b07b409f7fd6fc407f98910a257c # Parent dba493981284b00cb434e7878fa4ca3ce568cfa8 obsolete: track markers in _succs We now also store markers in _succs. It will be useful for the obsfate template that will use them to display more meaningful information like the list of users that have evolved a changeset into its successors. diff -r dba493981284 -r 34e10e09afa5 mercurial/obsutil.py --- a/mercurial/obsutil.py Mon Jul 03 03:13:17 2017 +0200 +++ b/mercurial/obsutil.py Mon Jul 03 03:27:58 2017 +0200 @@ -330,8 +330,14 @@ class _succs(list): """small class to represent a successors with some metadata about it""" + def __init__(self, *args, **kwargs): + super(_succs, self).__init__(*args, **kwargs) + self.markers = set() + def copy(self): - return _succs(self) + new = _succs(self) + new.markers = self.markers.copy() + return new def successorssets(repo, initialnode, closest=False, cache=None): """Return set of all latest successors of initial nodes @@ -527,13 +533,16 @@ succssets = [] for mark in sorted(succmarkers[current]): # successors sets contributed by this marker - markss = [_succs()] + base = _succs() + base.markers.add(mark) + markss = [base] for suc in mark[1]: # cardinal product with previous successors productresult = [] for prefix in markss: for suffix in cache[suc]: newss = prefix.copy() + newss.markers.update(suffix.markers) for part in suffix: # do not duplicated entry in successors set # first entry wins. @@ -548,12 +557,13 @@ candidate = sorted(((set(s), s) for s in succssets if s), key=lambda x: len(x[1]), reverse=True) for setversion, listversion in candidate: - for seenset in seen: + for seenset, seensuccs in seen: if setversion.issubset(seenset): + seensuccs.markers.update(listversion.markers) break else: final.append(listversion) - seen.append(setversion) + seen.append((setversion, listversion)) final.reverse() # put small successors set first cache[current] = final return cache[initialnode]