summaryrefslogtreecommitdiffstats
path: root/www/docs/patch.t
blob: 1eafac947acb267be1d5c29679d0a66f9c922494 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#define _PAGE_ How To Work With Patches
#include "head.t"
<p>
 When we speak of 'patches' in the Rockbox project, we mean a set of changes
 to one or more source files.

<h2>Tools Of The Trade</h2>
<p>
Use the tools 'diff' and 'patch'. Preferably the GNU versions. They're readily
available for all imaginable platforms.
<p>
Try one of these:
<ul>
<li> <a href="http://www.fsf.org/software/patch/patch.html">http://www.fsf.org/software/patch/patch.html</a>
<li> <a href="http://www.gnu.org/directory/diffutils.html">http://www.gnu.org/directory/diffutils.html</a>
<li> <a href="http://gnuwin32.sourceforge.net/packages/patch.htm">http://gnuwin32.sourceforge.net/packages/patch.htm</a> - patch for Windows
<li> <a href="http://gnuwin32.sourceforge.net/packages/diffutils.htm">http://gnuwin32.sourceforge.net/packages/diffutils.htm</a> - diff for Windows
</ul>

<h2>Creating A Patch</h2>
<p>
 We generate diffs (often called patches) using 'diff' in a manner similar to
this:
<pre>
  diff -u oldfile newfile > patch
</pre>
<p>
 People who have checked out code with CVS can do diffs using cvs like this:
<pre>
  cvs diff -u file > patch
</pre>
<p>
 'diff' can also be used on a whole directory etc to generate one file with
changes done to multiple:
<pre>
  diff -u olddir newdir > patch 
</pre>
<p>
 The -u option means the output is using the 'unified diff' format. Older
 diff programs don't have that, and then -c (for 'context diff') is OK.

<h2>Applying A Patch</h2>
<p>
 Applying a 'patch' (output from diff -u) is done with the 'patch' tool:
<pre>
  patch < patchfile
</pre>
<p>
 patch knows that the patchfile is a set of changes on one or more files, and
will do those to your local files. If your files have changed too much for the
patch to work, it will save the sections of the patch that aren't possible to
apply in a file called "filename.rej" (filename being the name of the file for
which the failing section was intended for). Then you must take care of them
manually.

<p>
 If there is path information in the patchfile that you want to cut off
 from the left, tell patch how many directory levels to cut off to find the
 names in your file system:
<pre>
  patch -p0 < patchfile
  patch -p1 < patchfile
  patch -p2 < patchfile
</pre>
 ... each example line removes one extra level of dir info from the left.

#include "foot.t"