hammer-{core,build,bootstrap,overlay,journal,mirror,upgrade,agent,recover,cli}
→ takana-*, con sus deps de workspace, sus identificadores en el fuente y las
referencias -p de los scripts.
VERIFICADO que no mueve nada del corpus: `takana hash recipes/zlib.toml`
devuelve b3:dc363f26… , idéntico a antes del renombre. Los nombres de crate no
entran en hash_inputs, pero eso se comprueba, no se supone. 600 tests en verde.
DOS BINARIOS SE CONGELAN, y no por prolijidad:
- `hammerd` — paquete Y binario. Es componente de Stage 1 de la distro (musl,
busybox, hammerd, arje-zero), lo supervisa arje-zero en el sistema arrancado,
`PRESEED=hammerd` lo nombra en selfhost-verify y sus bytes anclan el baseline
of_tree. El nombre del crate va en los símbolos ⇒ renombrarlo mueve los bytes.
- `hammer-recover` — el PAQUETE se renombra a takana-recover, el BINARIO no.
hammer-live-install.sh lo copia a /usr/sbin/hammer-recover en sistemas ya
instalados y hornea un hook de arranque que lo invoca por ese nombre:
renombrarlo rompe máquinas instaladas, no el repo.
Consecuencia que hay que anotar igual: al renombrar hammer-core, los bytes de
hammerd cambian de todos modos porque linkea contra un crate con otro nombre.
El baseline of_tree del selfhost hay que rehacerlo — es efecto de la etapa 4,
no de un cambio de hammerd.
Las referencias en comentarios de recetas y docs (rutas hammer-core/src/…)
quedan para la etapa 5: son texto, no mueven hash.
42 lines
2.3 KiB
Bash
Executable File
42 lines
2.3 KiB
Bash
Executable File
#!/bin/sh
|
|
# nix-import.sh <attr> — Etapa G: extrae de nixpkgs la "receta" de <attr> (source+hash+deps+flags,
|
|
# NO el binario) y la imprime como receta hammer vía `hammer import-nix`. Es la semilla del catálogo:
|
|
# nixpkgs es el mayor set de recetas desde fuente; importamos la receta y hammer reconstruye.
|
|
#
|
|
# Requiere `nix` (con nix-command). Ej: scripts/nix-import.sh hello > recipes/hello.toml
|
|
# Env: NIXPKGS=<flakeref> (default nixpkgs), HAMMER=<cmd> (default cargo run -q -p takana-cli --)
|
|
set -eu
|
|
|
|
ATTR="${1:?uso: nix-import.sh <attr-de-nixpkgs> (ej: hello, jq, ripgrep)}"
|
|
NIXPKGS="${NIXPKGS:-nixpkgs}"
|
|
HAMMER="${HAMMER:-cargo run -q -p takana-cli --}"
|
|
# NIX_STORE: si el /nix/store del sistema no es escribible (install single-user incompleta), apuntá
|
|
# a un store local, p.ej. NIX_STORE="local?root=$HOME/.nixstore".
|
|
STORE_OPT=""
|
|
[ -n "${NIX_STORE:-}" ] && STORE_OPT="--store ${NIX_STORE}"
|
|
NIXFLAGS="--extra-experimental-features nix-command --extra-experimental-features flakes ${STORE_OPT}"
|
|
|
|
# `nix eval --apply`: aplica una función al paquete y devuelve el JSON NORMALIZADO que el
|
|
# importador consume. Toma la URL+outputHash del `p.src` (la derivación fija del fetch) y los
|
|
# nombres de las deps; el importador clasifica (github→git, flat→tarball) y emite la receta.
|
|
json=$(nix eval $NIXFLAGS --json "${NIXPKGS}#${ATTR}" --apply '
|
|
p: {
|
|
pname = p.pname or (builtins.parseDrvName p.name).name;
|
|
version = p.version or (builtins.parseDrvName p.name).version;
|
|
source = {
|
|
url = p.src.url or (if (p.src.urls or []) == [] then "" else builtins.head p.src.urls);
|
|
output_hash = p.src.outputHash or "";
|
|
output_hash_mode = p.src.outputHashMode or "flat";
|
|
};
|
|
configure_flags = p.configureFlags or [];
|
|
build_inputs = builtins.filter (s: s != "") (map (x: x.pname or x.name or "") (p.buildInputs or []));
|
|
native_build_inputs = builtins.filter (s: s != "") (map (x: x.pname or x.name or "") (p.nativeBuildInputs or []));
|
|
# Rust: buildRustPackage setea cargoDeps ⇒ activa la plantilla Cargo del importador.
|
|
is_rust = builtins.hasAttr "cargoDeps" p;
|
|
# Go: buildGoModule setea vendorHash (goModules en versiones viejas) ⇒ plantilla Go.
|
|
is_go = builtins.hasAttr "vendorHash" p || builtins.hasAttr "goModules" p;
|
|
main_program = p.meta.mainProgram or p.pname or "";
|
|
}')
|
|
|
|
printf '%s' "$json" | $HAMMER import-nix -
|