Quilt is not a version control system, therefore this is not implemented as a backend. It can help keeping track of a series of patches. People use it to keep a set of changes they want to use on top of software packages (which is tightly integrated into the package build process - the Debian project does this for a large number of packages). Quilt can also help individual developers keep track of their own patches on top of real version control systems.
The vcs_info
integration tries to support both ways of using quilt by
having two slightly different modes of operation: ‘addon’ mode and
‘standalone’ mode).
Quilt integration is off by default; to enable it, set the use-quilt
style,
and add %Q
to your formats
or actionformats
style:
zstyle ':vcs_info:*' use-quilt true
Styles looked up from the Quilt support code include ‘.quilt-
quilt-mode’
in the vcs-string part of the context, where quilt-mode is either
addon
or standalone
.
Example: :vcs_info:git.quilt-addon:default:
repo-root-name.
For ‘addon’ mode to become active vcs_info
must have already detected a
real version control system controlling the directory. If that is the case,
a directory that holds quilt’s patches needs to be found. That directory is
configurable via the ‘QUILT_PATCHES
’ environment variable. If that
variable exists its value is used, otherwise the value ‘patches
’ is
assumed. The value from $QUILT_PATCHES
can be overwritten using the
‘quilt-patch-dir
’ style. (Note: you can use vcs_info
to keep the value
of $QUILT_PATCHES
correct all the time via the post-quilt
hook).
When the directory in question is found, quilt is assumed to be active. To
gather more information, vcs_info
looks for a directory called ‘.pc’;
Quilt uses that directory to track its current state. If this directory does
not exist we know that quilt has not done anything to the working directory
(read: no patches have been applied yet).
If patches are applied, vcs_info
will try to find out which. If you want
to know which patches of a series are not yet applied, you need to activate
the get-unapplied
style in the appropriate context.
vcs_info
allows for very detailed control over how the gathered
information is presented (see
Configuration and Hooks in vcs_info),
all of which are documented below. Note there are a number of
other patch tracking systems that work on top of a certain version control
system (like stgit
for git, or mq
for hg); the configuration
for systems like that are generally configured the same way as the quilt
support.
If the quilt support is working in ‘addon’ mode, the produced string is
available as a simple format replacement (%Q
to be precise), which can
be used in formats
and actionformats
; see below for details).
If, on the other hand, the support code is working in ‘standalone’ mode,
vcs_info
will pretend as if quilt
were an actual version control
system. That means that the version control system identifier (which
otherwise would be something like ‘svn’ or ‘cvs’) will be set to
‘-quilt-
’. This has implications on the used style context where this
identifier is the second element. vcs_info
will have filled in a proper
value for the "repository’s" root directory and the string containing the
information about quilt’s state will be available as the ‘misc’ replacement
(and %Q
for compatibility with ‘addon’ mode).
What is left to discuss is how ‘standalone’ mode is detected. The detection
itself is a series of searches for directories. You can have this detection
enabled all the time in every directory that is not otherwise under version
control. If you know there is only a limited set of trees where you would
like vcs_info
to try and look for Quilt in ‘standalone’ mode to minimise
the amount of searching on every call to vcs_info
, there are a number of
ways to do that:
Essentially, ‘standalone’ mode detection is controlled by a style called
‘quilt-standalone
’. It is a string style and its value can have different
effects. The simplest values are: ‘always
’ to run detection every time
vcs_info
is run, and ‘never
’ to turn the detection off entirely.
If the value of quilt-standalone
is something else, it is interpreted
differently. If the value is the name of a scalar variable the value of that
variable is checked and that value is used in the same ‘always’/‘never’ way
as described above.
If the value of quilt-standalone
is an array, the elements of that array
are used as directory names under which you want the detection to be active.
If quilt-standalone
is an associative array, the keys are taken as
directory names under which you want the detection to be active, but only if
the corresponding value is the string ‘true
’.
Last, but not least, if the value of quilt-standalone
is the name of a
function, the function is called without arguments and the return value
decides whether detection should be active. A ‘0’ return value is true; a
non-zero return value is interpreted as false.
Note, if there is both a function and a variable by the name of
quilt-standalone
, the function will take precedence.