[squeak-dev] Monticello/MCM tricks (was Re: SkipLists removal)
Andreas Raab
andreas.raab at gmx.de
Sat Jul 4 19:18:11 UTC 2009
Ken Causey wrote:
> Oh good, I have to admit I wasn't absolutely sure there wasn't something
> more I needed to do.
If the change is local to a single package there is not much you need to
do. Monticello is reasonable in this case and the updater will just load
the version of the package. Where it gets nasty is:
* When you rename classes (this may have been addressed in one of the
later MC versions?) as Monticello will delete the old class mercilessly,
leaving all the instances in the dust
* When you move classes between packages where you need to issue an
update.mcm so that you have the destination package before the source
package so that the class doesn't get deleted in the middle (of course,
some of the time the update.mcm will be in the right order and you get
lucky ;-)
* When you have system methods that are modified during load and rely on
new methods in the package. This is by far the biggest issue (and a
problem even with Change Sets). For example,
http://bugs.squeak.org/view.php?id=6535 contains a change to
OrderedCollection>>copyFrom:to: which utilizes postCopyFrom:to: that is
defined in the same place. In change sets you can at least manually
reorder the methods. Monticello does it unpredictably so it may work for
one person and not for another (I wish MC would load methods in a
well-defined order).
To deal with this, you need to make a separate MC package version with
*just* the prerequisite method (in this case postCopyFrom:to:) and issue
an update.mcm for that precise version of the package; this will ensure
the updater loads that precise version of the package before going on to
load the version of the method that utilizes it. When there's a lot of
dependencies this is obviously not a very rewarding process...
Cheers,
- Andreas
More information about the Squeak-dev
mailing list
|