On 15/08/14 15:16, Raphael Hertzog wrote:
> Some initial questions and possible answers:

I've been hesitating on whether to ask this because it gets into
questions of workflow and repo structure that are very much a matter of
taste and don't have a single widely-declared-to-be-good answer, but I
think one of the important questions is: what is actually on the vendor
(e.g. Debian) branch?

The big question is "are vendor patches pre-applied or not?" but a
follow-up question, for 3.0 (quilt) packages, is "does .pc reflect that?"

I use gbp-pq for my own packages, so I would appreciate it if people who
actively use the other repo structures/helper tools could correct my
mistakes and discuss their advantages and disadvantages.

gbp-pq (from git-buildpackage), with imported tarballs in git
-------------------------------------------------------------

gbp-pq encourages the answer to be "pristine contents of tarball plus a
debian/ directory containing a quilt patch series, those patches are
*not* applied to the upstream sources as they appear in the repo, .pc
does not exist". This is the policy in all the teams in which I'm active
(possibly excluding pkg-games which might not have an overall policy)
and the one I personally prefer, at least at the moment. It has the
advantage that you don't have to rebase a published branch (which is
Badâ„¢) in order to rebase the vendor patches onto new upstream versions
(which is something you'll be doing all the time in most packages). It
has the disadvantage that you can't just cherry-pick an upstream commit,
you have to do non-git-ish things like dropping a git-format-patch into
debian/patches or using gbp-pq.

systemd's current README.source
<http://sources.debian.net/src/systemd/208-7/debian/README.source/> is a
good set of instructions for doing common maintainer/NMUer things in a
gbp-pq tree. You can also build from such a tree with a plain
`dpkg-buildpackage`.

I conjecture that maintainers who are used to things that are not git
(particularly svn, as used by pkg-perl, pkg-gnome, pkg-python-* etc.)
will also feel at home with this structure: it is entirely possible to
not use gbp-pq, and instead apply/unapply patches with quilt.

git-import-orig knows how to merge upstream VCS tags into an upstream
branch that is otherwise based on imported tarballs, so it is possible
to have the upstream/* commits reflect what was in imported tarballs but
still have your upstream's git commits as an ancestor.

gbp-pq (from git-buildpackage), with upstream git as base
---------------------------------------------------------

As long as you don't need to patch any files that do not exist in
upstream git but only in the tarball (e.g. use dh-autoreconf instead of
patching Makefile.in), and you don't have to drop any upstream files
(e.g. for DFSG reasons), it is possible to use upstream git as your
basis for branching, instead of importing tarballs. That's how systemd
is packaged at the moment.

git-buildpackage --git-export, with only debian/ in git
-------------------------------------------------------

It is possible to use git-buildpackage with --git-export (either
explicitly, or configured in debian/gbp.conf) for packages that only
keep debian/ in git. In this situation, the only possibility is to have
patches *not* pre-applied, because there is nothing there to patch. This
matches how teams like pkg-gnome have traditionally used svn.

I would strongly recommend having upstream source in git, not just
debian/, with one exception: packages like openarena-data, which mostly
contain giant binary files that cannot meaningfully be patched.

git-dpm
-------

git-dpm encourages the contents of the vendor branch to be "exactly the
source that will be built, vendor patches *are* applied" and uses a
relatively elaborate merging structure to avoid rebasing
(<http://git-dpm.alioth.debian.org/>). I don't know whether .pc is
typically present in the tree for 3.0 (quilt) packages or not, or
whether users of git-dpm avoid 3.0 (quilt) format altogether.

gitpkg
------

As far as I can tell, gitpkg encourages the answer to be "exactly the
source that will be built, vendor patches *are* applied, but .pc is not
present in git". However, I could be wrong. When I tried to apply
downstream patches to a version of systemd that used gitpkg, I got
confused enough to just give up on using the maintainers' git tree and
re-import it with git-import-dsc instead.

(systemd has since switched to the gbp-pq layout, which I found much
easier to deal with.)

dgit
----

dgit encourages the answer to be "exactly the source that will be built,
vendor patches *are* applied, if the package uses 3.0 (quilt) then .pc
also exists and reflects the state of the tree". I'm not sure what
techniques dgit users use to deal with non-native packages that have
vendor patches without rebasing a published branch - git-dpm seems like
it might be a good fit?

There seems to be a strong correlation between happy dgit users, and
those who either only do native packages (hello joeyh) or consider 3.0
(quilt) to be an abomination and are sticking with source format 1.0
(hello iwj); so the .pc thing might not matter to these users in
practice, but is significant do those who do want 3.0 (quilt).

If being VCS-agnostic is valued, it might be an interesting exercise to
design a source package format that is meant to work well with sources
in a dgit-style DVCS (e.g. avoiding clutter like .pc/ when unpacked),
but does not specifically rely on git concepts and formats.

Alternatively, perhaps it's time for a 4.0 (git) source format to become
a reality, if someone cleverer than me can devise a way to avoid it
containing the full history (which would not be feasible for ftp-masters
to review, and is reasonably likely to contain accidental sourceless or
non-free files).

Regards,
    S


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/53ee4c14.2040...@debian.org

Reply via email to