From 939f3d6a8b8681bfe52b5ca5751ad213263e9441 Mon Sep 17 00:00:00 2001 From: Michael Kriese <michael.kriese@visualon.de> Date: Thu, 1 Oct 2020 16:32:07 +0200 Subject: [PATCH] feat(git-submodules): fetch default branch (#7391) --- lib/manager/git-submodules/extract.spec.ts | 8 ++++++++ lib/manager/git-submodules/extract.ts | 18 +++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/lib/manager/git-submodules/extract.spec.ts b/lib/manager/git-submodules/extract.spec.ts index 6d0b92f8c3..82b219da63 100644 --- a/lib/manager/git-submodules/extract.spec.ts +++ b/lib/manager/git-submodules/extract.spec.ts @@ -27,6 +27,13 @@ describe('lib/manager/gitsubmodules/extract', () => { } return git.raw(options); }, + listRemote(): Response<string> { + return partial<Response<string>>( + Promise.resolve( + 'ref: refs/heads/main HEAD\n5701164b9f5edba1f6ca114c491a564ffb55a964 HEAD' + ) + ); + }, }; }); }); @@ -38,6 +45,7 @@ describe('lib/manager/gitsubmodules/extract', () => { ).toBeNull(); res = await extractPackageFile('', '.gitmodules.2', { localDir }); expect(res.deps).toHaveLength(1); + expect(res.deps[0].registryUrls[1]).toEqual('main'); res = await extractPackageFile('', '.gitmodules.3', { localDir }); expect(res.deps).toHaveLength(1); res = await extractPackageFile('', '.gitmodules.4', { localDir }); diff --git a/lib/manager/git-submodules/extract.ts b/lib/manager/git-submodules/extract.ts index 1bf4b93495..7cdd9d9cbb 100644 --- a/lib/manager/git-submodules/extract.ts +++ b/lib/manager/git-submodules/extract.ts @@ -34,9 +34,17 @@ async function getUrl( return URL.resolve(`${remoteUrl}/`, path); } +const headRefRe = /ref: refs\/heads\/(?<branch>\w+)\s/; + +async function getDefaultBranch(subModuleUrl: string): Promise<string> { + const val = await Git().listRemote(['--symref', subModuleUrl, 'HEAD']); + return headRefRe.exec(val)?.groups?.branch ?? 'master'; +} + async function getBranch( gitModulesPath: string, - submoduleName: string + submoduleName: string, + subModuleUrl: string ): Promise<string> { return ( (await Git().raw([ @@ -45,7 +53,7 @@ async function getBranch( gitModulesPath, '--get', `submodule.${submoduleName}.branch`, - ])) || 'master' + ])) || (await getDefaultBranch(subModuleUrl)) ).trim(); } @@ -99,8 +107,12 @@ export default async function extractPackageFile( const [currentValue] = (await git.subModule(['status', path])) .trim() .split(/[+\s]/); - const submoduleBranch = await getBranch(gitModulesPath, name); const subModuleUrl = await getUrl(git, gitModulesPath, name); + const submoduleBranch = await getBranch( + gitModulesPath, + name, + subModuleUrl + ); return { depName: path, registryUrls: [subModuleUrl, submoduleBranch], -- GitLab