From cd9bad4704dd1c8a0a29e0c21c6a9fdf39675a21 Mon Sep 17 00:00:00 2001 From: Faik Uygur Date: Sat, 22 Jul 2006 14:12:27 +0000 Subject: [PATCH] =?UTF-8?q?*=20pisi=20versiyonu'nun=20y=C3=BCkseldi=C4=9Fi?= =?UTF-8?q?ni=20anlas=C4=B1n,=20modullerini=20yeniden=20y=C3=BCklenmeye=20?= =?UTF-8?q?zorlas=C4=B1n,=20e=C4=9Fer=20gerekiyorsa=20rebuild-db'yi=20?= =?UTF-8?q?=C3=A7al=C4=B1=C5=9Ft=C4=B1rs=C4=B1n.=20(#3090)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pisi/operations.py | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/pisi/operations.py b/pisi/operations.py index 52b740d2..8df62768 100644 --- a/pisi/operations.py +++ b/pisi/operations.py @@ -45,12 +45,35 @@ class PisiUpgradeException(pisi.Exception): pisi.Exception.__init__(self, _("Upgrading PISI requires database rebuild and restart")) def upgrade_pisi(): - ctx.ui.warning(_("PISI package has been upgraded. Rebuilding PISI database.")) + """forces to reload pisi modules and runs rebuild-db if needed.""" + + old_filesdbversion = pisi.__filesdbversion__ + old_dbversion = pisi.__dbversion__ + + def rebuild_db(): + """rebuild_db is necessary if database structures has changed.""" + from pisi.version import Version + import pisi.context as ctx + + if Version(pisi.__filesdbversion__) > Version(old_filesdbversion) or \ + Version(pisi.__dbversion__) > Version(old_dbversion): + pisi.api.init(database=False) + ctx.ui.info(_("* PISI database version has changed. Rebuilding database...")) + pisi.api.rebuild_db() + ctx.ui.info(_("* Database rebuild operation is completed succesfully.")) + pisi.api.finalize() + + def reload_pisi(): + for module in sys.modules.keys(): + if module.startswith("pisi."): + """removal from sys.modules forces reload via import""" + del(sys.modules[module]) + reload(pisi) + pisi.api.finalize() - os.system('pisi rebuild-db -y') - #reload(pisi) - #pisi.api.init() - #pisi.api.rebuild_db() + reload_pisi() + rebuild_db() + pisi.api.init() raise PisiUpgradeException() # high level operations