Как отключить предупреждения Perl для svnnotify? - PullRequest
1 голос
/ 11 октября 2009

Я использую svnnotify. Он работает (отправляет электронную почту и все такое), но всегда выводит некоторые сообщения об ошибках, такие как

Use of uninitialized value in substr at /usr/lib/perl5/site_perl/5.8.8/SVN/Notify.pm line 1313.
substr outside of string at /usr/lib/perl5/site\_perl/5.8.8/SVN/Notify.pm line 1313.
Use of uninitialized value in index at /usr/lib/perl5/site\_perl/5.8.8/SVN/Notify.pm line 1313.
Use of uninitialized value in concatenation (.) or string at /usr/lib/perl5/site\_perl/5.8.8/SVN/Notify.pm line 1314.

Я пытался запустить его с > /dev/null, но не повезло. Я попытался запустить его > bla, и файл bla появляется пустым, а вывод отображается на экране. Поскольку svnnotify не имеет тихого переключателя, как я могу это сделать?

Ответы [ 3 ]

8 голосов
/ 11 октября 2009

Похоже, это происходит, когда нет сообщения журнала для фиксации. Некоторым пользователям может потребоваться сеанс LART, чтобы это исправить. За исключением этого, правильнее всего исправить модуль SVN :: Notify и отправить исправление в очередь SVN :: Notify RT , но уже слишком поздно, я уже подал билет .

Вот патч:

diff --git a/lib/SVN/Notify.pm b/lib/SVN/Notify.pm
index 3f3672b..5387dd2 100644
--- a/lib/SVN/Notify.pm
+++ b/lib/SVN/Notify.pm
@@ -1308,7 +1308,7 @@ sub prepare_subject {
     }

     # Add the first sentence/line from the log message.
-    unless ($self->{no\_first\_line}) {
+    if (!$self->{no\_first\_line} and defined $self->{message}[0] and length $self->{message}[0] )
         # Truncate to first period after a minimum of 10 characters.
         my $i = index substr($self->{message}[0], 10), '. ';
         $self->{subject} .= $i > 0

Я думаю, что это заботится о предупреждениях, но я подозреваю, что это всего лишь лейкопластырь, потому что дизайн вокруг $self->{no\_first\_line} кажется хитрым.

2 голосов
/ 11 октября 2009

Хотя принятый ответ, безусловно, работает, это (на мой взгляд) не лучший ответ, потому что однажды вам придется поддерживать этот код (или, что еще хуже, кто-то другой), и заставить его работать без предупреждений сделает ваш код намного лучше. Учитывая предупреждения, похоже, что проблема не в вас, но трудно (но не невозможно) представить, что модуль в версии 2.79 будет выдавать ошибки. Может быть, ваша копия SVN :: Notify старая? Может быть, ваш код (или чей-то код) смешивается с внутренностями модуля? Трудно сказать с несколькими предупреждениями, которые я вижу, и у меня есть ощущение, что эта проблема немного больше, чем кажется на первый взгляд.

0 голосов
/ 11 октября 2009

Ошибка печатается на stderr , вы можете перенаправить ее на /dev/null с помощью 2> /dev/null. В качестве альтернативы вы можете сделать это не использовать perl -w.

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