[OE-core] [PATCH] devtool: Only register each plugin once

Ola x Nilsson ola.x.nilsson at axis.com
Tue Oct 11 07:27:06 UTC 2016


> From: kergoth at gmail.com [mailto:kergoth at gmail.com] On Behalf Of Christopher Larson
> Sent: den 10 oktober 2016 21:13
>> On Mon, Oct 10, 2016 at 7:19 AM, Ola x Nilsson <ola.x.nilsson at axis.com> wrote:
>> When a devtool plugin is shadowed in a higher-priorty layer the
>> register_commands method was called on the shadowing plugin once for
>> each found plugin with that name.  A simple unique operation on the list
>> of loaded plugins solves that problem.  It may still be a problem that
>> each plugin - shadowed or not - is loaded and initialized.
>>
>> Signed-off-by: Ola x Nilsson <ola.x.nilsson at axis.com>
>> ---
>> scripts/devtool | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/scripts/devtool b/scripts/devtool
>> index 0c32c50..7b134a6 100755
>> --- a/scripts/devtool
>> +++ b/scripts/devtool
>> @@ -317,7 +317,7 @@ def main():
>>         parser_create_workspace.add_argument('--create-only', action="store_true", help='Only create the workspace layer, do not alter configuration')
>>         parser_create_workspace.set_defaults(func=create_workspace, no_workspace=True)
>>
>> -    for plugin in plugins:
>> +    for plugin in set(plugins):
>>         if hasattr(plugin, 'register_commands'):
>>             plugin.register_commands(subparsers, context)
>>
>> This is directly comparing the plugin modules or classes, which, if there’s shadowing going on, 
>> will almost certainly be different, and we’ll still end up with the same commands registered multiple times. 
>> And of course, use of set will also change the plugin command registration order. If we’re going to ignore 
>> commands on some of the plugins, it should have avoided loading them entirely, not load them and then 
>> prevent registration. We should change the plugin *loading* to only load the highest priority 
>>(first seen in bbpath) file for a given .py, based on the file / module name, IMO.

Agreed, this does not work as intended.  Please ignore this patch, I'll try to produce something better.

The way the plugin loader works, there can only be a single plugin loaded with a specific file name. 
So shadowing occurs, but probably not the way we want. I think the last found plugin will win,  that is the plugin in the lowest priority layer.

Do we want shadowing to work on plugin or command level?

-- 
Ola Nilsson


More information about the Openembedded-core mailing list