2016-03-13 5 views
0

Я недавно обновил ruby ​​с 1.8.7.374 до 2.1.2p95, и у меня есть скрипт post-commit svn, который работает нормально, но теперь он терпит неудачу.Ошибка синтаксиса Ruby, неожиданный ':', ожидающий keyword_then

changes=`#{svnlook} diff #{repo} -r #{rev}` 
body << "<pre>" 
changes.each do |top_line| 
top_line.split("\n").each do |line| 
color = case 
    when line =~ /^Modified:/|| line =~ /^=+$/ || line =~ /^@@ /: 'gray' 
    when line =~ /^-/ 'red:' 
    when line =~ /^\+/ 'blue:' 
    else "black" 
    end 
    body << %Q{<font style="color:#{color}">#{CGI.escapeHTML(line)}</font> <br/>\n} 
    end 
    end 
    body << "</pre>" 

Вот ошибки я получаю:

[[email protected] hooks]# ruby -c post-commit 
post-commit:66: syntax error, unexpected ':', expecting keyword_then or  ',' or ';' or '\n' 
...ne =~ /^=+$/ || line =~ /^@@ /: 'gray' 
...        ^
post-commit:67: syntax error, unexpected keyword_when, expecting keyword_end 
    when line =~ /^-/ 'red:' 
    ^
post-commit:67: syntax error, unexpected tSTRING_BEG, expecting  keyword_end 
     when line =~ /^-/ 'red:' 
        ^
post-commit:68: syntax error, unexpected keyword_when, expecting  keyword_end 
     when line =~ /^\+/ 'blue:' 
    ^
post-commit:68: syntax error, unexpected tSTRING_BEG, expecting  keyword_end 
     when line =~ /^\+/ 'blue:' 
        ^
post-commit:69: syntax error, unexpected keyword_else, expecting  keyword_end 
     else "black" 
    ^
post-commit:65: warning: assigned but unused variable - color 
post-commit:18: warning: assigned but unused variable - saddress 
post-commit:20: warning: assigned but unused variable - sendmail 
post-commit:73: syntax error, unexpected keyword_end, expecting end-of- input 

Любая помощь в решении этого очень ценится.

+2

Ошибка в строке: 'когда line = ~/^ Изменено:/|| line = ~/^ = + $/|| line = ~/^ @@ /: 'gray'', как упоминалось в сообщении об ошибке. Просто удалите ':' после '/^@@ /'. –

+0

Спасибо, Атул! Это сработало. – cparfon

+0

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

ответ

1

Поскольку выражения Ruby 1.9, case больше не позволяют ободочной кишке (см. this answer).

Чтобы это исправить, изменить код

color = case 
when line =~ /^Modified:/|| line =~ /^=+$/ || line =~ /^@@/
    'gray' 
when line =~ /^-/ 
    'red:' 
when line =~ /^\+/ 
    'blue:' 
else 
    "black" 
end 
+0

Двоеточие не разрешалось. Он был добавлен в парсер в качестве экспериментальной функции, но он никогда не был официально задокументирован, и на самом деле matz неоднократно заявлял, что при любых обстоятельствах он используется только случайно и * не должен *, потому что он просто не является частью язык Ruby. –

+0

Это интересная битка знаний, спасибо! – DMKE

0

Ошибка в строке: when line =~ /^Modified:/|| line =~ /^=+$/ || line =~ /^@@ /: 'gray', как уже упоминалось сообщение об ошибке. Просто удалите : после /^@@ /.

Смежные вопросы