summaryrefslogtreecommitdiff
path: root/dgit.7
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2015-08-18 16:18:34 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2015-08-18 16:18:34 +0100
commite917ad10a9459a78561be1576801fea4cb0ce082 (patch)
treeffa87cde85efe8fea7849af9ee4717c5b6bd38fa /dgit.7
parent4c172c32b16c321359d4e17b3f3dd874daee4e91 (diff)
In dgit(7), discuss binaries and documentation present in upstream but removed by rules clean.
Diffstat (limited to 'dgit.7')
-rw-r--r--dgit.766
1 files changed, 61 insertions, 5 deletions
diff --git a/dgit.7 b/dgit.7
index a988656..f594093 100644
--- a/dgit.7
+++ b/dgit.7
@@ -104,7 +104,7 @@ If you are a quilt user you need to know that dgit's git trees are
directory (which is used by quilt to record which patches are
applied). If you want to manipulate the patch stack you probably want
to be looking at tools like git-dpm.
-.SH FILES IN THE SOURCE PACKAGE BUT NOT IN GIT
+.SH FILES IN THE SOURCE PACKAGE BUT NOT IN GIT - AUTOTOOLS ETC.
This section is mainly of interest to maintainers who want to use dgit
with their existing git history for the Debian package.
@@ -150,16 +150,72 @@ bugs, which cause unintended files to end up in the source package.
dgit will notice this and complain. You may have to fix these bugs
before you can unify your existing git history with dgit's.
.LP
+.SH FILES IN THE SOURCE PACKAGE BUT NOT IN GIT - DOCS, BINARIES ETC.
+Some upstream tarballs contain build artifacts which upstream expects
+some users not to want to rebuild (or indeed to find hard to rebuild),
+but which in Debian we always rebuild.
+.LP
+Examples sometimes include crossbuild firmware binaries and
+documentation.
+To avoid problems when building updated source
+packages
+(in particular, to avoid trying to represent as changes in
+the source package uninteresting or perhaps unrepresentable changes
+to such files)
+many maintainers arrange for the package clean target
+to delete these files.
+.LP
+dpkg-source does not
+(with any of the commonly used source formats)
+represent deletion of files (outside debian/) present in upstream.
+Thus deleting such files in a dpkg-source working tree does not
+actually result in them being deleted from the source package.
+Thus
+deleting the files in rules clean sweeps this problem under the rug.
+.LP
+However, git does always properly record file deletion.
+Since dgit's
+principle is that the dgit git tree is the same of dpkg-source -x,
+that means that a dgit-compatible git tree always contains these
+files.
+.LP
+For the non-maintainer,
+this can be observed in the following suboptimal occurrences:
+.TP
+\(bu
+The package clean target often deletes these files, making the git
+tree dirty trying to build the source package, etc.
+This can be fixed
+by using
+.BR "dgit -wg" " aka " "--clean=git" ,
+so that the package clean target is never run.
+.TP
+\(bu
+The package build modifies these files, so that builds make the git
+tree dirty.
+This can be worked around by using `git reset --hard'
+after each build
+(or at least before each commit or push).
+.LP
+From the maintainer's point of view,
+the main consequence is that to make a dgit-compatible git branch
+it is necessary to commit these files to git.
+The maintainer has a few additional options for mitigation:
+for example,
+it may be possible for the rules file to arrange to do the
+build in a temporary area, which avoids updating the troublesome
+files;
+they can then be left in the git tree without seeing trouble.
.SH PROBLEMS WITH PACKAGE CLEAN TARGETS ETC.
-A related problem is unexpected behaviour by a package's
+A related problem is other unexpected behaviour by a package's
.B clean
target.
If a package's rules
-remove or modify files which are distributed in the package,
-or simply forgets to remove certain files,
+modify files which are distributed in the package,
+or simply forget to remove certain files,
dgit will complain that the tree is dirty.
.LP
-The solution is to use
+Again, the solution is to use
.BR "dgit -wg" " aka " "--clean=git" ,
which instructs dgit to use git clean instead of the package's
build target,