##// END OF EJS Templates
repoview: split _gethiddenblockers...
David Soria Parra -
r22149:16ef2c48 default
parent child Browse files
Show More
@@ -19,13 +19,14 b' def hideablerevs(repo):'
19 This is a standalone function to help extensions to wrap it."""
19 This is a standalone function to help extensions to wrap it."""
20 return obsolete.getrevs(repo, 'obsolete')
20 return obsolete.getrevs(repo, 'obsolete')
21
21
22 def _gethiddenblockers(repo):
22 def _getstaticblockers(repo):
23 """Get revisions that will block hidden changesets from being filtered
23 """Cacheable revisions blocking hidden changesets from being filtered.
24
24
25 Additional non-cached hidden blockers are computed in _getdynamicblockers.
25 This is a standalone function to help extensions to wrap it."""
26 This is a standalone function to help extensions to wrap it."""
26 assert not repo.changelog.filteredrevs
27 assert not repo.changelog.filteredrevs
27 hideable = hideablerevs(repo)
28 hideable = hideablerevs(repo)
28 blockers = []
29 blockers = set()
29 if hideable:
30 if hideable:
30 # We use cl to avoid recursive lookup from repo[xxx]
31 # We use cl to avoid recursive lookup from repo[xxx]
31 cl = repo.changelog
32 cl = repo.changelog
@@ -33,16 +34,26 b' def _gethiddenblockers(repo):'
33 revs = cl.revs(start=firsthideable)
34 revs = cl.revs(start=firsthideable)
34 tofilter = repo.revs(
35 tofilter = repo.revs(
35 '(%ld) and children(%ld)', list(revs), list(hideable))
36 '(%ld) and children(%ld)', list(revs), list(hideable))
36 blockers = set([r for r in tofilter if r not in hideable])
37 blockers.update([r for r in tofilter if r not in hideable])
37 for par in repo[None].parents():
38 return blockers
38 blockers.add(par.rev())
39
39 for bm in repo._bookmarks.values():
40 def _getdynamicblockers(repo):
40 blockers.add(cl.rev(bm))
41 """Non-cacheable revisions blocking hidden changesets from being filtered.
41 tags = {}
42
42 tagsmod.readlocaltags(repo.ui, repo, tags, {})
43 Get revisions that will block hidden changesets and are likely to change,
43 if tags:
44 but unlikely to create hidden blockers. They won't be cached, so be careful
44 rev, nodemap = cl.rev, cl.nodemap
45 with adding additional computation."""
45 blockers.update(rev(t[0]) for t in tags.values() if t[0] in nodemap)
46
47 cl = repo.changelog
48 blockers = set()
49 blockers.update([par.rev() for par in repo[None].parents()])
50 blockers.update([cl.rev(bm) for bm in repo._bookmarks.values()])
51
52 tags = {}
53 tagsmod.readlocaltags(repo.ui, repo, tags, {})
54 if tags:
55 rev, nodemap = cl.rev, cl.nodemap
56 blockers.update(rev(t[0]) for t in tags.values() if t[0] in nodemap)
46 return blockers
57 return blockers
47
58
48 def computehidden(repo):
59 def computehidden(repo):
@@ -50,12 +61,20 b' def computehidden(repo):'
50
61
51 During most operation hidden should be filtered."""
62 During most operation hidden should be filtered."""
52 assert not repo.changelog.filteredrevs
63 assert not repo.changelog.filteredrevs
64 hidden = frozenset()
53 hideable = hideablerevs(repo)
65 hideable = hideablerevs(repo)
54 if hideable:
66 if hideable:
55 cl = repo.changelog
67 cl = repo.changelog
56 blocked = cl.ancestors(_gethiddenblockers(repo), inclusive=True)
68 blocked = cl.ancestors(_getstaticblockers(repo), inclusive=True)
57 return frozenset(r for r in hideable if r not in blocked)
69 hidden = frozenset(r for r in hideable if r not in blocked)
58 return frozenset()
70
71 # check if we have wd parents, bookmarks or tags pointing to hidden
72 # changesets and remove those.
73 dynamic = hidden & _getdynamicblockers(repo)
74 if dynamic:
75 blocked = cl.ancestors(dynamic, inclusive=True)
76 hidden = frozenset(r for r in hidden if r not in blocked)
77 return hidden
59
78
60 def computeunserved(repo):
79 def computeunserved(repo):
61 """compute the set of revision that should be filtered when used a server
80 """compute the set of revision that should be filtered when used a server
General Comments 0
You need to be logged in to leave comments. Login now