A discussion of draft document
<http://rakudo.org/parrot/index.cgi?parallel_development_requirements>,
with some side threads edited out. See
<http://www.parrotcode.org/misc/parrotsketch-logs/irclog.parrotsketch-200703/irclog.parrotsketch.20070327>
for the full text.
...
<Coke> ok. This is basically a followup to discussions that have
occurred on #parrot and pp - what are our expectations about trunk in
terms of stability? how can we use branching and tools to support these
expectations?
<Coke> the outline of the various topics is on the wiki.
<Coke> (and I have a meeting in 8 minutes. =-)
<allison> ok, let's continue the conversation on the list, then
<bernhard> Have a bugfix branch for every release ?
<Coke> That's certainly a possibility, b.
<bernhard> Gives some freedom on trunk
<chromatic> Branches suck though.
<Coke> I would need you to specify the ways in which they suck. =-)
<chromatic> Merging between branches sucks.
<chromatic> Really sucks.
<Coke> chromatic: thank you.
<particle> parallel development sucks, just like multiple
inheritance.
<chromatic> Pulling code from experimental branches into a stable
branch is a lot of work.
<particle> but we need it.
<chromatic> It's a lot of not-fun work.
<Coke> I think that svk or some other "sits in front of svn" method of
keeping track of thigns would work. especially if those svk repos were
public.
<chromatic> It doesn't work very well in Perl 5, and I fear that it
won't work very well anywhere else.
<particle> we need an svn-only solution
<Coke> then it's easy to keep things in sync.
<allison> coke: I've had terrible trouble with bugs in svk messing up
my repository, I've gone back to svn because it's reliable.
<Coke> particle: I disagree. We need something that does svn in the
back end, but I don't think we have to have the LCD be the solution
everyone uses.
<Steve_p> It works OK if everyone agrees that one ( or a very few)
access the maintanence branch
<bernhard> How many branches are we talking about 1,2 or 10 ?
<chromatic> Steve_p, I think Nicholas might disagree that it
works okay.
<Coke> alrightee. General plan: update the wiki page with your notes.
Someone (probably me) will start a thread on p2p. Chromatic will herd
you for the remainder of this meeting. =-)
<Coke> any discussion that continues here, I or someone else will
capture and add to the wiki.
<pmichaud> thanks, Coke!
<particle> my proposed solution would support infinite branches,
infinite repositories. the main repository would have (at least) an
integration branch, and a stable branch
<Steve_p> Oh yes, and unfortunately, scm tools tend to mess up
branching. The human factor of branching comes int too.
<tewk> (chromatic's comments)++
<Coke> Roger. Hope everyone is having fun. (and let me know if
you're not!)
<allison> the most important question is "what problem are we solving?"
<allison> once we have that, it'll make it much easier to pick the
right solution
<particle> we're aiming to solve multiple problems
<particle> ~ provide a stable branch
<chromatic> It sounds like the problem is "Some changes are too large
to keep stable in small patches."
<bernhard> Lessen fear of breaking things
<particle> parallel work on multiple subsystems may result in diverging
code. this is the hard part to manage
<pmichaud> out of curiosity (because I don't know), how do other large
systems like the Linux kernel handle it?
<jisom_> then we need a better test suite! :)
<jisom_> pmichaud, luck
<chromatic> pmichaud, the Linux kernel has lots of public trees, from
which various maintainers pull patchsets when they want to include them.
<chromatic> It's highly distributed, so there's no single stable
trunk.
<pmichaud> chromatic: is that a function of maturity, then?
<chromatic> More a function of chaos.
<pmichaud> heh
<pmichaud> okay :-)
<pmichaud> answers my question!
<particle> pmichaud: linux kernel folk use 'git', a tool linus
wrote
<particle> it's not portable enough for us, yet
<chromatic> They use git now, yes, but they used to mail patches around
and there was no central SCM besides Linus' inbox.
<pmichaud> particle: I meant more at a meta-level, in terms of managing
multiple repositories and dealing with parallel work on multiple subsystems
<particle> yes, it's a distributed vcs solution. we're used to, and i
think aiming for, a centralized solution
<pmichaud> I didn't follow some of the earlier discussions, but what
are some examples of specific obstacles we're encountering with the
present system?
<particle> presently, trunk breaks.
<particle> far too often.
<pmichaud> isn't that the historical purpose of trunk/head,
though?
<allison> isn't that a matter of developer discipline?
<bernhard> And trunk gets fixed
<chromatic> My answers are no, yes, and hopefully.
<pmichaud> okay, I see the issue now
<particle> we have the ability to provide a stable codeline, so we
always have a release candidate.
<pmichaud> so, trunk is where stable things go, and developers should
be working in branches
<particle> why don't we offer it? it takes a little know-how, some
discipline, and programming.
<particle> not necessarially
<allison> pmichaud: or trunk is where work happens and branches are for
release candidates
<pmichaud> I meant as a general approach
<chromatic> Because branches have the tendency to grow and grow and
diverge further from trunk, which makes them much more difficult to merge.
<particle> i propose we have branches for shared/solo subsystem
coding
<particle> a branch for integration
<particle> and a branch for stable code.
<particle> trunk is just another branch.
<particle> perhaps we rename 'trunk' to 'integration', or define it
that way.
<allison> particle: but we have the same problem then of branches
diverging rapidly, unless release branches are short-lived
<particle> or, maybe we rename/identify it as 'stable'
<particle> allison: as long as the development branches are kept
up-to-date wrt the stable branch, they won't diverge
<pmichaud> well, if we treat the trunk branch as being the stable one,
then there's a built-in incentive to get things checked into the trunk
because without that new features don't make it into the release
<chromatic> particle, that's never been my experience.
<pmichaud> s/checked in/merged in/
<allison> particle: it depends on someone actively watching and merging
changes, which is pretty much a full-time job for a volunteer
<allison> (and not a particularly fun job)
<particle> it's a job we all do already, in a way
<chromatic> As soon as someone checks in a change that's not
appropriate for whatever point you want to merge to, it blocks that
branch forever.
<allison> aye, but we'd be doing it twice
<particle> crap, somebody changed the code i was working on, i have
conflicts
<particle> i need to merge them in my working copy
<particle> chromatic, you can peel off your changes since the last
baseline (synchronization point between branches), apply the changes
from 'stable', and reapply your diffs
<allison> ouch
<particle> yes, it's merging. it's painful. but you have to do it at
some point anyway
<tewk> ouch++
<chromatic> Oh I agree that it's possible, but in my experience the
longer a branch lives on, the more difficult this is and the more likely
it is that there's an imcompatible change you just can't work around.
<allison> the question is whether the sacrifice is worth the gain
<particle> i don't get it. you MUST do this before your code is
committed to trunk now.
<particle> the pain is no different
<particle> if you wish to synchronize more frequently, you may.
<allison> merge and integrate changes? yeah, but I do it on a daily
basis
<chromatic> The difference is that if you're always working off of
trunk, you have much less possibility to diverge strongly.
<pmichaud> also, when working off trunk you notice divergences
earlier
<particle> so synch daily, and it's still no different
<pmichaud> s/divergences/conflicts/
<allison> but if we're keeping the two branches in sync daily, then
what's the point of having branches?
<particle> okay, let's think of trunk as an integration branch, instead
of a stable one.
<tewk> I svnup whenever I see a check-in, 5-10 times a day.
<particle> commits are only merged with the stable branch after they've
been smoked
<chromatic> It takes the same kind of developer discipline to manage a
long-lived branch as it does to keep the trunk stable, and managing
branches adds administrative overhead and latency.
<allison> either they diverge, in which case it leads to painful merges
down the road, or they stay the same and they're irrelevant. is there a
3rd option?
<allison> chromatic: point
<chromatic> The smoke/integrate option is interesting. Is this
automatable?
<particle> of course it can be automated :)
<particle> but, we need better smoke tools
<allison> and what's the process when smokes fail?
<chromatic> When smokes fail, Paul Cochrane fixes a bunch of whitespace
issues.
<particle> pugs has a smokebot which notifys #pugs
<mugwump> Here's a little analagy: if a branch is a software
development transaction, trunk is like forced AUTOCOMMIT
<allison> particle: I meant human process
<tewk> guilty party get an email with the build report, and he checks
in a fix.
<particle> failures must be dealt with. a revision can't be considered
a release candidate until it smokes.
<allison> tewk: and if guilty party is on vacation?
<particle> we can have smoke results for each platform, and release
candidates for each platform
<particle> when the revisions converge across all platforms, we have a
true release candidate
<tewk> someone fixes it or reverts it.
<particle> smoke failures should be RT tix
<particle> no different than parrotbug
<allison> particle: I see the appeal, but I'm not yet convinced on the
cost/benefit side
<mugwump> so with branch based development, you snapshot the current
state, work on it, and eventually "commit" the transaction (merge)
<chromatic> Before we discuss branches, perhaps we need reliable
automated smokes.
<mugwump> with trunk based development, every change you make gets
"committed", there are no long-running transactions
<particle> chromatic: the smokes themselves aren't unreliable, but the
reports aren't great
<allison> that is, if we make it significantly harder to work on
parrot, it will reduce the number of new contributors we get, and we're
not at a good point to be turning people away because they don't
understand our arcane commit system
<particle> firstly, smoke reports are slow to render, secondly, they're
not easy to compare to others
<tewk> Lets get a rockin smoke system with IM and email notification to
guilty parties working first, then revisit the branching issue if it is
still relevant.
<chromatic> Do we have automated smokes though?
<particle> chromatic: yes, we do
<chromatic> Okay. Good. I didn't realize that we did.
<allison> I'm totally on board for improving our smoke system
<particle> ^conner_ and others have donated time and machines for that.
we can use more, of course.
<particle> Steve_p will be helping with that effort, i suspect :)
<particle> there has been one or more folks on #parrot and #perl6
talking about better smoke tools
<particle> *writing better ...
<tewk> So what we are really talking about here is a continuous
integration server on a bunch of platforms,
<chromatic> It sounds like we need to know, first off, how often trunk
breaks and then see how we can keep it stable.
<allison> tewk: yeah, which may have nothing to do with branching, when
we get down to it
<tewk> It has to be up and running all the time to be useful.
<allison> I'd be interested to talk to the mozilla group about their
build process
<tewk> I don't think trunk breaks across all platforms very often. A
check-in quite often doesn't work on say WIN32 or with FreeBSD's make
<particle> i have tests failing on win32 now.
<chromatic> It's much easier to fix things if we can relate them to one
specific checkin.
<particle> patrick committed a TODO just before his release ,which
caused an unexpected success on my platform
<particle> we get bug reports of "this test is broken" all the
time
<bernhard> Can we smoke for every checkin and see the diffs?
<tewk> bernhard: that is what a continuous build server does, plus it
emails out reports and auto creates rt tickets
<particle> we can do every checkin, or every <time it takes to
realclean/config/make/test>, whichever is longer
<bernhard> continuous build server ++
<mugwump> if you're going to do that, why not get out of it a stable
trunk
<mugwump> instead of just a bunch of rt tickets which is going to
create lots of work
<tewk> usually a continuous build server can do every checkin, it may
slip behind during heavy periods but can catch back up during lighter
workload periods.
<tewk> When the workload gets too high you add another build server.
<tewk> We don't have that many checkins per day.
<particle> we don't have many resources
<particle> and i'm not interested in testing every revision, when so
many might be coding standards
<allison> an hourly build is good enough
<allison> or even twice daily
<particle> if we can specify that all smokers should build a particular
revision...
<particle> then we can do that prior to release day
<allison> particle: not the latest revision?
<chromatic> The fewer changes between smokes, the better... but being
able to narrow a failure down to a particular range (10 commits perhaps)
is better than what we have now.
<tewk> every build lets you identify who broke it though.
<allison> tewk: aye, but it's a cost/benefit thing again
<allison> tewk: identifying it within a few hours of commits is good
enough, and doesn't require the purchase of additional hardware
<particle> now, we're only talking about smoking *one* branch,
here
<allison> particle: yes
<mugwump> you only need to smoke the tip
<chromatic> Maybe in the future, we could do a binary search to the
previous commit point to find the failure.
<leo_> hi folks - greetings @all - if it's not too late I've got some
comments WRT recent discussion
<allison> please, dive in
<bernhard> Andreas König knows about binary searches
<mugwump> git-bisect++
<leo_> 'smoke ok' ne 'make test'
<allison> leo: true
<leo_> the former has multiple platforms
<leo_> the latter is your home machine
<leo_> but - I usually did not ci w/o 'make test'
<leo_> that already helps a lot
<particle> we can probably learn some from PITA
<chromatic> If more people did that, we'd have fewer coding standards
failures....
<leo_> re binary searches
<allison> leo: I hope most people are doing that much
<leo_> coke write a tool which is on CPAN, which just does that
<allison> chromatic: if not, we could use a developer education day
<leo_> wrote*
<leo_> and I'd really prefer to have stable := trunk
<particle> App::SVNBinarySearch ?? something like that
<allison> leo: stable == trunk == mainline
<leo_> search by author might help
<leo_> allison: yep
<allison> leo: agreed
<leo_> re branches - if you have a branch: merge trunk as often as
you can
<pmichaud> I should note that for the case that particle cited (my
todo'd test), the problem is that I was on a platform (x86_64) where a
test failed but every other platform succeeded, and I didn't have a
convenient way to determine that. 'make smoke' doesn't mean anything in
that case
<allison> leo: but also agreed that we do need to do some work on
stability, it's just a matter if deciding the best use of efforts toward
stability
<pmichaud> thus we need a smoke server
<leo_> but that doesn't help against collisions of multiple branches of
course
<allison> pmichaud: hmm... the ability to smoke un checked in versions?
<mugwump> no, when a branch is merged the branch fails its first smoke
metric, which is mergability
<leo_> pmichaud: yep - being on x86-64 too I'm seeing this too
<mugwump> er, when a branch is merged, other branches that conflict
lose their mergability
<allison> mugwump: we're talking outside the branching model
<leo_> it just reduces failing tets - i.e. whitespace and such or
non-ansi, which is/ought to be tested anyway
<leo_> mugwump: if folks are working in different directions in the
same part of code ...
<leo_> that's a conflict, yes ;)
<allison> leo: then we have a bigger problem than just repository
maintenance :)
<pmichaud> allison: I don't know that "ability to smoke unchecked-in
versions" is what I was implying... I just know that some of the
problems being cited have to do with the fact that some developers don't
have access to all platforms
<leo_> indeed
<allison> pmichaud: yeah, that's where I was heading
<leo_> pmichaud: s/some/most of the/
<particle> how about s/unchecked-in/unstable/
<allison> pmichaud: access to devel servers
<mugwump> every change is an unstable change until it is smoked
<pmichaud> particle: but how do I know my particular commit is
'unstable' for a platform I'm not using?
<allison> particle: not exactly
<particle> a promotion model of dev -> integration -> stable
<pmichaud> mugwump: every change is unstable until it has been smoked
on every supported platform
<mugwump> right
<particle> it's unstable until it passes smoke, by definition
<pmichaud> thus my comment that 'make smoke' is insufficient
<pmichaud> it has to be 'make smoke' on lots of platforms
<leo_> as said: 'make smoke' := sum('make test') for @platforms -
IMHO
<allison> leo: yes
<particle> yes, modulo new/unsupported platforms
<particle> like, say zaurus
<leo_> of course
<pmichaud> okay, I'd prefer a different name for this, then, because
'make smoke' is also a command we often use to submit smoke reports
<leo_> 'make smoke' is just: I submit a smoke test for my $platform
<particle> devsmoke/intsmoke?
<pmichaud> if 'smoke' := sum('make test') for @platforms, then I'm okay
with that
<allison> platform smoking
<allison> porter smoking
<chromatic> If the smokes fail, does the porter bellow?
<allison> he just asks for better tobacco
<allison> smoke farm
* particle drinks porter, he doesn't smoke it
<allison> hit the smoke farm
<chromatic> Alright, with bad puns it sounds like we're winding
down.
<particle> finally!
<chromatic> To my mind, the discussion seems to have turned from
branching to a discussion of improving our smoke farm.
<allison> mmmm... yes
<particle> yes, we still need to support parallel development
better
<chromatic> Specifically, we desire to have regular smokes run on our
necessary platforms on a regular basis.
<allison> which doesn't change the fact that we need a branching policy
<leo_> branching is just part of the whole thing
<mugwump> I've got to go to work, but I'll just leave with this
comment: overcome your fear of branches. branches are the way forward.
trunk is the way of pain. That's all :)
<leo_> as well as moking
<leo_> s*
<allison> but, smoking is the most important problem
<leo_> and it does need some machines
<allison> and is useful whether or not we decide branching is worth the
pain
<leo_> or many folks that just submit tests
<leo_> BTW the report at http://smoke.parrotcode.org/smoke/ is still
suboptimal as dates / platforms and versions are just summarized, but
you can't see any trend
<chromatic> So noted.
<leo_> maybe looks like one of the microgrant todo projects to make
that more useful
......