Hi, as you can see, this is why I want to have #valueWithAllPossibleArguments: available. We can move it to the System package if it is not common enough for Kernel.
What's being addressed and documented is the surprisingly voluminous amount of code (encapsulated in #do:) needed to properly run squeak when passing in a "document" URL as the first argument.
The contents of those documents can now, optionally, surround their code in
Smalltalk do: [ :arg1 :arg2 :etc | "the document script can access arg1, arg2 nicely" ]
to get easy-access to the arguments, and also handling the exceptions that need to be handled.
On Fri, Oct 25, 2013 at 3:38 PM, commits@source.squeak.org wrote:
Chris Muller uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-cmm.608.mcz
==================== Summary ====================
Name: System-cmm.608 Author: cmm Time: 25 October 2013, 3:38:27.908 pm UUID: c3198c63-1008-493a-8e6b-b63886ab70cf Ancestors: System-ul.607
Convenience method for passing .st scripts as arguments to image. In the .st script, use Smalltalk do: [ :arg1 :arg2 :etc | ] to start servers, #doAndQuit: [ :args | ... ] for batch jobs, and #do:snapshot:andQuit: for jobs that "build" new images (e.g., for testing and/or deployment). Arguments from the command-line are passed as arguments to the block.
In all cases, Notifications and Errors are logged to stdout and stderr, respectively.
=============== Diff against System-ul.607 ===============
Item was added:
- ----- Method: SmalltalkImage>>do: (in category 'command line') -----
- do: aBlock
[ [ aBlock valueWithAllPossibleArguments: self arguments ]
on: ProgressInitiationException
do:
[ : pie | "Don't want to log this notification."
pie defaultAction ] ]
on: Notification , Warning
do:
[ : noti | StandardFileStream stdout
nextPutAll: DateAndTime now asString ;
space ;
nextPutAll: noti description ;
cr.
noti resume ]
on: SyntaxErrorNotification
do:
[ : err | StandardFileStream stdout
nextPutAll: err errorCode ;
cr.
self haltOrQuit ]
on: Error
do:
[ : err | err printVerboseOn: StandardFileStream stderr.
self haltOrQuit.
err isResumable ifTrue: [ err resume ] ]!
Item was added:
- ----- Method: SmalltalkImage>>do:snapshotAs:andQuit: (in category 'command line') -----
- do: aBlock snapshotAs: imageName andQuit: shouldQuit
self do: aBlock.
imageName
ifNil:
[ shouldQuit ifTrue:
[ self
snapshot: false
andQuit: shouldQuit ] ]
ifNotNil:
[ | correctName |
correctName := (imageName endsWith: '.image')
ifTrue: [ imageName ]
ifFalse: [ imageName , '.image' ].
(FileDirectory default fullNameFor: correctName) = self imageName
ifTrue:
[ self
snapshot: true
andQuit: shouldQuit ]
ifFalse:
[ self saveAs: imageName.
"Avoid instant-quit when relaunching by resaving."
shouldQuit ifTrue:
[ self
snapshot: true
andQuit: shouldQuit ] ] ]!
Item was added:
- ----- Method: SmalltalkImage>>doAndQuit: (in category 'command line') -----
- doAndQuit: aBlock
self
do: aBlock
snapshotAs: nil
andQuit: true!
Item was added:
- ----- Method: SmalltalkImage>>haltOrQuit (in category 'command line') -----
- haltOrQuit
Smalltalk isHeadless
ifTrue:
[ self
snapshot: false
andQuit: true ]
ifFalse: [ self halt ]!
On Fri, 25 Oct 2013, Chris Muller wrote:
Hi, as you can see, this is why I want to have #valueWithAllPossibleArguments: available. We can move it to the System package if it is not common enough for Kernel.
I still don't see why we need that method. The functionality can easily be added to SmalltalkImage >> #do: explicitly
(aBlock numArgs = 1 and: [ self arguments size > 1 ]) ifTrue: [ aBlock value: self arguments ] ifFalse: [ aBlock valueWithEnoughArguments: self arguments ]
instead of
aBlock valueWithAllPossibleArguments: self arguments
Levente
What's being addressed and documented is the surprisingly voluminous amount of code (encapsulated in #do:) needed to properly run squeak when passing in a "document" URL as the first argument.
The contents of those documents can now, optionally, surround their code in
Smalltalk do: [ :arg1 :arg2 :etc | "the document script can access arg1, arg2 nicely" ]
to get easy-access to the arguments, and also handling the exceptions that need to be handled.
On Fri, Oct 25, 2013 at 3:38 PM, commits@source.squeak.org wrote:
Chris Muller uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-cmm.608.mcz
==================== Summary ====================
Name: System-cmm.608 Author: cmm Time: 25 October 2013, 3:38:27.908 pm UUID: c3198c63-1008-493a-8e6b-b63886ab70cf Ancestors: System-ul.607
Convenience method for passing .st scripts as arguments to image. In the .st script, use Smalltalk do: [ :arg1 :arg2 :etc | ] to start servers, #doAndQuit: [ :args | ... ] for batch jobs, and #do:snapshot:andQuit: for jobs that "build" new images (e.g., for testing and/or deployment). Arguments from the command-line are passed as arguments to the block.
In all cases, Notifications and Errors are logged to stdout and stderr, respectively.
=============== Diff against System-ul.607 ===============
Item was added:
- ----- Method: SmalltalkImage>>do: (in category 'command line') -----
- do: aBlock
[ [ aBlock valueWithAllPossibleArguments: self arguments ]
on: ProgressInitiationException
do:
[ : pie | "Don't want to log this notification."
pie defaultAction ] ]
on: Notification , Warning
do:
[ : noti | StandardFileStream stdout
nextPutAll: DateAndTime now asString ;
space ;
nextPutAll: noti description ;
cr.
noti resume ]
on: SyntaxErrorNotification
do:
[ : err | StandardFileStream stdout
nextPutAll: err errorCode ;
cr.
self haltOrQuit ]
on: Error
do:
[ : err | err printVerboseOn: StandardFileStream stderr.
self haltOrQuit.
err isResumable ifTrue: [ err resume ] ]!
Item was added:
- ----- Method: SmalltalkImage>>do:snapshotAs:andQuit: (in category 'command line') -----
- do: aBlock snapshotAs: imageName andQuit: shouldQuit
self do: aBlock.
imageName
ifNil:
[ shouldQuit ifTrue:
[ self
snapshot: false
andQuit: shouldQuit ] ]
ifNotNil:
[ | correctName |
correctName := (imageName endsWith: '.image')
ifTrue: [ imageName ]
ifFalse: [ imageName , '.image' ].
(FileDirectory default fullNameFor: correctName) = self imageName
ifTrue:
[ self
snapshot: true
andQuit: shouldQuit ]
ifFalse:
[ self saveAs: imageName.
"Avoid instant-quit when relaunching by resaving."
shouldQuit ifTrue:
[ self
snapshot: true
andQuit: shouldQuit ] ] ]!
Item was added:
- ----- Method: SmalltalkImage>>doAndQuit: (in category 'command line') -----
- doAndQuit: aBlock
self
do: aBlock
snapshotAs: nil
andQuit: true!
Item was added:
- ----- Method: SmalltalkImage>>haltOrQuit (in category 'command line') -----
- haltOrQuit
Smalltalk isHeadless
ifTrue:
[ self
snapshot: false
andQuit: true ]
ifFalse: [ self halt ]!
Yeah, ok. If it were proven this was more commonly desired by needing more than one sender, I'd be inclined to keep this method (perhaps with a naming clarification), but I don't particularly like having so many evaluation messages on Block that essentially require me to look at them closely to remember which does which.
I'll post an update.
On Fri, Oct 25, 2013 at 5:36 PM, Levente Uzonyi leves@elte.hu wrote:
On Fri, 25 Oct 2013, Chris Muller wrote:
Hi, as you can see, this is why I want to have #valueWithAllPossibleArguments: available. We can move it to the System package if it is not common enough for Kernel.
I still don't see why we need that method. The functionality can easily be added to SmalltalkImage >> #do: explicitly
(aBlock numArgs = 1 and: [ self arguments size > 1 ]) ifTrue: [ aBlock value: self arguments ] ifFalse: [ aBlock valueWithEnoughArguments: self arguments ]
instead of
aBlock valueWithAllPossibleArguments: self arguments
Levente
What's being addressed and documented is the surprisingly voluminous amount of code (encapsulated in #do:) needed to properly run squeak when passing in a "document" URL as the first argument.
The contents of those documents can now, optionally, surround their code in
Smalltalk do: [ :arg1 :arg2 :etc | "the document script can access arg1, arg2 nicely" ]
to get easy-access to the arguments, and also handling the exceptions that need to be handled.
On Fri, Oct 25, 2013 at 3:38 PM, commits@source.squeak.org wrote:
Chris Muller uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-cmm.608.mcz
==================== Summary ====================
Name: System-cmm.608 Author: cmm Time: 25 October 2013, 3:38:27.908 pm UUID: c3198c63-1008-493a-8e6b-b63886ab70cf Ancestors: System-ul.607
Convenience method for passing .st scripts as arguments to image. In the .st script, use Smalltalk do: [ :arg1 :arg2 :etc | ] to start servers, #doAndQuit: [ :args | ... ] for batch jobs, and #do:snapshot:andQuit: for jobs that "build" new images (e.g., for testing and/or deployment). Arguments from the command-line are passed as arguments to the block.
In all cases, Notifications and Errors are logged to stdout and stderr, respectively.
=============== Diff against System-ul.607 ===============
Item was added:
- ----- Method: SmalltalkImage>>do: (in category 'command line') -----
- do: aBlock
[ [ aBlock valueWithAllPossibleArguments: self arguments ]
on: ProgressInitiationException
do:
[ : pie | "Don't want to log this notification."
pie defaultAction ] ]
on: Notification , Warning
do:
[ : noti | StandardFileStream stdout
nextPutAll: DateAndTime now asString ;
space ;
nextPutAll: noti description ;
cr.
noti resume ]
on: SyntaxErrorNotification
do:
[ : err | StandardFileStream stdout
nextPutAll: err errorCode ;
cr.
self haltOrQuit ]
on: Error
do:
[ : err | err printVerboseOn: StandardFileStream
stderr.
self haltOrQuit.
err isResumable ifTrue: [ err resume ] ]!
Item was added:
- ----- Method: SmalltalkImage>>do:snapshotAs:andQuit: (in category
'command line') -----
- do: aBlock snapshotAs: imageName andQuit: shouldQuit
self do: aBlock.
imageName
ifNil:
[ shouldQuit ifTrue:
[ self
snapshot: false
andQuit: shouldQuit ] ]
ifNotNil:
[ | correctName |
correctName := (imageName endsWith: '.image')
ifTrue: [ imageName ]
ifFalse: [ imageName , '.image' ].
(FileDirectory default fullNameFor: correctName)
= self imageName
ifTrue:
[ self
snapshot: true
andQuit: shouldQuit ]
ifFalse:
[ self saveAs: imageName.
"Avoid instant-quit when
relaunching by resaving."
shouldQuit ifTrue:
[ self
snapshot: true
andQuit:
shouldQuit ] ] ]!
Item was added:
- ----- Method: SmalltalkImage>>doAndQuit: (in category 'command line')
- doAndQuit: aBlock
self
do: aBlock
snapshotAs: nil
andQuit: true!
Item was added:
- ----- Method: SmalltalkImage>>haltOrQuit (in category 'command line')
- haltOrQuit
Smalltalk isHeadless
ifTrue:
[ self
snapshot: false
andQuit: true ]
ifFalse: [ self halt ]!
squeak-dev@lists.squeakfoundation.org