chiark / gitweb /
In dgit(7), discuss binaries and documentation present in upstream but removed by...
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 18 Aug 2015 15:18:34 +0000 (16:18 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 18 Aug 2015 15:18:34 +0000 (16:18 +0100)
debian/changelog
dgit.7

index 9f4ca75..e8c0e61 100644 (file)
@@ -8,6 +8,8 @@ dgit (1.4~~) UNRELEASED; urgency=low
     so as to avoid being broken by any .gitignore, etc.
   * When quilt linearisation fails, print the right information in
     the error message.  (This has been broken forever.)
+  * In dgit(7), discuss binaries and documentation present in upstream but
+    removed by rules clean.
 
  --
 
diff --git a/dgit.7 b/dgit.7
index a988656..f594093 100644 (file)
--- 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,