From c98a537f8b10cfb7a12aabecf5378287153c76b9 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov <zharinov@users.noreply.github.com> Date: Fri, 11 Dec 2020 12:26:47 +0400 Subject: [PATCH] refactor(limits): Refactor global limits counter (#7931) --- lib/workers/global/initialize.ts | 8 +++++++- lib/workers/global/limits.spec.ts | 21 +++++++++++++++++++++ lib/workers/global/limits.ts | 13 ++++--------- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/lib/workers/global/initialize.ts b/lib/workers/global/initialize.ts index f159bfdc7c..7eafa5e0c3 100644 --- a/lib/workers/global/initialize.ts +++ b/lib/workers/global/initialize.ts @@ -28,6 +28,12 @@ async function setDirectories(input: RenovateConfig): Promise<RenovateConfig> { return config; } +function limitCommitsPerRun(config: RenovateConfig): void { + let limit = config.prCommitsPerRunLimit; + limit = typeof limit === 'number' && limit > 0 ? limit : null; + setMaxLimit(Limit.Commits, limit); +} + export async function globalInitialize( config_: RenovateConfig ): Promise<RenovateConfig> { @@ -35,7 +41,7 @@ export async function globalInitialize( config = await initPlatform(config); config = await setDirectories(config); packageCache.init(config); - setMaxLimit(Limit.Commits, config.prCommitsPerRunLimit); + limitCommitsPerRun(config); setEmojiConfig(config); return config; } diff --git a/lib/workers/global/limits.spec.ts b/lib/workers/global/limits.spec.ts index d2a4ad8b6b..8714b92869 100644 --- a/lib/workers/global/limits.spec.ts +++ b/lib/workers/global/limits.spec.ts @@ -37,7 +37,28 @@ describe('lib/workers/global/limits', () => { it('increments undefined', () => { incLimitedValue(Limit.Commits); expect(isLimitReached(Limit.Commits)).toBe(false); + }); + + it('resets counter', () => { setMaxLimit(Limit.Commits, 1); + incLimitedValue(Limit.Commits); expect(isLimitReached(Limit.Commits)).toBe(true); + setMaxLimit(Limit.Commits, 1); + expect(isLimitReached(Limit.Commits)).toBe(false); + }); + + it('resets limit', () => { + setMaxLimit(Limit.Commits, 1); + incLimitedValue(Limit.Commits); + expect(isLimitReached(Limit.Commits)).toBe(true); + setMaxLimit(Limit.Commits, null); + expect(isLimitReached(Limit.Commits)).toBe(false); + }); + + it('sets non-positive limit as reached', () => { + setMaxLimit(Limit.Commits, 0); + expect(isLimitReached(Limit.Commits)).toBeTrue(); + setMaxLimit(Limit.Commits, -1000); + expect(isLimitReached(Limit.Commits)).toBeTrue(); }); }); diff --git a/lib/workers/global/limits.ts b/lib/workers/global/limits.ts index 5bb983bb09..04d194c72d 100644 --- a/lib/workers/global/limits.ts +++ b/lib/workers/global/limits.ts @@ -15,15 +15,10 @@ export function resetAllLimits(): void { limits.clear(); } -export function setMaxLimit(key: Limit, max: unknown): void { - const maxVal = typeof max === 'number' && max > 0 ? max : null; - logger.debug(`${key} limit = ${maxVal}`); - const limit = limits.get(key); - limits.set(key, { - current: 0, - ...limit, - max: maxVal, - }); +export function setMaxLimit(key: Limit, val: unknown): void { + const max = typeof val === 'number' ? Math.max(0, val) : null; + limits.set(key, { current: 0, max }); + logger.debug(`${key} limit = ${max}`); } export function incLimitedValue(key: Limit, incBy = 1): void { -- GitLab