¿Mejores prácticas para usar SVN con packages de Delphi Visual Component?

Con el deseo de poder reproducir una revisión dada de un proyecto que utiliza packages de componentes visuales de terceros, ¿qué hay en SVN y cuál es la mejor manera de implementar / estructurar los repositorys SVN?

Para los componentes no visuales, la regla parece simple para asegurar que no se dependa de los repos externos: "no se permite ninguna reference svn-externals a ningún repo externo". Tengo un repository compartido que controlo, que es la única reference 'svn-externals' permitida. Esto hace que sea fácil implementar y compartir estos types de elementos de time de ejecución con el código fuente en diferentes proyectos SVN. Cualquier reference de este repository interno compartido es por 'svn-externals' usando un número de revisión específico.

Los packages visuales parecen ir en contra de poder ser fácilmente controlados por la versión, ya que pueden tener que ser reinstalados en cada revisión. Cómo crear mejor un proyecto SVN que pueda recrearse más adelante en un número de revisión específico … ¿hay alguna solución recomendada?

Anteriormente no nos preocupamos por los componentes de terceros, ya que no cambian a menudo y nunca tuvimos una solución realmente buena. Me preguntaba si otros habrían descubierto la mejor manera de manejar este problema, ya que estoy haciendo una limpieza de spring / reorganización interna y quería hacerlo 'mejor' que antes.

Técnicamente, la fuente RTL / VCL también debería estar en el repository SVN (si hay una revisión / package de service de Delphi lanzado).

Mi solución probablemente sea crear una máquina virtual con una versión particular del entorno Delphi con todos los controles visuales instalados. A medida que agreguemos / actualicemos controles visuales, o actualicemos Delphi con hotfixes / service packs, creamos una nueva versión de la máquina virtual. Luego almacenamos una image de esta revisión de máquina virtual en un estante en alguna parte. ¿Es esto lo que haces? ¿La activación / licencia de Delphi funciona bien (o no funciona) en este escenario?

Gracias,

Darian

Puede preparar scripts "start IDE" (y posiblemente "build") para sus proyectos y mantenerlos a medida que el proyecto evoluciona en el repository.

Independientemente de su decisión sobre mantener los componentes en repositorys separados y usar elementos externos, o includelos en un único repository con posible bifurcación, también debe include files bpl comstackdos para cada compilation de componentes y para cada twig preparada para una versión específica de Delphi.

Debería intentar mantener la mayoría de las routes (si no todas) relativas, en el peor de los casos use variables de entorno para apuntar a su directory de proyecto raíz.

La secuencia de commands Start IDE le permite mantener cada proyecto y el entorno de la versión Delphi configurados de manera específica en una única installation de Windows.

Debe include keys de logging necesarias para su proyecto y Delphi:

Windows Registry Editor Version 5.00 [-${DelphiRegKey}\Disabled Packages] [-${DelphiRegKey}\Known Packages] [-${DelphiRegKey}\Library] [${DelphiRegKey}\Known Packages] "$(BDS)\\Bin\\dclstd${CompilerVersion}.bpl"="Borland Standard Components" "$(BDS)\\Bin\\dclie${CompilerVersion}.bpl"="Internet Explorer Components" "$(BDS)\\Bin\\dcldb${CompilerVersion}.bpl"="Borland Database Components" (...) "${CustomComponentPack}"="Custom Components" [${DelphiRegKey}\Library] "Search Path"="${YourLibrarySourceFolder1};${YourLibrarySourceFolder2}" (...) 

A continuación, puede preparar el file por lotes:

 regedit /s project.reg %DelphiPath%\bin\bds -rProjectRegKey Project.dpr 

Donde ${DelphiRegKey} es HKEY_CURRENT_USER\Software\Borland(or CodeGear in newer versions)\ProjectRegKey .

Básicamente es más fácil cuando va a volcar su configuration de trabajo actual desde el logging, quitarle las keys innecesarias, cambiar las routes a relativa y luego adaptarse para que funcione con su proyecto.

En dicha configuration, el cambio entre proyectos y sus sucursales que tienen diferentes sets de componentes (y / o posiblemente el uso de diferentes versiones de Delphi) es una cuestión de verificar un repository solamente y ejecutar el script.

Afortunadamente para nosotros, no tenemos que preocuparnos por un package de revisión / service; todavía estamos en Delphi 5.: D

Suspiro, hubo un momento en el que una aplicación completa (configuraciones y todo) existiría dentro de un solo directory, haciendo que esto no sea un problema. Pero, el mundo ha avanzado, y tenemos varias partes de una aplicación repartidas por todo el lugar:

  • logging
  • Windows \ System
  • Archivos de progtwig
  • A veces incluso carpetas de usuario en "Datos de la aplicación" o "Configuración local"

Tiene toda la razón al considerar el impacto de las revisiones / service packs. No solo RTL / VCL podría verse afectado, sino que el comstackdor mismo podría haberse modificado ligeramente. Tenga en count también que, al ejecutar la misma línea de pensamiento, incluso cuando actualiza las versiones de Delphi, debe comstackr con la versión correcta. Es cierto que esto es un poco más fácil porque puedes ejecutar diferentes versiones de Delphi una junto a la otra.

