diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2015-12-22 17:03:01 +1300 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-12-28 09:25:13 +0000 |
commit | 6a7661b8005fadad10bde494131e27406e1e45b8 (patch) | |
tree | 2fb42a3af3beb392d637f1099011e9730ad8ba2c | |
parent | 38803e38d6d03b33817ef1d861e0b34b26c5a5f2 (diff) | |
download | poky-6a7661b8005fadad10bde494131e27406e1e45b8.tar.gz |
recipetool: create: set up priority system for recipe handlers
Sometimes we want to force one handler to run before another; if the two
handlers are in different plugins that's difficult without some kind of
priority number, so add one and sort by it.
(From OE-Core rev: 0219d4fb9cefcee635387b46fc1d215f82753d92)
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | scripts/lib/recipetool/create.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/scripts/lib/recipetool/create.py b/scripts/lib/recipetool/create.py index 3d5a373527..5c249ab0c6 100644 --- a/scripts/lib/recipetool/create.py +++ b/scripts/lib/recipetool/create.py | |||
@@ -251,10 +251,22 @@ def create_recipe(args): | |||
251 | lines_after.append('') | 251 | lines_after.append('') |
252 | 252 | ||
253 | # Find all plugins that want to register handlers | 253 | # Find all plugins that want to register handlers |
254 | handlers = [] | 254 | logger.debug('Loading recipe handlers') |
255 | raw_handlers = [] | ||
255 | for plugin in plugins: | 256 | for plugin in plugins: |
256 | if hasattr(plugin, 'register_recipe_handlers'): | 257 | if hasattr(plugin, 'register_recipe_handlers'): |
257 | plugin.register_recipe_handlers(handlers) | 258 | plugin.register_recipe_handlers(raw_handlers) |
259 | # Sort handlers by priority | ||
260 | handlers = [] | ||
261 | for i, handler in enumerate(raw_handlers): | ||
262 | if isinstance(handler, tuple): | ||
263 | handlers.append((handler[0], handler[1], i)) | ||
264 | else: | ||
265 | handlers.append((handler, 0, i)) | ||
266 | handlers.sort(key=lambda item: (item[1], -item[2]), reverse=True) | ||
267 | for handler, priority, _ in handlers: | ||
268 | logger.debug('Handler: %s (priority %d)' % (handler.__class__.__name__, priority)) | ||
269 | handlers = [item[0] for item in handlers] | ||
258 | 270 | ||
259 | # Apply the handlers | 271 | # Apply the handlers |
260 | classes = [] | 272 | classes = [] |