← pag

Commit b035dbe

0
plików
+0
dodanych
-0
usuniętych
@@ -1,7 +1,7 @@
1 1 #!/usr/bin/env python3
2 2 """
3 3 ╔══════════════════════════════════════════════════════════════════════════════╗
4 -║ PAG - Pagan Linux Package Manager v3.3.14 ║
4 +║ PAG - Pagan Linux Package Manager v3.3.15 ║
5 5 ║ Produkcyjny menedżer pakietów – atomowy, bezpieczny, i18n ║
6 6 ╚══════════════════════════════════════════════════════════════════════════════╝
7 7
@@ -55,7 +55,7 @@ import threading, itertools
55 55 import uuid # serialNumber SBOM (CycloneDX)
56 56
57 57 # Wersja klienta – do porównania z repo.json["pag_version"] (self-update)
58 -PAG_VERSION = "3.3.14"
58 +PAG_VERSION = "3.3.15"
59 59 from urllib.error import URLError, HTTPError
60 60
61 61 # =============================================================================
@@ -1621,6 +1621,29 @@ def _atomic_install(pkg_path: str, pkg: PackageInfo, deploy_dir: str = "",
1621 1621 _rollback_journal(journal, staging)
1622 1622 return False, [], backup_journal
1623 1623
1624 + # Odbuduj cache ikon GTK dla motywów dotkniętych instalacją.
1625 + # Bez icon-theme.cache aplikacje GTK nie widzą ikon mimo obecności
1626 + # motywu (np. /usr/share/icons/Papirus). Pomijamy, gdy narzędzie
1627 + # nie jest zainstalowane.
1628 + _icon_dirs = set()
1629 + for f in installed_files:
1630 + fp = f.get("path", "") or ""
1631 + if fp.startswith("/usr/share/icons/"):
1632 + _rest = fp[len("/usr/share/icons/"):]
1633 + _theme = _rest.split("/", 1)[0]
1634 + if _theme:
1635 + _icon_dirs.add(os.path.join(PAG_ROOT, "usr/share/icons", _theme))
1636 + if _icon_dirs:
1637 + try:
1638 + subprocess.run(["gtk-update-icon-cache", "--version"],
1639 + capture_output=True, timeout=10)
1640 + for _d in sorted(_icon_dirs):
1641 + if os.path.isdir(_d):
1642 + subprocess.run(["gtk-update-icon-cache", "-f", "-q", _d],
1643 + capture_output=True, timeout=300)
1644 + except Exception:
1645 + pass
1646 +
1624 1647 # Uruchom hooki post-install
1625 1648 hooks_dir = os.path.join(staging, "hooks")
1626 1649 _run_hook(hooks_dir, "post-install", pkg)
@@ -2171,14 +2194,14 @@ def cmd_install(package_names, as_dep=False, upgrade=False):
2171 2194 # --- Tryb upgrade: pakiety już zainstalowane MUSZĄ zostać ponownie
2172 2195 # zainstalowane z nowszej wersji (zastąpienie w tej samej transakcji).
2173 2196 if upgrade:
2197 + # `pag update` przekazuje tu tylko pakiety z NOWSZĄ wersją (już
2198 + # przefiltrowane w _pending_updates), a `pag install -f` wymusza
2199 + # reinstalację nawet tej SAMEJ wersji – dlatego nie filtrujemy po
2200 + # _version_newer.
2174 2201 upgrade_targets = [
2175 2202 name for name in package_names
2176 2203 if name in repo_pkgs
2177 2204 and name in installed_db
2178 - and _version_newer(
2179 - repo_pkgs[name].version,
2180 - installed_db[name].get("version", "0")
2181 - )
2182 2205 and name not in pinned
2183 2206 ]
2184 2207 for name in upgrade_targets:
@@ -4711,7 +4734,9 @@ def main():
4711 4734
4712 4735 with DatabaseLock():
4713 4736 WRITE_COMMANDS = {
4714 - "install": lambda: cmd_install(args),
4737 + "install": lambda: cmd_install(
4738 + [a for a in args if a not in ("-f", "--force")],
4739 + upgrade=("-f" in args or "--force" in args)),
4715 4740 "remove": lambda: cmd_remove(args),
4716 4741 "update": lambda: cmd_update(do_upgrade=True),
4717 4742 "sync": lambda: cmd_update(do_upgrade=False),