Last updated June 25, 2012.
Command Line, or GUI?
The patch program is included with Mac OS X, but you need to use it from the command line via Terminal.app. See HowTo: Apply patches for details on how to use patch.
If you'd rather use a GUI solution, check out Apple's Xcode Tools. Note that you'll have to signup as a 'developer', but there's no charge to do so. This will install diff, cvs, and a whole suite of Apple and open-source development tools.
Applying the patch using Terminal
First, make a backup of the original .module file and save it outside of the module's directory.
Next, download a copy of the desired patch, saving it to the same directory as your original example.module.
Now, make sure that the module you're patching is the correct version for the downloaded patch. You can check this by peeking at the example.patch file with any plain-text editor, and looking at the revision number. It should look something vaguely like
diff -u -r1.51 example.module. That's what the patch program is going to look for: version 1.51 of the example.module. If the version in the patch file is different from the original module's version number, errors will appear in Terminal and you'll sit there staring at the screen, intensely frustrated, before loping off to pour yourself a drink. Make sure to close the file without saving any changes.
Open your Mac's Terminal application, which can be found in the Applications > Utilities folder. You'll see an open window called a shell that reads something vaguely like this:
Last login: Thu Jan 4 13:59:50 on ttyp1
Welcome to Darwin!
Using the 'cd' command, navigate to the module folder that contains both the example.module and the newly downloaded example.patch file.
(e.g. "cd ~/Users/Sites/drupal5/sites/all/modules/example_module/")
Hint: You can drag a folder or a file from any Finder window onto the Terminal window, and the pathname will be auto-filled for you. Just type "cd " (note the space), and then drag your desired folder/file onto the Terminal window. This method saves a *lot* of typing, and the possibility of misspelled folder names during this process.
Once you're in the correct folder, run this command using the exact name of the patch file:
$ patch < example.patch
(note: don't type the dollar sign. That's the command line prompt.)
And voila! If the patching was successful then you will see one or more lines such as "patching file example.extension" followed by a new $ prompt and a flashing cursor (which is Unix' way of being really, really excited that something worked.) The original module, example.module, is now patched and ready for action. Yep, it's just that easy! You can now close the Terminal window and go pour yourself a well-deserved drink.
If you are patching core then remember to patch from the drupal root directory and use the -p0 parameter to patch. This will stop patch from asking you which file you wish to patch:
$ patch -p0 < example.patch
If your patch is patching files that mention a & b directories in the patch, you can use the -p1 parameter to get rid of the a/b directories.
$ patch -p1 < example.patch
To fix code style issues in the patch, you can use tab2space like so:
tab2space -unix -t2 foo.patch | patch -p0
Additional Reading Material
Apple's User Manual on the patch command has some good info as well. http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/...
1. use --dry-run after the command to see what will happen without actually making any changes -- for instance,
patch < the_patch_file.patch --dry-run
2. use -b to always make a backup of the original file (the default behavior is to only make a backup if there was a problem). The backup will have the suffix ".orig".
3. You can always type "patch --help" to see more options, such as how to change the backup suffix.