# HG changeset patch # User David Soria Parra # Date 1377793335 25200 # Node ID 28b1b7b9b4a9b580f71ae8cb3e82f4d0a914a768 # Parent a3b2858827243f7059bf72be7f17976ef5b9e2c5 shelve: allow shelving of a change with an mq patch applied We allow shelving of of changes on top of a MQ repository. MQ will not allow repository changes on top of applied patches. We introduce checkapplied in MQ to bypass this check. diff -r a3b285882724 -r 28b1b7b9b4a9 hgext/mq.py --- a/hgext/mq.py Tue Oct 01 12:20:31 2013 +0200 +++ b/hgext/mq.py Thu Aug 29 09:22:15 2013 -0700 @@ -347,6 +347,7 @@ 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 @@ 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 @@ 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 -r a3b285882724 -r 28b1b7b9b4a9 hgext/shelve.py --- a/hgext/shelve.py Tue Oct 01 12:20:31 2013 +0200 +++ b/hgext/shelve.py Thu Aug 29 09:22:15 2013 -0700 @@ -156,7 +156,11 @@ # 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 -r a3b285882724 -r 28b1b7b9b4a9 tests/test-shelve.t --- a/tests/test-shelve.t Tue Oct 01 12:20:31 2013 +0200 +++ b/tests/test-shelve.t Thu Aug 29 09:22:15 2013 -0700 @@ -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 @@ 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 @@ 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 @@ 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 @@ 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 @@ $ 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 @@ 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 @@ 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