licencias: la declaración del autor manda — y arreglo 5 recetas que ROMPÍ y commiteé
Dos cosas: una mejora de calidad y un fallo mío que hay que contar entero.
═══ EL FALLO: escribí un error JSON dentro de 5 recetas y las commiteé rotas ═══
En `a6a9d59`, cinco recetas quedaron con
license = "{"message":"Not Found","documentation_url":"...","status":"404"}"
Causa: cuando el repo da 404 (renombrado, borrado, privado), `gh api` escribe el CUERPO DEL
ERROR en stdout y el filtro `--jq` falla, así que la variable queda valiendo el JSON. Mi
`case` sólo descartaba ""/null/NOASSERTION/other ⇒ el JSON pasó como si fuera una licencia.
Las comillas ROMPEN el TOML, y esas 5 recetas dejaron de parsear y de tener ArtifactHash.
No lo vio nadie leyendo: lo cazó la comparación de hashes, al detectar que `cargo-sort`
había cambiado. Afectadas: cargo-sort, cargo-audit, cargo-binstall, waybackurls, usbutils.
La lección no es «se me pasó un caso», es que **validé los «no sé» conocidos en vez de la
FORMA del dato**. Ahora se acepta sólo lo que tiene forma de expresión SPDX, y la barrera
está en los DOS sitios que escriben (detectar y sembrar), más un GUARDIÁN en el informe que
sale ≠0 si alguna licencia tiene forma imposible. Un fallo aguas arriba disfrazado de dato
hay que verlo sin buscarlo.
Y de paso normalizadas 11 licencias con la barra antigua de Cargo (`MIT/Apache-2.0`), que
no es SPDX válido. Traducir la barra a OR no es inferir: Cargo documentó esa equivalencia.
═══ LA MEJORA: `scripts/licencias-cargo.sh` ═══
Lee la licencia que el AUTOR declara en su Cargo.toml, pidiéndola AL TAG QUE LA RECETA
PINEA (`?ref=v<version>`, con HEAD como último recurso y anotando cuál se usó). 176
obtenidas, 167 al tag exacto. Es la fuente más autoritativa de las que usamos y corrige los
dos defectos de la detección por API de una vez:
· las licencias DOBLES dejan de colapsar: `fd` pasa de `Apache-2.0` a `MIT OR Apache-2.0`,
`ripgrep` a `Unlicense OR MIT`, `bat` a `MIT OR Apache-2.0`;
· los SPDX AMBIGUOS caen de 71 a 55, porque el autor sí escribe -only/-or-later.
66 corregidas, 7 nuevas. Y aparecieron cosas que la detección había perdido: `eza` es
EUPL-1.2, una copyleft europea que se habría empaquetado creyendo otra cosa.
Jerarquía de evidencia, escrita en la cabecera del script: nombre (prohibido) < familia/URL
de fuente < API de licencias de GitHub < Cargo.toml del autor.
997 de 1141 (87%). Verificación COMPLETA sobre las 77 recetas tocadas —no una muestra—:
0 hashes cambiados, y 5 que ahora parsean y en HEAD no.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,185 @@
|
|||||||
|
# licencias-cargo.tsv — GENERADO por scripts/licencias-cargo.sh. No editar a mano.
|
||||||
|
#
|
||||||
|
# La licencia que el AUTOR declara en su Cargo.toml: expresión SPDX escrita por quien tiene
|
||||||
|
# la potestad de licenciar. Sin ambigüedad -only/-or-later y SIN colapsar las dobles ⇒ manda
|
||||||
|
# sobre la detección por API de GitHub, que pierde ambas cosas. Sembrar con FORZAR=1.
|
||||||
|
#
|
||||||
|
# Tercera columna = el ref con el que se resolvió. Un tag concreto significa que el dato es
|
||||||
|
# de la VERSIÓN QUE EMPAQUETAMOS; 'HEAD(aprox)' que no se halló el tag y puede diferir.
|
||||||
|
# Total 176 · al tag exacto 167 · aproximadas 9
|
||||||
|
aichat MIT OR Apache-2.0 v0.30.0
|
||||||
|
angle-grinder MIT v0.19.6
|
||||||
|
atac MIT v0.23.0
|
||||||
|
bacon AGPL-3.0 v3.23.0
|
||||||
|
bandwhich MIT v0.23.1
|
||||||
|
bat MIT OR Apache-2.0 v0.26.1
|
||||||
|
bingrep MIT v0.12.1
|
||||||
|
bob-nvim MIT v4.1.7
|
||||||
|
bottom MIT 0.12.3
|
||||||
|
broot MIT v1.57.0
|
||||||
|
caligula GPL-3.0 v0.5.0
|
||||||
|
cargo-bloat MIT v0.12.1
|
||||||
|
cargo-bundle-licenses MIT/Apache-2.0 v4.2.0
|
||||||
|
cargo-cache MIT/Apache-2.0 0.8.3
|
||||||
|
cargo-careful MIT OR Apache-2.0 v0.4.10
|
||||||
|
cargo-criterion Apache-2.0/MIT 1.1.0
|
||||||
|
cargo-deb MIT v3.7.0
|
||||||
|
cargo-deny MIT OR Apache-2.0 0.19.9
|
||||||
|
cargo-edit Apache-2.0 OR MIT v0.13.11
|
||||||
|
cargo-expand MIT OR Apache-2.0 1.0.122
|
||||||
|
cargo-feature MIT v0.7.0
|
||||||
|
cargo-features-manager MIT v0.11.0
|
||||||
|
cargo-flamegraph MIT OR Apache-2.0 v0.6.13
|
||||||
|
cargo-fuzz MIT OR Apache-2.0 0.13.2
|
||||||
|
cargo-generate MIT OR Apache-2.0 v0.23.9
|
||||||
|
cargo-hack Apache-2.0 OR MIT v0.6.45
|
||||||
|
cargo-llvm-cov Apache-2.0 OR MIT v0.8.5
|
||||||
|
cargo-llvm-lines MIT OR Apache-2.0 0.4.46
|
||||||
|
cargo-machete MIT v0.9.2
|
||||||
|
cargo-make Apache-2.0 0.37.24
|
||||||
|
cargo-modules MPL-2.0 v0.26.0
|
||||||
|
cargo-msrv Apache-2.0 OR MIT v0.19.3
|
||||||
|
cargo-mutants MIT v27.1.0
|
||||||
|
cargo-ndk Apache-2.0 OR MIT v4.1.2
|
||||||
|
cargo-outdated MIT v0.19.0
|
||||||
|
cargo-readme MIT OR Apache-2.0 v3.3.2
|
||||||
|
cargo-semver-checks Apache-2.0 OR MIT v0.48.0
|
||||||
|
cargo-sort MIT/Apache-2.0 v2.1.3
|
||||||
|
cargo-supply-chain Apache-2.0 OR MIT OR Zlib v0.3.4
|
||||||
|
cargo-sweep MIT v0.8.0
|
||||||
|
cargo-temp MIT OR Apache-2.0 v0.4.1
|
||||||
|
cargo-udeps MIT OR Apache-2.0 v0.1.61
|
||||||
|
cargo-watch CC0-1.0 v8.5.3
|
||||||
|
cargo-wipe MIT v0.4.0
|
||||||
|
cargo-wizard MIT v0.2.3
|
||||||
|
cargo-zigbuild MIT v0.22.3
|
||||||
|
cbindgen MPL-2.0 v0.27.0
|
||||||
|
choose GPL-3.0-or-later v1.3.7
|
||||||
|
cobalt MIT v0.20.4
|
||||||
|
comrak BSD-2-Clause v0.52.0
|
||||||
|
cosmic-comp GPL-3.0-only HEAD(aprox)
|
||||||
|
cosmic-edit GPL-3.0-only HEAD(aprox)
|
||||||
|
cosmic-files GPL-3.0-only HEAD(aprox)
|
||||||
|
cosmic-osd GPL-3.0-or-later HEAD(aprox)
|
||||||
|
cosmic-session GPL-3.0-only HEAD(aprox)
|
||||||
|
cosmic-settings-daemon GPL-3.0-or-later HEAD(aprox)
|
||||||
|
cosmic-term GPL-3.0-only HEAD(aprox)
|
||||||
|
cpc MIT v3.0.0
|
||||||
|
csview MIT OR Apache-2.0 v1.3.4
|
||||||
|
csvlens MIT v0.13.0
|
||||||
|
dalfox MIT v3.1.2
|
||||||
|
ddh LGPL-3.0 0.13.0
|
||||||
|
delta MIT 0.19.2
|
||||||
|
difftastic MIT 0.69.0
|
||||||
|
diffutils MIT OR Apache-2.0 v0.5.0
|
||||||
|
diskus MIT/Apache-2.0 v0.9.0
|
||||||
|
dotter Unlicense v0.13.4
|
||||||
|
dua MIT v2.34.0
|
||||||
|
dufs MIT OR Apache-2.0 v0.46.0
|
||||||
|
dust Apache-2.0 v1.2.4
|
||||||
|
erdtree MIT v3.1.2
|
||||||
|
eza EUPL-1.2 v0.23.4
|
||||||
|
fastmod Apache-2.0 v0.4.4
|
||||||
|
fblog WTFPL v4.17.0
|
||||||
|
fd MIT OR Apache-2.0 v10.4.2
|
||||||
|
feroxbuster MIT v2.13.1
|
||||||
|
findutils MIT 0.9.1
|
||||||
|
findutils-xargs MIT 0.9.1
|
||||||
|
fnm GPL-3.0 v1.39.0
|
||||||
|
fselect MIT OR Apache-2.0 0.10.1
|
||||||
|
genact MIT v1.5.1
|
||||||
|
git-absorb BSD-3-Clause 0.9.0
|
||||||
|
git-graph MIT v0.7.0
|
||||||
|
git-igitt MIT v0.1.21
|
||||||
|
gitoxide MIT OR Apache-2.0 v0.54.0
|
||||||
|
gitui MIT v0.28.1
|
||||||
|
gitu MIT v0.42.0
|
||||||
|
gptman MIT OR Apache-2.0 v1.1.0
|
||||||
|
grcov MPL-2.0 v0.9.1
|
||||||
|
grex Apache-2.0 v1.4.6
|
||||||
|
heh MIT v0.6.3
|
||||||
|
hexyl MIT/Apache-2.0 v0.17.0
|
||||||
|
hgrep MIT v0.3.9
|
||||||
|
htmlq MIT v0.4.0
|
||||||
|
hwatch MIT 0.4.2
|
||||||
|
hyperfine MIT OR Apache-2.0 v1.20.0
|
||||||
|
igrep MIT v1.3.0
|
||||||
|
jnv MIT v0.7.1
|
||||||
|
joshuto LGPL-3.0 v0.9.9
|
||||||
|
just CC0-1.0 1.51.0
|
||||||
|
kbs2 MIT v0.7.3
|
||||||
|
kmon GPL-3.0 v1.7.1
|
||||||
|
kubie Zlib v0.26.1
|
||||||
|
lsd Apache-2.0 v1.2.0
|
||||||
|
macchina MIT v6.4.0
|
||||||
|
maturin MIT OR Apache-2.0 v1.12.6
|
||||||
|
mcfly MIT v0.9.3
|
||||||
|
mdbook-mermaid MPL-2.0 v0.17.0
|
||||||
|
mdbook-toc MPL-2.0 0.15.4
|
||||||
|
miniserve MIT v0.35.0
|
||||||
|
mise MIT v2026.7.0
|
||||||
|
monolith CC0-1.0 v2.10.1
|
||||||
|
natls MIT v2.1.14
|
||||||
|
navi Apache-2.0 v2.24.0
|
||||||
|
netscanner MIT v0.6.41
|
||||||
|
nomino MIT OR Apache-2.0 v1.6.4
|
||||||
|
nu MIT 0.104.1
|
||||||
|
oha MIT v1.14.0
|
||||||
|
otree MIT v0.6.5
|
||||||
|
ouch MIT 0.8.0
|
||||||
|
ox GPL-2.0 0.7.7
|
||||||
|
parallel-disk-usage Apache-2.0 0.21.1
|
||||||
|
pastel MIT/Apache-2.0 v0.12.0
|
||||||
|
pls GPL-3.0-or-later v0.0.1-beta.10
|
||||||
|
pop-launcher MPL-2.0 1.2.7
|
||||||
|
presenterm BSD-2-Clause v0.16.1
|
||||||
|
procs MIT v0.14.11
|
||||||
|
rep-grep MIT 0.0.8
|
||||||
|
repgrep Unlicense OR MIT OR Apache-2.0 0.16.1
|
||||||
|
rip2 GPL-3.0+ v0.9.6
|
||||||
|
ripgrep-all AGPL-3.0-or-later v0.10.10
|
||||||
|
ripgrep Unlicense OR MIT 14.1.1
|
||||||
|
ripsecrets MIT v0.1.11
|
||||||
|
rnr MIT v0.5.1
|
||||||
|
ruplacer BSD-3-Clause v0.10.0
|
||||||
|
russ AGPL-3.0-or-later HEAD(aprox)
|
||||||
|
rustcat GPL-3.0 v3.0.0
|
||||||
|
rustic Apache-2.0 OR MIT v0.11.3
|
||||||
|
rustscan GPL-3.0-only 2.4.1
|
||||||
|
rust-script MIT/Apache-2.0 0.36.0
|
||||||
|
sccache Apache-2.0 v0.15.0
|
||||||
|
sendme Apache-2.0 OR MIT v0.33.0
|
||||||
|
serie MIT v0.8.0
|
||||||
|
shellharden MPL-2.0 v4.3.1
|
||||||
|
simple-http-server MIT v0.8.0
|
||||||
|
skim MIT v4.7.0
|
||||||
|
sshs MIT 4.7.2
|
||||||
|
ssh-vault BSD-3-Clause 1.2.10
|
||||||
|
starship ISC v1.25.1
|
||||||
|
stylua MPL-2.0 v2.5.2
|
||||||
|
systemctl-tui MIT v0.5.2
|
||||||
|
taskwarrior-tui MIT v0.27.0
|
||||||
|
tealdeer MIT OR Apache-2.0 v1.8.1
|
||||||
|
television MIT 0.15.9
|
||||||
|
tenere GPL-3.0-or-later v0.11.3
|
||||||
|
tere EUPL-1.2 v1.6.0
|
||||||
|
the-way MIT v0.20.3
|
||||||
|
tokei MIT OR Apache-2.0 v14.0.0
|
||||||
|
tomlq MIT 0.2.2
|
||||||
|
topgrade GPL-3.0-or-later v17.6.1
|
||||||
|
trunk MIT/Apache-2.0 v0.21.14
|
||||||
|
ttyper MIT v1.6.0
|
||||||
|
tuc GPL-3.0-or-later v1.3.0
|
||||||
|
tuckr GPL-3.0-or-later 0.13.1
|
||||||
|
viddy MIT v1.3.1
|
||||||
|
viu MIT v1.6.1
|
||||||
|
vivid MIT/Apache-2.0 v0.11.1
|
||||||
|
wasm-pack MIT OR Apache-2.0 v0.15.0
|
||||||
|
xan Unlicense OR MIT 0.59.0
|
||||||
|
xdg-desktop-portal-cosmic GPL-3.0-or-later HEAD(aprox)
|
||||||
|
xh MIT v0.25.3
|
||||||
|
xsv Unlicense/MIT 0.13.0
|
||||||
|
xwin Apache-2.0 OR MIT 0.7.0
|
||||||
|
zenith MIT 0.15.0
|
||||||
|
zola EUPL-1.2 v0.22.1
|
||||||
|
zoxide MIT v0.9.9
|
||||||
|
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "aichat"
|
name = "aichat"
|
||||||
version = "0.30.0"
|
version = "0.30.0"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/sigoden/aichat"
|
repo = "https://github.com/sigoden/aichat"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "bat"
|
name = "bat"
|
||||||
version = "0.26.1"
|
version = "0.26.1"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/sharkdp/bat"
|
repo = "https://github.com/sharkdp/bat"
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
# - deps.build=["zlib"]: git2/openssl-sys enlazan -lz.
|
# - deps.build=["zlib"]: git2/openssl-sys enlazan -lz.
|
||||||
name = "cargo-audit"
|
name = "cargo-audit"
|
||||||
version = "0.22.1"
|
version = "0.22.1"
|
||||||
license = "{"message":"Not Found","documentation_url":"https://docs.github.com/rest/licenses/licenses#get-the-license-for-a-repository","status":"404"}"
|
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/RustSec/cargo-audit/archive/cargo-audit/v0.22.1.tar.gz"
|
tarball = "https://github.com/RustSec/cargo-audit/archive/cargo-audit/v0.22.1.tar.gz"
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-binstall"
|
name = "cargo-binstall"
|
||||||
version = "1.20.0"
|
version = "1.20.0"
|
||||||
license = "{"message":"Not Found","documentation_url":"https://docs.github.com/rest/licenses/licenses#get-the-license-for-a-repository","status":"404"}"
|
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/cargo-bins/cargo-binstall"
|
repo = "https://github.com/cargo-bins/cargo-binstall"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-bundle-licenses"
|
name = "cargo-bundle-licenses"
|
||||||
version = "4.2.0"
|
version = "4.2.0"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/sstadick/cargo-bundle-licenses"
|
repo = "https://github.com/sstadick/cargo-bundle-licenses"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-cache"
|
name = "cargo-cache"
|
||||||
version = "0.8.3"
|
version = "0.8.3"
|
||||||
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/matthiaskrgr/cargo-cache"
|
repo = "https://github.com/matthiaskrgr/cargo-cache"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-careful"
|
name = "cargo-careful"
|
||||||
version = "0.4.10"
|
version = "0.4.10"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/RalfJung/cargo-careful"
|
repo = "https://github.com/RalfJung/cargo-careful"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-criterion"
|
name = "cargo-criterion"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0 OR MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/bheisler/cargo-criterion"
|
repo = "https://github.com/bheisler/cargo-criterion"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-deny"
|
name = "cargo-deny"
|
||||||
version = "0.19.9"
|
version = "0.19.9"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/EmbarkStudios/cargo-deny"
|
repo = "https://github.com/EmbarkStudios/cargo-deny"
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
# `cargo rustc --` exige un único target, itero los 4 bins. El install lo auto-genera el lab.
|
# `cargo rustc --` exige un único target, itero los 4 bins. El install lo auto-genera el lab.
|
||||||
name = "cargo-edit"
|
name = "cargo-edit"
|
||||||
version = "0.13.11"
|
version = "0.13.11"
|
||||||
license = "MIT"
|
license = "Apache-2.0 OR MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/killercup/cargo-edit"
|
repo = "https://github.com/killercup/cargo-edit"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-expand"
|
name = "cargo-expand"
|
||||||
version = "1.0.122"
|
version = "1.0.122"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/dtolnay/cargo-expand"
|
repo = "https://github.com/dtolnay/cargo-expand"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-flamegraph"
|
name = "cargo-flamegraph"
|
||||||
version = "0.6.13"
|
version = "0.6.13"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/flamegraph-rs/flamegraph"
|
repo = "https://github.com/flamegraph-rs/flamegraph"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-fuzz"
|
name = "cargo-fuzz"
|
||||||
version = "0.13.2"
|
version = "0.13.2"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/rust-fuzz/cargo-fuzz"
|
repo = "https://github.com/rust-fuzz/cargo-fuzz"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-generate"
|
name = "cargo-generate"
|
||||||
version = "0.23.9"
|
version = "0.23.9"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/cargo-generate/cargo-generate"
|
repo = "https://github.com/cargo-generate/cargo-generate"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# El `cargo auditable` del abuild de Alpine no existe en el lab ⇒ se elimina.
|
# El `cargo auditable` del abuild de Alpine no existe en el lab ⇒ se elimina.
|
||||||
name = "cargo-hack"
|
name = "cargo-hack"
|
||||||
version = "0.6.45"
|
version = "0.6.45"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0 OR MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/taiki-e/cargo-hack/archive/refs/tags/v0.6.45.tar.gz"
|
tarball = "https://github.com/taiki-e/cargo-hack/archive/refs/tags/v0.6.45.tar.gz"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-llvm-cov"
|
name = "cargo-llvm-cov"
|
||||||
version = "0.8.5"
|
version = "0.8.5"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0 OR MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/taiki-e/cargo-llvm-cov"
|
repo = "https://github.com/taiki-e/cargo-llvm-cov"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-llvm-lines"
|
name = "cargo-llvm-lines"
|
||||||
version = "0.4.46"
|
version = "0.4.46"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/dtolnay/cargo-llvm-lines"
|
repo = "https://github.com/dtolnay/cargo-llvm-lines"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-msrv"
|
name = "cargo-msrv"
|
||||||
version = "0.19.3"
|
version = "0.19.3"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0 OR MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/foresterre/cargo-msrv"
|
repo = "https://github.com/foresterre/cargo-msrv"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-ndk"
|
name = "cargo-ndk"
|
||||||
version = "4.1.2"
|
version = "4.1.2"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0 OR MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/bbqsrc/cargo-ndk"
|
repo = "https://github.com/bbqsrc/cargo-ndk"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-readme"
|
name = "cargo-readme"
|
||||||
version = "3.3.2"
|
version = "3.3.2"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/webern/cargo-readme"
|
repo = "https://github.com/webern/cargo-readme"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-semver-checks"
|
name = "cargo-semver-checks"
|
||||||
version = "0.48.0"
|
version = "0.48.0"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0 OR MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/obi1kenobi/cargo-semver-checks"
|
repo = "https://github.com/obi1kenobi/cargo-semver-checks"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-sort"
|
name = "cargo-sort"
|
||||||
version = "2.1.3"
|
version = "2.1.3"
|
||||||
license = "{"message":"Not Found","documentation_url":"https://docs.github.com/rest/licenses/licenses#get-the-license-for-a-repository","status":"404"}"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/devinr528/cargo-sort"
|
repo = "https://github.com/devinr528/cargo-sort"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-supply-chain"
|
name = "cargo-supply-chain"
|
||||||
version = "0.3.4"
|
version = "0.3.4"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0 OR MIT OR Zlib"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/rust-secure-code/cargo-supply-chain"
|
repo = "https://github.com/rust-secure-code/cargo-supply-chain"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-temp"
|
name = "cargo-temp"
|
||||||
version = "0.4.1"
|
version = "0.4.1"
|
||||||
license = "MIT"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/yozhgoor/cargo-temp"
|
repo = "https://github.com/yozhgoor/cargo-temp"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cargo-udeps"
|
name = "cargo-udeps"
|
||||||
version = "0.1.61"
|
version = "0.1.61"
|
||||||
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/est31/cargo-udeps"
|
repo = "https://github.com/est31/cargo-udeps"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "choose"
|
name = "choose"
|
||||||
version = "1.3.7"
|
version = "1.3.7"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-or-later"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/theryangeary/choose"
|
repo = "https://github.com/theryangeary/choose"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cobalt"
|
name = "cobalt"
|
||||||
version = "0.20.4"
|
version = "0.20.4"
|
||||||
license = "Apache-2.0"
|
license = "MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/cobalt-org/cobalt.rs"
|
repo = "https://github.com/cobalt-org/cobalt.rs"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "comrak"
|
name = "comrak"
|
||||||
version = "0.52.0"
|
version = "0.52.0"
|
||||||
|
license = "BSD-2-Clause"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/kivikakk/comrak"
|
repo = "https://github.com/kivikakk/comrak"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "cpc"
|
name = "cpc"
|
||||||
version = "3.0.0"
|
version = "3.0.0"
|
||||||
license = "AGPL-3.0"
|
license = "MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/probablykasper/cpc"
|
repo = "https://github.com/probablykasper/cpc"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "csview"
|
name = "csview"
|
||||||
version = "1.3.4"
|
version = "1.3.4"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/wfxr/csview"
|
repo = "https://github.com/wfxr/csview"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "ddh"
|
name = "ddh"
|
||||||
version = "0.13.0"
|
version = "0.13.0"
|
||||||
|
license = "LGPL-3.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/darakian/ddh"
|
repo = "https://github.com/darakian/ddh"
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
name = "diffutils"
|
name = "diffutils"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
license = "GPL-3.0-or-later"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/uutils/diffutils"
|
repo = "https://github.com/uutils/diffutils"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "diskus"
|
name = "diskus"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/sharkdp/diskus"
|
repo = "https://github.com/sharkdp/diskus"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "dufs"
|
name = "dufs"
|
||||||
version = "0.46.0"
|
version = "0.46.0"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/sigoden/dufs"
|
repo = "https://github.com/sigoden/dufs"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "fd"
|
name = "fd"
|
||||||
version = "10.4.2"
|
version = "10.4.2"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/sharkdp/fd"
|
repo = "https://github.com/sharkdp/fd"
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
name = "findutils"
|
name = "findutils"
|
||||||
version = "0.9.1"
|
version = "0.9.1"
|
||||||
license = "GPL-3.0-or-later"
|
license = "MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/uutils/findutils"
|
repo = "https://github.com/uutils/findutils"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "fselect"
|
name = "fselect"
|
||||||
version = "0.10.1"
|
version = "0.10.1"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/jhspetersson/fselect"
|
repo = "https://github.com/jhspetersson/fselect"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "gitoxide"
|
name = "gitoxide"
|
||||||
version = "0.54.0"
|
version = "0.54.0"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/GitoxideLabs/gitoxide"
|
repo = "https://github.com/GitoxideLabs/gitoxide"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "gptman"
|
name = "gptman"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
license = "MIT"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/rust-disk-partition-management/gptman"
|
repo = "https://github.com/rust-disk-partition-management/gptman"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "hexyl"
|
name = "hexyl"
|
||||||
version = "0.17.0"
|
version = "0.17.0"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/sharkdp/hexyl"
|
repo = "https://github.com/sharkdp/hexyl"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "hyperfine"
|
name = "hyperfine"
|
||||||
version = "1.20.0"
|
version = "1.20.0"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/sharkdp/hyperfine"
|
repo = "https://github.com/sharkdp/hyperfine"
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
# de EGL/wayland/xkbcommon; un estático acá no es una postura, es una mentira.
|
# de EGL/wayland/xkbcommon; un estático acá no es una postura, es una mentira.
|
||||||
name = "cosmic-comp"
|
name = "cosmic-comp"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-only"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/pop-os/cosmic-comp/archive/epoch-1.5.0/cosmic-comp-epoch-1.5.0.tar.gz"
|
tarball = "https://github.com/pop-os/cosmic-comp/archive/epoch-1.5.0/cosmic-comp-epoch-1.5.0.tar.gz"
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
# los cuarenta minutos.
|
# los cuarenta minutos.
|
||||||
name = "cosmic-edit"
|
name = "cosmic-edit"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-only"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/pop-os/cosmic-edit/archive/epoch-1.5.0/cosmic-edit-epoch-1.5.0.tar.gz"
|
tarball = "https://github.com/pop-os/cosmic-edit/archive/epoch-1.5.0/cosmic-edit-epoch-1.5.0.tar.gz"
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
# (`bzip2-sys` no aparece) antes de agregar una dep que no hacía falta.
|
# (`bzip2-sys` no aparece) antes de agregar una dep que no hacía falta.
|
||||||
name = "cosmic-files"
|
name = "cosmic-files"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-only"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/pop-os/cosmic-files/archive/epoch-1.5.0/cosmic-files-epoch-1.5.0.tar.gz"
|
tarball = "https://github.com/pop-os/cosmic-files/archive/epoch-1.5.0/cosmic-files-epoch-1.5.0.tar.gz"
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
# `libxkbcommon` + `pkgconf` por el gotcha 7 del runbook: winit/sctk ENLAZAN xkbcommon.
|
# `libxkbcommon` + `pkgconf` por el gotcha 7 del runbook: winit/sctk ENLAZAN xkbcommon.
|
||||||
name = "cosmic-osd"
|
name = "cosmic-osd"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-or-later"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/pop-os/cosmic-osd/archive/epoch-1.5.0/cosmic-osd-epoch-1.5.0.tar.gz"
|
tarball = "https://github.com/pop-os/cosmic-osd/archive/epoch-1.5.0/cosmic-osd-epoch-1.5.0.tar.gz"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
# arriba y no lo implica: es el nombre del protocolo, no del programa que lo contesta.
|
# arriba y no lo implica: es el nombre del protocolo, no del programa que lo contesta.
|
||||||
name = "cosmic-session"
|
name = "cosmic-session"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-only"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/pop-os/cosmic-session/archive/epoch-1.5.0/cosmic-session-epoch-1.5.0.tar.gz"
|
tarball = "https://github.com/pop-os/cosmic-session/archive/epoch-1.5.0/cosmic-session-epoch-1.5.0.tar.gz"
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
# `ddc-hi` (brillo por DDC/CI sobre i2c) es Rust puro: habla el ioctl directo, no libddcutil.
|
# `ddc-hi` (brillo por DDC/CI sobre i2c) es Rust puro: habla el ioctl directo, no libddcutil.
|
||||||
name = "cosmic-settings-daemon"
|
name = "cosmic-settings-daemon"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-or-later"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/pop-os/cosmic-settings-daemon/archive/epoch-1.5.0/cosmic-settings-daemon-epoch-1.5.0.tar.gz"
|
tarball = "https://github.com/pop-os/cosmic-settings-daemon/archive/epoch-1.5.0/cosmic-settings-daemon-epoch-1.5.0.tar.gz"
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
# tocar las features por defecto es apartarse de la única combinación que upstream prueba.
|
# tocar las features por defecto es apartarse de la única combinación que upstream prueba.
|
||||||
name = "cosmic-term"
|
name = "cosmic-term"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-only"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/pop-os/cosmic-term/archive/epoch-1.5.0/cosmic-term-epoch-1.5.0.tar.gz"
|
tarball = "https://github.com/pop-os/cosmic-term/archive/epoch-1.5.0/cosmic-term-epoch-1.5.0.tar.gz"
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
# recorte.
|
# recorte.
|
||||||
name = "xdg-desktop-portal-cosmic"
|
name = "xdg-desktop-portal-cosmic"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-or-later"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/pop-os/xdg-desktop-portal-cosmic/archive/epoch-1.5.0/xdg-desktop-portal-cosmic-epoch-1.5.0.tar.gz"
|
tarball = "https://github.com/pop-os/xdg-desktop-portal-cosmic/archive/epoch-1.5.0/xdg-desktop-portal-cosmic-epoch-1.5.0.tar.gz"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "maturin"
|
name = "maturin"
|
||||||
version = "1.12.6"
|
version = "1.12.6"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/PyO3/maturin"
|
repo = "https://github.com/PyO3/maturin"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "nomino"
|
name = "nomino"
|
||||||
version = "1.6.4"
|
version = "1.6.4"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/yaa110/nomino"
|
repo = "https://github.com/yaa110/nomino"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "ouch"
|
name = "ouch"
|
||||||
version = "0.8.0"
|
version = "0.8.0"
|
||||||
|
license = "MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/ouch-org/ouch"
|
repo = "https://github.com/ouch-org/ouch"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "pastel"
|
name = "pastel"
|
||||||
version = "0.12.0"
|
version = "0.12.0"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/sharkdp/pastel"
|
repo = "https://github.com/sharkdp/pastel"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "pls"
|
name = "pls"
|
||||||
version = "0.0.1-beta.10"
|
version = "0.0.1-beta.10"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-or-later"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/pls-rs/pls"
|
repo = "https://github.com/pls-rs/pls"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "repgrep"
|
name = "repgrep"
|
||||||
version = "0.16.1"
|
version = "0.16.1"
|
||||||
license = "Apache-2.0"
|
license = "Unlicense OR MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/acheronfail/repgrep"
|
repo = "https://github.com/acheronfail/repgrep"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "rip2"
|
name = "rip2"
|
||||||
version = "0.9.6"
|
version = "0.9.6"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0+"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/MilesCranmer/rip2"
|
repo = "https://github.com/MilesCranmer/rip2"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "ripgrep-all"
|
name = "ripgrep-all"
|
||||||
version = "0.10.10"
|
version = "0.10.10"
|
||||||
|
license = "AGPL-3.0-or-later"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/phiresky/ripgrep-all"
|
repo = "https://github.com/phiresky/ripgrep-all"
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
name = "ripgrep"
|
name = "ripgrep"
|
||||||
version = "14.1.1"
|
version = "14.1.1"
|
||||||
license = "Unlicense"
|
license = "Unlicense OR MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/BurntSushi/ripgrep"
|
repo = "https://github.com/BurntSushi/ripgrep"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "russ"
|
name = "russ"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
license = "AGPL-3.0"
|
license = "AGPL-3.0-or-later"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/ckampfe/russ"
|
repo = "https://github.com/ckampfe/russ"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "rust-script"
|
name = "rust-script"
|
||||||
version = "0.36.0"
|
version = "0.36.0"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/fornwall/rust-script"
|
repo = "https://github.com/fornwall/rust-script"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "rustic"
|
name = "rustic"
|
||||||
version = "0.11.3"
|
version = "0.11.3"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0 OR MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/rustic-rs/rustic"
|
repo = "https://github.com/rustic-rs/rustic"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "rustscan"
|
name = "rustscan"
|
||||||
version = "2.4.1"
|
version = "2.4.1"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-only"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/RustScan/RustScan"
|
repo = "https://github.com/RustScan/RustScan"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "sendme"
|
name = "sendme"
|
||||||
version = "0.33.0"
|
version = "0.33.0"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0 OR MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/n0-computer/sendme"
|
repo = "https://github.com/n0-computer/sendme"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "tealdeer"
|
name = "tealdeer"
|
||||||
version = "1.8.1"
|
version = "1.8.1"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/tealdeer-rs/tealdeer"
|
repo = "https://github.com/tealdeer-rs/tealdeer"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "tenere"
|
name = "tenere"
|
||||||
version = "0.11.3"
|
version = "0.11.3"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-or-later"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/pythops/tenere"
|
repo = "https://github.com/pythops/tenere"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "tokei"
|
name = "tokei"
|
||||||
version = "14.0.0"
|
version = "14.0.0"
|
||||||
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/XAMPPRocky/tokei"
|
repo = "https://github.com/XAMPPRocky/tokei"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# crt-static + linker zig-cc ⇒ binario ESTÁTICO). Pure-Rust ⇒ zig-cc baseline.
|
# crt-static + linker zig-cc ⇒ binario ESTÁTICO). Pure-Rust ⇒ zig-cc baseline.
|
||||||
name = "topgrade"
|
name = "topgrade"
|
||||||
version = "17.6.1"
|
version = "17.6.1"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-or-later"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/topgrade-rs/topgrade/archive/refs/tags/v17.6.1.tar.gz"
|
tarball = "https://github.com/topgrade-rs/topgrade/archive/refs/tags/v17.6.1.tar.gz"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "trunk"
|
name = "trunk"
|
||||||
version = "0.21.14"
|
version = "0.21.14"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/trunk-rs/trunk"
|
repo = "https://github.com/trunk-rs/trunk"
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
# sha256 del tarball (el wrapper lo calcula), y adaptar build/install del shell de abuild.
|
# sha256 del tarball (el wrapper lo calcula), y adaptar build/install del shell de abuild.
|
||||||
name = "tuc"
|
name = "tuc"
|
||||||
version = "1.3.0"
|
version = "1.3.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-or-later"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/riquito/tuc/archive/v1.3.0/tuc-1.3.0.tar.gz"
|
tarball = "https://github.com/riquito/tuc/archive/v1.3.0/tuc-1.3.0.tar.gz"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "tuckr"
|
name = "tuckr"
|
||||||
version = "0.13.1"
|
version = "0.13.1"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0-or-later"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/RaphGL/Tuckr"
|
repo = "https://github.com/RaphGL/Tuckr"
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
# sha256 del tarball (el wrapper lo calcula), y adaptar build/install del shell de abuild.
|
# sha256 del tarball (el wrapper lo calcula), y adaptar build/install del shell de abuild.
|
||||||
name = "usbutils"
|
name = "usbutils"
|
||||||
version = "019"
|
version = "019"
|
||||||
license = "{"message":"Not Found","documentation_url":"https://docs.github.com/rest/licenses/licenses#get-the-license-for-a-repository","status":"404"}"
|
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/gregkh/usbutils/archive/refs/tags/v019.tar.gz"
|
tarball = "https://github.com/gregkh/usbutils/archive/refs/tags/v019.tar.gz"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "vivid"
|
name = "vivid"
|
||||||
version = "0.11.1"
|
version = "0.11.1"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/sharkdp/vivid"
|
repo = "https://github.com/sharkdp/vivid"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "wasm-pack"
|
name = "wasm-pack"
|
||||||
version = "0.15.0"
|
version = "0.15.0"
|
||||||
license = "Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/wasm-bindgen/wasm-pack"
|
repo = "https://github.com/wasm-bindgen/wasm-pack"
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "waybackurls"
|
name = "waybackurls"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
license = "{"message":"Not Found","documentation_url":"https://docs.github.com/rest/licenses/licenses#get-the-license-for-a-repository","status":"404"}"
|
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/tomnomnom/waybackurls"
|
repo = "https://github.com/tomnomnom/waybackurls"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "xan"
|
name = "xan"
|
||||||
version = "0.59.0"
|
version = "0.59.0"
|
||||||
license = "Unlicense"
|
license = "Unlicense OR MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/medialab/xan"
|
repo = "https://github.com/medialab/xan"
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
name = "xsv"
|
name = "xsv"
|
||||||
version = "0.13.0"
|
version = "0.13.0"
|
||||||
license = "Unlicense"
|
license = "Unlicense OR MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
tarball = "https://github.com/BurntSushi/xsv/archive/0.13.0/xsv-0.13.0.tar.gz"
|
tarball = "https://github.com/BurntSushi/xsv/archive/0.13.0/xsv-0.13.0.tar.gz"
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
||||||
name = "xwin"
|
name = "xwin"
|
||||||
version = "0.7.0"
|
version = "0.7.0"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0 OR MIT"
|
||||||
|
|
||||||
[source]
|
[source]
|
||||||
repo = "https://github.com/Jake-Shadle/xwin"
|
repo = "https://github.com/Jake-Shadle/xwin"
|
||||||
|
|||||||
Executable
+81
@@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# licencias-cargo.sh — lee la licencia que el AUTOR declara en su `Cargo.toml`, al tag exacto que la
|
||||||
|
# receta pinea. Es la fuente más autoritativa de las tres que usamos, y corrige a las otras dos.
|
||||||
|
#
|
||||||
|
# ── LA JERARQUÍA DE EVIDENCIA, DE PEOR A MEJOR ──────────────────────────────────────────────────
|
||||||
|
# 1. El nombre de la receta ......... NO es evidencia. Prohibido (ver docs/licencias-conocidas.tsv).
|
||||||
|
# 2. La familia / URL de fuente ..... buena para agrupar (X.Org=MIT, KDE Frameworks=LGPL doble).
|
||||||
|
# 3. La API de licencias de GitHub .. detecta el fichero LICENSE real, pero con DOS pérdidas:
|
||||||
|
# devuelve identificadores obsoletos y ambiguos (`GPL-3.0` sin decir -only/-or-later) y
|
||||||
|
# **colapsa las licencias dobles a una sola**.
|
||||||
|
# 4. El `Cargo.toml` del autor ...... ← ESTO. Una expresión SPDX escrita por quien tiene la potestad
|
||||||
|
# de licenciar, sin ambigüedad y sin colapsar. Corrige los dos defectos de (3) de una vez.
|
||||||
|
#
|
||||||
|
# Ejemplo medido: la API dejó `fd` como `Apache-2.0`; su Cargo.toml dice `MIT OR Apache-2.0`. No era
|
||||||
|
# falso —cumplir Apache-2.0 basta— pero perdía una opción que el autor concedió. Con esto se recupera.
|
||||||
|
#
|
||||||
|
# ── SE PIDE AL TAG QUE LA RECETA PINEA, NO A HEAD ───────────────────────────────────────────────
|
||||||
|
# Ésa era la limitación registrada de la detección por API (mira la rama por defecto, no la versión
|
||||||
|
# que empaquetamos). Acá se prueba `?ref=v<version>` y `?ref=<version>` antes de caer a HEAD, y se
|
||||||
|
# ANOTA con qué ref se resolvió cada una, para que la tercera columna diga si el dato es exacto o
|
||||||
|
# aproximado. Un dato con su procedencia se puede auditar; uno sin ella hay que creerlo.
|
||||||
|
#
|
||||||
|
# ── LO QUE NO HACE ──────────────────────────────────────────────────────────────────────────────
|
||||||
|
# `license.workspace = true` (la licencia vive en el workspace padre) y `license-file` (licencia a
|
||||||
|
# medida, sin SPDX) se DESCARTAN en vez de adivinarse. Y no toca las recetas que no son Cargo: los
|
||||||
|
# módulos Go no tienen un campo equivalente en `go.mod`, así que ésos siguen dependiendo de (2) y (3).
|
||||||
|
#
|
||||||
|
# Uso: scripts/licencias-cargo.sh (escribe docs/licencias-cargo.tsv)
|
||||||
|
# FORZAR=1 TABLA=docs/licencias-cargo.tsv scripts/licencias.sh --sembrar
|
||||||
|
set -uo pipefail
|
||||||
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"; cd "$ROOT"
|
||||||
|
SALIDA="${SALIDA:-docs/licencias-cargo.tsv}"
|
||||||
|
JOBS="${JOBS:-12}"
|
||||||
|
|
||||||
|
command -v gh >/dev/null && gh auth status >/dev/null 2>&1 || { echo "!! 'gh' ausente o sin auth"; exit 1; }
|
||||||
|
TMP=$(mktemp -d); trap 'rm -rf "$TMP"' EXIT
|
||||||
|
|
||||||
|
# Todas las recetas con fuente en GitHub (tengan licencia o no: éste CORRIGE, no sólo rellena).
|
||||||
|
for f in recipes/*.toml recipes/incoming-*/*.toml; do
|
||||||
|
[ -f "$f" ] || continue
|
||||||
|
u=$(grep -m1 -E '^[[:space:]]*(tarball|repo)[[:space:]]*=' "$f" 2>/dev/null)
|
||||||
|
case "$u" in *github.com*) ;; *) continue ;; esac
|
||||||
|
n=$(basename "$f" .toml)
|
||||||
|
v=$(awk -F'"' '/^\[/{exit} /^[[:space:]]*version[[:space:]]*=/{print $2; exit}' "$f")
|
||||||
|
slug=$(printf '%s\n' "$u" | sed -E 's#.*github\.com[:/]+([^/"]+)/([^/"]+).*#\1/\2#; s/\.git$//')
|
||||||
|
case "$slug" in */*) printf '%s\t%s\t%s\n' "$n" "$slug" "${v:-}" ;; esac
|
||||||
|
done | sort -u > "$TMP/obj.tsv"
|
||||||
|
|
||||||
|
echo "==> recetas con fuente en GitHub: $(wc -l < "$TMP/obj.tsv")"
|
||||||
|
|
||||||
|
export TMP
|
||||||
|
xargs -P "$JOBS" -I{} sh -c '
|
||||||
|
n=$(printf "%s" "{}" | cut -f1); slug=$(printf "%s" "{}" | cut -f2); v=$(printf "%s" "{}" | cut -f3)
|
||||||
|
for ref in "v$v" "$v" ""; do
|
||||||
|
[ -z "$v" ] && [ -n "$ref" ] && continue
|
||||||
|
if [ -n "$ref" ]; then q="?ref=$ref"; etiq="$ref"; else q=""; etiq="HEAD(aprox)"; fi
|
||||||
|
c=$(gh api "repos/$slug/contents/Cargo.toml$q" --jq ".content" 2>/dev/null) || continue
|
||||||
|
[ -z "$c" ] && continue
|
||||||
|
lic=$(printf "%s" "$c" | base64 -d 2>/dev/null | awk -F\" "/^\[/{if(t)exit; if(\$0 ~ /^\[package\]/)t=1; next} t&&/^[[:space:]]*license[[:space:]]*=/{print \$2; exit}")
|
||||||
|
case "$lic" in
|
||||||
|
""|*workspace*|*true*) break ;;
|
||||||
|
*) printf "%s\t%s\t%s\n" "$n" "$lic" "$etiq" >> "$TMP/ok.tsv"; break ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
' < "$TMP/obj.tsv"
|
||||||
|
|
||||||
|
N=$(wc -l < "$TMP/ok.tsv" 2>/dev/null || echo 0)
|
||||||
|
EXACT=$(grep -vc 'HEAD(aprox)' "$TMP/ok.tsv" 2>/dev/null || echo 0)
|
||||||
|
{
|
||||||
|
echo "# licencias-cargo.tsv — GENERADO por scripts/licencias-cargo.sh. No editar a mano."
|
||||||
|
echo "#"
|
||||||
|
echo "# La licencia que el AUTOR declara en su Cargo.toml: expresión SPDX escrita por quien tiene"
|
||||||
|
echo "# la potestad de licenciar. Sin ambigüedad -only/-or-later y SIN colapsar las dobles ⇒ manda"
|
||||||
|
echo "# sobre la detección por API de GitHub, que pierde ambas cosas. Sembrar con FORZAR=1."
|
||||||
|
echo "#"
|
||||||
|
echo "# Tercera columna = el ref con el que se resolvió. Un tag concreto significa que el dato es"
|
||||||
|
echo "# de la VERSIÓN QUE EMPAQUETAMOS; 'HEAD(aprox)' que no se halló el tag y puede diferir."
|
||||||
|
echo "# Total $N · al tag exacto $EXACT · aproximadas $((N-EXACT))"
|
||||||
|
sort "$TMP/ok.tsv" 2>/dev/null
|
||||||
|
} > "$SALIDA"
|
||||||
|
echo "==> $N licencias de Cargo.toml ($EXACT al tag exacto) → $SALIDA"
|
||||||
@@ -53,8 +53,17 @@ export TMP
|
|||||||
xargs -P "$JOBS" -I{} sh -c '
|
xargs -P "$JOBS" -I{} sh -c '
|
||||||
n=$(printf "%s" "{}" | cut -f1); slug=$(printf "%s" "{}" | cut -f2)
|
n=$(printf "%s" "{}" | cut -f1); slug=$(printf "%s" "{}" | cut -f2)
|
||||||
lic=$(gh api "repos/$slug/license" --jq ".license.spdx_id" 2>/dev/null)
|
lic=$(gh api "repos/$slug/license" --jq ".license.spdx_id" 2>/dev/null)
|
||||||
|
# ⚠ VALIDAR LA FORMA, NO SÓLO LOS «NO SÉ» CONOCIDOS. Cuando el repo da 404 (renombrado, borrado,
|
||||||
|
# privado), `gh api` escribe el CUERPO DEL ERROR JSON en stdout y el filtro --jq falla ⇒ `lic`
|
||||||
|
# queda valiendo `{"message":"Not Found",...}`. Filtrando sólo ""/null/NOASSERTION/other, ese JSON
|
||||||
|
# pasaba como si fuera una licencia y se escribía en la receta: comillas incluidas, lo que además
|
||||||
|
# ROMPE el TOML y hace que el ArtifactHash deje de calcularse. Pasó de verdad en 5 recetas el
|
||||||
|
# 2026-08-07 y lo cazó la verificación de hashes, no la vista.
|
||||||
|
# ⇒ Regla: aceptar sólo lo que TIENE FORMA de expresión SPDX (letras, dígitos, . - + y los
|
||||||
|
# operadores OR/AND/WITH). Todo lo demás es un fallo disfrazado de dato.
|
||||||
case "$lic" in
|
case "$lic" in
|
||||||
""|null|NOASSERTION|other) printf "%s\t%s\n" "$n" "$slug" >> "$TMP/sin.tsv" ;;
|
""|null|NOASSERTION|other) printf "%s\t%s\n" "$n" "$slug" >> "$TMP/sin.tsv" ;;
|
||||||
|
*[!A-Za-z0-9.+\ -]*) printf "%s\t%s\n" "$n" "$slug" >> "$TMP/sin.tsv" ;;
|
||||||
*) printf "%s\t%s\t%s\n" "$n" "$lic" "$slug" >> "$TMP/con.tsv" ;;
|
*) printf "%s\t%s\t%s\n" "$n" "$lic" "$slug" >> "$TMP/con.tsv" ;;
|
||||||
esac
|
esac
|
||||||
' < "$TMP/objetivos.tsv"
|
' < "$TMP/objetivos.tsv"
|
||||||
|
|||||||
+41
-3
@@ -63,7 +63,7 @@ case "$MODO" in
|
|||||||
# ── sembrar: escribir las licencias de la tabla curada ──────────────────────────────────────────
|
# ── sembrar: escribir las licencias de la tabla curada ──────────────────────────────────────────
|
||||||
--sembrar)
|
--sembrar)
|
||||||
[ -s "$TABLA" ] || { echo "!! falta la tabla curada: $TABLA"; exit 1; }
|
[ -s "$TABLA" ] || { echo "!! falta la tabla curada: $TABLA"; exit 1; }
|
||||||
puestas=0; ya=0; sin_receta=0
|
puestas=0; ya=0; sin_receta=0; corregidas=0
|
||||||
# TRES campos, no dos: `licencias-detectadas.tsv` añade una tercera columna con el `owner/repo`
|
# TRES campos, no dos: `licencias-detectadas.tsv` añade una tercera columna con el `owner/repo`
|
||||||
# consultado (la procedencia, para poder auditar). Leyendo sólo dos variables, `lic` se tragaría
|
# consultado (la procedencia, para poder auditar). Leyendo sólo dos variables, `lic` se tragaría
|
||||||
# también el slug y se escribiría `license = "MIT<TAB>owner/repo"` en la receta — basura silenciosa,
|
# también el slug y se escribiría `license = "MIT<TAB>owner/repo"` en la receta — basura silenciosa,
|
||||||
@@ -71,11 +71,32 @@ case "$MODO" in
|
|||||||
while IFS=$'\t' read -r pkg lic _resto; do
|
while IFS=$'\t' read -r pkg lic _resto; do
|
||||||
case "$pkg" in ''|'#'*) continue ;; esac
|
case "$pkg" in ''|'#'*) continue ;; esac
|
||||||
[ -n "${lic:-}" ] || continue
|
[ -n "${lic:-}" ] || continue
|
||||||
|
# ÚLTIMA BARRERA antes de tocar una receta: la licencia tiene que TENER FORMA de expresión SPDX.
|
||||||
|
# Sin esto, cualquier fallo de una fuente aguas arriba se escribe como si fuera un dato — y el
|
||||||
|
# 2026-08-07 pasó: un cuerpo de error JSON de la API de GitHub acabó dentro de 5 recetas, con
|
||||||
|
# comillas, rompiendo el TOML y dejando de calcularse su ArtifactHash. Validar en el sitio que
|
||||||
|
# ESCRIBE es lo que corta la clase entera de fallo, no sólo el caso conocido.
|
||||||
|
case "$lic" in
|
||||||
|
*[!A-Za-z0-9.+\ -]*) echo " ?? $pkg: descarto licencia con forma inválida: $(printf '%.40s' "$lic")"; continue ;;
|
||||||
|
esac
|
||||||
hallada=0
|
hallada=0
|
||||||
for f in recipes/"$pkg".toml recipes/incoming-*/"$pkg".toml; do
|
for f in recipes/"$pkg".toml recipes/incoming-*/"$pkg".toml; do
|
||||||
[ -f "$f" ] || continue
|
[ -f "$f" ] || continue
|
||||||
hallada=1
|
hallada=1
|
||||||
if tiene_licencia "$f"; then ya=$((ya+1)); continue; fi
|
if tiene_licencia "$f"; then
|
||||||
|
# FORZAR=1: reemplazar lo ya declarado. Sólo tiene sentido con una fuente MÁS autoritativa
|
||||||
|
# que la que puso el valor actual — el caso real es `licencias-cargo.tsv`, la declaración
|
||||||
|
# del propio autor, que corrige los dos defectos de la detección por API (SPDX ambiguo y
|
||||||
|
# licencias dobles colapsadas). Con la tabla curada NO se usa: pisaría a mano lo verificado.
|
||||||
|
if [ "${FORZAR:-0}" = 1 ] && [ "$(licencia_de "$f")" != "$lic" ]; then
|
||||||
|
esc=$(printf '%s' "$lic" | sed 's/[&/\]/\\&/g')
|
||||||
|
sed -i "0,/^[[:space:]]*license[[:space:]]*=.*/s//license = \"$esc\"/" "$f"
|
||||||
|
corregidas=$((corregidas+1))
|
||||||
|
else
|
||||||
|
ya=$((ya+1))
|
||||||
|
fi
|
||||||
|
continue
|
||||||
|
fi
|
||||||
# Insertar DESPUÉS de la línea `version = ...`, que está en la raíz del TOML y antes de
|
# Insertar DESPUÉS de la línea `version = ...`, que está en la raíz del TOML y antes de
|
||||||
# cualquier `[table]`. Es el único sitio seguro (ver la trampa de TOML en la cabecera).
|
# cualquier `[table]`. Es el único sitio seguro (ver la trampa de TOML en la cabecera).
|
||||||
if grep -qE '^version[[:space:]]*=' "$f"; then
|
if grep -qE '^version[[:space:]]*=' "$f"; then
|
||||||
@@ -90,7 +111,7 @@ case "$MODO" in
|
|||||||
done
|
done
|
||||||
[ "$hallada" = 0 ] && sin_receta=$((sin_receta+1))
|
[ "$hallada" = 0 ] && sin_receta=$((sin_receta+1))
|
||||||
done < "$TABLA"
|
done < "$TABLA"
|
||||||
echo "==> sembradas $puestas · ya tenían $ya · en la tabla pero sin receta $sin_receta"
|
echo "==> sembradas $puestas · corregidas $corregidas · ya tenían $ya · sin receta $sin_receta"
|
||||||
echo "==> verificá que el hash NO se movió: ./scripts/store-gc.sh (debe dar los mismos vigentes)"
|
echo "==> verificá que el hash NO se movió: ./scripts/store-gc.sh (debe dar los mismos vigentes)"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@@ -139,6 +160,23 @@ case "$MODO" in
|
|||||||
done
|
done
|
||||||
pct=0; [ "$tot" -gt 0 ] && pct=$((con*100/tot))
|
pct=0; [ "$tot" -gt 0 ] && pct=$((con*100/tot))
|
||||||
echo "==> licencias declaradas: $con de $tot recetas (${pct}%)"
|
echo "==> licencias declaradas: $con de $tot recetas (${pct}%)"
|
||||||
|
|
||||||
|
# ── GUARDIÁN: licencias con FORMA INVÁLIDA ───────────────────────────────────────────────────
|
||||||
|
# El 2026-08-07 se escribió el cuerpo de un error JSON de la API de GitHub dentro de 5 recetas
|
||||||
|
# (`license = "{"message":"Not Found",...}"`). Las comillas rompen el TOML ⇒ esas recetas dejaron
|
||||||
|
# de parsear y de tener ArtifactHash, y así se COMMITEARON. No lo vio nadie leyendo: lo cazó la
|
||||||
|
# comparación de hashes. Por eso el informe lo comprueba SIEMPRE y sale distinto de cero: un dato
|
||||||
|
# con forma imposible es un fallo aguas arriba disfrazado de dato, y hay que verlo sin buscarlo.
|
||||||
|
malas=0
|
||||||
|
for f in $(recetas); do
|
||||||
|
l=$(licencia_de "$f")
|
||||||
|
[ -z "$l" ] && continue
|
||||||
|
case "$l" in *[!A-Za-z0-9.+\ -]*) echo "!! FORMA INVÁLIDA en $f: $(printf '%.50s' "$l")"; malas=$((malas+1));; esac
|
||||||
|
done
|
||||||
|
if [ "$malas" -gt 0 ]; then
|
||||||
|
echo "!! $malas recetas con licencia de forma imposible — probablemente TOML roto. Arreglar YA."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
if [ "$con" -gt 0 ]; then
|
if [ "$con" -gt 0 ]; then
|
||||||
echo "==> reparto:"
|
echo "==> reparto:"
|
||||||
sort /tmp/.lic-cuenta.$$ | uniq -c | sort -rn | head -25 | sed 's/^/ /'
|
sort /tmp/.lic-cuenta.$$ | uniq -c | sort -rn | head -25 | sed 's/^/ /'
|
||||||
|
|||||||
Reference in New Issue
Block a user