Как сохранить исправленное ядро после нового обновления?
Мне пришлось применить пользовательский патч к ядру Drupal 7, и теперь я боюсь, что после переноса нового незначительного обновления он перезапишет мои изменения.
Есть ли у меня какой-либо способ сохранить мои изменения даже после обновления до нового незначительного исправления ядра (в случае, если это исправление не было применено к той версии, до которой я обновляюсь), например, создать исправленную папку или что-то в этом роде и убедиться, что мое ядро остается работоспособным?
2 answers
Обычно вам не следует никогда взламывать ядро Drupal. Однако есть несколько исключений:
- вы применяете патч, загруженный с Drupal.org который был проверен на качество,
- вы применяете исправление, реализованное людьми, которые хорошо знакомы с базой кода Drupal, методами разработки и моделью безопасности,
- вы протестировали исправление с помощью модульных тестов (SimpleTest), включенных в ваше ядро Drupal, и правильно задокументировали измените (например, практикуя надлежащий контроль версий с вашим кодом).
Если вы решите это сделать, вы должны хранить исправления хорошо документированными и в идеале в своем репозитории (например, на один уровень выше уровня Drupal docroot, основной папки Drupal или создать для этого новую папку patches/
).
Затем каждый раз, когда вы обновляете ядро Drupal, вам нужно не забывать снова применять эти исправления (это должно быть частью ваших шагов по обновлению Drupal).
Чтобы автоматизировать это, у вас есть следующее возможности:
-
Использование команды
drush
для обновления вашего ядра (например, как части сценария):drush -y up drupal find . -name "*.patch" -depth 1 -print -exec sh -c "patch -p1 <'{}'" ';'
-
Используя
drush
сделайте, например:-
.make
файл` (см.: Полный пример файла drupal-org.make)api = 2 core = 7.x projects[drupal][patch][] = http://drupal.org/files/issues/992540-3-reset_flood_limit_on_password_reset-drush.patch projects[drupal][patch][] = http://drupal.org/files/issues/object_conversion_menu_router_build-972536-1.patch
-
Файл YAML (см.: примеры/пример.make.yml)
core: "7.x" api: 2 projects: drupal: version: ~ patch: - "https://www.drupal.org/files/issues/add_a_startup-1543858-30.patch"
Если вы не работаете над созданием файлов, вы все равно можете загрузить файлы ядра Drupal в пустую папку, это произойдет автоматически примените файлы исправлений, возможно, подумайте о запуске какого-нибудь модульного теста, а затем замените сгенерированные файлы в свой экземпляр ядра Drupal.
-
-
Обновление и исправление вручную в Drupal docroot:
curl https://ftp.drupal.org/files/projects/drupal-7.4?.tar.gz | tar xvf - --strip-components=1 patch -p1 < add_a_startup-1543858-30.patch
Лучше всего найти какой-нибудь способ реализации вашей функции, который не требует исправления исходного ядра. Вы должны попробовать прочитать - Почему бы нам не взломать ядро?
В любом случае, если вы все еще хотите (или нуждаетесь) поддерживать ядро Drupal с помощью патча, вы можете использовать любой из этих проектов для управления своими патчами.
Этот проект направлен на решение следующих проблем:
- Как мне документировать исправления, которые я применил к проекту?
- Как я могу достоверно узнать, какие исправления применяются или нет, не проверяя вручную каждый из них?
- Как мне напомнить, что мне нужно повторно применить исправление после загрузки обновления модуля?
Инструмент Drush для помощи в управлении исправлениями на Drupal, который помогает с исправлением и обновлением модули.