From 21ae56168e24108a5e3934efe1862e1e76f636f4 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Fri, 31 Dec 2021 18:49:53 -0600 Subject: [PATCH 1/5] Allow for bare clone Signed-off-by: Andre Wanlin --- .changeset/few-plums-enjoy.md | 5 +++++ packages/backend-common/api-report.md | 8 +++++++- packages/backend-common/src/scm/git.ts | 8 ++++++-- 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 .changeset/few-plums-enjoy.md diff --git a/.changeset/few-plums-enjoy.md b/.changeset/few-plums-enjoy.md new file mode 100644 index 0000000000..4b0e232b3b --- /dev/null +++ b/.changeset/few-plums-enjoy.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Updated Git to allow for bare clone diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index 061931832d..897aefddb3 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -235,7 +235,13 @@ export class Git { url: string; }): Promise; // (undocumented) - clone(options: { url: string; dir: string; ref?: string }): Promise; + clone(options: { + url: string; + dir: string; + ref?: string; + depth?: number; + noCheckout?: boolean; + }): Promise; // (undocumented) commit(options: { dir: string; diff --git a/packages/backend-common/src/scm/git.ts b/packages/backend-common/src/scm/git.ts index 372ecb0260..dc9f0ae069 100644 --- a/packages/backend-common/src/scm/git.ts +++ b/packages/backend-common/src/scm/git.ts @@ -76,12 +76,15 @@ export class Git { return git.commit({ fs, dir, message, author, committer }); } + // https://isomorphic-git.org/docs/en/clone async clone(options: { url: string; dir: string; ref?: string; + depth?: number; + noCheckout?: boolean; }): Promise { - const { url, dir, ref } = options; + const { url, dir, ref, depth, noCheckout } = options; this.config.logger?.info(`Cloning repo {dir=${dir},url=${url}}`); return git.clone({ fs, @@ -90,7 +93,8 @@ export class Git { dir, ref, singleBranch: true, - depth: 1, + depth: depth ?? 1, + noCheckout: noCheckout ?? false, onProgress: this.onProgressHandler(), headers: { 'user-agent': 'git/@isomorphic-git', From 573015fc6d71a10a9cfd0d5ec6bec64ae87d42de Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Sat, 1 Jan 2022 10:44:28 -0600 Subject: [PATCH 2/5] Added git log Signed-off-by: Andre Wanlin --- packages/backend-common/api-report.md | 2 ++ packages/backend-common/src/scm/git.ts | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index 897aefddb3..565c65e212 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -271,6 +271,8 @@ export class Git { // (undocumented) init(options: { dir: string; defaultBranch?: string }): Promise; // (undocumented) + log(options: { dir: string; ref?: string }): Promise; + // (undocumented) merge(options: { dir: string; theirs: string; diff --git a/packages/backend-common/src/scm/git.ts b/packages/backend-common/src/scm/git.ts index dc9f0ae069..0d4e768eae 100644 --- a/packages/backend-common/src/scm/git.ts +++ b/packages/backend-common/src/scm/git.ts @@ -199,6 +199,19 @@ export class Git { return git.resolveRef({ fs, dir, ref }); } + // https://isomorphic-git.org/docs/en/log + async log(options: { + dir: string; + ref?: string; + }): Promise { + const { dir, ref } = options; + return git.log({ + fs, + dir, + ref: ref ?? 'HEAD', + }); + } + private onAuth = () => ({ username: this.config.username, password: this.config.password, From e36f0d372f1f7d1c5f93068ad231585108f47ccb Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Mon, 3 Jan 2022 12:59:30 -0600 Subject: [PATCH 3/5] Changes based on feedback Signed-off-by: Andre Wanlin --- .changeset/few-plums-enjoy.md | 5 ++++- packages/backend-common/src/scm/git.test.ts | 18 ++++++++++++++++++ packages/backend-common/src/scm/git.ts | 14 +++++++------- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/.changeset/few-plums-enjoy.md b/.changeset/few-plums-enjoy.md index 4b0e232b3b..4e2ee0f719 100644 --- a/.changeset/few-plums-enjoy.md +++ b/.changeset/few-plums-enjoy.md @@ -2,4 +2,7 @@ '@backstage/backend-common': patch --- -Updated Git to allow for bare clone +Updated the Git class with the following: + +- Added `depth` and `noCheckout` options to Git clone, using these you can create a bare clone that includes just the git history +- New `log` function which you can use to view the commit history of a git repo diff --git a/packages/backend-common/src/scm/git.test.ts b/packages/backend-common/src/scm/git.test.ts index abbafc375d..42ad152c05 100644 --- a/packages/backend-common/src/scm/git.test.ts +++ b/packages/backend-common/src/scm/git.test.ts @@ -105,6 +105,7 @@ describe('Git', () => { dir, singleBranch: true, depth: 1, + noCheckout: false, onProgress: expect.any(Function), headers: { 'user-agent': 'git/@isomorphic-git', @@ -320,4 +321,21 @@ describe('Git', () => { }); }); }); + + describe('log', () => { + it('should call isomorphic-git with the correct arguments', async () => { + const dir = '/some/mock/dir'; + const ref = 'as43bd7'; + + const git = Git.fromAuth({}); + + await git.log({ dir, ref }); + + expect(isomorphic.log).toHaveBeenCalledWith({ + fs, + dir, + ref, + }); + }); + }); }); diff --git a/packages/backend-common/src/scm/git.ts b/packages/backend-common/src/scm/git.ts index 0d4e768eae..9f36cc9d5b 100644 --- a/packages/backend-common/src/scm/git.ts +++ b/packages/backend-common/src/scm/git.ts @@ -76,7 +76,7 @@ export class Git { return git.commit({ fs, dir, message, author, committer }); } - // https://isomorphic-git.org/docs/en/clone + /** https://isomorphic-git.org/docs/en/clone */ async clone(options: { url: string; dir: string; @@ -103,7 +103,7 @@ export class Git { }); } - // https://isomorphic-git.org/docs/en/currentBranch + /** https://isomorphic-git.org/docs/en/currentBranch */ async currentBranch(options: { dir: string; fullName?: boolean; @@ -114,7 +114,7 @@ export class Git { >; } - // https://isomorphic-git.org/docs/en/fetch + /** https://isomorphic-git.org/docs/en/fetch */ async fetch(options: { dir: string; remote?: string }): Promise { const { dir, remote = 'origin' } = options; this.config.logger?.info( @@ -142,7 +142,7 @@ export class Git { }); } - // https://isomorphic-git.org/docs/en/merge + /** https://isomorphic-git.org/docs/en/merge */ async merge(options: { dir: string; theirs: string; @@ -184,7 +184,7 @@ export class Git { }); } - // https://isomorphic-git.org/docs/en/readCommit + /** https://isomorphic-git.org/docs/en/readCommit */ async readCommit(options: { dir: string; sha: string; @@ -193,13 +193,13 @@ export class Git { return git.readCommit({ fs, dir, oid: sha }); } - // https://isomorphic-git.org/docs/en/resolveRef + /** https://isomorphic-git.org/docs/en/resolveRef */ async resolveRef(options: { dir: string; ref: string }): Promise { const { dir, ref } = options; return git.resolveRef({ fs, dir, ref }); } - // https://isomorphic-git.org/docs/en/log + /** https://isomorphic-git.org/docs/en/log */ async log(options: { dir: string; ref?: string; From 330d71f42669d893a392ccd82feb1eb9030ef0d0 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Mon, 3 Jan 2022 13:03:24 -0600 Subject: [PATCH 4/5] Updated API report Signed-off-by: Andre Wanlin --- packages/backend-common/api-report.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index 565c65e212..a62a280dc9 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -234,7 +234,6 @@ export class Git { remote: string; url: string; }): Promise; - // (undocumented) clone(options: { url: string; dir: string; @@ -255,12 +254,10 @@ export class Git { email: string; }; }): Promise; - // (undocumented) currentBranch(options: { dir: string; fullName?: boolean; }): Promise; - // (undocumented) fetch(options: { dir: string; remote?: string }): Promise; // (undocumented) static fromAuth: (options: { @@ -270,9 +267,7 @@ export class Git { }) => Git; // (undocumented) init(options: { dir: string; defaultBranch?: string }): Promise; - // (undocumented) log(options: { dir: string; ref?: string }): Promise; - // (undocumented) merge(options: { dir: string; theirs: string; @@ -288,9 +283,7 @@ export class Git { }): Promise; // (undocumented) push(options: { dir: string; remote: string }): Promise; - // (undocumented) readCommit(options: { dir: string; sha: string }): Promise; - // (undocumented) resolveRef(options: { dir: string; ref: string }): Promise; } From b46dea84a9e6076aedabcccb62bb4d9527d4af99 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Tue, 4 Jan 2022 09:57:31 +0100 Subject: [PATCH 5/5] pass noCheckout without defaulting to false Signed-off-by: Johan Haals --- packages/backend-common/src/scm/git.test.ts | 1 - packages/backend-common/src/scm/git.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/backend-common/src/scm/git.test.ts b/packages/backend-common/src/scm/git.test.ts index 42ad152c05..46aa0804b6 100644 --- a/packages/backend-common/src/scm/git.test.ts +++ b/packages/backend-common/src/scm/git.test.ts @@ -105,7 +105,6 @@ describe('Git', () => { dir, singleBranch: true, depth: 1, - noCheckout: false, onProgress: expect.any(Function), headers: { 'user-agent': 'git/@isomorphic-git', diff --git a/packages/backend-common/src/scm/git.ts b/packages/backend-common/src/scm/git.ts index 9f36cc9d5b..0446f08767 100644 --- a/packages/backend-common/src/scm/git.ts +++ b/packages/backend-common/src/scm/git.ts @@ -94,7 +94,7 @@ export class Git { ref, singleBranch: true, depth: depth ?? 1, - noCheckout: noCheckout ?? false, + noCheckout, onProgress: this.onProgressHandler(), headers: { 'user-agent': 'git/@isomorphic-git',