# HG changeset patch # User Pierre-Yves David # Date 1306281852 -7200 # Node ID 6312fc525a5474972acb0d3d8bb8cf6d9327d2cf # Parent 47ba990eff0e76c32295f34454f396d344a3f698 rename state related attributes frozen is now published public is now ready diff -r 47ba990eff0e -r 6312fc525a54 states.py --- a/states.py Wed May 25 01:50:23 2011 +0200 +++ b/states.py Wed May 25 02:04:12 2011 +0200 @@ -78,11 +78,11 @@ else: return 'heads' -STDRAFT = state('draft', _NOSHARE | _MUTABLE) -STREADY = state('ready', _MUTABLE, next=STDRAFT) -STPUBLISHED = state('published', next=STREADY) +ST2 = state('draft', _NOSHARE | _MUTABLE) +ST1 = state('ready', _MUTABLE, next=ST2) +ST0 = state('published', next=ST1) -STATES = (STPUBLISHED, STREADY, STDRAFT) +STATES = (ST0, ST1, ST2) # util function ############################# @@ -116,8 +116,7 @@ ############################# def cmdsetstate(ui, repo, statename, *changesets): - """turn private changesets into public ones""" - #assert repo.ui.configbool('private', 'enable', False) + """change changeset state""" for state in STATES: # few states if state.name == statename: break @@ -154,7 +153,7 @@ # Write protocols #################### def heads(repo, proto): - h = repo._publicheads + h = repo._readyheads return wireproto.encodelist(h) + "\n" def _reducehead(wirerepo, heads): @@ -174,26 +173,27 @@ def nodestate(self, node): rev = self.changelog.rev(node) - for head in self._publicheads: + for head in self._readyheads: revhead = self.changelog.rev(head) if self.changelog.descendant(revhead, rev): return STATES[2] - for head in self._frozenheads: + for head in self._publishedheads: revhead = self.changelog.rev(head) if self.changelog.descendant(revhead, rev): return STATES[1] return STATES[0] + @property - def _publicheads(self): - if self.ui.configbool('states', 'private', False): - return self._statesheads[STREADY] + def _readyheads(self): + if self.ui.configbool('states', ST1.next.name, False): + return self._statesheads[ST1] return self.heads() @property - def _frozenheads(self): - if self.ui.configbool('states', 'liquid', False): - return self._statesheads[STPUBLISHED] + def _publishedheads(self): + if self.ui.configbool('states', ST0.next.name, False): + return self._statesheads[ST0] return self.heads() @util.propertycache @@ -214,8 +214,10 @@ return heads def _readstatesheads(self): statesheads = {} - statesheads[STPUBLISHED] = self._readheadsfile('frozenheads') - statesheads[STREADY] = self._readheadsfile('publicheads') + for state in STATES: + if state.trackheads: + filename = 'states/%s-heads' % state.name + statesheads[state] = self._readheadsfile(filename) return statesheads def _writeheadsfile(self, filename, heads): @@ -229,8 +231,10 @@ def _writestateshead(self): # transaction! - self._writeheadsfile('frozenheads', self._statesheads[STPUBLISHED]) - self._writeheadsfile('publicheads', self._statesheads[STREADY]) + for state in STATES: + if state.trackheads: + filename = 'states/%s-heads' % state.name + self._writeheadsfile(filename, self._statesheads[state]) def setstate(self, state, nodes): """freeze targets changeset and it's ancestors. @@ -254,7 +258,7 @@ for candidate in candidates: rev = self.changelog.rev(candidate) ok = True - for h in self._publicheads: + for h in self._readyheads: revh = self.changelog.rev(h) if self.changelog.descendant(revh, rev): ok = False @@ -264,7 +268,7 @@ return sorted(selected) def cancopy(self): - return o_cancopy() and (self._publicheads == self.heads()) + return o_cancopy() and (self._readyheads == self.heads()) repo.__class__ = statefulrepo diff -r 47ba990eff0e -r 6312fc525a54 tests/test-draft.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-draft.t Wed May 25 02:04:12 2011 +0200 @@ -0,0 +1,209 @@ + $ cat >> $HGRCPATH < [web] + > push_ssl = false + > allow_push = * + > [extensions] + > EOF + $ echo "states=$(echo $(dirname $TESTDIR))/states.py" >> $HGRCPATH + + $ hg init local + $ hg init remote1 + $ hg init remote2 + $ cd local + $ echo "celestine" > babar + $ hg add babar + $ hg ci -m "add babar" + $ echo "la veille dame" > babar + $ hg ci -m "add dame" + $ hg log --template='{rev}:{node|short}: {state}\n' + 1:710fe444b3b0: published + 0:5caa672bac26: published + $ hg out ../remote1 --template='{rev}:{node|short}\n' + comparing with ../remote1 + searching for changes + 0:5caa672bac26 + 1:710fe444b3b0 + $ hg push ../remote1 + pushing to ../remote1 + searching for changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 1 files + $ hg setstate published 1 # until we fix push + $ echo "tree" >> savanna + $ hg add savanna + $ hg ci -m "terrain" + $ echo "flore" >> babar + $ hg ci -m "children" + $ hg log --template='{rev}:{node|short}: {state}\n' + 3:73585b17392a: published + 2:3c8695235a32: published + 1:710fe444b3b0: published + 0:5caa672bac26: published + +turn draft on (repo side) + $ cat > .hg/hgrc << EOF + > [states] + > draft=yes + > EOF + $ hg log --template='{rev}:{node|short}: {state}\n' + 3:73585b17392a: draft + 2:3c8695235a32: draft + 1:710fe444b3b0: published + 0:5caa672bac26: published + +test outgoing and push + $ hg out ../remote1 --template='{rev}:{node|short}\n' + comparing with ../remote1 + searching for changes + no changes found + [1] + $ hg push ../remote1 + pushing to ../remote1 + searching for changes + no changes found + + $ hg out ../remote2 --template='{rev}:{node|short}\n' + comparing with ../remote2 + searching for changes + 0:5caa672bac26 + 1:710fe444b3b0 + $ hg push ../remote2 + pushing to ../remote2 + searching for changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 1 files + +turn draft off again (repo side) + $ sed -i 's/^draft=.*$/draft=no/' .hg/hgrc + $ hg log --template='{rev}:{node|short}: {state}\n' + 3:73585b17392a: published + 2:3c8695235a32: published + 1:710fe444b3b0: published + 0:5caa672bac26: published + $ hg out ../remote1 --template='{rev}:{node|short}\n' + comparing with ../remote1 + searching for changes + 2:3c8695235a32 + 3:73585b17392a + +turn draft on again (repo side) + $ sed -i 's/^draft=.*$/draft=yes/' .hg/hgrc + +test incoming and pull + + $ hg init ../other1 + $ cd ../other1 + $ hg incoming ../local --template='{rev}:{node|short}\n' + comparing with ../local + 0:5caa672bac26 + 1:710fe444b3b0 + $ hg pull ../local + pulling from ../local + requesting all changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 1 files + (run 'hg update' to get a working copy) + $ hg log --template='{rev}:{node|short}\n' + 1:710fe444b3b0 + 0:5caa672bac26 + $ cd .. + $ hg clone local other2 + requesting all changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 1 files + updating to branch default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg -R other2 log --template='{rev}:{node|short}\n' + 1:710fe444b3b0 + 0:5caa672bac26 + +test on http + + $ hg -R local serve -p $HGPORT -d --pid-file=local.pid + $ cat local.pid >> "$DAEMON_PIDS" + $ hg clone http://localhost:$HGPORT/ fromhttp + requesting all changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 1 files + updating to branch default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg -R fromhttp log --template='{rev}:{node|short}\n' + 1:710fe444b3b0 + 0:5caa672bac26 + + $ hg init fromhttp2 + $ cd fromhttp2 + $ hg inc http://localhost:$HGPORT/ --template='{rev}:{node|short}\n' + comparing with http://localhost:$HGPORT/ + 0:5caa672bac26 + 1:710fe444b3b0 + $ hg pull http://localhost:$HGPORT/ + pulling from http://localhost:$HGPORT/ + requesting all changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 1 files + (run 'hg update' to get a working copy) + $ hg log --template='{rev}:{node|short}\n' + 1:710fe444b3b0 + 0:5caa672bac26 + $ hg inc http://localhost:$HGPORT/ --template='{rev}:{node|short}\n' + comparing with http://localhost:$HGPORT/ + searching for changes + no changes found + [1] + +turn draft off again (repo side) + $ cd .. + $ "$TESTDIR/killdaemons.py" + $ sed -i 's/^draft=.*$/draft=off/' ./local/.hg/hgrc + $ hg -R local serve -p $HGPORT -d --pid-file=local.pid + $ cat local.pid >> "$DAEMON_PIDS" + $ cd fromhttp2 + + $ hg inc http://localhost:$HGPORT/ --template='{rev}:{node|short}\n' + comparing with http://localhost:$HGPORT/ + searching for changes + 2:3c8695235a32 + 3:73585b17392a + $ hg pull http://localhost:$HGPORT/ + pulling from http://localhost:$HGPORT/ + searching for changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 2 files + (run 'hg update' to get a working copy) + $ cd .. + $ "$TESTDIR/killdaemons.py" + +turn draft on again (repo side) + $ sed -i 's/^draft=.*$/draft=on/' local/.hg/hgrc + $ hg init httpto + $ hg -R httpto serve -p $HGPORT -d --pid-file=remote.pid + $ cat remote.pid >> "$DAEMON_PIDS" + $ cd local + $ hg out http://localhost:$HGPORT/ --template='{rev}:{node|short}\n' + comparing with http://localhost:$HGPORT/ + searching for changes + 0:5caa672bac26 + 1:710fe444b3b0 + $ hg push http://localhost:$HGPORT/ + pushing to http://localhost:$HGPORT/ + searching for changes + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 2 changesets with 2 changes to 1 files + $ "$TESTDIR/killdaemons.py" diff -r 47ba990eff0e -r 6312fc525a54 tests/test-private.t --- a/tests/test-private.t Wed May 25 01:50:23 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,209 +0,0 @@ - $ cat >> $HGRCPATH < [web] - > push_ssl = false - > allow_push = * - > [extensions] - > EOF - $ echo "states=$(echo $(dirname $TESTDIR))/states.py" >> $HGRCPATH - - $ hg init local - $ hg init remote1 - $ hg init remote2 - $ cd local - $ echo "celestine" > babar - $ hg add babar - $ hg ci -m "add babar" - $ echo "la veille dame" > babar - $ hg ci -m "add dame" - $ hg log --template='{rev}:{node|short}: {state}\n' - 1:710fe444b3b0: published - 0:5caa672bac26: published - $ hg out ../remote1 --template='{rev}:{node|short}\n' - comparing with ../remote1 - searching for changes - 0:5caa672bac26 - 1:710fe444b3b0 - $ hg push ../remote1 - pushing to ../remote1 - searching for changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 1 files - $ hg setstate published 1 # until we fix push - $ echo "tree" >> savanna - $ hg add savanna - $ hg ci -m "terrain" - $ echo "flore" >> babar - $ hg ci -m "children" - $ hg log --template='{rev}:{node|short}: {state}\n' - 3:73585b17392a: published - 2:3c8695235a32: published - 1:710fe444b3b0: published - 0:5caa672bac26: published - -turn private on (repo side) - $ cat > .hg/hgrc << EOF - > [states] - > private=yes - > EOF - $ hg log --template='{rev}:{node|short}: {state}\n' - 3:73585b17392a: draft - 2:3c8695235a32: draft - 1:710fe444b3b0: published - 0:5caa672bac26: published - -test outgoing and push - $ hg out ../remote1 --template='{rev}:{node|short}\n' - comparing with ../remote1 - searching for changes - no changes found - [1] - $ hg push ../remote1 - pushing to ../remote1 - searching for changes - no changes found - - $ hg out ../remote2 --template='{rev}:{node|short}\n' - comparing with ../remote2 - searching for changes - 0:5caa672bac26 - 1:710fe444b3b0 - $ hg push ../remote2 - pushing to ../remote2 - searching for changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 1 files - -turn private off again (repo side) - $ sed -i 's/^private=.*$/private=no/' .hg/hgrc - $ hg log --template='{rev}:{node|short}: {state}\n' - 3:73585b17392a: published - 2:3c8695235a32: published - 1:710fe444b3b0: published - 0:5caa672bac26: published - $ hg out ../remote1 --template='{rev}:{node|short}\n' - comparing with ../remote1 - searching for changes - 2:3c8695235a32 - 3:73585b17392a - -turn private on again (repo side) - $ sed -i 's/^private=.*$/private=yes/' .hg/hgrc - -test incoming and pull - - $ hg init ../other1 - $ cd ../other1 - $ hg incoming ../local --template='{rev}:{node|short}\n' - comparing with ../local - 0:5caa672bac26 - 1:710fe444b3b0 - $ hg pull ../local - pulling from ../local - requesting all changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 1 files - (run 'hg update' to get a working copy) - $ hg log --template='{rev}:{node|short}\n' - 1:710fe444b3b0 - 0:5caa672bac26 - $ cd .. - $ hg clone local other2 - requesting all changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 1 files - updating to branch default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg -R other2 log --template='{rev}:{node|short}\n' - 1:710fe444b3b0 - 0:5caa672bac26 - -test on http - - $ hg -R local serve -p $HGPORT -d --pid-file=local.pid - $ cat local.pid >> "$DAEMON_PIDS" - $ hg clone http://localhost:$HGPORT/ fromhttp - requesting all changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 1 files - updating to branch default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg -R fromhttp log --template='{rev}:{node|short}\n' - 1:710fe444b3b0 - 0:5caa672bac26 - - $ hg init fromhttp2 - $ cd fromhttp2 - $ hg inc http://localhost:$HGPORT/ --template='{rev}:{node|short}\n' - comparing with http://localhost:$HGPORT/ - 0:5caa672bac26 - 1:710fe444b3b0 - $ hg pull http://localhost:$HGPORT/ - pulling from http://localhost:$HGPORT/ - requesting all changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 1 files - (run 'hg update' to get a working copy) - $ hg log --template='{rev}:{node|short}\n' - 1:710fe444b3b0 - 0:5caa672bac26 - $ hg inc http://localhost:$HGPORT/ --template='{rev}:{node|short}\n' - comparing with http://localhost:$HGPORT/ - searching for changes - no changes found - [1] - -turn private off again (repo side) - $ cd .. - $ "$TESTDIR/killdaemons.py" - $ sed -i 's/^private=.*$/private=off/' ./local/.hg/hgrc - $ hg -R local serve -p $HGPORT -d --pid-file=local.pid - $ cat local.pid >> "$DAEMON_PIDS" - $ cd fromhttp2 - - $ hg inc http://localhost:$HGPORT/ --template='{rev}:{node|short}\n' - comparing with http://localhost:$HGPORT/ - searching for changes - 2:3c8695235a32 - 3:73585b17392a - $ hg pull http://localhost:$HGPORT/ - pulling from http://localhost:$HGPORT/ - searching for changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 2 files - (run 'hg update' to get a working copy) - $ cd .. - $ "$TESTDIR/killdaemons.py" - -turn private on again (repo side) - $ sed -i 's/^private=.*$/private=on/' local/.hg/hgrc - $ hg init httpto - $ hg -R httpto serve -p $HGPORT -d --pid-file=remote.pid - $ cat remote.pid >> "$DAEMON_PIDS" - $ cd local - $ hg out http://localhost:$HGPORT/ --template='{rev}:{node|short}\n' - comparing with http://localhost:$HGPORT/ - searching for changes - 0:5caa672bac26 - 1:710fe444b3b0 - $ hg push http://localhost:$HGPORT/ - pushing to http://localhost:$HGPORT/ - searching for changes - remote: adding changesets - remote: adding manifests - remote: adding file changes - remote: added 2 changesets with 2 changes to 1 files - $ "$TESTDIR/killdaemons.py"