| Line | |
|---|
| 1 |
from trac.core import * |
|---|
| 2 |
from trac.db import * |
|---|
| 3 |
from trac.env import IEnvironmentSetupParticipant |
|---|
| 4 |
|
|---|
| 5 |
# Last discussion database shcema version |
|---|
| 6 |
last_db_version = 2 |
|---|
| 7 |
|
|---|
| 8 |
class DiscussionInit(Component): |
|---|
| 9 |
""" Initialise database and environment for discussion component """ |
|---|
| 10 |
implements(IEnvironmentSetupParticipant) |
|---|
| 11 |
|
|---|
| 12 |
# IEnvironmentSetupParticipanttr |
|---|
| 13 |
def environment_created(self): |
|---|
| 14 |
pass |
|---|
| 15 |
|
|---|
| 16 |
def environment_needs_upgrade(self, db): |
|---|
| 17 |
cursor = db.cursor() |
|---|
| 18 |
|
|---|
| 19 |
# Is database up to date? |
|---|
| 20 |
return self._get_db_version(cursor) != last_db_version |
|---|
| 21 |
|
|---|
| 22 |
def upgrade_environment(self, db): |
|---|
| 23 |
cursor = db.cursor() |
|---|
| 24 |
|
|---|
| 25 |
# Get current database schema version |
|---|
| 26 |
db_version = self._get_db_version(cursor) |
|---|
| 27 |
|
|---|
| 28 |
# Perform incremental upgrades |
|---|
| 29 |
for I in range(db_version + 1, last_db_version + 1): |
|---|
| 30 |
script_name = 'db%i' % (I) |
|---|
| 31 |
module = __import__('tracdiscussion.db.%s' % (script_name), |
|---|
| 32 |
globals(), locals(), ['do_upgrade']) |
|---|
| 33 |
module.do_upgrade(self.env, cursor) |
|---|
| 34 |
|
|---|
| 35 |
def _get_db_version(self, cursor): |
|---|
| 36 |
try: |
|---|
| 37 |
sql = "SELECT value FROM system WHERE name='discussion_version'" |
|---|
| 38 |
self.log.debug(sql) |
|---|
| 39 |
cursor.execute(sql) |
|---|
| 40 |
for row in cursor: |
|---|
| 41 |
return int(row[0]) |
|---|
| 42 |
return 0 |
|---|
| 43 |
except: |
|---|
| 44 |
return 0 |
|---|