Ir al contenido
Código en GitHub (se abre en una pestaña nueva)

← Todas las novedades

Ehundu 0.16.0

La relectura final del contrato. La 0.16 no trae funciones nuevas: es la versión en la que tres lectores independientes comprobaron el contrato, línea a línea, contra el código (unas 250 afirmaciones, de las que unas 200 eran ciertas tal cual). Salen de ahí las decisiones 141 a 148 de docs/formato.md (se abre en una pestaña nueva): unos noventa retoques del texto, que deja escrito lo que el motor hacía sin decirlo (los ficheros de texto son UTF-8, un [nombre] registrado es siempre una llamada, qué es pagina.ruta en una página generada, cómo comparan donde y orden, qué cuenta como vacío en el esquema…), la regla 7 de nombres, y unos pocos arreglos del código para que cumpla lo que el contrato ya decía. Compilados con la 0.15.0 y con esta, los veintitrés sitios de prueba dan los mismos ficheros, uno a uno, sin avisos nuevos.

Lo que ahora detiene el build. Un nombre con la extensión de un fichero que se quiere generar (robots.txt.twig, sitemap.xml.twig, llms.txt.md, tabla.csv.yml): antes se saltaba con un aviso y un código de salida 0, y el siguiente despliegue borraba el robots.txt publicado. El error dice cómo hacerlo: una página robots.twig con url: /robots.txt (decisión 143). Un código de idioma que el sitio no declara (contacto.fr.md) sigue siendo un aviso.

Lo que ahora avisa. Un atajo registrado con los atributos mal escritos ([imagen fichero=a.png], sin comillas), que se quedaba en la página como texto sin que nadie lo notara. Un feed.coleccion que ninguna página usa, que daba un feed vacío con la fecha de 1970. Una página con la extensión en mayúsculas o .markdown (LEEME.MD), que se copia tal cual (decisión 147).

Lo que cambia en la salida. Un día sin hora y sin comillas en un campo propio, en datos/ o en sitio.yml es ese día en la zona del sitio: con zonaHoraria: America/Mexico_City, |fecha escribía el 18 de marzo para el 19 (decisión 144). Los atajos imagen, video y archivo ya no leen un fichero de fuera de publico/: avisan y no insertan nada. svg() quita la declaración XML y el DOCTYPE aunque un comentario los separe. Un enlace a https://EJEMPLO.com ya es del sitio aunque el dominio vaya en mayúsculas. slugify vale también en el patrón de agrupar y de paginar, y paginar avisa de una url sin barra final aunque todo quepa en un trozo. Una url de solo espacios es una en blanco. Ninguno de los sitios de prueba cambia.

La memoria de la incremental, por registros. .ehundu/memoria.bin se guarda y se lee registro a registro, sin construir una cadena entera de la memoria, que en un sitio grande eran cien megas de más (decisión 141). En el sitio más pesado de los de prueba (1.204 páginas, 97 MB de memoria guardada) el pico de memoria de PHP baja de 332 a 170 MB en la primera compilación, de 352 a 190 al cambiar una página y de 416 a 252 al cambiar una plantilla; en dos sitios de 27 y 29 MB, de 102-134 a 50-82 MB. Y si la memoria guardada no cabe en el memory_limit de PHP (tres veces lo que mide el fichero más 16 MB), compilar compila entero sin tocarla y avisa a cuánto subirlo, y avanzar, que sin ella no puede repartir el trabajo, falla con ese mismo texto en vez del error de PHP. docs/compilacion.md lleva las medidas y lo que cabe con 128, 256 y 512 MB.

Para quien use la biblioteca. paginacion.cantidad se llama paginacion.entradas, sin alias, porque ningún sitio usa paginar todavía y el nombre no decía de qué (decisión 142; total sigue siendo el de páginas). Desplegador::desplegar con $todo ignora $segundos: repartido, no terminaba nunca. Version::ACTUAL se promete. Lote::progreso() de un lote ocupado() vale 0. La carpeta de destino de un despliegue carpeta se crea al subir el primer fichero y no al abrirla, así que --simular no deja nada (si tu código contaba con que abrir la creara, créala tú). Un volcado de Configuracion tampoco enseña dónde está la clave privada, y el sitemap.xml y el feed.xml de cada idioma se suben los últimos. docs/biblioteca.md gana lo que se promete y no estaba escrito: las firmas de Destino, ErrorDeProyecto, trazar, anotar y quitar, la semántica de Proyecto y de Pagina::$campos, los códigos de salida de la consola y el formato del manifiesto del despliegue.

Al actualizar. La primera compilación de cada sitio que tenga memoria guardada es completa, porque cambia cómo se guarda (una vez). El HTML de los sitios no cambia, así que no hay que volver a publicarlos. Si usabas pagina.paginacion.cantidad en una plantilla, cámbialo por entradas: Twig no avisa de un nombre que no existe.

Esta versión en GitHub (se abre en una pestaña nueva), con el ehundu.phar.