<div class="gmail_quote">On Wed, Apr 9, 2008 at 1:50 AM, Keith Hodges &lt;<a href="mailto:keith_hodges@yahoo.co.uk">keith_hodges@yahoo.co.uk</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Dear All,<br>
<br>
For those not familiar with the idea, Sake is an attempt to provide similar functionality to Make and Rake, only using Smalltalk as the DSL. I hope that Sake is simple and sufficiently useful for all Squeak forks make use of it.</blockquote>
<div><br class="webkit-block-placeholder"></div><div>At work, we built something very similar to this...what you call a SakeTask is similar to what we call a target. &nbsp;We define them a bit differently however and our targets produce one or more files in the file system. &nbsp;A target is defined by writing a method with a special pragma (this is VisualWorks). &nbsp;The pragma typically specifies prerequisite targets (names of methods that return a filename) as well as its product (usually just one method that specifies the name of some file produced). &nbsp;The body of the method then does the work of producing the target (producing a tarball is a typical example). &nbsp;A slight variation on a target is one that transforms an image...you provide the name of a starting image and it launches that image, shuffles the code in the method over to it, runs that code, then snapshots the image as the filename specified as the product of the target. &nbsp;The build system just checks to see whether a target&#39;s product exists on disk to determine whether that target has already been produced or not. &nbsp;The classes and methods defining targets and the code implementing the build system are all versioned along with our product&#39;s code so that everything is highly reproducible. &nbsp;Only a small bit of bootstrapping logic lives outside. &nbsp;On launching a build, we gather all the methods implementing these pragmas, create instances of a target class, and construct a dependency graph and begin building the requested targets. &nbsp;This system has served us well for several years now.</div>
<div><br class="webkit-block-placeholder"></div><div>I think a target/task boils do to the following operations: prerequisites (identifiers of prerequisite tasks), product (some kind of identifier) do, isDone, and undo (though we do not have that in our system). &nbsp;Does SakeTask have any means of testing isDone? &nbsp;Also, is it generalized to the degree that do and undo actions could perform pretty much any action (i.e. actions in the file system) and not be tied to a concept of code packages?</div>
<div><br class="webkit-block-placeholder"></div><div>In any case, this looks promising.</div><div><br class="webkit-block-placeholder"></div><div>- Stephen</div><div><br class="webkit-block-placeholder"></div><div>&nbsp;</div>
</div>