tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1569Shell 203Rust 109Markdown 993728 Definitions

⎇ 4190c7b43e5bd323a9b166340cfa16cd324ca2e4 scripts/kde/repo-selfcontain.py Python · 68 lines · 2.6 KB History Who touched what raw

kde/Plasma: hito H-QML PASADO — hidratación FHS del cierre runtime + reproducer QML 08510c042 · sergio ·

1#!/usr/bin/env python3
2"""repo-selfcontain.py — vuelve el repo KDE AUTO-CONTENIDO para hidratar por `install`.
3
4`install` lee los `depends` del recipe embebido en cada `.swm` y resuelve cada nombre como
5CLAVE del índice. El repo KDE cosechado (work/repo-kde) no cierra:
6  1. deps a nombres de receta-archivo qt-cortos (`qtbase`) cuando el paquete es `qt6-qtbase`.
7  2. faltan libs base del cierre (libffi/libpng/gperf/mako/markupsafe/packaging y su cierre).
8
9Este script, SIN re-buildear nada:
10  - trae de dist/repo (repo base firmado, cierre completo) todo paquete cuyo nombre no esté ya
11    en el repo KDE (colisión → gana la versión KDE), copiando su `.swm`.
12  - agrega entradas ALIAS qt-corto→qt6-* (mismo `.swm`, otra clave de índice).
13El índice resultante se re-firma aparte con `hammer repo sign`.
14"""
15import json, shutil, sys
16from pathlib import Path
17
18ROOT = Path(__file__).resolve().parents[2]
19KDE = ROOT / "work/repo-kde"
20BASE = ROOT / "dist/repo"
21
22kde_idx = json.loads((KDE / "index.json").read_text())
23base_idx = json.loads((BASE / "index.json").read_text())
24
25kde_pkgs = kde_idx["packages"]
26kde_names = {p["name"] for p in kde_pkgs}
27base_by_name = {p["name"]: p for p in base_idx["packages"]}
28
29added_base, copied, aliases = [], 0, []
30
31# 1) traer del repo base todo lo que el KDE no tenga (colisión → gana KDE)
32for name, entry in base_by_name.items():
33    if name in kde_names:
34        continue
35    src = BASE / entry["file"]
36    if not src.exists():
37        continue
38    dst = KDE / entry["file"]
39    if not dst.exists():
40        shutil.copy2(src, dst); copied += 1
41    kde_pkgs.append(entry)
42    kde_names.add(name)
43    added_base.append(name)
44
45# 2) aliases qt-corto → qt6-* (misma .swm, clave de índice distinta)
46by_name = {p["name"]: p for p in kde_pkgs}
47for p in list(kde_pkgs):
48    n = p["name"]
49    if n.startswith("qt6-qt"):
50        short = n[len("qt6-"):]          # qt6-qtbase -> qtbase
51        if short not in kde_names:
52            alias = dict(p); alias["name"] = short
53            kde_pkgs.append(alias); kde_names.add(short); aliases.append(short)
54
55kde_idx["packages"] = kde_pkgs
56(KDE / "index.json").write_text(json.dumps(kde_idx, indent=None))
57
58print(f"base traídos: {len(added_base)} ({copied} .swm copiados)")
59print(f"aliases qt:   {len(aliases)} -> {' '.join(sorted(aliases))}")
60print(f"total índice: {len(kde_pkgs)} entradas")
61
62# 3) chequeo de cierre: cada dep declarado en el índice ahora resuelve
63missing = set()
64for p in kde_pkgs:
65    for d in p.get("deps", []):
66        if d not in kde_names:
67            missing.add(d)
68print(f"deps del índice sin resolver: {len(missing)} {sorted(missing) if missing else ''}")