The Trunk: System-ul.932.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: System-ul.932.mcz

commits-2
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'!


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: System-ul.932.mcz

Eliot Miranda-2
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, <[hidden email]> 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


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: System-ul.932.mcz

Levente Uzonyi
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).

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

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, <[hidden email]> 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
>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: System-ul.932.mcz

Eliot Miranda-2
Hi Levente,

On Mon, Mar 13, 2017 at 4:44 PM, Levente Uzonyi <[hidden email]> 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, <[hidden email]> 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


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: System-ul.932.mcz

Levente Uzonyi
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 <[hidden email]> 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, <[hidden email]> 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
>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: System-ul.932.mcz

Levente Uzonyi
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 <[hidden email]>
>> 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, <[hidden email]>
>> 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
>>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: System-ul.932.mcz

Eliot Miranda-2


On Mon, Mar 13, 2017 at 5:30 PM, Levente Uzonyi <[hidden email]> 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 <[hidden email]> 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, <[hidden email]> 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


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: System-ul.932.mcz

Levente Uzonyi
Did it help?

Levente

On Mon, 13 Mar 2017, Eliot Miranda wrote:

>
>
> On Mon, Mar 13, 2017 at 5:30 PM, Levente Uzonyi <[hidden email]> 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 <[hidden email]> 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, <[hidden email]> 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
>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: System-ul.932.mcz

Eliot Miranda-2


On Mon, Mar 13, 2017 at 5:59 PM, Levente Uzonyi <[hidden email]> wrote:
Did it help?

Post 17033:
4575 run, 4304 passes, 108 expected failures, 30 failures, 133 errors, 0 unexpected passes
Post 17033 plus inbox Files-ul.168
4549 run, 4405 passes, 105 expected failures, 27 failures, 12 errors, 0 unexpected passes

Looks like you should move  Files-ul.168 to trunk asap.


Levente

On Mon, 13 Mar 2017, Eliot Miranda wrote:



On Mon, Mar 13, 2017 at 5:30 PM, Levente Uzonyi <[hidden email]> 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 <[hidden email]> 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, <[hidden email]> 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
                                    +
                                    +       "






--
_,,,^..^,,,_
best, Eliot


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: System-ul.932.mcz

Levente Uzonyi
Done. It would be nice to know which change caused the problem.

Levente

On Mon, 13 Mar 2017, Eliot Miranda wrote:

>
>
> On Mon, Mar 13, 2017 at 5:59 PM, Levente Uzonyi <[hidden email]> wrote:
>       Did it help?
>
>
> Post 17033:
> 4575 run, 4304 passes, 108 expected failures, 30 failures, 133 errors, 0 unexpected passes
> Post 17033 plus inbox Files-ul.168
> 4549 run, 4405 passes, 105 expected failures, 27 failures, 12 errors, 0 unexpected passes
>
> Looks like you should move  Files-ul.168 to trunk asap.
>
>
>       Levente
>
>       On Mon, 13 Mar 2017, Eliot Miranda wrote:
>
>
>
>             On Mon, Mar 13, 2017 at 5:30 PM, Levente Uzonyi <[hidden email]> 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 <[hidden email]> 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, <[hidden email]> 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
>                                                 +
>                                                 +       "
>
>
>
>
>
>
>
> --
> _,,,^..^,,,_
> best, Eliot
>
>


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: System-ul.932.mcz

Eliot Miranda-2


On Mon, Mar 13, 2017 at 6:01 PM, Levente Uzonyi <[hidden email]> wrote:
Done. It would be nice to know which change caused the problem.

Will try and take a look.  Right now v v busy with callbacks, and Clément is here in SF for his annual visit for us to work on Sista.  So time is of the essence :-)


Levente

On Mon, 13 Mar 2017, Eliot Miranda wrote:



On Mon, Mar 13, 2017 at 5:59 PM, Levente Uzonyi <[hidden email]> wrote:
      Did it help?


Post 17033:
4575 run, 4304 passes, 108 expected failures, 30 failures, 133 errors, 0 unexpected passes
Post 17033 plus inbox Files-ul.168
4549 run, 4405 passes, 105 expected failures, 27 failures, 12 errors, 0 unexpected passes

Looks like you should move  Files-ul.168 to trunk asap.


      Levente

      On Mon, 13 Mar 2017, Eliot Miranda wrote:



            On Mon, Mar 13, 2017 at 5:30 PM, Levente Uzonyi <[hidden email]> 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 <[hidden email]> 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, <[hidden email]> 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:






--
_,,,^..^,,,_
best, Eliot