Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/archinstall/lib/pacman.py
blob: f5514f05f5e5c4af9a970dbda2d0831993fb7b76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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}')