Creating A Patch/de
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
日本語 (ja) │
português (pt) │
русский (ru) │
slovenčina (sk) │
Falls Sie Verbesserungen am Code von FPC oder Lazarus haben, sollten Sie uns diese als "Patch" zusenden, den die Entwickler leicht einbauen können.
Ausnahmen:
- .po Übersetzungsdateien sollten Sie als vollständige Dateien schicken.
- Neue Dateien sollten Sie ebenso als vollständige Dateien schicken, zusammen mit Instruktionen wo diese plaziert werden müssen.
Voraussetzungen
Sie können sich Lazarus mittels Git oder SVN besorgen.
- Git: https://gitlab.com/freepascal.org/lazarus/lazarus Dies ist das originale Repositorium.
- SVN:
svn checkout --depth files https://github.com/fpc/Lazarus/branches all cd all svn update --set-depth infinity main
Plattformspezifische Unterschiede
Die folgenden Instruktionen setzen voraus, dass Sie eine Befehlszeile geöffnet haben und dass Sie mittels des Befehls cd in das Verzeichnis des Repositoriums gewechselt haben. Hier sind die Details:
Windows
Falls Sie ein Checkout von Lazarus in C:\lazarus haben:
- Öffnen Sie eine Befehlszeile, z.B. Start, geben Sie cmd.exe ein, {drücken Sie EINGABE} und gehen Sie ins Lazarus-Quelltext-Verzeichnis:
c:
cd \lazarus
Siehe auch TortoiseSvn#Troubleshooting, wenn es Probleme gibt.
*nix Systeme
Falls Sie ein Checkout von Lazarus in ~/lazarus haben:
- Öffnen Sie Ihr bevorzugtes Terminalprogramm
cd ~/lazarus
Erzeugen eines Patchs mittels SVN
svn diff > mypatch.diff
Dies schließt sämtliche veränderten Dateien im gesamten SVN-Repositorium ein.
Sie können aber auch die einzelnen Dateien definieren, damit sicher kein überflüssiger Dateimüll enthalten ist, z.B.:
svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff
Erzeugen eines Patchs mittels Git
Als Erstes: Entwickeln Sie Ihren Code in einem separaten Zweig! Solange Ihr Entwicklungszweig aktiv ist, können Sie Patches all Ihrer lokalen Commits erzeugen über:
git format-patch master
Dies erzeugt einen Satz von Patches mit Namen wie "0001-CommitMsg.patch", "0002-CommitMsg.patch" und so weiter.
Falls Sie all Ihre Änderungen in einem einzigen Patch wollen, kombinieren Sie entweder die Commits mittels "git rebase -i ..." oder benutzen Sie folgenden Befehl:
git format-patch master --stdout > mypatch.patch
Übermitteln des Patchs
Jetzt haben Sie einen Patch. Ich empfehle Ihnen, sich diese Datei einmal anzusehen, ob alles gut aussieht (- keine unerwarteten Änderungen).
Der empfohlene Weg, einen Patch zu übermitteln, ist über den bug tracker, siehe How do I create a bug report für Details. Falls dort ein Bericht vorliegt über das Problem, das Ihr Patch beseitigt, dann benutzen Sie diesen. Andernfalls erzeugen Sie einen neuen Eintrag. Laden Sie die Datei als Anhang zu diesem Fehlerbericht hoch.
Using a forked Git repository directly
It is possible to use Git in a distributed manner also for Lazarus development. At least developers JuhaManninen and Alexander Klenin ("Ask") are ready to accept code in a Git repository.
In practice the repository must be forked from the Lazarus mirror in GitHub. The code must be in a separate branch and rebased against "upstream" branch. 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. If the code is outside that area, you can still use Git but you must create patches and send them to 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:
patch --dry-run < somepatch.diff
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"
To do the final patching, use the following commandline:
patch < somepatch.diff
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 -p0 < somepatch.diff
Any GUI tool for diffs on Windows can handle these patches, too.
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
See also
- How do I create a bug report general information on bug reporting
- 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