Ehundu 0.16.0
The final reading of the contract. 0.16 brings no new features: it is the version in which three independent readers checked the contract, line by line, against the code (about 250 claims, of which about 200 were true as they stood). Decisions 141 to 148 of docs/formato.md (opens in a new tab) come out of it: some ninety touch-ups to the text, which writes down what the engine did without saying so (text files are UTF-8, a registered [nombre] is always a call, what pagina.ruta is on a generated page, how donde and orden compare, what counts as empty in the schema…), rule 7 on names, and a few fixes to the code so that it does what the contract already said. Built with 0.15.0 and with this one, the twenty-three test sites give the same files, one by one, with no new warnings.
What now stops the build. A name with the extension of a file you want to generate (robots.txt.twig, sitemap.xml.twig, llms.txt.md, tabla.csv.yml): before, it was skipped with a warning and an exit code of 0, and the next deployment deleted the published robots.txt. The error says how to do it: a robots.twig page with url: /robots.txt (decision 143). A language code that the site does not declare (contacto.fr.md) is still a warning.
What now warns. A shortcode registered with badly written attributes ([imagen fichero=a.png], without quotes), which stayed on the page as text without anybody noticing. A feed.coleccion that no page uses, which gave an empty feed with the date of 1970. A page with its extension in capitals or .markdown (LEEME.MD), which is copied as it is (decision 147).
What changes in the output. A day without a time and without quotes in a field of your own, in datos/ or in sitio.yml is that day in the zone of the site: with zonaHoraria: America/Mexico_City, |fecha wrote 18 March for 19 March (decision 144). The imagen, video and archivo shortcodes no longer read a fichero from outside publico/: they warn and insert nothing. svg() removes the XML declaration and the DOCTYPE even if a comment separates them. A link to https://EJEMPLO.com is already internal even if the domain is in capitals. slugify also works in the pattern of agrupar and paginar, and paginar warns about a url without a trailing slash even if everything fits in one chunk. A url of only spaces is a blank one. None of the test sites changes.
The memory of the incremental build, by records. .ehundu/memoria.bin is saved and read record by record, without building a whole string of the memory, which on a large site was a hundred megabytes too many (decision 141). On the heaviest of the test sites (1,204 pages, 97 MB of saved memory) the peak of PHP memory goes down from 332 to 170 MB on the first build, from 352 to 190 when changing a page and from 416 to 252 when changing a template; on two sites of 27 and 29 MB, from 102-134 to 50-82 MB. And if the saved memory does not fit in the memory_limit of PHP (three times the size of the file plus 16 MB), compilar builds everything without touching it and warns how far to raise it, and avanzar, which cannot spread the work without it, fails with that same text instead of the PHP error. docs/compilacion.md carries the measurements and what fits with 128, 256 and 512 MB.
For whoever uses the library. paginacion.cantidad is now called paginacion.entradas, with no alias, because no site uses paginar yet and the name did not say what of (decision 142; total is still the one for pages). Desplegador::desplegar with $todo ignores $segundos: spread out, it never finished. Version::ACTUAL is promised. Lote::progreso() of a batch that is ocupado() is 0. The destination folder of a carpeta deployment is created when the first file is uploaded and not when it is opened, so --simular leaves nothing behind (if your code counted on opening it to create it, create it yourself). A dump of Configuracion no longer shows where the private key is either, and the sitemap.xml and feed.xml of each language are uploaded last. docs/biblioteca.md gains what is promised and was not written: the signatures of Destino, ErrorDeProyecto, trazar, anotar and quitar, the semantics of Proyecto and Pagina::$campos, the exit codes of the console and the format of the deployment manifest.
When updating. The first build of each site that has saved memory is a full one, because how it is saved changes (once). The HTML of the sites does not change, so they do not have to be published again. If you used pagina.paginacion.cantidad in a template, change it to entradas: Twig does not warn about a name that does not exist.
This version on GitHub (opens in a new tab), with the ehundu.phar.