John F Davis wrote: > > Hello > > Ok. I've been using patch and I've asked some questions about it on IRC, > but I'm still not > sure about how to use it "CORRECTLY" or in the "PRESCRIBED-METHOD". So, > please correct me. > > I want to create a patch file to give to my co-workers and instructions on > how to use it. > > With that said, here is the scenario: > > I have a original directory called foo.orig and a "up-to-date" directory > called foo.latest. > So, I created a patch file using this syntax: > diff -Naur foo.orig foo.latest > foo.patch > > Then to apply the patch, I did: > patch -p1 foo < foo.patch > or > patch -p1 foo.orig < foo.patch > I can't remember which one I did. > > I think this is right. However, it would be great if someone would clear > up the bit > about the target directory. Does the target directory have to called the > same as the > "patched" or "orig" directory? Is there a way to specify or edit the patch > file so > that the end user can have their own custom directory name. For instance, > I used foo and foo.orig, but the end user might have directory names > like foo2 or foo.nfs, etc. > > JD > > -- > Kernelnewbies: Help each other learn about the Linux kernel. > Archive: http://mail.nl.linux.org/kernelnewbies/ > IRC Channel: irc.openprojects.net / #kernelnewbies > Web Page: http://www.kernelnewbies.org/ I threw together something a while ago when I was in the same situation, I've included it below. Because we are using Solaris at work, it covers the older and newer versions of diff/patch. HTH David Filion --- Start of doc --- Creating a patch Below is a cheat sheet for creating and applying patch files. For more details about each command, check the commands manpage, info document or try "command --help". 1.0 Using older versions of diff/patch. The older diff/patch utilities don't understand the newer unified format. Thus, the older conext format must be used. Thus the -c option that appears. 1.1 Create the patch diff -c -b -r /original /new > filename.patch diff options: -c Produces a listing of differences with three lines of context. -b Ignores trailing blanks (spaces and tabs) and treats other strings of blanks as equivalent. -r Applies diff recursively to common subdirectories encountered. 1.2 Apply the patch patch -c -l -p1 -d /original < filename.patch patch options: -c Interpret the patch file as a context difference (the output of the command diff when the -c or -C options are specified). -l Cause any sequence of blank characters in the difference script to match any sequence of blank characters in the input file. Other characters will be matched exactly. -d Change the current directory to dir before processing. -p NUM Strip NUM leading components from file names. 2.0 Using newer/GNU diff and patch utilities. Unlike their older counterparts, the newer/GNU versions of diff understand the unified format of patch file. This is the format used by the Linux kernel developers. 2.1 Create the patch diff -u oldfile newfile > filename.patch or diff -urN /olddir /newdir > filename.patch or diff -urN -X excludes /olddir /newdir > filename.patch diff options: -u Output (default 2) lines of unified context. -r Recursively compare any subdirectories found. -N Treat absent files as empty. -X FILE Exclude files that match any pattern in FILE. Note: The -u options can be replaced with -c to create a context format diff file with a setting of two lines. 2.2 Apply the patch gzip -cd patch.gz | patch -p0 or bzip2 -dc patch.bz2 | patch -p0 or patch -p0 < filename.patch patch options: -p NUM Strip NUM leading components from file names. 3.0 Creating a patch using CVS. A patch is created in CVS using the rdiff cvs command. 3.1 Create the patch. o Create a context (default) format diff of release tags rel1 and rel2 for module. cvs rdiff -r rel1 -r rel2 module o Create a unidiff format diff of release tags rel1 and rel2 for module. cvs rdiff -u -r rel1 -r rel2 module cvs rdiff options: -r tag Use revision <tag> -u Use the unidiff format. -c Use the context format (default). Copyright (c) David Filion (filiond@videotron.ca) Created 2001/09/12. -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ IRC Channel: irc.openprojects.net / #kernelnewbies Web Page: http://www.kernelnewbies.org/