I/O fixes

Slava Pestov 2008-09-18 18:20:26 -05:00
parent a53a198cc2
commit 58914da662
3 changed files with 33 additions and 21 deletions

View File

@ -145,10 +145,13 @@ M: process-failed error.
"Launch descriptor:" print nl
process>> . ;
: try-process ( desc -- )
run-process dup wait-for-process dup zero?
: wait-for-success ( process -- )
dup wait-for-process dup zero?
[ 2drop ] [ process-failed ] if ;
: try-process ( desc -- )
run-process wait-for-success ;
HOOK: kill-process* io-backend ( handle -- )
: kill-process ( process -- )
@ -167,7 +170,7 @@ M: object run-pipeline-element
3bi
wait-for-process ;
: <process-reader*> ( process encoding -- process stream )
: <process-reader*> ( desc encoding -- stream process )
[
>r (pipe) {
[ |dispose drop ]
@ -178,13 +181,18 @@ M: object run-pipeline-element
]
[ out>> dispose ]
[ in>> <input-port> ]
} cleave r> <decoder>
} cleave r> <decoder> swap
] with-destructors ;
: <process-reader> ( desc encoding -- stream )
<process-reader*> nip ; inline
<process-reader*> drop ; inline
: <process-writer*> ( process encoding -- process stream )
: with-process-reader ( desc encoding quot -- )
[ <process-reader*> ] dip
swap [ with-input-stream ] dip
wait-for-success ; inline
: <process-writer*> ( desc encoding -- stream process )
[
>r (pipe) {
[ |dispose drop ]
@ -195,13 +203,18 @@ M: object run-pipeline-element
]
[ in>> dispose ]
[ out>> <output-port> ]
} cleave r> <encoder>
} cleave r> <encoder> swap
] with-destructors ;
: <process-writer> ( desc encoding -- stream )
<process-writer*> nip ; inline
<process-writer*> drop ; inline
: <process-stream*> ( process encoding -- process stream )
: with-process-writer ( desc encoding quot -- )
[ <process-writer*> ] dip
swap [ with-output-stream ] dip
wait-for-success ; inline
: <process-stream*> ( desc encoding -- stream process )
[
>r (pipe) (pipe) {
[ [ |dispose drop ] bi@ ]
@ -213,11 +226,16 @@ M: object run-pipeline-element
]
[ [ out>> dispose ] [ in>> dispose ] bi* ]
[ [ in>> <input-port> ] [ out>> <output-port> ] bi* ]
} 2cleave r> <encoder-duplex>
} 2cleave r> <encoder-duplex> swap
] with-destructors ;
: <process-stream> ( desc encoding -- stream )
<process-stream*> nip ; inline
<process-stream*> drop ; inline
: with-process-stream ( desc encoding quot -- )
[ <process-stream*> ] dip
swap [ with-stream ] dip
wait-for-success ; inline
: notify-exit ( process status -- )
>>status

View File

@ -18,12 +18,8 @@ IN: tools.deploy.backend
: image-name ( vocab bundle-name -- str )
prepend-path ".image" append ;
: (copy-lines) ( stream -- )
dup stream-readln dup
[ print flush (copy-lines) ] [ 2drop ] if ;
: copy-lines ( stream -- )
[ (copy-lines) ] with-disposal ;
: copy-lines ( -- )
readln [ print flush copy-lines ] when* ;
: run-with-output ( arguments -- )
<process>
@ -31,9 +27,7 @@ IN: tools.deploy.backend
+stdout+ >>stderr
+closed+ >>stdin
+low-priority+ >>priority
utf8 <process-reader*>
copy-lines
wait-for-process zero? [ "Deployment failed" throw ] unless ;
utf8 [ copy-lines ] with-process-reader ;
: make-boot-image ( -- )
#! If stage1 image doesn't exist, create one.

View File

@ -194,7 +194,7 @@ SYMBOL: current-directory
[
cwd current-directory set-global
image parent-directory cwd prepend-path "resource-path" set
image parent-directory cwd prepend-path "resource-path" set-global
] "io.files" add-init-hook
: resource-path ( path -- newpath )