diff --git a/hgext/mq.py b/hgext/mq.py --- a/hgext/mq.py +++ b/hgext/mq.py @@ -347,6 +347,7 @@ class queue(object): except error.ConfigError: self.gitmode = ui.config('mq', 'git', 'auto').lower() self.plainmode = ui.configbool('mq', 'plain', False) + self.checkapplied = True @util.propertycache def applied(self): @@ -3264,7 +3265,7 @@ def reposetup(ui, repo): return queue(self.ui, self.baseui, self.path) def abortifwdirpatched(self, errmsg, force=False): - if self.mq.applied and not force: + if self.mq.applied and self.mq.checkapplied and not force: parents = self.dirstate.parents() patches = [s.node for s in self.mq.applied] if parents[0] in patches or parents[1] in patches: @@ -3280,7 +3281,7 @@ def reposetup(ui, repo): editor, extra) def checkpush(self, force, revs): - if self.mq.applied and not force: + if self.mq.applied and self.mq.checkapplied and not force: outapplied = [e.node for e in self.mq.applied] if revs: # Assume applied patches have no non-patch descendants and diff --git a/hgext/shelve.py b/hgext/shelve.py --- a/hgext/shelve.py +++ b/hgext/shelve.py @@ -156,7 +156,11 @@ def createcmd(ui, repo, pats, opts): # check modified, added, removed, deleted only for flist in repo.status(match=match)[:4]: shelvedfiles.extend(flist) - return repo.commit(message, user, opts.get('date'), match) + saved, repo.mq.checkapplied = repo.mq.checkapplied, False + try: + return repo.commit(message, user, opts.get('date'), match) + finally: + repo.mq.checkapplied = saved if parent.node() != nullid: desc = parent.description().split('\n', 1)[0] diff --git a/tests/test-shelve.t b/tests/test-shelve.t --- a/tests/test-shelve.t +++ b/tests/test-shelve.t @@ -1,7 +1,9 @@ $ echo "[extensions]" >> $HGRCPATH + $ echo "mq=" >> $HGRCPATH $ echo "shelve=" >> $HGRCPATH $ echo "[defaults]" >> $HGRCPATH $ echo "diff = --nodates --git" >> $HGRCPATH + $ echo "qnew = --date '0 0'" >> $HGRCPATH $ hg init repo $ cd repo @@ -33,11 +35,12 @@ shelving in an empty repo should be poss nothing changed [1] -create another commit +create an mq patch - shelving should work fine with a patch applied $ echo n > n $ hg add n $ hg commit n -m second + $ hg qnew second.patch shelve a change that we will delete later @@ -79,11 +82,11 @@ the common case - no options or filename ensure that our shelved changes exist $ hg shelve -l - default-01 (*) second (glob) - default (*) second (glob) + default-01 (*) [mq]: second.patch (glob) + default (*) [mq]: second.patch (glob) $ hg shelve -l -p default - default (*) second (glob) + default (*) [mq]: second.patch (glob) diff --git a/a/a b/a/a --- a/a/a @@ -95,6 +98,7 @@ ensure that our shelved changes exist delete our older shelved change $ hg shelve -d default + $ hg qfinish -a -q local edits should prevent a shelved change from applying @@ -203,11 +207,11 @@ force a conflicted merge to occur ensure that we have a merge with unresolved conflicts $ hg heads -q - 3:6ea6529cfc65 - 2:ceefc37abe1e + 4:cebf2b8de087 + 3:2e69b451d1ea $ hg parents -q - 2:ceefc37abe1e - 3:6ea6529cfc65 + 3:2e69b451d1ea + 4:cebf2b8de087 $ hg status M a/a M b.rename/b @@ -268,9 +272,9 @@ abort the unshelve and be happy $ hg unshelve -a unshelve of 'default' aborted $ hg heads -q - 2:ceefc37abe1e + 3:2e69b451d1ea $ hg parents - changeset: 2:ceefc37abe1e + changeset: 3:2e69b451d1ea tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 @@ -314,14 +318,14 @@ attempt to continue ensure the repo is as we hope $ hg parents - changeset: 2:ceefc37abe1e + changeset: 3:2e69b451d1ea tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: second $ hg heads -q - 2:ceefc37abe1e + 3:2e69b451d1ea $ hg status -C M a/a @@ -386,7 +390,7 @@ if we resolve a conflict while unshelvin merging a/a 0 files updated, 1 files merged, 0 files removed, 0 files unresolved $ hg parents -q - 4:be7e79683c99 + 5:01ba9745dc5a $ hg shelve -l $ hg status M a/a