[posting this to zope3-dev too so the discussion thread there is
Jim Fulton wrote:
On Sep 12, 2006, at 8:32 AM, Daniel Nouri wrote:
While using buildout in our recent project we have discovered that
some recipe's `install` method is being run although neither the
recipe nor the configuration has changed.
The install method is always called. Clever install methods can usually
decode how much work to do depending on the presense of installed files.
Why should install methods have to be this clever? Having this
capability also puts a bit of a burden on the install method, which
wouldn't be the case if this would be handled by an 'update' method.
And shouldn't the parts directory be cleaned up everytime I am run?
No. The buildout software never cleans out the parts directory. It
removes paths returned from prior calls to install if and only if the
configuration or recipe has changed,
I was thinking that an `update` method would be useful for recipes to
check if they need to do something even if recipe and configuration
are the same. Any recipe that checks out from SVN would be using that
If you want to do an svn update, do it in install.
We actually didn't have the goal of doing an svn update at all. In fact,
we have a buildout that really shouldn't do anything if it's already
installed, and we were forced to add code to our buildout that checks
for the part being already present and bailing out if so. The 'svn
update' usecase is the reason we could think of why install is always
called, even if recipe and buildout config hasn't changed.
Right now the install method can be called in a number of different cases:
a) when the part isn't there yet
b) when the part is there, and the configuration or recipe has changed.
In this case the part is removed again automatically, so this is
equivalent to a).
c) when the part is there, and the recipe and configuration have not
changed. In this case there needs to be code that bails out if the part
is there and looks okay, or alternatively update code that updates the
part (svn up).
Case c) looks different. If there was an update method that got called
in case c), the install method wouldn't need to be called anymore, and:
* the install method can *always* assume the part isn't there and that
it needs to freshly install it.
* the update method can *always* assume the part is already there and it
needs to be updated (if necessary).
* we don't need to implement our 'bail-out' method in install anymore.
Zope3-dev mailing list