git-buildpackage / dgit integration
Ian Jackson
ijackson at chiark.greenend.org.uk
Sun Aug 16 14:46:46 UTC 2015
We spoke today at lunchtime, and I promised to write up our
conclusions.
Background:
(This is all in the context of format `3.0 (quilt)'.)
git-buildpackage normally works with packages-unapplied branches as
the primary interchange format. dgit needs a patches-applied branch.
The git history made with a dgit-based NMU will, in general, contain
(a) a series of linear commits touching both upstream files and
debian/changelog (but not touching debian/patches) (b) a commit made
by dgit which makes corresonding patch(es) in debian/patches.
1. Pushing with dgit
* Essentially, dgit replaces debsign and dput. It does all of: Tag
signing, dsc signing, changelog signing, git pushing to the dgit
repos, and the dput.
The plan is that dgit will
* Detect or be told that we're using a patches-unapplied-based tree
This might be done automatically, or by explicit instruction via a
command-line option, or perhaps there would be some user
configuration to tell dgit whether to guess. If dgit is to guess,
it will observe that the tree doesn't match the proposed .dsc if
treated as patches-applied, and then try treating it as
patches-unapplied.
* If using patches-unapplied, dgit push will make, privately,
a commit which converts the tree to patches-unapplied. It is that
commit which will be the dgit push candidate.
* The private commit might need to have as a parent the previous
commit on the dgit branch (which wouldn't necessarily be visible
anywhere else). dgit would automatically do this if it found a
changelog entry in the to-push commit, which mentions the same
version number as the changelog entry found in the previous dgit
branch state.
* If using patches-unapplied, keep the tag spaces separate between
the dgit git repos and the local tree. That is, patches-applied
tags wouldn't be fetched into the local tree's refs, nor would the
dgit-generated signed push authorisation tag be recorded in under
its actual name.
Also, dgit would make a gbp-style unapplied tag, using gbp to
discover the tag text that gbp would use. That tag would be made
locally but not pushed to the dgit-repos.
The result of all this is two separate tagging worlds, which
contain tags of the same name referring to different contents.
Both these tags would be signed by dgit push.
The dgit infrastructure server would never mistake a non-dgit tag
for a dgit one, because the dgit tags mention (and are required to
mention) dgit. There would be no protection against other programs
or humans mistaking one kind of tag for the other.
This is all obviously not ideal. But it is difficult to see how to
resolve this problem without changing either gbp, or dgit (and also
presumably git-dpm), to use a different tag naming convention,
which I think each of us probably would prefer not to do. We
agreed to think about this some more and see if a better idea
presented itself.
* When a gbp user wants to incorporate an NMU, the dgit NMU history
is probably not that helpful because it contains
mixed-upstream-and-debian commits.
However, the gbp user can use git-import-dsc on the NMU .dsc. That
will contain the correct patches as the gbp user will expect, so
this is the best workflow.
Currently the gbp user needs to somehow arrange that they run
git-import-dsc on the right branch. (Perhaps this is right be
default.) It would be nice if there were some tooling, probably
part of gbp, which would double check this.
* .gitignore: We agree that the source package should contain
.gitignore if the git tree does. (dgit requires this.)
If the way that gbp does builds currently ends up with .gitignore
missing from source packages, this needs to be fixed.
(We didn't discuss this in detail, but: dgit has a build wrapper
for gbp but it may be that this is unnecessary and users should
just use gbp to build. If this is so, then at the very least the
dgit documentation should deprecate the dgit gbp-build function.)
* It would be good if there were documentation explaining how to use
dgit and gbp together. We thought this should probably live in the
gbp package.
I have a bug report (#794244) against git-dpm which requests such
documentation for git-dpm, which I offered to rework into a similar
bug report for gbp. (I still intend do that, depending on the
what you think of this summary, etc.)
I think I have covered everything that we spoke about and which is in
my notes.
Thanks,
Ian.
More information about the vcs-pkg-discuss
mailing list