diff options
author | Eli Schwartz <eschwartz@archlinux.org> | 2021-12-04 21:11:51 -0500 |
---|---|---|
committer | Eli Schwartz <eschwartz@archlinux.org> | 2022-01-10 18:36:57 -0500 |
commit | 4b351aef26a19b4c73f6ef295f64da1c74bc713d (patch) | |
tree | 44f0b5c34c6bfb06360ffc22870ff423fc9305e2 /mesonbuild/msubprojects.py | |
parent | 98a41ec24e77d7670ea83fd986853d0fe7cb2f5b (diff) | |
download | meson-4b351aef26a19b4c73f6ef295f64da1c74bc713d.zip meson-4b351aef26a19b4c73f6ef295f64da1c74bc713d.tar.gz meson-4b351aef26a19b4c73f6ef295f64da1c74bc713d.tar.bz2 |
first pass at migrating to dataclasses
In some cases, init variables that accept None as a sentinel and
immediately overwrite with [], are migrated to dataclass field
factories. \o/
Note: dataclasses by default cannot provide eq methods, as they then
become unhashable. In the future we may wish to opt into declaring them
frozen, instead/additionally.
Diffstat (limited to 'mesonbuild/msubprojects.py')
-rwxr-xr-x | mesonbuild/msubprojects.py | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/mesonbuild/msubprojects.py b/mesonbuild/msubprojects.py index 67bfca8..4eb3632 100755 --- a/mesonbuild/msubprojects.py +++ b/mesonbuild/msubprojects.py @@ -1,3 +1,4 @@ +from dataclasses import dataclass, InitVar import os, subprocess import argparse import asyncio @@ -94,18 +95,22 @@ class Logger: self.print_progress() +@dataclass(eq=False) class Runner: - def __init__(self, logger: Logger, r: Resolver, wrap: PackageDefinition, repo_dir: str, options: 'Arguments') -> None: + logger: Logger + r: InitVar[Resolver] + wrap: PackageDefinition + repo_dir: str + options: 'Arguments' + + def __post_init__(self, r: Resolver) -> None: # FIXME: Do a copy because Resolver.resolve() is stateful method that # cannot be called from multiple threads. self.wrap_resolver = copy.copy(r) - self.wrap_resolver.dirname = os.path.join(r.subdir_root, wrap.directory) - self.wrap = self.wrap_resolver.wrap = wrap - self.repo_dir = repo_dir - self.options = options - self.run_method: T.Callable[[], bool] = options.subprojects_func.__get__(self) # type: ignore + self.wrap_resolver.dirname = os.path.join(r.subdir_root, self.wrap.directory) + self.wrap_resolver.wrap = self.wrap + self.run_method: T.Callable[[], bool] = self.options.subprojects_func.__get__(self) # type: ignore self.log_queue: T.List[T.Tuple[mlog.TV_LoggableList, T.Any]] = [] - self.logger = logger def log(self, *args: mlog.TV_Loggable, **kwargs: T.Any) -> None: self.log_queue.append((list(args), kwargs)) |