--- a/states.py Fri Jul 01 16:00:19 2011 +0200
+++ b/states.py Fri Jul 01 16:58:40 2011 +0200
@@ -82,10 +82,6 @@
else:
return 'heads'
- def enabled(self, ui):
- return ui.configbool('states', self.name, False)
-
-
ST2 = state('draft', _NOSHARE | _MUTABLE)
ST1 = state('ready', _MUTABLE, next=ST2)
ST0 = state('published', next=ST1)
@@ -131,6 +127,7 @@
repo.setstate(state, [repo.changelog.node(rev) for rev in revs])
return 0
return cmdmoveheads
+
for state in STATES:
if state.trackheads:
cmdmoveheads = makecmd(state)
@@ -218,7 +215,7 @@
def stateheads(self, state):
# look for a relevant state
- while state.trackheads and not state.next.enabled(self.ui):
+ while state.trackheads and state.next not in self._enabledstates:
state = state.next
# last state have no cached head.
if state.trackheads:
@@ -300,10 +297,41 @@
selected.add(candidate)
return sorted(selected)
+ ### enable // disable logic
+
+ @util.propertycache
+ def _enabledstates(self):
+ return self._readenabledstates()
+
+ def _readenabledstates(self):
+ states = set()
+ mapping = dict([(st.name, st) for st in STATES])
+ try:
+ f = self.opener('states/Enabled')
+ for line in f:
+ st = mapping.get(line.strip())
+ if st is not None:
+ states.add(st)
+ finally:
+ return states
+
+ def _writeenabledstates(self):
+ f = self.opener('states/Enabled', 'w', atomictemp=True)
+ try:
+ for st in self._enabledstates:
+ f.write(st.name + '\n')
+ f.rename()
+ finally:
+ f.close()
+
+ ### local clone support
+
def cancopy(self):
st = laststatewithout(_NOSHARE)
return ocancopy() and (self.stateheads(st) == self.heads())
+ ### pull // push support
+
def pull(self, remote, *args, **kwargs):
result = opull(remote, *args, **kwargs)
remoteheads = self._pullimmutableheads(remote)