как обнаружить измененные свойства, используя журнал SVN - PullRequest
11 голосов
/ 09 февраля 2010

Справочная информация: написание сценария автоматического выпуска для экспорта измененных файлов между версиями из SVN и загрузки на удаленный сервер.

Команда svn log показывает измененные свойства файлов и , но, похоже, не различает подробный вывод между модификацией содержимого и модификациями свойства.

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

Вот мой пример cmd:

#: svn log "someurl" -r 2210:HEAD -v -q

Output:
------------------------------------------------------------------------
r2211 | author | 2010-02-08 12:36:56 +1300 (Mon, 08 Feb 2010)
Changed paths:
   M /branches/project/release-v1-r-maintenance
   M /branches/project/release-v1-r-maintenance/offroot/
   M /branches/project/release-v1-r-maintenance/offroot/test.config
------------------------------------------------------------------------

Два верхних элемента - это только изменения в подпорках (mergeinfo, ignores и т. Д.), Тогда как третий элемент - это реальное редактирование контента, и это реальный элемент, который я хочу получить, чтобы избежать экспорта всего корня повсюду.

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

Ответы [ 5 ]

4 голосов
/ 01 февраля 2011

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

#!/bin/bash
# Show the verbose log of the revisions, where svn properties 
# inside the current folder where added/removed
startrev=4600
endrev=4620
for i in $(eval echo {$startrev..$endrev})
  do
    svn diff -c $i 2>/dev/null | grep "Property changes on" 1>/dev/null
    if [ $? == 0 ]; then
      echo "Property change in revision $i:"
      svn log -r $i --verbose
    fi
done
3 голосов
/ 18 августа 2010

Кстати, я разместил bash-скрипт на Как заставить 'svn log' игнорировать изменения свойств? , который реализует то, на что намекал jeroenh ... обработка вывода журнала svn для управления svn diff фильтрация на выходе последнего.

1 голос
/ 01 апреля 2011

Я знаю, что на этот вопрос был дан ответ, но в случае, если кому-то понадобится небольшое руководство, я написал в этом посте о как получить запрашиваемые данные из svn log / diff (включая скрипты bash, xslt и сценарии базы данных оракула). Это позволяет вам запускать всевозможные полезные запросы к представлению v_svnlog

"горячих" файлов в этом патче:

select path, count(*) num from v_svnlog
group by path
order by num desc, path asc

большинство тестов автора

select author, count(*) num from v_svnlog
where path like '%Test%'
group by author
order by num desc

и так далее ...

1 голос
/ 09 февраля 2010

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

Вот так выглядит запись diff для файла только с измененными свойствами:

c:\test\wc>svn diff -c 3

Property changes on: test.txt
___________________________________________________________________
Added: test
   + test

Вот так выглядит запись diff для файла с измененным содержимым И измененными свойствами:

c:\test\wc>svn diff -c 4
Index: test.txt
===================================================================
--- test.txt    (revision 3)
+++ test.txt    (revision 4)
@@ -1 +1,2 @@

+asdfads

Property changes on: test.txt
___________________________________________________________________
Added: someproperty
   + somepropertyvalue
0 голосов
/ 09 февраля 2010

Это работает?

svn log --xml --with-no-revprops
...