NAME
quilt - tool to manage series of patches
SYNOPSIS
quilt [-h] command [options]
DESCRIPTION
Quilt is a tool to manage large sets of patches by keeping track of the
changes each patch makes. Patches can be applied, un-applied,
refreshed, etc. The key philosophical concept is that your primary
output is patches.
With quilt, all work occurs within a single directory tree. Commands
can be be invoked from anywhere within the source tree. They are of the
form quilt cmd similar to CVS commands. They can be abbreviated as long
as the specified part of the command is unique. All commands print some
help text with quilt cmd -h.
Quilt manages a stack of patches. Patches are applied incrementally on
top of the base tree plus all preceding patches. They can be pushed on
top of the stack (quilt push), and popped off the stack (quilt pop).
Commands are available for querying the contents of the series file
(quilt series, see below), the contents of the stack (quilt applied,
quilt previous, quilt top), and the patches that are not applied at a
particular moment (quilt next, quilt unapplied). By default, most
commands apply to the topmost patch on the stack.
Patch files are located in the patches sub-directory of the source tree
(see EXAMPLE OF WORKING TREE below). The QUILT_PATCHES environment
variable can be used to override this location. The patches directory
may contain sub-directories. It may also be a symbolic link instead of
a directory.
A file called series contains a list of patch file names that defines
the order in which patches are applied. Unless there are means by which
series files can be generated automatically, it is usually provided
along with a set of patches. In this file, each patch file name is on a
separate line. Patch files are identified by pathnames that are
relative to the patches directory; patches may be in sub-directories
below this directory. Lines in the series file that start with a hash
character (#) are ignored. You can also add a comment after each patch
file name, introduced by a space followed by a hash character. When
quilt adds, removes, or renames patches, it automatically updates the
series file. Users of quilt can modify series files while some patches
are applied, as long as the applied patches remain in their original
order.
Different series files can be used to assemble patches in different
ways, corresponding for example to different development branches.
Before a patch is applied (or ‘‘pushed on the stack’’), copies of all
files the patch modifies are saved to the .pc/patch directory. The
patch is added to the list of currently applied patches (.pc/applied-
patches). Later when a patch is regenerated (quilt refresh), the backup
copies in .pc/patch are compared with the current versions of the files
in the source tree using GNU diff.
Documentation related to a patch can be put at the beginning of a patch
file. Quilt is careful to preserve all text that precedes the actual
patch when doing a refresh. (This is limited to patches in unified
format; see diff documentation).
The series file is looked up in the .pc directory, in the root of the
source tree, and in the patches directory. The first series file that
is found is used. This may also be a symbolic link, or a file with
multiple hard links. Usually, only one series file is used for a set
of patches, so the patches sub-directory is a convenient location.
The .pc directory and its sub-directories cannot be relocated, but it
can be a symbolic link. While patches are applied to the source tree,
this directory is essential for many operations, including taking
patches off the stack (quilt pop), and refreshing patches (quilt
refresh). Files in the .pc directory are automatically removed when
they are no longer needed, so there is no need to clean up manually.
QUILT COMMANDS REFERENCE
add [-P patch] {file} ...
Add one or more files to the topmost or named patch. Files must be
added to the patch before being modified. Files that are modified
by patches already applied on top of the specified patch cannot be
added.
-P patch
Patch to add files to.
annotate [-P patch] {file}
Print an annotated listing of the specified file showing which
patches modify which lines. Only applied patches are included.
-P patch
Stop checking for changes at the specified rather than the
topmost patch.
applied [patch]
Print a list of applied patches, or all patches up to and including
the specified patch in the file series.
delete [-r] [--backup] [patch|-n]
Remove the specified or topmost patch from the series file. If the
patch is applied, quilt will attempt to remove it first. (Only the
topmost patch can be removed right now.)
-n Delete the next patch after topmost, rather than the specified
or topmost patch.
-r Remove the deleted patch file from the patches directory as
well.
--backup
Rename the patch file to patch~ rather than deleting it.
Ignored if not used with ‘-r’.
diff [-p n|-p ab] [-u|-U num|-c|-C num] [--combine patch|-z] [-R] [-P
patch] [--snapshot] [--diff=utility] [--no-timestamps] [--no-index]
[--sort] [--color] [file ...]
Produces a diff of the specified file(s) in the topmost or
specified patch. If no files are specified, all files that are
modified are included.
-p n
Create a -p n style patch (-p0 or -p1 are supported).
-p ab
Create a -p1 style patch, but use a/file and b/file as the
original and new filenames instead of the default dir.orig/file
and dir/file names.
-u, -U num, -c, -C num
Create a unified diff (-u, -U) with num lines of context.
Create a context diff (-c, -C) with num lines of context. The
number of context lines defaults to 3.
--no-timestamps
Do not include file timestamps in patch headers.
--no-index
Do not output Index: lines.
-z Write to standard output the changes that have been made
relative to the topmost or specified patch.
-R Create a reverse diff.
-P patch
Create a diff for the specified patch. (Defaults to the
topmost patch.)
--combine patch
Create a combined diff for all patches between this patch and
the patch specified with -P. A patch name of ‘-’ is equivalent
to specifying the first applied patch.
--snapshot
Diff against snapshot (see ‘quilt snapshot -h’).
--diff=utility
Use the specified utility for generating the diff. The utility
is invoked with the original and new file name as arguments.
--color[=always|auto|never]
Use syntax coloring.
--sort
Sort files by their name instead of preserving the original
order.
edit file ...
Edit the specified file(s) in $EDITOR after adding it (them) to the
topmost patch.
files [-v] [-a] [-l] [--combine patch] [patch]
Print the list of files that the topmost or specified patch
changes.
-a List all files in all applied patches.
-l Add patch name to output.
-v Verbose, more user friendly output.
--combine patch
Create a listing for all patches between this patch and the
topmost or specified patch. A patch name of ‘-’ is equivalent
to specifying the first applied patch.
fold [-R] [-q] [-f] [-p strip-level]
Integrate the patch read from standard input into the topmost
patch: After making sure that all files modified are part of the
topmost patch, the patch is applied with the specified strip level
(which defaults to 1).
-R Apply patch in reverse.
-q Quiet operation.
-f Force apply, even if the patch has rejects. Unless in quiet
mode, apply the patch interactively: the patch utility may ask
questions.
-p strip-level
The number of pathname components to strip from file names when
applying patchfile.
fork [new_name]
Fork the topmost patch. Forking a patch means creating a verbatim
copy of it under a new name, and use that new name instead of the
original one in the current series. This is useful when a patch
has to be modified, but the original version of it should be
preserved, e.g. because it is used in another series, or for the
history. A typical sequence of commands would be: fork, edit,
refresh.
If new_name is missing, the name of the forked patch will be the
current patch name, followed by ‘-2’. If the patch name already
ends in a dash-and-number, the number is further incremented (e.g.,
patch.diff, patch-2.diff, patch-3.diff).
graph [--all] [--reduce] [--lines[=num]] [--edge-labels=files] [-T ps]
[patch]
Generate a dot(1) directed graph showing the dependencies between
applied patches. A patch depends on another patch if both touch the
same file or, with the --lines option, if their modifications
overlap. Unless otherwise specified, the graph includes all patches
that the topmost patch depends on. When a patch name is specified,
instead of the topmost patch, create a graph for the specified
patch. The graph will include all other patches that this patch
depends on, as well as all patches that depend on this patch.
--all
Generate a graph including all applied patches and their
dependencies. (Unapplied patches are not included.)
--reduce
Eliminate transitive edges from the graph.
--lines[=num]
Compute dependencies by looking at the lines the patches
modify. Unless a different num is specified, two lines of
context are included.
--edge-labels=files
Label graph edges with the file names that the adjacent patches
modify.
-T ps
Directly produce a PostScript output file.
grep [-h|options] {pattern}
Grep through the source files, recursively, skipping patches and
quilt meta-information. If no filename argument is given, the whole
source tree is searched. Please see the grep(1) manual page for
options.
-h Print this help. The grep -h option can be passed after a
double-dash (--). Search expressions that start with a dash can
be passed after a second double-dash (-- --).
header [-a|-r|-e] [--backup] [--strip-diffstat] [--strip-trailing-
whitespace] [patch]
Print or change the header of the topmost or specified patch.
-a, -r, -e
Append to (-a) or replace (-r) the exiting patch header, or
edit (-e) the header in $EDITOR. If none of these options is
given, print the patch header.
--strip-diffstat
Strip diffstat output from the header.
--strip-trailing-whitespace
Strip trailing whitespace at the end of lines of the header.
--backup
Create a backup copy of the old version of a patch as patch~.
import [-p num] [-R] [-P patch] [-f] [-d {o|a|n}] patchfile ...
Import external patches. The patches will be inserted following
the current top patch, and must be pushed after import to apply
them.
-p num
Number of directory levels to strip when applying (default=1)
-R Apply patch in reverse.
-P patch
Patch filename to use inside quilt. This option can only be
used when importing a single patch.
-f Overwrite/update existing patches.
-d {o|a|n}
When overwriting in existing patch, keep the old (o), all (a),
or new (n) patch header. If both patches include headers, this
option must be specified. This option is only effective when -f
is used.
mail {--mbox file|--send} [-m text] [--prefix prefix] [--sender ...]
[--from ...] [--to ...] [--cc ...] [--bcc ...] [--subject ...]
[--signature file] [--reply-to message] [first_patch [last_patch]]
Create mail messages from a specified range of patches, or all
patches in the series file, and either store them in a mailbox
file, or send them immediately. The editor is opened with a
template for the introduction. Please see
/usr/share/doc/quilt/README.MAIL for details. When specifying a
range of patches, a first patch name of ‘-’ denotes the first, and
a last patch name of ‘-’ denotes the last patch in the series.
-m text
Text to use as the text in the introduction. When this option
is used, the editor will not be invoked, and the patches will
be processed immediately.
--prefix prefix
Use an alternate prefix in the bracketed part of the subjects
generated. Defaults to ‘patch’.
--mbox file
Store all messages in the specified file in mbox format. The
mbox can later be sent using formail, for example.
--send
Send the messages directly.
--sender
The envelope sender address to use. The address must be of the
form ‘user@domain.name’. No display name is allowed.
--from, --subject
The values for the From and Subject headers to use. If no
--from option is given, the value of the --sender option is
used.
--to, --cc, --bcc
Append a recipient to the To, Cc, or Bcc header.
--signature file
Append the specified signature to messages (defaults to
~/.signature if found; use ‘-’ for no signature).
--reply-to message
Add the appropriate headers to reply to the specified message.
new {patchname}
Create a new patch with the specified file name, and insert it
after the topmost patch.
Quilt can be used in sub-directories of a source tree. It
determines the root of a source tree by searching for a patches
directory above the current working directory. Create a patches
directory in the intended root directory if quilt chooses a top-
level directory that is too high up in the directory tree.
next [patch]
Print the name of the next patch after the specified or topmost
patch in the series file.
patches [-v] {file}
Print the list of patches that modify the specified file. (Uses a
heuristic to determine which files are modified by unapplied
patches. Note that this heuristic is much slower than scanning
applied patches.)
-v Verbose, more user friendly output.
pop [-afRqv] [num|patch]
Remove patch(es) from the stack of applied patches. Without
options, the topmost patch is removed. When a number is specified,
remove the specified number of patches. When a patch name is
specified, remove patches until the specified patch end up on top
of the stack. Patch names may include the patches/ prefix, which
means that filename completion can be used.
-a Remove all applied patches.
-f Force remove. The state before the patch(es) were applied will
be restored from backup files.
-R Always verify if the patch removes cleanly; don’t rely on
timestamp checks.
-q Quiet operation.
-v Verbose operation.
previous [patch]
Print the name of the previous patch before the specified or
topmost patch in the series file.
push [-afqv] [--leave-rejects] [--color[=always|auto|never]]
[num|patch]
Apply patch(es) from the series file. Without options, the next
patch in the series file is applied. When a number is specified,
apply the specified number of patches. When a patch name is
specified, apply all patches up to and including the specified
patch. Patch names may include the patches/ prefix, which means
that filename completion can be used.
-a Apply all patches in the series file.
-q Quiet operation.
-f Force apply, even if the patch has rejects. Unless in quiet
mode, apply the patch interactively: the patch utility may ask
questions.
-v Verbose operation.
--leave-rejects
Leave around the reject files patch produced, even if the patch
is not actually applied.
--color[=always|auto|never]
Use syntax coloring.
refresh [-p n|-p ab] [-u|-U num|-c|-C num] [-z[new_name]] [-f] [--no-
timestamps] [--no-index] [--diffstat] [--sort] [--backup] [--strip-
trailing-whitespace] [patch]
Refreshes the specified patch, or the topmost patch by default.
Documentation that comes before the actual patch in the patch file
is retained.
It is possible to refresh patches that are not on top. If any
patches on top of the patch to refresh modify the same files, the
script aborts by default. Patches can still be refreshed with -f.
In that case this script will print a warning for each shadowed
file, changes by more recent patches will be ignored, and only
changes in files that have not been modified by any more recent
patches will end up in the specified patch.
-p n
Create a -p n style patch (-p0 or -p1 supported).
-p ab
Create a -p1 style patch, but use a/file and b/file as the
original and new filenames instead of the default dir.orig/file
and dir/file names.
-u, -U num, -c, -C num
Create a unified diff (-u, -U) with num lines of context.
Create a context diff (-c, -C) with num lines of context. The
number of context lines defaults to 3.
-z[new_name]
Create a new patch containing the changes instead of refreshing
the topmost patch. If no new name is specified, ‘-2’ is added
to the original patch name, etc. (See the fork command.)
--no-timestamps
Do not include file timestamps in patch headers.
--no-index
Do not output Index: lines.
--diffstat
Add a diffstat section to the patch header, or replace the
existing diffstat section.
-f Enforce refreshing of a patch that is not on top.
--backup
Create a backup copy of the old version of a patch as patch~.
--sort
Sort files by their name instead of preserving the original
order.
--strip-trailing-whitespace
Strip trailing whitespace at the end of lines.
rename [-P patch] new_name
Rename the topmost or named patch.
-P patch
Patch to rename.
revert [-P patch] {file} ...
Revert the changes to the topmost or named patch for the specified
file(s). Changes to files that are modified by patches on top of
the specified patch cannot be reverted.
-P patch
Revert changes in the named patch.
series [-v]
Print the names of all patches in the series file.
-v Verbose, more user friendly output.
setup [-d path-prefix] [-v] [--sourcedir dir] {specfile|seriesfile}
Initializes a source tree from an rpm spec file or a quilt series
file.
-d Optional path prefix for the resulting source tree.
--sourcedir
Directory that contains the package sources. Defaults to ‘.’.
-v Verbose debug output.
shell [command]
Launch a shell in a duplicate environment. After exiting the shell,
any modifications made in this environment are applied to the
topmost patch.
If a command is specified, it is executed instead of launching the
shell.
snapshot [-d]
Take a snapshot of the current working state. After taking the
snapshot, the tree can be modified in the usual ways, including
pushing and popping patches. A diff against the tree at the moment
of the snapshot can be generated with ‘quilt diff --snapshot’.
-d Only remove current snapshot.
top Print the name of the topmost patch on the current stack of
applied patches.
unapplied [patch]
Print a list of patches that are not applied, or all patches that
follow the specified patch in the series file.
upgrade
Upgrade the meta-data in a working tree from an old version of
quilt to the current version. This command is only needed when the
quilt meta-data format has changed, and the working tree still
contains old-format meta-data. In that case, quilt will request to
run ‘quilt upgrade’.
COMMON OPTIONS TO ALL COMMANDS
--trace Runs the command in bash trace mode (-x). For internal
debugging.
--quiltrc file
Use the specified configuration file instead of ~/.quiltrc (or
/etc/quilt.quiltrc if ~/.quiltrc does not exist). See the pdf
documentation for details about its possible contents. The
special value "-" causes quilt not to read any configuration
file.
--version
Print the version number and exit immediately.
EXAMPLE OF WORKING TREE
work/ -+- ...
|- patches/ -+- series
| |- patch2.diff
| |- patch1.diff
| +- ...
+- .pc/ -+- applied-patches
|- patch1.diff/ -+- ...
|- patch2.diff/ -+- ...
+- ...
EXAMPLE
Please refer to the pdf documentation for an example.
CONFIGURATION FILE
Upon startup, quilt evaluates the file .quiltrc in the user’s home
directory, or the file specified with the --quiltrc option. This file
is a regular bash script. Default options can be passed to any COMMAND
by defining a QUILT_${COMMAND}_ARGS variable. For example,
QUILT_DIFF_ARGS="--color=auto" causes the output of quilt diff to be
syntax colored when writing to a terminal.
In addition to that, quilt recognizes the following variables:
QUILT_DIFF_OPTS
Additional options that quilt shall pass to GNU diff when
generating patches. A useful setting for C source code is "-p",
which causes GNU diff to show in the resulting patch which function
a change is in.
QUILT_PATCH_OPTS
Additional options that quilt shall pass to GNU patch when applying
patches. For example, some versions of GNU patch support the
"--unified-reject-files" option for generating reject files in
unified diff style.
QUILT_DIFFSTAT_OPTS
Additional options that quilt shall pass to diffstat when
generating patch statistics. For example, "-f0" can be used for an
alternative output format. Recent versions of diffstat also support
alternative rounding methods ("-r1", "-r2").
QUILT_PATCHES
The location of patch files, defaulting to "patches".
QUILT_SERIES
The name of the series file, defaulting to "series". Unless an
absolute path is used, the search algorithm described above
applies.
QUILT_PATCHES_PREFIX
If set to anything, quilt will prefix patch names it prints with
their directory (QUILT_PATCHES).
QUILT_NO_DIFF_INDEX
By default, quilt prepends an Index: line to the patches it
generates. If this variable is set to anything, no line is
prepended. This is a shortcut to adding --no-index to both
QUILT_DIFF_ARGS and QUILT_REFRESH_ARGS.
QUILT_NO_DIFF_TIMESTAMPS
By default, quilt includes timestamps in headers when generating
patches. If this variable is set to anything, no timestamp will be
included. This is a shortcut to adding --no-timestamps to both
QUILT_DIFF_ARGS and QUILT_REFRESH_ARGS.
EDITOR
The program to run to edit files. If it isn’t redefined in the
configuration file, $EDITOR as defined in the environment will be
used.
AUTHORS
Quilt started as a series of scripts written by Andrew Morton (patch-
scripts). Based on Andrew’s ideas, Andreas Gruenbacher completely
rewrote the scripts, with the help of several other contributors (see
AUTHORS file in the distribution).
This man page was written by Martin Quinson, based on information found
in the pdf documentation, and in the help messages of each commands.
SEE ALSO
The pdf documentation, under /usr/share/doc/quilt/quilt.pdf.gz zxpdf(1)
can be used to display compressed pdf files.
diff(1), patch(1).