Dabei kann das Generic Setup Tool die Versionsnummer entweder aus der version.txt-Datei im Wurzelverzeichnis des Produkts auslesen oder aus einer metadata.xml-Datei im Installationsprofil. Entsprechend wurde das Default-Profil von vs.policy ergänzt um src/vs.policy/vs/policy/profiles/default/metadata.xml:
<?xml version="1.0"?> <metadata> <description>Policies for www.veit-schiele.de</description> <version>1.3</version> </metadata>
Die Upgrade steps werden dann in src/vs.policy/vs/policy/configure.zcml registriert:
<configure xmlns="http://namespaces.zope.org/zope" xmlns:five="http://namespaces.zope.org/five" xmlns:genericsetup="http://namespaces.zope.org/genericsetup" i18n_domain="vs.policy"> ... <!-- Upgrade step for the migration --> <genericsetup:upgradeStep sortkey="1" source="1.0" destination="1.1" title="Upgrade from 1.0 to 1.1" description="Fixes the front page title" profile="vs.policy:default" handler=".upgrades.v1_0_to_v1_1" /> ... </configure>
Hier wird die Aktualisierung von Version 1.0 auf 1.1 definiert, wobei die Funktion v1_0_to_v1_1() aufgerufen wird.
Die Funktion ist definiert in src/vs.policy/vs/policy/upgrades.py:
from Products.CMFCore.utils import getToolByName def v1_0_to_v1_1(portal_setup): portal_url = getToolByName(portal_setup, 'portal_url') portal = portal_url.getPortalObject() front_page = portal['front-page'] front_page.setTitle('Welcome to Veit Schiele communication design')
Die Aktualisierung von 1.1 auf 1.2 teilt sich in zwei Teile auf, v1_1_to_v1_2a und v1_1_to_v1_2b. Dabei sorgt sortkey für die richtige Reihenfolge bei der Aktualisierung über mehrere Versionen:
<genericsetup:upgradeSteps sortkey="2" source="1.1" destination="1.2" profile="vs.policy:default" > <genericsetup:upgradeStep title="Upgrade titles" description="Fix all other titles" handler=".upgrades.v1_1_to_v1_2a" /> <genericsetup:upgradeStep title="Upgrade site title" description="Fixes the portal title" handler=".upgrades.v1_1_to_v1_2b" /> </genericsetup:upgradeSteps>
Migrationsprofil
Falls eine große Anzahl von Migrationen durchlaufen werden soll, kann sich ein spezielles Extension-Profil empfehlen:
<genericsetup:registerProfile name="1.2_to_1.3" title="Migration profile for veit-schiele.de 1.2 to 1.3" description="" directory="profiles/migrations/v1_2_to_v1_3" for="Products.CMFPlone.interfaces.IMigratingPloneSiteRoot" provides="Products.GenericSetup.interfaces.EXTENSION" /> <genericsetup:upgradeStep sortkey="3" source="1.2" destination="1.3" title="Upgrade from 1.2 to 1.3" description="Runs a migration profile" profile="vs.policy:default" handler=".upgrades.v1_2_to_v1_3" />
Zunächst wird das Extension-Profil in profiles/migrations/v1_2_to_v1_3 für das Interface Products.CMFPlone.interfaces.IMigratingPloneSiteRoot registriert, wodurch das Profil nicht beim Erstellen der Site oder in Plone’s Website-Konfiguration zum Hinzufügen/Entfernen von Produkten angezeigt wird. Anschließend wird noch ein upgrade step registriert, der das Profil angibt.
Schließlich muss noch das Verzeichnis src/vs.policy/vs/policy/profiles/migrations/v1_2_to_v1_3 und darin die entsprechenden XML-Dateien erzeugt werden.