SVN: ¿Es posible obtener la lista de números de revisión para la ruta dada?
-
06-07-2019 - |
Pregunta
Estoy creando una herramienta PHP que se conecta a un repositorio, descarga la lista de confirmaciones y las almacena localmente. Sin embargo, debido a la posibilidad de que ciertos repositorios sean ENORMES y obtengan sus resultados de registro en un tiempo de espera prolongado y posibles tiempos de espera / errores, me gustaría descargar cada mensaje de confirmación utilizando solicitudes asíncronas.
Entonces, tengo puntos de inicio y finalización en el historial de revisiones, y puedo obtener todos los registros de esta manera:
svn log -r <from_revision>:<to_revision> <REPO_URL>
... y posiblemente terminaré con un archivo XML que es tan grande que tomará mucho tiempo descargarlo, mucho tiempo y muchos recursos para analizar, y mucho tiempo almacenarlo.
Si conozco el punto inicial y final, puedo crear un bucle for () para obtener las revisiones una por una:
svn log -r <revision> ...
PERO, dado que no sé qué revisiones específicas existen para la ruta dada, recibiré un error. Puedo hacer que la aplicación ignore ese error durante la actualización, pero es un truco desagradable y publicará solicitudes y esperará las respuestas de todos modos, lo que no es bueno en absoluto.
Entonces, necesito algo como esto:
- " dame la lista de números de revisión para esta ruta " ;, OR:
- " dame la lista de números de revisión para esta ruta, entre y
De esa forma, podría hacer una serie de revisiones válidas para la ruta del repositorio y obtenerlas una por una.
Todas las sugerencias son bienvenidas, gracias de antemano.
Solución
Creo que su mejor opción sería hacer lo siguiente svn log -l 100 0:{$newest} .\
que recuperará los primeros 100 registros de un directorio o archivo determinado. luego lea el último número de revisión devuelto, luego solicite los siguientes 100 svn log -l 100 {$last_ret_log}:{$newest} .\
de esa manera obtienes 99 nuevas entradas de registro con cada solicitud pero no las obtienes todas.
Otros consejos
Si tiene acceso al árbol de repositorio en su servidor Subversion, puede usar svnlook history
para obtener una lista de números de revisión.
Se pueden encontrar más detalles en http: //svnbook.red-bean .com / es / 1.1 / re49.html .
Acabo de intentar obtener un resultado similar. Solo quiero todos los números de revisión para una rama en particular.
Encontré lo siguiente muy útil.
svn log <svn_server_path> | grep "^r[0-9]\+ | " | cut -d' ' -f1 | cut -c2- > revisions.csv
Esto me da un archivo con todos los números de revisión en líneas separadas.
Con suerte, usted u otra persona lo encontrarán útil.
Nuestro repositorio tiene más de 25000 revisiones y lleva unos segundos producir este archivo.
Es posible que desee mirar svn list
.
Entonces, para su propósito:
$ svn list --verbose file:///var/svn/repos
16 sally 28361 Jan 16 23:18 README.txt
27 sally 0 Jan 18 15:27 INSTALL
24 harry Jan 18 11:27 examples/
Esto enumera la última revisión (cabeza) de cualquier archivo.
svn log url -l limitNumber - r fromReversion:toReversion
si U desea encontrar la próxima reversión (versión) anterior (más pequeña) por ejemplo
svn log url -l 4 -r someVersion:1
or
svn log url -l 4 -r 99: 3
fromReversion mayor que toReversion si U desea encontrar la próxima reversión (versión) más nueva (más grande)
svn log url -l 4 -r someVersion:head
or
svn log url -l 4 -r 3:99
fromReversion lower than toReversion