2011-03-09 21 views
9

Estoy configurando un trabajo de Integración continua que parchea una biblioteca externa y libera la versión parchada localmente.Buscar la última etiqueta SVN

Sin embargo, la biblioteca externa usa TRUNK para el desarrollo, y me gustaría que mi trabajo de CI seleccione automáticamente la última etiqueta de liberación para el pago y envío.

¿SVN tiene esa funcionalidad?

(Guiones de Bash están bien)

+0

Acabo de encontrar esta pregunta similar: http://serverfault.com/questions/68139/get-latest-tag-from-subversion –

Respuesta

11

Hm .. . ¿Qué hay de lo siguiente:

svn log URL/tags --limit 1 

imprimirá la última etiqueta.

+0

Agradable, gracias (+1) –

-3

Svn no tiene una definición de etiqueta . Supongo que te refieres a revisión. La revisión simbólica HEAD apunta a la última revisión de un árbol.

p. Ej. svn export -rHEAD ...

+0

Sé que no hay una definición real de una etiqueta, pero me refiero a las cosas de la pseudo-etiqueta en 'tags' junto a' trunk' –

9

Esto funcionará si nada mejor se puede encontrar:

svn log -v <tagsurl> | awk '/^ A/ { print $2 }' | grep -v RC | head -1 

(las tiras parte grep -v RC liberan candidatos)

Fuente:this answer to a previous question

+2

Esto funcionó mejor para mí ya que necesitaba la URL de la etiqueta, no la información. – Bart

+0

use --limit 1 junto con log -v para ahorrar a tiempo y obtener la última etiqueta. 'svn log -v --límite 1 | awk '/^A/{print $ 2}' ' –

0

Para las ventanas, usted podría utilizar PowerShell:

$path = (([Xml] (svn log --xml $Url --verbose --username $Username --password $Password)).Log.LogEntry.Paths.Path | 
? { $_.action -eq 'A' -and $_.kind -eq 'dir' -and $_.InnerText -like '*tags*'} | 
Select -Property @(
    @{N='date'; E={$_.ParentNode.ParentNode.Date}}, 
    @{N='path'; E={$_.InnerText}})| 
Sort Date -Descending | 
Select -First 1).path 

Donde $ url es la URL de etiquetas le

2

Aquí se trata de una solución más genérica. A veces, no sólo necesitamos la última etiqueta, pero la última etiqueta que respeten un patrón:

last_tag=$(svn ls http://svn_rep/XXX/tags/ | egrep '^MySpecialProject_V([0-9].)+[0-9]+[a-zA-Z_0-9]*' | sort --reverse | head -1 2>&1) 

aquí tendremos la última etiqueta del proyecto cuyo nombre empieza por MySpecialProject_V. Y si tuviéramos las siguientes etiquetas:

Koko_V3.1.0.0 
MySpecialProject_V1.1.0.0 
MySpecialProject_V1.2.0.0 
MySpecialProject_V2.1.0.0 
MySpecialProject_V2.2.0.0 

El resultado de:

echo $last_tag 

... sería:

MySpecialProject_V2.2.0.0 

espero que esto ayudaría a alguien.

Cuestiones relacionadas