# HG changeset patch # User Matt Mackall # Date 1328125845 21600 # Node ID e9c93d60a2b50c91558d2f29c813101bc8142ef2 # Parent 140b6282ac79006018df175eff05e49f10c8591f# Parent cdc547297c2333d469be576ad930f7fee6d4e853 merge with i18n diff -r cdc547297c23 -r e9c93d60a2b5 hgext/mq.py --- a/hgext/mq.py Tue Jan 31 18:11:08 2012 -0200 +++ b/hgext/mq.py Wed Feb 01 13:50:45 2012 -0600 @@ -745,8 +745,11 @@ repo.dirstate.setparents(p1, merge) match = scmutil.matchfiles(repo, files or []) + oldtip = repo['tip'] n = secretcommit(repo, message, ph.user, ph.date, match=match, force=True) + if repo['tip'] == oldtip: + raise util.Abort(_("qpush exactly duplicates child changeset")) if n is None: raise util.Abort(_("repository commit failed")) @@ -1310,6 +1313,10 @@ if heads != [self.applied[-1].node]: raise util.Abort(_("popping would remove a revision not " "managed by this patch queue")) + if not repo[self.applied[-1].node].mutable(): + raise util.Abort( + _("popping would remove an immutable revision"), + hint=_('see "hg help phases" for details')) # we know there are no local changes, so we can make a simplified # form of hg.update. @@ -1371,6 +1378,9 @@ (top, patchfn) = (self.applied[-1].node, self.applied[-1].name) if repo.changelog.heads(top) != [top]: raise util.Abort(_("cannot refresh a revision with children")) + if not repo[top].mutable(): + raise util.Abort(_("cannot refresh immutable revision"), + hint=_('see "hg help phases" for details')) inclsubs = self.checksubstate(repo) diff -r cdc547297c23 -r e9c93d60a2b5 mercurial/bundlerepo.py --- a/mercurial/bundlerepo.py Tue Jan 31 18:11:08 2012 -0200 +++ b/mercurial/bundlerepo.py Wed Feb 01 13:50:45 2012 -0600 @@ -14,7 +14,7 @@ from node import nullid from i18n import _ import os, tempfile, shutil -import changegroup, util, mdiff, discovery +import changegroup, util, mdiff, discovery, cmdutil import localrepo, changelog, manifest, filelog, revlog, error class bundlerevlog(revlog.revlog): @@ -274,6 +274,11 @@ if create: raise util.Abort(_('cannot create new bundle repository')) parentpath = ui.config("bundle", "mainreporoot", "") + if not parentpath: + # try to find the correct path to the working directory repo + parentpath = cmdutil.findrepo(os.getcwd()) + if parentpath is None: + parentpath = '' if parentpath: # Try to make the full path relative so we get a nice, short URL. # In particular, we don't want temp dir names in test outputs. diff -r cdc547297c23 -r e9c93d60a2b5 mercurial/help/phases.txt --- a/mercurial/help/phases.txt Tue Jan 31 18:11:08 2012 -0200 +++ b/mercurial/help/phases.txt Wed Feb 01 13:50:45 2012 -0600 @@ -77,4 +77,8 @@ hg log --template "{rev} {phase}\n" + - resynchronize draft changesets relative to a remote repository:: + + hg phase -fd 'outgoing(URL)' + See :hg:`help phase` for more information on manually manipulating phases. diff -r cdc547297c23 -r e9c93d60a2b5 tests/test-mq-safety.t --- a/tests/test-mq-safety.t Tue Jan 31 18:11:08 2012 -0200 +++ b/tests/test-mq-safety.t Wed Feb 01 13:50:45 2012 -0600 @@ -1,5 +1,6 @@ $ echo '[extensions]' >> $HGRCPATH - $ echo 'mq =' >> $HGRCPATH + $ echo 'hgext.mq =' >> $HGRCPATH + $ echo 'hgext.graphlog =' >> $HGRCPATH $ hg init repo $ cd repo @@ -17,6 +18,35 @@ $ echo bar >> foo $ hg qrefresh -m 'append bar' +Try to operate on public mq changeset + + $ hg qpop + popping bar + now at: foo + $ hg phase --public qbase + $ echo babar >> foo + $ hg qref + abort: cannot refresh immutable revision + (see "hg help phases" for details) + [255] + $ hg revert -a + reverting foo + $ hg qpop + abort: popping would remove an immutable revision + (see "hg help phases" for details) + [255] + $ hg qfold bar + abort: cannot refresh immutable revision + (see "hg help phases" for details) + [255] + $ hg revert -a + reverting foo + +restore state for remaining test + + $ hg qpush + applying bar + now at: bar try to commit on top of a patch