Feature #23131
openPlugin load order defined by inter-plugin dependencies
Description
Currently plugins requiring another plugin not yet loaded will cause a hard error, forcing plugin authors to somehow name their plugins to have a name that will be sorted after the names of all the other plugins they rely on in the default sort order (alphabetical I'd guess). See source:/tags/3.3.0/lib/redmine/plugin.rb#L236 for the method to require other plugins, which will throw a hard error on line 251 on Plugin.find when the plugin hasn't been loaded yet.
This was something handled in ChiliProject, see https://github.com/chiliproject/chiliproject/commit/a24a24eb1980625fbc4558fc44f15498e883d2d9
Would something like that be of interest to Redmine? We could take care of adapting that patch to current Redmine trunk.
Related issues
Updated by Mischa The Evil almost 10 years ago
- Is duplicate of Defect #6324: requires_redmine_plugin should defer loading plugins if not all dependencies are met added
Updated by Mischa The Evil almost 10 years ago
- Status changed from New to Closed
- Resolution set to Duplicate
Felix, I think that it would be a good thing if the Redmine core would include some solution for this issue. Please see #6324 (authored by Tim Felgentreff) and specifically the patch by Jean-Baptiste Barth in #6324#note-8.
Kind regards, Mischa.
Updated by Felix Schäfer almost 10 years ago
- Status changed from Closed to Reopened
Thanks, I hadn't seen that one.
This is not the same requirement and solution though, as it is not possible to depend on code in not-yet-loaded plugins with this solution.
Example: Plugin A requires Plugin B and specifically needs lib/b.rb from that plugin to be require-able, which wouldn't work with the solution in #6324.
The referenced ChiliProject commit allows for this. It is a more generic (and in my opinion better) solution to that problem.
Updated by Michael Krupp over 9 years ago
That is not entirely true. Requiring plugin-external libraries in a to_prepare and/or after_initialize block works just fine.
See: http://guides.rubyonrails.org/configuring.html#initialization-events
Updated by Jaap de Haan over 9 years ago
Wouldn't a simple topological sort (ruby TSort) in lib/redmine/plugin.rb@self.load do the trick?
Of course provided that we can get information about the dependencies without having to load the plugins first... Chicken/Egg problem.
Updated by Toshi MARUYAMA almost 9 years ago
- Related to Patch #24939: Changing plugin loading order added
Updated by Go MAEDA over 8 years ago
- Related to Patch #26439: Plugin load order defined by plugin checks added