Ir al contenido

Cómo dependen las opciones unas de otras

Dos campos de la base de conocimiento contienen lógica en lugar de datos, y responden a dos preguntas distintas. Confundirlos es el error que esta página existe para evitar.

available decide si una opción es siquiera una fila a la que el usuario puede llegar. default-value decide qué valor toma: no una sola vez, sino cada vez que cambia algo que su expresión nombra.

Una opción cuya expresión available es falsa no se muestra. El diálogo se construye a partir de las opciones disponibles, así que la fila simplemente no está, y la instrucción que hay sobre la lista recibe una nota que indica cuántas opciones faltan y dónde leer sobre ellas.

No desaparece sin dejar rastro. El texto de ayuda del diálogo enumera cada opción no disponible de ese diálogo bajo un encabezado propio, con su descripción completa y una línea más, en la que la expresión es la propia condición available de esa opción sin las comillas invertidas:

=== Condition of availability: === <the expression>

Perder la disponibilidad no significa por sí mismo perder el valor. El motor desactiva una opción no disponible en un único lugar: cuando el usuario confirma un diálogo, en las filas de ese diálogo, para una opción cuya disponibilidad el usuario acaba de eliminar con su propio cambio en ese diálogo. Una opción que deja de estar disponible por algo que el usuario hizo en otro diálogo conserva el valor que tuviera antes, y ya no está presente como fila en ninguna parte, así que ahí nada volverá a interactuar con ella.

Para eso sirve el segundo campo, y por eso los dos se usan juntos con tanta frecuencia.

Un default-value puede ser una expresión, y una expresión así no es un valor de reserva. Cada vez que cambia una opción que nombra, el motor la vuelve a evaluar y aplica el resultado, aunque sea por encima de un valor que el usuario eligió a mano, si eso es lo que ahora dice la expresión. El motor no registra quién estableció un valor, así que no hay nada ante lo que deba ceder. Solo un default-value literal se comporta como valor inicial y luego no se vuelve a tocar.

El resultado se propaga: aplicarlo puede cambiar una opción que nombra una tercera expresión, que a su vez se evalúa. Nada en el motor conoce ninguna opción en particular; toda la cadena está en los datos.

El diálogo de sistemas de archivos, en su totalidad

Sección titulada «El diálogo de sistemas de archivos, en su totalidad»

ZFS necesita DKMS, y DKMS no puede compilar en un kernel que ha avanzado más allá de lo que OpenZFS admite. Por eso Ditana empareja ZFS con el kernel de soporte a largo plazo, y para ello hacen falta ambos campos:

- name="zfs-filesystem" \
available="`install-standard-lts-kernel`" \
default-value="`install-standard-lts-kernel AND NOT profile-quick`" {
// ...
}

La línea available es la barrera. Elegir otro kernel ni traslada ZFS al kernel LTS ni deja ZFS funcionando en un kernel para el que no puede compilarse: la fila de ZFS desaparece del diálogo de sistemas de archivos, y el emparejamiento se mantiene porque el estado sin emparejar no es uno que el usuario pueda seleccionar.

Para esa opción, la ayuda dice, en el diálogo de sistemas de archivos de una instalación que no usa el kernel de soporte a largo plazo:

=== Condition of availability: === install-standard-lts-kernel

La línea default-value es lo que hace que la barrera actúe desde otro diálogo. El kernel se elige en el diálogo Kernel Selection, donde ZFS no es una fila, así que la regla que desactiva una opción no disponible nunca llega a ZFS. Nombrar la misma condición en default-value es lo que desactiva ZFS, y por eso cuarenta y cinco opciones de la base de conocimiento llevan una expresión en ambos campos. No son alternativas entre sí.

- name="btrfs-filesystem" \
default-value="`profile-quick OR NOT install-standard-lts-kernel`" {
arch-packages "btrfs-progs" "compsize"
}

Btrfs es la opción predeterminada del diálogo de sistemas de archivos siempre que se elige el perfil Quick Installation o no se selecciona el kernel LTS. Las dos expresiones son mitades complementarias de la misma condición, así que en todo momento hay exactamente un sistema de archivos elegido. Por eso, quien cambia el kernel a uno que no es LTS encuentra, al volver al diálogo de sistemas de archivos, que la fila de ZFS ha desaparecido, que Btrfs está elegido y que la nota sobre la lista remite a la ayuda, donde se muestra la condición que eliminó ZFS.

El kernel LTS es el predeterminado desde el principio, así que en una configuración estándar no aparece nada de esto: ZFS se ofrece, y elegirlo no cambia ningún kernel, porque el kernel ya es el correcto.

Los dos campos responden a dos preguntas, y una relación suele necesitar respuesta a ambas. ¿Tiene siquiera sentido la opción bajo esta condición? Eso es available, y quita la fila. ¿Debe la opción seguir esta condición? Eso es default-value, y mueve el valor, desde cualquier diálogo. Una barrera cuya condición se decide en el mismo diálogo puede arreglárselas solo con available; una barrera cuya condición está en otro lugar no puede, y ese es el caso habitual.

Esta traducción la hizo una máquina. Los lectores la mejoran en Weblate.