# HG changeset patch # User Yuya Nishihara # Date 2015-08-28 02:14:24 # Node ID df41c7be16d69e2e4c57c35ea90a1e52fdf3b781 # Parent 204131131766ee97e1733be4ef19f4963fa422d9 reachableroots: construct and sort baseset in revset module This can remove the dependency from changelog to revset, which seems a bit awkward for me. diff --git a/mercurial/changelog.py b/mercurial/changelog.py --- a/mercurial/changelog.py +++ b/mercurial/changelog.py @@ -18,7 +18,6 @@ from . import ( encoding, error, revlog, - revset, util, ) @@ -186,10 +185,7 @@ class changelog(revlog.revlog): return self._nodecache def reachableroots(self, minroot, heads, roots, includepath=False): - rroots = self.index.reachableroots2(minroot, heads, roots, includepath) - rroots = revset.baseset(rroots) - rroots.sort() - return rroots + return self.index.reachableroots2(minroot, heads, roots, includepath) def headrevs(self): if self.filteredrevs: diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -92,7 +92,7 @@ def reachablerootspure(repo, minroot, ro If includepath is True, return (::).""" if not roots: - return baseset() + return [] parentrevs = repo.changelog.parentrevs roots = set(roots) visit = list(heads) @@ -123,8 +123,6 @@ def reachablerootspure(repo, minroot, ro for parent in seen[rev]: if parent in reachable: reached(rev) - reachable = baseset(reachable) - reachable.sort() return reachable def reachableroots(repo, roots, heads, includepath=False): @@ -137,9 +135,12 @@ def reachableroots(repo, roots, heads, i roots = list(roots) heads = list(heads) try: - return repo.changelog.reachableroots(minroot, heads, roots, includepath) + revs = repo.changelog.reachableroots(minroot, heads, roots, includepath) except AttributeError: - return reachablerootspure(repo, minroot, roots, heads, includepath) + revs = reachablerootspure(repo, minroot, roots, heads, includepath) + revs = baseset(revs) + revs.sort() + return revs elements = { # token-type: binding-strength, primary, prefix, infix, suffix diff --git a/tests/test-parseindex.t b/tests/test-parseindex.t --- a/tests/test-parseindex.t +++ b/tests/test-parseindex.t @@ -96,9 +96,9 @@ Test SEGV caused by bad revision passed > print inst > EOF good heads: - 0: - 1: - -1: + 0: [0] + 1: [0] + -1: [] bad heads: 2: head out of range 10000: head out of range @@ -106,14 +106,14 @@ Test SEGV caused by bad revision passed -10000: head out of range None: an integer is required good roots: - 0: - 1: - -1: + 0: [0] + 1: [1] + -1: [-1] out-of-range roots are ignored: - 2: - 10000: - -2: - -10000: + 2: [] + 10000: [] + -2: [] + -10000: [] bad roots: None: an integer is required