From 1ae1f2ff1144d502830834ba5a64262f7d195e91 Mon Sep 17 00:00:00 2001 From: Himadri Bhattacharjee <107522312+lavafroth@users.noreply.github.com> Date: Wed, 28 Jun 2023 11:42:53 +0000 Subject: Refactor installer and general design patterns (#1895) * fix: refactor clear_vt100_escape_codes * fix: check for structure being a dict after handling potential parsing errors * refactor: use short circuit logic than if-elif-else chains * fix: use or for nullish moutpoint attribute * fix: better error handling for JSON from urls and paths * chore: json_stream_to_structure documentation * refactor: dry up relative and chroot path for custom command scripts * refactor: use write_text for pathlib.Path object * refactor: use sets to find intersection instead of filter and list * refactor: replace loop with dictionary comprehension in preparing luks partition * refactor: use walrus operator to check if luks_handler exists * refactor: use read_text and splitlines for potential Path object * fix: use keepends in splitlines for compatibility * fix: use keepends in splitlines for compatibility * feat: set pacman_conf Path as an attribute of installer * fix: empty string is a part of any string, avoid tuples * refactor: use iterator patterns to uncomment multilib and testing blocks * fix: don't json.loads an already loaded structure * fix: use fstab_path uniformly in genfstab * fix: remove unused variable matched * refactor: create separate class to modify pacman.conf in a single pass * fix: remove unused attribute pacman_conf from installer * fix: remove unused attribute pacman_conf from installer * feat: add persist method for pacman.conf, rewrite only when needed * fix: use path.write_text for locale.conf * use `or` operator for nullish new_conf * refactor: Installer.target is always a pathlib.Path object, do not check for string type * fix: use Optional[str] in function type definition instead of sumtype of str and None * fix: mypy type annotation * fix: make flake8 happy * chore: move pacman config and repo into pacman module * refactor: use Pacman object instead of Installer's pacstrap method * fix: break after first sync * fix: keep old build script for now * use nullish operator for base_packages and disk_encryption of Installer * feat: use shutil.which instead of rolling our own implementation * fix: check for binary only if list is not empty * fix: import Enum and fix mypy errors * refactor: use nullish operator for default values * refactor: linear search for key in Installer._trace_log only once * fix: use logs instead of the entirety of self._trace_log when searching for key * refactor: do not copy slice of bytes for search * refactor: use rfind only once to iterate over logs, do not raise ValueError in clear_vt100_escape_codes since TYPE_CHECKING will take care of it. * refactor: try decoding trace log before falling back to strigification * refactor: use an empty dict as default for callbacks in SysCommand.__init__ * refactor: use nullish or operator for slice start and end when not specified * refactor: use nullish or operator for SysCommand session * refactor: use pre-existing decode method in __repr__ for SysCommand * fix: overindentation * fix: use shallow copy of callbacks to prevent mutating the key-value relationships of the argument dict * refactor: use truthy value of self.session is not None for json encoding SysCommand * refactor: directly assign to SysCommand.session in create_session since it short circuits to True if already present * refactor: use dict.items() instead of manually retrieving the value using the key * refactor: user_config_to_json method sounds pretty self explanatory * refactor: store path validity as boolean for return * refactor: use pathlib.Path.write_text to write configs to destinations * fix: cannot use assignment expressions with expression * fix: use config_output.save for saving both config and creds * refactor: switch dictionary keys and values for options to avoid redundancy * refactor: use itertools.takewhile to collect locale.gen entries until the empty line * refactor: use iterative approach for nvidia driver fix * refactor: install packages if not nvidia * refactor: return early if no profile is selected * refactor: use strip to remove commented lines * fix: install additional packages only when we have a driver * fix: path with one command is matched as relative to '.' * fix: remove translation for debug log --------- Co-authored-by: Anton Hvornum --- archinstall/lib/pacman/repo.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 archinstall/lib/pacman/repo.py (limited to 'archinstall/lib/pacman/repo.py') diff --git a/archinstall/lib/pacman/repo.py b/archinstall/lib/pacman/repo.py new file mode 100644 index 00000000..b4106f97 --- /dev/null +++ b/archinstall/lib/pacman/repo.py @@ -0,0 +1,6 @@ +from enum import Enum + +class Repo(Enum): + Multilib = "multilib" + Testing = "testing" + MultilibTesting = "multilib-testing" -- cgit v1.2.3-70-g09d2 From 9b1fd2e44f0b08188a609edaefe696c00869a8b8 Mon Sep 17 00:00:00 2001 From: codefiles <11915375+codefiles@users.noreply.github.com> Date: Thu, 7 Mar 2024 08:41:25 -0500 Subject: Fix enabling of testing repositories (#2340) --- archinstall/lib/installer.py | 2 -- archinstall/lib/pacman/config.py | 23 +++++++++++++++++------ archinstall/lib/pacman/repo.py | 1 - 3 files changed, 17 insertions(+), 9 deletions(-) (limited to 'archinstall/lib/pacman/repo.py') diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 2ea728bb..443e2b90 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -661,8 +661,6 @@ class Installer: if testing: info("The testing flag is set. This system will be installed with testing repositories enabled.") pacman_conf.enable(pacman.Repo.Testing) - if multilib: - pacman_conf.enable(pacman.Repo.MultilibTesting) else: info("The testing flag is not set. This system will be installed without testing repositories enabled.") diff --git a/archinstall/lib/pacman/config.py b/archinstall/lib/pacman/config.py index 60d202bc..6686f4a9 100644 --- a/archinstall/lib/pacman/config.py +++ b/archinstall/lib/pacman/config.py @@ -10,24 +10,35 @@ class Config: def __init__(self, target: Path): self.path = Path("/etc") / "pacman.conf" self.chroot_path = target / "etc" / "pacman.conf" - self.patterns: List[re.Pattern] = [] + self.repos: List[Repo] = [] def enable(self, repo: Repo): - self.patterns.append(re.compile(r"^#\s*\[{}\]$".format(repo.value))) + self.repos.append(repo) def apply(self): - if not self.patterns: + if not self.repos: return + + if Repo.Testing in self.repos: + if Repo.Multilib in self.repos: + repos_pattern = f'({Repo.Multilib.value}|.+-{Repo.Testing.value})' + else: + repos_pattern = f'(?!{Repo.Multilib.value}).+-{Repo.Testing.value}' + else: + repos_pattern = Repo.Multilib.value + + pattern = re.compile(rf"^#\s*\[{repos_pattern}\]$") + lines = iter(self.path.read_text().splitlines(keepends=True)) with open(self.path, 'w') as f: for line in lines: - if any(pattern.match(line) for pattern in self.patterns): + if pattern.match(line): # Uncomment this line and the next. f.write(line.lstrip('#')) f.write(next(lines).lstrip('#')) else: f.write(line) - + def persist(self): - if self.patterns: + if self.repos: copy2(self.path, self.chroot_path) diff --git a/archinstall/lib/pacman/repo.py b/archinstall/lib/pacman/repo.py index b4106f97..7a461431 100644 --- a/archinstall/lib/pacman/repo.py +++ b/archinstall/lib/pacman/repo.py @@ -3,4 +3,3 @@ from enum import Enum class Repo(Enum): Multilib = "multilib" Testing = "testing" - MultilibTesting = "multilib-testing" -- cgit v1.2.3-70-g09d2