Le 14/01/2016 19:33, Mariano Martinez Peck a écrit :
> Dear all,
>
> I am happy to tell you I have a first prototype of the tool for
> executing OS processes:
>
> https://github.com/marianopeck/OSSubprocess
>
> As I said many times, the main idea was to be as much as possible
> FFI-based, only for executing OS commands and, from my point of view, a
> better end-user API. Also, as for the first step, I had to focus on
> Linux/OSX.
>
> I would like to thank Pharo Consortium for the sponsor of this
> development effort. Here is the first milestone!
>
> There are many things on my to-do but I think the code is ready for some
> usage, testing, code review and feedback!
>
> All classes and all methods have comments and I have quite some unit
> tests. All tests are green in my OSX and a CentOS box.
>
> *Important: you CANNOT have OSProcess installed in the same image as
> OSSubprocess. This is because I am reusing his SIGCHLD handler and for
> the time being both cannot coexist. *
>
> Keep in mind that the tool may be unstable and that MAY mean a VM crash.
> So use with care, mostly the first time. If all tests passes, then there
> are much less chances of something going bad.
>
> Important disclaimer: my tool (OSSubproccess from now onward) is HIGHLY
> influenced by a subset of the OSProcess project. There are parts which I
> even simply copied and adapted them (OSSPipe, OSSAttachableStream,
> OSSUnixProcessExitStatus). Other parts, I took them as inspiration (the
> idea of ThisOSProcess representing the VM process, the child watcher,
> and many others). In addition, I AM STILL USING (maybe as a first step?)
> some of the OSProcess PLUGIN (not OSProcess image side), such as the
> SIGCHLD handler or the creation of pipes.
>
> In github url you have all the documentation of the project, included
> how to install it and use it.
>
> *Finally, if you test it in a OS different than OSX and CentOS please
> share with me the results (about the tests).* Tomorrow the
> ConfigurationOf should also appear in the Catalog of Pharo 5.0.
>
> Any feedback is appreciated.
>
> Best,
>
> --
> Mariano
> http://marianopeck.wordpress.com
Hi,
Thank you for your work!
In Windows seven I got an error on loading.
Executed code in Pharo 5:
Metacello new
configuration: 'OSSubprocess';
repository: 'github://marianopeck/OSSubprocess:master/repository';
version: #stable;
load.
Stack:
ExternalLibraryFunction(Object)>>error:
ExternalLibraryFunction(Object)>>externalCallFailed
ExternalLibraryFunction(ExternalFunction)>>invokeWithArguments:
OSSUnixSystemAccessor>>primitiveGetpid
FFICalloutAPI>>function:module:
OSSUnixSystemAccessor(Object)>>ffiCall:
OSSUnixSystemAccessor>>primitiveGetpid
OSSUnixSystemAccessor>>getPid
OSSVMProcess>>initialize
OSSVMProcess class>>initializeVMProcessInstance
OSSVMProcess class>>initialize
MCMethodDefinition>>postloadOver:
[ :each | each postloadOver: (self obsoletionFor: each) ] in
MCPackageLoader>>basicLoadDefinitions in Block: [ :each | each
postloadOver: (self obsoletionFor: ...etc...
[ :each |
| newLabel |
"Special handling for first and last element"
(count = 0
or:
[ count + 1 = size
or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
ifTrue:
[ bar current: count.
oldLabel = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
ifFalse: [ bar label: newLabel.
oldLabel := newLabel ].
lastUpdate := Time millisecondClockValue ].
aBlock value: each.
count := count + 1 ] in [ :bar |
labelBlock := aStringOrBlock isString
ifTrue: [ bar label: aStringOrBlock.
[ :dummyItem | aStringOrBlock ] ]
ifFalse: [ aStringOrBlock ].
self
do:
[ :each |
| newLabel |
"Special handling for first and last element"
(count = 0
or:
[ count + 1 = size
or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
ifTrue:
[ bar current: count.
oldLabel
= (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
ifFalse: [ bar label: newLabel.
oldLabel := newLabel ].
lastUpdate := Time millisecondClockValue ].
aBlock value: each.
count := count + 1 ] ] in
OrderedCollection(Collection)>>do:displayingProgress:every: in Block: [
:each | ...
OrderedCollection>>do:
[ :bar |
labelBlock := aStringOrBlock isString
ifTrue: [ bar label: aStringOrBlock.
[ :dummyItem | aStringOrBlock ] ]
ifFalse: [ aStringOrBlock ].
self
do:
[ :each |
| newLabel |
"Special handling for first and last element"
(count = 0
or:
[ count + 1 = size
or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
ifTrue:
[ bar current: count.
oldLabel
= (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
ifFalse: [ bar label: newLabel.
oldLabel := newLabel ].
lastUpdate := Time millisecondClockValue ].
aBlock value: each.
count := count + 1 ] ] in
OrderedCollection(Collection)>>do:displayingProgress:every: in Block: [
:bar | ...
BlockClosure>>cull:
[ ^ block cull: self ] in [ self prepareForRunning.
CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run in
Block: [ ^ block cull: self ]
[ p psValueAt: index put: anObject.
aBlock value ] in CurrentJob(DynamicVariable)>>value:during: in Block: [
p psValueAt: index put: anObject....
BlockClosure>>ensure:
CurrentJob(DynamicVariable)>>value:during:
CurrentJob class(DynamicVariable class)>>value:during:
[ self prepareForRunning.
CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run in
Block: [ self prepareForRunning....
BlockClosure>>ensure:
Job>>run
MorphicUIManager(UIManager)>>displayProgress:from:to:during:
ByteString(String)>>displayProgressFrom:to:during:
OrderedCollection(Collection)>>do:displayingProgress:every:
OrderedCollection(Collection)>>do:displayingProgress:
MCPackageLoader>>basicLoadDefinitions
--
Cyril Ferlicot
http://www.synectique.eu
165 Avenue Bretagne
Lille 59000 France
Free forum by Nabble | Edit this page |