mac - Listar todo svn: externals recursivamente?
tortoisesvn windows 10 (6)
¿Cómo puedo obtener una lista de todos los svn: externos (recursivamente) en un directorio? ¿Hay alguna utilidad para esto?
(Estoy usando Windows (y tortuga))
Tengo un montón de svn: external links que enlazan a diferentes partes compartidas de mi proyecto, y cuando me ramifico usualmente soy bastante propenso a errores para encontrar todos los externos y los cambio de modo que el enlace a las rutas dentro de la nueva rama.
Cambiar manualmente todas esas propiedades externas suena tedioso. ¿Has mirado la nueva funcionalidad para los externos agregados en Subversion 1.5?
Subversion 1.5 da un gran paso para aliviar estas frustraciones. Como se mencionó anteriormente, las URL usadas en el nuevo formato de definición externa pueden ser relativas, y Subversion proporciona magia de sintaxis para especificar múltiples sabores de relatividad de URL.
../
Relativo a la URL del directorio en el que se establece la propiedad svn: externals
^ /
Relativo a la raíz del repositorio en el que se encuentra versionada la propiedad svn: externals
//
Relativo al esquema de la URL del directorio en el que se establece la propiedad svn: externals
/
Relativo a la URL raíz del servidor en el que está versionada la propiedad svn: externals
Tal vez uno de esos ayudaría? Supongo que depende exactamente de cómo se está bifurcando y cuál es la estructura de su repositorio.
Haga lo siguiente en la raíz de su copia de trabajo:
svn propget svn:externals -R
Como se discute en los comentarios a continuación, esto no incluye elementos externos en forma externa.
Nota para los usuarios de TortoiseSVN: hay una opción en el instalador de TortoiseSVN para instalar también el cliente de línea de comando SVN. Esta opción no está habilitada por defecto.
Mi solución para TortoiseSVN:
Abra el cuadro de diálogo "Succión / etiqueta ..." en el menú contextual de SVN. El cuadro de diálogo inferior muestra todos los elementos externos, incluidos elementos externos anidados.
Tal vez, como solución alternativa, pueda estructurar su proyecto de tal manera que todos los elementos externos estén configurados en la misma carpeta, por ejemplo, en la carpeta del proyecto justo debajo de Troncal. (Esto no significa que todas las carpetas externas tengan que estar a la misma profundidad por cierto.) Luego puede hacer clic derecho en la carpeta de su proyecto, luego Propiedades ..., luego la pestaña Subversión, luego Propiedades ... luego haga doble clic en svn: externals.
Tomé la respuesta de Daniel Alder , eliminé las llamadas de svnversión y las hice recursivas (NOTA: read abcde
no funciona si hay un espacio en el origen o el destino). Este es un script bash, por lo que necesitarás algo como Cygwin o usar el Subsistema de Windows para Linux .
getSvnExternals() {
svnbase="$1"
svnpath="$2"
svn propget svn:externals -R "$svnbase/$svnpath" 2> /dev/null | while read a b c d e; do
[ -n "$a" ] || continue
if [ "$b" = "-" ]; then
wcparent="$a"
external="$c"
wcdir=$(echo "$wcparent/$d" | sed s#^./##)
[ -z "$e" ] || echo "WARNING: Invalid format #1. line=''$a $b $c $d $e''"
else
[ -n "$wcparent" ] || echo "WARNING: Invalid format #2. wcparent=$wcparent"
external="$a"
wcdir=$(echo "$wcparent/$b" | sed s#^./##)
[ -z "$c" ] || echo "WARNING: Invalid format #3. line=''$a $b $c $d $e''"
fi
echo "$1/$wcdir: $external"
## recurse into external directory
[ -d "$wcdir" ] && getSvnExternals "$1/$wcdir"
done
}
Utilicé la respuesta de Wim Coenen y escribí el siguiente script para crear una lista de todas las revisiones:
getSvnRevs() {
cd "$1"
wcver="$(svnversion)"
[ -n "$wcver" ] || panic "Unable to get version for $wcdir"
echo "$1: $wcver"
svn propget svn:externals -R | while read a b c d e; do
[ -n "$a" ] || continue
if [ "$b" = "-" ]; then
wcparent="$a"
wcdir="$wcparent/$c"
[ -z "$e" ] || panic "Invalid format #1"
else
[ -n "$wcparent" ] || panic "Invalid format #2"
wcdir="$wcparent/$a"
[ -z "$c" ] || panic "Invalid format #3"
fi
[ -d "$wcdir" ] || panic "Invalid directory: $wcdir"
wcver="$(svnversion "$wcdir")"
[ -n "$wcver" ] || panic "Unable to get version for $wcdir"
echo "$1/$wcdir: $wcver"
done
}
Afortunadamente, no tengo elementos externos anidados, así que no tuve que probar esto y supongo que no funcionaría. Pero si necesita esto, probablemente sea suficiente llamar a esta función recursivamente. Además, nunca probé con nombres de archivos que necesitan escaparse. Es probable que no funcione entonces.
DESCARGO DE RESPONSABILIDAD: Sé que la pregunta original era sobre Windows, y el script de shell no funcionará allí a menos que esté usando cygwin o similar.