The problem with Wendy's logic is that it works really well for SVN or
P4 with atomic commits, but not so much for CVS. On the other hand,
the build agent checking its local workspace isn't great, because
another agent may have built. An option would be to call a timestamp
as of the build scheduled time, and determine if there have been
changes between the previous build's timestamp and the current
timestamp. On most atomic commit systems this is translated
immediately into a revision number, but for something like CVS, each
client can determine whether changes occur between TimeA and TimeB.
Or maybe use revision and fall back on timestamps for non-atomic
commit systems.
A lot of what I said is stated without really solid understanding of
the continuum SCM infrastructure, so I'm not sure if the features are
there, but they should be in the underlying SCM system being used.
Christian.
On 22-Jan-09, at 21:07 , Marica Tan wrote:
On Tue, Jan 20, 2009 at 9:15 AM, Wendy Smoak <[email protected]> wrote:
I'm trying to understand how, if a project may build on any agent,
Continuum can determine whether there have been scm changes since the
last time it was built. Here's what I think should happen (scheduled
builds, assuming Always Build and Build Fresh are NOT checked):
Add project
1:00pm Build on agent 1, checkout at r500
2:00pm Build on agent 2, checkout at r500 <--- no changes, project
should not build
2:15pm developer makes scm changes
3:00pm Build on agent 2 update to r501, build because there were
changes
4:00pm Build on agent 1 update to r501 <---- no changes, project
should not build
This is possible, but IMO the master needs to keep track of the
revisions so
that when agent 1 tries to build project @ 4:00pm it will only
update the
working copy but it won't build the project.
Our initial plan is to have a dumb build agent so all it knows is
how to
build. When it's a scheduled build, it will always build regardless
if there
is or there isn't any change at all. We can add the check for
whether it
should build or not in the next pass.
But I'm not sure how Continuum makes its determination of whether
there have been changes, (even without Distributed Build.)
It first updates the working copy and then set the project's scm
result
(with scm changes). Project has a one to one relationship with
ScmResult.
Everytime you update the working copy, it merges the new scm changes
with
the old scm changes unless it says build fresh.
Currently, no scm changes is returned to the master in a distributed
build
and I'll be working on that next.
This is a bit of a pain to set up and test for, so I'm hoping someone
will reassure me that it will all work fine. :)
--
Wendy
Christian E. Gruber - President / Senior Consultant
Isráfíl Consulting Services Corporation
email: [email protected]
mobile: +1 (289) 221-9839
web: http://www.israfil.net/
"...keenness of understanding is due to keenness of vision."