Tengo un proyecto python bajo SVN, y quiero mostrar el número de versión cuando se ejecuta. ¿Hay alguna forma de hacerlo (como ejecutar automáticamente un script corto en commit que podría actualizar un archivo de versión o consultar un repositorio SVN en Python?)Obteniendo el número de revisión SVN en un programa automáticamente
Respuesta
No estoy seguro acerca de los detalles de Python, pero si coloca la cadena $ Revision $ en su archivo en alguna parte y tiene enable-auto-props = true en su configuración de SVN, se reescribirá en algo como $ Revisión: 144 $. A continuación, puede analizar esto en su secuencia de comandos.
Hay a number of property keywords you can use in this way.
Esto no tendrá ningún costo adicional, p. consultar el repositorio SVN, porque la cadena está codificada en su archivo en commit o update.
No estoy seguro de cómo le gustaría analizar esta en Python, pero en PHP que lo haría:
$revString = '$Revision: 144$';
if(preg_match('/: ([0-9]+)\$/', $revString, $matches) {
echo 'Revision is ' . $matches[1];
}
El archivo hooks/pre-commit
en su repositorio es un script o programa que lo hará ser ejecutado antes de un commit exitoso. Simplemente conviértalo en una secuencia de comandos que actualice su archivo con el número de versión correcto a medida que se compromete (el número de revisión se pasa al script a medida que se ejecuta). Aquí hay un tutorial con un ejemplo de cómo escribir un enlace precompromiso: http://wordaligned.org/articles/a-subversion-pre-commit-hook
Ay. Permitir que el enlace de precompilación modifique archivos generalmente es una mala idea. La versión en el repositorio será diferente de la versión en la copia de trabajo, y esto puede generar cierta confusión. El committer tiene que volver a una versión anterior del archivo y luego obtener la nueva, lo que probablemente resulte en algún tipo de conflicto, ya que svn ha almacenado la versión original en la base de texto de la copia de trabajo. – sunny256
Estoy de acuerdo en que esto es peligroso y generalmente no es un comportamiento deseado, pero si te limitas apropiadamente, entonces no veo el problema. Por ejemplo, si tiene un archivo "svn_version.txt" que no contiene nada más que el número de revisión actual, entonces sería perfectamente seguro; su copia local siempre tendrá la versión que ha revisado y el repositorio siempre tendrá la última (a menudo igual que su copia de trabajo). –
Consulte pysvn. expone extensiones en Python para la funcionalidad de tiempo de ejecución de Subversion.
+1 para pysvn, pero es mejor evitar enlazar con "esto" –
Hay un fragmento de código en Django que le permite hacer esto, recomendaría mirarlo. http://code.djangoproject.com/browser/django/trunk/django/utils/version.py
Esta función solo funciona cuando se ejecuta desde un proceso de subversión. Si esto es lo que quiere el OP, entonces se resuelve el problema. Sin embargo, sospecho que puede querer que el script contenga dentro de sí mismo o un archivo de configuración o algo así como su revisión de subversión, incluso si el script ya no está bajo subversión, en cuyo caso ese enlace no será útil. –
Sí, esta es una gran opción alternativa, pero tener el número de versión también bajo control de fuente sería mejor. ¡Gracias! +1 – Smashery
Lo hago simplemente ejecutando un pequeño script al construir mi proyecto. La secuencia de comandos simplemente llama a svn info en combinación con sed para obtener los datos de revisión desnudos e inyecta ese número en el archivo revision.txt.
El servidor de compilación Hudson lo hace aún más fácil ya que establece el número de revisión SVN como una variable de entorno justo antes de invocar los scripts de compilación.
Hacemos eso también, funciona bien – orip
puedo encontrar la sección cuando se ejecuta un poco ambigua - cuando se ejecuta desde dónde? ¿De un pago SVN o del código publicado? Todas las soluciones funcionan al inyectar la versión de SVN de algún modo en el origen de Python o en algún lugar del repositorio en un archivo de versión por separado.
El archivo de versión se cambia en las cajas nuevas, por lo que es necesario realizar una limpieza antes de la distribución. Entonces mi pregunta de dónde se está ejecutando el programa permanece.
Similar a, pero un poco más pitónico que la respuesta PHP; poner esto en su módulo de __init__.py
:
__version__ = filter(str.isdigit, "$Revision: 13 $")
y asegúrese de agregar la propiedad de revisión:
svn propset svn:keywords Revision __init__.py
o '' .join (c para c en "$ LastChangedRevision: 1546 $" si c.isdigit()) si no te gusta el filtro. –
O puede hacer como esto:
import re,subprocess
svn_info = subprocess.check_output("svn info")
print (re.search(ur"Revision:\s\d+", svn_info)).group()
imprime "Revision: 2874"
en mi proyecto
O como esto:
print (subprocess.check_output("svnversion")).split(":")[0]
imprime "2874"
en mi proyecto
Funciona solo con una copia de trabajo. – bahrep
No solo con copia de trabajo. Puede recuperar svn URL remota de "svn info" primero, como ejecutar "svn info", luego tomar el valor de parámetro "URL" de la salida y ejecutar el mismo código, pero usando "svn info value_of_URL_param" Entonces, el código actualizado es: import re, de subproceso svn_info = subprocess.check_output ("info https SVN: //svn.you_remote_repo_url") de impresión (re.búsqueda (ur "Revisión: \ s \ d +", svn_info)). grupo() –
- 1. Pantalla ASP.NET Número de revisión SVN
- 2. ¿Cómo inyectar el número de revisión de SVN en JAR?
- 3. Incluir número de revisión SVN en el código fuente
- 4. ¿Cómo obtener programáticamente el número de revisión SVN?
- 5. ¿Cuál es el número de revisión máximo soportado por SVN?
- 6. ¿Cómo configurar un número de revisión para svn externo?
- 7. Obteniendo la fecha de una revisión usando svn info
- 8. svn copy [número de revisión] -r [url] [ruta]
- 9. ¿Cómo se determina el último número de revisión de SVN enraizado en un directorio?
- 10. Obtenga el número de revisión de un repositorio remoto
- 11. ¿Cómo se muestra el número de revisión de SVN en el registro de git?
- 12. VisualSVN ¿Cómo revertir el número de revisión?
- 13. SVN a HG: ahora salida número de revisión SVN del conjunto de cambios HG
- 14. cómo puedo tener eclipse insertar automáticamente el número de revisión de subversión en mi código
- 15. ¿Cómo puedo ver el número de revisión de cada archivo en una copia de trabajo SVN?
- 16. ¿Puedo saber el número de revisión de una confirmación?
- 17. Cómo obtener el número de revisión SVN en cierta fecha o rango de fechas
- 18. ¿Puedo ver el número de revisión actualmente verificado en Tortoise SVN?
- 19. svn tamaño de revisión en bytes
- 20. Obteniendo el número del repositorio de subversión en el código
- 21. Obteniendo Factores de un Número
- 22. obteniendo el número de resultados de google en el programa perl
- 23. Número de revisión de Subversion en múltiples proyectos
- 24. ¿Cómo calcula CouchDB el número de revisión
- 25. Cómo incluir el número de revisión de Subversion en el proyecto Delphi
- 26. con svn, verifique el número de revisión cuando esté fuera de línea
- 27. SVN: ¿cómo obtener la primera revisión de un archivo?
- 28. ¿Mover un archivo en SVN elimina su historial de revisión?
- 29. Construya e implemente un número de revisión específico con TeamCity
- 30. ¿Cómo sincronizo el número de revisión SVN con mi sitio web ASP.NET?
¡Esta es la respuesta correcta! Además, recuerde establecer la propiedad 'keywords = Revision' en cada archivo al que desee hacer esto. –
Drew: creo que si habilita enable-auto-props = true, ¿las palabras clave predeterminadas están todas establecidas? –
+1 ¡Eso es increíble! En mi caso, sin embargo, ¿hay alguna manera de que SVN edite el número de revisión si se trata de un archivo diferente que se modificó en esta revisión? Por ejemplo, si tengo la palabra clave de número de revisión en version.py, pero no cambio version.py en revisión nnn, no la actualizará, ¿o sí? Si no, ¿hay alguna manera de utilizar este método de esa manera? – Smashery