Как я ищу все изменения файла в репозитории SubVersion?

У меня была эта проблема. См. Python "Сброс Соединения Одноранговым узлом" проблема .

Вы (скорее всего), столкнулись с маленькими проблемами синхронизации на основе Python Глобальная Блокировка Интерпретатора.

можно (иногда) исправлять это с time.sleep(0.01) помещенный стратегически.

, "Где?" Вы спрашиваете. Бьет меня. Идея состоит в том, чтобы обеспечить некоторый лучший параллелизм потока в и вокруг клиентских запросов. Попытайтесь поместить его всего прежде , Вы выполняете запрос так, чтобы GIL был сброшен, и интерпретатор Python может убрать любые незаконченные потоки.

32
задан Tom 13 July 2009 в 07:10
поделиться

6 ответов

Для этого я написал сценарий

Типичное использование:

perl searchrev.pl Import.php setImportStatus

----------------------------------------------------------------------
r19565 | johnf | 2009-06-24 14:33:00 +0100 (Wed, 24 Jun 2009) | 1 line
----------------------------------------------------------------------
line 60 $this->setImportStatus($entity_id, $entity_attr_id);
---------------------------------------------------------------------
r13722 | john | 2008-03-10 17:06:14 +0000 (Mon, 10 Mar 2008) | 1 line
---------------------------------------------------------------------
line 70 $this->setImportStatus($entity_id, $entity_attr_id);
---------------------------------------------------------------------
r11692 | paul | 2007-05-23 10:55:45 +0100 (Wed, 23 May 2007) | 1 line
---------------------------------------------------------------------
Not found
---------------------------------------------------------------------
r11691 | paul | 2007-05-23 10:36:26 +0100 (Wed, 23 May 2007) | 1 line
---------------------------------------------------------------------
Not found
---------------------------------------------------------------------
r11683 | paul | 2007-05-23 09:04:29 +0100 (Wed, 23 May 2007) | 1 line
---------------------------------------------------------------------
Not found

Вот сценарий, который легко взломать для ваших собственных целей

#!/usr/bin/perl -w

my $file=$ARGV[0];
my $pattern=$ARGV[1];

my @history=`svn log $file`;
foreach (@history)
{
    chomp;
    if (m/^r(\d+)/)
    {
        my $revision=$1;
        my $sep='-' x length($_);

        print "$sep\n$_\n$sep\n";

        my @code=`svn cat -r $revision $file`;
        my $lineno=0;
        my $found=0;
        foreach my $line (@code)
        {
            $lineno++;
            if ($line=~m/$pattern/)
            {
                $line=~s/^\s+//;
                print "line $lineno $line";
                 $found=1;
            }
        }

        print "Not found\n" unless ($found);
    }
}
34
ответ дан 27 November 2019 в 20:58
поделиться

As far as I know that's not easily possible. I'd write a small script that retrieves each changeset for the file in question and then grep through the diff for the string. Then it's as simple as printing the current revision number :)

0
ответ дан 27 November 2019 в 20:58
поделиться

With a Subversion 1.6 server and its mod_dav_svn you can specify the revision number via a GET parameter:

http://host/repos/path?r=20

So you can easily wget your files in all revisions and then diff them.

Source: SVN 1.6 changelog

3
ответ дан 27 November 2019 в 20:58
поделиться

Вы можете использовать pySVN + питон инструменты diff для этого, хотя это и не bash, возможно, стоит подумать, если вы используете эту функцию на более регулярной основе. Это версия решения wget , но у него будет более приятный интерфейс, хорошо, если вы его построите :)

0
ответ дан 27 November 2019 в 20:58
поделиться

Команда "аннотировать / обвинить" не делает именно то, что вы хотите, но может помочь:

svn blame - Показать информацию об авторе и редакции в строке для указанные файлы или URL.

 $ svn blame http://svn.red-bean.com/repos/test/readme.txt
 3      sally This is a README file.
 5      harry You should read this.

Итак, вы сможете узнать, кто добавил функцию. Что до того, как узнать, кто удалил функцию, без понятия.

7
ответ дан 27 November 2019 в 20:58
поделиться

Первое, что вы захотите сделать, будет сложно. Обычно я предлагаю использовать svn diff или svn cat, но (насколько я знаю) нет способа получить номер версии в строке вывода кода.

По второму вопросу, если вы ищете конкретный пользователь, вы можете использовать

svn log | grep -A 2 username

, который даст вам две дополнительные строки после каждой совпадающей строки (-A = "after"). Если у вас нет очень длинных сообщений журнала, вы можете использовать

svn log | grep -B 2 search_string

, который аналогично выводит две строки перед (-B) каждой совпадающей строкой. (Надеюсь, этого должно быть достаточно, чтобы дать вам номер ревизии.) Я абсолютно уверен, что с помощью AWK есть лучший способ дать вам номера ревизий в соответствии с сообщениями журнала, но я устал и не могу думать прямо сейчас. : D

1
ответ дан 27 November 2019 в 20:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: