Re: git workflows for general Ubuntu development

2016-11-15 Thread Sean Whitton
Dear Robie,

On Tue, Nov 15, 2016 at 05:41:56PM +, Robie Basak wrote:
> On Tue, Nov 15, 2016 at 10:24:32AM -0700, Sean Whitton wrote:
> > The most important part of the tutorial for realising this is putting
> > "single-debian-patch" and "auto-commit" in debian/source/options, but I
> > would also encourage you to read the section "Sample text for
> > README.source".
> 
> If this is necessary, then it breaks our use case unless you can also
> require all Debian packages to switch to dgit first.
> 
> In Debian, a package maintainer can decide to switch VCS system and
> write things in README.source to explain how things should be done.
> 
> In Ubuntu, switching a package's VCS, debian/source/options, and so
> forth would make it increasingly difficult to maintain a delta against
> Debian. In general we never add such a (VCS of debian/source/options)
> delta. Whatever solution we employ, it must be able to work with
> unmodified Debian source packages.

Okay, I see what you mean.  I support my suggestion was actually quite
radical: adding those two lines to d/source/options for every package
you maintain a delta for.  In that case, the merges would be easy (a
simple helper script that ensured the lines were present post-merge) and
you wouldn't need README.source because everyone would know that was how
things worked.  But that would be a massive social change!

-- 
Sean Whitton


signature.asc
Description: PGP signature
___
vcs-pkg-discuss mailing list
vcs-pkg-discuss@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/vcs-pkg-discuss

Re: git workflows for general Ubuntu development

2016-11-15 Thread Robie Basak
Hi Sean,

Since our UOS session will start very soon, I'll reply just to the
things that I think I can address immediately for now.

On Tue, Nov 15, 2016 at 10:24:32AM -0700, Sean Whitton wrote:
> The most important part of the tutorial for realising this is putting
> "single-debian-patch" and "auto-commit" in debian/source/options, but I
> would also encourage you to read the section "Sample text for
> README.source".

If this is necessary, then it breaks our use case unless you can also
require all Debian packages to switch to dgit first.

In Debian, a package maintainer can decide to switch VCS system and
write things in README.source to explain how things should be done.

In Ubuntu, switching a package's VCS, debian/source/options, and so
forth would make it increasingly difficult to maintain a delta against
Debian. In general we never add such a (VCS of debian/source/options)
delta. Whatever solution we employ, it must be able to work with
unmodified Debian source packages.

> Like Ian, I beg you to reconsider this in the strongest possible terms!

This will only be possible if dgit actually helps us with our use cases.
If it cannot, then we either need to figure out how to add functionality
to dgit to make this possible, or we cannot use dgit.

I think a path forward might be for our system to be able to take dgit
as input, and also provide dgit as output. But this remains to be seen.

Robie


signature.asc
Description: PGP signature
___
vcs-pkg-discuss mailing list
vcs-pkg-discuss@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/vcs-pkg-discuss

Re: git workflows for general Ubuntu development

2016-11-15 Thread Sean Whitton
Dear Robie,

Thank you for your detailed explanation of your project.  I'd like to
make just a few remarks in response to your criticisms of dgit.

Firstly, *everything* that you discuss under "Differences from Debian"
was in fact a target when dgit was designed.  I'm not going to respond
point-by-point, but in particular, dgit is designed to deal with the
fact that DDs make uploads not using dgit.  `dgit pull` handles this
very well.

On Tue, Nov 15, 2016 at 04:25:23PM +, Robie Basak wrote:
> 1. Removing .pc breaks quilt. Going with my incremental theme again, our
> import format does not break this; users do not have to learn any
> additional tools. dgit punts on this with "If you want to manipulate the
> patch stack you probably want to be looking at tools like git-dpm".

Secondly, with regard to the patches-unapplied/patches-applied debate, I
would encourage you to read dgit-maint-merge(7), a workflow tutorial
I wrote that is shipped with recent versions of dgit (or online[1]).
While this tutorial is targeted at Debian package maintainers, I think
that it could easily be adapted for use by a downstream distro.

What this tutorial encourages you to do is *stop* manipulating the patch
stack.  Users do not have to learn any additional tools basides git best
practices, which they should know anyway.  And new users do not have to
learn quilt.  IMO this is really important.

The most important part of the tutorial for realising this is putting
"single-debian-patch" and "auto-commit" in debian/source/options, but I
would also encourage you to read the section "Sample text for
README.source".

