chiark / gitweb /
wip
[talk-2015-debconf-dgit.git] / talk.txt
index 8e2603c97f3b0864b945605f09948982e2247631..2bc423d3949b4f0ccb5b7beeeb2ba2be1e9e4ac9 100644 (file)
--- a/talk.txt
+++ b/talk.txt
@@ -8,15 +8,17 @@ archive like a git remote.
 I'm going to talk for about 35 minutess and then I'll take questions.
 
 
+Firstly, a bit of framing.
+
 When we work on Debian we take on different roles.  The biggest
 difference is between the maintainer (or maintainers) of a package,
 working on their own package, and everyone else.
 
 I'm going to start by presenting dgit from the point of view of
-everyone else: NMUers, sponsorship, bug squashers, downstreams,
-users, teams doing cross-archive work
-like transitions and reproducible builds, and so on.  Maintainers,
-please be patient - I'll get to you later
+everyone else: NMUers, sponsorship, bug squashers, downstream distros
+and users, teams doing cross-archive work like transitions and
+reproducible builds, and so on.  Maintainers, please be patient - I'll
+get to you a bit later in the talk.
 
 
 ==== manpage slide
@@ -54,13 +56,13 @@ provide some helpful build rune wrappers (more about that later).
 
 If you don't want to, or can't, upload to Debian, but do want so share
 your work with other people, you can git push your dgit
-branch anywhere suitable, so they can fetch it.  So, for example, you
+branch anywhere suitable, so other can fetch it.  So, for example, you
 could share your branch with your sponsor, who could then approve it
 by running dgit push.  dgit's branches are ordinary git branches for
 this purpose.
 
 A downstream such as a derivative or partial derivative of Debian can
-use the dgit branches directly as the upstream for a git-based setup,
+use the dgit branches directly as the upstreams for a git-based setup,
 and work entirley without source packages.
 
 ==== data flow slide
@@ -86,8 +88,8 @@ to build source pacakges (for upload, for example).  In this case dgit
 needs the .orig tarballs for your source package.  If you are not
 doing a new upstream version, dgit fetch will get the relevant .origs
 for you.  If you /are/ doing a new upstream version, then presumably
-you have obtained them as part of preparing your package, or you can
-build them easily.
+you have obtained the origs as part of preparing your package, or you
+can build them easily.
 
 
 ==== NMU linear history slide
@@ -97,24 +99,26 @@ maintainer - at least, if they care.
 
 If you are doing a straightforward NMU you should produce a
 well-structured linear sequence of commits, as you would for any other
