浏览代码

try to work around Windows idiocy of open files

apparently, we may be able to rewrite an open file if we rename it first.

i have no way to test this, unfortunately
Antoine Beaupré 9 年之前
父节点
当前提交
8c48015e70
共有 1 个文件被更改,包括 5 次插入1 次删除
  1. 5 1
      borg/upgrader.py

+ 5 - 1
borg/upgrader.py

@@ -91,10 +91,14 @@ class AtticRepositoryUpgrader(Repository):
                     # works because our old file handle is still open
                     # so even though the file is removed, we can still
                     # read it until the file is closed.
-                    os.unlink(filename)
+                    os.rename(filename, filename + '.tmp')
                     with open(filename, 'wb') as new_segment:
                         new_segment.write(new_magic)
                         new_segment.write(segment.read())
+                    # the little dance with the .tmp file is necessary
+                    # because Windows won't allow overwriting an open
+                    # file.
+                    os.unlink(filename + '.tmp')
 
     def find_attic_keyfile(self):
         """find the attic keyfiles