Reading and applying patches
Cameron Simpson
cs at zip.com.au
Tue Sep 5 08:12:01 UTC 2006
On 05Sep2006 01:44, Todd Zullinger <tmz at pobox.com> wrote:
| Chong Yu Meng wrote:
| > --- mlrate/mlrate.c 2003-01-27 10:31:31.000000000 +0100
| > +++ mlrate.new/mlrate.c 2004-11-22 12:37:52.086783325 +0100
| > @@ -25,6 +25,8 @@
| > #include <string.h>
| > ... and continues for a bit longer
| >
| > I assume that I should copy and paste the text into a separate file
| > and save it. But how do I apply the patch to the source file, which
| > is mlrate.c?
|
| You assume correctly.
It's worth mentioning that patch is pretty forgiving. You can usually
save the entire message to a file; patch is happy to skip past the leading
text up to the actual patch data (the output of a diff command, btw).
[...]
| > Also, how do I read the file? From some patch files I have come
| > across, they have "pluses" and "minuses" and other notation. What do
| > they mean?
|
| Lines beginning with a plus are being added by the patch, lines with a
| minus are being removed. The lines that start with either 3 minuses
| or plusses indicate the path of file that's being patched.
Also "!" prefixes lines in both parts that replace each other; the "+"
and "-" prefixes are where lines are removes or added respectively
without any new (or old, respectively) text.
Patch understands output from diff(1), which comes in three basic flavours:
- original diff (rarely used) which is actually a set of ed(1)
commands to turn the old files into the new file.
- context diff, as produced by "diff -c", which is more human readable,
surrounding the changed lines with some unchanged lines from the files.
This also has the advantage or permitting patch to cope a bit with
mismatches. For example, if you have a diff between versions 1.21
and 1.22, and you're trying to apply it to 1.20; if the files are
similar enough patch can use the context lines to guess where the
patch should go.
- unified diff, as produced by "diff -U", which is a more compact form
of context diff, and just as human readable, if not more so.
Make yourself a text file (eg a copy of this message). Then copy it and
modify the copy in various ways. Then compare the two using "diff -U".
A larger patch will normally be made from two complete source trees (the
old and the new) by running diff with the -r option (recursive) which
produces diffs for all the changes files.
For program version change patches, often the "old" tree will be inside
some source control system instead of being a real distinct directory
tree. Commands like "cvs diff" will generate diff output, comparing your
working area against the version inside the system.
Cheers,
--
Cameron Simpson <cs at zip.com.au> DoD#743
http://www.cskk.ezoshosting.com/cs/
[He] is the only man I know who would regard a naked, beautiful woman staring
deep into his eyes as an uncomplaining audience for his views on the latest
version of the twm window manager. - igb at fulcrum.co.uk (Ian G Batten)
More information about the fedora-list
mailing list