diff --git a/sickbeard/config.py b/sickbeard/config.py index 4daf58b3ac8f9e2166dd45b39cfb12a798ca5479..9ecc3a12ac187ffbba4687c45f9601925d9bc77b 100644 --- a/sickbeard/config.py +++ b/sickbeard/config.py @@ -16,8 +16,6 @@ # You should have received a copy of the GNU General Public License # along with Sick Beard. If not, see <http://www.gnu.org/licenses/>. - - import cherrypy import os.path import datetime @@ -274,6 +272,8 @@ class ConfigMigrator(): else: migration_name = '' + helpers.backupVersionedFile(sickbeard.CONFIG_FILE, next_version) + # do the migration, expect a method named _migrate_v<num> logger.log(u"Migrating config up to version "+str(next_version)+migration_name) getattr(self, '_migrate_v'+str(next_version))() diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py index 9595846a639e89a46b8d9cf87a02dc562a9bb2ad..649b55ded13e326163179dd0938cc8205d74d714 100644 --- a/sickbeard/databases/mainDB.py +++ b/sickbeard/databases/mainDB.py @@ -17,15 +17,12 @@ # along with Sick Beard. If not, see <http://www.gnu.org/licenses/>. import sickbeard -import shutil, time, os.path, sys +import os.path -from sickbeard import db -from sickbeard import common -from sickbeard import logger +from sickbeard import db, common, helpers, logger from sickbeard.providers.generic import GenericProvider from sickbeard import encodingKludge as ek -from sickbeard.exceptions import ex from sickbeard.name_parser.parser import NameParser, InvalidNameException class MainSanityCheck(db.DBSanityCheck): @@ -52,6 +49,9 @@ class MainSanityCheck(db.DBSanityCheck): else: logger.log(u"No duplicate episode, check passed") +def backupDatabase(version): + helpers.backupVersionedFile(db.dbFilename(), version) + # ====================== # = Main DB Migrations = # ====================== @@ -130,25 +130,7 @@ class NewQualitySettings (NumericProviders): def execute(self): - numTries = 0 - while not ek.ek(os.path.isfile, db.dbFilename(suffix='v0')): - if not ek.ek(os.path.isfile, db.dbFilename()): - break - - try: - logger.log(u"Attempting to back up your sickbeard.db file before migration...") - shutil.copy(db.dbFilename(), db.dbFilename(suffix='v0')) - logger.log(u"Done backup, proceeding with migration.") - break - except Exception, e: - logger.log(u"Error while trying to back up your sickbeard.db: "+ex(e)) - numTries += 1 - time.sleep(1) - logger.log(u"Trying again.") - - if numTries >= 10: - logger.log(u"Unable to back up your sickbeard.db file, please do it manually.") - sys.exit(1) + backupDatabase(0) # old stuff that's been removed from common but we need it to upgrade HD = 1 @@ -406,6 +388,8 @@ class AddSizeAndSceneNameFields(FixAirByDateSetting): def execute(self): + backupDatabase(10) + if not self.hasColumn("tv_episodes", "file_size"): self.addColumn("tv_episodes", "file_size") diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py index 1f72025c1d03d5d2a0077a54340f3475d5c31c2d..b385059570ebe3bb9572d89f39dcb62dd682e035 100644 --- a/sickbeard/helpers.py +++ b/sickbeard/helpers.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU General Public License # along with Sick Beard. If not, see <http://www.gnu.org/licenses/>. - import StringIO, zlib, gzip import os import stat @@ -24,6 +23,7 @@ import urllib, urllib2 import re, socket import shutil import traceback +import time, sys from xml.dom.minidom import Node @@ -633,3 +633,27 @@ def get_xml_text(node): if child_node.nodeType in (Node.CDATA_SECTION_NODE, Node.TEXT_NODE): text += child_node.data return text.strip() + +def backupVersionedFile(oldFile, version): + numTries = 0 + + newFile = oldFile + '.' + 'v'+str(version) + + while not ek.ek(os.path.isfile, newFile): + if not ek.ek(os.path.isfile, oldFile): + break + + try: + logger.log(u"Attempting to back up "+oldFile+" before migration...") + shutil.copy(oldFile, newFile) + logger.log(u"Done backup, proceeding with migration.") + break + except Exception, e: + logger.log(u"Error while trying to back up "+oldFile+": "+ex(e)) + numTries += 1 + time.sleep(1) + logger.log(u"Trying again.") + + if numTries >= 10: + logger.log(u"Unable to back up "+oldFile+", please do it manually.") + sys.exit(1)