Skip to content
Snippets Groups Projects
Commit 35bb67427f63 authored by Pierre-Yves David's avatar Pierre-Yves David :octopus:
Browse files

manifest-cache: ignore IOError while writing

If the wcache directory is non writable for some reason (eg: belong to root).
Trying to write to it currently crash Mercurial. Instead we ignore the error and
skip writing that cache.

We should probably improve the user experience of multiple users interacting
with the same repository. However this is not an adventure for stable.

Differential Revision: https://phab.mercurial-scm.org/D8512
parent c5574408254a
No related branches found
No related tags found
No related merge requests found
......@@ -1455,18 +1455,29 @@
if not self._dirty or self._opener is None:
return
# rotate backwards to the first used node
with self._opener(
self._file, b'w', atomictemp=True, checkambig=True
) as fp:
node = self._head.prev
while True:
if node.key in self._cache:
fp.write(node.key)
fp.write(struct.pack(b'>L', len(node.value)))
fp.write(node.value)
if node is self._head:
break
node = node.prev
try:
with self._opener(
self._file, b'w', atomictemp=True, checkambig=True
) as fp:
node = self._head.prev
while True:
if node.key in self._cache:
fp.write(node.key)
fp.write(struct.pack(b'>L', len(node.value)))
fp.write(node.value)
if node is self._head:
break
node = node.prev
except IOError:
# We could not write the cache (eg: permission error)
# the content can be missing.
#
# We could try harder and see if we could recreate a wcache
# directory were we coudl write too.
#
# XXX the error pass silently, having some way to issue an error
# log `ui.log` would be nice.
pass
def __len__(self):
if not self._read:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment