[squeak-dev] The Trunk: System-ul.932.mcz
Levente Uzonyi
leves at caesar.elte.hu
Tue Mar 14 00:30:55 UTC 2017
I have updated Files-ul.168 to the Inbox with those methods reverted
along with a third one.
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
>>
>
More information about the Squeak-dev
mailing list
|