mercurial/manifest.py
branchstable
changeset 44817 35bb67427f63
parent 44708 61134a232d00
child 44852 fd3b94f1712d
--- a/mercurial/manifest.py	Wed May 06 11:40:17 2020 -0700
+++ b/mercurial/manifest.py	Sat May 09 20:25:07 2020 +0200
@@ -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: