-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathpipeline_invocation.go
71 lines (63 loc) · 1.71 KB
/
pipeline_invocation.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package someutils
import (
"time"
//"fmt"
)
type PipelineInvocation struct {
*Invocation
Invocations []*Invocation
}
func (pi *PipelineInvocation) Add(invocation *Invocation) {
if pi.Invocations == nil {
pi.Invocations = []*Invocation{invocation}
} else {
pi.Invocations = append(pi.Invocations, invocation)
}
}
func (pi *PipelineInvocation) SignalAll(signal Signal) {
for _, i := range pi.Invocations {
i.SignalReceiver <- signal
}
}
// Wait until an exit status has occurred
func (pi *PipelineInvocation) Wait() *Invocation {
var i *Invocation
//fmt.Printf("invocations: %v\n", pi.Invocations)
for _, i = range pi.Invocations {
statusCode := i.Wait()
if statusCode == nil || *statusCode != 0 {
return i
}
}
return i //last one (or nil if no invocations)
}
// Wait until an exit status has occurred
func (pi *PipelineInvocation) WaitUpTo(timeout time.Duration) *Invocation {
var i *Invocation
start := time.Now()
for _, i = range pi.Invocations {
diff := time.Now().Sub(start)
err, statusCode := i.WaitUpTo(timeout - diff)
if err != nil {
return NewErrorState(err)
}
if statusCode == nil || *statusCode != 0 {
return i
}
}
return i //last one (or nil if no invocations)
}
func NewPipelineInvocation(invocation *Invocation) *PipelineInvocation {
pi := new(PipelineInvocation)
pi.Invocation = invocation
return pi
}
/*
// This returns the byte buffers to avoid the need to cast. (The assumption being that you'll want to call .Bytes() or .String() on those buffers)
func PipelineInvocationFromReader(inPipe io.Reader) (*PipelineInvocation, *bytes.Buffer, *bytes.Buffer) {
i, o, e := InvocationFromReader(inPipe)
pi := new(PipelineInvocation)
pi.Invocation = i
return pi, o, e
}
*/