# HG changeset patch # User hodgestar # Date 1287357644 0 # Node ID ac28bc3feb2a52eaba526a98cc2d7a7bba53fdca # Parent d9f4c8d7599c6d13006fb2dfd3183208b3e8f487 Refuse to create log folder during database upgrade if the folder already exists. The existence of such a folder is an indication that a previous attempt to migrate the logs into files has failed and that the folder should be removed before continuing. See #462 for further discussion. diff --git a/bitten/tests/upgrades.py b/bitten/tests/upgrades.py --- a/bitten/tests/upgrades.py +++ b/bitten/tests/upgrades.py @@ -14,6 +14,7 @@ warnings.filterwarnings('ignore', '^Unknown table') warnings.filterwarnings('ignore', '^the sets module is deprecated') +from trac.core import TracError from trac.test import EnvironmentStub from trac.db import Table, Column, Index, DatabaseManager from bitten.upgrades import update_sequence, drop_index @@ -42,8 +43,6 @@ if os.path.isabs(logs_dir): raise ValueError("Should not have absolute logs directory for temporary test") logs_dir = os.path.join(self.env.path, logs_dir) - if not os.path.isdir(logs_dir): - os.makedirs(logs_dir) self.logs_dir = logs_dir db = self.env.get_db_cnx() @@ -327,6 +326,7 @@ "4.log.level", ] + os.makedirs(self.logs_dir) for filename, data in logfiles.items(): path = os.path.join(self.logs_dir, filename) logfile = open(path, "w") @@ -371,6 +371,7 @@ "2.log.levels", ] + os.makedirs(self.logs_dir) for filename, data in logfiles.items(): path = os.path.join(self.logs_dir, filename) logfile = open(path, "w") @@ -398,6 +399,11 @@ self.assertTrue(logs[1].getMessage().startswith( "Deleted stray log levels file 2.log.levels")) + def test_migrate_logs_to_files_with_logs_dir(self): + os.makedirs(self.logs_dir) + self.assertRaises(TracError, upgrades.migrate_logs_to_files, + self.env, None) + def suite(): suite = unittest.TestSuite() diff --git a/bitten/upgrades.py b/bitten/upgrades.py --- a/bitten/upgrades.py +++ b/bitten/upgrades.py @@ -432,8 +432,14 @@ logs_dir = env.config.get("bitten", "logs_dir", "log/bitten") if not os.path.isabs(logs_dir): logs_dir = os.path.join(env.path, logs_dir) - if not os.path.exists(logs_dir): - os.makedirs(logs_dir) + + if os.path.exists(logs_dir): + print "Bitten log folder %r already exists" % (logs_dir,) + print "Upgrade cannot be performed until the existing folder is moved." + print "The upgrade script will now exit with an error:\n" + raise TracError("") + + os.makedirs(logs_dir) cursor = db.cursor() message_cursor = db.cursor()