Message ID | 20240327195409.8095-1-simone.p.weiss@posteo.com |
---|---|
State | New |
Headers | show |
Series | [v2] bitbake-layers: add/remove option to not use tinfoil | expand |
> -----Original Message----- > From: bitbake-devel@lists.openembedded.org <bitbake-devel@lists.openembedded.org> On Behalf Of Simone Weiß > Sent: den 27 mars 2024 20:54 > To: bitbake-devel@lists.openembedded.org > Cc: Simone Weiß <simone.p.weiss@posteo.com> > Subject: [bitbake-devel] [PATCH v2] bitbake-layers: add/remove option to not use tinfoil > > From: Simone Weiß <simone.p.weiss@posteo.com> > > 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. > Add an option to not perform the tinfoil at all, the use will be at own risk, > i.e. the added layers might not parse properly afterwards. > > Signed-off-by: Simone Weiß <simone.p.weiss@posteo.com> > --- > v2: Rename option to be more meaningful. > bin/bitbake-layers | 14 ++++++++++---- > lib/bblayers/action.py | 6 ++++-- > 2 files changed, 14 insertions(+), 6 deletions(-) > > diff --git a/bin/bitbake-layers b/bin/bitbake-layers > index d4b1d1aa..f7ed5ce0 100755 > --- a/bin/bitbake-layers > +++ b/bin/bitbake-layers > @@ -34,6 +34,7 @@ def main(): > 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('-F', '--force', help='Force add without recipe parse verification', action='store_true') > + parser.add_argument('-S', '--skip_parse_tests', help='Force run without parsing the layers, this might cause later failures.', action='store_true') Does this really need a separate option? Can't the functionality be folded into the already existing -F option? Typically, as a user, if I want to make sure a layer is added no matter what, I would look for an option to force it. And when I find -F, I would look no further. > 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() > @@ -59,16 +60,21 @@ def main(): > plugins = [] > tinfoil = bb.tinfoil.Tinfoil(tracking=True) > tinfoil.logger.setLevel(logger.getEffectiveLevel()) > - try: > + if global_args.skip_parse_tests: > + bbpath_string = [] > + else: > tinfoil.prepare(True) > - for path in ([topdir] + > - tinfoil.config_data.getVar('BBPATH').split(':')): > + bbpath_string = tinfoil.config_data.getVar('BBPATH').split(':') Odd variable name, given that it is not a string but a list. I would call it "bbpaths" instead. > + print(bbpath_string) This looks like a debug leftover... > + > + try: > + for path in ([topdir] + bbpath_string): > pluginpath = os.path.join(path, 'lib', 'bblayers') > bb.utils.load_plugins(logger, plugins, pluginpath) > > registered = False > for plugin in plugins: > - if hasattr(plugin, 'tinfoil_init'): > + if hasattr(plugin, 'tinfoil_init') and not global_args.skip_parse_tests: > plugin.tinfoil_init(tinfoil) > if hasattr(plugin, 'register_commands'): > registered = True > diff --git a/lib/bblayers/action.py b/lib/bblayers/action.py > index a8f26993..5aecc452 100644 > --- a/lib/bblayers/action.py > +++ b/lib/bblayers/action.py > @@ -50,8 +50,8 @@ class ActionPlugin(LayerPlugin): > > try: > 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 or args.skip_parse_tests): > + self.tinfoil.modified_files() > try: > self.tinfoil.run_command('parseConfiguration') > except (bb.tinfoil.TinfoilUIException, bb.BBHandledException): > @@ -83,6 +83,8 @@ class ActionPlugin(LayerPlugin): > layerdir = os.path.abspath(item) > layerdirs.append(layerdir) > (_, notremoved) = bb.utils.edit_bblayers_conf(bblayers_conf, None, layerdirs) > + if args.skip_parse_tests: > + return 0 > self.tinfoil.modified_files() > if notremoved: > for item in notremoved: > -- > 2.39.2 //Peter
diff --git a/bin/bitbake-layers b/bin/bitbake-layers index d4b1d1aa..f7ed5ce0 100755 --- a/bin/bitbake-layers +++ b/bin/bitbake-layers @@ -34,6 +34,7 @@ def main(): 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('-F', '--force', help='Force add without recipe parse verification', action='store_true') + parser.add_argument('-S', '--skip_parse_tests', help='Force run without parsing the layers, this might cause later failures.', action='store_true') 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() @@ -59,16 +60,21 @@ def main(): plugins = [] tinfoil = bb.tinfoil.Tinfoil(tracking=True) tinfoil.logger.setLevel(logger.getEffectiveLevel()) - try: + if global_args.skip_parse_tests: + bbpath_string = [] + else: tinfoil.prepare(True) - for path in ([topdir] + - tinfoil.config_data.getVar('BBPATH').split(':')): + bbpath_string = tinfoil.config_data.getVar('BBPATH').split(':') + print(bbpath_string) + + try: + for path in ([topdir] + bbpath_string): pluginpath = os.path.join(path, 'lib', 'bblayers') bb.utils.load_plugins(logger, plugins, pluginpath) registered = False for plugin in plugins: - if hasattr(plugin, 'tinfoil_init'): + if hasattr(plugin, 'tinfoil_init') and not global_args.skip_parse_tests: plugin.tinfoil_init(tinfoil) if hasattr(plugin, 'register_commands'): registered = True diff --git a/lib/bblayers/action.py b/lib/bblayers/action.py index a8f26993..5aecc452 100644 --- a/lib/bblayers/action.py +++ b/lib/bblayers/action.py @@ -50,8 +50,8 @@ class ActionPlugin(LayerPlugin): try: 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 or args.skip_parse_tests): + self.tinfoil.modified_files() try: self.tinfoil.run_command('parseConfiguration') except (bb.tinfoil.TinfoilUIException, bb.BBHandledException): @@ -83,6 +83,8 @@ class ActionPlugin(LayerPlugin): layerdir = os.path.abspath(item) layerdirs.append(layerdir) (_, notremoved) = bb.utils.edit_bblayers_conf(bblayers_conf, None, layerdirs) + if args.skip_parse_tests: + return 0 self.tinfoil.modified_files() if notremoved: for item in notremoved: