Show More
@@ -112,6 +112,7 b' from .node import (' | |||
|
112 | 112 | nullid, |
|
113 | 113 | nullrev, |
|
114 | 114 | short, |
|
115 | wdirrev, | |
|
115 | 116 | ) |
|
116 | 117 | from .pycompat import ( |
|
117 | 118 | getattr, |
@@ -242,6 +243,7 b' class phasecache(object):' | |||
|
242 | 243 | """return a smartset for the given phases""" |
|
243 | 244 | self.loadphaserevs(repo) # ensure phase's sets are loaded |
|
244 | 245 | phases = set(phases) |
|
246 | ||
|
245 | 247 | if public not in phases: |
|
246 | 248 | # fast path: _phasesets contains the interesting sets, |
|
247 | 249 | # might only need a union and post-filtering. |
@@ -252,21 +254,39 b' class phasecache(object):' | |||
|
252 | 254 | revs = set.union(*[self._phasesets[p] for p in phases]) |
|
253 | 255 | if repo.changelog.filteredrevs: |
|
254 | 256 | revs = revs - repo.changelog.filteredrevs |
|
257 | ||
|
255 | 258 | if subset is None: |
|
256 | 259 | return smartset.baseset(revs) |
|
257 | 260 | else: |
|
261 | if wdirrev in subset and repo[None].phase() in phases: | |
|
262 | # The working dir would never be in the cache, but it was | |
|
263 | # in the subset being filtered for its phase, so add it to | |
|
264 | # the output. | |
|
265 | revs.add(wdirrev) | |
|
266 | ||
|
258 | 267 | return subset & smartset.baseset(revs) |
|
259 | 268 | else: |
|
269 | # phases keeps all the *other* phases. | |
|
260 | 270 | phases = set(allphases).difference(phases) |
|
261 | 271 | if not phases: |
|
262 | 272 | return smartset.fullreposet(repo) |
|
273 | ||
|
274 | # revs has the revisions in all *other* phases. | |
|
263 | 275 | if len(phases) == 1: |
|
264 | 276 | [p] = phases |
|
265 | 277 | revs = self._phasesets[p] |
|
266 | 278 | else: |
|
267 | 279 | revs = set.union(*[self._phasesets[p] for p in phases]) |
|
280 | ||
|
268 | 281 | if subset is None: |
|
269 | 282 | subset = smartset.fullreposet(repo) |
|
283 | ||
|
284 | if wdirrev in subset and repo[None].phase() in phases: | |
|
285 | # The working dir is in the subset being filtered, and its | |
|
286 | # phase is in the phases *not* being returned, so add it to the | |
|
287 | # set of revisions to filter out. | |
|
288 | revs.add(wdirrev) | |
|
289 | ||
|
270 | 290 | if not revs: |
|
271 | 291 | return subset |
|
272 | 292 | return subset.filter(lambda r: r not in revs) |
@@ -48,13 +48,58 b' Following commit are draft too' | |||
|
48 | 48 | 1 1 B |
|
49 | 49 | 0 1 A |
|
50 | 50 | |
|
51 | Draft commit are properly created over public one: | |
|
51 | Working directory phase is secret when its parent is secret. | |
|
52 | ||
|
53 | $ hg phase --force --secret . | |
|
54 | test-debug-phase: move rev 0: 1 -> 2 | |
|
55 | test-debug-phase: move rev 1: 1 -> 2 | |
|
56 | test-hook-close-phase: 4a2df7238c3b48766b5e22fafbb8a2f506ec8256: draft -> secret | |
|
57 | test-hook-close-phase: 27547f69f25460a52fff66ad004e58da7ad3fb56: draft -> secret | |
|
58 | $ hg log -r 'wdir()' -T '{phase}\n' | |
|
59 | secret | |
|
60 | $ hg log -r 'wdir() and public()' -T '{phase}\n' | |
|
61 | $ hg log -r 'wdir() and draft()' -T '{phase}\n' | |
|
62 | $ hg log -r 'wdir() and secret()' -T '{phase}\n' | |
|
63 | secret | |
|
64 | ||
|
65 | Working directory phase is draft when its parent is draft. | |
|
66 | ||
|
67 | $ hg phase --draft . | |
|
68 | test-debug-phase: move rev 1: 2 -> 1 | |
|
69 | test-hook-close-phase: 27547f69f25460a52fff66ad004e58da7ad3fb56: secret -> draft | |
|
70 | $ hg log -r 'wdir()' -T '{phase}\n' | |
|
71 | draft | |
|
72 | $ hg log -r 'wdir() and public()' -T '{phase}\n' | |
|
73 | $ hg log -r 'wdir() and draft()' -T '{phase}\n' | |
|
74 | draft | |
|
75 | $ hg log -r 'wdir() and secret()' -T '{phase}\n' | |
|
76 | ||
|
77 | Working directory phase is secret when a new commit will be created as secret, | |
|
78 | even if the parent is draft. | |
|
79 | ||
|
80 | $ hg log -r 'wdir() and secret()' -T '{phase}\n' \ | |
|
81 | > --config phases.new-commit='secret' | |
|
82 | secret | |
|
83 | ||
|
84 | Working directory phase is draft when its parent is public. | |
|
52 | 85 | |
|
53 | 86 |
$ |
|
54 | 87 | test-debug-phase: move rev 0: 1 -> 0 |
|
55 | 88 | test-debug-phase: move rev 1: 1 -> 0 |
|
56 | 89 | test-hook-close-phase: 4a2df7238c3b48766b5e22fafbb8a2f506ec8256: draft -> public |
|
57 | 90 | test-hook-close-phase: 27547f69f25460a52fff66ad004e58da7ad3fb56: draft -> public |
|
91 | $ hg log -r 'wdir()' -T '{phase}\n' | |
|
92 | draft | |
|
93 | $ hg log -r 'wdir() and public()' -T '{phase}\n' | |
|
94 | $ hg log -r 'wdir() and draft()' -T '{phase}\n' | |
|
95 | draft | |
|
96 | $ hg log -r 'wdir() and secret()' -T '{phase}\n' | |
|
97 | $ hg log -r 'wdir() and secret()' -T '{phase}\n' \ | |
|
98 | > --config phases.new-commit='secret' | |
|
99 | secret | |
|
100 | ||
|
101 | Draft commit are properly created over public one: | |
|
102 | ||
|
58 | 103 | $ hg phase |
|
59 | 104 | 1: public |
|
60 | 105 | $ hglog |
General Comments 0
You need to be logged in to leave comments.
Login now