Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
qitab
inferior-shell
Compare Revisions
d36a06eca4425853616e6ea53dd8b2a3cf477124...c5a58f30f676f476e997f9164444d52b7c53223f
Commits (2)
Demacroify subroutine in parse-process-spec
· 7f006053
Francois-Rene Rideau
authored
Apr 14, 2015
7f006053
2.0.3: use error, not signal, to re-signal errors from run-program.
· c5a58f30
Francois-Rene Rideau
authored
Apr 22, 2015
c5a58f30
Show whitespace changes
Inline
Side-by-side
inferior-shell.asd
View file @
c5a58f30
...
...
@@ -2,7 +2,7 @@
(
defsystem
"inferior-shell"
:description
"spawn local or remote processes and shell pipes"
:version
"2.0.
2
"
:version
"2.0.
3
"
:defsystem-depends-on
(
:asdf
#-
asdf3
"uiop"
)
:depends-on
((
:version
#+
asdf3
"asdf"
#-
asdf3
"uiop"
"3.0.3"
)
; input and error-output redirection
#+
sbcl
"sb-posix"
...
...
process-spec.lisp
View file @
c5a58f30
...
...
@@ -174,25 +174,23 @@
(
clps-current-argument
c
)
nil
)))
(
defun
parse-process-spec
(
spec
)
(
macrolet
((
make-sequence-instance
(
spec-type
args
)
`
(
make-instance
',spec-type
:processes
(
loop
:for
process
:in
(
mapcar
'parse-process-spec
,
args
)
:nconc
(
etypecase
process
(
,
spec-type
(
sequence-processes
process
))
(
sequence-spec
(
list
process
))
(
command-spec
(
list
process
)))))))
(
labels
((
make-sequence-instance
(
spec-type
args
)
(
make-instance
spec-type
:processes
(
loop
:for
process
:in
(
mapcar
'parse-process-spec
args
)
:nconc
(
if
(
typep
process
spec-type
)
(
sequence-processes
process
)
(
list
process
))))))
(
match
spec
(
`
(
pipe
,@
args
)
(
make-sequence-instance
pipe-spec
args
))
(
make-sequence-instance
'
pipe-spec
args
))
(
`
(
or
,@
args
)
(
make-sequence-instance
or-spec
args
))
(
make-sequence-instance
'
or-spec
args
))
(
`
(
and
,@
args
)
(
make-sequence-instance
and-spec
args
))
(
make-sequence-instance
'
and-spec
args
))
(
`
(
progn
,@
args
)
(
make-sequence-instance
progn-spec
args
))
(
make-sequence-instance
'
progn-spec
args
))
(
`
(
fork
,@
args
)
(
make-sequence-instance
fork-spec
args
))
(
make-sequence-instance
'
fork-spec
args
))
(
`
(
,
_
,@
_
)
(
let
((
c
(
make-instance
'command-parse
)))
(
dolist
(
elem
spec
)
...
...
run.lisp
View file @
c5a58f30
...
...
@@ -55,7 +55,7 @@
&key
time
show
host
(
on-error
t
)
&allow-other-keys
)
"run command CMD"
(
when
(
eq
on-error
t
)
(
setf
on-error
'
signal
))
(
when
(
eq
on-error
t
)
(
setf
on-error
'
error
))
(
when
show
(
format
*trace-output*
"; ~A~%"
(
print-process-spec
cmd
)))
(
flet
((
run-it
()
...
...