'\" t .\" Title: filterdiff .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 23 Jan 2009 .\" Manual: Man pages .\" Source: patchutils .\" Language: English .\" .TH "FILTERDIFF" "1" "23 Jan 2009" "patchutils" "Man pages" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" filterdiff \- extract or exclude diffs from a diff file .SH "SYNOPSIS" .HP \w'\fBfilterdiff\fR\ 'u \fBfilterdiff\fR [[\-i\ \fIPATTERN\fR] | [\-\-include=\fIPATTERN\fR]] [[\-I\ \fIFILE\fR] | [\-\-include\-from\-file=\fIFILE\fR]] [[\-p\ \fIn\fR] | [\-\-strip\-match=\fIn\fR]] [\-\-strip=\fIn\fR] [\-\-addprefix=\fIPREFIX\fR] [\-\-addoldprefix=\fIPREFIX\fR] [\-\-addnewprefix=\fIPREFIX\fR] [[\-x\ \fIPATTERN\fR] | [\-\-exclude=\fIPATTERN\fR]] [[\-X\ \fIFILE\fR] | [\-\-exclude\-from\-file=\fIFILE\fR]] [[\-v] | [\-\-verbose]] [\-\-clean] [[\-z] | [\-\-decompress]] [[\-#\ \fIRANGE\fR] | [\-\-hunks=\fIRANGE\fR]] [\-\-lines=\fIRANGE\fR] [[\-F\fIRANGE\fR] | [\-\-files=\fIRANGE\fR]] [\-\-annotate] [\-\-format=\fIFORMAT\fR] [\-\-as\-numbered\-lines=\fIWHEN\fR] [\-\-remove\-timestamps] [\fIfile\fR...] .HP \w'\fBfilterdiff\fR\ 'u \fBfilterdiff\fR {[\-\-help] | [\-\-version] | [\-\-list] | [\-\-grep\ \&.\&.\&.]} .SH "DESCRIPTION" .PP You can use filterdiff to obtain a patch that applies to files matching the shell wildcard \fIPATTERN\fR from a larger collection of patches\&. For example, to see the patches in patch\-2\&.4\&.3\&.gz that apply to all files called lp\&.c: .sp .if n \{\ .RS 4 .\} .nf filterdiff \-z \-i \*(Aq*/lp\&.c\*(Aq patch\-2\&.4\&.3\&.gz .fi .if n \{\ .RE .\} .PP If neither \fB\-i\fR nor \fB\-x\fR options are given, \fB\-i \*(Aq*\*(Aq\fR is assumed\&. This way \fBfilterdiff\fR can be used to clean up an existing diff file, removing redundant lines from the beginning (eg\&. the text from the mail body) or between the chunks (eg\&. in CVS diffs)\&. To extract pure patch data, use a command like this: .sp .if n \{\ .RS 4 .\} .nf filterdiff message\-with\-diff\-in\-the\-body > patch .fi .if n \{\ .RE .\} .PP Note that the interpretation of the shell wildcard pattern does not count slash characters or periods as special (in other words, no flags are given to \fBfnmatch\fR)\&. This is so that \(lq*/basename\(rq\-type patterns can be given without limiting the number of pathname components\&. .PP You can use both unified and context format diffs with this program\&. .SH "OPTIONS" .PP \fB\-i\fR \fIPATTERN\fR, \fB\-\-include=\fR\fB\fIPATTERN\fR\fR .RS 4 Include only files matching \fIPATTERN\fR\&. All other lines in the input are suppressed\&. .RE .PP \fB\-I\fR \fIFILE\fR, \fB\-\-include\-from\-file=\fR\fB\fIFILE\fR\fR .RS 4 Include only files matching any pattern listed in \fIFILE\fR, one pattern per line\&. All other lines in the input are suppressed\&. .RE .PP \fB\-x\fR \fIPATTERN\fR, \fB\-\-exclude=\fR\fB\fIPATTERN\fR\fR .RS 4 Exclude files matching \fIPATTERN\fR\&. All other lines in the input are displayed\&. .RE .PP \fB\-X\fR \fIFILE\fR, \fB\-\-exclude\-from\-file=\fR\fB\fIFILE\fR\fR .RS 4 Exclude files matching any pattern listed in \fIFILE\fR, one pattern per line\&. All other lines in the input are displayed\&. .RE .PP \fB\-p\fR \fIn\fR, \fB\-\-strip\-match=\fR\fB\fIn\fR\fR .RS 4 When matching, ignore the first \fIn\fR components of the pathname\&. .RE .PP \fB\-#\fR \fIRANGE\fR, \fB\-\-hunks\fR=\fIRANGE\fR .RS 4 Only include hunks within the specified \fIRANGE\fR\&. Hunks are numbered from 1, and the range is a comma\-separated list of numbers or \(lqfirst\-last\(rq spans, optionally preceded by a modifier \*(Aqx\*(Aq which inverts the entire range; either the first or the last in the span may be omitted to indicate no limit in that direction\&. .RE .PP \fB\-\-lines\fR=\fIRANGE\fR .RS 4 Only include hunks that contain lines from the original file that lie within the specified \fIRANGE\fR\&. Lines are numbered from 1, and the range is a comma\-separated list of numbers or \(lqfirst\-last\(rq spans, optionally preceded by a modifier \*(Aqx\*(Aq which inverts the entire range; either the first or the last in the span may be omitted to indicate no limit in that direction\&. .RE .PP \fB\-F\fR=\fIRANGE\fR, \fB\-\-files\fR=\fIRANGE\fR .RS 4 Only include files indicated by the specified \fIRANGE\fR\&. Files are numbered from 1 in the order they appear in the patch input, and the range is a comma\-separated list of numbers or \(lqfirst\-last\(rq spans, optionally preceded by a modifier \*(Aqx\*(Aq which inverts the entire range; either the first or the last in the span may be omitted to indicate no limit in that direction\&. .RE .PP \fB\-\-annotate\fR .RS 4 Annotate each hunk with the filename and hunk number\&. .RE .PP \fB\-\-format\fR=unified|context .RS 4 Use specified output format\&. .RE .PP \fB\-\-strip\fR=\fIn\fR .RS 4 Remove the first \fIn\fR components of pathnames in the output\&. .RE .PP \fB\-\-addprefix\fR=\fIPREFIX\fR .RS 4 Prefix pathnames in the output by \fIPREFIX\fR\&. This will override any individual settings specified with the \fB\-\-addoldprefix\fR or \fB\-\-addnewprefix\fR options\&. .RE .PP \fB\-\-addoldprefix\fR=\fIPREFIX\fR .RS 4 Prefix pathnames for old or original files in the output by \fIPREFIX\fR\&. .RE .PP \fB\-\-addnewprefix\fR=\fIPREFIX\fR .RS 4 Prefix pathnames for updated or new files in the output by \fIPREFIX\fR\&. .RE .PP \fB\-\-as\-numbered\-lines\fR=before|after .RS 4 Instead of a patch fragment, display the lines of the selected hunks with the line number of the file before (or after) the patch is applied, followed by a TAB character and a colon, at the beginning of each line\&. Each hunk except the first will have a line consisting of \(lq\&.\&.\&.\(rq before it\&. .RE .PP \fB\-\-remove\-timestamps\fR .RS 4 Do not include file timestamps in the output\&. .RE .PP \fB\-v\fR, \fB\-\-verbose\fR .RS 4 Always show non\-diff lines in the output\&. By default, non\-diff lines are only shown when excluding a filename pattern\&. .RE .PP \fB\-\-clean\fR .RS 4 Always remove all non\-diff lines from the output\&. Even when excluding a filename pattern\&. .RE .PP \fB\-z\fR, \fB\-\-decompress\fR .RS 4 Decompress files with extensions \&.gz and \&.bz2\&. .RE .PP \fB\-\-help\fR .RS 4 Display a short usage message\&. .RE .PP \fB\-\-version\fR .RS 4 Display the version number of filterdiff\&. .RE .PP \fB\-\-list\fR .RS 4 Behave like \fBlsdiff\fR(1) instead\&. .RE .PP \fB\-\-grep\fR .RS 4 Behave like \fBgrepdiff\fR(1) instead\&. .RE .SH "EXAMPLES" .PP To see all patch hunks that affect the first five lines of a C file: .sp .if n \{\ .RS 4 .\} .nf filterdiff \-i \*(Aq*\&.c\*(Aq \-\-lines=\-5 < patch .fi .if n \{\ .RE .\} .PP To see the first hunk of each file patch, use: .sp .if n \{\ .RS 4 .\} .nf filterdiff \-#1 patchfile .fi .if n \{\ .RE .\} .PP To see patches modifying a ChangeLog file in a subdirectory, use: .sp .if n \{\ .RS 4 .\} .nf filterdiff \-p1 Changelog .fi .if n \{\ .RE .\} .PP To see the complete patches for each patch that modifies line 1 of the original file, use: .sp .if n \{\ .RS 4 .\} .nf filterdiff \-\-lines=1 patchfile | lsdiff | \e xargs \-rn1 filterdiff patchfile \-i .fi .if n \{\ .RE .\} .PP To see all but the first hunk of a particular patch, you might use: .sp .if n \{\ .RS 4 .\} .nf filterdiff \-p1 \-i file\&.c \-#2\- foo\-patch .fi .if n \{\ .RE .\} .PP If you have a very specific list of hunks in a patch that you want to see, list them: .sp .if n \{\ .RS 4 .\} .nf filterdiff \-#1,2,5\-8,10,12,27\- .fi .if n \{\ .RE .\} .PP To see the lines of the files that would be patched as they will appear after the patch is applied, use: .sp .if n \{\ .RS 4 .\} .nf filterdiff \-\-as\-numbered\-lines=after patch\&.file .fi .if n \{\ .RE .\} .PP You can see the same context before the patch is applied with: .sp .if n \{\ .RS 4 .\} .nf filterdiff \-\-as\-numbered\-lines=before patch\&.file .fi .if n \{\ .RE .\} .PP Filterdiff can also be used to convert between unified and context format diffs: .sp .if n \{\ .RS 4 .\} .nf filterdiff \-v \-\-format=unified context\&.diff .fi .if n \{\ .RE .\} .SH "SEE ALSO" .PP \fBlsdiff\fR(1), \fBgrepdiff\fR(1), \fBpatchview\fR(1) .SH "AUTHOR" .PP \fBTim Waugh\fR <\&twaugh@redhat.com\&> .RS 4 Package maintainer .RE