Как отфильтровать результаты журнала SVN по подкаталогу репо? - PullRequest
4 голосов
/ 06 июля 2011

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

Вот что у меня есть:

URL моего репо (транк):

http://myserver/svn/repos/myproj/trunk

Я хочу найти только измененные / добавленные файлы в папке БД (или любой подпапке в папке БД) репо:

http://myserver/svn/repos/myproj/trunk/DB

Пока у меня есть это:

svn log -r 300:351 -q -v --xml http://myserver/svn/repos/myproj/trunk/DB

Когда я запускаю это, я получаю файлы в других частях репо, т.е. в папке / trunk / app.

Есть ли способ ограничить результаты или мне нужно выполнить некоторую постобработку?

Ответы [ 3 ]

6 голосов
/ 06 июля 2011

Я беру здесь пунт, основываясь на том, что вы описали.

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

В таком случае вам потребуется пост-обработка XML, чтобы отфильтровать пути, которые вас не интересуют.

Пример: выполнение этой команды ...

svn log -r 300:351 -q -v --xml http://myserver/svn/repos/myproj/trunk/DB

может привести к выводу в соответствии с этим:

<?xml version="1.0"?>
<log>
<logentry
   revision="351">
<author>razlebe</author>
<date>2010-02-25T14:03:57.912308Z</date>
<paths>
<path
   kind=""
   action="D">/myserver/svn/repos/myproj/trunk/AnotherFolder
</path>
<path
   kind=""
   copyfrom-path="/myserver/svn/repos/myproj/trunk/AnotherFolder"
   copyfrom-rev="350"
   action="A">http://myserver/svn/repos/myproj/trunk/DB/AnotherFolder
</path>
<path
   kind=""
   action="D">http://myserver/svn/repos/myproj/SomethingElse</path>
</paths>
</logentry>
</log>

В этом примере вы видите элемент <logentry> для ревизии 351. Эта ревизия включала 3 действия:

  • Удаление папки /myserver/svn/repos/myproj/trunk/AnotherFolder
  • Добавление папки http://myserver/svn/repos/myproj/trunk/DB/AnotherFolder
  • Удаление папки http://myserver/svn/repos/myproj/SomethingElse

Итак, вывод XML включает <logentry> для ревизии 351, потому что эта ревизия повлияла на указанный вами URL. Но поскольку эта ревизия затронула и другие пути, эти пути также описаны в XML.

Другими словами, <logentry> описывает всю ревизию ; не только бит, который влияет на указанный вами URL.

1 голос
/ 06 июля 2011

Когда вы берете подробный журнал определенного каталога в Subversion, и ревизия также изменяет файл, указанный вне этого каталога, этот файл будет указан.

Я верю, что это происходит в вашем случае. То есть в файле или каталоге внутри каталога http://myserver/svn/repos/myproj/trunk/DB есть ревизия, которая также влияет на файл в http://myserver/svn/repos/myproj/trunk/app. Таким образом, ваш файл журнала покажет оба файла, измененные в ревизии.

Одним из соображений дизайна в Subversion было объединение всех изменений в одной ревизии. В некоторых других системах контроля версий, таких как Perforce, это будет считаться набором изменений и является атомарной составляющей изменения. Другими словами, изменение в Subversion - это не одна ревизия файла, а все изменения во всех файлах в одной ревизии.

В определенном смысле, запрашивать только изменения в каталоге DB было бы бессмысленно и вводить в заблуждение. Это потому, что изменение в DB также зависело от изменения в каталоге app.

Как и предполагали другие, вы можете отфильтровать результаты файла XML . (И если вы это сделаете, я настоятельно рекомендую вам использовать программный модуль для этого (например, XML :: Simple , если вы используете Perl) вместо того, чтобы пытаться анализировать его с помощью регулярных выражений.

Однако я рекомендую вам подумать об этом, прежде чем двигаться вперед, так как вы нарушите атомную структуру, которую Subversion использует для отслеживания изменений. Возможно, вы даете ложное представление о происходящих изменениях. Например, если кто-то использует ваш отчет для отмены определенного изменения в каталоге DB, он может также отменить изменение в каталоге app.

0 голосов
/ 06 июля 2011

Я думаю, вам нужно сделать некоторую постобработку. Я пытался получить все изменения в корневом узле только раньше, и мне пришлось опубликовать его. Linq-Xml облегчает работу.

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