| 110 | | === Nomenclatura y versionado === |
| 111 | | |
| 112 | | * Los nombres de los paquetes deben seguir el estilo CamelCase |
| 113 | | * No puede haber paquetes con el mismo nombre de NameBlock ni en el mismo ni |
| 114 | | en distinto repositorio, pues todos los paquetes compartirán un mismo |
| 115 | | almacén de cliente vengan del repositorio que vengan. |
| 116 | | * El nombre del archivo de una versión concreta de un paquete se obtiene |
| 117 | | como la concatenación del nombre del paquete seguido de un punto, el número |
| 118 | | _.autodoc.version.high, otro punto y el número _.autodoc.version.low |
| 119 | | * El nombre del NameBlock sin embargo es el mismo siempre, por lo que se invocará |
| 120 | | sin usar los números de versión. |
| 121 | | * No es posible por tanto cargar dos versiones distintas de un mismo paquete en |
| 122 | | la misma sesión TOL. |
| 123 | | * Sí es posible cargar diferentes versiones de un mismo NameBlock en una misma |
| 124 | | máquina en sesiones de TOL distintas, coincidentes o no en el tiempo. |
| | 110 | === Control de versiones === |
| | 111 | |
| | 112 | El objetivo del control de versiones es que en el repositorio se puedan almacenar todas las |
| | 113 | versiones binarias de cada paquete que hayan sido publicadas de forma histórica, pues sólo de |
| | 114 | esta forma se puede asegurar que cada usuario pueda utilizar la versión compatible con todo |
| | 115 | su sistema, y que pueda a lo largo del tiempo, y accediendo a las novedades que le interesen |
| | 116 | fijando su propio ritmo de actualización, sin tener que estar siempre a la última, lo cual |
| | 117 | puede ser peligroso en sistemas de mantenimiento de producción en tiempo real, ni tampoco |
| | 118 | atándose a una versión congelada que no admite mejora ninguna. |
| | 119 | |
| | 120 | * El nombre del archivo en el que se almacena una versión concreta de un paquete se obtiene |
| | 121 | como la concatenación del nombre del paquete, que debe coincidir con el miembro redundante |
| | 122 | {{{_.autodoc.name}}}, seguido de un punto, el número {{{_.autodoc.version.high}}}, otro |
| | 123 | punto y el número {{{_.autodoc.version.low}}}. |
| | 124 | * El nombre del NameBlock sin embargo es el mismo siempre, a lo largo de toda la evolución |
| | 125 | del paquete, por lo que se invocará sin usar los números de versión, salvo en la orden |
| | 126 | {{{#Require}}}, si se desea cargar una versión concreta. |
| | 127 | * No es posible por tanto cargar dos versiones distintas de un mismo paquete en la misma |
| | 128 | sesión TOL. |
| | 129 | * Sí que es posible cargar diferentes versiones de un mismo NameBlock en una misma máquina |
| | 130 | en sesiones de TOL distintas, coincidentes o no en el tiempo. |
| | 131 | * No puede haber paquetes con el mismo nombre de NameBlock ni en el mismo ni en distinto |
| | 132 | repositorio, pues todos los paquetes compartirán un mismo almacén de cliente vengan |
| | 133 | del repositorio que vengan. El sistema de instalación y mantenimiento de paquetes debe |
| | 134 | avisar si existen conflictos entre distintos repositorios. |
| | 135 | * De forma opcional el paquete puede incorporar en _.autodoc.versionControl información |
| | 136 | adicional sobre el mecanismo de control de versiones utilizado en su desarrollo |
| | 137 | (SVN, CVS, ...) que indique cómo recuperar el código fuente exacto con el que fue |
| | 138 | construido el paquete. Esta información podría usarse de forma manual y sólo en caso de |
| | 139 | tener que rehacer un paquete antiguo que se hubiera perdido o que se quisiera modificar |
| | 140 | por un problema grave, y que fuera requerido en algún proceso de vital importancia. |
| | 141 | Llegados a este caso habría que plantearse si el paquete modificado debe sobreescribir el |
| | 142 | existente en el repositorio o se debe usar sólo de forma local donde se precise. |
| | 143 | |
| | 144 | ==== Nomenclatura ==== |
| | 145 | |
| | 146 | Aunque no hay ninguna normativa general al respecto, salvo en el caso del repositorio |
| | 147 | público oficial de TOL en el que serán de obligado cumplimiento, se aconseja tomar las |
| | 148 | siguientes medidas con respecto a la nomenclatura de los paquetes: |
| | 149 | |
| | 150 | * Los nombres de los paquetes deberían seguir el estilo CamelCase que permite una mayor |
| | 151 | claridad y una mejor organización de los mismos si se reservan partículas con |
| | 152 | significado preestablecido. |
| | 153 | * Aumentar el primer número de forma secuencial progresiva de uno en uno, empezando |
| | 154 | desde el 1, reservando el 0 para versiones de pruebas no publicadas. Sólo se debería |
| | 155 | modificar si se da un cambio, o una acumulación de cambios, que suponga alteraciones |
| | 156 | importantes en el modo de uso o las capacidades del paquete. |
| | 157 | * Aumentar el segundo número cada vez que se modifica el paquete en cualquier cosa que |
| | 158 | pueda ser incompatible con lo anterior en cualquier aspecto por pequeño que sea. Si |
| | 159 | no se modificara al publicarlo sobreescribirá el anterior y será imposible que los |
| | 160 | usuarios utilicen la versión eliminada si por cualquier motivo la nueva no les sirve. |
| | 161 | * Cuando se aumenta el primer número se debería reiniciar el segundo. |
| | 162 | * Al segundo dígito se le puede intentar dotar de cierta semántica propia del paquete |
| | 163 | o de u proyecto o departamento, obligando a que tengan más o menos cifras. Por ejemplo, |
| | 164 | podrían ser de la forma XxYy, con X,Y=1..9; x,y=0..9; significando Yy para cierto |
| | 165 | tipo de cambios menores o más frecuentes y Xx para otros de mayor calado. |
| | 166 | * Si se produce un cambio meramente ornamental, de documentación, o que resuelva un |
| | 167 | problema menor que no pueda tener ningún tipo de efecto secundario se puede |
| | 168 | sobreescribir el paquete publicado, aunque esto debería hacerse sólo como último |
| | 169 | recurso, lo más aconsejable es acumular esos pequeños cambios para la siguiente |
| | 170 | versión. |
| | 171 | |
| | 172 | ==== Dependencias ==== |
| | 173 | |
| | 174 | * Cada versión de un paquete requiere de una versión mínima de TOL dada por el |
| | 175 | miembro _.autodoc.minTolVersion que asegura su funcionamiento, aunque podría ser |
| | 176 | que funcionara con versiones anteriores, sin que sea fácil asegurarlo a ciencia |
| | 177 | cierta. Es de vital importancia revisar este campo antes de publicar una nueva |
| | 178 | versión de un paquete si ha habido cambios en la versión de TOL que pudieran |
| | 179 | afectarle y que hubieran ocurrido desde la publicación de la última versión del |
| | 180 | paquete. En principio sólo es preciso actualizar {{{_.autodoc.minTolVersion}}} |
| | 181 | si se hace uso de alguna nueva capacidad de TOL, lo cual no siempre es trivial |
| | 182 | conocer. En caso de duda es mejor actualizar de más que de menos. |
| | 183 | * Cuando un paquete requiere de otros se debe incluir las correspondientes |
| | 184 | sentencias #Require antes de la declaración del primer miembro. |
| | 185 | * Cuando el {{{#Require}}} no menciona la versión concreta del paquete que se |
| | 186 | desea cargar entonces se utilizará la versión más moderna existente localmente |
| | 187 | que sea compatible con la versión del TOL con el que se esté trabajando. |
| | 188 | * Si se solicita una versión concreta, entonces se debe cargar previamente cada |
| | 189 | uno de los paquetes requeridos directa o indirectamente. |
| | 190 | * Téngase en cuenta que no es posible cargar versiones concretas de paquetes que |
| | 191 | tengan requerimientos de diferentes versiones de un mismo paquete. |
| | 192 | * La definición del paquete siempre debe usar #Require sin especificar una |
| | 193 | versión concreta. |
| | 194 | * Obsérvese que los paquetes requeridos se deben especificar por duplicado: |
| | 195 | primero en los #Require sin comillas y luego en Set _.autodoc.dependencies |
| | 196 | entre comillas pues esta información la necesita el gestor de repositorios. |
| | 197 | * No está permitido el requerimiento cíclico directo ni indirecto entre |
| | 198 | paquetes, es decir, si A requiere a B directa o indirectamente B no puede |
| | 199 | requerir a A ni directa ni indirectamente. El sistema gestor de repositorios |
| | 200 | caería en un ciclo infinito y no hay forma de detectarlo luego es |
| | 201 | responsabilidad de los desarrolladores del repositorio el evitarlo. |
| 184 | | === Dependencias === |
| 185 | | |
| 186 | | * Cuando un paquete requiere de otros se debe incluir las correspondientes |
| 187 | | sentencias #Require antes de la declaración del primer miembro. |
| 188 | | * Si no se especifican números de versión el #Require cargará la versión más |
| 189 | | actual compatible con la versión de TOL que se esté ejecutando. En el |
| 190 | | caso de la última versión de TOL, corresponderá al archivo con el nombre del |
| 191 | | paquete nada más. En este caso, los paquetes que requiera directa o |
| 192 | | indirectamente serán también las últimas versiones compatibles con TOL. |
| 193 | | * Si se solicita una versión concreta, entonces se debe cargar previamente cada |
| 194 | | uno de los paquetes requeridos directa o indirectamente. El propio |
| 195 | | {{{#Require}}} se encargará de buscar las versiones adecuadas en el |
| 196 | | repositorio local, de instalarlas si no las encuentra, y de dar un mensaje |
| 197 | | de error si no lo consigue para que se haga manualmente. |
| 198 | | * Téngase en cuenta que no es posible cargar versiones concretas de paquetes que |
| 199 | | tengan requerimientos de diferentes versiones de un mismo paquete. |
| 200 | | * La definición del paquete siempre debe usar #Require sin especificar una |
| 201 | | versión concreta. |
| 202 | | * Obsérvese que los paquetes requeridos se deben especificar por duplicado: |
| 203 | | primero en los #Require sin comillas y luego en Set _.autodoc.dependencies |
| 204 | | entre comillas pues esta información la necesita el gestor de repositorios. |
| 205 | | * No está permitido el requerimiento cíclico directo ni indirecto entre |
| 206 | | paquetes, es decir, si A requiere a B directa o indirectamente B no puede |
| 207 | | requerir a A ni directa ni indirectamente. El sistema gestor de repositorios |
| 208 | | caería en un ciclo infinito y no hay forma de detectarlo luego es |
| 209 | | responsabilidad de los desarrolladores del repositorio el evitarlo. |
| | 261 | |