Ulf Lamping wrote:
Given the file "new.diff" containing a unified diff, what is the right 
way to call the patch tool?
That depends on what the pathnames in "new.diff" look like.  If they're 
relative to the top-level source directory - for example, if a patch to 
"prefs.c" just has "prefs.c" as the file name - you'd run it as
	patch -p0 <new.diff
If they're relative to a higher-level directory, you'd replace 0 with 
the number of higher-level directories in the path, e.g. if the names 
are "ethereal.orig/prefs.c" and "ethereal.mine/prefs.c", you'd run it with
	patch -p1 <new.diff
If they're relative to a *subdirectory* of the top-level directory, 
you'd run "patch" in *that* directory and run it with "-p0".
If you run it without "-p" at all, it flattens path names, so that if 
you have a patch file with patches to "Makefile.am" and 
"wiretap/Makefile.am", it'll try to apply the first patch to the 
top-level "Makefile.am" and then apply the "wiretap/Makefile.am" patch 
to the top-level "Makefile.am" as well.  (No, I don't know why "-p0" 
isn't the default; perhaps their idea was that most software to which 
you apply patches doesn't have subdirectories in the source tree, and 
stripping directories makes sure that the patches will apply regardless 
of how many extraneous directory names are in the path names.)
Is there a difference when the diff file contains one file "diff -u" or 
more files "diff -ur"?
There isn't a difference in the arguments to "patch".
(However, there is a difference in the number of times you have to run 
"patch" - and the number of times you have to save a patch file from 
mail - so I, at least, prefer it when people send a single patch file 
with patches for all the files to be changed.)
At which position in the filesystem has the patch tool to be called?
If the pathnames are relative to the top-level source directory, or to a 
directory above that directory, you'd run it in the top-level source 
directory.
If they're relative to a *subdirectory* - for example, if somebody did a 
patch to "packet-ip.c" and ran "diff" or "svn diff" in the 
"epan/dissectors" directory - you'd run it in that subdirectory.  (I 
would really prefer that people *NOT* submit patches like that - 
especially if they're only patching files that exist in multiple 
directories, such as "Makefile.am".)