tim Rowledge uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-tpr.1530.mcz
==================== Summary ====================
Name: Kernel-tpr.1530
Author: tpr
Time: 30 October 2023, 1:39:08.316176 pm
UUID: 28d9d8c3-293a-4a31-8950-7ef0d5c5a803
Ancestors: Kernel-mt.1529
LPI needs #asByteArray to support Seaside. Arguably, several other classes need an equivalent to support Magnitude>>#putOn: correctly.
Baby steps.
=============== Diff against Kernel-mt.1529 ===============
Item was added:
+ ----- Method: LargePositiveInteger>>asByteArray (in category 'converting') -----
+ asByteArray
+
+ ^self as: ByteArray!
Levente Uzonyi uploaded a new version of 61Deprecated to project The Trunk:
http://source.squeak.org/trunk/61Deprecated-ul.10.mcz
==================== Summary ====================
Name: 61Deprecated-ul.10
Author: ul
Time: 7 October 2023, 10:31:14.012496 am
UUID: 13110127-70a1-43b6-b291-29dbd27133b2
Ancestors: 61Deprecated-ul.9
Some methods of MVCDebugger and MorphicDebugger are not in the 61Deprecated monticello package even though the classes are in the 61Deprecated category.
This is an attempt to fix that. Move to trunk if it works for you as well.
=============== Diff against 61Deprecated-ul.9 ===============
Item was added:
+ ----- Method: MVCDebugger class>>openOn:context:label:contents:fullView: (in category 'opening') -----
+ openOn: processToDebug context: context label: title contents: contentsStringOrNil fullView: full
+ "Open a notifier in response to an error, halt, or notify. A notifier view just shows a short view of the sender stack and provides a menu that lets the user open a full debugger."
+
+ | debugger cm ac acp wasActive |
+ cm := Project current world. "controller manager"
+ ac := cm activeController.
+ acp := cm activeControllerProcess. "the ui process"
+ wasActive := cm inActiveControllerProcess.
+
+ debugger := self new
+ process: processToDebug
+ "Keep track of the controller if it matches."
+ controller: (acp == processToDebug ifTrue: [ac])
+ context: context.
+
+ full
+ ifTrue: [debugger openFullNoSuspendLabel: title]
+ ifFalse: [debugger openNotifierNoSuspendContents: contentsStringOrNil label: title].
+
+ "Try drawing the debugger tool at least once to avoid freeze."
+ Project current restoreDisplay.
+
+ "If we are in a helper process, #openNoTerminate WILL NOT activate the debugger's controller. Example: user-interrupt request (cmd+dot)."
+ (acp == processToDebug and: [wasActive not])
+ ifTrue: [ [cm searchForActiveController] fork ].
+
+ "Be sure to suspend the process we want to debug now."
+ processToDebug suspend.
+
+ "If we are NOT in a helper process, #openNoTerminate WILL NOT terminate the active controller's process."
+ (acp ~~ processToDebug and: [wasActive])
+ ifTrue: [ Processor terminateActive ].
+
+ "Get here only if active process is not the process-to-debug. Use helper process if you want to access this return value."
+ ^ debugger!
Item was added:
+ ----- Method: MVCDebugger>>context: (in category 'initialize') -----
+ context: aContext
+
+ self
+ process: Processor activeProcess
+ controller: (ScheduledControllers inActiveControllerProcess
+ ifTrue: [ScheduledControllers activeController])
+ context: aContext.!
Item was added:
+ ----- Method: MVCDebugger>>openFullFromNotifier: (in category 'initialize') -----
+ openFullFromNotifier: notifierView
+ "Create, schedule and answer a full debugger with the given label. Do not terminate the current active process."
+
+ | fullView |
+ super openFullFromNotifier: notifierView.
+
+ fullView := ToolBuilder default build: self.
+ fullView label: notifierView label. "Keep the label."
+ fullView controller openNoTerminate.
+
+ notifierView controller closeAndUnscheduleNoTerminate.
+ Processor terminateActive.!
Item was added:
+ ----- Method: MVCDebugger>>openFullNoSuspendLabel: (in category 'initialize') -----
+ openFullNoSuspendLabel: aString
+ "Create, schedule and answer a full debugger with the given label. Do not terminate the current active process."
+
+ | fullView |
+ super openFullNoSuspendLabel: aString.
+
+ fullView := ToolBuilder default build: self.
+ fullView label: aString.
+ fullView controller openNoTerminate.
+
+ ^ fullView!
Item was added:
+ ----- Method: MVCDebugger>>openNotifierNoSuspendContents:label: (in category 'initialize') -----
+ openNotifierNoSuspendContents: msgString label: label
+
+ | builder spec view |
+ EventSensor default flushEvents.
+ super openNotifierNoSuspendContents: msgString label: label.
+
+ builder := ToolBuilder default.
+ spec := self buildNotifierWith: builder label: label message: msgString.
+
+ view := builder build: spec.
+ view controller openNoTerminate.
+
+ ^ view!
Item was added:
+ ----- Method: MVCDebugger>>process:controller:context: (in category 'initialize') -----
+ process: aProcess controller: aController context: aContext
+
+ self process: aProcess context: aContext.
+
+ interruptedController := aController.!
Item was added:
+ ----- Method: MVCDebugger>>resumeProcess: (in category 'private') -----
+ resumeProcess: processToResume
+ "Finally free the reference to the controller if any. We cannot do this in #windowIsClosing."
+
+ | controllerToReschedule |
+ controllerToReschedule := interruptedController.
+ interruptedController := nil.
+
+ ScheduledControllers
+ activeController: controllerToReschedule
+ andProcess: processToResume.!
Item was added:
+ ----- Method: MorphicDebugger class>>openOn:context:label:contents:fullView: (in category 'opening') -----
+ openOn: processToDebug context: context label: title contents: contentsStringOrNil fullView: full
+
+ | debugger uiBlock |
+ debugger := self new
+ process: processToDebug context: context;
+ errorWasInUIProcess: (Project current spawnNewProcessIfThisIsUI: processToDebug).
+
+ uiBlock := [
+ full
+ ifTrue: [debugger openFullNoSuspendLabel: title]
+ ifFalse: [debugger openNotifierNoSuspendContents: contentsStringOrNil label: title].
+
+ "Try layouting the debugger tool at least once to avoid freeze."
+ debugger topView ifNotNil: [:window |
+ "There are way too many #fullBounds sends. Layout errors might already have happened."
+ window allMorphsDo: [:m | (m hasProperty: #errorOnLayout) ifTrue: [self error: 'Layout error']].
+ window world doLayout. "Not safely!!"].
+ "Try drawing the debugger tool at least once to avoid freeze."
+ debugger topView ifNotNil: [:window | window world displayWorld. "Not safely!!"].
+ ].
+
+ "Schedule debugging in a deferred UI message if necessary. Note that only the ui process should execute ui code."
+ (Project current uiProcess isActiveProcess not or: [processToDebug isActiveProcess])
+ ifFalse: uiBlock
+ ifTrue: [ | event |
+ self flag: #discuss. "mt: We need to preserve the currentEvent for #openToolsAttachedToMouseCursor ..."
+ event := self currentEvent.
+ Project current addDeferredUIMessage: [event becomeActiveDuring: uiBlock]].
+
+ processToDebug suspend.
+
+ "Get here only if active process is not the process-to-debug. So in tests, use a helper process if you want to access this return value."
+ ^ debugger!
Item was added:
+ ----- Method: MorphicDebugger>>openFullFromNotifier: (in category 'initialize') -----
+ openFullFromNotifier: notifierWindow
+ "Create, schedule and answer a full debugger with the given label. Do not terminate the current active process."
+
+ super openFullFromNotifier: notifierWindow.
+
+ notifierWindow delete.
+
+ ^ ToolBuilder default
+ open: self
+ label: notifierWindow label!
Item was added:
+ ----- Method: MorphicDebugger>>openFullNoSuspendLabel: (in category 'initialize') -----
+ openFullNoSuspendLabel: aString
+ "Create, schedule and answer a full debugger with the given label. Do not terminate the current active process."
+
+ super openFullNoSuspendLabel: aString.
+
+ ^ ToolBuilder default
+ open: self
+ label: aString!
Item was added:
+ ----- Method: MorphicDebugger>>openNotifierNoSuspendContents:label: (in category 'initialize') -----
+ openNotifierNoSuspendContents: msgString label: label
+
+ | builder spec |
+ super openNotifierNoSuspendContents: msgString label: label.
+
+ builder := ToolBuilder default.
+ spec := self buildNotifierWith: builder label: label message: msgString.
+
+ ^ ToolBuilder default open: spec!
Item was added:
+ ----- Method: MorphicDebugger>>resumeProcess: (in category 'private') -----
+ resumeProcess: processToResume
+
+ processToResume isTerminated ifFalse: [
+ errorWasInUIProcess ifTrue: [Project current uiProcess: processToResume].
+ processToResume resume.
+ errorWasInUIProcess ifTrue: [Processor terminateActive]].!
Item was added:
+ ----- Method: MorphicDebugger>>windowIsClosing (in category 'initialize') -----
+ windowIsClosing
+ "Keep track of last debugger extent."
+
+ interruptedProcess ifNil: [ ^ self ].
+
+ SavedExtent ifNotNil:
+ [ self dependents
+ detect:
+ [ : each | each isWindowForModel: self ]
+ ifFound:
+ [ : topWindow | | isDebuggerNotNotifier |
+ isDebuggerNotNotifier := self dependents anySatisfy:
+ [ : each | each isTextView ].
+ isDebuggerNotNotifier ifTrue: [
+ SavedExtent := (topWindow extent / RealEstateAgent scaleFactor) rounded ] ]
+ ifNone: [ "do nothing" ] ].
+
+ super windowIsClosing.!
Eliot Miranda uploaded a new version of Monticello to project The Trunk:
http://source.squeak.org/trunk/Monticello-eem.803.mcz
==================== Summary ====================
Name: Monticello-eem.803
Author: eem
Time: 24 October 2023, 3:23:48.418415 pm
UUID: 46cf509a-7643-40fa-ab24-7c7b4cbe9796
Ancestors: Monticello-tpr.802
Finally understand what was wrong with my fileOut theirs scheme. In normal snapshot browsers "fileOut theirs" means "fileOutDefinition". But in a save dialog "fileOut theirs" means "fileOutInverse".
=============== Diff against Monticello-tpr.802 ===============
Item was changed:
----- Method: MCCodeTool>>methodListMenu: (in category 'menus') -----
methodListMenu: aMenu
"Build the menu for the selected method, if any."
self selectedMessageName
ifNil: [items notEmpty ifTrue:
[aMenu addList:#(
('fileOut ours (o)' fileOutMessage)
+ ('fileOut theirs' fileOutDefinition))]]
- ('fileOut theirs' fileOutInverse))]]
ifNotNil: [
aMenu addList:#(
('browse full (b)' browseMethodFull)
('browse hierarchy (h)' browseClassHierarchy)
('browse protocol (p)' browseFullProtocol)
-
('fileOut ours (o)' fileOutMessage)
('fileOut theirs' fileOutDefinition)
('printOut' printOutMessage)
('copy selector (c)' copySelector)
('copy reference (C)' copyReference)).
aMenu addList: #(
-
('browse senders (n)' browseSendersOfMessages)
('browse implementors (m)' browseMessages)
('inheritance (i)' methodHierarchy)
('versions (v)' browseVersions)
('change sets with this method' findMethodInChangeSets)
" ('x revert to previous version' revertToPreviousVersion)"
('remove from current change set' removeFromCurrentChanges)
" ('x revert & remove from changes' revertAndForget)"
('add to current change set' adoptMessageInCurrentChangeset)
" ('x copy up or copy down...' copyUpOrCopyDown)"
" ('x remove method (x)' removeMessage)"
"-"
).
].
" aMenu addList: #(
('x inst var refs...' browseInstVarRefs)
('x inst var defs...' browseInstVarDefs)
('x class var refs...' browseClassVarRefs)
('x class variables' browseClassVariables)
('x class refs (N)' browseClassRefs)
).
"
^ aMenu
!
Item was changed:
----- Method: MCSaveVersionDialog>>methodListMenu: (in category 'menus') -----
methodListMenu: aMenu
super methodListMenu: aMenu.
+ "In save dialogs fileOut theirs means file out the inverse"
+ aMenu items do:
+ [:item|
+ item selector == #fileOutDefinition ifTrue:
+ [item selector: #fileOutInverse]].
aMenu addList:#(-
('ignore (I)' ignoreSelection 'Toggle inclusion of this change when saving.')
('refresh (e)' refresh 'Refresh the list of changes to this package.')).
^aMenu!
tim Rowledge uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-tpr.1429.mcz
==================== Summary ====================
Name: System-tpr.1429
Author: tpr
Time: 23 October 2023, 4:39:10.130433 pm
UUID: e6333383-06b2-4957-b68f-c0a43c688d79
Ancestors: System-ct.1428
Drop the deprecated #os send from a couple of methods
=============== Diff against System-ct.1428 ===============
Item was changed:
----- Method: SmalltalkImage>>platformName (in category 'os') -----
platformName
"Answer the name of the platform we're running on."
+ "Smalltalk platformName"
- "Smalltalk os platformName"
^PlatformNameCache ifNil: [PlatformNameCache := self getSystemAttribute: 1001]!
Item was changed:
----- Method: SmalltalkImage>>windowSystemName (in category 'os') -----
windowSystemName
"Return the name of the window system currently being used for display."
+ "Smalltalk windowSystemName"
- "Smalltalk os windowSystemName"
^self getSystemAttribute: 1005!
tim Rowledge uploaded a new version of SqueakSSL-Tests to project The Trunk:
http://source.squeak.org/trunk/SqueakSSL-Tests-tpr.27.mcz
==================== Summary ====================
Name: SqueakSSL-Tests-tpr.27
Author: tpr
Time: 23 October 2023, 4:38:32.962248 pm
UUID: 4ae53b81-182d-46ae-9b52-07e1edcbee00
Ancestors: SqueakSSL-Tests-mt.26
Use the simple (and cached) "Smalltalk platformName" instead of several roundabout methods
=============== Diff against SqueakSSL-Tests-mt.26 ===============
Item was changed:
----- Method: SqueakSSLTest>>expectedFailures (in category 'failures') -----
expectedFailures
"If we don't have a cert all the tests fail"
+ Smalltalk platformName = 'Mac OS' ifTrue:[
- SqueakSSL platformName = 'Mac OS' ifTrue:[
"The following tests all need certificate selection
to work properly."
^#(
testConnectAccept
testEncryptDecrypt
testMultiFrameDecrypt
testSingleByteDecrypt
testSplitTlsFrameRead
testStreamAccept
testStreamConnect
testStreamTransfer
testSSLSockets
testSocketAccept
testSocketConnect
)
] ifFalse:[^#()].!
Item was changed:
----- Method: SqueakSSLTest>>testFaceBookAPI (in category 'tests') -----
testFaceBookAPI
"Facebook sends incomplete data during SSL handshake.
Useful for testing an edge condition in SqueakSSL."
self
timeout: 90;
ensureInternetConnectionTo: 'http://www.facebook.com'.
Smalltalk at: #WebClient ifPresent:[:webClient|
self shouldnt:[
[webClient httpGet: 'https://graph.facebook.com/oauth/access_token']
"Allow certificate errors on the Mac since cert validation isn't
implemented yet."
on: SqueakSSLCertificateError do:[:ex|
+ Smalltalk platformName = 'Mac OS'
- SqueakSSL platformName = 'Mac OS'
ifTrue:[ex resume]
ifFalse:[ex pass]].
] raise: Error.
]..
!
tim Rowledge uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-tpr.2136.mcz
==================== Summary ====================
Name: Morphic-tpr.2136
Author: tpr
Time: 23 October 2023, 4:31:48.024821 pm
UUID: eef5afc1-785d-4325-b211-e1db57a8b85d
Ancestors: Morphic-mt.2135
Drop the deprecated #os send from TheWorldMainDockingBar>>#sendFeedback
=============== Diff against Morphic-mt.2135 ===============
Item was changed:
----- Method: TheWorldMainDockingBar>>sendFeedback (in category 'menu actions') -----
sendFeedback
| url os vm hash image |
url := 'https://bugs.squeak.org/'.
([Smalltalk vm platformSourceVersion] on: Warning do: ["Ignore"])
ifNotNil: [:info | | tokens |
tokens := info findTokens.
vm := tokens at: 2.
hash := tokens atLast: 4].
+ os := Smalltalk platformName, ' ', Smalltalk osVersion, ' ', Smalltalk platformSubtype.
- os := Smalltalk os platformName, ' ', Smalltalk os osVersion, ' ', Smalltalk os platformSubtype.
image := SystemVersion current version, ' #', SystemVersion current highestUpdate.
self inform: ('Please visit the following website to report on bugs, requests, and other issues:<br><br> <a href="{1}">{1}</a><br><br>Make sure that you always include information about your current environment such as:<br><br> OS: {2}<br> VM: {3} ({4})<br> SQ: {5} ({6} bit)<br><br>You can find more in the <a href="code://SystemReporter open">System Reporter</a>.' translated format: {url. os. vm. hash. image. Smalltalk image wordSize * 8}) asTextFromHtml!