diff --git a/src/__tests__/formatPkg.test.js b/src/__tests__/formatPkg.test.js index bd9efeaa9..65058385e 100644 --- a/src/__tests__/formatPkg.test.js +++ b/src/__tests__/formatPkg.test.js @@ -252,6 +252,18 @@ describe('test getRepositoryInfo', () => { url: 'git+https://bitbucket.org/2klicdev/2klic-sdk.git', }; + const githubRepoWithDirectory = { + type: 'git', + url: 'https://github.com/facebook/react.git', + directory: './packages/react-dom', + }; + + const githubRepoWithPathUrlAndDirectory = { + type: 'git', + url: 'https://github.com/facebook/react/tree/master/packages/wrong', + directory: './packages/react-dom', + }; + expect(getRepositoryInfo(githubRepo)).toEqual({ host: 'github.com', user: 'webpack', @@ -272,6 +284,20 @@ describe('test getRepositoryInfo', () => { project: '2klic-sdk', path: '', }); + + expect(getRepositoryInfo(githubRepoWithDirectory)).toEqual({ + host: 'github.com', + user: 'facebook', + project: 'react', + path: 'packages/react-dom', + }); + + expect(getRepositoryInfo(githubRepoWithPathUrlAndDirectory)).toEqual({ + host: 'github.com', + user: 'facebook', + project: 'react', + path: 'packages/react-dom', + }); }); it('should return null if it cannot get information', () => { diff --git a/src/formatPkg.js b/src/formatPkg.js index e014bba8e..f095b9159 100644 --- a/src/formatPkg.js +++ b/src/formatPkg.js @@ -338,6 +338,7 @@ function getRepositoryInfo(repository) { } const url = typeof repository === 'string' ? repository : repository.url; + const path = typeof repository === 'string' ? '' : repository.directory || ''; if (!url) { return null; @@ -354,7 +355,7 @@ function getRepositoryInfo(repository) { project, user, host: domain, - path: '', + path: path.replace(/^[./]+/, ''), }; } @@ -363,7 +364,14 @@ function getRepositoryInfo(repository) { * https://github.com/babel/babel/tree/master/packages/babel-core * so we need to do it */ - return getRepositoryInfoFromHttpUrl(url); + const repositoryInfoFromUrl = getRepositoryInfoFromHttpUrl(url); + if (!repositoryInfoFromUrl) { + return null; + } + return { + ...repositoryInfoFromUrl, + path: path.replace(/^[./]+/, '') || repositoryInfoFromUrl.path, + }; } function formatUser(user) {