2009-02-19 15 views
22

Tengo un repositorio de CVS heredado que se migrará a Perforce.¿Cómo identifico qué ramas existen en CVS?

Para cada módulo, necesito identificar qué ramas existen en ese módulo.

Solo quiero una lista de nombres de sucursales, sin etiquetas. Debe ser una herramienta de línea de comandos, por motivos de secuencias de comandos.

Por ejemplo (asumiendo que hay un guión cvs-list-branches.sh):

$ ./cvs-list-branches.sh module1 
HEAD 
dev_foobar 
Release_1_2 
Release_1_3 
$ 

Respuesta

4

Con ello se abre etiquetas también, pero las etiquetas y ramas son básicamente los mismos en el CVS.

$cvs.exe rlog -h -l -b module1 
+0

¿Hay una manera sencilla para filtrar las etiquetas? Nuestro servidor CI produce muchas y muchas etiquetas cada noche ... ¿O es realmente tan estúpido CVS que no hay forma de diferenciar entre una rama y una etiqueta? –

+0

Además de analizar los números de versión, no hay forma de saberlo. Debes recordar que las ramas son algo que CVS agregó a RCS, el control de la versión real bajo el capó. –

0

con WinCVS (cliente GUI para Windows) Esta es trivial, un clic derecho le dará las ramas y las etiquetas de los archivos tienen.

Mediante un shell puede usar el módulo cvs log -h -l.

+0

¡Dije específicamente que debería ser una herramienta de línea de comandos! –

+1

y está allí! A acaba de agregar la información de wincvs para que pueda ser útil para otras personas. –

15

Simplemente podría analizar la salida de registro de cvs log -h. Para cada archivo habrá una sección llamada Symbolic names :. Todas las etiquetas enumeradas allí que tienen un número de revisión que contiene un cero como el último pero un dígito son ramas. Ej .:

$ cvs log -h 

Rcs file : '/cvsroot/Module/File.pas,v' 
Working file : 'File.pas' 
Head revision : 1.1 
Branch revision : 
Locks : strict 
Access : 
Symbolic names : 
    1.1 : 'Release-1-0' 
    1.1.2.4 : 'Release-1-1' 
    1.1.0.2 : 'Maintenance-BRANCH' 
Keyword substitution : 'kv' 
Total revisions : 5 
Selected revisions : 0 
Description : 

=============================================== 

En este ejemplo Maintenance-BRANCH es claramente una rama debido a que su número de revisión se muestra como 1.1. .2. Esto también se llama a veces magic número de revisión de rama.

+0

Hola, si no existe tal rama con un número de revisión de rama mágica, ¿qué significa eso? –

+0

'cvs log -h' da muchos resultados si tienes muchos archivos. Para atenuarlo, use 'cvs log pom.xml' o algo así para obtener el registro de un archivo. (Esto funcionará en todas las situaciones, ¿no?) –

+1

@LimitedAtonement: Sí, lo hace. Cuando escribí "analizar el resultado de", asumí que uno escribiría algún tipo de script para preprocesar la salida antes de consumirla a simple vista ...;) –

0

Tengo una pequeña colección de funciones de shell korn "prácticas", una de las cuales busca etiquetas para un archivo determinado. Hice un rápido intento de adaptarlo para hacer lo que quieras. Simplemente hace algo de seding/greping de la salida de registro (r) y enumera las versiones que tienen ".0". en ellas (lo que indica que se trata de una marca de la rama):

get_branch_tags() 
{ 
    typeset FILE_PATH=$1 

    TEMP_TAGS_INFO=/tmp/cvsinfo$$ 

    /usr/local/bin/cvs rlog $FILE_PATH 1>${TEMP_TAGS_INFO} 2>/dev/null 

    TEMPTAGS=`sed -n '/symbolic names:/,/keyword substitution:/p' ${TEMP_TAGS_INFO} | grep "\.0\." | cut -d: -f1 | awk '{print $1}'` 
    TAGS=`echo $TEMPTAGS | tr ' ' '/'` 
    echo ${TAGS:-NONE} 
    rm -Rf $TEMP_TAGS_INFO 2>/dev/null 1>&2 
} 
24

Como un corte rápido :) El mismo representa la verdad para rlog.

cvs log -h | awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | sort -u 

Versión mejorada según bdevay, ocultando la salida irrelevante e izquierda alinear el resultado:

cvs log -h 2>&1 | awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | awk '{print $1}' | sort -u 
+3

Pequeño embellecer: 'cvs log -h 2> & 1 | awk -F "[.:]" '/^\ t/&& $ (NF-1) == 0 {print $ 1}' | awk '{print $ 1}' | ordenar -u' Oculta también las líneas que comienzan con "cvs log:" y alinea el resultado a la izquierda. – bdevay

+0

toque agradable para usar 2> y 1 y ocultar datos irrelevantes –

Cuestiones relacionadas