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

Levente Uzonyi leves at caesar.elte.hu
Tue Mar 14 00:59:03 UTC 2017


Did it help?

Levente

On Mon, 13 Mar 2017, Eliot Miranda wrote:

> 
> 
> On Mon, Mar 13, 2017 at 5:30 PM, Levente Uzonyi <leves at caesar.elte.hu> wrote:
>       I have updated Files-ul.168 to the Inbox with those methods reverted
>       along with a third one.
> 
> 
> Thanks man!
>  
> 
>
>       Levente
>
>       On Tue, 14 Mar 2017, Levente Uzonyi wrote:
>
>             Hi Eliot,
>
>             all of those new errors seem to be related to files, so I presume they are related to the changes of the Files package:
>
>             "
>             FileDirectory changes:
>
>             - implemented #directoryContentsFor:do: in all subclasses of FileDirectory, where #directoryContentsFor: was implemented
>             - introduced #entriesDo: based on the method above
>             - rewrote methods sending #entries to use #entriesDo: instead
>             - simplified DirectoryEntryDirectory >> #asFileDirectory
>             - introduced #hasEntries
>             - #directoryEntryForName: signals InvalidDirectoryError as suggested by a comment from 2007
>             - other minor optimizations
>             "
>
>             I suspect that either the DirectoryEntryDirectory >> #asFileDirectory or FileDirectory >> #directoryEntryForName: is responsible for the errors, but it should be easy to find the cause
>             by debugging any of those new errors.
>
>             Levente
>
>             On Mon, 13 Mar 2017, Eliot Miranda wrote:
>
>                   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:instanceVariableNames: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:instanceVariableNames: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:withFirstItem: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
> 
> 
> 
> 
> 
> 
> 
> --
> _,,,^..^,,,_
> best, Eliot
> 
>


More information about the Squeak-dev mailing list