Skip to content

Commit 347795b

Browse files
author
jguerreiro
committed
feat(gitlab): separate accessible and group repositories
1 parent 6244cda commit 347795b

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

gitlab/provider.go

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -117,16 +117,17 @@ func (p *Provider) gatherAccessiblePage(page int) ([]dnacollector.GitRepository,
117117
return repositories, resp.TotalPages, nil
118118
}
119119

120-
func (p *Provider) gatherGroupProjectPage(page int) ([]dnacollector.GitRepository, int, error) {
121-
opt := &gitlab.ListProjectsOptions{
120+
func (p *Provider) gatherGroupProjectPage(groupID, page int) ([]dnacollector.GitRepository, int, error) {
121+
opt := &gitlab.ListGroupProjectsOptions{
122122
ListOptions: gitlab.ListOptions{
123-
PerPage: reposPerPage, Page: page,
124-
}, Statistics: gitlab.Bool(true),
123+
PerPage: reposPerPage,
124+
Page: page,
125+
},
125126
}
126127

127128
log.Infof("Gathering page %v for %v\n", page, p.client.BaseURL())
128129

129-
repos, resp, err := p.client.Projects.ListProjects(opt)
130+
repos, resp, err := p.client.Groups.ListGroupProjects(groupID, opt)
130131
if err != nil {
131132
return nil, 0, err
132133
}
@@ -226,27 +227,38 @@ func (p *Provider) collectFromGroup(repositories []dnacollector.GitRepository,
226227
return repositories
227228
}
228229

229-
opt := &gitlab.ListGroupProjectsOptions{
230-
ListOptions: gitlab.ListOptions{
231-
PerPage: reposPerPage,
232-
Page: 1,
233-
},
234-
}
230+
wg := sync.WaitGroup{}
235231

236-
repos, resp, err := p.client.Groups.ListGroupProjects(groupID, opt)
232+
var mu sync.Mutex
233+
234+
_, totalPages, err := p.gatherGroupProjectPage(groupID, 1)
237235
if err != nil {
238-
log.Errorf("Error gathering page: %v\n", err)
236+
log.Errorf("Error gathering first page: %v\n", err)
239237

240238
return repositories
241239
}
242240

243-
pagesCount := resp.TotalPages
244-
log.Infof("Gathering %v pages for %s\n", pagesCount, user)
241+
for pageCount := 1; pageCount <= totalPages; pageCount++ {
242+
wg.Add(1)
245243

246-
for _, repo := range repos {
247-
repositories = append(repositories, createFromGitlabRepo(repo))
244+
go func(page int) {
245+
defer wg.Done()
246+
247+
pageRepositories, _, err := p.gatherGroupProjectPage(groupID, page)
248+
if err != nil {
249+
log.Errorf("Error gathering page %v:%v\n", page, err)
250+
251+
return
252+
}
253+
254+
mu.Lock()
255+
repositories = append(repositories, pageRepositories...)
256+
mu.Unlock()
257+
}(pageCount)
248258
}
249259

260+
wg.Wait()
261+
250262
return repositories
251263
}
252264

0 commit comments

Comments
 (0)