Difference between revisions of "Creating A Patch/ru"
m |
(Deleted English categories) |
||
(19 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{Creating A Patch}} | {{Creating A Patch}} | ||
− | |||
− | |||
− | + | Если вы хотите отправить улучшения в код FPC или Lazarus, вам нужно отправить патч, который разработчики могут легко слить с исходным кодом. | |
+ | Исключения: | ||
+ | # файлы перевода .po следует отправлять как целые файлы | ||
+ | # новые файлы должны быть отправлены как целые файлы с указанием места их размещения | ||
− | ''' | + | __TOC__ |
+ | == Требования == | ||
+ | Вам нужны версии Lazarus (или FPC) '''trunk/для разработки'''. Вы можете получить Lazarus(и FPC), используя SVN или Git. | ||
+ | * SVN: [[Getting_Lazarus/ru#.D0.92.D0.B5.D1.80.D1.81.D0.B8.D1.8F_Lazarus_.D0.B4.D0.BB.D1.8F_.D1.80.D0.B0.D0.B7.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D1.87.D0.B8.D0.BA.D0.BE.D0.B2|Версия Lazarus для разработчиков]]. Это родной репозиторий. | ||
+ | * Git: [[git mirrors | Git mirrors]] и [[Lazarus git-svn | Lazarus Git-svn]]. Лазарь зеркалируется в GitHub. Git также может использовать сервер SVN напрямую с помощью ссылки git-svn. | ||
− | + | {{Warning|'''Если вы отправляете исправления, <u>не</u> создавайте их на основе стабильных версиий Lazarus/FPC. Обычно версия для разработки сильно отличается от стабильной версии, так как разработчики применили множество улучшений и исправлений.'''}} | |
− | |||
− | + | ==Отличия платформы== | |
− | + | В инструкциях ниже предполагается, что вы открыли командную строку и переместились (команда cd) в каталог хранилища. Вот подробности: | |
− | |||
− | + | ===Windows=== | |
+ | Предполагая, что вы извлекли Lazarus в C:\lazarus, откройте командную строку (cmd.exe) и введите «cd \lazarus». | ||
− | + | ===*nix systems=== | |
+ | Предполагая, что вы извлекли Lazarus в ~/lazarus, откройте терминал и наберите "cd ~/lazarus". | ||
− | + | ==Создание патча с использованием SVN== | |
+ | <syntaxhighlight lang="bash">svn diff > mypatch.diff</syntaxhighlight> | ||
+ | Это включает в себя все измененные файлы во всем хранилище SVN. | ||
− | + | Вы также можете определить отдельные файлы, чтобы убедиться, что туда не попал мусор, например. : | |
− | + | <syntaxhighlight lang="bash">svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff</syntaxhighlight> | |
− | |||
− | |||
+ | {{Note| Если вы используете [https://tortoisesvn.net/about.html TortoiseSVN] в Windows, вы можете выбрать папку, в которую Lazarus был извлечен в Windows Explorer, а затем щелкнуть правой кнопкой мыши, чтобы выбрать TortoiseSVN-> Create Patch(Создать патч) ...}} | ||
− | + | См.также [[TortoiseSvn#Troubleshooting|Разрешение проблем]], если у вас имеются проблемы . | |
− | + | ==Создание патча с помощью Git== | |
+ | Во-первых, разрабатывайте свой код в отдельной ветке! | ||
+ | Пока ваша ветка разработки активна, вы можете создавать патчи всех ваших локальных коммитов: | ||
+ | <syntaxhighlight lang="bash">git format-patch master</syntaxhighlight> | ||
+ | Это создает набор исправлений с именами, такими как "0001-CommitMsg.patch", "0002-CommitMsg.patch" и так далее. | ||
− | + | Если вы хотите, чтобы все изменения были внесены в один патч, либо объедините коммиты, используя "git rebase -i ...", либо используйте следующую команду: | |
− | + | <syntaxhighlight lang="bash">git format-patch master --stdout > mypatch.patch</syntaxhighlight> | |
− | |||
− | + | {{Note| ветка "master" при использовании ссылки git-svn следует за транком SVN по умолчанию. | |
− | + | Однако зеркальный репозиторий в GitHub вместо этого использует ветку "upstream". | |
+ | Тогда вы должны заменить "master" на "upstream" в выше приведенных командах.}} | ||
− | == | + | ==Отправка патча== |
− | + | Теперь у вас есть патч. Я бы посоветовал еще раз просмотреть файл, чтобы убедиться, что он выглядит нормально (без неожиданных изменений). | |
+ | Рекомендуемый способ отправки патча - через [http://bugs.freepascal.org bug tracker], подробности см. [[How_do_I_create_a_bug_report/ru|Как создать отчет об ошибке]]. Если есть отчет о проблеме, исправляемой вашим патчем, используйте ее, в противном случае создайте новую проблему. Загрузите файл, чтобы прикрепить его к проблеме. | ||
− | + | ==Использование веток Git-репозитория напрямую== | |
− | + | Можно использовать Git распределенным образом и для разработки Lazarus. | |
+ | По крайней мере, разработчики JuhaManninen и Alexander Klenin ("Ask") готовы принимать код в Git-репозитории. | ||
− | + | На практике хранилище должно быть разветвлено из зеркала Lazarus в GitHub. | |
+ | Код должен быть в отдельной ветке и перебазирован от ветки "upstream". | ||
+ | Это еще не проверено, мы можем добавить больше деталей, когда кто-то на самом деле ответвится от репо и создаст код. | ||
− | + | Ограничением этой модели является то, что код должен принадлежать к области компетенции разработчиков, работающих с Git. | |
+ | Если код находится за пределами этой области, вы все равно можете использовать Git, но вы должны создавать патчи и отправлять их в bug tracker. | ||
+ | ==Применение патча== | ||
+ | Это объясняет, как применить чей-то патч к вашему локальному репозиторию. Вы можете протестировать патч с помощью переключателя --dry-run следующим образом: | ||
+ | <syntaxhighlight lang="bash">patch --dry-run < somepatch.diff</syntaxhighlight> | ||
+ | Вывод патченной программы будет идентичен действительному исправлению, только это не изменит файлы исходного кода. Очень удобно для тестирования, без вероятности испортить ваш исходник. | ||
+ | ===Патч, созданный с помощью "svn diff"=== | ||
+ | Для окончательного исправления используйте следующую командную строку: | ||
+ | <syntaxhighlight lang="bash">patch < somepatch.diff</syntaxhighlight> | ||
+ | Если это не сработает, потому что макет пути вашей среды выполнения отличается от среды выполнения, в которой было создано исправление, вы можете указать ''patch'''у удалить всю информацию о путях: | ||
+ | <syntaxhighlight lang="bash">patch -p0 < somepatch.diff</syntaxhighlight> | ||
− | + | Любой инструмент с графическим интерфейсом для diff'ов в Windows также может обрабатывать эти патчи, включая TortoiseMerge. | |
− | + | ===Патч, созданный с помощью "git format-patch"=== | |
− | + | ====Git==== | |
+ | Сам Git применяет патч так: | ||
+ | <syntaxhighlight lang="bash">git apply 0001-gitpatch.patch</syntaxhighlight> | ||
− | + | ====patch==== | |
+ | Команда "patch" теперь поддерживает патчи в формате git с параметром -p1. Это проверено с патчем v.2.6.1 в Linux, старые версии могут не поддерживать его. | ||
− | + | <syntaxhighlight lang="bash">patch -p1 < 0001-gitpatch.patch</syntaxhighlight> | |
− | |||
− | |||
− | |||
− | + | "patch" также доступен для Windows, но есть инструменты и для работы с графическим интерфейсом. | |
− | |||
− | |||
− | |||
+ | ====TortoiseMerge==== | ||
+ | TortoiseMerge поддерживает исправление формата Git без проблем. | ||
+ | Он устанавливается вместе с Tortoise SVN, но не встроен в проводник. Он должен быть открыт из меню «Пуск». | ||
− | + | ToDo: добавить больше инструментов с графическим интерфейсом, которые поддерживают патчи формата Git | |
− | + | ===Устранение неполадок=== | |
+ | Наконец, патчи могут иметь конец строки Unix/Linux (LF), в то время как ваш локальный файл имеет конец строки Windows (CR+LF) или наоборот. Вам придется преобразовать файл патча перед применением по крайней мере в Windows, так как прилагаемый файл patch.exe требователен к окончанию строки. | ||
− | + | В Windows patch.exe, поставляемый с FPC/Lazarus, очень требователен; возможно, вам повезет больше с patch.exe, поставляемым Git: | |
+ | <syntaxhighlight lang="dos">"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff</syntaxhighlight> | ||
+ | ... или команда svn patch, доступная с SVN 1.7. | ||
− | + | ==См.также== | |
+ | * [[How_do_I_create_a_bug_report/ru|Как мне создать отчет об ошибке]] - общая информация о том, как отправлять сообщения об ошибках, что следует освещать в отчете об ошибках и как использовать систему отслеживания ошибок. | ||
+ | * [[Tips on writing bug reports|Советы по написанию отчетов об ошибках]] - подробная информация о том, что следует освещать в отчете об ошибках. | ||
+ | * [[Database bug reporting|Отчет об ошибках базы данных]] - cпециальная информация и примеры программ для ошибок базы данных. | ||
+ | * [[Moderating_the_bug_tracker/ru|Модерирование багтрекера]] |
Revision as of 21:54, 23 May 2020
│
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.
Патч, созданный с помощью "git format-patch"
Git
Сам Git применяет патч так:
git apply 0001-gitpatch.patch
patch
Команда "patch" теперь поддерживает патчи в формате git с параметром -p1. Это проверено с патчем v.2.6.1 в Linux, старые версии могут не поддерживать его.
patch -p1 < 0001-gitpatch.patch
"patch" также доступен для Windows, но есть инструменты и для работы с графическим интерфейсом.
TortoiseMerge
TortoiseMerge поддерживает исправление формата Git без проблем. Он устанавливается вместе с Tortoise SVN, но не встроен в проводник. Он должен быть открыт из меню «Пуск».
ToDo: добавить больше инструментов с графическим интерфейсом, которые поддерживают патчи формата Git
Устранение неполадок
Наконец, патчи могут иметь конец строки Unix/Linux (LF), в то время как ваш локальный файл имеет конец строки Windows (CR+LF) или наоборот. Вам придется преобразовать файл патча перед применением по крайней мере в Windows, так как прилагаемый файл patch.exe требователен к окончанию строки.
В Windows patch.exe, поставляемый с FPC/Lazarus, очень требователен; возможно, вам повезет больше с patch.exe, поставляемым Git:
"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff
... или команда svn patch, доступная с SVN 1.7.
См.также
- Как мне создать отчет об ошибке - общая информация о том, как отправлять сообщения об ошибках, что следует освещать в отчете об ошибках и как использовать систему отслеживания ошибок.
- Советы по написанию отчетов об ошибках - подробная информация о том, что следует освещать в отчете об ошибках.
- Отчет об ошибках базы данных - cпециальная информация и примеры программ для ошибок базы данных.
- Модерирование багтрекера