[squeak-dev] Class var order in Monticello (bogus dirty packages)
Bert Freudenberg
bert at freudenbergs.de
Wed Aug 12 09:41:20 UTC 2009
On 11.08.2009, at 20:11, Eliot Miranda wrote:
> On Tue, Aug 11, 2009 at 9:44 AM, Bert Freudenberg <bert at freudenbergs.de
> > wrote:
> On 11.08.2009, at 18:21, Eliot Miranda wrote:
>
> On Sun, Aug 9, 2009 at 4:36 PM, Andreas Raab <andreas.raab at gmx.de>
> wrote:
> Hi -
>
> I have noticed several times that Monticello sometimes reports a
> different order of class variables than the one that's in the image
> and I think I finally found out what causes it. The problem seems to
> be that the MCClassDefinition is constructed from a Set of class var
> names (i.e., Delay classVarNames => a Set(#TimerEventLoop
> #SuspendedDelays #TimingSemaphore #ActiveDelayStartTime #ActiveDelay
> #FinishedDelay #ScheduledDelay #RunTimerEventLoop #AccessProtect)
> derived from the class' classPool.
>
> The thing is, the order in that class pool can differ. When you add
> or remove class var names, the names can get shuffled around and
> there is no telling what the exact enumeration order will be. Once
> the order is different it's a real pain because Monticello will
> always report differences but without a way to correct the issue.
>
> I'm wondering what possible fixes might be. In particular
> considering that reordering the class var names will mark any
> packages dirty for the same reasons.
>
> The fix we implemented at Cadence was to sort the classVars array
> when initializing an MCClassDefinition, which has the advantage of
> being really simple, but the downside of producing false positives
> for packages that have been stored with unsorted class vars. But
> this isn't the full fix. One should also sort the pool n ames. Fix
> attached.
>
> I think this is a better approach than ignoring sort order when
> comparing because it mimics the treatment of class definitions in
> the system, where class var names and pool names are also sorted.
>
>
> It's not "better" but simply half of the solution, if we go by the
> "be generous on input, strict on output" rule. That is, always store
> sorted from now on, but accept unsorted (older) packages.
>
> Agreed :)
Fine. I dug out my fix for order-independent comparison from 2006,
added your fix to *both* versions of the initialize method, and
committed as Monticello-bf.316.
- Bert -
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20090812/10b3e076/attachment.htm
More information about the Squeak-dev
mailing list
|