Mercurial > evolve
changeset 4103:1c0a09668709 stable
stablesortcache: ignore permission and OS errors when writing
This cache is related to the obshashrange one and we update it lazily by
default.
This can be an issue when pulling locally from a read only repository that was
not configured for a more aggressive cache warming. The raised permission error
was uncaught and could crash the whole process. Errors during cache update
should not block Mercurial operations.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 13 Sep 2018 19:22:39 +0200 |
parents | 3895f6fcd35c |
children | a023abd12f3b |
files | hgext3rd/evolve/stablesort.py |
diffstat | 1 files changed, 16 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext3rd/evolve/stablesort.py Thu Sep 13 19:09:48 2018 +0200 +++ b/hgext3rd/evolve/stablesort.py Thu Sep 13 19:22:39 2018 +0200 @@ -634,21 +634,24 @@ """ if self._cachekey is None or self._cachekey == self._ondiskkey: return - cachevfs = compat.getcachevfs(repo) - cachefile = cachevfs(self._filepath, 'w', atomictemp=True) + try: + cachevfs = compat.getcachevfs(repo) + cachefile = cachevfs(self._filepath, 'w', atomictemp=True) - # data to write - headerdata = self._serializecachekey() - indexdata = self._index.tostring() - data = self._data.tostring() - indexsize = S_INDEXSIZE.pack(len(indexdata)) + # data to write + headerdata = self._serializecachekey() + indexdata = self._index.tostring() + data = self._data.tostring() + indexsize = S_INDEXSIZE.pack(len(indexdata)) - # writing - cachefile.write(headerdata) - cachefile.write(indexsize) - cachefile.write(indexdata) - cachefile.write(data) - cachefile.close() + # writing + cachefile.write(headerdata) + cachefile.write(indexsize) + cachefile.write(indexdata) + cachefile.write(data) + cachefile.close() + except (IOError, OSError) as exc: + repo.ui.debug('stablesortcache: could not write update %s\n' % exc) @eh.reposetup def setupcache(ui, repo):