Skip to content

Commit dc9e6d0

Browse files
Merge pull request #75 from yassinebenaid/support-command-substitution
Support command substitution
2 parents 4859892 + 450d48e commit dc9e6d0

File tree

2 files changed

+235
-0
lines changed

2 files changed

+235
-0
lines changed
File renamed without changes.
Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
#(TEST: simple group)
2+
3+
$( command )
4+
5+
#(RESULT)
6+
7+
package main
8+
9+
import "bunster-build/runtime"
10+
11+
func Main(shell *runtime.Shell, streamManager *runtime.StreamManager) {
12+
func() {
13+
var commandName = func() string {
14+
streamManager := streamManager.Clone()
15+
defer streamManager.Destroy()
16+
shell := shell.Clone()
17+
var stdout = runtime.NewBuffer(``, false)
18+
streamManager.Add(`1`, stdout)
19+
func() {
20+
var commandName = `command`
21+
var arguments []string
22+
var command = shell.Command(commandName, arguments...)
23+
streamManager := streamManager.Clone()
24+
defer streamManager.Destroy()
25+
if stream, err := streamManager.Get(`0`); err != nil {
26+
shell.HandleError(err)
27+
} else {
28+
command.Stdin = stream
29+
}
30+
if stream, err := streamManager.Get(`1`); err != nil {
31+
shell.HandleError(err)
32+
} else {
33+
command.Stdout = stream
34+
}
35+
if stream, err := streamManager.Get(`2`); err != nil {
36+
shell.HandleError(err)
37+
} else {
38+
command.Stderr = stream
39+
}
40+
if err := command.Run(); err != nil {
41+
shell.HandleError(err)
42+
return
43+
}
44+
shell.ExitCode = command.ProcessState.ExitCode()
45+
46+
}()
47+
return stdout.String(true)
48+
}()
49+
var arguments []string
50+
var command = shell.Command(commandName, arguments...)
51+
streamManager := streamManager.Clone()
52+
defer streamManager.Destroy()
53+
if stream, err := streamManager.Get(`0`); err != nil {
54+
shell.HandleError(err)
55+
} else {
56+
command.Stdin = stream
57+
}
58+
if stream, err := streamManager.Get(`1`); err != nil {
59+
shell.HandleError(err)
60+
} else {
61+
command.Stdout = stream
62+
}
63+
if stream, err := streamManager.Get(`2`); err != nil {
64+
shell.HandleError(err)
65+
} else {
66+
command.Stderr = stream
67+
}
68+
if err := command.Run(); err != nil {
69+
shell.HandleError(err)
70+
return
71+
}
72+
shell.ExitCode = command.ProcessState.ExitCode()
73+
74+
}()
75+
}
76+
77+
#(ENDTEST)
78+
79+
80+
#(TEST: simple group)
81+
82+
"/path/$( program )"
83+
84+
#(RESULT)
85+
package main
86+
87+
import "bunster-build/runtime"
88+
89+
func Main(shell *runtime.Shell, streamManager *runtime.StreamManager) {
90+
func() {
91+
var commandName = `/path/` + func() string {
92+
streamManager := streamManager.Clone()
93+
defer streamManager.Destroy()
94+
shell := shell.Clone()
95+
var stdout = runtime.NewBuffer(``, false)
96+
streamManager.Add(`1`, stdout)
97+
func() {
98+
var commandName = `program`
99+
var arguments []string
100+
var command = shell.Command(commandName, arguments...)
101+
streamManager := streamManager.Clone()
102+
defer streamManager.Destroy()
103+
if stream, err := streamManager.Get(`0`); err != nil {
104+
shell.HandleError(err)
105+
} else {
106+
command.Stdin = stream
107+
}
108+
if stream, err := streamManager.Get(`1`); err != nil {
109+
shell.HandleError(err)
110+
} else {
111+
command.Stdout = stream
112+
}
113+
if stream, err := streamManager.Get(`2`); err != nil {
114+
shell.HandleError(err)
115+
} else {
116+
command.Stderr = stream
117+
}
118+
if err := command.Run(); err != nil {
119+
shell.HandleError(err)
120+
return
121+
}
122+
shell.ExitCode = command.ProcessState.ExitCode()
123+
124+
}()
125+
return stdout.String(true)
126+
}()
127+
var arguments []string
128+
var command = shell.Command(commandName, arguments...)
129+
streamManager := streamManager.Clone()
130+
defer streamManager.Destroy()
131+
if stream, err := streamManager.Get(`0`); err != nil {
132+
shell.HandleError(err)
133+
} else {
134+
command.Stdin = stream
135+
}
136+
if stream, err := streamManager.Get(`1`); err != nil {
137+
shell.HandleError(err)
138+
} else {
139+
command.Stdout = stream
140+
}
141+
if stream, err := streamManager.Get(`2`); err != nil {
142+
shell.HandleError(err)
143+
} else {
144+
command.Stderr = stream
145+
}
146+
if err := command.Run(); err != nil {
147+
shell.HandleError(err)
148+
return
149+
}
150+
shell.ExitCode = command.ProcessState.ExitCode()
151+
152+
}()
153+
}
154+
155+
#(ENDTEST)
156+
157+
158+
#(TEST: simple group)
159+
160+
cmd $( subcommand )
161+
162+
#(RESULT)
163+
164+
package main
165+
166+
import "bunster-build/runtime"
167+
168+
func Main(shell *runtime.Shell, streamManager *runtime.StreamManager) {
169+
func() {
170+
var commandName = `cmd`
171+
var arguments []string
172+
arguments = append(arguments, func() string {
173+
streamManager := streamManager.Clone()
174+
defer streamManager.Destroy()
175+
shell := shell.Clone()
176+
var stdout = runtime.NewBuffer(``, false)
177+
streamManager.Add(`1`, stdout)
178+
func() {
179+
var commandName = `subcommand`
180+
var arguments []string
181+
var command = shell.Command(commandName, arguments...)
182+
streamManager := streamManager.Clone()
183+
defer streamManager.Destroy()
184+
if stream, err := streamManager.Get(`0`); err != nil {
185+
shell.HandleError(err)
186+
} else {
187+
command.Stdin = stream
188+
}
189+
if stream, err := streamManager.Get(`1`); err != nil {
190+
shell.HandleError(err)
191+
} else {
192+
command.Stdout = stream
193+
}
194+
if stream, err := streamManager.Get(`2`); err != nil {
195+
shell.HandleError(err)
196+
} else {
197+
command.Stderr = stream
198+
}
199+
if err := command.Run(); err != nil {
200+
shell.HandleError(err)
201+
return
202+
}
203+
shell.ExitCode = command.ProcessState.ExitCode()
204+
205+
}()
206+
return stdout.String(true)
207+
}())
208+
var command = shell.Command(commandName, arguments...)
209+
streamManager := streamManager.Clone()
210+
defer streamManager.Destroy()
211+
if stream, err := streamManager.Get(`0`); err != nil {
212+
shell.HandleError(err)
213+
} else {
214+
command.Stdin = stream
215+
}
216+
if stream, err := streamManager.Get(`1`); err != nil {
217+
shell.HandleError(err)
218+
} else {
219+
command.Stdout = stream
220+
}
221+
if stream, err := streamManager.Get(`2`); err != nil {
222+
shell.HandleError(err)
223+
} else {
224+
command.Stderr = stream
225+
}
226+
if err := command.Run(); err != nil {
227+
shell.HandleError(err)
228+
return
229+
}
230+
shell.ExitCode = command.ProcessState.ExitCode()
231+
232+
}()
233+
}
234+
235+
#(ENDTEST)

0 commit comments

Comments
 (0)