diff --git a/packages/backend-common/src/reading/tree/TarArchiveResponse.ts b/packages/backend-common/src/reading/tree/TarArchiveResponse.ts index 173f6a886a..adcf420fc0 100644 --- a/packages/backend-common/src/reading/tree/TarArchiveResponse.ts +++ b/packages/backend-common/src/reading/tree/TarArchiveResponse.ts @@ -98,6 +98,11 @@ export class TarArchiveResponse implements ReadTreeResponse { } } + if (entry.size && entry.size >= 20000) { + entry.resume(); + return; + } + const content = new Promise(async resolve => { await pipeline(entry, concatStream(resolve)); }); diff --git a/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts b/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts index 45c6880a55..62219ec27d 100644 --- a/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts +++ b/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts @@ -68,6 +68,11 @@ export class ZipArchiveResponse implements ReadTreeResponse { private shouldBeIncluded(entry: Entry): boolean { const strippedPath = stripFirstDirectoryFromPath(entry.path); + const size = entry.vars.compressedSize; + + if (size >= 20000) { + return false; + } if (this.subPath) { if (!strippedPath.startsWith(this.subPath)) { diff --git a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts index 256279596f..1e9cb68bd9 100644 --- a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts +++ b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts @@ -27,6 +27,7 @@ import { } from './types'; import { Config } from '@backstage/config'; import { createTodoParser } from './createTodoParser'; +import path from 'path'; type Options = { logger: Logger; @@ -80,10 +81,25 @@ export class TodoScmReader implements TodoReader { { url }: ReadTodosOptions, etag?: string, ): Promise { + const shouldNotInclude = [ + '.png', + '.svg', + '.jpg', + '.jpeg', + '.gif', + '.raw', + '.lock', + '.ico', + ]; const tree = await this.reader.readTree(url, { etag, - filter(path) { - return !path.startsWith('.') && !path.includes('/.'); + filter(filePath) { + const extname = path.extname(filePath); + return ( + !filePath.startsWith('.') && + !filePath.includes('/.') && + !shouldNotInclude.includes(extname) + ); }, });