226 o_writejournal = repo._writejournal |
226 o_writejournal = repo._writejournal |
227 class statefulrepo(repo.__class__): |
227 class statefulrepo(repo.__class__): |
228 |
228 |
229 def nodestate(self, node): |
229 def nodestate(self, node): |
230 rev = self.changelog.rev(node) |
230 rev = self.changelog.rev(node) |
|
231 |
231 for state in STATES: |
232 for state in STATES: |
232 # XXX avoid for untracked heads |
233 # XXX avoid for untracked heads |
233 if state.next is not None: |
234 if state.next is not None: |
234 revs = scmutil.revrange(self, ["::%s()" % state.headssymbol]) |
235 ancestors = map(self.changelog.rev, self.stateheads(state)) |
235 if rev in revs: |
236 ancestors.extend(self.changelog.ancestors(*ancestors)) |
|
237 if rev in ancestors: |
236 break |
238 break |
237 return state |
239 return state |
238 |
240 |
239 |
241 |
240 |
242 |
308 self.setstate(state.next, nodes) # cascading |
310 self.setstate(state.next, nodes) # cascading |
309 |
311 |
310 def _reducehead(self, candidates): |
312 def _reducehead(self, candidates): |
311 selected = set() |
313 selected = set() |
312 st = laststatewithout(_NOSHARE) |
314 st = laststatewithout(_NOSHARE) |
313 for candidate in candidates: |
315 candidates = set(map(self.changelog.rev, candidates)) |
314 rev = self.changelog.rev(candidate) |
316 heads = set(map(self.changelog.rev, self.stateheads(st))) |
315 ok = True |
317 shareable = set(self.changelog.ancestors(*heads)) |
316 for h in self.stateheads(st): |
318 shareable.update(heads) |
317 revh = self.changelog.rev(h) |
319 selected = candidates & shareable |
|
320 unselected = candidates - shareable |
|
321 for rev in unselected: |
|
322 for revh in heads: |
318 if self.changelog.descendant(revh, rev): |
323 if self.changelog.descendant(revh, rev): |
319 ok = False |
324 selected.add(revh) |
320 selected.add(h) |
325 return sorted(map(self.changelog.node, selected)) |
321 if ok: |
|
322 selected.add(candidate) |
|
323 return sorted(selected) |
|
324 |
326 |
325 ### enable // disable logic |
327 ### enable // disable logic |
326 |
328 |
327 @util.propertycache |
329 @util.propertycache |
328 def _enabledstates(self): |
330 def _enabledstates(self): |