"Launch descriptor:" print nl
] [ process>> . ] bi ;
+: check-success ( process status -- )
+ 0 = [ drop ] [ process-failed ] if ;
+
: wait-for-success ( process -- )
- dup wait-for-process 0 = [ drop ] [ process-failed ] if ;
+ dup wait-for-process check-success ;
: try-process ( desc -- )
run-process wait-for-success ;
: <process-reader> ( desc encoding -- stream )
(process-reader) drop ; inline
-: with-process-reader ( desc encoding quot -- )
- [ (process-reader) ] dip
- '[ _ with-input-stream ] dip
- wait-for-success ; inline
+: with-process-reader* ( ... desc encoding quot: ( ... -- ... ) -- ... process status )
+ [ (process-reader) ] dip '[ _ with-input-stream ] dip
+ dup wait-for-process ; inline
+
+: with-process-reader ( ... desc encoding quot: ( ... -- ... ) -- ... )
+ with-process-reader* check-success ; inline
<PRIVATE
: <process-writer> ( desc encoding -- stream )
(process-writer) drop ; inline
-: with-process-writer ( desc encoding quot -- )
- [ (process-writer) ] dip
- '[ _ with-output-stream ] dip
- wait-for-success ; inline
+: with-process-writer* ( ... desc encoding quot: ( ... -- ... ) -- ... process status )
+ [ (process-writer) ] dip '[ _ with-output-stream ] dip
+ dup wait-for-process ; inline
+
+: with-process-writer ( ... desc encoding quot: ( ... -- ... ) -- ... )
+ with-process-writer* check-success ; inline
<PRIVATE
: <process-stream> ( desc encoding -- stream )
(process-stream) drop ; inline
-: with-process-stream ( desc encoding quot -- )
- [ (process-stream) ] dip
- '[ _ with-stream ] dip
- wait-for-success ; inline
+: with-process-stream* ( ... desc encoding quot: ( ... -- ... ) -- ... process status )
+ [ (process-stream) ] dip '[ _ with-stream ] dip
+ dup wait-for-process ; inline
+
+: with-process-stream ( ... desc encoding quot: ( ... -- ... ) -- ... )
+ with-process-stream* check-success ; inline
ERROR: output-process-error { output string } { process process } ;
! See http://factorcode.org/license.txt for BSD license.
USING: accessors combinators.short-circuit continuations
debugger io io.directories io.directories.hierarchy
-io.encodings.utf8 io.files io.launcher io.launcher.private
-io.sockets io.streams.string kernel mason.common mason.email
-sequences splitting ;
+io.encodings.utf8 io.files io.launcher io.sockets
+io.streams.string kernel mason.common mason.email sequences
+splitting ;
IN: mason.git
: git-id ( -- id )
if
] [ rethrow ] if ;
-: with-process-reader* ( desc encoding quot -- )
- [ (process-reader) ] dip swap [ with-input-stream ] dip
- dup wait-for-process dup { 0 1 } member?
- [ 2drop ] [ process-failed ] if ; inline
-
: git-status-cmd ( -- cmd )
{ "git" "status" } ;
: git-status ( -- seq )
[
git-status-cmd utf8 [ lines ] with-process-reader*
+ { 0 1 } member? [ 2drop ] [ process-failed ] if
[ "#\t" head? ] filter
] [ git-status-failed { } ] recover ;