[Testtools] Accumulating a configuration (nightlyBuild main loop)

Stefan Vigerske stefan at math.hu-berlin.de
Fri Jan 16 05:16:35 EST 2009


Hi,

> 	JP and I have been exchanging emails about BuildDirSuffix, and he's been
> persistent enough to convince me that there's a possibility of accidental
> persistence from one build to the next.  I'm testing out a fix (pop the value
> from configuration if it's not specified for a given build).  But it seems to me
> the problem really lies in the way that the main loop of nightlyBuild assembles
> a configuration. We're in nightlyBuild.py.
> 
> 	Where it says `Define loop invariant configuration values', we
> initialise a map (configuration) and a set of sets (configurations).  Prior to
> entering the loop on projects, some persistent keys (rootDir,
> buildMethod) are set in configuration, to be used by all projects.
> 
> 	Now we enter the project loop (`Loop once for each project ...').  We
> set two more keys, project and `clear previous build', to be used for all builds
> of a project. (Arguably, `clear previous build' should be handled as a 
> persistent key, since it's initialised from a global variable.)
> 
> 	Now we enter the build loop, processing the builds specified for the
> project. We fill in a whole bunch more keys in configuration. Eventually, we
> check to see if configuration is already in configurations. If not, we process 
> it (NBbuildConfig.run) and record it in configurations.
> 
> 	Now, it seems to me that at this point the logical thing to do is clear
> configuration back to an empty map and start over to fill in configuration for
> the next build, but that doesn't happen.  The consequence is that once a
> key:value pair is added to configuration, it persists until explicitly removed
> or changed.  This is not safe.

Correct, that is not good.


>  I'd like to propose something a bit different,
> but fairly close to what now exists.
> 
> 	There are three classes of keys in a configuration:  top-level (for all
> projects), project-level (for all builds of a project), and build-level (for an
> individual build).  Right now, rootDir and buildMethod are handled as top-level,
> project and `clear previous build' are handled as project-level, and all the
> rest are (or should be) handled as build-level.
> 
> 	Why not make this explicit, by creating two new variables,
> top_configuration and project_configuration.  These get loaded at the places
> where top-level and project-level keys are processed now.
> 
> 	Then, in the inner loop (`for bc in buildConfigs'), the first action
> is to clear configuration and load it with the values from top_configuration and 
> project_configuration. This should prevent accidental carry-over.

Sounds good to me :-).

> 	Documentation and code comments should be updated to reflect the three 
> classes of parameters. As an added benefit, the user could override top-level 
> and project-level keys in a build configuration, should s/he so desire.

Interesting, I'll see how this will look like.

> 	You guys will regret dragging me into this ...   :-)

Not so far ;-).

Thanks,
Stefan

-- 
Stefan Vigerske
Humboldt University Berlin, Numerical Mathematics
http://www.math.hu-berlin.de/~stefan



More information about the Testtools mailing list