Like Ian, I beg you to reconsider this in the strongest possible terms!

[1]  
http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git-manpage/dgit.git/dgit-maint-merge.7

-- 
Sean Whitton


signature.asc
Description: PGP signature
___
vcs-pkg-discuss mailing list
vcs-pkg-discuss@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/vcs-pkg-discuss

Re: git workflows for general Ubuntu development

2016-11-15 Thread Robie Basak
Cutting out the debian-devel and ubuntu-devel-discuss lists. I think
this subthread has quite a risk of fragmenting, so I'm moving it to the
one list (vcs-pkg-discuss) that seems most appropriate for this thread.

I have seen a few comments about "why not dgit?" and I realise that I
have yet to reply to these. Over the years I have internalised the
reasons, so have found it difficult to write down my arguments in a
cogent way. I'll attempt that here now, and I welcome replies that try
to convince me that I'm wrong. I have may some other ideas in my head I
have failed to remember right now.

I've tried hard to get this written and posted in advance of our Ubuntu
Online Summit session on this topic[4]. It took me a while though, and I
realise there is not much time left for participants to read and absorb
this. So sorry for the short notice.

For clarity, I'll call our system "usdi" as we don't have a better name
for it yet. And one fundamental point of difference appears to be
whether the git tree is "quilt popped" (usdi) or "quilt pushed with .pc
removed" (dgit). Note that an "Ubuntu merge" (our primary use case)
isn't the same as a git merge. It's more like a git rebase, but formerly
without the benefit of a VCS. If you're not familiar with this, see [1]
for details.

Please understand that we did not set off trying to solve all use cases
at once. Our goal in the design of this was not "one git to rule them
all". It was more "how can we use git to solve our immediate problem?"
My first effort[1] did not even have an automatically imported git tree.
I did it manually from source packages.

# A technical summary of what our importer does

Our imports appear in regular git repositories (not special remotes);
one per source package.

The importer (and only the importer) maintains one branch pointer per
distribution and series. These branch pointers fast forward, so users
can follow them easily.

When the importer runs for a given source package, it checks for any
newer source uploads, imports their trees and updates the
distribution+series branch pointers. These commits are equivalent to the
source packages with quilt patches popped and with no .pc directory.
This isn't enforced on other commits pushed by uploaders (see below) but
it wouldn't make sense do so anyway.

An uploader can choose to push to the git repository before the importer
runs against a corresponding upload. The uploader should push just a tag
in the form "upload/" to indicate to the importer that this is
a set of logical commits that can represent the upload (instead of
having to fall back on a wholesale import in one commit). The uploader
should not update any branch pointers. When the importer sees a new
published source version, it will find and use this tag if it passes
sanity checks. The updated distribution+series branch pointers will then
have the "upload/" commit in their histories as appropriate.

You can run the importer locally. If you run it against some current
remote tree (perhaps in future the "official" tree), then you will end
up with the same new imports as some other importer run (perhaps in the
future the "official" importer) with identical commit hashes. This is
quite convenient during development, since you can propose a branch
against a future official branch that doesn't necessarily exist yet.

# Other parts of our workflow

We have a bunch of documention-in-progress[2] and tooling[3] to help us
manipulate the tree in common ways to help us with our use cases. I
argue below why I think our model works for our use cases, so in that
sense I guess that they're relevant. But you don't need to understand
what we do in order to understand what we've done.

# Differences from Debian

Some unique challenges I think Ubuntu has over Debian:

1. Like Debian, we have NMUs (effectively). Unlike Debian, these happen
all the time. Unlike Debian, we can't choose to switch a package
maintainership over to a particular git model. In addition to non-git
uploads from other Ubuntu developers, we also have to deal with non-git
uploads from Debian, which is the primary source of commits and uploads
for the package. Whatever model we choose, we have to be able to deal
with the fact that the primary input from the system will not contain
nicely separated logical commits.

2. Being derived from Debian, we get far more benefit from git if git
understands our inheritence model. 1.0-1ubuntu1 in Ubuntu should have
1.0-1 from Debian as a parent in our git model. We may be able to get
away without this, since "Ubuntu merges" are primarily a rebase-based
workflow for us. However, getting the inheritance graph correct allows
us to automate more and more of this. Right now, we have the rebase
graft points identified for us automatically. In the future, we might
even be able to create a git-based "merge-o-matic" which could do
"Ubuntu merges" automatically where there are no conflicts.

3. As an Ubuntu development team, we need a system that presents a