From 0576463f0d335b77e50e11f3e8b4b5bef81d9a48 Mon Sep 17 00:00:00 2001 From: kim5566 <28945404+kim5566@users.noreply.github.com> Date: Wed, 16 Feb 2022 13:02:43 +1100 Subject: [PATCH 1/8] filter folders from app-config file Signed-off-by: kim5566 <28945404+kim5566@users.noreply.github.com> --- .../src/lib/TodoReader/TodoScmReader.test.ts | 61 +++++++++++++++++++ .../src/lib/TodoReader/TodoScmReader.ts | 18 +++++- yarn.lock | 6 +- 3 files changed, 80 insertions(+), 5 deletions(-) diff --git a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts index 9675a285e0..5693c37783 100644 --- a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts +++ b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts @@ -189,4 +189,65 @@ describe('TodoScmReader', () => { 'Failed to parse TODO in https://github.com/o/r/catalog-info.yaml at my-file.sh, Error: failed to parse', ); }); + + it('should filter out exclude folders', async () => { + const reader = mockReader(); + const excludeFolders = ['vendor/']; + const todoReader = new TodoScmReader({ + logger: getVoidLogger(), + reader, + integrations: ScmIntegrations.fromConfig(new ConfigReader({})), + excludeFolders: excludeFolders, + }); + reader.readTree.mockResolvedValueOnce({ + files: async () => [ + { + content: async () => Buffer.from('// TODO: my-todo', 'utf8'), + path: 'vendor/another-file.go', + }, + { + content: async () => Buffer.from('// TODO: my-todo', 'utf8'), + path: 'my-folder/my-file.js', + }, + ], + } as ReadTreeResponse); + await expect( + todoReader.readTodos({ + url: 'https://github.com/backstage/backstage/catalog-info.yaml', + }), + ).resolves.toEqual({ + items: [ + { + text: 'my-todo', + tag: 'TODO', + lineNumber: 1, + repoFilePath: 'vendor/another-file.go', + viewUrl: + 'https://github.com/backstage/backstage/vendor/another-file.go#L1', + }, + { + text: 'my-todo', + tag: 'TODO', + lineNumber: 1, + repoFilePath: 'my-folder/my-file.js', + viewUrl: + 'https://github.com/backstage/backstage/my-folder/my-file.js#L1', + }, + ], + }); + expect(reader.readTree).toHaveBeenCalledTimes(1); + expect(reader.readTree).toHaveBeenCalledWith( + 'https://github.com/backstage/backstage/catalog-info.yaml', + { + etag: undefined, + filter: expect.any(Function), + }, + ); + // Filter function should filter out exclude folders + const filterFunc = reader.readTree.mock.calls[0][1]!.filter!; + expect(filterFunc('another-file.go')).toBe(true); + expect(filterFunc('vendor/another-file.go')).toBe(false); + expect(filterFunc('my-file.js')).toBe(true); + expect(filterFunc('my-folder/my-file.js')).toBe(true); + }); }); diff --git a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts index 19890a8d23..f7cdba2d91 100644 --- a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts +++ b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts @@ -47,6 +47,7 @@ export type TodoScmReaderOptions = { reader: UrlReader; integrations: ScmIntegrations; parser?: TodoParser; + excludeFolders?: string[]; }; type CacheItem = { @@ -60,6 +61,7 @@ export class TodoScmReader implements TodoReader { private readonly reader: UrlReader; private readonly parser: TodoParser; private readonly integrations: ScmIntegrations; + private readonly excludeFolders: string[]; private readonly cache = new Map(); private readonly inFlightReads = new Map>(); @@ -68,8 +70,11 @@ export class TodoScmReader implements TodoReader { config: Config, options: Omit, ) { + const excludeFolders: string[] = + config.getOptionalStringArray('todo.excludeFolders') ?? []; return new TodoScmReader({ ...options, + excludeFolders, integrations: ScmIntegrations.fromConfig(config), }); } @@ -79,6 +84,7 @@ export class TodoScmReader implements TodoReader { this.reader = options.reader; this.parser = options.parser ?? createTodoParser(); this.integrations = options.integrations; + this.excludeFolders = options.excludeFolders ?? []; } async readTodos(options: ReadTodosOptions): Promise { @@ -89,7 +95,12 @@ export class TodoScmReader implements TodoReader { } const cacheItem = this.cache.get(url); - const newRead = this.doReadTodos({ url }, cacheItem?.etag).catch(error => { + const excludeFolders = this.excludeFolders; + const newRead = this.doReadTodos( + { url }, + excludeFolders, + cacheItem?.etag, + ).catch(error => { if (cacheItem && error.name === 'NotModifiedError') { return cacheItem; } @@ -108,6 +119,7 @@ export class TodoScmReader implements TodoReader { private async doReadTodos( options: ReadTodosOptions, + excludeFolders?: string[], etag?: string, ): Promise { const { url } = options; @@ -118,10 +130,12 @@ export class TodoScmReader implements TodoReader { if (info && info.size > MAX_FILE_SIZE) { return false; } + const excFolders = excludeFolders ?? []; return ( !filePath.startsWith('.') && !filePath.includes('/.') && - !excludedExtensions.includes(extname) + !excludedExtensions.includes(extname) && + !excFolders.some(exclude => filePath.startsWith(exclude)) ); }, }); diff --git a/yarn.lock b/yarn.lock index 90a6ef9c24..c124a60ca3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15740,9 +15740,9 @@ kleur@^4.0.3: integrity sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA== knex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/knex/-/knex-1.0.2.tgz#1b79273f39f587a631c1a5515482c203d5971781" - integrity sha512-RuDKTylj6X/3nYomnsFV8sOdxTcehLHczOd3yrUdULE4pQR8jVlZxYt3vvIU04otJF0Cw9DCtRt05S4PN4kDpw== + version "1.0.3" + resolved "https://registry.npmjs.org/knex/-/knex-1.0.3.tgz#a5f97aa98e5e036cfd0209a90d53b2a411280e84" + integrity sha512-rY1T7cgTQGHAUD9TshMka37bd+SEK+koPXXvZQEIoE8yjJ/E8ShsenaAmr3oaNNzqXuKD/SC0qlYtp7Js8tAXA== dependencies: colorette "2.0.16" commander "^8.3.0" From be9e010da0047eb2c236bb410aec6ab67854f47b Mon Sep 17 00:00:00 2001 From: kim5566 <28945404+kim5566@users.noreply.github.com> Date: Wed, 16 Feb 2022 13:10:19 +1100 Subject: [PATCH 2/8] add changeset Signed-off-by: kim5566 <28945404+kim5566@users.noreply.github.com> --- .changeset/mean-pumpkins-search.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .changeset/mean-pumpkins-search.md diff --git a/.changeset/mean-pumpkins-search.md b/.changeset/mean-pumpkins-search.md new file mode 100644 index 0000000000..36f06661b1 --- /dev/null +++ b/.changeset/mean-pumpkins-search.md @@ -0,0 +1,12 @@ +--- +'@backstage/plugin-todo-backend': patch +--- + +Add support to exclude certain folders in `todo` plugin. + +To add excluded folders, edit `app-config.yaml` as follow: + +``` +todo: + excludeFolders: ['vendor/'] +``` From 252fed10e30fe57c7140427a73f5f50d5883f2c7 Mon Sep 17 00:00:00 2001 From: kim5566 <28945404+kim5566@users.noreply.github.com> Date: Wed, 16 Feb 2022 14:13:15 +1100 Subject: [PATCH 3/8] add api-report.md Signed-off-by: kim5566 <28945404+kim5566@users.noreply.github.com> --- plugins/todo-backend/api-report.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/todo-backend/api-report.md b/plugins/todo-backend/api-report.md index ac8b2ce957..602a6b4a87 100644 --- a/plugins/todo-backend/api-report.md +++ b/plugins/todo-backend/api-report.md @@ -131,6 +131,7 @@ export type TodoScmReaderOptions = { reader: UrlReader; integrations: ScmIntegrations; parser?: TodoParser; + excludeFolders?: string[]; }; // @public (undocumented) From 107dc001c32d2ef3f1a4e46fce1ae40faea5a965 Mon Sep 17 00:00:00 2001 From: kim5566 <28945404+kim5566@users.noreply.github.com> Date: Thu, 17 Feb 2022 20:05:35 +1100 Subject: [PATCH 4/8] address reviews Signed-off-by: kim5566 <28945404+kim5566@users.noreply.github.com> --- .changeset/mean-pumpkins-search.md | 9 +------- plugins/todo-backend/api-report.md | 1 - .../src/lib/TodoReader/TodoScmReader.test.ts | 15 ++++++++++-- .../src/lib/TodoReader/TodoScmReader.ts | 23 +++++++------------ 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/.changeset/mean-pumpkins-search.md b/.changeset/mean-pumpkins-search.md index 36f06661b1..78a92ff5eb 100644 --- a/.changeset/mean-pumpkins-search.md +++ b/.changeset/mean-pumpkins-search.md @@ -2,11 +2,4 @@ '@backstage/plugin-todo-backend': patch --- -Add support to exclude certain folders in `todo` plugin. - -To add excluded folders, edit `app-config.yaml` as follow: - -``` -todo: - excludeFolders: ['vendor/'] -``` +Add support to exclude vendor folder in `todo` plugin. diff --git a/plugins/todo-backend/api-report.md b/plugins/todo-backend/api-report.md index 602a6b4a87..ac8b2ce957 100644 --- a/plugins/todo-backend/api-report.md +++ b/plugins/todo-backend/api-report.md @@ -131,7 +131,6 @@ export type TodoScmReaderOptions = { reader: UrlReader; integrations: ScmIntegrations; parser?: TodoParser; - excludeFolders?: string[]; }; // @public (undocumented) diff --git a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts index 5693c37783..0036e748ff 100644 --- a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts +++ b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts @@ -192,12 +192,10 @@ describe('TodoScmReader', () => { it('should filter out exclude folders', async () => { const reader = mockReader(); - const excludeFolders = ['vendor/']; const todoReader = new TodoScmReader({ logger: getVoidLogger(), reader, integrations: ScmIntegrations.fromConfig(new ConfigReader({})), - excludeFolders: excludeFolders, }); reader.readTree.mockResolvedValueOnce({ files: async () => [ @@ -205,6 +203,10 @@ describe('TodoScmReader', () => { content: async () => Buffer.from('// TODO: my-todo', 'utf8'), path: 'vendor/another-file.go', }, + { + content: async () => Buffer.from('// TODO: my-todo', 'utf8'), + path: 'test/vendor/another-file.go', + }, { content: async () => Buffer.from('// TODO: my-todo', 'utf8'), path: 'my-folder/my-file.js', @@ -225,6 +227,14 @@ describe('TodoScmReader', () => { viewUrl: 'https://github.com/backstage/backstage/vendor/another-file.go#L1', }, + { + text: 'my-todo', + tag: 'TODO', + lineNumber: 1, + repoFilePath: 'test/vendor/another-file.go', + viewUrl: + 'https://github.com/backstage/backstage/test/vendor/another-file.go#L1', + }, { text: 'my-todo', tag: 'TODO', @@ -247,6 +257,7 @@ describe('TodoScmReader', () => { const filterFunc = reader.readTree.mock.calls[0][1]!.filter!; expect(filterFunc('another-file.go')).toBe(true); expect(filterFunc('vendor/another-file.go')).toBe(false); + expect(filterFunc('test/vendor/another-file.go')).toBe(false); expect(filterFunc('my-file.js')).toBe(true); expect(filterFunc('my-folder/my-file.js')).toBe(true); }); diff --git a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts index f7cdba2d91..ade15343d5 100644 --- a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts +++ b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts @@ -41,13 +41,14 @@ const excludedExtensions = [ ]; const MAX_FILE_SIZE = 200000; +const excludeFolders = ['vendor']; + /** @public */ export type TodoScmReaderOptions = { logger: Logger; reader: UrlReader; integrations: ScmIntegrations; parser?: TodoParser; - excludeFolders?: string[]; }; type CacheItem = { @@ -61,7 +62,6 @@ export class TodoScmReader implements TodoReader { private readonly reader: UrlReader; private readonly parser: TodoParser; private readonly integrations: ScmIntegrations; - private readonly excludeFolders: string[]; private readonly cache = new Map(); private readonly inFlightReads = new Map>(); @@ -70,11 +70,8 @@ export class TodoScmReader implements TodoReader { config: Config, options: Omit, ) { - const excludeFolders: string[] = - config.getOptionalStringArray('todo.excludeFolders') ?? []; return new TodoScmReader({ ...options, - excludeFolders, integrations: ScmIntegrations.fromConfig(config), }); } @@ -84,7 +81,6 @@ export class TodoScmReader implements TodoReader { this.reader = options.reader; this.parser = options.parser ?? createTodoParser(); this.integrations = options.integrations; - this.excludeFolders = options.excludeFolders ?? []; } async readTodos(options: ReadTodosOptions): Promise { @@ -95,12 +91,7 @@ export class TodoScmReader implements TodoReader { } const cacheItem = this.cache.get(url); - const excludeFolders = this.excludeFolders; - const newRead = this.doReadTodos( - { url }, - excludeFolders, - cacheItem?.etag, - ).catch(error => { + const newRead = this.doReadTodos({ url }, cacheItem?.etag).catch(error => { if (cacheItem && error.name === 'NotModifiedError') { return cacheItem; } @@ -119,10 +110,13 @@ export class TodoScmReader implements TodoReader { private async doReadTodos( options: ReadTodosOptions, - excludeFolders?: string[], etag?: string, ): Promise { const { url } = options; + const filePathFilter = (filePath: string): boolean => { + const splitPath = filePath.split('/'); + return !excludeFolders.some(r => splitPath.includes(r)); + }; const tree = await this.reader.readTree(url, { etag, filter(filePath, info) { @@ -130,12 +124,11 @@ export class TodoScmReader implements TodoReader { if (info && info.size > MAX_FILE_SIZE) { return false; } - const excFolders = excludeFolders ?? []; return ( !filePath.startsWith('.') && !filePath.includes('/.') && !excludedExtensions.includes(extname) && - !excFolders.some(exclude => filePath.startsWith(exclude)) + filePathFilter(filePath) ); }, }); From dda3f42dddd9f8e9068ef251bc08ae355869ddcc Mon Sep 17 00:00:00 2001 From: kim5566 <28945404+kim5566@users.noreply.github.com> Date: Fri, 18 Feb 2022 07:02:46 +1100 Subject: [PATCH 5/8] updated to config as func Signed-off-by: kim5566 <28945404+kim5566@users.noreply.github.com> --- .changeset/mean-pumpkins-search.md | 22 ++++- plugins/todo-backend/api-report.md | 1 + .../src/lib/TodoReader/TodoScmReader.test.ts | 80 ++++++++++++------- .../src/lib/TodoReader/TodoScmReader.ts | 18 +++-- 4 files changed, 85 insertions(+), 36 deletions(-) diff --git a/.changeset/mean-pumpkins-search.md b/.changeset/mean-pumpkins-search.md index 78a92ff5eb..ddaea98b9e 100644 --- a/.changeset/mean-pumpkins-search.md +++ b/.changeset/mean-pumpkins-search.md @@ -2,4 +2,24 @@ '@backstage/plugin-todo-backend': patch --- -Add support to exclude vendor folder in `todo` plugin. +Add support to exclude certain folders in `todo` plugin. + +You can add function by configuring your own exclusion logic, for example: + +```ts +import { + TodoScmReader, + createTodoParser, +} from '@backstage/plugin-todo-backend'; + +// ... + +const todoReader = TodoScmReader.fromConfig(config, { + logger, + reader, + filePathFilter: (filePath: string): boolean => { + ... + YOUR LOGIC HERE + }, +}); +``` diff --git a/plugins/todo-backend/api-report.md b/plugins/todo-backend/api-report.md index ac8b2ce957..84ebc88299 100644 --- a/plugins/todo-backend/api-report.md +++ b/plugins/todo-backend/api-report.md @@ -131,6 +131,7 @@ export type TodoScmReaderOptions = { reader: UrlReader; integrations: ScmIntegrations; parser?: TodoParser; + filePathFilter?: (path: string) => boolean; }; // @public (undocumented) diff --git a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts index 0036e748ff..1ca836162e 100644 --- a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts +++ b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts @@ -190,23 +190,18 @@ describe('TodoScmReader', () => { ); }); - it('should filter out exclude folders', async () => { + it('should not filter out exclude folders', async () => { const reader = mockReader(); + const filePathFilter = jest.fn(() => true); + const todoReader = new TodoScmReader({ logger: getVoidLogger(), reader, integrations: ScmIntegrations.fromConfig(new ConfigReader({})), + filePathFilter, }); reader.readTree.mockResolvedValueOnce({ files: async () => [ - { - content: async () => Buffer.from('// TODO: my-todo', 'utf8'), - path: 'vendor/another-file.go', - }, - { - content: async () => Buffer.from('// TODO: my-todo', 'utf8'), - path: 'test/vendor/another-file.go', - }, { content: async () => Buffer.from('// TODO: my-todo', 'utf8'), path: 'my-folder/my-file.js', @@ -219,22 +214,6 @@ describe('TodoScmReader', () => { }), ).resolves.toEqual({ items: [ - { - text: 'my-todo', - tag: 'TODO', - lineNumber: 1, - repoFilePath: 'vendor/another-file.go', - viewUrl: - 'https://github.com/backstage/backstage/vendor/another-file.go#L1', - }, - { - text: 'my-todo', - tag: 'TODO', - lineNumber: 1, - repoFilePath: 'test/vendor/another-file.go', - viewUrl: - 'https://github.com/backstage/backstage/test/vendor/another-file.go#L1', - }, { text: 'my-todo', tag: 'TODO', @@ -255,10 +234,55 @@ describe('TodoScmReader', () => { ); // Filter function should filter out exclude folders const filterFunc = reader.readTree.mock.calls[0][1]!.filter!; - expect(filterFunc('another-file.go')).toBe(true); - expect(filterFunc('vendor/another-file.go')).toBe(false); - expect(filterFunc('test/vendor/another-file.go')).toBe(false); expect(filterFunc('my-file.js')).toBe(true); expect(filterFunc('my-folder/my-file.js')).toBe(true); }); + + it('should filter out exclude folders', async () => { + const reader = mockReader(); + const filePathFilter = jest.fn(() => false); + + const todoReader = new TodoScmReader({ + logger: getVoidLogger(), + reader, + integrations: ScmIntegrations.fromConfig(new ConfigReader({})), + filePathFilter, + }); + reader.readTree.mockResolvedValueOnce({ + files: async () => [ + { + content: async () => Buffer.from('// TODO: my-todo', 'utf8'), + path: 'my-folder/my-file.js', + }, + ], + } as ReadTreeResponse); + await expect( + todoReader.readTodos({ + url: 'https://github.com/backstage/backstage/catalog-info.yaml', + }), + ).resolves.toEqual({ + items: [ + { + text: 'my-todo', + tag: 'TODO', + lineNumber: 1, + repoFilePath: 'my-folder/my-file.js', + viewUrl: + 'https://github.com/backstage/backstage/my-folder/my-file.js#L1', + }, + ], + }); + expect(reader.readTree).toHaveBeenCalledTimes(1); + expect(reader.readTree).toHaveBeenCalledWith( + 'https://github.com/backstage/backstage/catalog-info.yaml', + { + etag: undefined, + filter: expect.any(Function), + }, + ); + // Filter function should filter out exclude folders + const filterFunc = reader.readTree.mock.calls[0][1]!.filter!; + expect(filterFunc('my-file.js')).toBe(false); + expect(filterFunc('my-folder/my-file.js')).toBe(false); + }); }); diff --git a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts index ade15343d5..9514a8a2cf 100644 --- a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts +++ b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts @@ -41,14 +41,13 @@ const excludedExtensions = [ ]; const MAX_FILE_SIZE = 200000; -const excludeFolders = ['vendor']; - /** @public */ export type TodoScmReaderOptions = { logger: Logger; reader: UrlReader; integrations: ScmIntegrations; parser?: TodoParser; + filePathFilter?: (filePath: string) => boolean; }; type CacheItem = { @@ -62,6 +61,7 @@ export class TodoScmReader implements TodoReader { private readonly reader: UrlReader; private readonly parser: TodoParser; private readonly integrations: ScmIntegrations; + private readonly filePathFilter: (filePath: string) => boolean; private readonly cache = new Map(); private readonly inFlightReads = new Map>(); @@ -81,6 +81,7 @@ export class TodoScmReader implements TodoReader { this.reader = options.reader; this.parser = options.parser ?? createTodoParser(); this.integrations = options.integrations; + this.filePathFilter = options.filePathFilter ?? (() => true); } async readTodos(options: ReadTodosOptions): Promise { @@ -91,7 +92,12 @@ export class TodoScmReader implements TodoReader { } const cacheItem = this.cache.get(url); - const newRead = this.doReadTodos({ url }, cacheItem?.etag).catch(error => { + const filePathFilter = this.filePathFilter; + const newRead = this.doReadTodos( + { url }, + filePathFilter, + cacheItem?.etag, + ).catch(error => { if (cacheItem && error.name === 'NotModifiedError') { return cacheItem; } @@ -110,13 +116,11 @@ export class TodoScmReader implements TodoReader { private async doReadTodos( options: ReadTodosOptions, + filePathFilter: (filePath: string) => boolean, etag?: string, ): Promise { const { url } = options; - const filePathFilter = (filePath: string): boolean => { - const splitPath = filePath.split('/'); - return !excludeFolders.some(r => splitPath.includes(r)); - }; + const tree = await this.reader.readTree(url, { etag, filter(filePath, info) { From bdab94f276122297a43c53c188cd2694a2d6507b Mon Sep 17 00:00:00 2001 From: kim5566 <28945404+kim5566@users.noreply.github.com> Date: Fri, 18 Feb 2022 07:17:19 +1100 Subject: [PATCH 6/8] updated api-report.md Signed-off-by: kim5566 <28945404+kim5566@users.noreply.github.com> --- plugins/todo-backend/api-report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/todo-backend/api-report.md b/plugins/todo-backend/api-report.md index 84ebc88299..71094e03f8 100644 --- a/plugins/todo-backend/api-report.md +++ b/plugins/todo-backend/api-report.md @@ -131,7 +131,7 @@ export type TodoScmReaderOptions = { reader: UrlReader; integrations: ScmIntegrations; parser?: TodoParser; - filePathFilter?: (path: string) => boolean; + filePathFilter?: (filePath: string) => boolean; }; // @public (undocumented) From 316cc70f3aed84ba9cf0b9073d9bce0419bf4bf2 Mon Sep 17 00:00:00 2001 From: kim5566 <28945404+kim5566@users.noreply.github.com> Date: Sat, 19 Feb 2022 06:15:58 +1100 Subject: [PATCH 7/8] undo yarn.lock Signed-off-by: kim5566 <28945404+kim5566@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c124a60ca3..90a6ef9c24 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15740,9 +15740,9 @@ kleur@^4.0.3: integrity sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA== knex@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/knex/-/knex-1.0.3.tgz#a5f97aa98e5e036cfd0209a90d53b2a411280e84" - integrity sha512-rY1T7cgTQGHAUD9TshMka37bd+SEK+koPXXvZQEIoE8yjJ/E8ShsenaAmr3oaNNzqXuKD/SC0qlYtp7Js8tAXA== + version "1.0.2" + resolved "https://registry.npmjs.org/knex/-/knex-1.0.2.tgz#1b79273f39f587a631c1a5515482c203d5971781" + integrity sha512-RuDKTylj6X/3nYomnsFV8sOdxTcehLHczOd3yrUdULE4pQR8jVlZxYt3vvIU04otJF0Cw9DCtRt05S4PN4kDpw== dependencies: colorette "2.0.16" commander "^8.3.0" From fab01d014008eca5d2aff31742363645dca0a51b Mon Sep 17 00:00:00 2001 From: kim5566 <28945404+kim5566@users.noreply.github.com> Date: Sat, 19 Feb 2022 07:05:34 +1100 Subject: [PATCH 8/8] clearup Signed-off-by: kim5566 <28945404+kim5566@users.noreply.github.com> --- .../src/lib/TodoReader/TodoScmReader.test.ts | 13 ++----------- .../src/lib/TodoReader/TodoScmReader.ts | 10 ++-------- 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts index 1ca836162e..3e074f78a6 100644 --- a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts +++ b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.test.ts @@ -252,7 +252,7 @@ describe('TodoScmReader', () => { files: async () => [ { content: async () => Buffer.from('// TODO: my-todo', 'utf8'), - path: 'my-folder/my-file.js', + path: '', }, ], } as ReadTreeResponse); @@ -261,16 +261,7 @@ describe('TodoScmReader', () => { url: 'https://github.com/backstage/backstage/catalog-info.yaml', }), ).resolves.toEqual({ - items: [ - { - text: 'my-todo', - tag: 'TODO', - lineNumber: 1, - repoFilePath: 'my-folder/my-file.js', - viewUrl: - 'https://github.com/backstage/backstage/my-folder/my-file.js#L1', - }, - ], + items: [], }); expect(reader.readTree).toHaveBeenCalledTimes(1); expect(reader.readTree).toHaveBeenCalledWith( diff --git a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts index 9514a8a2cf..2696f0d54b 100644 --- a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts +++ b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts @@ -92,12 +92,7 @@ export class TodoScmReader implements TodoReader { } const cacheItem = this.cache.get(url); - const filePathFilter = this.filePathFilter; - const newRead = this.doReadTodos( - { url }, - filePathFilter, - cacheItem?.etag, - ).catch(error => { + const newRead = this.doReadTodos({ url }, cacheItem?.etag).catch(error => { if (cacheItem && error.name === 'NotModifiedError') { return cacheItem; } @@ -116,11 +111,10 @@ export class TodoScmReader implements TodoReader { private async doReadTodos( options: ReadTodosOptions, - filePathFilter: (filePath: string) => boolean, etag?: string, ): Promise { const { url } = options; - + const filePathFilter = this.filePathFilter; const tree = await this.reader.readTree(url, { etag, filter(filePath, info) {