Ir al contenido



Foto

Añadir el hash del commit actual (Git) como una constante


  • Por favor identifícate para responder
4 respuestas en este tema

#1 seoane

seoane

    Advanced Member

  • Administrador
  • 1.243 mensajes
  • LocationEspaña

Escrito 18 junio 2018 - 04:49

Buenos dias,

 

ultimamente me he acostumbrado a incluir en mis programa, de forma automatica, en que revision de Git estaba en el momento de compilar la applicación, asi si hay algun problema puedo saber exactamente que version del codigo era.

 

En Scala (lenguaje con el que trabajo actualmente) es facil usando plugins para su herramienta de compilacion (Sbt), pero nunca lo habia probado en Delphi.

 

Hoy he estado dandole vueltas a como hacerlo en Delphi y he llegado a esto (si alguien tiene una solucion mas facil que me avise):

 

He creado el sigueinte bat, y lo he guardado en la carpeta del proyecto:


php
  1. @echo off
  2. for /f %%a in ('git rev-parse HEAD') do set gitCommit=%%a
  3. for /f %%a in ('git rev-parse --short HEAD') do set gitShortCommit=%%a
  4.  
  5. echo gitCommit = '%gitCommit%'; > gitCommit.inc
  6. echo gitShortCommit = '%gitShortCommit%'; >> gitCommit.inc

Y en Project->Options->Build Events->Pre-built events  he añadido el siguiente comando:


php
  1. $(PROJECTDIR)\prebuild.bat

Asi antes de cada "build" se ejecuta el bat, creando un fichero como este:


php
  1. gitCommit = 'd9a01369f38b4c36672a3409e9be12c67a2877ce';
  2. gitShortCommit = 'd9a0136';

Que podemos incluir en nuestro codigo asi:


php
  1. const
  2. appName = 'Appname';
  3.   appVersion = '0.1.0';
  4. {$include gitCommit.inc}

Y usarlo por ejemplo para ponerlo en el titulo de la ventana:


php
  1. procedure TfrmMain.FormCreate(Sender: TObject);
  2. begin
  3. Caption:= appName + ' - ' + appVersion + ' - ' + gitShortCommit;

Saludo

 

PD: Si alguien conoce una manera más sencilla que lo diga


  • 2

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.804 mensajes
  • LocationMéxico

Escrito 18 junio 2018 - 12:26

Muy interesante, en la oficina estamos tocando el GitLab para versionar nuestro código y estoy en el proceso de aprendizaje. (y)

 

Saludos


  • 0

#3 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 829 mensajes
  • LocationArgentina

Escrito 16 julio 2018 - 08:58

Espectacular, y siempre que lo poina en un recurso a mano..

 

En mi caso, yo hago lo siguiente, tengo esto en el .dpr:


delphi
  1. program app;
  2.  
  3. //incluyo el recurso con la version
  4. {$R 'VersionInfo.res' 'VersionInfo.rc'}
  5. {$R *.res}
  6.  
  7. // uses
  8.  
  9. // bloque principal que inicializa la aplicacion
  10.  
  11. begin
  12.  
  13. end.

Este es mi archivo VersionInfo.rc:


delphi
  1. 1 VERSIONINFO
  2. FILEVERSION 1, 2, 3, 4
  3. PRODUCTVERSION 1, 0, 0, 0
  4. FILEOS VOS_DOS_WINDOWS32
  5. FILETYPE VFT_APP
  6. {
  7.  BLOCK "StringFileInfo"
  8.  {
  9.   BLOCK "040904E4"
  10.   {
  11.   VALUE "CompanyName", "NombreCompania\000"
  12.   VALUE "FileDescription", "\000"
  13.   VALUE "FileVersion", "1.0.0.0\000"
  14.   VALUE "InternalName", "\000"
  15.   VALUE "LegalCopyright", "Copyright\000"
  16.   VALUE "OriginalFilename", "AcaPoniaElHash\000"
  17.   }
  18. }
  19. BLOCK "VarFileInfo"
  20. {
  21.   VALUE "Translation", 1033, 1252
  22.  }
  23. }

Basicamente lo que hacia yo era algo bastante feo :), ya que estaba usando el campo OriginalFilename y ahi metia la revision.. pero  bueno

 

Me parece que tu solucion es muchisimo mejor, y ademas, si no me equivoco, no queda "publica" la informacion en el archivo, aunque tampoco es tan peligroso

 

Lo peor es que nunca se me ocurrio "automatizar" el proceso; ya que en ese verson info tambien pongo la fecha y lo hago tambien a mano, soy de terror


  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.155 mensajes
  • LocationArgentina

Escrito 16 julio 2018 - 10:01

Voy a decir una burrada profesional pero bue... nunca me puse a estudiar en que consiste y de que forma aprovechar el uso de .inc en nuestros proyectos.

Por otra parte, lo de tener a mano en nuestros ejecutables el hash de revisión me parece una idea bastante ingeniosa... ahora que estoy más familiarizado con Git.

 

Ahora bien, me parece interesante mientras el proyecto está desarrollandose. Mi duda es si conviene esto cuando sale la versión definitiva, o al menos algo que pudiera considerarse un "release candidate".

 

Lo de añadir la versión a mano, eso lo hice un par de ocasiones. Aunque ahora que estoy en proceso de mejorar si sistema de versionado, como que no me va el sistema tradicional que ofrece para completar en la configuración del proyecto. Creo que aquí me sería util, por lo que estoy entendiendo, el poder de los incs para luego recuperar esta info y mostrarla en las ventanas "Acerca de".

 

Saludos,


  • 0

#5 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 829 mensajes
  • LocationArgentina

Escrito 17 julio 2018 - 06:35

Vi el tema el versionado progresivo, pero merece una lectura más en detalle como para opinar

Con respecto al hash de git, a mí la verdad me resulta útil porque uso mucho git, y me es más fácil buscar la versión por commit, y al mismo tiempo puedo ir viendo que cambió antes y después.. me resulta imprescindible para el versionado de la bd, ya que voy llevando scripts con "parches" diferenciales y los voy aplicando

Este es otro asuntillo que debería tener una solución fácil y automática en Delphi; habría que emular lo que otros framework llaman las migraciones de la bd (es básicamente git para el esquema de la base)
  • 0