Creating A Patch/ru
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
日本語 (ja) │
português (pt) │
русский (ru) │
slovenčina (sk) │
Если вы хотите отправить улучшения в код FPC или Lazarus, вам нужно отправить патч, который разработчики могут легко слить с исходным кодом.
Исключения:
- файлы перевода .po следует отправлять как целые файлы
- новые файлы должны быть отправлены как целые файлы с указанием места их размещения
Требования
Вам нужны версии Lazarus (или FPC) trunk/для разработки. Вы можете получить Lazarus(и FPC), используя SVN или Git.
- SVN: Версия Lazarus для разработчиков. Это родной репозиторий.
- Git: Git mirrors и Lazarus Git-svn. Лазарь зеркалируется в GitHub. Git также может использовать сервер SVN напрямую с помощью ссылки git-svn.
Предупреждение: Если вы отправляете исправления, не создавайте их на основе стабильных версиий Lazarus/FPC. Обычно версия для разработки сильно отличается от стабильной версии, так как разработчики применили множество улучшений и исправлений.
Отличия платформы
В инструкциях ниже предполагается, что вы открыли командную строку и переместились (команда cd) в каталог хранилища. Вот подробности:
Windows
Предполагая, что вы извлекли Lazarus в C:\lazarus, откройте командную строку (cmd.exe) и введите «cd \lazarus».
*nix systems
Предполагая, что вы извлекли Lazarus в ~/lazarus, откройте терминал и наберите "cd ~/lazarus".
Создание патча с использованием SVN
svn diff > mypatch.diff
Это включает в себя все измененные файлы во всем хранилище SVN.
Вы также можете определить отдельные файлы, чтобы убедиться, что туда не попал мусор, например. :
svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff
См.также Разрешение проблем, если у вас имеются проблемы .
Создание патча с помощью Git
Во-первых, разрабатывайте свой код в отдельной ветке!
Пока ваша ветка разработки активна, вы можете создавать патчи всех ваших локальных коммитов:
git format-patch master
Это создает набор исправлений с именами, такими как "0001-CommitMsg.patch", "0002-CommitMsg.patch" и так далее.
Если вы хотите, чтобы все изменения были внесены в один патч, либо объедините коммиты, используя "git rebase -i ...", либо используйте следующую команду:
git format-patch master --stdout > mypatch.patch
Примечание: ветка "master" при использовании ссылки git-svn следует за транком SVN по умолчанию. Однако зеркальный репозиторий в GitHub вместо этого использует ветку "upstream".
Тогда вы должны заменить "master" на "upstream" в выше приведенных командах.Отправка патча
Теперь у вас есть патч. Я бы посоветовал еще раз просмотреть файл, чтобы убедиться, что он выглядит нормально (без неожиданных изменений).
Рекомендуемый способ отправки патча - через bug tracker, подробности см. Как создать отчет об ошибке. Если есть отчет о проблеме, исправляемой вашим патчем, используйте ее, в противном случае создайте новую проблему. Загрузите файл, чтобы прикрепить его к проблеме.
Использование веток Git-репозитория напрямую
Можно использовать Git распределенным образом и для разработки Lazarus. По крайней мере, разработчики JuhaManninen и Alexander Klenin ("Ask") готовы принимать код в Git-репозитории.
На практике хранилище должно быть разветвлено из зеркала Lazarus в GitHub. Код должен быть в отдельной ветке и перебазирован от ветки "upstream". Это еще не проверено, мы можем добавить больше деталей, когда кто-то на самом деле ответвится от репо и создаст код.
Ограничением этой модели является то, что код должен принадлежать к области компетенции разработчиков, работающих с Git. Если код находится за пределами этой области, вы все равно можете использовать Git, но вы должны создавать патчи и отправлять их в bug tracker.
Применение патча
Это объясняет, как применить чей-то патч к вашему локальному репозиторию. Вы можете протестировать патч с помощью переключателя --dry-run следующим образом:
patch --dry-run < somepatch.diff
Вывод патченной программы будет идентичен действительному исправлению, только это не изменит файлы исходного кода. Очень удобно для тестирования, без вероятности испортить ваш исходник.
Патч, созданный с помощью "svn diff"
Для окончательного исправления используйте следующую командную строку:
patch < somepatch.diff
Если это не сработает, потому что макет пути вашей среды выполнения отличается от среды выполнения, в которой было создано исправление, вы можете указать patch'у удалить всю информацию о путях:
patch -p0 < somepatch.diff
Любой инструмент с графическим интерфейсом для diff'ов в Windows также может обрабатывать эти патчи, включая TortoiseMerge.
A patch made with "git format-patch"
Git
Git itself applies the patch like this :
git apply 0001-gitpatch.patch
patch
The "patch" command now supports git format patches with -p1. This is tested with patch v.2.6.1 on Linux, old versions may not support it.
patch -p1 < 0001-gitpatch.patch
"patch" is available for Windows, too, but there are also GUI tools for the job.
TortoiseMerge
TortoiseMerge supports the Git format patch without problems. It is installed together with Tortoise SVN but is not integrated in explorer. It must be opened from the Start menu.
ToDo: add more GUI tools that support Git format patches
Troubleshooting
Finally, patches may have a Unix/Linux line ending (LF) while your local file has Windows (CR+LF) line endings or vice versa. You'll have to convert the patch file before applying on Windows at least, as the supplied patch.exe is picky about line endings.
On Windows, the patch.exe supplied with FPC/Lazarus is very picky; you may have better luck with the patch.exe supplied by Git:
"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff
... or the svn patch command available since SVN 1.7.
See also
- How do I create a bug report general information on submitting bugs, what should be covered in a bug report, and using the bug tracker.
- Tips on writing bug reports detailed information on what should be covered in a bug report.
- Database bug reporting Specific info and sample programs for database bugs
- Moderating the bug tracker