Difference between revisions of "Creating A Patch/ru"

From Free Pascal wiki
Jump to navigationJump to search
(New page: ==Instructions== Предполагается, что Вы используете SVN версию Lazarus-а. Как получить Lazarus через SVN ...)
 
(Deleted English categories)
(28 intermediate revisions by 4 users not shown)
Line 1: Line 1:
==Instructions==
+
{{Creating A Patch}}
Предполагается, что Вы используете SVN версию Lazarus-а. [[Getting Lazarus#Via SVN| Как получить Lazarus через SVN]]
 
  
'''Для Windows:'''
+
Если вы хотите отправить улучшения в код FPC или Lazarus, вам нужно отправить патч, который разработчики могут легко слить с исходным кодом.
  
Откройте командную строку (Пуск->Выполнить->cmd)
+
Исключения:
Предположим, что рабочая версия Лазаруса у находится в C:\lazarus (если Лазарус находится в другой папке, вам следует указать нужную в команде 'cd')
+
# файлы перевода .po следует отправлять как целые файлы
 +
# новые файлы должны быть отправлены как целые файлы с указанием места их размещения
  
вводите следующие команды
+
__TOC__
cd c:\lazarus
+
== Требования ==
svn diff > mypatch.diff
+
Вам нужны версии 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.
  
''Заметка: Используя TortoiseSVN, Вы можете создать патч, используя контекстное меню Windows Explorer-a. Нажмите правой кнопокой на иконку папки, где находится рабочая версия Лазаруса, и выбирете в меню: TortoiseSVN->Create Patch...''
+
{{Warning|'''Если вы отправляете исправления, <u>не</u> создавайте их на основе стабильных версиий Lazarus/FPC. Обычно версия для разработки сильно отличается от стабильной версии, так как разработчики применили множество улучшений и исправлений.'''}}
  
'''Для  Linux/BSD/MacOSX и т.п.:'''
+
==Отличия платформы==
 +
В инструкциях ниже предполагается, что вы открыли командную строку и переместились (команда cd) в каталог хранилища. Вот подробности:
  
Предположим  что Лазарус находится в директории: $HOME/lazarus
+
===Windows===
 +
Предполагая, что вы извлекли Lazarus в C:\lazarus, откройте командную строку (cmd.exe) и введите «cd \lazarus».
  
откройте любую используюмую программу терминала:
+
===*nix systems===
введите следующие команды:
+
Предполагая, что вы извлекли Lazarus в ~/lazarus, откройте терминал и наберите "cd ~/lazarus".
  cd $HOME/lazarus  
 
  svn diff > mypatch.diff
 
  
 +
==Создание патча с использованием SVN==
 +
<syntaxhighlight lang="bash">svn diff > mypatch.diff</syntaxhighlight>
 +
Это включает в себя все измененные файлы во всем хранилище SVN.
  
В обоих случаях (Windows/*nix), по окончанию работы команды svn diff патч, будет записан в файле mypatch.diff (Если файл mypatch.diff существовал до запуска команды, то он будет перезаписан!)
+
Вы также можете определить отдельные файлы, чтобы убедиться, что туда не попал мусор, например. :
 +
<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|Разрешение проблем]], если у вас имеются проблемы .
  
Лучше всего отправлять патчи, через [http://bugs.freepascal.org баг трекер].
+
==Создание патча с помощью Git==
Если Вы предоставляете патч, к уже известной ошибке, то Вам следует приложить патч, к соответствующему сообщению (bug issue). Если Ваш патч, исправляет ошибку, которой о которой ещё не сообщено, Вам следует создать новое сообщение об ошибке.
+
Во-первых, разрабатывайте свой код в отдельной ветке!
Баг трекер позволит отслеживать, принят патч или нет.
 
  
Вы так же можете отправить патч на почтовую рассылку. Предварительно запакуйте файл (размер не должен превышать 40 килобайт), с помощью zip или gzip (не используйте другие архиваторы).
+
Пока ваша ветка разработки активна, вы можете создавать патчи всех ваших локальных коммитов:
Вы также можете послать по этому адресу [mailto:patch@lazarus.dommelstein.net patch@lazarus.dommelstein.net]. Убедитесь, что в subject-e письма указано хотя бы слово patch, иначе письмо может быть отрезано спам-фильтром.
+
<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, вам нужно отправить патч, который разработчики могут легко слить с исходным кодом.

Исключения:

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

Требования

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

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

Light bulb  Примечание: ветка "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.

См.также