git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Avery Pennarun <apenwarr@gmail.com>
To: Jan Koprowski <jan.koprowski@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: Solve continuous integration (pending head / commit queue)  problem using git
Date: Fri, 12 Feb 2010 12:42:44 -0500	[thread overview]
Message-ID: <32541b131002120942w50a29e7cjf2c10820b3286017@mail.gmail.com> (raw)
In-Reply-To: <c41cd75d1002120837t20f2a47fi41e8c67245c4284c@mail.gmail.com>

On Fri, Feb 12, 2010 at 11:37 AM, Jan Koprowski <jan.koprowski@gmail.com> wrote:
> Now. My idea. There is some revision tagged as "stable". *Clone* and
> *pull* operations is somehow "overloaded" from server side and always!
> return last revision tagged as stable. After compiling external tool
> just move tag to another revision which pass all tests. Of course
> there is some additional parameter (for example --last or --unstable)
> which can clone fine way of repository.
>
> Two questions.
> 1) Maybe I try to invent the wheel again. Is there any way to take the
> effect without overloading standard git behaviours.
> 2) If not how overload git behaviors on git "server side" repo?

In general, code that lies to you about what's the most revision is
evil.  Sometimes you *do* want to fetch that revision it's lying to
you and saying doesn't exist, precisely because you'd like to help fix
it before integration.

What you really want is:

- nobody can push to the "integration branch" except the "integration manager"

- the "integration manager" should be a computer program, so that you
can have "continuous integration"

This isn't actually that hard.  Give each user their own repository;
no user can write to any other user's repository.  (This is the
default setup on github.com, for example.)  Alternatively, just tell
people to never, ever push to the master branch by themselves.  People
are easily capable of following rules like that unless they're
actively trying to screw you.

Then set up something like gitbuilder
(http://github.com/apenwarr/gitbuilder) (Full disclosure: I wrote it)
to build *all* the branches from *all* the users.  This sounds like it
would create exponential work for the build machine, but it doesn't,
since most users will have mostly the same commits anyway.

When gitbuilder tags a particular commit as having built and passed
all tests, then it becomes a candidate for merging into the
integration branch.  Write a little script that goes through candidate
branches, checks their gitbuilder status, and if they've passed,
pushes them into the integration branch.  The push will only succeed
if the integration branch can be fast-forwarded to match the branch
you're trying to push; if you can't, it'll be rejected, which is what
you want, since merging (even conflict-free merging) might break
tests.

That mechanism works pretty well at my company, with one exception: we
didn't bother with an automatic tool that merges into master.  We
prefer to have a release manager do that.

Have fun,

Avery

  reply	other threads:[~2010-02-12 17:43 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-12 16:37 Solve continuous integration (pending head / commit queue) problem using git Jan Koprowski
2010-02-12 17:42 ` Avery Pennarun [this message]
2010-02-12 18:07   ` Jan Koprowski
2010-02-13  7:04     ` Jan Koprowski
2010-02-13 22:11   ` Daniel Barkalow

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=32541b131002120942w50a29e7cjf2c10820b3286017@mail.gmail.com \
    --to=apenwarr@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=jan.koprowski@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).