Моя команда использует пять отдельных репозиториев SVN для пяти различных модулей или приложений, которые мы поддерживаем. Каждый из них имеет свою собственную последовательность версий.
Нам нравится иметь «настенный плакат» о текущем состоянии наших репозиториев с их ветками. В настоящее время мы используем для этого доску, и она работает достаточно хорошо. Но мне интересно , существует ли инструмент, который может помочь нам в этом? Меня бы устроило обновление документа вручную (Visio или что-то еще), но, конечно, бонусные баллы за инструмент, который может автоматически извлекать данные с нашего сервера SVN.
Наша доска выглядит примерно так: У нас в багажнике основная линия разработки ===
. Когда выпуск завершен, мы помечаем его o
и создаем ветку обслуживания ---
, чтобы мы могли доставлять теги выпуска с исправлениями ошибок o
, пока продолжается разработка ствола.
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---
...
Есть ли инструмент, который мог бы помочь поддерживать «плакат», похожий на этот? Обратите внимание, что я хочу сделать это для нескольких репозиториев на сервере, а не только для одного репо, и что меня интересуют только теги , а не отдельные проверки.
TikZ — это пакет (La)TeX для рисования всевозможных диаграмм. Я использую его для большинства моих нужд рисования. Его особенности включают в себя:
Вот пример первой части вашей диаграммы, нарисованной с помощью TikZ:
Исходный код для приведенной выше диаграммы:
\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}
Чтобы автоматизировать эти диаграммы, вам придется использовать макросы в пакете TikZ. Поскольку выполнение математических операций в TikZ по-прежнему является проблемой, было бы еще лучше, если бы вы могли использовать другой мощный язык для редактирования tex
файла, например Perl или Python. Их также можно использовать для извлечения данных из ваших файлов журналов SVN, обеспечивая полностью автоматизированный процесс.
Вот попытка автоматизировать приведенную выше диаграмму, используя только TikZ с 3 входными переменными: первый и последний обороты и количество ветвей. Конечно, это работает только для этой конкретной формы деревьев, но это послужит примером того, как работают макросы.
основной сценарий
\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}
импортированный файл
\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);}
Это создаст дерево, похожее на рисунок выше, но если вы увеличите числа в разделе « Конфигурация » (например, 12345, 12360 и 8), вы можете получить довольно длинное дерево:
Результат
(Нажмите на изображение для увеличения)
Поскольку вы, вероятно, захотите/должны делать это несколько раз в неделю, а операции с журналами svn часто занимают много времени, я бы предложил использовать mercurial локальные репозитории репозиториев SVN (используя hgsubversion ), чтобы ускорить процесс.
Mercurial также имеет несколько очень сложных средств вывода журнала (см. hg help log
и hg help templates
для получения дополнительной информации), которые вы, вероятно, могли бы использовать для создания вывода, который можно было бы легко преобразовать во что-то вроде graphviz , чтобы получить свой график.
Иззи
Мог говорит восстановить Монику