Проверьте исправление diff перед его применением - PullRequest
0 голосов
/ 27 января 2012

Я ищу библиотеку diff, которая является переносимой (No Pear, нет расширений php, которые не поддерживаются широко - например, xdiff), которые позволили бы мне сделать патч для механизма обновления.Файл diff, который я использую, использует формат unified .

Я обнаружил, что class.simplediff.php действительно хорош, даже если он не поддерживает файл из коробки, это просто вопрос загрузки файла в строку)

Но проблема в том, что я не могу найти способ проверки, если все замены могут быть успешно обработаны или нет.

Знаете ли вы библиотеку, которая позволяет проверять исправления diff до ее применения, или вы знаете, как это сделать?

Ответы [ 2 ]

0 голосов
/ 31 января 2012

Я перевел код patch.c на PHP:

https://gist.github.com/1707075

Сам код patch.c немного запутан, как и код PHP. Проверка работоспособности работает, но она не настолько «безопасна», как мне бы хотелось - вот почему я не ищу ответ, но, возможно, он поможет кому-то еще.

Edit:

Я что-то закодировал. Я пока не уверен, насколько он надежен на 100%, но результаты пока хороши с точки зрения «проверки только для чтения, чтобы убедиться, что патч будет успешно применен»:

Надеюсь, это кому-нибудь поможет:)

0 голосов
/ 27 января 2012

Я не могу придумать, как вы можете определить, работает ли патч - логически, то есть.Однако, если ваш источник исправлений считается «безопасным», вы можете проверить, является ли он хотя бы допустимым синтаксисом, выполнив следующие действия:

  1. copy файл, который должен бытьpatched
  2. применить patch
  3. попытка выполнить файл с помощью PHP cli (например, php file.php)

Если шаг 3 не выбрасываетфатальное исключение, тогда патч, вероятно, привел к правильному синтаксису PHP.

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

...