diff --git a/lib/workers/global/initialize.ts b/lib/workers/global/initialize.ts index f159bfdc7c449748cc3da22603a558c9a11dcbe0..7eafa5e0c3b2bc2009ac42b6a2093e6adab40434 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 d2a4ad8b6b2ae5e2ee77a4675d8daa6da8c59ccd..8714b928698fd29c34797e777469725db0c25f3d 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 5bb983bb09aa823e0845972a501a11ed81fc47c9..04d194c72d22f7d4c4ffdf9368a96c5e02f300d2 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 {