Show More
@@ -323,6 +323,28 b' class phasecache(object):' | |||||
323 | self.filterunknown(repo) |
|
323 | self.filterunknown(repo) | |
324 | self.opener = repo.svfs |
|
324 | self.opener = repo.svfs | |
325 |
|
325 | |||
|
326 | def hasnonpublicphases(self, repo): | |||
|
327 | """detect if there are revisions with non-public phase""" | |||
|
328 | repo = repo.unfiltered() | |||
|
329 | cl = repo.changelog | |||
|
330 | if len(cl) >= self._loadedrevslen: | |||
|
331 | self.invalidate() | |||
|
332 | self.loadphaserevs(repo) | |||
|
333 | return any(self.phaseroots[1:]) | |||
|
334 | ||||
|
335 | def nonpublicphaseroots(self, repo): | |||
|
336 | """returns the roots of all non-public phases | |||
|
337 | ||||
|
338 | The roots are not minimized, so if the secret revisions are | |||
|
339 | descendants of draft revisions, their roots will still be present. | |||
|
340 | """ | |||
|
341 | repo = repo.unfiltered() | |||
|
342 | cl = repo.changelog | |||
|
343 | if len(cl) >= self._loadedrevslen: | |||
|
344 | self.invalidate() | |||
|
345 | self.loadphaserevs(repo) | |||
|
346 | return set().union(*[roots for roots in self.phaseroots[1:] if roots]) | |||
|
347 | ||||
326 | def getrevset(self, repo, phases, subset=None): |
|
348 | def getrevset(self, repo, phases, subset=None): | |
327 | """return a smartset for the given phases""" |
|
349 | """return a smartset for the given phases""" | |
328 | self.loadphaserevs(repo) # ensure phase's sets are loaded |
|
350 | self.loadphaserevs(repo) # ensure phase's sets are loaded |
@@ -129,7 +129,7 b' def computeunserved(repo, visibilityexce' | |||||
129 | def computemutable(repo, visibilityexceptions=None): |
|
129 | def computemutable(repo, visibilityexceptions=None): | |
130 | assert not repo.changelog.filteredrevs |
|
130 | assert not repo.changelog.filteredrevs | |
131 | # fast check to avoid revset call on huge repo |
|
131 | # fast check to avoid revset call on huge repo | |
132 |
if |
|
132 | if repo._phasecache.hasnonpublicphases(repo): | |
133 | getphase = repo._phasecache.phase |
|
133 | getphase = repo._phasecache.phase | |
134 | maymutable = filterrevs(repo, b'base') |
|
134 | maymutable = filterrevs(repo, b'base') | |
135 | return frozenset(r for r in maymutable if getphase(repo, r)) |
|
135 | return frozenset(r for r in maymutable if getphase(repo, r)) | |
@@ -154,9 +154,9 b' def computeimpactable(repo, visibilityex' | |||||
154 | assert not repo.changelog.filteredrevs |
|
154 | assert not repo.changelog.filteredrevs | |
155 | cl = repo.changelog |
|
155 | cl = repo.changelog | |
156 | firstmutable = len(cl) |
|
156 | firstmutable = len(cl) | |
157 |
|
|
157 | roots = repo._phasecache.nonpublicphaseroots(repo) | |
158 |
|
|
158 | if roots: | |
159 |
|
|
159 | firstmutable = min(firstmutable, min(cl.rev(r) for r in roots)) | |
160 | # protect from nullrev root |
|
160 | # protect from nullrev root | |
161 | firstmutable = max(0, firstmutable) |
|
161 | firstmutable = max(0, firstmutable) | |
162 | return frozenset(pycompat.xrange(firstmutable, len(cl))) |
|
162 | return frozenset(pycompat.xrange(firstmutable, len(cl))) |
General Comments 0
You need to be logged in to leave comments.
Login now