util: recwatch: Add a helper function for merging these
I should really rework the recwatch package and API, but I wasn't in the mood to touch this code today, so this will have to do for now.
This commit is contained in:
@@ -387,3 +387,27 @@ func isDir(path string) bool {
|
|||||||
}
|
}
|
||||||
return finfo.IsDir()
|
return finfo.IsDir()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MergeChannels is a helper function to combine different recwatch events. It
|
||||||
|
// would be preferable to actually fix the horrible recwatch code to allow it to
|
||||||
|
// monitor more than one path from the start.
|
||||||
|
func MergeChannels(chanList ...<-chan Event) <-chan Event {
|
||||||
|
out := make(chan Event)
|
||||||
|
wg := &sync.WaitGroup{}
|
||||||
|
wg.Add(len(chanList)) // do them all together
|
||||||
|
for _, ch := range chanList {
|
||||||
|
//wg.Add(1)
|
||||||
|
go func(ch <-chan Event) {
|
||||||
|
defer wg.Done()
|
||||||
|
for v := range ch {
|
||||||
|
out <- v
|
||||||
|
}
|
||||||
|
}(ch)
|
||||||
|
}
|
||||||
|
go func() {
|
||||||
|
// Last one closes!
|
||||||
|
wg.Wait()
|
||||||
|
close(out)
|
||||||
|
}()
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user