Просмотр маркеров релиза в логе svn - PullRequest
1 голос
/ 09 апреля 2010

Всякий раз, когда мы делаем релиз проекта, мы создаем тег для захвата снимка. Будет очень полезно узнать, какие ревизии в истории соединительных линий использовались в определенных выпусках. Я знаю, что график ревизий TortoiseSVN показывает эту информацию, но мне интересно, есть ли способ увидеть ее в журнале командной строки svn?

Я пришел из фона Clearcase, где мы сможем увидеть ярлыки релизов в истории.

1 Ответ

4 голосов
/ 09 апреля 2010

Журнал для каталога tags должен включать ревизию, которую он зафиксировал, когда вы делали тег, номера ревизий вашего trunk были бы тогда меньше.

Или я что-то не так понимаю?

Посмотрите на мою библиотеку классов: Представление WebSVN для каталога тегов моей библиотеки классов

Вы можете увидеть ревизию, которой заканчивалась каждая сборка, поскольку это один и тот же репозиторий, номер ревизии для тега на 1 больше максимально возможной ревизии в стволе для изменений, которые были помечены.

Вот как это выглядит с помощью простой команды svn log:

[C:\Temp] :svn log http://svn.vkarlsen.no/svn/LVK/LVK_3_5/tags

-----------------------------------------------------------------------
r751 | lassevk | 2009-10-04 13:45:07 +0200 (sø, 04 okt 2009) | 1 line

Build 750
-----------------------------------------------------------------------
r636 | lassevk | 2009-07-31 07:00:11 +0200 (fr, 31 jul 2009) | 1 line

Build 635
-----------------------------------------------------------------------
r632 | lassevk | 2009-07-25 06:19:27 +0200 (lø, 25 jul 2009) | 1 line

Build 631
-----------------------------------------------------------------------
r614 | lassevk | 2009-07-23 06:18:58 +0200 (to, 23 jul 2009) | 1 line

Build 612

|----|
  ^
  +-- this column here shows the tag commit revision, trunk is less than that

Или с xml:

[C:\Temp] :svn log http://svn.vkarlsen.no:81/svn/LVK/LVK_3_5/tags --xml
<?xml version="1.0"?>
<log>
<logentry
   revision="751">                         <-- this
<author>lassevk</author>
<date>2009-10-04T11:45:07.445750Z</date>
<msg>Build 750</msg>
</logentry>
<logentry
   revision="636">                         <-- and this
<author>lassevk</author>
<date>2009-07-31T05:00:11.796875Z</date>
<msg>Build 635</msg>
</logentry>

Вот скрипт на python, который будет что-то выводить, он не очень хорошо отформатирован, так как он не обрабатывает переводы строк в комментариях ревизии должным образом, но он должен помочь вам.

from xml.dom.minidom import parse;

# files created by:
#   svn log http://svn.vkarlsen.no:81/svn/LVK/LVK_3_5/tags --xml >tags.xml
#   svn log http://svn.vkarlsen.no:81/svn/LVK/LVK_3_5/trunk --xml >trunk.xml

def get_revs(filename):
    log = parse(filename);
    try:
        for rev in log.getElementsByTagName("logentry"):
            revision = int(rev.getAttribute("revision"));
            rev.getElementsByTagName("msg")[0].normalize();
            comment = rev.getElementsByTagName("msg")[0].firstChild.nodeValue.rstrip();
            yield (revision, comment);
    finally:
        log.unlink();

tag_revs = [tr for tr in get_revs("tags.xml")];
trunk_revs = [tr for tr in get_revs("trunk.xml")];
tag_revs.insert(0, (max((tr[0] for tr in trunk_revs)), "HEAD"));

tag_rev_lookup = {};
for tag_rev in tag_revs:
    tag_rev_lookup[tag_rev[0]] = tag_rev[1];

prev_tag = -1;
for trunk_rev in trunk_revs:
    tag_rev_for_trunk_rev = min((tr[0] for tr in tag_revs if tr[0] >= trunk_rev[0]));
    if tag_rev_for_trunk_rev != prev_tag:
        print("tag #%d: %s" % (tag_rev_for_trunk_rev, tag_rev_lookup[tag_rev_for_trunk_rev]));
        prev_tag = tag_rev_for_trunk_rev;
    print("  rev #%d: %s" % trunk_rev);

Это выводит это (усечено):

tag #879: HEAD
  rev #879: Fixed build properties and added FinalBuilder project. Need PostSharp 2 to work properly for x64.
  rev #878: Adjusted property targets.
Fixed references to SQLite for 32 and 64-bit.
  rev #877: Removed 32-bit only SQLite library.
  rev #876: Removed 32-bit only SQLite library.
  rev #875: Removed 32-bit only SQLite library.
  rev #874: Cleaned up dependencies on SQLite.
  rev #873: Removed SQLite connection editor from UI.Windows project.
  rev #872: Added separate projects for SQLite functionality.
  rev #870: Changes to allow code to compile without resource files.
  rev #859: Added Any CPU target.

Я добавил искусственный тег с именем HEAD, чтобы обеспечить наличие всех записей журнала, но вы можете легко удалить его и проигнорировать.

Код здесь: Хранилище WebSVN для приведенного выше примера кода .

Я изменил его для вывода xml, в том же формате, что и исходный svn log --xml, код в хранилище имеет эти изменения, вывод теперь выглядит так:

<?xml version="1.0" ?>
<tags>
  ...
  <tag revision="8">                                         --+
    <logentry revision="8">         --+                        |
      <author>                        |                        |
        lassevk                       |                        |
      </author>                       |                        |
      <date>                          |                        |
        2007-12-08T20:36:18.730377Z   +-- from tags.xml        |
      </date>                         |                        |
      <msg>                           |                        |
        Created folder remotely       |                        |
      </msg>                          |                        |
    </logentry>                     --+                        |
    <revisions>                                                +-- repeated
      <logentry revision="7">       --+                        |   for each
        <author>                      |                        |   tag
          lassevk                     |                        |
        </author>                     |                        |
        <date>                        |                        |
          2007-12-08T20:36:14.324041Z +-- from trunk.xml       |
        </date>                       |   repeated for each    |
        <msg>                         |   revision             |
          Created folder remotely     |                        |
        </msg>                        |                        |
      </logentry>                   --+                        |
    </revisions>                                               |
  </tag>                                                     --+
</tags>

Каждый узел <tag...> имеет одного дочернего элемента <logentry...>, который представляет собой запись журнала тегов из журнала тегов xml, а затем узел <revisions>, где все дочерние элементы являются соответствующими записями журнала из журнала магистрального xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...