Mercurial > hg
changeset 13507:375ba42f3cda stable
mq: gracefully handle malformated status file
This patch prevent mq to crash when .hg/patches/status contains Malformed lines
(without ":"). Blank lines are ignored and other malformed lines issue a
warning.
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Fri, 11 Feb 2011 13:10:39 +0100 |
parents | 117990768fe0 |
children | 0396ca8015be |
files | hgext/mq.py tests/test-mq.t |
diffstat | 2 files changed, 29 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/mq.py Thu Feb 24 00:47:49 2011 +0100 +++ b/hgext/mq.py Fri Feb 11 13:10:39 2011 +0100 @@ -282,11 +282,17 @@ @util.propertycache def applied(self): if os.path.exists(self.join(self.status_path)): - def parse(l): - n, name = l.split(':', 1) - return statusentry(bin(n), name) + def parselines(lines): + for l in lines: + entry = l.split(':', 1) + if len(entry) > 1: + n, name = entry + yield statusentry(bin(n), name) + elif l.strip(): + self.ui.warn(_('malformated mq status line: %s\n') % entry) + # else we ignore empty lines lines = self.opener(self.status_path).read().splitlines() - return [parse(l) for l in lines] + return list(parselines(lines)) return [] @util.propertycache
--- a/tests/test-mq.t Thu Feb 24 00:47:49 2011 +0100 +++ b/tests/test-mq.t Fri Feb 11 13:10:39 2011 +0100 @@ -917,6 +917,25 @@ copy to copy $ cd .. +empty lines in status + + $ hg init emptystatus + $ cd emptystatus + $ hg qinit + $ printf '\n\n' > .hg/patches/status + $ hg qser + $ cd .. + +bad line in status (without ":") + + $ hg init badstatus + $ cd badstatus + $ hg qinit + $ printf 'babar has no colon in this line\n' > .hg/patches/status + $ hg qser + malformated mq status line: ['babar has no colon in this line'] + $ cd .. + test file addition in slow path