Build system thoughts

Bill Barry after.fallout at gmail.com
Tue Dec 9 00:11:54 CST 2008


I was thinking about CI and was wondering what everyone here thought 
about the following working practice designed for small to medium teams 
(probably around 8 to 30 people):

1 outgoing repo (call it stable)
1 "centralized" repo (call it central)
developers maintain their own copies of the central repo, all have push 
access

each dev does the following to start working on anything (they would all 
have central set up as the default pull/push location):
hg pull
hg up -C default
hg branch "featurename"
begin work

each commit would be to this feature, if the dev needed to switch to 
some other feature (perhaps not one they started) to do work to it they 
would do:
hg pull
hg up -C "otherfeaturebranchname"

in order to commit the dev would do:
hg ci -m "some message stating work for featurename"
hg push -f
(or just hg push if mercurial was fixed so that it didn't complain as 
long as there was only one head per branch)

any time the dev would want to update what version their feature is 
built off of (suppose for example a bug fix was committed elsewhere that 
he needed before the feature works properly), they would do:
hg pull
hg up -C "featurename"
hg merge -r default
hg ci -m "pulling updates from trunk"

there would be a stable repository maintainer role who would:
hg pull
hg up -C default
hg merge -r "featurename"
(possibly dealing with conflicts)
hg ci -m "merging in featurename message"
hg push
hg push -r default stable

in the meantime the central repo would be monitored by a CI process 
which would pull and build every incoming revision to find failing 
builds and successful builds and creating a page that looks somewhat 
like tinderbox (http://tinderbox.mozilla.org/Firefox/ as an example) 
except that each column would simply be a named branch. As an iteration 
draws to a close, the stable maintainer could merge together completed 
features that test successfully (and pass whatever other imposed 
conditions) into the main branch and push just that branch to stable.

The central repo would likely wind up with many heads active at a time 
(all on seperate branches). The default branch would remain stable, but 
the other branches could fluctuate in stability.

So what are your thoughts? And is there any tools either already in 
existence or under current development which could fulfill this CI 
process role (everything else appears doable right now)?



More information about the Mercurial mailing list