|
|
|
|
|
|
Всякое |
Drupal. Применение файлов patch для устранения ошибок.Небольшая памятка по применению файлов *.patch для исправления ошибок в Друпале. Чисто чтоб самому не забыть. Обычно какие-то исправления получаешь с новой версией модуля. Но случается разработчики не вносят исправления в официальный релиз сразу или вообще. Или исправления делаются не разработчиком. В этом случае нужные исправления можно получить в виде файла с именем kakoe-to-tam-imia.patch Команда patchФайл представляет из себя результат работы unix-команды diff, которая вычисляет разницу между двумя файлами. Разница записывается в простой текстовый файл,который может быть трех несколько разных форматов, но для друпал рекомендуется так называемый унифицированный. Применение патча заключается помещением его в дерево каталогов Drupal в то место, где он был создан и запуск его из корня сайта командой: patch < file.patch либо запуск его из папки где он создавался командой (сама программа patch при этом запускается из корня дерева Drupal): patch -p0 < path/file.patch Разработчики Drupal рекомендуют создавать патчи только в корне дерева Drupal, но кто бы их слушал. Определить, в каком каталоге создали патч можно открыв его в простом текстовом редакторе. Если в строке начинающейся с трех минусов вы видите знакомое sites/all/modules/.., значит все в порядке - кладите его в корень сайта и отдавайте рекомендуемую команду. Если только имя файла, значит надо класть патч в папку того модуля файл которого исправляется. Можно встретить и соломоново решение - патч содержит кусок пути от корня пакета до файла во внутренней папке. Например первый попавшийся мне патч на модуль image_attach содержал такую строчку. --- contrib/image_attach/image_attach.module Т.е. был сделан в папке модуля image для его субмодуля image_attach. Дополнительной сложностью для веб-мастеров, работающих под Windows будет то, что команды diff и patch в этой ОС отсутствуют. Если у вас нет доступа к командной строке сервера, то придется обзаводиться Windows-версией команды patch. Если после применения заплатки появились какие-то проблемы в работе движка, то можно откатиться назад используя команду: patch -p0 -R < path/file.patch или patch -R < file.patch в зависимости от того, какой командой вы патчили изначально. Хотя на мой взгляд проще сохранить все файлы исходных кодов модуля, а потом просто вернуть их на место заменив пропатченные файлы. Ведь ошибка может произойти из-за некорректной работы программы patch, в этом случае шансы на удачный откат так же становятся зыбкими. Ручное редактирование файлов с кодом.А если у вас нет желания или возможности ставить Unix-утилиты, или patch-файл невелик по объему его можно применить вручную. Контекстный формат патчей достаточно прост и нагляден. После заголовка с именами файлов, патч состоит из контекстных блоков. Заголовок каждого блока начинается с @@ и заканчивается на @@. Первой цифрой после "двойной собаки" идет номер строки исходного файла, где начинается данный блок. В конце также может быть указано имя функции, к которой относится данный блок. Далее идут строки контекста исходного файла, строки добавляемые и строки удаляемые. Строки, начинающиеся с пробела представляют собой неизменяемые строки исходного файла и нужны для того, чтобы однозначно найти требуемое место, даже если номера строк неверны. Трогать их не надо. Строки начинающиеся со знака "минус" (-) требуется удалить из исходного файла. Строки начинающиеся со знака "плюс" (+), соответственно добавить. Только не забывайте скопировав добавляемое в файл удалить с первых позиций все плюсы. Все очень просто, но нудно и требует некоторой внимательности. ПримечанияНекоторые ошибкиИногда происходит зацикливание выполнения команды patch, остановить которое можно только нажав Ctrl+C. Вывод при этом выглядит так: Связана эта ошибка с различиями символов конца строк в Unix (откуда эти патчи обычно родом ) и Windows (где мы их имеем несчастье применять). Чтобы избавится от этой проблемы требуется открыть файл в текстовом редакторе и пересохранить его выставив переводы строк в формате Windows. После этого повторить команду patch. Другая ошибка patching file `filename.ext' Assertion failed: hunk, file patch.c, line 321 abnormal program termination Диагноз тот же: Unix-окончания строк. Перед выполнением команды надо пересохранить файл патча в Windows-формате. Справка по опциям команды patchInput options: -p NUM --strip=NUM Strip NUM leading components from file names. -c --context Interpret the patch as a context difference. -N --forward Ignore patches that appear to be reversed or already applied. -i PATCHFILE --input=PATCHFILE Read patch from PATCHFILE instead of stdin. Output options: -o FILE --output=FILE Output patched files to FILE. -D NAME --ifdef=NAME Make merged if-then-else output using NAME. -Z --set-utc Set times of patched files, assuming diff uses UTC (GMT). Backup and version control options: -b --backup Back up the original contents of each file. -V STYLE --version-control=STYLE Use STYLE version control. -g NUM --get=NUM Get files from RCS or SCCS if positive; ask if negative. Miscellaneous options: -t --batch Ask no questions; skip bad-Prereq patches; assume reversed. -d DIR --directory=DIR Change the working directory to DIR first. -v --version Output version info. Report bugs to Источники на сайте Drupal: |
|
Direqtor Home Page by ASIADATA. |
|
Отправить комментарий