Project

General

Profile

Actions

Feature #23131

open

Plugin load order defined by inter-plugin dependencies

Added by Felix Schäfer over 7 years ago. Updated 3 months ago.

Status:
Reopened
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
Start date:
Due date:
% Done:

0%

Estimated time:
Resolution:
Duplicate

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

Related to Redmine - Patch #24939: Changing plugin loading orderNew

Actions
Related to Redmine - Patch #26439: Plugin load order defined by plugin checksNew

Actions
Is duplicate of Redmine - Defect #6324: requires_redmine_plugin should defer loading plugins if not all dependencies are metNewJean-Baptiste Barth2010-09-07

Actions
Actions #1

Updated by Mischa The Evil over 7 years ago

  • Is duplicate of Defect #6324: requires_redmine_plugin should defer loading plugins if not all dependencies are met added
Actions #2

Updated by Mischa The Evil over 7 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.

Actions #3

Updated by Felix Schäfer over 7 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.

Actions #4

Updated by Michael Krupp over 7 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

Actions #5

Updated by Jaap de Haan over 7 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.

Actions #6

Updated by Toshi MARUYAMA almost 7 years ago

  • Related to Patch #24939: Changing plugin loading order added
Actions #7

Updated by Go MAEDA over 6 years ago

  • Related to Patch #26439: Plugin load order defined by plugin checks added
Actions

Also available in: Atom PDF