SafePatch - альтернатива vQmod
Идея патчей и vQmod совершенно одинаковая. И в одном, и другом случае файл с изменениями накладывается на некую известную основу. И если эта основа изменилась -- и патч, и vQmod могут "поломаться": не смогут внести изменения, если не найдут точного соответствия, необходимого для внесения правок.
Поэтому те, кто наивно полагает, что vQmod спасёт их от всех бед и является волшебной таблеткой и позволит без проблем обновлять версии и ни о чем не беспокоиться - сильно заблуждаются.
А те, кто знает об этом и вынужден хоть так, хоть иначе контролировать логи ошибок -- знают, что заниматься отладкой vQmod гораздо менее удобно, чем иметь изменения сразу на месте, в коде, и не гадать, откуда именно берется исполняемый код и где его искать в исходниках.
К тому же vQmod - рантайм решение. То есть работает при каждом запросе к
серверу. Конечно, многое решается кешированием. Но я из тех разработчиков,
которые не совсем понимают, зачем нужно вводить лишнее звено, если то же самое
делается без дополнительных костылей (а технологии внесения и убирания этих
изменений существуют уже лет 40 и протестированы не одним поколением
программистов -- я говорю об утилитах patch
и diff
).
Причём убрать изменения так же просто, как и наложить патч.
Применить изменения к коду: git apply fix-some-problem.diff
или patch -p1 fix.diff
Убрать изменения: git apply -R fix-some-problem.diff
или patch -R fix.diff
И где здесь сложная часть? Это ничуть не сложнее удаления VQmod файла. При использовании vQmod надо управляться с набором XML файлов. При использовании стандартного подхода -- с набором DIFF файлов. Невелика разница. А преимущества серьёзные.
И вот совсем недавно, в поисках PHP-реализации утилиты patch
или
автоматического конвертера DIFF в vQmod XML, я наткнулся на замечательный
вариант: утилиту SafePatch.
http://code.google.com/p/safepatch/
UPD: в связи с закрытием Google Code проект переместился на Github: progerxp/safepatch.
Если кратко и своими словами -- это "менеджер пакетов" (расширений). Но в
отличие от vQmod (runtime) он эти изменения вносит непосредственно в исходный
код (как и patch
). При этом понимает формат VQmod и может использовать эти
файлы тоже.
Так что те, кто интересуется вопросом - встречайте. По-моему, хороший инструмент. Это не совсем то, что я искал, но отличное готовое решение проблемы.
See also:
- Другая альтернатива vQmod-у (о ней я узнал 2-3 месяца назад, но до сих пор не разбирался и не пользовался): Opencart Override Engine (free) by JNeuhoff
- Обсуждение Override Engine for Opencart на форуме (en)
- Обсуждение Override Engine на русском опенкарт-форуме (ru)
- QuickDiff for PHP, Github -- это библиотека для тех, кто всё же решит парсить диффы и сделать diff-to-vqmod и vqmod-to-diff инструменты.