PATCH (UNIX)


'patch' is a Unix program that updates text files according to instructions contained in a separate file, called a ''patch file''. The patch file (also called a ''patch'' for short) is a text file that consists of a list of differences and is produced by running the related diff program with the original and updated file as arguments. Updating files with patch is often referred to as ''applying the patch'' or simply ''patching'' the files.

Contents
History
Usage context
Patches in software development
Usage examples
Ports of patch
See also
External links

History


The original patch program was written by Larry Wall (who went on to create the Perl programming language) and posted to mod.sources (which later became comp.sources.unix) in May of 1985. The program is now part of the GNU project and is being maintained by the FSF.

Usage context


Developed by a programmer for other programmers, patch was frequently used for updating of source code to a newer version. Because of this many people came to associate patches with usage in programs, whereas patches can in fact be applied to any text. It should be noted that ''patched'' files do not accumulate any unneeded cruft, which is what some people perceive based on the English meaning of the word; patch is as capable of removing text as it is of adding it. Patches described here should not be confused with binary patches distributed by closed-source software manufacturers to update binary files containing the program to a new release.

Patches in software development


The diff files that serve as input to patch are readable text files, which means that they can be easily reviewed by humans before use. When more advanced diffs are used, patches can be applied even to files that have been modified in the meantime, as long as those modifications do not interfere with the patch. This is achieved by using "context diffs" and "unified diffs" (also known as "unidiffs"), which surround each change with ''context'', which is the text immediately before and after the changed part. Patch then uses this context to apply the change independently of line numbers, although it does use the line numbers in the diffs as a starting point.
Context and unified diffs are typically the preferred form of patches, as they can be line-number independent. Context diffs are often easier to read by people unfamiliar with the unified diff format, but are generally significantly larger than unidiffs.
In addition to the "diff" program, diffs can also be produced by other programs, such as Subversion, CVS, and RCS.
The above features make diff and patch especially popular for exchanging modifications to free software. Outsiders can download the latest publicly available source code, make modifications to it, and send them, in diff form, to the development team. Using diffs, the development team has the ability to effectively review the patches before applying them, and can apply them to a newer code base than the one the outside developer had access to.
Patches have been the crucial component of many source control systems, including CVS.

Usage examples


To apply a patch, one could run the following command in a shell:
$ patch < mods.diff
This tells patch to apply the changes to the specified files described in mods.diff. Patches to files in subdirectories require the additional -p''number'' option, where ''number'' is 1 if the base directory of the source tree is included in the diff, and 0 otherwise.
Patches can be undone, or reversed, with the '-R' option:
$ patch -R < mods.diff
If the file is not identical to the version the diff was generated against, the patch will not be able to be applied cleanly. For example, if lines of text are inserted at the beginning, the line numbers referred to in the patch will be incorrect. patch is able to recover from this, by looking at nearby lines to relocate the text to be patched. It will also recover when lines of 'context' (for context and unified diffs) are altered; this is described as 'fuzz'.

Ports of patch


Originally written for Unix and Unix-like systems, patch has also been ported to Windows and many other platforms. A Windows port of patch is part of the GNU utilities for Win32

See also



diff

Patch (computing)

rsync

xdelta

List of Unix programs

External links





patchutils - Additional utility programs for manipulating patches.

GNU tools for Win32 - Win32 port of tools, including diff and patch.

diffstat - show statistics from output of diff.

This article provided by Wikipedia. To edit the contents of this article, click here for original source.

psst.. try this: add to faves