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 <anton@hvornum.se>
1 files changed, 0 insertions, 31 deletions
diff --git a/archinstall/lib/pacman.py b/archinstall/lib/pacman.py deleted file mode 100644 index f5514f05..00000000 --- a/ archinstall/lib/pacman.py+++ /dev/null @@ -1,31 +0,0 @@ -import pathlib -import time -from typing import TYPE_CHECKING, Any - -from .general import SysCommand -from .output import warn, error - -if TYPE_CHECKING: - _: Any - - -def run_pacman(args :str, default_cmd :str = 'pacman') -> SysCommand: - """ - A centralized function to call `pacman` from. - It also protects us from colliding with other running pacman sessions (if used locally). - The grace period is set to 10 minutes before exiting hard if another pacman instance is running. - """ - pacman_db_lock = pathlib.Path('/var/lib/pacman/db.lck') - - if pacman_db_lock.exists(): - warn(_('Pacman is already running, waiting maximum 10 minutes for it to terminate.')) - - started = time.time() - while pacman_db_lock.exists(): - time.sleep(0.25) - - if time.time() - started > (60 * 10): - error(_('Pre-existing pacman lock never exited. Please clean up any existing pacman sessions before using archinstall.')) - exit(1) - - return SysCommand(f'{default_cmd} {args}') |