Difference between revisions of "Creating A Patch/de"

From Free Pascal wiki
Jump to navigationJump to search
(Big update; translated first half)
Line 1: Line 1:
 
{{Creating A Patch}}
 
{{Creating A Patch}}
 +
 +
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 Dateiennew files sollten Sie auch als vollständige Dateien schicken, zusammen mit Instruktionen wo diese plaziert werden müssen.
 +
 
__TOC__
 
__TOC__
== Anleitung ==
+
==Voraussetzungen==
Dies setzt voraus, dass Sie Lazarus mittels SVN erhalten haben. [[Getting Lazarus/de#Mittels SVN| Getting Lazarus Via SVN]]
 
  
Öffnen Sie eine command oder cmd Kommandozeile und wechseln Sie (mit cd) zu dem Verzeichnis, in dem sich die Lazarus-Quellen befinden.
+
Sie können sich Lazarus mittels SVN oder Git besorgen.
 +
* SVN: [[Getting Lazarus#Getting Lazarus SVN development version | Getting Lazarus SVN development version]]. Dies ist das originale Repositorium.
 +
* Git: [[git mirrors | Git mirrors]] und [[Lazarus git-svn | Lazarus Git-svn]]. Lazarus wird auch in GitHub gespiegelt. Git kann ebenfalls SVN-Server direkt benutzen (mittels git-svn link).
  
'''Anleitung für Windows:'''
+
==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:
  
Wir setzen voraus, dass Sie Ihr SVN checkout von Lazarus im Verzeichnis C:\lazarus haben:
+
===Windows===
 +
Falls Sie ein Checkout von Lazarus in C:\lazarus haben:
  
# Öffnen Sie eine MS-DOS Kommandozeile
+
# Öffnen Sie eine Befehlszeile, z.B. Start, geben Sie '''cmd.exe''' ein, {drücken Sie EINGABE} und gehen Sie ins Lazarus-Quelltext-Verzeichnis:
# c: {Enter drücken}
+
# <syntaxhighlight lang="dos">c:</syntaxhighlight>
# cd \lazarus {Enter drücken}
+
# <syntaxhighlight lang="dos">cd \lazarus</syntaxhighlight>
# svn diff > mypatch.dif {Enter drücken}
 
  
''Anmerkung: Wenn Sie [http://tortoisesvn.tigris.org/ TortoiseSVN] verwenden, können Sie den Ordner in dem Lazarus gespeichert werden soll im Windows Explorer auswählen, dann Rechtsklick und Auswahl von: TortoiseSVN->Create Patch...''
+
{{Anmerkung| Falls Sie [http://tortoisesvn.tigris.org/ TortoiseSVN] benutzen, können Sie den Ordner, in den Lazarus ausgecheckt wurde, im Windows-Explorer auswählen. Dann rechtsklicken Sieund wählen TortoiseSVN->Create Patch... }}
  
'''Anleitung für Linux/BSD etc:'''
+
Siehe auch [[TortoiseSvn#Troubleshooting]], wenn es Probleme gibt.
  
Wir setzen voraus, dass Sie Ihr SVN checkout von Lazarus im Verzeichnis $HOME/lazarus haben:
+
===*nix Systeme===
 +
Falls Sie ein Checkout von Lazarus in ~/lazarus haben:
  
# Öffnen Sie Ihr bevorzugtes Terminalprogramm.
+
# Öffnen Sie Ihr bevorzugtes Terminalprogramm
# cd $HOME {Enter drücken}
+
# <syntaxhighlight lang="bash">cd ~/lazarus</syntaxhighlight>
# cd lazarus {Enter drücken}
 
# svn diff > mypatch.diff {Enter drücken}
 
  
 +
==Erzeugen eines Patchs mittels SVN==
 +
<syntaxhighlight lang="bash">svn diff > mypatch.diff</syntaxhighlight>
 +
Dies schließt sämtliche veränderten Dateien im gesamten SVN-Repositorium ein.
  
''Anmerkung: Ich mag es auch, die Datei zu überprüfen um zu sehen, ob sich darin etwas befindet, das nicht dort sein sollte.''
+
Sie können aber auch die einzelnen Dateien definieren, damit sicher kein überflüssiger Dateimüll enthalten ist, z.B.:
 +
<syntaxhighlight lang="bash">svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff</syntaxhighlight>
  
Der empfohlene Weg, um einen Patch einzureichen ist über den [http://bugs.freepascal.org Bug tracker]. Wenn es einen Bericht gibt für den Issue, den Ihr Patch berichtigt, dann benutzen Sie ihn. Andernfalls erzeugen Sie einen neuen Issue. Laden Sie die Datei hoch, um Sie an den Issue anzuhängen.
+
==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:
 +
<syntaxhighlight lang="bash">git format-patch master</syntaxhighlight>
 +
Dies erzeugt einen Satz von Patches mit Namen wie "0001-CommitMsg.patch", "0002-CommitMsg.patch" und so weiter.
  
Alternativ können Sie die Datei zippen (auch mit gzip), die Sie erstellt haben und sie per Email an die Lazarus Mailing Liste (40 kB Limit) oder an die Mailbox für Patches [mailto:patch@lazarus.dommelstein.net patch@lazarus.dommelstein.net] senden. Wenn Sie einen Patch an die Mailbox schicken, stellen Sie sicher, dass der Betreff wenigstens das Wort 'Patch' enthält.
+
Falls Sie all Ihre Änderungen in einem einzigen Patch wollen, kombinieren Sie entweder die Commits mittels "git rebase -i ..." oder benutzen Sie folgenden Befehl:
 +
<syntaxhighlight lang="bash">git format-patch master --stdout > mypatch.patch</syntaxhighlight>
  
Das ist alles!
+
{{Anmerkung| Der "master"-Zweig folgt dem SVN-trunk standardmäßig, wenn Sie git-svn link benutzen.}}
 +
Allerdings nimmt das Spiegel-Repositorium in GitHub stattdessen dennoch den "upstream"-Zweig.
 +
Dann müssen Sie in den obigen Befehlen "master" durch "upstream" ersetzen.
  
== Fehlersuche ==
+
==Übermitteln des Patchs==
Dies trifft meistens auf Windows zu, kann aber ebenso auch für andere Plattformen zutreffen.
+
Jetzt haben Sie einen Patch. Ich empfehle Ihnen, sich diese Datei einmal anzusehen, ob alles gut aussieht (- keine unerwarteten Änderungen).
  
'''Sie erhalten die Fehlermeldung "svn command not found" oder ähnlich.'''
+
Der empfohlene Weg, einen Patch zu übermitteln, ist über den [http://bugs.freepascal.org 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.
Wahrscheinlich befindet sich die svn.exe nicht in Ihrer PATH Umgebungsvariablen. Die folgenden Schritte sollten dieses Problem lösen:
 
  
# Suchen Sie svn.exe unter Verwendung der Suchfunktion in Ihrem Startmenü.
+
==Using a forked Git repository directly==
# Sobald Sie svn.exe gefunden haben, müssen Sie das Verzeichnis Ihrem PATH hinzufügen.
+
It is possible to use Git in a distributed manner also for Lazarus development.
Als ein Beispiel: In der Kommandozeile tippen Sie:
+
At least developers JuhaManninen and Alexander Klenin ("Ask") are ready to accept code in a Git repository.
  set PATH=%PATH%;"C:\Program Files\TortoiseSVN\"
 
  
''Anmerkung: Ihr Verzeichnis welches svn.exe enthält, muss nicht das selbe sein wie dasjenige, das in diesem Dokument verwendet wird. Es wird hier als ein Beispiel verwendet.''
+
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.
  
Das folgende ist optional:
+
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.
  
'''Um dies dauerhaft zu machen'''
+
==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:
 +
<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.
  
Für Windows98 oder niedriger, können Sie die obige Zeile zu Ihrer C:\autoexec.bat Datei nahe dem Ende hinzufügen.  
+
===A patch made with "svn diff"===
 +
To do the final patching, use the following commandline:
 +
<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:
 +
<syntaxhighlight lang="bash">patch -p0 < somepatch.diff</syntaxhighlight>
  
Für Windows2000 oder höher können Sie dieses Verzeichnis zu Ihrem PATH hinzufügen durch:
+
Any GUI tool for diffs on Windows can handle these patches, too.
  
# Rechtsklick auf "My Computer"
+
===A patch made with "git format-patch"===
# Auswahl von "Eigenschaften"
+
====Git====
# Wählen Sie den "Erweitert" Tab.
+
Git itself applies the patch like this :
# Klicken Sie auf den "Umgebungsvariablen" Button.
+
<syntaxhighlight lang="bash">git apply 0001-gitpatch.patch</syntaxhighlight>
# Suchen Sie die "Path" Zeile in "System Variables" und fügen Sie: ;"C:\Program Files\TortoiseSVN\" am Ende hinzu.
 
  
''Anmerkung: Ihr Verzeichnis welches svn.exe enthält muss nicht das selbe sein wie dasjenige, das in diesem Dokument verwendet wird. Es wird hier als ein Beispiel verwendet.''
+
====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.
  
== Anwendung eines Patches ==
+
<syntaxhighlight lang="bash">patch -p1 < 0001-gitpatch.patch</syntaxhighlight>
Die Anwendung eines Patches ist einfach. Sie können den Patch testen unter Verwendung des --dry-run Wechselschalters so wie dieser:
 
  
  patch --dry-run < mypatch.diff
+
"patch" is available for Windows, too, but there are also GUI tools for the job.
  
Der Output des Patchprogramms wird identisch sein mit dem eigentlichen Patching, nur dass er die Quelldateien nicht ändert. Äußerst praktisch zum Testen, ohne dass Sie Ihre Quellen zerstören.
+
====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.
  
Für das finale patching verwenden Sie die folgende Befehlszeile:  
+
ToDo: add more GUI tools that support Git format patches
  
  patch < mypatch.diff
+
===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.
  
Oder, um Trennzeichen zu fixen:
+
On Windows, the patch.exe supplied with FPC/Lazarus is very picky; you may have better luck with the patch.exe supplied by Git:
 +
<syntaxhighlight lang="dos">"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff</syntaxhighlight>
  
  patch -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
  
 
[[Category:Debugging/de]]
 
[[Category:Debugging/de]]

Revision as of 20:53, 22 March 2013

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:

  1. .po Übersetzungsdateien sollten Sie als vollständige Dateien schicken.
  2. Neue Dateiennew files sollten Sie auch als vollständige Dateien schicken, zusammen mit Instruktionen wo diese plaziert werden müssen.

Voraussetzungen

Sie können sich Lazarus mittels SVN oder Git besorgen.

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:

  1. Öffnen Sie eine Befehlszeile, z.B. Start, geben Sie cmd.exe ein, {drücken Sie EINGABE} und gehen Sie ins Lazarus-Quelltext-Verzeichnis:
  2. c:
    
  3. cd \lazarus
    

Template:Anmerkung

Siehe auch TortoiseSvn#Troubleshooting, wenn es Probleme gibt.

*nix Systeme

Falls Sie ein Checkout von Lazarus in ~/lazarus haben:

  1. Öffnen Sie Ihr bevorzugtes Terminalprogramm
  2. 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

Template:Anmerkung Allerdings nimmt das Spiegel-Repositorium in GitHub stattdessen dennoch den "upstream"-Zweig. Dann müssen Sie in den obigen Befehlen "master" durch "upstream" ersetzen.

Ü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