close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Changes between Version 37 and Version 38 of TolPackageRulesAndComments


Ignore:
Timestamp:
Jan 10, 2011, 11:29:59 AM (14 years ago)
Author:
Víctor de Buen Remiro
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TolPackageRulesAndComments

    v37 v38  
    234234=== Instalación personalizada ===
    235235
    236 El usuario puede instalar una versión concreta paquete de forma manual
     236El usuario puede instalar una versión concreta de un paquete de forma manual
    237237{{{
    238238#!cpp
     
    516516   responsabilidad de los desarrolladores del repositorio el evitarlo.
    517517
     518==== Resolución de conflictos ====
     519
     520Imaginemos que tenemos un paquete A que es usado por otros dos: B y C los cuales se crearon respectivamente con las versiones A.n.1 y A.n.2, lo cual indica simplemente que cada uno funciona con su versión de A correspondiente, o mejor dicho, que ha pasado cierto número de tests de control porque a más no se puede llegar. Nada impide que cada uno de ellos pueda o no funcionar con versiones anteriores o posteriores.
     521
     522Esos números de versión quedan recogidos en la base de datos y son consultables vía WEB. Sería posible obligar al #Require a cargar las versiones específicas con las que se ha creado cada uno pero entonces los paquetes B y C serán incompatibles por definición, es decir, no se podrían usar conjuntamente en la misma sesión, cuando en realidad pueden ocurrir varias cosas:
     523
     524 1. Si B funciona con la A.n.2 y C funciona con la A.n.1 daría igual que cargaras una u otra con lo que lo mejor es usar la más moderna.
     525 2. Si B funciona con la A.n.2 pero C no funciona con la A.n.1 entoces hay que usar la más moderna.
     526 3. Si B no fuciona con la A.n.2 pero C sí funciona con la A.n.1 entonces ha aparecido un conflicto y habría que forzar el uso de la vieja anteponiendo en el código del usuario un #Require A.n.1 a los #Require B y #Require C, pero sólo como solución temporal mientras se hacen los cambios que toquen en A, en B o en ambos de forma que B funcione con la A.n.2
     527
     528
     529Para reducir las probabilidades de que aparezcan conflictos y paliar sus consecuencias cuando ocurran, la política de desarrollo debería cumpir estas normas:
     530
     531 1. Los paquetes nunca han de requerir versiones concretas de un paquete ni tampoco tiene sentido que intenten cargar una versión concreta sino siempre la más avanzada que haya.
     532 2. Cada test debe acompañarse de una batería de tests automáticos que usen sólo #Require sin especificar versiones.
     533 3. Aplicar de forma muy cuidadosa los parches, es decir, los cambios en un paquete que no suponen cambios de versión. hay que estar muy seguro de que ningún paquete dependiente pueda verse afectado, pues no habrá forma de arreglarlo después si hay conflictos. Básicamente hay que reservarlos a temas de documentación y errores muy claros y localizados.
     534 4. Cada vez que se quiera cambiar la versión de un paquete hay que pasar los tests del mismo en local y los de todos los paquetes que dependan de él.
     535 5. Si falla algún test de un paquete dependiente hay que depurar los paquetes afectados para resolver el conflicto antes de que llegue al usuario.
     536 6. Si pese a todos los cuidados ocurre un fallo entonces se reporta un ticket y, de manera excepcional y sólo mientras se arregla el problema, se colocan en el código del cliente tantos #Require de versiones específicas como sean necesarias para que puedan regresar a un estado de compatibilidad.
     537
     538En cuanto a los usuarios en proyectos con procesos críticos de producción es evidente que no pueden andar corriendo riesgos por lo que simplemente no deben actualizar ningún paquete en las máquinas de producción mientras no hayan comprobado que las nuevas versiones funcionan correctamente en su máquinas de desarrollo. Si queremos que se puedan usar las nuevas herramientas sin frenar el desarrollo ni arriesgar la seguridad de los clientes no se me ocurre ninguna otra forma. La automatización de
     539
    518540=== Código declarativo ===
    519541