##// END OF EJS Templates
hg: improve implementations of `successors` and `precursors` properties of Mercurial changesets...
Manuel Jacob -
r7451:75f746df default
parent child Browse files
Show More
@@ -89,9 +89,11 b' class MercurialChangeset(BaseChangeset):'
89 @LazyProperty
89 @LazyProperty
90 def successors(self):
90 def successors(self):
91 try:
91 try:
92 # This works starting from Mercurial 4.3: the function `successorssets` was moved to the mercurial.obsutil module and gained the `closest` parameter.
92 from mercurial import obsutil
93 from mercurial import obsutil
93 successors = obsutil.successorssets(self._ctx._repo, self._ctx.node())
94 successors = obsutil.successorssets(self._ctx._repo, self._ctx.node(), closest=True)
94 except ImportError: # moved in Mercurial 4.3 (4f49810a1011)
95 except ImportError:
96 # fallback for older versions
95 successors = obsolete.successorssets(self._ctx._repo, self._ctx.node())
97 successors = obsolete.successorssets(self._ctx._repo, self._ctx.node())
96 if successors:
98 if successors:
97 # flatten the list here handles both divergent (len > 1)
99 # flatten the list here handles both divergent (len > 1)
@@ -102,17 +104,19 b' class MercurialChangeset(BaseChangeset):'
102
104
103 @LazyProperty
105 @LazyProperty
104 def predecessors(self):
106 def predecessors(self):
105 predecessors = set()
106 nm = self._ctx._repo.changelog.nodemap
107 try:
107 try:
108 raw_predecessors = self._ctx._repo.obsstore.predecessors
108 # This works starting from Mercurial 4.3: the function `closestpredecessors` was added.
109 except AttributeError: # renamed in Mercurial 4.4 (d5acd967f95a)
109 from mercurial import obsutil
110 raw_predecessors = self._ctx._repo.obsstore.precursors
110 return [hex(n)[:12] for n in obsutil.closestpredecessors(self._ctx._repo, self._ctx.node())]
111 for p in raw_predecessors.get(self._ctx.node(), ()):
111 except ImportError:
112 pr = nm.get(p[0])
112 # fallback for older versions
113 if pr is not None:
113 predecessors = set()
114 predecessors.add(hex(p[0])[:12])
114 nm = self._ctx._repo.changelog.nodemap
115 return predecessors
115 for p in self._ctx._repo.obsstore.precursors.get(self._ctx.node(), ()):
116 pr = nm.get(p[0])
117 if pr is not None:
118 predecessors.add(hex(p[0])[:12])
119 return predecessors
116
120
117 @LazyProperty
121 @LazyProperty
118 def bookmarks(self):
122 def bookmarks(self):
@@ -591,4 +591,4 b' class TestMercurialChangeset(object):'
591
591
592 def test_predecessors(self):
592 def test_predecessors(self):
593 init_chset = self.repo.get_changeset(0)
593 init_chset = self.repo.get_changeset(0)
594 assert init_chset.predecessors == set([])
594 assert len(init_chset.predecessors) == 0
General Comments 0
You need to be logged in to leave comments. Login now