Difference between revisions of "Creating A Patch/ru"

From Free Pascal wiki
Jump to navigationJump to search
 
(8 intermediate revisions by 3 users not shown)
Line 10: Line 10:
 
== Требования ==
 
== Требования ==
 
Вам нужны версии Lazarus (или FPC) '''trunk/для разработки'''. Вы можете получить Lazarus(и FPC), используя SVN или Git.
 
Вам нужны версии 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.
+
* Git: [[Getting Lazarus#Getting_Lazarus_from_the_GitLab_server|Getting Lazarus development version]]. This is the native repository.
 +
* SVN:
 +
svn checkout --depth files https://github.com/fpc/Lazarus/branches all
 +
cd all
 +
svn update --set-depth infinity main
 +
 
 +
svn checkout --depth files https://github.com/fpc/FPCSource/branches all
 +
cd all
 +
svn update --set-depth infinity main
  
 
{{Warning|'''Если вы отправляете исправления, <u>не</u> создавайте их на основе стабильных версиий Lazarus/FPC. Обычно версия для разработки сильно отличается от стабильной версии, так как разработчики применили множество улучшений и исправлений.'''}}
 
{{Warning|'''Если вы отправляете исправления, <u>не</u> создавайте их на основе стабильных версиий Lazarus/FPC. Обычно версия для разработки сильно отличается от стабильной версии, так как разработчики применили множество улучшений и исправлений.'''}}
Line 44: Line 52:
 
Если вы хотите, чтобы все изменения были внесены в один патч, либо объедините коммиты, используя "git rebase -i ...", либо используйте следующую команду:
 
Если вы хотите, чтобы все изменения были внесены в один патч, либо объедините коммиты, используя "git rebase -i ...", либо используйте следующую команду:
 
<syntaxhighlight lang="bash">git format-patch master --stdout > mypatch.patch</syntaxhighlight>
 
<syntaxhighlight lang="bash">git format-patch master --stdout > mypatch.patch</syntaxhighlight>
 
{{Note| ветка "master" при использовании ссылки git-svn следует за транком SVN по умолчанию.
 
Однако зеркальный репозиторий в GitHub вместо этого использует ветку "upstream".
 
Тогда вы должны заменить "master" на "upstream" в выше приведенных командах.}}
 
  
 
==Отправка патча==
 
==Отправка патча==
Line 54: Line 58:
 
Рекомендуемый способ отправки патча - через [http://bugs.freepascal.org bug tracker], подробности см. [[How_do_I_create_a_bug_report/ru|Как создать отчет об ошибке]]. Если есть отчет о проблеме, исправляемой вашим патчем, используйте ее, в противном случае создайте новую проблему. Загрузите файл, чтобы прикрепить его к проблеме.
 
Рекомендуемый способ отправки патча - через [http://bugs.freepascal.org bug tracker], подробности см. [[How_do_I_create_a_bug_report/ru|Как создать отчет об ошибке]]. Если есть отчет о проблеме, исправляемой вашим патчем, используйте ее, в противном случае создайте новую проблему. Загрузите файл, чтобы прикрепить его к проблеме.
  
==Using a forked Git repository directly==
+
==Использование веток Git-репозитория напрямую==
It is possible to use Git in a distributed manner also for Lazarus development.
+
Можно использовать Git распределенным образом и для разработки Lazarus.
At least developers JuhaManninen and Alexander Klenin ("Ask") are ready to accept code in a Git repository.
+
По крайней мере, разработчики JuhaManninen и Alexander Klenin ("Ask") готовы принимать код в Git-репозитории.
  
In practice the repository must be forked from the Lazarus mirror in GitHub.
+
На практике хранилище должно быть разветвлено из зеркала Lazarus в GitHub.
The code must be in a separate branch and rebased against "upstream" branch.
+
Код должен быть в отдельной ветке и перебазирован от ветки "upstream".
This is not tested yet, we can add more details here when somebody actually forks the repo and creates code.
+
Это еще не проверено, мы можем добавить больше деталей, когда кто-то на самом деле ответвится от репо и создаст код.
  
The limitation of this model is that the code must belong to the area of expertise of the developers working with Git.
+
Ограничением этой модели является то, что код должен принадлежать к области компетенции разработчиков, работающих с Git.
If the code is outside that area, you can still use Git but you must create patches and send them to bug tracker.
+
Если код находится за пределами этой области, вы все равно можете использовать Git, но вы должны создавать патчи и отправлять их в bug tracker.
  
==Applying a patch==
+
==Применение патча==
This explains how to apply somebody else's patch to your local repository. You can test the patch by using the --dry-run toggle switch like this:
+
Это объясняет, как применить чей-то патч к вашему локальному репозиторию. Вы можете протестировать патч с помощью переключателя --dry-run следующим образом:
 
<syntaxhighlight lang="bash">patch --dry-run < somepatch.diff</syntaxhighlight>
 
<syntaxhighlight lang="bash">patch --dry-run < somepatch.diff</syntaxhighlight>
The output of the patch program will be identical to the actual patching, only it does not alter the sourcecode files. Very handy for testing, without the possibility to screw up your source.
+
Вывод патченной программы будет идентичен действительному исправлению, только это не изменит файлы исходного кода. Очень удобно для тестирования, без вероятности испортить ваш исходник.
  
===A patch made with "svn diff"===
+
===Патч, созданный с помощью "svn diff"===
To do the final patching, use the following commandline:
+
Для окончательного исправления используйте следующую командную строку:
 
<syntaxhighlight lang="bash">patch < somepatch.diff</syntaxhighlight>
 
<syntaxhighlight lang="bash">patch < somepatch.diff</syntaxhighlight>
If that doesn't work because the path layout of your environment is different from the environment where the patch was created, you can tell ''patch'' to strip out all path information:
+
Если это не сработает, потому что макет пути вашей среды выполнения отличается от среды выполнения, в которой было создано исправление, вы можете указать ''patch'''у удалить всю информацию о путях:
 
<syntaxhighlight lang="bash">patch -p0 < somepatch.diff</syntaxhighlight>
 
<syntaxhighlight lang="bash">patch -p0 < somepatch.diff</syntaxhighlight>
  
Any GUI tool for diffs on Windows can handle these patches, too, including TortoiseMerge.
+
Любой инструмент с графическим интерфейсом для diff'ов в Windows также может обрабатывать эти патчи, включая TortoiseMerge.
  
===A patch made with "git format-patch"===
+
===Патч, созданный с помощью "git format-patch"===
 
====Git====
 
====Git====
Git itself applies the patch like this :
+
Сам Git применяет патч так:
 
<syntaxhighlight lang="bash">git apply 0001-gitpatch.patch</syntaxhighlight>
 
<syntaxhighlight lang="bash">git apply 0001-gitpatch.patch</syntaxhighlight>
  
 
====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" теперь поддерживает патчи в формате git с параметром -p1. Это проверено с патчем v.2.6.1 в Linux, старые версии могут не поддерживать его.
  
 
<syntaxhighlight lang="bash">patch -p1 < 0001-gitpatch.patch</syntaxhighlight>
 
<syntaxhighlight lang="bash">patch -p1 < 0001-gitpatch.patch</syntaxhighlight>
  
"patch" is available for Windows, too, but there are also GUI tools for the job.
+
"patch" также доступен для Windows, но есть инструменты и для работы с графическим интерфейсом.
  
 
====TortoiseMerge====
 
====TortoiseMerge====
TortoiseMerge supports the Git format patch without problems.
+
TortoiseMerge поддерживает исправление формата Git без проблем.
It is installed together with Tortoise SVN but is not integrated in explorer. It must be opened from the Start menu.
+
Он устанавливается вместе с Tortoise SVN, но не встроен в проводник. Он должен быть открыт из меню «Пуск».
  
ToDo: add more GUI tools that support Git format patches
+
ToDo: добавить больше инструментов с графическим интерфейсом, которые поддерживают патчи формата Git
  
===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.
+
Наконец, патчи могут иметь конец строки Unix/Linux (LF), в то время как ваш локальный файл имеет конец строки Windows (CR+LF) или наоборот. Вам придется преобразовать файл патча перед применением по крайней мере в Windows, так как прилагаемый файл patch.exe требователен к окончанию строки.
  
On Windows, the patch.exe supplied with FPC/Lazarus is very picky; you may have better luck with the patch.exe supplied by Git:
+
В Windows patch.exe, поставляемый с FPC/Lazarus, очень требователен; возможно, вам повезет больше с patch.exe, поставляемым Git:
 
<syntaxhighlight lang="dos">"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff</syntaxhighlight>
 
<syntaxhighlight lang="dos">"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff</syntaxhighlight>
... or the svn patch command available since SVN 1.7.
+
... или команда svn patch, доступная с 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]]
 
  
[[Category:Lazarus]]
+
==См.также==
[[Category:FPC]]
+
* [[How_do_I_create_a_bug_report/ru|Как мне создать отчет об ошибке]] - общая информация о том, как отправлять сообщения об ошибках, что следует освещать в отчете об ошибках и как использовать систему отслеживания ошибок.
 +
* [[Tips on writing bug reports|Советы по написанию отчетов об ошибках]] - подробная информация о том, что следует освещать в отчете об ошибках.
 +
* [[Database bug reporting|Отчет об ошибках базы данных]] - cпециальная информация и примеры программ для ошибок базы данных.
 +
* [[Moderating_the_bug_tracker/ru|Модерирование багтрекера]]

Latest revision as of 00:08, 14 January 2022

Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) português (pt) русский (ru) slovenčina (sk)

Если вы хотите отправить улучшения в код FPC или Lazarus, вам нужно отправить патч, который разработчики могут легко слить с исходным кодом.

Исключения:

  1. файлы перевода .po следует отправлять как целые файлы
  2. новые файлы должны быть отправлены как целые файлы с указанием места их размещения

Требования

Вам нужны версии Lazarus (или FPC) trunk/для разработки. Вы можете получить Lazarus(и FPC), используя SVN или Git.

svn checkout --depth files https://github.com/fpc/Lazarus/branches all
cd all
svn update --set-depth infinity main
svn checkout --depth files https://github.com/fpc/FPCSource/branches all
cd all
svn update --set-depth infinity main
Warning-icon.png

Предупреждение: Если вы отправляете исправления, не создавайте их на основе стабильных версиий 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
Light bulb  Примечание: Если вы используете TortoiseSVN в Windows, вы можете выбрать папку, в которую Lazarus был извлечен в Windows Explorer, а затем щелкнуть правой кнопкой мыши, чтобы выбрать TortoiseSVN-> Create Patch(Создать патч) ...

См.также Разрешение проблем, если у вас имеются проблемы .

Создание патча с помощью Git

Во-первых, разрабатывайте свой код в отдельной ветке!

Пока ваша ветка разработки активна, вы можете создавать патчи всех ваших локальных коммитов:

git format-patch master

Это создает набор исправлений с именами, такими как "0001-CommitMsg.patch", "0002-CommitMsg.patch" и так далее.

Если вы хотите, чтобы все изменения были внесены в один патч, либо объедините коммиты, используя "git rebase -i ...", либо используйте следующую команду:

git format-patch master --stdout > mypatch.patch

Отправка патча

Теперь у вас есть патч. Я бы посоветовал еще раз просмотреть файл, чтобы убедиться, что он выглядит нормально (без неожиданных изменений).

Рекомендуемый способ отправки патча - через 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.

См.также