[squeak-dev] The Trunk: System-ul.932.mcz

Eliot Miranda eliot.miranda at gmail.com
Tue Mar 14 00:06:38 UTC 2017


Hi Levente,

On Mon, Mar 13, 2017 at 4:44 PM, Levente Uzonyi <leves at caesar.elte.hu>
wrote:

> Hi Eliot,
>
> I ran the tests 3 times and haven't seen any new test failures or errors.
> However there are some other changes in the pack unrelated to
> SortedCollection, which I couldn't test on platforms other than Linux, but
> may behave differently on other platforms (e.g. changes in Files).
>

First of all let me apologise; my stats were wrong.  I see
    4527 run, 4383 passes, 106 expected failures, 26 failures, 12 errors, 0
unexpected passes
before whack-a-mole and
    4575 run, 4308 passes, 108 expected failures, 26 failures, 133 errors,
0 unexpected passes
after.  And this is on Mac OS X using the 64-bit VM and image.  Here's the
pre-whack-a-mole full report



> Can you send me the list of failures and errors you see?


Pre whack-a-mole
failures: {AllocationTest>>#testOutOfMemorySignal .
ClassVarScopeTest>>#testDefinedClassMethodInGrandchild .
ClassVarScopeTest>>#testDefinedInstanceMethodInChild .
ClassVarScopeTest>>#testDefinedInstanceMethodInGrandchild .
ClassVarScopeTest>>#testInheritedClassMethodInGrandchild .
ClassVarScopeTest>>#testInheritedInstanceMethodInGrandchild .
DateAndTimeLeapTest>>#testAsSeconds .
DecompilerTests>>#testDecompilerInClassesENtoEZ .
DecompilerTests>>#testDecompilerInClassesPAtoPM .
IslandVMTweaksTestCase>>#testForgivingPrims .
MorphicUIManagerTest>>#testShowAllBinParts .
MultiByteFileStreamTest>>#testLineEndConversion .
PackageDependencyTest>>#testEtoys . PackageDependencyTest>>#testMorphic .
PackageDependencyTest>>#testSound . PackageDependencyTest>>#testSystem .
ReleaseTest>>#testClassesSystemCategory .
ReleaseTest>>#testMethodsWithUnboundGlobals .
ReleaseTest>>#testNoObsoleteClasses . ReleaseTest>>#testUndeclared .
SocketTest>>#testSocketReuse . SocketTest>>#testUDP .
UnixProcessAccessorTestCase>>#testRedirectStdOutTo .
UnixProcessTestCase>>#testCatAFile . UnixProcessTestCase>>#testRunCommand .
WebClientServerTest>>#testListenOnInterface}

errors: {BitmapStreamTests>>#testMatrixTransform2x3WithImageSegment .
BitmapStreamTests>>#testShortIntegerArrayWithImageSegment .
BitmapStreamTests>>#testShortPointArrayWithImageSegment .
BitmapStreamTests>>#testShortRunArrayWithImageSegment .
BitmapStreamTests>>#testWordArrayWithImageSegment .
DecompilerTests>>#testDecompilerInClassesSAtoSM .
LangEnvBugs>>#testIsFontAvailable . LangEnvBugs>>#testIsFontAvailable .
LocaleTest>>#testIsFontAvailable . SqueakSSLTest>>#testSSLSockets .
SqueakSSLTest>>#testSocketAccept . SqueakSSLTest>>#testSocketConnect}

Post whack-a-mole
failures: {AllocationTest>>#testOutOfMemorySignal .
ClassVarScopeTest>>#testDefinedInstanceMethodInChild .
ClassVarScopeTest>>#testDefinedInstanceMethodInGrandchild .
ClassVarScopeTest>>#testInheritedClassMethodInGrandchild .
ClassVarScopeTest>>#testInheritedInstanceMethodInGrandchild .
DateAndTimeLeapTest>>#testAsSeconds .
DecompilerTests>>#testDecompilerInClassesENtoEZ .
DecompilerTests>>#testDecompilerInClassesPAtoPM .
DecompilerTests>>#testDecompilerInClassesTAtoTM .
MorphicUIManagerTest>>#testShowAllBinParts .
MultiByteFileStreamTest>>#testLineEndConversion .
PackageDependencyTest>>#testEtoys . PackageDependencyTest>>#testMorphic .
PackageDependencyTest>>#testSUnitGUI . PackageDependencyTest>>#testSound .
PackageDependencyTest>>#testSystem . PackageDependencyTest>>#testTools .
ReleaseTest>>#testClassesSystemCategory .
ReleaseTest>>#testMethodsWithUnboundGlobals .
ReleaseTest>>#testNoObsoleteClasses .
ReleaseTest>>#testSuperSubclassReferences . ReleaseTest>>#testUndeclared .
SocketTest>>#testSocketReuse . SocketTest>>#testUDP .
UnixProcessTestCase>>#testCatAFile .
WebClientServerTest>>#testListenOnInterface}

errors: {BitmapStreamTests>>#testMatrixTransform2x3WithImageSegment .
BitmapStreamTests>>#testShortIntegerArrayWithImageSegment .
BitmapStreamTests>>#testShortPointArrayWithImageSegment .
BitmapStreamTests>>#testShortRunArrayWithImageSegment .
BitmapStreamTests>>#testWordArrayWithImageSegment .
BrowserTest>>#testFileOutMessageCategories .
DecompilerTests>>#testDecompilerInClassesSAtoSM .
FileDirectoryTest>>#testAttemptExistenceCheckWhenFile .
FileDirectoryTest>>#testDirectoryExists .
FileDirectoryTest>>#testDirectoryExistsWhenLikeNamedFileExists .
FileDirectoryTest>>#testNonExistentDirectory .
FileDirectoryTest>>#testOldFileOrNoneNamed .
FileListTest>>#testServicesForFileEnding .
FileStreamTest>>#testCachingNextChunkPut .
FileStreamTest>>#testCachingNextChunkPut .
FileStreamTest>>#testDetectFileDo . FileStreamTest>>#testFileTruncation .
FileStreamTest>>#testFileTruncation .
FileStreamTest>>#testNextChunkOutOfBounds .
FileStreamTest>>#testNextChunkOutOfBounds . FileStreamTest>>#testNextLine .
FileStreamTest>>#testPositionPastEndIsAtEnd .
FileStreamTest>>#testReadIntoStartingAtCount .
LangEnvBugs>>#testIsFontAvailable . LangEnvBugs>>#testIsFontAvailable .
LocaleTest>>#testIsFontAvailable .
MCDictionaryRepositoryTest>>#testAddAndLoad .
MCDictionaryRepositoryTest>>#testIncludesName .
MCDictionaryRepositoryTest>>#testStoreAndLoad .
MCDirectoryRepositoryTest>>#testAddAndLoad .
MCDirectoryRepositoryTest>>#testIncludesName .
MCDirectoryRepositoryTest>>#testStoreAndLoad .
MCMczInstallerTest>>#testInstallFromFile .
MCMczInstallerTest>>#testInstallFromFile .
MCMczInstallerTest>>#testInstallFromStream .
MCWorkingCopyTest>>#testAncestorMerge . MCWorkingCopyTest>>#testBackport .
MCWorkingCopyTest>>#testDoubleRepeatedMerge .
MCWorkingCopyTest>>#testMergeIntoImageWithNoChanges .
MCWorkingCopyTest>>#testMergeIntoUnmodifiedImage .
MCWorkingCopyTest>>#testOptimizedLoad .
MCWorkingCopyTest>>#testRedundantMerge .
MCWorkingCopyTest>>#testRepeatedMerge .
MCWorkingCopyTest>>#testSelectiveBackport .
MCWorkingCopyTest>>#testSimpleMerge .
MCWorkingCopyTest>>#testSnapshotAndLoad .
MultiByteFileStreamTest>>#testAsciiBackChunk .
MultiByteFileStreamTest>>#testBinaryUpTo .
MultiByteFileStreamTest>>#testLineEnding .
MultiByteFileStreamTest>>#testLineEndingChunk .
MultiByteFileStreamTest>>#testLineEndingWithWideStrings .
MultiByteFileStreamTest>>#testNextLine .
MultiByteFileStreamTest>>#testNextPutAllStartingAt .
MultiByteFileStreamTest>>#testNonAsciiBackChunk .
PNGReadWriterTest>>#test16Bit . PNGReadWriterTest>>#test16BitDisplay .
PNGReadWriterTest>>#test16BitReversed . PNGReadWriterTest>>#test1Bit .
PNGReadWriterTest>>#test1BitDisplay . PNGReadWriterTest>>#test1BitReversed
. PNGReadWriterTest>>#test2Bit . PNGReadWriterTest>>#test2BitDisplay .
PNGReadWriterTest>>#test2BitReversed . PNGReadWriterTest>>#test32Bit .
PNGReadWriterTest>>#test32BitDisplay .
PNGReadWriterTest>>#test32BitReversed . PNGReadWriterTest>>#test4Bit .
PNGReadWriterTest>>#test4BitDisplay . PNGReadWriterTest>>#test4BitReversed
. PNGReadWriterTest>>#test8Bit . PNGReadWriterTest>>#test8BitDisplay .
PNGReadWriterTest>>#test8BitReversed . PNGReadWriterTest>>#testAlphaCoding
. PNGReadWriterTest>>#testBlack16 . PNGReadWriterTest>>#testBlack32 .
PNGReadWriterTest>>#testBlack8 . PNGReadWriterTest>>#testBlue16 .
PNGReadWriterTest>>#testBlue32 . PNGReadWriterTest>>#testBlue8 .
PNGReadWriterTest>>#testGreen16 . PNGReadWriterTest>>#testGreen32 .
PNGReadWriterTest>>#testGreen8 . PNGReadWriterTest>>#testRed16 .
PNGReadWriterTest>>#testRed32 . PNGReadWriterTest>>#testRed8 .
SqueakSSLTest>>#testSSLSockets . SqueakSSLTest>>#testSocketAccept .
SqueakSSLTest>>#testSocketConnect .
SystemChangeFileTest>>#testCategoryAdded .
SystemChangeFileTest>>#testCategoryAdded .
SystemChangeFileTest>>#testCategoryAddedBefore .
SystemChangeFileTest>>#testCategoryAddedBefore .
SystemChangeFileTest>>#testCategoryRemoved .
SystemChangeFileTest>>#testCategoryRemoved .
SystemChangeFileTest>>#testCategoryRenamed .
SystemChangeFileTest>>#testCategoryRenamed .
SystemChangeFileTest>>#testClassAdded .
SystemChangeFileTest>>#testClassAdded .
SystemChangeFileTest>>#testClassCommented .
SystemChangeFileTest>>#testClassCommented .
SystemChangeFileTest>>#testClassModified .
SystemChangeFileTest>>#testClassModified .
SystemChangeFileTest>>#testClassRecategorized .
SystemChangeFileTest>>#testClassRecategorized .
SystemChangeFileTest>>#testClassRemoved .
SystemChangeFileTest>>#testClassRemoved .
SystemChangeFileTest>>#testClassRenamed .
SystemChangeFileTest>>#testClassRenamed .
SystemChangeFileTest>>#testExpressionDoIt .
SystemChangeFileTest>>#testExpressionDoIt .
SystemChangeFileTest>>#testMethodAdded .
SystemChangeFileTest>>#testMethodAdded .
SystemChangeFileTest>>#testMethodModified .
SystemChangeFileTest>>#testMethodModified .
SystemChangeFileTest>>#testMethodRecategorized .
SystemChangeFileTest>>#testMethodRecategorized .
SystemChangeFileTest>>#testMethodRemoved .
SystemChangeFileTest>>#testMethodRemoved .
SystemChangeFileTest>>#testProtocolAdded .
SystemChangeFileTest>>#testProtocolAdded .
SystemChangeFileTest>>#testProtocolDefault .
SystemChangeFileTest>>#testProtocolDefault .
SystemChangeFileTest>>#testProtocolRemoved .
SystemChangeFileTest>>#testProtocolRemoved .
SystemChangeFileTest>>#testProtocolRenamed .
SystemChangeFileTest>>#testProtocolRenamed .
TraitFileOutTest>>#testCondenseChanges .
TraitFileOutTest>>#testFileOutCategory .
TraitFileOutTest>>#testFileOutTrait .
UnixProcessAccessorTestCase>>#testDupTo .
UnixProcessAccessorTestCase>>#testRedirectStdOutTo .
UnixProcessTestCase>>#testCatFromFileToFiles .
UnixProcessTestCase>>#testRunCommand}

And all those duplications confuse me.  And the sources seem to have been
killed by running the tests.

HTH



>
>
> Levente
>
>
> On Mon, 13 Mar 2017, Eliot Miranda wrote:
>
> Hi Levente,
>>     the SortedCollection whack-a-mole [ :-) :-) ] update appears to have
>> caused a significant uptick in Squeak trunk test suite errors, from about
>> 26 to over 80.  Are you aware of this?  Are you addressing
>> the errors?
>>
>> I was a little bit inconvenienced by this because I was testing Slang
>> changes to the VM and mistook these errors as evidence of bugs in my Slang
>> changes.  That's life and I'm happy to accept the situation.
>> But I would like to see the errors come back down to around 26 or less :-)
>>
>> Cheers
>> Eliot
>>
>> On Mon, Mar 13, 2017 at 8:00 AM, <commits at source.squeak.org> wrote:
>>       Levente Uzonyi uploaded a new version of System to project The
>> Trunk:
>>       http://source.squeak.org/trunk/System-ul.932.mcz
>>
>>       ==================== Summary ====================
>>
>>       Name: System-ul.932
>>       Author: ul
>>       Time: 13 March 2017, 3:10:17.453603 pm
>>       UUID: 7a305614-9a4b-47f8-a68f-79fcf6f90a80
>>       Ancestors: System-eem.931
>>
>>       - SortedCollection Whack-a-mole
>>       - introduced #classVarNames and #classInstVarNames in PseudoClass,
>> because they had senders
>>       - removed #startTimerInterruptWatcher from messages to keep lists
>>
>>       =============== Diff against System-eem.931 ===============
>>
>>       Item was changed:
>>         ----- Method: ChangeSet class>>traitsOrder: (in category
>> 'fileIn/Out') -----
>>         traitsOrder: aCollection
>>               "Answer an OrderedCollection. The traits
>>               are ordered so they can be filed in."
>>
>>       +       ^aCollection sorted: [:t1 :t2 |
>>       -       |  traits |
>>       -       traits := aCollection asSortedCollection: [:t1 :t2 |
>>                       (t1 isBaseTrait and: [t1 classTrait == t2]) or: [
>>                               (t2 traitComposition allTraits includes:
>> t1) or: [
>>       +                               (t1 traitComposition allTraits
>> includes: t2) not]]]!
>>       -                               (t1 traitComposition allTraits
>> includes: t2) not]]].
>>       -       ^traits asArray!
>>
>>       Item was changed:
>>         ----- Method: ChangeSet>>changedMessageList (in category 'method
>> changes') -----
>>         changedMessageList
>>               "Used by a message set browser to access the list view
>> information."
>>
>>               | messageList |
>>               messageList := OrderedCollection new.
>>               changeRecords associationsDo: [:clAssoc | |
>> classNameInParts classNameInFull |
>>                       classNameInFull := clAssoc key asString.
>>                       classNameInParts := classNameInFull findTokens: ' '.
>>
>>                       (clAssoc value allChangeTypes includes: #comment)
>> ifTrue:
>>                               [messageList add:
>>                                       (MethodReference new
>>                                               setClassSymbol:
>> classNameInParts first asSymbol
>>                                               classIsMeta: false
>>                                               methodSymbol: #Comment
>>                                               stringVersion:
>> classNameInFull, ' Comment')].
>>
>>                       clAssoc value methodChangeTypes associationsDo:
>> [:mAssoc |
>>                               (#(remove addedThenRemoved) includes:
>> mAssoc value) ifFalse:
>>                                       [messageList add:
>>                                               (MethodReference new
>>                                                       setClassSymbol:
>> classNameInParts first asSymbol
>>                                                       classIsMeta:
>> classNameInParts size > 1
>>                                                       methodSymbol:
>> mAssoc key
>>                                                       stringVersion:
>> classNameInFull, ' ' , mAssoc key)]]].
>>       +       ^ messageList sort!
>>       -       ^ messageList asSortedArray!
>>
>>       Item was changed:
>>         ----- Method: ChangeSet>>checkForUncommentedClasses (in category
>> 'fileIn/Out') -----
>>         checkForUncommentedClasses
>>               "Check to see if any classes involved in this change set do
>> not have class comments.  Open up a browser showing all such classes."
>>
>>               | aList |
>>               aList := self changedClasses
>>                       select:
>>                               [:aClass | aClass theNonMetaClass
>> organization classComment isEmptyOrNil]
>>                       thenCollect:
>>                               [:aClass  | aClass theNonMetaClass name].
>>
>>               aList size > 0
>>                       ifFalse:
>>                               [^ self inform: 'All classes involved in
>> this change set have class comments']
>>                       ifTrue:
>>       +                       [ToolSet openClassListBrowser: aList asSet
>> sorted title: 'Classes in Change Set ', self name, ': classes that lack
>> class comments']!
>>       -                       [ToolSet openClassListBrowser: aList asSet
>> asSortedArray title: 'Classes in Change Set ', self name, ': classes that
>> lack class comments']!
>>
>>       Item was changed:
>>         ----- Method: ChangeSet>>fileOutOn: (in category 'fileIn/Out')
>> -----
>>         fileOutOn: stream
>>               "Write out all the changes the receiver knows about"
>>
>>               | classList traits classes traitList list |
>>               (self isEmpty and: [stream isKindOf: FileStream])
>>                       ifTrue: [self inform: 'Warning: no changes to file
>> out'].
>>
>>               traits := self changedClasses reject: [:each | each
>> isBehavior].
>>               classes := self changedClasses select: [:each | each
>> isBehavior].
>>               traitList := self class traitsOrder: traits
>> asOrderedCollection.
>>               classList := self class superclassOrder: classes
>> asOrderedCollection.
>>               list := OrderedCollection new
>>                       addAll: traitList;
>>                       addAll: classList;
>>                       yourself.
>>
>>               "First put out rename, max classDef and comment changes."
>>               list do: [:aClass | self fileOutClassDefinition: aClass on:
>> stream].
>>
>>               "Then put out all the method changes"
>>               list do: [:aClass | self fileOutChangesFor: aClass on:
>> stream].
>>
>>               "Finally put out removals, final class defs and
>> reorganization if any"
>>               list reverseDo: [:aClass | self fileOutPSFor: aClass on:
>> stream].
>>
>>       +       self classRemoves sort do:
>>       -       self classRemoves asSortedCollection do:
>>                       [:aClassName | stream nextChunkPut: 'Smalltalk
>> removeClassNamed: #', aClassName; cr].!
>>
>>       Item was changed:
>>         ----- Method: InternalTranslator>>fileOutOn:keys:withBOM: (in
>> category 'fileIn/fileOut') -----
>>         fileOutOn: aStream keys: keys withBOM: bomFlag
>>               "self current fileOutOn: Transcript. Transcript endEntry"
>>               self fileOutHeaderOn: aStream withBOM: bomFlag.
>>               (keys
>>       +               ifNil: [generics keys sort])
>>       -               ifNil: [generics keys asSortedCollection])
>>                       do: [:key | self
>>                                       nextChunkPut: (generics
>> associationAt: key)
>>                                       on: aStream].
>>               keys
>>                       ifNil: [self untranslated
>>                                       do: [:each | self nextChunkPut:
>> each -> '' on: aStream]].
>>               aStream nextPut: $!!;
>>                        cr!
>>
>>       Item was changed:
>>         ----- Method: MczInstaller>>install (in category 'installation')
>> -----
>>         install
>>       +
>>       -       | sources |
>>               zip := ZipArchive new.
>>               zip readFrom: stream.
>>               self checkDependencies ifFalse: [^false].
>>               self recordVersionInfo.
>>       +       (zip membersMatching: 'snapshot/*')
>>       +               sort: [:a :b | a fileName < b fileName];
>>       +               do: [:src | self installMember: src].!
>>       -       sources := (zip membersMatching: 'snapshot/*')
>>       -                               asSortedCollection: [:a :b | a
>> fileName < b fileName].
>>       -       sources do: [:src | self installMember: src].!
>>
>>       Item was changed:
>>         ----- Method: Preferences class>>giveHelpWithPreferences (in
>> category 'support') -----
>>         giveHelpWithPreferences
>>               "Open up a workspace with explanatory info in it about
>> Preferences"
>>
>>               | aString |
>>               aString := String streamContents: [:aStream |
>>                       aStream nextPutAll:
>>
>>         'Many aspects of the system are governed by the settings of
>> various "Preferences".
>>
>>         Click on any of brown tabs at the top of the panel to see all the
>> preferences in that category.
>>         Or type in to the box above the Search button, then hit Search,
>> and all Preferences matching whatever you typed in will appear in the
>> "search results" category.  A preference is considered to
>>       match your search if either its name matches the characters *or* if
>> anything in the balloon help provided for the preferences matches the
>> search text.
>>
>>         To find out more about any particular Preference, hold the mouse
>> over it for a moment and balloon help will appear.  Also, a complete list
>> of all the Preferences, with documentation for each, is
>>       included below.
>>
>>         Preferences whose names are in shown in bold in the Preferences
>> Panel are designated as being allowed to vary from project to project;
>> those whose name are not in bold are "global", which is to
>>       say, they apply equally whatever project you are in.
>>
>>         Click on the name of any preference to get a menu which allows
>> you to *change* whether the preference should vary from project to project
>> or should be global, and also allows you to browse all
>>       the senders of the preference, and to discover all the categories
>> under which the preference has been classified, and to be handed a button
>> that you can drop wherever you please that will control
>>       the preference.
>>
>>         If you like all your current Preferences settings, you may wish
>> to hit the "Save Current Settings as my Personal Preferences" button.  Once
>> you have done that, you can at any point in the future
>>       hit "Restore my Personal Preferences" and all your saved settings
>> will get restored immediately.
>>
>>         Also, you can use "themes" to set multiple preferences all at
>> once; click on the "change theme..." button in the Squeak flap or in the
>> Preferences panel, or seek out the themes item in the
>>       Appearance menu.' translated.
>>
>>               aStream cr; cr; nextPutAll: '-----------------------------
>> ------------------------------------';
>>                       cr; cr; nextPutAll:  'Alphabetical listing of all
>> Preferences' translated; cr; cr.
>>       +    (Preferences allPreferences sort: [:a :b | a name < b name])
>> do:
>>       -    (Preferences allPreferences asSortedCollection: [:a :b | a
>> name < b name]) do:
>>               [:pref | | aHelpString |
>>                       aStream nextPutAll: pref name; cr.
>>                       aHelpString := pref helpString translated.
>>                       (aHelpString beginsWith: pref name) ifTrue:
>>                               [aHelpString := aHelpString copyFrom: (pref
>> name size ) to: aHelpString size].
>>                       aHelpString := (aHelpString copyReplaceAll: String
>> cr with: ' ')  copyWithout: Character tab.
>>                       aStream nextPutAll: aHelpString capitalized.
>>                       (aHelpString isEmpty or: [aHelpString last == $.])
>> ifFalse: [aStream nextPut: $.].
>>                 aStream cr; cr]].
>>
>>               UIManager default edit: aString label: 'About Preferences'
>> translated
>>
>>         "Preferences giveHelpWithPreferences"!
>>
>>       Item was changed:
>>         ----- Method: Project class>>allNames (in category 'utilities')
>> -----
>>         allNames
>>       +
>>       +       ^(self allProjects collect: [:p | p name]) sort: [:n1 :n2 |
>> n1 caseInsensitiveLessOrEqual: n2]!
>>       -       ^ (self allProjects collect: [:p | p name])
>> asSortedCollection: [:n1 :n2 | n1 asLowercase < n2 asLowercase]!
>>
>>       Item was changed:
>>         ----- Method: Project class>>allNamesAndProjects (in category
>> 'utilities') -----
>>         allNamesAndProjects
>>       +
>>       +       ^(self allProjects
>>       +               sorted: [ :p1 :p2 | p1 name
>> caseInsensitiveLessOrEqual: p2 name ])
>>       +               replace: [ :aProject | Array with: aProject name
>> with: aProject ]!
>>       -       ^ (self allProjects asSortedCollection: [:p1 :p2 | p1 name
>> asLowercase < p2 name asLowercase]) collect:
>>       -               [:aProject | Array with: aProject name with:
>> aProject]!
>>
>>       Item was changed:
>>         ----- Method: Project class>>sweep: (in category 'squeaklet on
>> server') -----
>>         sweep: aServerDirectory
>>               | repository list parts ind entry projectName versions |
>>               "On the server, move all but the three most recent versions
>> of each Squeaklet to a folder called 'older'"
>>               "Project sweep: ((ServerDirectory serverNamed:
>> 'DaniOnJumbo') clone
>>                                       directory:
>> '/vol0/people/dani/Squeaklets/2.7')"
>>
>>               "Ensure the 'older' directory"
>>               (aServerDirectory includesKey: 'older')
>>                       ifFalse: [aServerDirectory createDirectory:
>> 'older'].
>>               repository := aServerDirectory clone directory:
>> aServerDirectory directory, '/older'.
>>
>>               "Collect each name, and decide on versions"
>>               list := aServerDirectory fileNames.
>>               list isString ifTrue: [^ self inform: 'server is
>> unavailable' translated].
>>       +       list sort.
>>       -       list := list asSortedCollection asOrderedCollection.
>>               parts := list collect: [:en | Project parseProjectFileName:
>> en].
>>               parts := parts select: [:en | en third = 'pr'].
>>               ind := 1.
>>               [entry := list at: ind.
>>                       projectName := entry first asLowercase.
>>                       versions := OrderedCollection new.  versions add:
>> entry.
>>                       [(ind := ind + 1) > list size
>>                               ifFalse: [(parts at: ind) first asLowercase
>> = projectName
>>                                       ifTrue: [versions add: (parts at:
>> ind).  true]
>>                                       ifFalse: [false]]
>>                               ifTrue: [false]] whileTrue.
>>                       aServerDirectory moveYoungest: 3 in: versions to:
>> repository.
>>                       ind > list size] whileFalse.
>>         !
>>
>>       Item was added:
>>       + ----- Method: PseudoClass>>classInstVarNames (in category
>> 'accessing') -----
>>       + classInstVarNames
>>       +
>>       +       self realClass ifNotNil: [ :realClass | ^realClass
>> instVarNames ].
>>       +       ^#()!
>>
>>       Item was added:
>>       + ----- Method: PseudoClass>>classVarNames (in category
>> 'accessing') -----
>>       + classVarNames
>>       +
>>       +       self realClass ifNotNil: [ :realClass | ^realClass
>> classVarNames ].
>>       +       ^#()!
>>
>>       Item was changed:
>>         ----- Method: SmalltalkImage>>presumedSentMessages (in category
>> 'shrinking') -----
>>         presumedSentMessages   | sent |
>>         "Smalltalk presumedSentMessages"
>>
>>               "The following should be preserved for doIts, etc"
>>               sent := IdentitySet new.
>>               #(compactSymbolTable rebuildAllProjects
>>                       browseAllSelect:  lastRemoval
>>                       scrollBarValue: vScrollBarValue:
>> scrollBarMenuButtonPressed:
>>                       withSelectionFrom:  to: removeClassNamed:
>>                       dragon: hilberts: mandala: web test3 factorial
>> tinyBenchmarks benchFib
>>                       newDepth: restoreAfter: zapAllMethods
>> obsoleteClasses
>>                       removeAllUnSentMessages abandonSources
>> removeUnreferencedKeys
>>                       reclaimDependents zapOrganization condenseChanges
>> browseObsoleteReferences
>>                       subclass:instanceVariableNames
>> :classVariableNames:poolDictionaries:category:
>>                       methodsFor:stamp: methodsFor:stamp:prior:
>> instanceVariableNames:
>>       +               unusedClasses) do:
>>       -               startTimerInterruptWatcher unusedClasses) do:
>>                       [:sel | sent add: sel].
>>               "The following may be sent by perform: in dispatchOnChar..."
>>               Smalltalk at: #ParagraphEditor ifPresent: [:paragraphEditor
>> |
>>                       (paragraphEditor classPool at: #CmdActions) asSet
>> do:
>>                               [:sel | sent add: sel].
>>                       (paragraphEditor classPool at: #ShiftCmdActions)
>> asSet do:
>>                               [:sel | sent add: sel]].
>>               ^ sent!
>>
>>       Item was changed:
>>         ----- Method: SmalltalkImage>>removeAllUnSentMessages (in
>> category 'shrinking') -----
>>         removeAllUnSentMessages
>>               "Smalltalk removeAllUnSentMessages"
>>               "[Smalltalk unusedClasses do: [:c | (Smalltalk at: c)
>> removeFromSystem].
>>               Smalltalk removeAllUnSentMessages > 0] whileTrue."
>>               "Remove all implementations of unsent messages."
>>               | sels n |
>>               sels := self systemNavigation allUnSentMessages.
>>               "The following should be preserved for doIts, etc"
>>               "needed even after #majorShrink is pulled"
>>       +       #(#compactSymbolTable #rebuildAllProjects
>> #browseAllSelect:  #lastRemoval #scrollBarValue: vScrollBarValue:
>> #scrollBarMenuButtonPressed: #withSelectionFrom: #to: #removeClassNamed:
>>       #dragon: #hilberts: #mandala: #web #test3 #factorial
>> #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods
>> #obsoleteClasses #removeAllUnSentMessages #abandonSources
>>       #removeUnreferencedKeys #reclaimDependents #zapOrganization
>> #condenseChanges #browseObsoleteReferences #subclass:instanceVariableName
>> s:classVariableNames:poolDictionaries:category:
>>       #methodsFor:stamp: #methodsFor:stamp:prior: #instanceVariableNames:
>> #unusedClasses )
>>       -       #(#compactSymbolTable #rebuildAllProjects
>> #browseAllSelect:  #lastRemoval #scrollBarValue: vScrollBarValue:
>> #scrollBarMenuButtonPressed: #withSelectionFrom: #to: #removeClassNamed:
>>       #dragon: #hilberts: #mandala: #web #test3 #factorial
>> #tinyBenchmarks #benchFib #newDepth: #restoreAfter: #zapAllMethods
>> #obsoleteClasses #removeAllUnSentMessages #abandonSources
>>       #removeUnreferencedKeys #reclaimDependents #zapOrganization
>> #condenseChanges #browseObsoleteReferences #subclass:instanceVariableName
>> s:classVariableNames:poolDictionaries:category:
>>       #methodsFor:stamp: #methodsFor:stamp:prior: #instanceVariableNames:
>> #startTimerInterruptWatcher #unusedClasses )
>>                       do: [:sel | sels
>>                                       remove: sel
>>                                       ifAbsent: []].
>>               "The following may be sent by perform: in dispatchOnChar..."
>>               (Smalltalk at: #ParagraphEditor) ifNotNilDo:
>> [:paragraphEditor |
>>                       (paragraphEditor classPool at: #CmdActions) asSet
>>                               do: [:sel | sels
>>                                               remove: sel
>>                                               ifAbsent: []].
>>                       (paragraphEditor classPool at: #ShiftCmdActions)
>> asSet
>>                               do: [:sel | sels
>>                                               remove: sel
>>                                               ifAbsent: []]].
>>               sels size = 0
>>                       ifTrue: [^ 0].
>>               n := 0.
>>               self systemNavigation
>>                       allBehaviorsDo: [:x | n := n + 1].
>>               'Removing ' , sels size printString , ' messages . . .'
>>                       displayProgressFrom: 0
>>                       to: n
>>                       during: [:bar |
>>                               n := 0.
>>                               self systemNavigation
>>                                       allBehaviorsDo: [:class |
>>                                               bar value: (n := n + 1).
>>                                               sels
>>                                                       do: [:sel | class
>> basicRemoveSelector: sel]]].
>>               ^ sels size!
>>
>>       Item was changed:
>>         ----- Method: SpaceTally>>compareTallyIn:to: (in category
>> 'fileOut') -----
>>         compareTallyIn: beforeFileName to: afterFileName
>>               "SpaceTally new compareTallyIn: 'tally' to: 'tally2'"
>>
>>               | answer s beforeDict a afterDict allKeys |
>>               beforeDict := Dictionary new.
>>               s := FileDirectory default fileNamed: beforeFileName.
>>               [s atEnd] whileFalse: [
>>                       a := Array readFrom: s nextLine.
>>                       beforeDict at: a first put: a allButFirst.
>>               ].
>>               s close.
>>               afterDict := Dictionary new.
>>               s := FileDirectory default fileNamed: afterFileName.
>>               [s atEnd] whileFalse: [
>>                       a := Array readFrom: s nextLine.
>>                       afterDict at: a first put: a allButFirst.
>>               ].
>>               s close.
>>               answer := WriteStream on: String new.
>>       +       allKeys := (Set new addAll: beforeDict keys; addAll:
>> afterDict keys; yourself) sorted.
>>       -       allKeys := (Set new addAll: beforeDict keys; addAll:
>> afterDict keys; yourself) asSortedCollection.
>>               allKeys do: [ :each |
>>                       | before after diff |
>>                       before := beforeDict at: each ifAbsent: [#(0 0 0)].
>>                       after := afterDict at: each ifAbsent: [#(0 0 0)].
>>                       diff := before with: after collect: [ :vBefore
>> :vAfter | vAfter - vBefore].
>>                       diff = #(0 0 0) ifFalse: [
>>                               answer nextPutAll: each,'  ',diff
>> printString; cr.
>>                       ].
>>               ].
>>               StringHolder new contents: answer contents; openLabel:
>> 'space diffs'.
>>
>>
>>
>>         !
>>
>>       Item was changed:
>>         ----- Method: SystemNavigation>>allMethodsInCategory: (in
>> category 'browse') -----
>>         allMethodsInCategory: category
>>               | aCollection |
>>       +       aCollection := OrderedCollection new.
>>       -       aCollection := SortedCollection new.
>>               Cursor wait showWhile:
>>                       [self allBehaviorsDo:
>>                               [:x | (x allMethodsInCategory: category) do:
>>                                       [:sel | aCollection add: x name , '
>> ' , sel]]].
>>       +       ^aCollection sort.
>>       -       ^aCollection.
>>               !
>>
>>       Item was changed:
>>         ----- Method: SystemNavigation>>allSelectorsWithAnyImplementorsIn:
>> (in category 'query') -----
>>         allSelectorsWithAnyImplementorsIn: selectorList
>>               "Answer the subset of the given list which represent method
>> selectors
>>               which have at least one implementor in the system."
>>               | good |
>>       +       good := Set new.
>>       -       good := OrderedCollection new.
>>               self allBehaviorsDo: [:class | selectorList
>>                                       do: [:aSelector | (class
>> includesSelector: aSelector)
>>                                                       ifTrue: [good add:
>> aSelector]]].
>>       +       ^good sorted
>>       +
>>       +       "
>>       -       ^ good asSet asSortedArray"
>>               SystemNavigation new selectorsWithAnyImplementorsIn: #(
>> contents
>>               contents: nuts)
>>               "!
>>
>>       Item was changed:
>>         ----- Method: SystemNavigation>>browseAllImplementorsOf:localToPackage:
>> (in category 'browse') -----
>>         browseAllImplementorsOf: selector localToPackage:
>> packageNameOrInfo
>>               "Create and schedule a message browser on each method in
>> the given package
>>               that implements the message whose selector is the argument,
>> selector. For example,
>>               SystemNavigation new browseAllImplementorsOf: #at:put:
>> localToPackage: 'Collections'."
>>
>>               self browseMessageList: (self
>>
>> allImplementorsOf: selector
>>       +
>>  localToPackage: packageNameOrInfo)
>>       -
>>  localToPackage: packageNameOrInfo) asSortedCollection
>>                       name: 'Implementors of ' , selector,
>>                                       ' local to package ', (self
>> packageInfoFor: packageNameOrInfo) name!
>>
>>       Item was changed:
>>         ----- Method: SystemNavigation>>browseAllSelect:localTo: (in
>> category 'browse') -----
>>         browseAllSelect: aBlock localTo: aClass
>>               "Create and schedule a message browser on each method in or
>> below the given class
>>                that, when used as the block argument to aBlock gives a
>> true result. For example,
>>                SystemNavigation default browseAllSelect: [:m | m
>> numLiterals > 10] localTo: Morph."
>>               aClass ifNil: [^self inform: 'no class selected'].
>>               ^self
>>       +               browseMessageList: (self allMethodsSelect: aBlock
>> localTo: aClass) sorted
>>       -               browseMessageList: (self allMethodsSelect: aBlock
>> localTo: aClass) asSortedCollection
>>                       name: 'selected messages local to ', aClass name!
>>
>>       Item was changed:
>>         ----- Method: SystemNavigation>>browseClassCommentsWithString:
>> (in category 'browse') -----
>>         browseClassCommentsWithString: aString
>>               "Smalltalk browseClassCommentsWithString: 'my instances' "
>>               "Launch a message list browser on all class comments
>> containing aString as a substring."
>>
>>               | caseSensitive suffix list |
>>
>>               suffix := (caseSensitive := Sensor shiftPressed)
>>                       ifTrue: [' (case-sensitive)']
>>                       ifFalse: [' (use shift for case-sensitive)'].
>>               list := Set new.
>>               Cursor wait showWhile: [
>>                       Smalltalk allClassesDo: [:class |
>>                               (class organization classComment asString
>> findString: aString
>>                                                               startingAt:
>> 1 caseSensitive: caseSensitive) > 0 ifTrue: [
>>
>> list add: (
>>
>>     MethodReference
>>
>>             class: class
>>
>>             selector: #Comment
>>                                                                       )
>>                                                               ]
>>                       ]
>>               ].
>>               ^ self
>>       +               browseMessageList: list sorted
>>       -               browseMessageList: list asSortedCollection
>>                       name: 'Class comments containing ' , aString
>> printString , suffix
>>                       autoSelect: aString!
>>
>>       Item was changed:
>>         ----- Method: SystemNavigation>>browseClassesWithNamesContaining:caseSensitive:
>> (in category 'browse') -----
>>         browseClassesWithNamesContaining: aString caseSensitive:
>> caseSensitive
>>               "Smalltalk browseClassesWithNamesContaining: 'eMorph'
>> caseSensitive: true "
>>               "Launch a class-list list browser on all classes whose
>> names containg aString as a substring."
>>
>>               | suffix aList |
>>               suffix := caseSensitive
>>                                       ifTrue: [' (case-sensitive)']
>>                                       ifFalse: [' (use shift for
>> case-sensitive)'].
>>               aList := OrderedCollection new.
>>               Cursor wait
>>                       showWhile: [Smalltalk
>>                                       allClassesDo: [:class | (class name
>> includesSubstring: aString caseSensitive: caseSensitive)
>>                                                       ifTrue: [aList add:
>> class name]]].
>>               aList size > 0
>>       +               ifTrue: [ToolSet openClassListBrowser: aList asSet
>> sorted title: 'Classes whose names contain ' , aString , suffix]!
>>       -               ifTrue: [ToolSet openClassListBrowser: aList asSet
>> asSortedArray title: 'Classes whose names contain ' , aString , suffix]!
>>
>>       Item was changed:
>>         ----- Method: SystemNavigation>>showMenuOf:w
>> ithFirstItem:ifChosenDo:withCaption: (in category 'ui') -----
>>         showMenuOf: selectorCollection withFirstItem: firstItem
>> ifChosenDo: choiceBlock withCaption: aCaption
>>               "Show a sorted menu of the given selectors, preceded by
>> firstItem, and all abbreviated to 40 characters.  Use aCaption as the menu
>> title, if it is not nil.  Evaluate choiceBlock if a
>>       message is chosen."
>>
>>               | index menuLabels sortedList |
>>       +       sortedList := selectorCollection sorted.
>>       -       sortedList := selectorCollection asSortedCollection.
>>               menuLabels := Array streamContents:
>>                       [:strm | strm nextPut: (firstItem contractTo: 40).
>>                       sortedList do: [:sel | strm nextPut: (sel
>> contractTo: 40)]].
>>               index := UIManager default chooseFrom: menuLabels lines:
>> #(1).
>>               index = 1 ifTrue: [choiceBlock value: firstItem].
>>               index > 1 ifTrue: [choiceBlock value: (sortedList at: index
>> - 1)]!
>>
>>       Item was changed:
>>         ----- Method: SystemVersion>>highestUpdate (in category
>> 'accessing') -----
>>         highestUpdate
>>       +
>>       +       ^highestUpdate ifNil: [
>>       +               highestUpdate := self updates isEmpty
>>       +                       ifTrue: [ 0 ]
>>       +                       ifFalse: [ self updates max ] ]!
>>       -       | sortedUpdates |
>>       -       highestUpdate ifNil: [
>>       -               sortedUpdates := self updates asSortedCollection.
>>       -               highestUpdate := (sortedUpdates isEmpty
>>       -                       ifTrue: [0]
>>       -                       ifFalse: [sortedUpdates last])].
>>       -       ^highestUpdate!
>>
>>       Item was changed:
>>         ----- Method: TranslatedReceiverFinder
>> class>>browseNonLiteralReceivers (in category 'utilities') -----
>>         browseNonLiteralReceivers
>>               "TranslatedReceiverFinder browseNonLiteralReceivers"
>>               SystemNavigation default
>>       +               browseMessageList: self new nonLiteralReceivers
>>       -               browseMessageList: self new nonLiteralReceivers
>> asSortedCollection
>>                       name: 'Non literal receivers of #translated'
>>                       autoSelect: 'translated'!
>>
>>
>>
>>
>>
>> --
>> _,,,^..^,,,_
>> best, Eliot
>>
>>
>
>
>


-- 
_,,,^..^,,,_
best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20170313/07b48a97/attachment-0001.html>


More information about the Squeak-dev mailing list