diff --git a/hgext/mq.py b/hgext/mq.py --- a/hgext/mq.py +++ b/hgext/mq.py @@ -1035,7 +1035,6 @@ class queue(object): self.checkpatchname(patchfn) inclsubs = checksubstate(repo) if inclsubs: - inclsubs.append('.hgsubstate') substatestate = repo.dirstate['.hgsubstate'] if opts.get('include') or opts.get('exclude') or pats: match = scmutil.match(repo[None], pats, opts) @@ -1045,14 +1044,14 @@ class queue(object): raise util.Abort('%s: %s' % (f, msg)) match.bad = badfn changes = repo.status(match=match) - m, a, r, d = changes[:4] else: changes = self.checklocalchanges(repo, force=True) - m, a, r, d = changes - match = scmutil.matchfiles(repo, m + a + r + inclsubs) + commitfiles = list(inclsubs) + for files in changes[:3]: + commitfiles.extend([f for f in files if f != '.hgsubstate']) + match = scmutil.matchfiles(repo, commitfiles) if len(repo[None].parents()) > 1: raise util.Abort(_('cannot manage merge changesets')) - commitfiles = m + a + r self.checktoppatch(repo) insert = self.fullseriesend() wlock = repo.wlock() @@ -1492,7 +1491,6 @@ class queue(object): inclsubs = checksubstate(repo, hex(patchparent)) if inclsubs: - inclsubs.append('.hgsubstate') substatestate = repo.dirstate['.hgsubstate'] ph = patchheader(self.join(patchfn), self.plainmode) @@ -1579,7 +1577,7 @@ class queue(object): files = set(inclsubs) for x in refreshchanges: - files.update(x) + files.update([f for f in x if f != '.hgsubstate']) match = scmutil.matchfiles(repo, files) bmlist = repo[top].bookmarks() diff --git a/tests/test-mq-subrepo.t b/tests/test-mq-subrepo.t --- a/tests/test-mq-subrepo.t +++ b/tests/test-mq-subrepo.t @@ -407,12 +407,12 @@ both into 'revision' and 'patch file und $ cat .hgsubstate b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub $ hg diff -c tip - diff -r f499373e340c -r b20ffac88564 .hgsub + diff -r f499373e340c -r f69e96d86e75 .hgsub --- /dev/null +++ b/.hgsub @@ -0,0 +1,1 @@ +sub = sub - diff -r f499373e340c -r b20ffac88564 .hgsubstate + diff -r f499373e340c -r f69e96d86e75 .hgsubstate --- /dev/null +++ b/.hgsubstate @@ -0,0 +1,1 @@ @@ -423,16 +423,34 @@ both into 'revision' and 'patch file und # User test # Date 0 0 - diff -r f499373e340c -r b20ffac88564 .hgsub + diff -r f499373e340c -r f69e96d86e75 .hgsub --- /dev/null +++ b/.hgsub @@ -0,0 +1,1 @@ +sub = sub - diff -r f499373e340c -r b20ffac88564 .hgsubstate + diff -r f499373e340c -r f69e96d86e75 .hgsubstate --- /dev/null +++ b/.hgsubstate @@ -0,0 +1,1 @@ +b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub + $ hg parents --template '{node}\n' + f69e96d86e75a6d4fd88285dc9697acb23951041 + +check also whether qnew not including ".hgsubstate" explicitly causes +as same result (in node hash) as one including it. + + $ hg qpop -a -q + patch queue now empty + $ hg qdelete import-at-qnew + $ echo 'sub = sub' > .hgsub + $ hg add .hgsub + $ rm -f .hgsubstate + $ hg qnew -u test -d '0 0' import-at-qnew + $ hg parents --template '{node}\n' + f69e96d86e75a6d4fd88285dc9697acb23951041 + +check whether qrefresh imports updated .hgsubstate correctly + $ hg qpop popping import-at-qnew patch queue now empty @@ -537,6 +555,31 @@ both into 'revision' and 'patch file und -b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub +88ac1bef5ed43b689d1d200b59886b675dec474b sub +check whether qrefresh not including ".hgsubstate" explicitly causes +as same result (in node hash) as one including it. + + $ hg update -C -q 0 + $ hg qpop -a -q + patch queue now empty + $ hg qnew -u test -d '0 0' add-hgsub-at-qrefresh + $ echo 'sub = sub' > .hgsub + $ echo > .hgsubstate + $ hg add .hgsub .hgsubstate + $ hg qrefresh -u test -d '0 0' + $ hg parents --template '{node}\n' + 7c48c35501aae6770ed9c2517014628615821a8e + + $ hg qpop -a -q + patch queue now empty + $ hg qdelete add-hgsub-at-qrefresh + $ hg qnew -u test -d '0 0' add-hgsub-at-qrefresh + $ echo 'sub = sub' > .hgsub + $ hg add .hgsub + $ rm -f .hgsubstate + $ hg qrefresh -u test -d '0 0' + $ hg parents --template '{node}\n' + 7c48c35501aae6770ed9c2517014628615821a8e + $ cd .. $ cd ..