diff --git a/lib/api/gitlab.js b/lib/api/gitlab.js index d22716f406cf01c48e3ff0b555bc1560635326e0..4ff6a291b9128154962f4041ad6a5d710516910c 100644 --- a/lib/api/gitlab.js +++ b/lib/api/gitlab.js @@ -53,20 +53,10 @@ async function getRepos(token, endpoint) { process.env.GITLAB_ENDPOINT = endpoint; } try { - let projects = []; - const perPage = 100; - let i = 1; - let res; - do { - const url = `projects?membership=true&per_page=100&page=${i}`; - res = await get(url); - projects = projects.concat( - res.body.map(repo => repo.path_with_namespace) - ); - i += 1; - } while (res.body.length === perPage); - logger.info(`Discovered ${projects.length} project(s)`); - return projects; + const url = `projects?membership=true&per_page=100`; + const res = await get(url, { paginate: true }); + logger.info(`Discovered ${res.body.length} project(s)`); + return res.body.map(repo => repo.path_with_namespace); } catch (err) { logger.error({ err }, `GitLab getRepos error`); throw err; diff --git a/lib/workers/pr/index.js b/lib/workers/pr/index.js index 3f9df72d49fc666f7988a66544afade5796bb16b..6040b29190a241476a8dc16d46e2fbd004b857ea 100644 --- a/lib/workers/pr/index.js +++ b/lib/workers/pr/index.js @@ -127,7 +127,7 @@ async function ensurePr(prConfig) { const prTitle = handlebars.compile(config.prTitle)(config); let prBody; - do { + async function trimPrBody() { let prBodyMarkdown = handlebars.compile(config.prBody)(config); const atUserRe = /[^`]@([a-z]+\/[a-z]+)/g; prBodyMarkdown = prBodyMarkdown.replace(atUserRe, '@​$1'); @@ -136,8 +136,13 @@ async function ensurePr(prConfig) { prBody = prBody.replace(issueRe, '$1#​$2$3'); const backTickRe = /`([^/]*?)`/g; prBody = prBody.replace(backTickRe, '<code>$1</code>'); - config.upgrades.pop(); - } while (prBody.length > 250000); + // istanbul ignore if + if (prBody.length > 250000) { + config.upgrades.pop(); + trimPrBody(); + } + } + trimPrBody(); try { // Check if existing PR exists diff --git a/test/api/__snapshots__/gitlab.spec.js.snap b/test/api/__snapshots__/gitlab.spec.js.snap index 4b1036017a31553ee16ec58f873b6f5e82b1d7be..b835b7f108a586259480c75ff06bf8d878bda88e 100644 --- a/test/api/__snapshots__/gitlab.spec.js.snap +++ b/test/api/__snapshots__/gitlab.spec.js.snap @@ -299,24 +299,13 @@ Object { } `; -exports[`api/gitlab getRepos should fetch multiple pages 1`] = ` -Array [ - Array [ - "projects?membership=true&per_page=100&page=1", - ], - Array [ - "projects?membership=true&per_page=100&page=2", - ], - Array [ - "projects?membership=true&per_page=100&page=3", - ], -] -`; - exports[`api/gitlab getRepos should return an array of repos 1`] = ` Array [ Array [ - "projects?membership=true&per_page=100&page=1", + "projects?membership=true&per_page=100", + Object { + "paginate": true, + }, ], ] `; @@ -331,7 +320,10 @@ Array [ exports[`api/gitlab getRepos should support a custom endpoint 1`] = ` Array [ Array [ - "projects?membership=true&per_page=100&page=1", + "projects?membership=true&per_page=100", + Object { + "paginate": true, + }, ], ] `; diff --git a/test/api/gitlab.spec.js b/test/api/gitlab.spec.js index 4ff05f92dcf95f635587fa5f4531313c957fb37e..78f6b5f133835ebd29c5343856b4dd50cb90d64d 100644 --- a/test/api/gitlab.spec.js +++ b/test/api/gitlab.spec.js @@ -61,25 +61,6 @@ describe('api/gitlab', () => { expect(get.mock.calls).toMatchSnapshot(); expect(repos).toMatchSnapshot(); }); - it('should fetch multiple pages', async () => { - const repoCount = 250; - const projects = []; - for (let i = 0; i < repoCount; i += 1) { - projects.push({ path_with_namespace: `project${i}` }); - } - get.mockImplementationOnce(() => ({ - body: projects.slice(0, 100), - })); - get.mockImplementationOnce(() => ({ - body: projects.slice(100, 200), - })); - get.mockImplementationOnce(() => ({ - body: projects.slice(200), - })); - const repos = await gitlab.getRepos('sometoken'); - expect(get.mock.calls).toMatchSnapshot(); - expect(repos.length).toBe(repoCount); - }); }); async function initRepo(...args) { diff --git a/test/config/index.spec.js b/test/config/index.spec.js index e6a5a7bdf8e627801c88b6b456405a8dcd8db39b..2a4db9718c5e3fbd2d52ba3b69f09a894deec138 100644 --- a/test/config/index.spec.js +++ b/test/config/index.spec.js @@ -114,6 +114,7 @@ describe('config/index', () => { '--token=abc', ]); get.mockImplementationOnce(() => ({ + headers: {}, body: [ { path_with_namespace: 'a/b',