Выявление файлов .patch - PullRequest
0 голосов
/ 10 мая 2011

Вот проблема. Я пишу часть программного обеспечения, которое запрашивает вложения ошибок из системы отслеживания ошибок. Я могу отфильтровать запрос, только получая текстовое вложение (обычный / текстовый и т. Д.), И я хочу сохранить только допустимые файлы исправлений (файлы, которые имеют аналогичный вывод diff -u, который можно применять как исправление к исходному файлу). Поэтому мне нужен способ указать, какое вложение является действительным патчем. Например:

допустим, у меня есть вложение следующего содержания:

Индекс: компилятор / cpp / src / generate / t_csharp_generator.cc

--- компилятор / cpp / src / generate / t_csharp_generator.cc (редакция 1033689) +++ компилятор / cpp / src / generate / t_csharp_generator.cc (рабочая копия) @@ -456,7 +456,7 @@ t = ((t_typedef *) t) -> get_type (); } if ((* m_iter) -> get_value ()! = NULL) { - print_const_value (out, "this." + (* m_iter) -> get_name (), t, (* m_iter) -> get_value (), true, true); + print_const_value (out, "this._" + (* m_iter) -> get_name (), t, (* m_iter) -> get_value (), true, true); } }

Как я могу узнать, что это действительный патч? Есть ли регулярные выражения, чтобы соответствовать некоторым возможным выводам diff -u, чтобы я мог написать что-то вроде этого в Java:

String attachmentContent = ..... если (attachmentContent.matches (регулярное выражение)) ...

Заранее спасибо, Элвис

1 Ответ

0 голосов
/ 28 декабря 2011

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

С другой стороны, у вас не должно быть особых проблем с поиском библиотеки, разбирающей и загружающей патчи Unix (и это определенно не требует больших вычислительных ресурсов),так что простая попытка загрузить патч позволит вам проверить его.Например, Утилиты Java diff должны сделать это прямо.

...