Mi equipo usa cinco repositorios SVN separados, para cinco módulos o aplicaciones diferentes que estamos manteniendo. Cada uno tiene su propia secuencia de versiones.
Nos gusta tener un "cartel de pared" del estado actual de nuestros repositorios con sus sucursales. Actualmente, estamos usando una pizarra para esto, y funciona bastante bien. Pero me pregunto si existe una herramienta que pueda ayudarnos con esto. Estaría bien si tuviera que actualizar manualmente un documento (Visio o lo que sea), pero, por supuesto, puntos de bonificación por una herramienta que puede extraer automáticamente de nuestro servidor SVN.
Nuestra pizarra se ve más o menos así: Tenemos una línea de desarrollo principal en el maletero ===
. Cuando se completa un lanzamiento, lo etiquetamos o
y creamos una rama de mantenimiento ---
para que podamos entregar etiquetas de lanzamiento de corrección de errores o
mientras continúa el desarrollo del tronco.
Foo trunk: o===dev1.0===o====dev1.1===========o====dev1.2==========
Foo 1.0.x maintenance: |---fix1.0.1--o--- |
Foo 1.1.x maintenance: |--fix1.1.1--o---
Bar trunk: o===dev1.0===o====dev1.1===========o====dev1.2==========
Bar 1.0.x maintenance: |---fix1.0.1--o--- |
Bar 1.1.x maintenance: |--fix1.1.1--o---
Xyz trunk: o===dev1.0===o====dev1.1===========o====dev1.2==========
Xyz 1.0.x maintenance: |---fix1.0.1--o--- |
Xyz 1.1.x maintenance: |--fix1.1.1--o---
...
¿Existe alguna herramienta que pueda ayudar a mantener un "póster" similar a este? Tenga en cuenta que quiero hacer esto para varios repositorios en un servidor, no solo para un solo repositorio, y que solo me importan las etiquetas y no los registros individuales.
TikZ es un paquete (La)TeX para dibujar todo tipo de diagramas. Lo uso para la mayoría de mis necesidades de dibujo. Sus características incluyen:
Aquí hay un ejemplo de la primera parte de su diagrama dibujado con TikZ:
Código fuente del diagrama anterior:
\documentclass[tikz,border=2pt]{standalone}
\usetikzlibrary{shapes,positioning,arrows}
\tikzstyle{revision}=[draw,circle,inner sep=2pt]
\tikzstyle{trunkline}=[draw,ultra thick,postaction={draw,thick,color=white}]
\begin{document}
\begin{tikzpicture}[node distance=1cm and 2cm]
\node[minimum width=4cm] (footrunk) {Foo trunk:};
\node[revision,right= of footrunk,right=5mm,fill=gray!60] (rev12345) {};
\node[revision,right= of rev12345] (rev12346) {};
\node[revision,right= of rev12346,right=3cm] (rev12347) {};
\node[revision,right= of rev12347] (rev12348) {};
\node[minimum width=4cm,below= of footrunk,above] (maintenance1) {Foo 1.0.x maintenance};
\node[revision,below=of rev12346,above] (fix10) {};
\node[revision,right=of fix10] (fix101) {};
\node[minimum width=4cm,below= of maintenance1,above] (maintenance2) {Foo 1.1.x maintenance};
\node[revision,node distance=2cm,below=of rev12347,above] (fix11) {};
\node[revision,right=of fix11] (fix111) {};
\draw[trunkline] (rev12345) -- node[font=\scriptsize,fill=white]{dev1.0} (rev12346);
\draw[trunkline] (rev12346) -- node[font=\scriptsize,fill=white]{dev1.1} (rev12347);
\draw[trunkline] (rev12347) -- node[font=\scriptsize,fill=white]{dev1.2} (rev12348);
\draw[very thick,dotted,-stealth'] (rev12348) -- ++(1cm,0);
\draw (rev12346) -- (fix10);
\draw (fix10) -- node[font=\scriptsize,fill=white]{fix1.0.1} (fix101);
\draw[thick,blue,dashed,-stealth'] (fix101) -- (rev12347);
\draw (rev12347) -- (fix11);
\draw (fix11) -- node[font=\scriptsize,fill=white]{fix1.1.1} (fix111);
\end{tikzpicture}
\end{document}
Para automatizar estos diagramas, deberá utilizar las macros del paquete TikZ. Dado que realizar operaciones matemáticas en TikZ sigue siendo una molestia, es aún mejor si pudiera usar otro lenguaje poderoso para editar el tex
archivo, como Perl o Python. Estos también se pueden usar para extraer datos de sus archivos de registro SVN, logrando un proceso completamente automatizado.
Aquí hay un intento de automatizar el diagrama anterior usando TikZ solo con 3 variables de entrada: primeras y últimas revoluciones y número de ramas. Por supuesto, esto funciona solo para esta forma específica de árboles, pero servirá como ejemplo de cómo funcionan las macros.
guion principal
\documentclass[tikz,border=2pt]{standalone}
\usetikzlibrary{shapes,positioning,arrows}
% Macros
\input{svn_macros}
% Configuration
\newcommand\FirstRevNumber{12345}
\newcommand\CurrentRevNumber{12348}
\newcommand\FixCount{2}
% End of configuration
\begin{document}
\begin{tikzpicture}[node distance=1cm and 1.5cm]
\node[minimum width=4cm] (0) {Foo trunk:};
\firstrevision{\FirstRevNumber}{0}
\foreach \rev [count=\counter from 0] in {\FirstRevNumber,...,\CurrentRevNumber}{
\pgfmathtruncatemacro{\NextRev}{\rev+1}
\pgfmathtruncatemacro{\FixNum}{\counter+1}
\revision{\NextRev}{\rev}\mainline{\rev}{\NextRev}{dev1.\counter}
\ifnum\counter<\FixCount
\node[minimum width=4cm,below= of \counter,above] (\FixNum) {Foo 1.\counter.x maintenance};
\newfix[\FixNum]{1\counter}{\NextRev}
\fix{1\counter1}{1\counter}
\branchline{1\counter}{1\counter1}{fix1.\counter.1}
\fi
}
\foreach \rev [count=\counter from 0] in {\FirstRevNumber,...,\CurrentRevNumber}{
\pgfmathtruncatemacro{\SecondNextRev}{\rev+2}
\ifnum\counter<\FixCount
\draw[thick,blue,dashed,-stealth'] (1\counter1) -- (\SecondNextRev);
\fi
}
\end{tikzpicture}
\end{document}
archivo importado
\newcommand\firstrevision[2]{\node[draw,circle,inner sep=2pt,right= of #2,right=5mm,fill=gray!60](#1){};}
\newcommand\revision[2]{\node[draw,circle,inner sep=2pt,right= of #2,right=2cm](#1){};}
\newcommand\newfix[3][1]{\node[draw,circle,node distance=#1cm,inner sep=2pt,below= of #3,above](#2){};\draw (#3) -- (#2);}
\newcommand\fix[2]{\node[draw,circle,inner sep=2pt,right= of #2](#1){};}
\newcommand\mainline[3]{\draw[ultra thick,postaction={draw,thick,color=white}] (#1) -- node[font=\scriptsize,fill=white]{#3} (#2);}
\newcommand\branchline[3]{\draw (#1) -- node[font=\scriptsize,fill=white]{#3} (#2);}
Esto produciría un árbol similar a la figura anterior, pero si aumenta los números en la sección Configuración (12345, 12360 y 8, por ejemplo), podría terminar con un árbol bastante largo:
Resultado
(Haga clic en la imagen para una versión más grande)
Dado que es probable que desee/necesite hacer esto varias veces a la semana y las operaciones de registro de svn a menudo consumen mucho tiempo, sugeriría tener repositorios locales mercurial de los repositorios de SVN (usando hgsubversion ), para acelerar las cosas.
Mercurial también tiene algunas funciones de salida de registro muy sofisticadas (consulte hg help log
y hg help templates
para obtener más detalles), que probablemente podría usar para producir una salida que sería fácilmente modificada en algo como graphviz para generar su gráfico.
izzy
Mawg dice que reincorpore a Monica