# HG changeset patch # User osimons # Date 1250717999 0 # Node ID 34776258924e7eb724f347adb1f799c1c37feac9 # Parent 5e78705333c376e3d6199c2bc64a210dbc835dd3 0.6dev: Fixing proper removal of log+levels files in `BuildLog.delete()`. Added test to verify. Closes #424. diff --git a/bitten/model.py b/bitten/model.py --- a/bitten/model.py +++ b/bitten/model.py @@ -742,23 +742,25 @@ else: handle_ta = False - cursor = db.cursor() - cursor.execute("SELECT filename FROM bitten_log WHERE id=%s", (self.id,)) - log_files = cursor.fetchall() or [] - cursor.execute("DELETE FROM bitten_log WHERE id=%s", (self.id,)) - for log_file in log_files: - log_file = self.get_log_file(log_file[0]) + if self.filename: + log_file = self.get_log_file(self.filename) if os.path.exists(log_file): try: + self.env.log.debug("Deleting log file: %s" % log_file) os.remove(log_file) except Exception, e: self.env.log.warning("Error removing log file %s: %s" % (log_file, e)) - level_file = self.get_log_file(log_file[1]) - if os.path.exists(log_file): + level_file = log_file + '.levels' + if os.path.exists(level_file): try: + self.env.log.debug("Deleting level file: %s" % level_file) os.remove(level_file) except Exception, e: - self.env.log.warning("Error removing log file %s: %s" % (log_file, e)) + self.env.log.warning("Error removing level file %s: %s" \ + % (level_file, e)) + + cursor = db.cursor() + cursor.execute("DELETE FROM bitten_log WHERE id=%s", (self.id,)) if handle_ta: db.commit() diff --git a/bitten/tests/model.py b/bitten/tests/model.py --- a/bitten/tests/model.py +++ b/bitten/tests/model.py @@ -15,6 +15,7 @@ from bitten.model import BuildConfig, TargetPlatform, Build, BuildStep, \ BuildLog, Report, schema import os +import shutil import tempfile @@ -43,7 +44,7 @@ db.commit() def tearDown(self): - pass + shutil.rmtree(self.env.path) class BuildConfigTestCase(BaseModelTestCase): @@ -498,6 +499,29 @@ log = BuildLog(self.env, build=1, step='test', generator='foo') self.assertRaises(AssertionError, log.delete) + def test_insert_and_delete_files(self): + # create - files should be created automatically + build_log = BuildLog(self.env, build=1, step='test', generator='make') + build_log.messages = [(BuildLog.INFO, 'running')] + build_log.insert() + + # fetch it fresh - check object and files + build_log = BuildLog.fetch(self.env, id=build_log.id) + self.assertEquals(build_log.filename, "%s.log" % build_log.id) + log_file = build_log.get_log_file(build_log.filename) + levels_file = log_file+'.levels' + self.failUnless(os.path.exists(log_file), 'log_file does not exist') + self.failUnless(os.path.exists(levels_file), + 'levels_file does not exist') + self.assertEquals(build_log.messages, [(BuildLog.INFO, 'running')]) + + # delete - object and file should be gone + build_log.delete() + self.assertEquals(None, BuildLog.fetch(self.env, id=build_log.id)) + self.failIf(os.path.exists(log_file), 'log_file exists after delete()') + self.failIf(os.path.exists(levels_file), + 'levels_file exists after delete()') + def test_fetch(self): db = self.env.get_db_cnx() cursor = db.cursor()