Mercurial > hg
changeset 13508:0396ca8015be stable
mq: fix qpush recursion in _findtags when status file is wrong (issue2664)
test from timeless to guard against regressing this
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 28 Feb 2011 17:41:40 -0600 |
parents | 375ba42f3cda |
children | 8aea95ec128f |
files | hgext/mq.py tests/test-mq-qpush-fail.t |
diffstat | 2 files changed, 22 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/mq.py Fri Feb 11 13:10:39 2011 +0100 +++ b/hgext/mq.py Mon Feb 28 17:41:40 2011 -0600 @@ -2957,7 +2957,9 @@ mqtags = [(patch.node, patch.name) for patch in q.applied] - if mqtags[-1][0] not in self: + try: + r = self.changelog.rev(mqtags[-1][0]) + except error.RepoLookupError: self.ui.warn(_('mq status file refers to unknown node %s\n') % short(mqtags[-1][0])) return result @@ -2982,12 +2984,13 @@ cl = self.changelog qbasenode = q.applied[0].node - if qbasenode not in self: + try: + qbase = cl.rev(qbasenode) + except error.LookupError: self.ui.warn(_('mq status file refers to unknown node %s\n') % short(qbasenode)) return super(mqrepo, self)._branchtags(partial, lrev) - qbase = cl.rev(qbasenode) start = lrev + 1 if start < qbase: # update the cache (excluding the patches) and save it
--- a/tests/test-mq-qpush-fail.t Fri Feb 11 13:10:39 2011 +0100 +++ b/tests/test-mq-qpush-fail.t Mon Feb 28 17:41:40 2011 -0600 @@ -51,6 +51,22 @@ summary: add foo +test corrupt status file + $ hg qpush + applying patch1 + now at: patch1 + $ cp .hg/patches/status .hg/patches/status.orig + $ hg qpop + popping patch1 + patch queue now empty + $ cp .hg/patches/status.orig .hg/patches/status + $ hg qpush + mq status file refers to unknown node * (glob) + abort: working directory revision is not qtip + [255] + $ rm .hg/patches/status .hg/patches/status.orig + + bar should be gone; other unknown/ignored files should still be around $ hg status -A