Where to start? Ah yes, loved this mail...

> I keep thinking about this (especially as one of my private gumps
> usually takes 25 hours to run).

My first thougt here is cascading Gumps, the main ones store jars in a
public repository, and downstream Gumps (typically private ones) just
use/download the latest Gumped jars. For personal Gump I think this would be
a huge saving.

> The absolute simplest way would be to
> simpy have a bash script that calls gumpy.py in an infinate while loop.

I'd like one that does N 'optiomized' (not yet coded) runs that skipped
things that had not changed, then one official (build it all anyway) run.
Seems easy to code.

> However, I think this would be a very good time to refactor gump into a
> workflow.

Yup.

> Server component to look at the projects and work out which ones Gump
> needs to try to build next.  To start off, the algorithm stays as it is
> now.  In future we can look to detect if there have been CVS commits
> since last build and so on.  Server component puts "n" work pieces into
> a pool.

I thought we had this 'any changes' covered, but found we did not (quite).

When we do the update from CVS|SVN we attempt to detect if changes have
occured.
We mark modules (and underlying projects) with isUpdated() and could simply
build those. [It isn't that simple, but enough for now.]

For CVS the "-q -n update" (and checking for any output) ought do it ('cos
the output ought list changes, since last run). I added that to the CVS
update part. [I don't like scanning for output to detect changes, but I am
no CVS expert, and I do like that this is 'fail safe' (we don't look for
changes since a given time, we look for sinice last update.) I am open to
suggestions on how to do this.

For SVN, this is not an option (unless one parses the output) since it likes
to tell one the current id, even if in sync. I know I tried the 'svn
status --show-updates' but I don't recall if it was enough to tell me
changes, or if I still needed to parse the output.

So ... I wrote a way to check if the 'sync' command found any difference.
Unfortunately I didn't write it unidirectional (it said 'sure there are N
diferences, that build dir you created, etc. etc.) I could attempt to only
report difference from the remote server's copy (adds/dels, not vice verse).

I basically ran out of time on the problem. I would like to revisit it,
because I think there are two good uses for knowing no changes, with your's
here being the most important.

> Service/Client component takes one project out of the pool, performs cvs
> update and attempts to build (again using the current algorithm).  Puts
> the results into a second pool.

I've been thinking about this, but for threads. I recently split Gump into
pieces with some for of listener & event/request pattern, so we could
dispatch to unnamed parties. I reworked a 'runner' so we could have various
types, my goal is one that take 'next available module or project' from a
list, so we can have multiple concurrent threads working it.

> View component takes the results from the second pool and produces the
> web site.  Alternatively, the second pool could be replaced with a
> filestore and the view generates the pages on the fly from the
> filestore.  The view component is forrest with a little glue logic.

I agree, something (lower priority?) could be building a WWW site at the
same time that real biulds are going on.

I keep thinking we could serialize the context (the build information) to a
file, but I like having lots of information & haven't found time to
serialzie it all.

> The nice thing about this is that it opens up many more possibilities
> for the future.  For instance, it would enable distributed gump at the
> client component.

Yup, very nice.

My personal goals are for cascading gumps, then multi-threaded (to make use
of the two CPUs on Brutus), and one day, distributed.

Thanks for the thoughts. Now, how do we make the incremental progress to get
there?

regards

Adam


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to