Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 41 additions & 5 deletions Products/CMFPlone/MigrationTool.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,9 @@ class MigrationTool(PloneBaseTool, UniqueObject, SimpleItem):
meta_type = "Plone Migration Tool"
toolicon = "skins/plone_images/site_icon.png"

_profile = _DEFAULT_PROFILE
_package_name = "Products.CMFPlone"

manage_options = (
{"label": "Upgrade", "action": "../@@plone-upgrade"},
) + SimpleItem.manage_options
Expand All @@ -137,10 +140,35 @@ class MigrationTool(PloneBaseTool, UniqueObject, SimpleItem):

security.declareProtected(ManagePortal, "getInstanceVersion")

security.declareProtected(ManagePortal, "getBaseProfile")

def getBaseProfile(self):
"""Get the base profile used for migrations"""
return getattr(self, "_profile", _DEFAULT_PROFILE)

security.declareProtected(ManagePortal, "setBaseProfile")

def setBaseProfile(self, profile):
"""Set the base profile used for migrations"""
self._profile = profile

security.declareProtected(ManagePortal, "getPackageName")

def getPackageName(self):
"""Get the package name used for migrations"""
return getattr(self, "_package_name", "Products.CMFPlone")

security.declareProtected(ManagePortal, "setPackageName")

def setPackageName(self, package_name):
"""Set the package name used for migrations"""
self._package_name = package_name

def getInstanceVersion(self):
# The version this instance of plone is on.
setup = getToolByName(self, "portal_setup")
version = setup.getLastVersionForProfile(_DEFAULT_PROFILE)
profile = self.getBaseProfile()
version = setup.getLastVersionForProfile(profile)
if isinstance(version, tuple):
version = ".".join(version)

Expand Down Expand Up @@ -168,16 +196,18 @@ def getInstanceVersion(self):
def setInstanceVersion(self, version):
# The version this instance of plone is on.
setup = getToolByName(self, "portal_setup")
setup.setLastVersionForProfile(_DEFAULT_PROFILE, version)
profile = self.getBaseProfile()
setup.setLastVersionForProfile(profile, version)
self._version = False

security.declareProtected(ManagePortal, "getFileSystemVersion")

def getFileSystemVersion(self):
# The version this instance of plone is on.
setup = getToolByName(self, "portal_setup")
profile = self.getBaseProfile()
try:
return setup.getVersionForProfile(_DEFAULT_PROFILE)
return setup.getVersionForProfile(profile)
except KeyError:
pass
return None
Expand All @@ -186,7 +216,12 @@ def getFileSystemVersion(self):

def getSoftwareVersion(self):
# The software version.
return dist_version("Products.CMFPlone")
package_name = self.getPackageName()
try:
return dist_version(package_name)
except PackageNotFoundError:
# Fall back to CMFPlone for backward compatibility
return dist_version("Products.CMFPlone")

security.declareProtected(ManagePortal, "needUpgrading")

Expand Down Expand Up @@ -253,8 +288,9 @@ def listUpgrades(self):
# Do not include upgrade steps for too new versions:
# using a newer plone.app.upgrade version should not give problems.
setup = getToolByName(self, "portal_setup")
profile = self.getBaseProfile()
fs_version = self.getFileSystemVersion()
upgrades = setup.listUpgrades(_DEFAULT_PROFILE, dest=fs_version)
upgrades = setup.listUpgrades(profile, dest=fs_version)
return upgrades

security.declareProtected(ManagePortal, "upgrade")
Expand Down
1 change: 1 addition & 0 deletions news/4155.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Added support for custom base profiles without subclassing @rohnsha0