Как сохранить исправленное ядро после нового обновления?


Мне пришлось применить пользовательский патч к ядру Drupal 7, и теперь я боюсь, что после переноса нового незначительного обновления он перезапишет мои изменения.

Есть ли у меня какой-либо способ сохранить мои изменения даже после обновления до нового незначительного исправления ядра (в случае, если это исправление не было применено к той версии, до которой я обновляюсь), например, создать исправленную папку или что-то в этом роде и убедиться, что мое ядро остается работоспособным?

Author: kenorb, 2016-01-15

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
    
 4
Author: kenorb, 2016-01-16 14:25:55

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

В любом случае, если вы все еще хотите (или нуждаетесь) поддерживать ядро Drupal с помощью патча, вы можете использовать любой из этих проектов для управления своими патчами.

Этот проект направлен на решение следующих проблем:

  • Как мне документировать исправления, которые я применил к проекту?
  • Как я могу достоверно узнать, какие исправления применяются или нет, не проверяя вручную каждый из них?
  • Как мне напомнить, что мне нужно повторно применить исправление после загрузки обновления модуля?

Инструмент Drush для помощи в управлении исправлениями на Drupal, который помогает с исправлением и обновлением модули.

 3
Author: itsdarrylnorris, 2017-04-13 12:47:02