Mercurial > public > mercurial-scm > hg-stable
diff mercurial/repoview.py @ 27917:97e0dc6d248c stable
repoview: fix corrupted hiddencache crash Mercurial (issue5042)
Before this patch if the hiddencache existed but was empty, it would crash
mercurial. This patch adds exception handling when reading the hiddencache to
avoid the issue.
When encountering a corrupted cache file we print a devel warning. There would
be no point in issuing a normal warning as the user wouldn't be able to do
anything about the situation.
The warning looks like:
devel-warn: corrupted hidden cache, removing it at: /path/to/repoview.py
author | Laurent Charignon <lcharignon@fb.com> |
---|---|
date | Wed, 20 Jan 2016 13:43:01 -0800 |
parents | 9a09a9cfa503 |
children | 332926212ef8 |
line wrap: on
line diff
--- a/mercurial/repoview.py Wed Jan 20 13:40:59 2016 -0800 +++ b/mercurial/repoview.py Wed Jan 20 13:43:01 2016 -0800 @@ -150,6 +150,13 @@ count = len(data) / 4 hidden = frozenset(struct.unpack('>%ii' % count, data)) return hidden + except struct.error: + repo.ui.debug('corrupted hidden cache\n') + # No need to fix the content as it will get rewritten + return None + except (IOError, OSError): + repo.ui.debug('cannot read hidden cache\n') + return None finally: if fh: fh.close()