quilt and ooo-build

quilt is a tool to manage a stack of patches. And you can use it in ooo-build.

Getting and installing quilt

quilt's home is http://savannah.nongnu.org/projects/quilt At the time of writing, its download directory was not yet restored on savannah.

Mirrors are e.g. ftp://ftp.debian.org/debian/pool/main/q/quilt/ or (currently more up-to-date): http://graal.ens-lyon.fr/~mquinson/debian/dists/unstable/main/source/devel/

Unpack and install.

Add this to your ~/.quiltrc:

# -p : Show which C function each change is in.
QUILT_DIFF_OPTS="-p${QUILT_DIFF_OPTS:+ $QUILT_DIFF_OPTS}"

Setting up your source tree for quilt

Unapply old patches

If you're starting from a clean OOo source, you can skip this section.

quilt doesn't know about the ooo-build patches yet. If your tree was patched by ooo-build, revert the patches by running:

ooo-build/patches/apply.pl ooo-build/patches/OOO_1_1_0 $OOBUILDDIR --distro=$DISTRO -R
$OOBUILDDIR is the path to your OOo source tree, $DISTRO is what you used for --with-distro= when you ran configure

Tell quilt about the ooo-build patches

quilt expects patches in the patches subdir of the source tree:

ln -s /path/to/ooo-build/patches $OOBUILDDIR

quilt gets the list of patches from a `series' file, similar to ooo-build's apply files. You can generate a series file by running

ooo-build/patches/apply.pl ooo-build/patches/OOO_1_1_0 --series-from=$DISTRO > series
in your working directory.

Now you can apply the patches with quilt using quilt push, and revert them with quilt pop (one at a time, use the -a switch to push/pop all).

A smoke test for your quilt setup (and the ooo-build patches) is:

quilt push -a
quilt pop -a
quilt push -a
quilt pop -a

There should be no failure.

Use it

Now's a good time to read quilt.pdf from the quilt 0.29 (or later) tarball or http://savannah.nongnu.org/cgi-bin/viewcvs/quilt/quilt/doc/quilt.pdf.

Create a new patch with quilt

Let's say you want to create a patch for Issue 13473 LINK tags in HTML export of presentations Maybe you want to write your patch on top of all the other patches. Run quilt push -a to apply all patches.

In the OOo source tree run quilt new patches/OOO_1_1/sd-export-html-link-rel.diff to create the new patch.

You'll have to edit sd/source/filter/html/htmlex.cxx. Run quilt add sd/source/filter/html/htmlex.cxx. Quilt will make a backup copy of the file. Later it can use that copy to create the diff.

Now edit sd/source/filter/html/htmlex.cxx, compile, test, edit again, ...

When you're finished (or just want to know what you have changed in the file), run quilt refresh -p0. You can shorten refresh to ref, the -p0 is necessary because in ooo-build all patches are expected to be in -p0 format.

If you're confident that your patch is fine, add it to the apply file, write the ChangeLog entry and commit.

The neat thing is that you couldn't do this with a simple cvs diff, because htmlex.cxx is modified by other patches as well.

Hints

Problems


Martin Kretzschmar
Last modified: Wed Jan 7 11:20:01 CET 2004