From 0c8a59e293702b53847c1f784540ddf75d7d2a13 Mon Sep 17 00:00:00 2001 From: Oliver Sand Date: Thu, 23 Sep 2021 15:37:00 +0200 Subject: [PATCH] Fix filtering with globs in bitbucket reader Signed-off-by: Oliver Sand --- .changeset/mighty-students-itch.md | 5 ++++ .../src/reading/BitbucketUrlReader.test.ts | 28 +++++++++++++++++++ .../src/reading/BitbucketUrlReader.ts | 11 ++++---- 3 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 .changeset/mighty-students-itch.md diff --git a/.changeset/mighty-students-itch.md b/.changeset/mighty-students-itch.md new file mode 100644 index 0000000000..7471c56d7e --- /dev/null +++ b/.changeset/mighty-students-itch.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Fix an issue where filtering in search doesn't work correctly for Bitbucket. diff --git a/packages/backend-common/src/reading/BitbucketUrlReader.test.ts b/packages/backend-common/src/reading/BitbucketUrlReader.test.ts index b032322627..ef61452163 100644 --- a/packages/backend-common/src/reading/BitbucketUrlReader.test.ts +++ b/packages/backend-common/src/reading/BitbucketUrlReader.test.ts @@ -360,6 +360,20 @@ describe('BitbucketUrlReader', () => { ); }); + it('works in nested folders', async () => { + const result = await bitbucketProcessor.search( + 'https://bitbucket.org/backstage/mock/src/master/docs/index.*', + ); + expect(result.etag).toBe('12ab34cd56ef'); + expect(result.files.length).toBe(1); + expect(result.files[0].url).toBe( + 'https://bitbucket.org/backstage/mock/src/master/docs/index.md', + ); + await expect(result.files[0].content()).resolves.toEqual( + Buffer.from('# Test\n'), + ); + }); + it('throws NotModifiedError when same etag', async () => { await expect( bitbucketProcessor.search( @@ -422,6 +436,20 @@ describe('BitbucketUrlReader', () => { ); }); + it('works in nested folders', async () => { + const result = await hostedBitbucketProcessor.search( + 'https://bitbucket.mycompany.net/projects/backstage/repos/mock/browse/docs/index.*?at=master', + ); + expect(result.etag).toBe('12ab34cd56ef'); + expect(result.files.length).toBe(1); + expect(result.files[0].url).toBe( + 'https://bitbucket.mycompany.net/projects/backstage/repos/mock/browse/docs/index.md?at=master', + ); + await expect(result.files[0].content()).resolves.toEqual( + Buffer.from('# Test\n'), + ); + }); + it('throws NotModifiedError when same etag', async () => { await expect( hostedBitbucketProcessor.search( diff --git a/packages/backend-common/src/reading/BitbucketUrlReader.ts b/packages/backend-common/src/reading/BitbucketUrlReader.ts index 4965d5a370..611e94f0db 100644 --- a/packages/backend-common/src/reading/BitbucketUrlReader.ts +++ b/packages/backend-common/src/reading/BitbucketUrlReader.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { NotFoundError, NotModifiedError } from '@backstage/errors'; import { BitbucketIntegration, getBitbucketDefaultBranch, @@ -26,18 +27,16 @@ import fetch from 'cross-fetch'; import parseGitUrl from 'git-url-parse'; import { Minimatch } from 'minimatch'; import { Readable } from 'stream'; -import { NotFoundError, NotModifiedError } from '@backstage/errors'; -import { stripFirstDirectoryFromPath } from './tree/util'; import { - ReadTreeResponseFactory, ReaderFactory, ReadTreeOptions, ReadTreeResponse, + ReadTreeResponseFactory, + ReadUrlOptions, + ReadUrlResponse, SearchOptions, SearchResponse, UrlReader, - ReadUrlResponse, - ReadUrlOptions, } from './types'; /** @@ -154,7 +153,7 @@ export class BitbucketUrlReader implements UrlReader { const tree = await this.readTree(treeUrl, { etag: options?.etag, - filter: path => matcher.match(stripFirstDirectoryFromPath(path)), + filter: path => matcher.match(path), }); const files = await tree.files();