Handling channel close

This commit is contained in:
Laszlo Fogas 2019-06-05 10:08:49 +02:00
parent 302f07da3c
commit 435083db9e
2 changed files with 20 additions and 15 deletions

View file

@ -261,10 +261,11 @@ func (c *client) Dir(u *model.User, r *model.Repo, b *model.Build, f string) ([]
content, err := c.File(u, r, b, path) content, err := c.File(u, r, b, path)
if err != nil { if err != nil {
errc <- err errc <- err
} } else {
fc <- &remote.FileMeta{ fc <- &remote.FileMeta{
Name: path, Name: path,
Data: content, Data: content,
}
} }
}(f + "/" + *file.Name) }(f + "/" + *file.Name)
} }
@ -275,12 +276,16 @@ func (c *client) Dir(u *model.User, r *model.Repo, b *model.Build, f string) ([]
go func() { go func() {
for { for {
select { select {
case err := <-errc: case err, open := <-errc:
errors = append(errors, err) if open {
wg.Done() errors = append(errors, err)
case fileMeta := <-fc: wg.Done()
files = append(files, fileMeta) }
wg.Done() case fileMeta, open := <-fc:
if open {
files = append(files, fileMeta)
wg.Done()
}
} }
} }
}() }()

View file

@ -18,17 +18,17 @@ func (cf *configFetcher) Fetch() ([]*remote.FileMeta, error) {
for i := 0; i < 5; i++ { for i := 0; i < 5; i++ {
select { select {
case <-time.After(time.Second * time.Duration(i)): case <-time.After(time.Second * time.Duration(i)):
file, err := cf.remote_.File(cf.user, cf.repo, cf.build, cf.repo.Config) // either a file file, fileerr := cf.remote_.File(cf.user, cf.repo, cf.build, cf.repo.Config) // either a file
if err == nil { if fileerr == nil {
return []*remote.FileMeta{&remote.FileMeta{ return []*remote.FileMeta{&remote.FileMeta{
Name: cf.repo.Config, Name: cf.repo.Config,
Data: file, Data: file,
}}, nil }}, nil
} }
dir, err := cf.remote_.Dir(cf.user, cf.repo, cf.build, cf.repo.Config) // or a folder dir, direrr := cf.remote_.Dir(cf.user, cf.repo, cf.build, ".drone") // or a folder
if err != nil { if direrr != nil {
return nil, err return nil, direrr
} }
return dir, nil return dir, nil
} }