From d466af6e92ee67e85c4d932e49f372e21a16bcab Mon Sep 17 00:00:00 2001 From: Chris Laplante Date: Sun, 12 Jan 2025 09:53:55 -0500 Subject: devtool: un-globalize 'context' variable and convert it to a dataclass Please excuse the usage of 'typing' slipping in here - it's just how dataclasses work :/. (From OE-Core rev: 207cdead039383780bd39adbaf2a17b679889c63) Signed-off-by: Chris Laplante Signed-off-by: Mathieu Dubois-Briand Signed-off-by: Richard Purdie --- scripts/devtool | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) (limited to 'scripts/devtool') diff --git a/scripts/devtool b/scripts/devtool index d7a5903c9f..750365c1c9 100755 --- a/scripts/devtool +++ b/scripts/devtool @@ -7,6 +7,7 @@ # SPDX-License-Identifier: GPL-2.0-only # +import dataclasses import sys import os import argparse @@ -15,8 +16,10 @@ import re import configparser import logging +# This can be removed once our minimum is Python 3.9: https://docs.python.org/3/whatsnew/3.9.html#type-hinting-generics-in-standard-collections +from typing import List + config = None -context = None scripts_path = os.path.dirname(os.path.realpath(__file__)) @@ -80,12 +83,15 @@ class ConfigHandler: self.config_obj.add_section(section) self.config_obj.set(section, option, value) + +@dataclasses.dataclass class Context: - def __init__(self, **kwargs): - self.__dict__.update(kwargs) + fixed_setup: bool + config: ConfigHandler + pluginpaths: List[str] -def read_workspace(basepath): +def read_workspace(basepath, context): workspace = {} if not os.path.exists(os.path.join(config.workspace_path, 'conf', 'layer.conf')): if context.fixed_setup: @@ -210,13 +216,10 @@ def _enable_workspace_layer(workspacedir, config, basepath): def main(): global config - global context if sys.getfilesystemencoding() != "utf-8": sys.exit("Please use a locale setting which supports utf-8.\nPython can't change the filesystem locale after loading so we need a utf-8 when python starts or things won't work.") - context = Context(fixed_setup=False) - # Default basepath basepath = os.path.dirname(os.path.abspath(__file__)) @@ -241,21 +244,23 @@ def main(): elif global_args.quiet: logger.setLevel(logging.ERROR) + is_fixed_setup = False + if global_args.basepath: # Override basepath = global_args.basepath if os.path.exists(os.path.join(basepath, '.devtoolbase')): - context.fixed_setup = True + is_fixed_setup = True else: pth = basepath while pth != '' and pth != os.sep: if os.path.exists(os.path.join(pth, '.devtoolbase')): - context.fixed_setup = True + is_fixed_setup = True basepath = pth break pth = os.path.dirname(pth) - if not context.fixed_setup: + if not is_fixed_setup: basepath = os.environ.get('BUILDDIR') if not basepath: logger.error("This script can only be run after initialising the build environment (e.g. by using oe-init-build-env)") @@ -266,7 +271,6 @@ def main(): config = ConfigHandler(basepath, os.path.join(basepath, 'conf', 'devtool.conf')) if not config.read(): return -1 - context.config = config bitbake_subdir = config.get('General', 'bitbake_subdir', '') if bitbake_subdir: @@ -299,7 +303,9 @@ def main(): # Search BBPATH first to allow layers to override plugins in scripts_path pluginpaths = [os.path.join(path, 'lib', 'devtool') for path in global_args.bbpath.split(':') + [scripts_path]] - context.pluginpaths = pluginpaths + + context = Context(fixed_setup=is_fixed_setup, config=config, pluginpaths=pluginpaths) + for pluginpath in pluginpaths: scriptutils.load_plugins(logger, plugins, pluginpath) @@ -332,7 +338,7 @@ def main(): try: workspace = {} if not getattr(args, 'no_workspace', False): - workspace = read_workspace(basepath) + workspace = read_workspace(basepath, context) ret = args.func(args, config, basepath, workspace) except DevtoolError as err: if str(err): -- cgit v1.2.3-54-g00ecf