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),