<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Dec 29, 2013 at 5:28 PM, Tobias Pape <span dir="ltr">&lt;<a href="mailto:Das.Linux@gmx.de" target="_blank">Das.Linux@gmx.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hi<br>
<br>
[Below, a &quot;fix&quot; to remove those obsoletes…]<br>
<div class="im"><br>
On 29.12.2013, at 14:15, Frank Shearar &lt;<a href="mailto:frank.shearar@gmail.com">frank.shearar@gmail.com</a>&gt; wrote:<br>
<br>
&gt; On 29 December 2013 12:12, Tobias Pape &lt;<a href="mailto:Das.Linux@gmx.de">Das.Linux@gmx.de</a>&gt; wrote:<br>
&gt;&gt; Hi all,<br>
&gt;&gt;<br>
&gt;&gt; I just took the todays Trunk image (Squeak4.5-13148#712) (NameVersion-Update#CIJob)<br>
&gt;<br>
&gt; Ah, that&#39;s nice &amp; specific! Thanks!<br>
</div>(I wrote this mail prior to the other and hoped the order<br>
would stick)<br>
<div class="im"><br>
&gt; (Nit: we might as well not bother<br>
&gt; with update numbers, because our versioning is broken (*). The<br>
&gt; SqueakTrunk builds&#39; TrunkImage artifacts will have an &quot;update number&quot;<br>
&gt; hundreds lower than a &quot;full fat&quot; image.<br>
&gt;<br>
&gt; (*) It&#39;s broken because an update number doesn&#39;t map in any meaningful<br>
&gt; way to what&#39;s in the image. &quot;Update number&quot; just means &quot;the sum of all<br>
&gt; MC numbers of all packages in the latest update map that this image<br>
&gt; currently contains.&quot; If your Collections package is one ahead of trunk<br>
&gt; (because you have a local hack) while your Kernel package is one<br>
&gt; behind, you have _the same update number_.<br>
<br>
</div>Which is true.<br>
However, for the typically downloaded half-fat TrunkImage from FTP or jenkins,<br>
it is meaningful :)<br>
I think it is comparable to the local revision number in hg: Not meaningful<br>
around the globe but one can work with it in several scenarios.<br>
<div class="im"><br>
<br>
&gt;<br>
&gt;&gt; and ran<br>
&gt;&gt;        SystemNavigation default obsoleteBehaviors<br>
&gt;&gt; and got<br>
&gt;&gt;        {AnObsoleteBlueSmallLandColorTheme . AnObsoleteSmallLandColorTheme . AnObsoleteSmallLandColorTheme class . AnObsoleteBlueSmallLandColorTheme class . AnObsoleteToolBuilderTests class . AnObsoleteToolBuilderTests . AnObsoleteBindingTest class . AnObsoleteBindingTest}<br>

&gt;&gt;<br>
&gt;&gt; We should fix that.<br>
&gt;&gt; It breaks at least<br>
&gt;&gt;        Smalltalk unloadReloadablePackages<br>
&gt;<br>
&gt; It also manifests as failing tests:<br>
&gt; * <a href="http://build.squeak.org/job/SqueakTrunk/712/testReport/junit/Tests.Release/ReleaseTest/testNoObsoleteClasses/" target="_blank">http://build.squeak.org/job/SqueakTrunk/712/testReport/junit/Tests.Release/ReleaseTest/testNoObsoleteClasses/</a><br>

&gt; * <a href="http://build.squeak.org/job/SqueakTrunk/712/testReport/junit/Tests.Release/ReleaseTest/testUndeclared/" target="_blank">http://build.squeak.org/job/SqueakTrunk/712/testReport/junit/Tests.Release/ReleaseTest/testUndeclared/</a><br>

<br>
</div>Well..<br>
<div class="im"><br>
&gt;<br>
&gt;&gt; What is the best way?<br>
&gt;&gt; A postscript in a System Package change?<br>
&gt;<br>
&gt; I&#39;ve been hoping someone would tell me! But Chris told us that the<br>
&gt; SqueakTrunk base image&#39;s state is a little broken, and that he doesn&#39;t<br>
&gt; see these tests failing. That would be well worth verifying. If so,<br>
&gt; the solution is to hand-roll another base image for SqueakTrunk. I<br>
&gt; have a candidate image that I&#39;ve not quite finished preparing.<br>
&gt;<br>
&gt; As an aside, I think the reason the SqueakTrunk base image broke, at<br>
&gt; least in part, was caused by Nicolas and I adding new _necessary_<br>
&gt; packages to trunk. For instance, when I factored out<br>
&gt; ToolBuilder-Tests, the base image was told not to update packages it<br>
&gt; didn&#39;t have, so as not to reload unloaded packages (ST80, Universes,<br>
&gt; ...)... but that also meant it didn&#39;t get UpdateStream and<br>
&gt; ToolBuilder-Tests.<br>
<br>
<br>
</div>Ok. Sounds reasonable.<br>
Apart from that, I try to get the image in a state I can do<br>
&gt;&gt; unloadReloadablePackages<br>
[1]<br>
<br>
In that process I crashed the current cog vm several times[2]<br>
as well as other vms with out-of-memory issues.<br>
(You can try it:<br>
        SystemNavigation default obsoleteBehaviors chasePointers<br>
)<br>
Sadly,<br>
        SystemNavigation default obsoleteBehaviors explorePointers<br>
