Difference between revisions of "Creating A Patch/ru"

From Free Pascal wiki
Jump to navigationJump to search
(Deleted English categories)
(16 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
{{Creating A Patch}}
 
{{Creating A Patch}}
__TOC__
 
==Инструкции по созданию патча==
 
  
Предполагается, что Вы используете SVN версию Lazarus-а. [[Getting Lazarus#Via SVN| Как получить Lazarus через SVN]]
+
Если вы хотите отправить улучшения в код FPC или Lazarus, вам нужно отправить патч, который разработчики могут легко слить с исходным кодом.
  
 +
Исключения:
 +
# файлы перевода .po следует отправлять как целые файлы
 +
# новые файлы должны быть отправлены как целые файлы с указанием места их размещения
  
'''Для Windows:'''
+
__TOC__
 
+
== Требования ==
Откройте командную строку (Пуск->Выполнить->cmd)
+
Вам нужны версии Lazarus (или FPC) '''trunk/для разработки'''. Вы можете получить Lazarus(и FPC), используя SVN или Git.
Предположим, что рабочая версия Лазаруса у находится в C:\lazarus (если Лазарус находится в другой папке, вам следует указать нужную в команде 'cd')
+
* 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.
вводите следующие команды
 
cd c:\lazarus
 
svn diff > mypatch.diff
 
  
Используя TortoiseSVN, вы можете [http://tortoisesvn.net/docs/release/TortoiseSVN_ru/tsvn-dug-patch.html создать патч] без использования командной строки.
+
{{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 ...", либо используйте следующую команду:
Для автоматического изменения кода, в соответствии с имеющимся патч-файлом, используется утилита  "patch"
+
<syntaxhighlight lang="bash">git format-patch master --stdout > mypatch.patch</syntaxhighlight>
  
 +
{{Note| ветка "master" при использовании ссылки git-svn следует за транком SVN по умолчанию.
 +
Однако зеркальный репозиторий в GitHub вместо этого использует ветку "upstream".
 +
Тогда вы должны заменить "master" на "upstream" в выше приведенных командах.}}
  
'''Для Windows''' при установленном Лазарусе она находится в папке
+
==Отправка патча==
lazarus\fpc\bin\*версия компилятора*\patch.exe
+
Теперь у вас есть патч. Я бы посоветовал еще раз просмотреть файл, чтобы убедиться, что он выглядит нормально (без неожиданных изменений).
  
'''Для Unix-систем''' утилита обычно устанавливается вместе с установкой binutils. В MacOSX утилита устанавливается вместе с Xcode.
+
Рекомендуемый способ отправки патча - через [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.
  
  patch --dry-run < mypatch.diff
+
==Применение патча==
где mypatch.diff - имя патч файла.
+
Это объясняет, как применить чей-то патч к вашему локальному репозиторию. Вы можете протестировать патч с помощью переключателя --dry-run следующим образом:
 +
<syntaxhighlight lang="bash">patch --dry-run < somepatch.diff</syntaxhighlight>
 +
Вывод патченной программы будет идентичен действительному исправлению, только это не изменит файлы исходного кода. Очень удобно для тестирования, без вероятности испортить ваш исходник.
  
Сообщения, выдаваемые программой Patch, будут такими же, как и при внесении изменений, но исходный код не будет изменён. Удобно тем, что помогает избежать нежелательного частичного изменения существующего кода.
+
===Патч, созданный с помощью "svn diff"===
 +
Для окончательного исправления используйте следующую командную строку:
 +
<syntaxhighlight lang="bash">patch < somepatch.diff</syntaxhighlight>
 +
Если это не сработает, потому что макет пути вашей среды выполнения отличается от среды выполнения, в которой было создано исправление, вы можете указать ''patch'''у удалить всю информацию о путях:
 +
<syntaxhighlight lang="bash">patch -p0 < somepatch.diff</syntaxhighlight>
  
пример успешного применения патча:
+
Любой инструмент с графическим интерфейсом для diff'ов в Windows также может обрабатывать эти патчи, включая TortoiseMerge.
  $ patch --dry-run < svnclasses.pas.diff
 
  patching file svnclasses.pas
 
  Hunk #2 succeeded at 980 (offset 1 line).
 
  
пример ошибки при применении патча:
+
===Патч, созданный с помощью "git format-patch"===
  $ patch --dry-run < svnclasses.pas.diff
+
====Git====
  patching file svnclasses.pas
+
Сам Git применяет патч так:
  2 out of 2 hunks ignored -- saving rejects to file svnclasses.pas.rej
+
<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 < mypatch.diff
+
"patch" также доступен для Windows, но есть инструменты и для работы с графическим интерфейсом.
  
для тех патчей, где участвую файлы из поддиректорий:
+
====TortoiseMerge====
 +
TortoiseMerge поддерживает исправление формата Git без проблем.
 +
Он устанавливается вместе с Tortoise SVN, но не встроен в проводник. Он должен быть открыт из меню «Пуск».
  
  patch -p0 < mypatch.diff
+
ToDo: добавить больше инструментов с графическим интерфейсом, которые поддерживают патчи формата Git
  
===Tortoise SVN===
+
===Устранение неполадок===
 +
Наконец, патчи могут иметь конец строки Unix/Linux (LF), в то время как ваш локальный файл имеет конец строки Windows (CR+LF) или наоборот. Вам придется преобразовать файл патча перед применением по крайней мере в Windows, так как прилагаемый файл patch.exe требователен к окончанию строки.
  
В TortoiseSVN встроена возможность [http://tortoisesvn.net/docs/release/TortoiseSVN_ru/tsvn-dug-patch.html применения патча].
+
В 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.
  
[[Category:Debugging/ru]]
+
==См.также==
 +
* [[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.

См.также