@@ -7,6 +7,11 @@ const os = require('os');
77const fs = require ( 'fs' ) . promises ;
88const path = require ( 'path' ) ;
99
10+ // Load at most MAX_PAGE pages when determining modified files.
11+ // This is used both for pull/{pull_number}/files as well as for
12+ // repos/compareCommits API calls.
13+ const MAX_PAGE = 10 ;
14+
1015const downloadPmd = async function ( version , token ) {
1116 let pmdVersion = version ;
1217 let cachedPmdPath = tc . find ( 'pmd' , version ) ;
@@ -104,10 +109,11 @@ const determineModifiedFiles = async function(token, sourcePath) {
104109 if ( context . eventName === 'pull_request' ) {
105110 core . debug ( `Pull request ${ eventData . number } : ${ eventData . pull_request . html_url } ` ) ;
106111
107- let modifiedFilenames = [ ] ;
112+ let modifiedFilenames = new Set ( ) ;
108113
109114 // maximum of 300 files are loaded (page size is 30, max 10 pages)
110- for ( let page = 1 ; page < 10 ; page ++ ) {
115+ let page ;
116+ for ( page = 1 ; page <= MAX_PAGE ; page ++ ) {
111117 const listFilesResponse = await octokit . rest . pulls . listFiles ( {
112118 ...context . repo ,
113119 pull_number : eventData . number ,
@@ -119,17 +125,21 @@ const determineModifiedFiles = async function(token, sourcePath) {
119125 break ;
120126 }
121127 const filenames = extractFilenames ( allFiles , page , sourcePath ) ;
122- modifiedFilenames . push ( ...filenames ) ;
128+ filenames . forEach ( f => modifiedFilenames . add ( f ) ) ;
129+ }
130+ if ( page >= MAX_PAGE ) {
131+ core . warning ( `The pull request ${ eventData . number } is too big - not all changed files will be analyzed!` ) ;
123132 }
124133
125- return modifiedFilenames ;
134+ return [ ... modifiedFilenames ] ;
126135 } else if ( context . eventName === 'push' ) {
127136 core . debug ( `Push on ${ eventData . ref } : ${ eventData . before } ...${ eventData . after } ` ) ;
128137
129- let modifiedFilenames = [ ] ;
138+ let modifiedFilenames = new Set ( ) ;
130139
131140 // maximum of 300 files are loaded (page size is 30, max 10 pages)
132- for ( let page = 1 ; page < 10 ; page ++ ) {
141+ let page ;
142+ for ( page = 1 ; page <= MAX_PAGE ; page ++ ) {
133143 const compareResponse = await octokit . rest . repos . compareCommitsWithBasehead ( {
134144 ...context . repo ,
135145 basehead : `${ eventData . before } ...${ eventData . after } ` ,
@@ -141,10 +151,13 @@ const determineModifiedFiles = async function(token, sourcePath) {
141151 break ;
142152 }
143153 const filenames = extractFilenames ( allFiles , page , sourcePath ) ;
144- modifiedFilenames . push ( ...filenames ) ;
154+ filenames . forEach ( f => modifiedFilenames . add ( f ) ) ;
155+ }
156+ if ( page >= MAX_PAGE ) {
157+ core . warning ( `The push on ${ eventData . ref } is too big - not all changed files will be analyzed!` ) ;
145158 }
146159
147- return modifiedFilenames ;
160+ return [ ... modifiedFilenames ] ;
148161 } else {
149162 core . warning ( `Unsupported github action event '${ context . eventName } ' - cannot determine modified files. All files will be analyzed.` ) ;
150163 return undefined ;
0 commit comments