Add backups of the project xml file as a rolling version in the cashe folder

This commit is contained in:
Veronica K. B. Olsen
2019-11-02 12:25:37 +01:00
parent 2af6caa527
commit 4252df9682
+41
View File
@@ -14,6 +14,7 @@ import logging
import nw import nw
from os import path, mkdir, listdir from os import path, mkdir, listdir
from shutil import copyfile
from lxml import etree from lxml import etree
from hashlib import sha256 from hashlib import sha256
from datetime import datetime from datetime import datetime
@@ -288,6 +289,9 @@ class NWProject():
logger.debug("Saving project: %s" % self.projPath) logger.debug("Saving project: %s" % self.projPath)
# Save a copy of the current file, just in case
self._maintainPrevious()
# Root element and project details # Root element and project details
logger.debug("Writing project meta") logger.debug("Writing project meta")
nwXML = etree.Element("novelWriterXML",attrib={ nwXML = etree.Element("novelWriterXML",attrib={
@@ -699,4 +703,41 @@ class NWProject():
itemHandle = self._makeHandle(addSeed+"!") itemHandle = self._makeHandle(addSeed+"!")
return itemHandle return itemHandle
def _maintainPrevious(self):
"""This function will take the current project file and copy it into the project cache
folder with an incremental file extension added. These serve as a backup in case the xml
file gets corrupted.
"""
countFile = path.join(self.projCache, "projCount.txt")
projCount = 0
if path.isfile(countFile):
try:
with open(countFile, mode="r") as inFile:
projCount = int(inFile.read())+1
except:
projCount = 0
if projCount > 9:
projCount = 0
projBackup = "%s.%d" % (nwFiles.PROJ_FILE, projCount)
try:
copyfile(
path.join(self.projPath,self.projFile),
path.join(self.projCache,projBackup)
)
except:
logger.error("Failed to write to file %s" % projBackup)
try:
with open(countFile, mode="w") as outFile:
outFile.write(str(projCount))
except:
logger.error("Failed to write to file %s" % countFile)
return
# END Class NWProject # END Class NWProject