-git upstream.  Not only does this mean that if the maintainer is using
-dgit, they can hopefully easily include your changes; it also means
-that if they _aren't_ using dgit, at least you have published a
-history which is suitable for rebasing onto theirs, or whatever.
+git upstream, based on the dgit suite branch.  Not only does this mean
+that if the maintainer is using dgit, they can hopefully easily
+include your changes; it also means that if they _aren't_ using dgit,
+at least you have published a history which is suitable for rebasing
+onto theirs, or whatever it is they might want to do with it.
 
 If the source package is `3.0 (quilt)', you shouldn't touch
 debian/patches; dgit will take care of that for you.  This is the
 other reason why you should provide a tidy linear patch series: if the
 maintainer likes quilt and is not using dgit, your changes will be
-automatically presented to them in a fairly plausible format like they
-should expect from any other NMU.
+automatically presented to them in a fairly plausible format - a
+series of extra patches - like they should expect from any other NMU.
 
 An ordinary NMUer should not normally update a patch in the quilt
 stack directly.  Ie, an NMUer shouldn't squash their changes into an
 existing patch.  This is because while it's easy for the maintainer to
 squash it themselves, if they want, it's a little harder for the
-maintainer to disentangle a squashed patch.  This can also result in
-people having to read interdiffs, which are notoriously confusing.
+maintainer to disentangle a squashed patch.  Working directly on
+patches can also result in people having to read interdiffs, which are
+notoriously confusing.
 
 
 ==== NMU linear history on top of basic dgit history
@@ -126,17 +130,18 @@ This is because maintainers' git branches often differ from the source
 packages in the archive.
 
 If you dgit clone a package and it has an X-Vcs-Git header, dgit will
-set up a remote for it, so you can fetch the history and use it if you
+set up a remote for that, so you can fetch the maintainer's history and use it if you
 like.  So in that sense dgit clone encompasses debcheckout.
 
 But, in the general case, the X-Vcs-Git tree may not be immediately
-useable to someone not familiar with the package.
+useable to someone not familiar with the package, so dgit doesn't use
+it for the dgit suite branch.
 
-The maintainer's repo might contain only a debian/ directory, or be a
-quilty tree without patches applied.  And the tag and suite naming
-conventions can vary too.  So while the maintainer's history can be
-useful if you want to do archeaology, it's not in general suitable for
-use by dgit.
+For example, the maintainer's repo might contain only a debian/
+directory, or be a quilty tree without patches applied.  And the tag
+and suite naming conventions can vary too.  So while the maintainer's
+history can be useful if you want to do archeaology, it's not in
+general suitable for use by dgit.
 
 There is also the problem that the maintainer's nominated git server
 might be anywhere, so it might be down, or gone away, or compromised.
@@ -145,7 +150,7 @@ might be anywhere, so it might be down, or gone away, or compromised.
 So, if the maintainer is not using dgit, dgit has to synthesise a git
 history.  The history you see in dgit will then have a very basic
 branch and commit structure, rather than representing the package's
-actual history.
+actual history, something like you see here.
 
 
 Which brings me onto the other side of this talk: dgit for
@@ -157,7 +162,7 @@ For the reasons I've explained, downstream dgit users would like you
 as a maintainer to use dgit push to do your uploads.  They will then
 be able to see, and directly work with, your own history.
 
-In general, the point of using a dvcs like git is to publish your
+More generally, the point of using a dvcs like git is to publish your
 work.  The existing ways of publishing git histories for Debian
 packagess aren't uniformly useable for users: they require the user to
 understand the maintainer's git working practices.
@@ -168,14 +173,15 @@ immediately without special knowledge.
 
 But it's in your own selfish interest to upload with dgit, too:
 
-If you use dgit, you will be able to directly merge NMUs, patches
-proposed via pull-request emails, and so on: Because, in this case,
-the dgit-using contributor will have based their work on your own
-history.  Whereas, if you don't, dgit-using contributors will be
-working on a stub history, and may dgit push commits based on that
-stub.  You can dgit fetch it even if you're not using dgit for your
-uploads, but when you do at the very least you'll have to rebase the
-NMUer's work.
+If you use dgit, you will be able to directly merge NMUs, branches
+proposed via pull-request emails, and other similar contributions:
+Because, in this case, the dgit-using contributor will have based
+their work on your own history.  Whereas, if you don't use dgit,
+dgit-using contributors will be working on a stub history, and may
+dgit push commits based on that stub.  You can dgit fetch that work
+even if you're not using dgit for your own uploads, but if you're not
+using dgit push yourself, at the very least you'll have to rebase the
+NMUers' and other contributors' work onto your own history.
 
 Another advantage of using dgit for your maintainer uploads is that it
 will put your own history on browse.dgit.debian.org, rather than
@@ -195,8 +201,9 @@ dgit is not a replacement for existing git packaging tools; it's
 intended to complement them.  So (unlike git-dpm) dgit does not define
 a git history structure.
 
-Nor does dgit define a branch structure distinguishing upstream or
-downstream branches, pristine tar branches, etc.
+Nor, unlike git-buildpackage, does dgit define or suggest a branch
+structure for naming upstream or downstream branches, pristine tar
+branches, etc.
 
 dgit doesn't require a particular source format; it couldn't, since it
 needs to work with any package.
@@ -210,14 +217,14 @@ directly from dgit's objectives.
 The most important requirement is that your git tree is identical to
 the unpacked source package.  (Technically, in the case of a `3.0
 (quilt)' package, it is what is sometimes called a `patches-applied
-packaging branch without .pc directory', which means that the upstream
+packaging branch without .pc directory'.  Patches-applied means that the upstream
 source files in the main package tree correspond to the actual source
 code that will be used when the package is built, rather than to the
 upstream versions.)
 
 For all native packages, and for users of git-dpm and raw git, this is
 already the interchange format.  These maintainers can start using
-dgit right away.  Please do!
+dgit right away for all their maintainer uploads.  Please do!
 
 For those using git-buildpackage with `3.0 (quilt)', things are a bit
 more complicated.  I'm told that gbp pq can be used to generate a
@@ -265,13 +272,16 @@ should at some point consider providing centrally an archive-based
 package history.
 
 
+==== dgit requirements slide
+
 But the most obvious challenge for a maintainer with an existing git
 branch, but trying to use dgit, is dgit's insistence that the source
 package and git tree are the same.
 
-However, some source packages contain files not in the maintainers'
-git branches, and which are needed to build: most commonly, autotools
-output.  Such git branches are not useable with dgit.
+Sadly, quite a few source packages contain files not in the
+maintainers' git branches, but which are needed to build: most
+commonly, autotools output.  Such git branches are not useable with
+dgit.
 
 But nowadays most people recommend that the package build should
 always rerun autotools.  If you do that, then neither your git tree
@@ -279,14 +289,15 @@ nor your source package need contain the autotools output and all is
 well.
 
 Alternatively, you can commit the autotools output to git.  Merge
-conflicts etc. are easily resolved by rerunning autotools.
+conflicts, which do occur occasionally if you do this, are easily
+resolved by rerunning autotools.
 
 
-And a second way this can bite is that it is normally best to use one
-of dgit's build operations to build for upload.  This is mainly
-because most other tools remove .gitignore by default.  dgit requires
-that the source package and git tree are the same, so if your git tree
-has .gitignore in it, your source package should too.
+And a second way dgit's rule can bite is that it is normally best to
+use one of dgit's build operations to build for upload.  This is
+mainly because most other tools remove .gitignore by default.  dgit
+requires that the source package and git tree are the same, so if your
+git tree has .gitignore in it, your source package should too.
 
 
 Finally, there is one compelling advantage of dgit's git-based