Skip to content

Commit 1f63d0a

Browse files
authored
feat: use DI
1 parent 1c6df84 commit 1f63d0a

File tree

17 files changed

+188
-271
lines changed

17 files changed

+188
-271
lines changed

.python-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.13.3
1+
3.13.5

builder/__main__.py

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
from pathlib import Path
77
from importlib.metadata import version
88

9+
from builder.core import KernelBuilder, AssetsCollector
910
from builder.tools import cleaning as cm, commands as ccmd, Logger as logger
1011
from builder.configs import ArgumentConfig, DirectoryConfig as dcfg
1112
from builder.engines import GenericContainerEngine
1213
from builder.commands import KernelCommand, AssetsCommand, BundleCommand
14+
from builder.managers import ResourceManager
1315

1416

1517
def __get_version() -> str:
@@ -264,35 +266,43 @@ def main(args: argparse.Namespace) -> None:
264266
ccmd.launch(engined_cmd)
265267

266268
case "local":
269+
kernel_builder = KernelBuilder(
270+
codename = args.codename,
271+
base = args.base,
272+
lkv = args.lkv,
273+
clean_kernel = args.clean_kernel,
274+
ksu = args.ksu,
275+
defconfig = args.defconfig,
276+
rmanager = ResourceManager(
277+
codename = args.codename,
278+
lkv = args.lkv,
279+
base = args.base
280+
)
281+
)
282+
assets_collector = AssetsCollector(
283+
codename = args.codename,
284+
base = args.base,
285+
chroot = args.chroot,
286+
clean_assets = args.clean_assets,
287+
rom_only = args.rom_only,
288+
ksu = args.ksu,
289+
)
290+
267291
match args.command:
268292
case "kernel":
269-
kc = KernelCommand(
270-
codename = args.codename,
271-
base = args.base,
272-
lkv = args.lkv,
273-
clean_kernel = args.clean_kernel,
274-
ksu = args.ksu,
275-
defconfig = args.defconfig,
276-
)
293+
kc = KernelCommand(kernel_builder=kernel_builder)
277294
kc.execute()
295+
278296
case "assets":
279-
ac = AssetsCommand(
280-
codename = args.codename,
281-
base = args.base,
282-
chroot = args.chroot,
283-
clean_assets = args.clean_assets,
284-
rom_only = args.rom_only,
285-
ksu = args.ksu,
286-
)
297+
ac = AssetsCommand(assets_collector=assets_collector)
287298
ac.execute()
288-
case "bundle":
299+
300+
case "bundle":
289301
bc = BundleCommand(
290-
codename = args.codename,
291-
base = args.base,
292-
lkv = args.lkv,
302+
kernel_builder = kernel_builder,
303+
assets_collector = assets_collector,
293304
package_type = args.package_type,
294-
ksu = args.ksu,
295-
defconfig = args.defconfig,
305+
base = args.base
296306
)
297307
bc.execute()
298308

builder/commands/assets.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,22 @@
1+
import logging
12
from typing import Literal
23
from pydantic import BaseModel
34

45
from builder.core import AssetsCollector
6+
from builder.tools import banner, fileoperations as fo
57
from builder.interfaces import ICommand
68

79

10+
log = logging.getLogger("ZeroKernelLogger")
11+
12+
813
class AssetsCommand(BaseModel, ICommand):
914
"""Command responsible for launching the 'assets_collector' core module directly.
1015
11-
:param str codename: Device codename.
12-
:param str base: Kernel source base.
13-
:param Literal["full","minimal"] chroot: Chroot type.
14-
:param bool rom_only: Flag indicating ROM-only asset collection.
15-
:param bool ksu: Flag indicating KernelSU support.
16+
:param builder.core.AssetsCollector assets_collector: Assets collector object.
1617
"""
1718

18-
codename: str
19-
base: str
20-
chroot: Literal["full", "minimal"]
21-
clean_assets: bool
22-
rom_only: bool
23-
ksu: bool
19+
assets_collector: AssetsCollector
2420

2521
def execute(self) -> None:
26-
ac = AssetsCollector(**self.__dict__)
27-
ac.run()
22+
self.assets_collector.run()

builder/commands/bundle.py

Lines changed: 18 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -10,57 +10,41 @@
1010
from builder.core import KernelBuilder, AssetsCollector
1111
from builder.tools import Logger, cleaning as cm, commands as ccmd, fileoperations as fo
1212
from builder.configs import DirectoryConfig as dcfg
13-
from builder.managers import ResourceManager
14-
from builder.interfaces import ICommand, IBundleCommand
13+
from builder.interfaces import ICommand
1514

1615

1716
log = logging.getLogger("ZeroKernelLogger")
1817

1918

