Browse Source

bitbake: bitbake-layers: adapt force option to not use tinfoil

Fixes [YOCTO #15417]

When a layer adds a new dependency after it was added to a conf, it can not be
removed w/o this dependency in the setup. Even the dependent layer can not be
added, as the tinfoil setup will fail.
Adapt --force to not perform the tinfoil at all, the use will be at own risk,
i.e. the added layers might not parse properly afterwards.
This is not merged into the force option with -F as it even changes the loading of
plugins from other layers and is hence even more invasive as force. Instead
force can now be speciefied multiple times and is counted.

(Bitbake rev: 541fa7f582133949563e65f2d43c4b16e873e5c1)

Signed-off-by: Simone Weiß <simone.p.weiss@posteo.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Simone Weiß 1 year ago
parent
commit
f6de2b033d
2 changed files with 12 additions and 6 deletions
  1. 9 5
      bitbake/bin/bitbake-layers
  2. 3 1
      bitbake/lib/bblayers/action.py

+ 9 - 5
bitbake/bin/bitbake-layers

@@ -33,7 +33,7 @@ def main():
         add_help=False)
         add_help=False)
     parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true')
     parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true')
     parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true')
     parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true')
-    parser.add_argument('-F', '--force', help='Force add without recipe parse verification', action='store_true')
+    parser.add_argument('-F', '--force', help='Forced execution: can be specified multiple times. -F will force add without recipe parse verification and -FF will additionally force the run withput layer parsing.', action='count', default=0)
     parser.add_argument('--color', choices=['auto', 'always', 'never'], default='auto', help='Colorize output (where %(metavar)s is %(choices)s)', metavar='COLOR')
     parser.add_argument('--color', choices=['auto', 'always', 'never'], default='auto', help='Colorize output (where %(metavar)s is %(choices)s)', metavar='COLOR')
 
 
     global_args, unparsed_args = parser.parse_known_args()
     global_args, unparsed_args = parser.parse_known_args()
@@ -59,16 +59,20 @@ def main():
     plugins = []
     plugins = []
     tinfoil = bb.tinfoil.Tinfoil(tracking=True)
     tinfoil = bb.tinfoil.Tinfoil(tracking=True)
     tinfoil.logger.setLevel(logger.getEffectiveLevel())
     tinfoil.logger.setLevel(logger.getEffectiveLevel())
-    try:
+    if global_args.force > 1:
+        bbpaths = []
+    else:
         tinfoil.prepare(True)
         tinfoil.prepare(True)
-        for path in ([topdir] +
-                    tinfoil.config_data.getVar('BBPATH').split(':')):
+        bbpaths = tinfoil.config_data.getVar('BBPATH').split(':')
+    
+    try: 
+        for path in ([topdir] + bbpaths):
             pluginpath = os.path.join(path, 'lib', 'bblayers')
             pluginpath = os.path.join(path, 'lib', 'bblayers')
             bb.utils.load_plugins(logger, plugins, pluginpath)
             bb.utils.load_plugins(logger, plugins, pluginpath)
 
 
         registered = False
         registered = False
         for plugin in plugins:
         for plugin in plugins:
-            if hasattr(plugin, 'tinfoil_init'):
+            if hasattr(plugin, 'tinfoil_init') and global_args.force <= 1:
                 plugin.tinfoil_init(tinfoil)
                 plugin.tinfoil_init(tinfoil)
             if hasattr(plugin, 'register_commands'):
             if hasattr(plugin, 'register_commands'):
                 registered = True
                 registered = True

+ 3 - 1
bitbake/lib/bblayers/action.py

@@ -50,8 +50,8 @@ class ActionPlugin(LayerPlugin):
 
 
         try:
         try:
             notadded, _ = bb.utils.edit_bblayers_conf(bblayers_conf, layerdirs, None)
             notadded, _ = bb.utils.edit_bblayers_conf(bblayers_conf, layerdirs, None)
-            self.tinfoil.modified_files()
             if not (args.force or notadded):
             if not (args.force or notadded):
+                self.tinfoil.modified_files()
                 try:
                 try:
                     self.tinfoil.run_command('parseConfiguration')
                     self.tinfoil.run_command('parseConfiguration')
                 except (bb.tinfoil.TinfoilUIException, bb.BBHandledException):
                 except (bb.tinfoil.TinfoilUIException, bb.BBHandledException):
@@ -83,6 +83,8 @@ class ActionPlugin(LayerPlugin):
                 layerdir = os.path.abspath(item)
                 layerdir = os.path.abspath(item)
             layerdirs.append(layerdir)
             layerdirs.append(layerdir)
         (_, notremoved) = bb.utils.edit_bblayers_conf(bblayers_conf, None, layerdirs)
         (_, notremoved) = bb.utils.edit_bblayers_conf(bblayers_conf, None, layerdirs)
+        if args.force > 1:
+            return 0
         self.tinfoil.modified_files()
         self.tinfoil.modified_files()
         if notremoved:
         if notremoved:
             for item in notremoved:
             for item in notremoved: