From 4ea9ed2b5e9f5e58473d4c2bd4b2ff0dde3b391c Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov <olegkrivtsov@gmail.com> Date: Sun, 12 Dec 2021 16:23:17 +0700 Subject: [PATCH] feat(config/presets): handle slash in packageTag (#13028) Co-authored-by: Michael Kriese <michael.kriese@visualon.de> Co-authored-by: Rhys Arkins <rhys@arkins.net> --- lib/config/presets/index.spec.ts | 31 +++++++++++++++++++++++++++++++ lib/config/presets/index.ts | 4 ++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts index eaeb3c418d..f900f01e12 100644 --- a/lib/config/presets/index.spec.ts +++ b/lib/config/presets/index.spec.ts @@ -455,6 +455,37 @@ describe('config/presets/index', () => { packageTag: '1.2.3', }); }); + + it('parses local with subdirectory and branch/tag with a slash', () => { + expect( + presets.parsePreset( + 'local>PROJECT/repository//path/to/preset#feature/branch' + ) + ).toEqual({ + packageName: 'PROJECT/repository', + params: undefined, + presetName: 'preset', + presetPath: 'path/to', + presetSource: 'local', + packageTag: 'feature/branch', + }); + }); + + it('parses local with sub preset and branch/tag with a slash', () => { + expect( + presets.parsePreset( + 'local>PROJECT/repository:preset/subpreset#feature/branch' + ) + ).toEqual({ + packageName: 'PROJECT/repository', + params: undefined, + presetName: 'preset/subpreset', + presetPath: undefined, + presetSource: 'local', + packageTag: 'feature/branch', + }); + }); + it('parses no prefix as local', () => { expect(presets.parsePreset('some/repo')).toEqual({ packageName: 'some/repo', diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts index 4dc90acb3a..2728aac071 100644 --- a/lib/config/presets/index.ts +++ b/lib/config/presets/index.ts @@ -37,10 +37,10 @@ const presetSources: Record<string, PresetApi> = { }; const nonScopedPresetWithSubdirRegex = regEx( - /^(?<packageName>~?[\w\-./]+?)\/\/(?:(?<presetPath>[\w\-./]+)\/)?(?<presetName>[\w\-.]+)(?:#(?<packageTag>[\w\-.]+?))?$/ + /^(?<packageName>~?[\w\-./]+?)\/\/(?:(?<presetPath>[\w\-./]+)\/)?(?<presetName>[\w\-.]+)(?:#(?<packageTag>[\w\-./]+?))?$/ ); const gitPresetRegex = regEx( - /^(?<packageName>[\w\-. /]+)(?::(?<presetName>[\w\-.+/]+))?(?:#(?<packageTag>[\w\-.]+?))?$/ + /^(?<packageName>[\w\-. /]+)(?::(?<presetName>[\w\-.+/]+))?(?:#(?<packageTag>[\w\-./]+?))?$/ ); export function replaceArgs( -- GitLab