20-
class BundleCommand(BaseModel, ICommand, IBundleCommand):
19+
class BundleCommand(BaseModel, ICommand):
2120
"""Command that packages the artifacts produced both by 'kernel_builder' and 'assets_collector' core modules.
2221
23-
:param str base: Kernel source base.
24-
:param str lkv: Linux kernel version.
22+
:param builder.core.KernelBuilder kernel_builder: Kernel builder object.
23+
:param builder.core.AssetsCollector assets_collector: Assets collector object.
2524
:param str package_type: Package type.
26-
:param bool ksu: Flag indicating KernelSU support.
27-
:param Optional[Path]=None defconfig: Path to custom defconfig.
25+
:param str base: ROM base for the kernel.
2826
"""
2927

30-
codename: str
31-
base: str
32-
lkv: str
28+
kernel_builder: KernelBuilder
29+
assets_collector: AssetsCollector
3330
package_type: str
34-
ksu: bool
35-
defconfig: Optional[Path] = None
31+
base: str
3632

37-
def build_kernel(self, rom_name: str, clean_only: bool = False) -> None:
33+
def build_kernel(self, rom_name: str, clean_only: Optional[bool] = False) -> None:
3834
if not dcfg.kernel.is_dir() or clean_only is True:
39-
kb = KernelBuilder(
40-
codename = self.codename,
41-
base = rom_name,
42-
lkv = self.lkv,
43-
clean_kernel = clean_only,
44-
ksu = self.ksu,
45-
rmanager=ResourceManager(codename=self.codename, lkv=self.lkv, base=self.base),
46-
defconfig = self.defconfig,
47-
)
48-
kb.run()
35+
self.kernel_builder.clean_kernel = clean_only # type: ignore
36+
37+
self.kernel_builder.run()
4938

5039
@property
5140
def _rom_only_flag(self) -> bool:
5241
return True if "full" not in self.package_type else False
5342

5443
def collect_assets(self, rom_name: str, chroot: Literal["full", "minimal"]) -> None:
55-
ac = AssetsCollector(
56-
codename = self.codename,
57-
base = rom_name,
58-
chroot = chroot,
59-
clean_assets = True,
60-
rom_only = self._rom_only_flag,
61-
ksu = self.ksu,
62-
)
63-
ac.run()
44+
self.assets_collector.clean_assets = True
45+
self.assets_collector.rom_only = self._rom_only_flag
46+
47+
self.assets_collector.run()
6448

6549
def conan_sources(self) -> None:
6650
print("\n", end="")
@@ -105,7 +89,7 @@ def conan_package(self, options: tuple[str, ...], reference: str) -> None:
10589
cmd += f" -o {option_name}={option_value}"
10690

10791
# add codename as an option separately
108-
cmd += f" -o codename={self.codename}"
92+
cmd += f" -o codename={self.kernel_builder.codename}"
10993
ccmd.launch(cmd)
11094

11195
@staticmethod
@@ -151,7 +135,7 @@ def execute(self) -> None:
151135
# form Conan reference
152136
name = "zero_kernel"
153137
version = os.getenv("KVERSION")
154-
user = self.codename
138+
user = self.kernel_builder.codename
155139
channel = ""
156140

157141
if ccmd.launch("git branch --show-current", get_output=True) == "main":

builder/commands/kernel.py

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,21 @@
1-
from pathlib import Path
2-
from typing import Optional
1+
import logging
32
from pydantic import BaseModel
43

54
from builder.core import KernelBuilder
6-
from builder.managers import ResourceManager
5+
from builder.tools import banner, fileoperations as fo
76
from builder.interfaces import ICommand
87

98

9+
log = logging.getLogger("ZeroKernelLogger")
10+
11+
1012
class KernelCommand(BaseModel, ICommand):
1113
"""Command responsible for launching the 'kernel_builder' core module directly.
1214
13-
:param str codename: Device codename.
14-
:param str base: Kernel source base.
15-
:param str lkv: Linux kernel version.
16-
:param bool clean_kernel: Flag to clean folder with kernel sources.
17-
:param bool ksu: Flag indicating KernelSU support.
18-
:param Optional[Path]=None defconfig: Path to custom defconfig.
15+
:param builder.core.KernelBuilder kernel_builder: Kernel builder object.
1916
"""
2017

21-
codename: str
22-
base: str
23-
lkv: str
24-
clean_kernel: bool
25-
ksu: bool
26-
defconfig: Optional[Path] = None
18+
kernel_builder: KernelBuilder
2719

2820
def execute(self) -> None:
29-
# create resource manager and pass it to the builder
30-
kb = KernelBuilder(
31-
**self.__dict__,
32-
rmanager=ResourceManager(codename=self.codename, lkv=self.lkv, base=self.base)
33-
)
34-
kb.run()
21+
self.kernel_builder.run()

builder/core/assets_collector.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from typing import Literal
55
from pydantic import BaseModel
66