yields no meaningful output :(<br>
<br></blockquote><div>It seems PointersExplorer works on single objects, not a array of objects. So if you look at each item in the list of obsoletes you get valid results:</div><div><br></div><div>SystemNavigation default obsoleteBehaviors first explorePointers</div>
<div><br></div><div>Cheers,</div><div>Karl</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
Ok. Different approach. The color theme stuff.<br>
By clicking around I found, ColorTheme&#39;s CurrentTheme held unto<br>
AnObsoleteBlueSmallLandColorTheme. Hence:<br>
<br>
        SystemNavigation default obsoleteBehaviors size. &quot;8&quot;<br>
        ColorTheme current: nil.<br>
        ColorTheme current.<br>
        Behavior flushObsoleteSubclasses.<br>
        Smalltalk garbageCollect; garbageCollect.<br>
        SystemNavigation default obsoleteBehaviors size. &quot; 4&quot;<br>
<br>
So, 4 less, but the Menus look different now.<br>
<br>
Here, my approach on finding the remaining culprits.<br>
        [| haystack |<br>
        &quot;my pointer finder&quot;<br>
        haystack :=  [:needle | SystemNavigation default allObjectsSelect: [:obj | obj pointsTo: needle]].<br>
<br>
        &quot;First, onto the binding test.&quot;<br>
        (haystack value: SystemNavigation default obsoleteBehaviors last &quot; AnObsoleteBindingTest&quot;<br>
        ) in: [:stuff |<br>
          &quot;only 2nd and 3d seem interesting&quot;<br>
          (((stuff first: 3) last: 2) collect: [:needle2 | haystack value: needle2]) in: [:stuff2 |<br>
            &quot;first of 1st is interesting&quot;<br>
            (haystack value: stuff2 first first) in: [:stuff3 |<br>
              &quot;first is interesting&quot;<br>
              (haystack value: stuff3 first) &quot;there&#39;s an export...&quot; in: [:stuff4 |<br>
                (haystack value: stuff4 first)<br>
                &quot;Smalltalk Enviornment, ie Environment default !!&quot;<br>
        ]]]].<br>
<br>
        &quot;Ok, see if the culprit is there&quot;<br>
        [ |assocs |<br>
        assocs := (Environment default exports instVarNamed: &#39;namespace&#39;) associationsSelect: [:assoc |<br>
          assoc value isBehavior<br>
            ifTrue: [assoc value isObsolete]<br>
            ifFalse: [false]]. &quot;an IdentityDictionary(#BindingTest-&gt;AnObsoleteBindingTest )&quot;<br>
<br>
        assocs do: [:a | Environment default exports forgetName: a key]<br>
        ] value.<br>
<br>
        Behavior flushObsoleteSubclasses.<br>
        Smalltalk garbageCollect; garbageCollect.<br>
        SystemNavigation default obsoleteBehaviors size. &quot; 2&quot;<br>
<br>
        &quot;Ok, 2 to go&quot;<br>
        &quot;Onto the toolbuildertest&quot;<br>
        (haystack value: SystemNavigation default obsoleteBehaviors first &quot;AnObsoleteToolBuilderTests&quot;)<br>
        in: [:stuff5 |<br>
                stuff5 second &quot; SUnitToolBuilderTests class&quot; in: [:suspicious |<br>
                        suspicious superclass &quot; AnObsoleteToolBuilderTests class&quot;<br>
                        &quot;Gotcha!&quot;] ].<br>
        &quot;I don&#39;t know... redo?&quot;<br>
<br>
        &quot;Redo.. we add artificial instvar here to assure new class.&quot;<br>
        ToolBuilderTests subclass: #SUnitToolBuilderTests<br>
                instanceVariableNames: &#39;foo&#39;<br>
                classVariableNames: &#39;&#39;<br>
                poolDictionaries: &#39;&#39;<br>
                category: &#39;SUnitGUI-ToolBuilder&#39;.<br>
        ToolBuilderTests subclass: #SUnitToolBuilderTests<br>
                instanceVariableNames: &#39;&#39;<br>
                classVariableNames: &#39;&#39;<br>
                poolDictionaries: &#39;&#39;<br>
                category: &#39;SUnitGUI-ToolBuilder&#39;.<br>
<br>
        Behavior flushObsoleteSubclasses.<br>
        Smalltalk garbageCollect; garbageCollect.<br>
        SystemNavigation default obsoleteBehaviors size. &quot; 0&quot;<br>
Yay!<br>
<br>
I attached a better Script to handle this and on the way created the<br>
name uncle class :P<br>
<br>
Shall I make a System revision with post script?<br>
<br>
Best<br>
        -Tobias<br>
<br>
<br>
<br>
[1] Nit: unloadAllKnownPackages is gone forever, right?<br>
[2] See vm-dev<br>
<br>
<br><br>
<br><br>
<br></blockquote></div><br></div></div>