From 5b4b64666880cfcb28b5b0611c8063d39c272780 Mon Sep 17 00:00:00 2001 From: Markus Schulz <msc@onesty-tech.de> Date: Fri, 6 Jan 2023 15:50:54 +0100 Subject: [PATCH] feat(git): allow to install git-hook functions to local repositories (#19685) --- lib/util/git/index.spec.ts | 26 ++++++++++++++++++++++++++ lib/util/git/index.ts | 11 +++++++++++ 2 files changed, 37 insertions(+) diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts index 459e4b9944..7f55240fa3 100644 --- a/lib/util/git/index.spec.ts +++ b/lib/util/git/index.spec.ts @@ -1056,4 +1056,30 @@ describe('util/git/index', () => { expect(sha).toBe(git.getBranchCommit(defaultBranch)); }); }); + + describe('installHook()', () => { + it('installHook()', async () => { + //git.getCommitMessages() only returns the first line (i.e. subject) of each msg + await git.installHook( + 'commit-msg', + '#!/bin/sh\necho "APPENDED FROM COMMIT-MSG HOOK" >> $1;' + ); + const files: FileChange[] = [ + { + type: 'addition', + path: 'some-new-file', + contents: 'some new-contents', + }, + ]; + setNoVerify(['push']); + await git.commitFiles({ + branchName: 'renovate/something', + files, + message: 'Orig-commit-msg', + }); + + const messages = await git.getCommitMessages(); + expect(messages[0]).toBe('Orig-commit-msg APPENDED FROM COMMIT-MSG HOOK'); + }); + }); }); diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts index 4698779d97..95fb7c1080 100644 --- a/lib/util/git/index.ts +++ b/lib/util/git/index.ts @@ -249,6 +249,17 @@ export async function initRepo(args: StorageConfig): Promise<void> { await fetchBranchCommits(); } +export async function installHook( + name: string, + hookSource: string +): Promise<void> { + await syncGit(); + const localDir = GlobalConfig.get('localDir')!; + const gitHooks = upath.join(localDir, '.git/hooks'); + await fs.writeFile(`${gitHooks}/${name}`, hookSource); + await fs.chmod(`${gitHooks}/${name}`, 0o500); +} + async function resetToBranch(branchName: string): Promise<void> { logger.debug(`resetToBranch(${branchName})`); await git.raw(['reset', '--hard']); -- GitLab