7-
from builder.tools import Logger, cleaning as cm, fileoperations as fo, banner
7+
from builder.tools import banner, fileoperations as fo, cleaning as cm
88
from builder.clients import GithubApiClient, LineageOsApiClient, ParanoidAndroidApiClient
99
from builder.configs import DirectoryConfig as dcfg
1010
from builder.interfaces import IAssetsCollector
@@ -106,7 +106,7 @@ def assets(self) -> list:
106106

107107
return None
108108

109-
def _check(self) -> None:
109+
def check(self) -> None:
110110
os.chdir(dcfg.root)
111111

112112
# directory check
@@ -136,7 +136,7 @@ def run(self) -> None:
136136
banner.print_banner("zero asset collector")
137137

138138
os.chdir(dcfg.root)
139-
self._check()
139+
self.check()
140140
os.chdir(dcfg.assets)
141141
# NOTE: call "self.assets" only once!
142142
assets = self.assets

builder/core/kernel_builder.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ def patch_strict_prototypes(self) -> None:
215215
}
216216

217217
# the following files are not present in 4.14
218-
if self._lkv_src != "4.14":
218+
if self.lkv_src != "4.14":
219219
extra_non_414 = {
220220
self.rmanager.paths[self.codename] /\
221221
"drivers" /\
@@ -446,9 +446,9 @@ def patch_ksu(self) -> None:
446446
)
447447

448448
# either patch kernel or KernelSU sources, depending on Linux kernel version
449-
target_d = dcfg.root / "KernelSU" if self._lkv_src == "4.14" else self.rmanager.paths[self.codename]
449+
target_d = dcfg.root / "KernelSU" if self.lkv_src == "4.14" else self.rmanager.paths[self.codename]
450450
fo.ucopy(
451-
dcfg.root / "builder" / "modifications" / self._ucodename / self._lkv_src / patch_name,
451+
dcfg.root / "builder" / "modifications" / self._ucodename / self.lkv_src / patch_name,
452452
target_d
453453
)
454454
os.chdir(target_d)
@@ -461,7 +461,7 @@ def patch_qcacld(self) -> None:
461461
goback = Path.cwd()
462462

463463
fo.ucopy(
464-
dcfg.root / "builder" / "modifications" / self._ucodename / self._lkv_src / patch_name,
464+
dcfg.root / "builder" / "modifications" / self._ucodename / self.lkv_src / patch_name,
465465
self.rmanager.paths[self.codename]
466466
)
467467
os.chdir(self.rmanager.paths[self.codename])
@@ -494,7 +494,7 @@ def patch_kernel(self) -> None:
494494

495495
# apply .patch files
496496
fo.ucopy(
497-
dcfg.root / "builder" / "modifications" / self._ucodename / self._lkv_src,
497+
dcfg.root / "builder" / "modifications" / self._ucodename / self.lkv_src,
498498
self.rmanager.paths[self.codename],
499499
("kernelsu-compat.patch", "qcacld_pa.patch")
500500
)
@@ -521,7 +521,7 @@ def patch_kernel(self) -> None:
521521

522522
# some patches only for ParanoidAndroid
523523
if self.base == "pa":
524-
if self._lkv_src == "4.4":
524+
if self.lkv_src == "4.4":
525525
self.patch_qcacld()
526526
self.patch_ioctl()
527527

@@ -580,7 +580,7 @@ def build(self) -> None:
580580
.format(punits)
581581

582582
# for PA's 4.14, extend the "make" command with additional variables
583-
if (self.base, self._lkv_src) == ("pa", "4.14"):
583+
if (self.base, self.lkv_src) == ("pa", "4.14"):
584584
cmd2 = f"{cmd2} LEX=flex YACC=bison"
585585

586586
# launch and time the build process
@@ -600,7 +600,7 @@ def build(self) -> None:
600600
log.info("Done! Time spent for the build: %02d:%02d:%02d" % (hours, mins, secs))
601601

602602
@property
603-
def _lkv_src(self) -> str:
603+
def lkv_src(self) -> str:
604604
"""Linux kernel version in kernel source.
605605
606606
:return: Linux kernel version found in sources.
@@ -640,7 +640,7 @@ def create_zip(self) -> None:
640640
)
641641

642642
# define kernel versions: Linux and internal
643-
verbase = self._lkv_src
643+
verbase = self.lkv_src
644644
ver_int = os.getenv("KVERSION")
645645

646646
# create the final ZIP file
@@ -677,7 +677,7 @@ def run(self) -> None:
677677
self.write_localversion()
678678
log.info("Done! Tools are configured!")
679679

680-
if self.lkv != self._lkv_src:
680+
if self.lkv != self.lkv_src:
681681
log.error("Linux kernel version in sources is different what was specified in arguments")
682682
sys.exit(1)
683683

builder/interfaces/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from .clients import IRomApiClient
22
from .modules import IKernelBuilder, IAssetsCollector
33
from .engines import IGenericContainerEngine
4-
from .commands import ICommand, IBundleCommand
4+
from .commands import ICommand
55
from .managers import IResourceManager

0 commit comments

Comments
 (0)