Re: Survey: git packaging practices / repository format
- Date: Wed, 29 May 2019 00:39:22 +0100
- From: Simon McVittie <smcv@xxxxxxxxxx>
- Subject: Re: Survey: git packaging practices / repository format
On Tue, 28 May 2019 at 21:20:50 +0100, Ian Jackson wrote:
> Simon McVittie writes ("Re: Survey: git packaging practices / repository format"):
> > xorg-team (e.g. mesa)
> > =====================
> > Tree contains: upstream files from a git tag (not identical to the
> > upstream `make dist` tarball), sometimes with extra commits cherry-picked
> > Baseline upstream: changelog version => .orig tarball; files that
> > exist in git but not in the upstream tarball are compensated for by
> > extend-diff-ignore in debian/source/local-options
> I'm not sure if you know the answer to this, but I thought of a
> question or two:
> Apart from the extra files, these orig tarballs must be identical to
> the files in git, or dpkg-source would complain about the differences.
You might reasonably assume that, but no, they are not. mesa (and probably
other xorg-team packages) uses v1.0 dpkg-source format combined with
dh --with quilt, so deliberate Debian changes can be either direct
changes to the upstream source code, or quilt patches in d/patches,
or a mixture. Additionally, mesa uses d/source/local-options to ignore
files that only exist in the upstream git tag (which is what gets merged
into the packaging git branch), but not in the upstream `make dist` output
produced from that tag (which is used as the .orig tarball).
My understanding is that this unusual difference between the .orig
tarball and what's in git is an attempt to "square the circle" between
two colliding design principles: "the .orig tarball should be upstream's
official binary artifact" (in this case Automake `make dist` output,
including generated files like Makefile.in but not non-critical source
files like .gitignore) and "what's in git should match upstream's git
repository" (including .gitignore but
not usually Makefile.in).
Most other packaging git repository layouts that I've seen choose one
of those two design principles to follow (whichever one the maintainer
thinks is more important), and ignore the other one. For instance, many
Autotools packages have upstream release tarballs committed to their
upstream or upstream/latest branch, like I do for dbus: their maintainers
have chosen to follow the first of those design principles, because they
think the second is less important.
> So presumably when you say "changelog version => .orig tarball" you
> actually mean => some git tag, from which a tarball is made ?
No, I really do mean the binary artifact released by upstream from
`make dist` output, even though what's committed to the packaging
git repository does not correspond 1:1 to that. I'm aware that this
contradicts some of the assumptions made by both dgit and the 3.0 (quilt)
source package format.