Details
-
Sub-task
-
Resolution: Unresolved
-
Major
-
None
-
None
-
None
Description
Plugins need to be able to execute explicit installation/uninstallation/update code. At least, this is necessary to install/uninstall/update the plugin's DB subschema, but maybe we will also automatically maintain a plugin's settings. Maybe we also need it for other aspects.
I want to do it like this:
- MP tracks collections of installed, uninstalled and disabled plugins
- To install a plugin, it simply has to be present in the plugins directory -> MP will automatically execute its installation code (if present) and start it if it is not contained in the collection of uninstalled plugins
- To uninstall it, MP will stop it, explicitly execute the uninstall code of the plugin (if present) and will put it in the collection of uninstalled plugins
- MP will skip loading plugins which are in the collection of uninstalled plugins
- If the plugin directory gets removed, MP will delete the plugin from the collection of uninstalled plugins. If it is contained in the collection of installed plugins, MP will give a warning: "plugin was removed and not uninstalled"
- We need a cleanup mechanism to remove directories of uninstalled plugins (maybe at system start)
- The collection of installed plugins tracks their plugin id and version -> so it is possible to track plugin updates
- A plugin update is simply an overwrite of the old plugin's directory. MP will automatically track the new version number and call its update code (if present).
- To provide the install/uninstall/update code, the plugin descriptor gets an additional "Deployment" element which contains a reference to a deployment class containing the installation/uninstallation/update code, similar to the "Runtime" element
I want to do it like this:
- MP tracks collections of installed, uninstalled and disabled plugins
- To install a plugin, it simply has to be present in the plugins directory -> MP will automatically execute its installation code (if present) and start it if it is not contained in the collection of uninstalled plugins
- To uninstall it, MP will stop it, explicitly execute the uninstall code of the plugin (if present) and will put it in the collection of uninstalled plugins
- MP will skip loading plugins which are in the collection of uninstalled plugins
- If the plugin directory gets removed, MP will delete the plugin from the collection of uninstalled plugins. If it is contained in the collection of installed plugins, MP will give a warning: "plugin was removed and not uninstalled"
- We need a cleanup mechanism to remove directories of uninstalled plugins (maybe at system start)
- The collection of installed plugins tracks their plugin id and version -> so it is possible to track plugin updates
- A plugin update is simply an overwrite of the old plugin's directory. MP will automatically track the new version number and call its update code (if present).
- To provide the install/uninstall/update code, the plugin descriptor gets an additional "Deployment" element which contains a reference to a deployment class containing the installation/uninstallation/update code, similar to the "Runtime" element