% diff -u something.orig something > something.diff
Этот перевод может быть устаревшим. Для того, чтобы помочь с переводом, пожалуйста, обратитесь к Сервер переводов FreeBSD .
Если вы заметите, что ваш порт устарел по сравнению с последней авторской версией, первым делом вы должны получить самую последнюю версия порта. Вы можете найти их в каталоге ports/ports-current на зеркальных FTP-серверах FreeBSD. Однако если вы работаете с достаточно большим количеством портов, наверное, будет проще использовать Subversion или portsnap(8) для поддержания всей коллекции портов в актуальном состоянии, как это описано в Руководстве . К тому же это даст возможность отслеживать все зависимости портов.
На следующем шаге необходимо выяснить, нет ожидает ли уже это обновление своей очереди. Для этого у вас есть две возможности. Существует интерфейс к
базе данных сообщений о проблемах FreeBSD (PR)
(известной также как
GNATS
) с поисковыми возможностями. Выберите из выпадающего списка
ports
и введите название порта.
Однако иногда люди забывают поместить название порта в поле Synopsis в точном виде. В таком случае вы можете воспользоваться
Системой мониторинга портов FreeBSD
(которая известна также как
portsmon
). В рамках этой системы делается попытка классифицировать PR, касающиеся портов, по имени порта. Для поиска PR, относящихся к определённому порту, используйте механизм
Просмотра по одному порту
.
Если таких отложенных PR не существует, то на следующем этапе следует послать сообщение электронной почты человеку, поддерживающему порт, который выдаётся по команде
make maintainer
. Этот человек может уже работать над обновлением, или иметь причину не обновлять порт прямо сейчас (например, из-за проблем со стабильностью функционирования новой версии); вам нет нужды дублировать их работу. Заметьте, что неподдерживаемые порты перечисляются с адресом сопровождающего
ports@FreeBSD.org
, который является всего лишь адресом общего списка рассылки, так что отправка туда сообщений, скорее всего, в данном случае не поможет.
Если сопровождающий просит вас выполнить обновление, либо сопровождающий отсутствует, то у вас появляется шанс помочь FreeBSD, приготовив обновление самим! Пожалуйста, делайте это с использованием команды diff(1) в основной системе.
Чтобы создать подходящий
diff
для одного патча, скопируйте файл, который нужно пропатчить, в
something.orig
, сохраните ваши изменения в
something
, а затем создайте ваше патч:
% diff -u something.orig something > something.diff
В противном случае, вам следует воспользоваться методом
svn diff
(
Использование Subversion для создания патчей
), либо скопировать содержимое порта в отдельный каталог и применить результат рекурсивной команды
diff(1)
между новым и старым каталогами порта (например, если каталог с модифицированным портом называется
superedit
, а оригинальный, совпадающий с находящимся в нашем дереве портов,
superedit.bak
, то сохраните результат выполнения команды
diff -ruN superedit.bak superedit
). Подойдёт как унифицированный, так и контекстный дифф, однако коммиттеры портов обычно предпочитают унифицированный формат. Отметьте использование опции
-N
-это одобряемый способ заставить diff корректно работать в случае добавления новых файлов или удаления старых. Перед тем, как посылать нам diff-файл, пожалуйста, проверьте его, чтобы убедиться в значимости всех внесённых изменений. (В частности, убедитесь, что вы очистили рабочие каталоги командой
make clean
).
Для упрощения повторяющихся операций с файлами заплаток вы можете воспользоваться скриптом /usr/ports/Tools/scripts/patchtool.py . Перед тем, как его запускать, пожалуйста, прочтите /usr/ports/Tools/scripts/README.patchtool .
Если порт никем не поддерживается, а вы активно его используете, пожалуйста, подумайте над тем, чтобы добровольно стать его сопровождающим. Во FreeBSD имеется более 4000 портов без поддержки, и это как раз та область, где всегда нужны добровольцы. (Детальное описание обязанностей сопровождающего можно найти в разделе Руководства Разработчика .)
Лучше всего послать нам diff-файл, включив его в посылку по команде
send-pr(1)
(категория
ports
). Если вы сопровождаете порт, обязательно поместите текст
[maintainer update]
в начале строки описания и задайте в поле "Class" вашего PR строчку
maintainer-update
. В противном случае в поле "Class" вашего PR должно быть указано
change-request
. Будьте добры, в сообщении отметьте все добавленные или удалённые файлы, так как они будут непосредственно указаны
svn(1)
при выполнении операции коммита. Если diff-файл имеет размер, превышающий 20КБ, сожмите его и обработайте утилитой uuencode; в противном случае просто включите его как есть в PR.
Прежде чем пользоваться send-pr(1) просмотрите раздел о Написании сообщений о проблемах в статье о Сообщениях об ошибках. Он содержит гораздо больше информации о том, как писать полезные сообщения о проблемах.
|
Если обновление вызвано соображениями информационной безопасности или наличием серьёзных ошибок в имеющемся порте, пожалуйста, оповестите Группа Менеджеров Дерева Портов FreeBSD <
portmgr@FreeBSD.org
> о необходимости немедленного перепостроения и повторного распространения пакета данного порта. В противном случае ничего не подозревающие пользователи
|
Теперь, когда вы проделали всё это, прочитайте о том, как поддерживать актуальное состояние, в Актуализация .
По возможности присылайте исправления в формате svn(1) diff. В таком виде их проще использовать по сравнению с разницей между "старым и новым" каталогами. Так проще увидеть изменения и обновить их в случае, если что-нибудь изменилось в Коллекции Портов с тех пор, как вы начали работу, либо если коммиттер просит что-то исправить.
% cd ~/my_wrkdir (1)
% svn co https://svn0.us-west.FreeBSD.org/ports/head/dns/pdnsd (2)
% cd ~/my_wrkdir/pdnsd
| 1 | Это может быть где угодно; место, в котором производится построение портов, не привязано к /usr/ports/ . |
| 2 | svn0.us-west.FreeBSD.org - это общедоступный сервер Subversion. Выберите ближайшее зеркало и проверьте сертификат зеркалирующего сервера на наличие в перечне зеркалирующих сайтов Subversion . |
Находясь в рабочем каталоге, вносите любые изменения, которые обычно делают для порта. При добавлении или удалении файла используйте
svn
для отслеживания этих изменений:
% svn add new_file
% svn remove deleted_file
Убедитесь, что вы проверяете порт в соответствии с рекомендуемым порядком проверки, описанным в
Тестирование порта
и
Проверка вашего порта утилитой
portlint
.
% svn status
% svn update (1)
| 1 | Эта команда попытается выполнить слияние различий между вашим патчем и текущей версией репозитория; внимательно проверьте полученный вывод. Буква перед названием каждого файла означает тип изменения, сделанного с этим файлом. Для получения полного списка смотрите Префиксы файлов для Subversion Update . |
|
U |
Файл обновлен без проблем. |
|
G |
Файл обновлен без проблем (вы увидите это только при работе с удаленным репозиторием). |
|
M |
Файл с локальными изменениями, слияние выполнено без конфликтов. |
|
C |
Файл с локальными изменениями, слияние выполнено с конфликтами. |
Если в результате выполнения
svn update
отображается
C
, то это означает, что что-то изменилось в репозитории Subversion и
svn(1)
не смогла выполнить слияние локальных изменений с полученными из репозитория. В любом случае никогда не помешает просмотреть изменения, поскольку
svn(1)
ничего не знает о том, каким должен быть порт, поэтому эта команда может (и, вероятно, будет) делать слияние тех изменений, которые не имеют смысла.
Последним шагом является создание унифицированного diff(1) для полученных изменений:
% svn diff > ../`basename ${PWD}`.diff
|
Информация о любых удаляемых файлов должна быть явным образом указана в PR, поскольку необходимость в удалении файла для коммиттера может быть неочевидна. |
Присылайте свои патчи в соответствии с руководством, описанном в Обновление отдельного порта .
Если при обновлении порта требуются специальные шаги, такие как изменение файлов конфигурации или запуск специальной программы, то вам следует это задокументировать в файле /usr/ports/UPDATING . Формат записи в этом файле приводится ниже:
YYYYMMDD: AFFECTS: users of portcategory/portname AUTHOR: Your name <Your email address> Special instructions
Если вы включаете точные инструкции portmaster или portupgrade, пожалуйста, убедитесь в правильном экранировании символов внутри командной оболочки.
Файл
/usr/ports/MOVED
содержит записи об удалённых или перемещённых портах. Каждая строка в этом файле состоит из полей: название порта, место, куда он был перемещён, дата и причина перемещения. Если порт был удалён, то поле, указывающее новое место, может оставаться незаполненным. Поля должны разделяться символом
|
(pipe), как это показано ниже:
old name|new name (blank for deleted)|date of move|reason
Дату следует вводить в формате
YYYY-MM-DD
. Новые записи следует добавлять в конец файла в хронологическом порядке.
Если порт был перемещён, но в дальнейшем восстановлен на прежнем месте, удалите в этом файле строку, содержащую информацию о перемещении.
Полученные изменения можно проверить командой
Tools/scripts/MOVEDlint.awk
.
Изменено : 18 февраля 2025 г. by Fernando Apesteguía