Sin embargo, aconsejaré que probablemente no valga la pena esforzarse demasiado. Recuerde que trabajar en versiones anteriores siempre es más costoso que trabajar en la versión actual.

  • Lo ideal es que quiera que todos sus desarrolladores estén en el código de sucursal principal, y desea minimizar el trabajo de parches en versiones anteriores.
  • Así que esfuérzate por mantener a la mayoría de tus usuarios en la última versión tanto como sea posible.
  • Es cierto que esto no siempre es posible.
  • No querrá saltar a la 'nueva versión' sin algunas testings primero en cualquier caso.
  • Ciertos processs ágiles tienden a facilitar esto.
  • Al usar una máquina de compilation separada o VM, ya tiene una medida de control.
  • TIP: I would also suggest that the build process automtically copy build output to a different machine, or at least a different hard-drive.
  • Una vez que esté satisfecho con el package de service, puede planificar cuándo desea transferirlo a su máquina de compilation.
  • Es extremadamente importante mantener un logging de la label en la que se modificó la configuration de compilation. (Por si acaso.)
  • If your build scripts are also kept in source control, this happens implicitly.
  • Cuando haya desplegado la revisión / service pack, las soluciones a las versiones anteriores se deben desalentar activamente.
  • Por supuesto, probablemente no se puedan eliminar, pero si es lo suficientemente raro, incluso la reconfiguration manual podría ser factible.
  • Instead of a VM option to keep your old configuration, you can also consider drive-imaging.
  • Para ahorrar en $$$ de VMWare LabManager, busque un reproductor de VM accionado por línea de command.
  • Puede que tenga que mantener 2 máquinas / máquinas virtuales "en vivo", pero nunca debería necesitar más que eso.
  • It's okay for an automatic build script to fail because the desinetworking configuration isn't available. This will remind you to set it up manually.
  • Recuerde que trabajar en versiones anteriores siempre es más costoso que trabajar en la versión actual.

Paquetes de terceros

Hicimos un poco más de esfuerzo aquí. Sin embargo, una de nuestras principales motivaciones fue el hecho de que utilizamos aproximadamente 8 packages de terceros. Así que hacer algo para estandarizar esto en sí mismo tenía sentido. También decidimos ejecutar 8 progtwigs de installation como un PITA, por lo que ideamos una forma fácil de instalar manualmente todos los packages requeridos desde el control de origen.

Consideraciones key

  • El entorno de compilation no necesita ningún package instalado , siempre que el object y / o los files fuente estén accesibles.
  • Sería útil si los desarrolladores pudieran garantizar con bastante facilidad que están construyendo con la misma versión de bibliotecas de terceros cuando sea necesario.
  • Sin embargo, los entornos dev generalmente deben instalar packages en el IDE.
    • Esto a veces puede causar problemas con la compatibilidad de la fuente.
    • Por ejemplo, nuevas properties que se escriben en files mantenidos por IDE.
    • Lo cual, por supuesto, nos lleva de vuelta al segundo punto.
  • Dado que los packages de terceros se actualizan con poca frecuencia, se colocan dentro de un área ligeramente diferente de control de origen.
  • Pero, NB aún debe ser referencedo a través de routes relativas.

Creamos la siguiente estructura de carpetas:

 ...\ThirdParty\_DesignTimePackages //The actual package files only are copied here ...\ThirdParty\_RunTimePackages //As above, for any packages "requinetworking" by those above ...\ThirdParty\Suite1 ...\ThirdParty\Suite2 ...\ThirdParty\Suite3 

Como resultado de esto, es bastante fácil configurar un nuevo entorno:

  • Obtenga la última versión de todos los files de ThirdParty.
  • Agregue _DesignTimePackages y _RunTimePackages a la ruta de Windows
  • Abrir Delphi
  • Seleccione Instalar componentes
  • Seleccione todos los packages de _DesignTimePackages.
  • ¡Hecho!

Editar : Darian estaba preocupado por la posibilidad de errores al cambiar las versiones de conmutación de los packages de layout. Sin embargo, este enfoque evita ese tipo de problemas.

  • Al agregar _DesignTimePackages y _RunTimePackages a la ruta de Windows, Delphi siempre encontrará los packages necesarios en el mismo lugar.
  • Como resultado, es less probable que encuentre la "pesadilla del package" de versiones incompatibles.
  • Por supuesto, si haces algo tonto como rebuild algunos de tus packages y registrar la nueva versión, puedes esperar problemas, sin importar el enfoque que sigas.

Yo suelo estructurar mi repository en SVN así:

 /trunk/app1 /trunk/comp/thirdparty1 /trunk/comp/thirdparty2 /trunk/comp/thirdparty3... 

Tengo, justo en la carpeta raíz (troncal) un grupo de proyectos (.groupproj, o .bpg en delphi antiguo) que contiene todos mis componentes. (allcomponents.groupproj).

Instalar en una máquina nueva significa abrir ese package e instalar los componentes designtime. Eso es un lastre para todas las versiones de Delphi anteriores a 2010, pero 2010 y XE tienen una característica encantadora para que pueda ver de un vistazo, qué componentes son componentes designtime.

También, a veces, me ahorraré el problema de instalar esos componentes a mano, al hacer un file build.bat y un file regcomponents.bat. Los componentes simplemente ejecutan regedit e importan las keys necesarias para registrar todos esos componentes, después de que build.bat los haya construido, y todo lo demás.

Cuando pasas de una versión de Delphi a otra, es bueno tener tanto un file de logging por lotes como un proyecto grupal para ayudarte. Especialmente si tiene que realizar una gran apertura de proyectos / packages y savelos como MyComponent3.dpk en lugar de MyComponent2.dpk, o actualizar la extensión del package de 150 a 160, o lo que sea que hagan sus packages.