Skip to content

Commit aac4f25

Browse files
committed
fix(gitlab): ensure GetFiles pages over all files on Gitlab push events
Gitlab's commit-diff API defaults to return 20 files per page. Without paging through the files, cel funcs like `files.all` and `pathChanged` will only match 20 files on push events.
1 parent 9572f3b commit aac4f25

File tree

1 file changed

+29
-14
lines changed

1 file changed

+29
-14
lines changed

pkg/provider/gitlab/gitlab.go

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -564,23 +564,38 @@ func (v *Provider) fetchChangedFiles(_ context.Context, runevent *info.Event) (c
564564
}
565565
}
566566
case triggertype.Push:
567-
pushChanges, _, err := v.Client().Commits.GetCommitDiff(v.sourceProjectID, runevent.SHA, &gitlab.GetCommitDiffOptions{})
568-
if err != nil {
569-
return changedfiles.ChangedFiles{}, err
570-
}
571-
for _, change := range pushChanges {
572-
changedFiles.All = append(changedFiles.All, change.NewPath)
573-
if change.NewFile {
574-
changedFiles.Added = append(changedFiles.Added, change.NewPath)
567+
options := gitlab.GetCommitDiffOptions{}
568+
pageOpts := []gitlab.RequestOptionFunc{}
569+
570+
for {
571+
pushChanges, resp, err := v.Client().Commits.GetCommitDiff(v.sourceProjectID, runevent.SHA, &options, pageOpts...)
572+
if err != nil {
573+
return changedfiles.ChangedFiles{}, err
575574
}
576-
if change.DeletedFile {
577-
changedFiles.Deleted = append(changedFiles.Deleted, change.NewPath)
575+
576+
for _, change := range pushChanges {
577+
changedFiles.All = append(changedFiles.All, change.NewPath)
578+
if change.NewFile {
579+
changedFiles.Added = append(changedFiles.Added, change.NewPath)
580+
}
581+
if change.DeletedFile {
582+
changedFiles.Deleted = append(changedFiles.Deleted, change.NewPath)
583+
}
584+
if !change.RenamedFile && !change.DeletedFile && !change.NewFile {
585+
changedFiles.Modified = append(changedFiles.Modified, change.NewPath)
586+
}
587+
if change.RenamedFile {
588+
changedFiles.Renamed = append(changedFiles.Renamed, change.NewPath)
589+
}
578590
}
579-
if !change.RenamedFile && !change.DeletedFile && !change.NewFile {
580-
changedFiles.Modified = append(changedFiles.Modified, change.NewPath)
591+
592+
if resp.NextLink == "" {
593+
// Exit the loop when we've seen all pages.
594+
break
581595
}
582-
if change.RenamedFile {
583-
changedFiles.Renamed = append(changedFiles.Renamed, change.NewPath)
596+
// Otherwise, set param to query the next page
597+
pageOpts = []gitlab.RequestOptionFunc{
598+
gitlab.WithKeysetPaginationParameters(resp.NextLink),
584599
}
585600
}
586601
default:

0 commit comments

Comments
 (0)