fix: correct error when remote repository has no branches
This commit is contained in:
		
							parent
							
								
									b54b20d412
								
							
						
					
					
						commit
						c6b10766a7
					
				| @ -65,8 +65,8 @@ async function getCommits(from, to, execaOpts) { | |||||||
| async function getBranches(repositoryUrl, execaOpts) { | async function getBranches(repositoryUrl, execaOpts) { | ||||||
|   return (await execa('git', ['ls-remote', '--heads', repositoryUrl], execaOpts)).stdout |   return (await execa('git', ['ls-remote', '--heads', repositoryUrl], execaOpts)).stdout | ||||||
|     .split('\n') |     .split('\n') | ||||||
|     .map(branch => branch.match(/^.+refs\/heads\/(?<branch>.+)$/)[1]) |     .filter(Boolean) | ||||||
|     .filter(Boolean); |     .map(branch => branch.match(/^.+refs\/heads\/(?<branch>.+)$/)[1]); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  | |||||||
| @ -33,6 +33,7 @@ import { | |||||||
|   gitAddNote, |   gitAddNote, | ||||||
|   gitGetNote, |   gitGetNote, | ||||||
|   gitFetch, |   gitFetch, | ||||||
|  |   initGit, | ||||||
| } from './helpers/git-utils'; | } from './helpers/git-utils'; | ||||||
| 
 | 
 | ||||||
| test('Get the last commit sha', async t => { | test('Get the last commit sha', async t => { | ||||||
| @ -182,6 +183,11 @@ test('Get all branches', async t => { | |||||||
|   t.deepEqual((await getBranches(repositoryUrl, {cwd})).sort(), ['master', 'second-branch', 'third-branch'].sort()); |   t.deepEqual((await getBranches(repositoryUrl, {cwd})).sort(), ['master', 'second-branch', 'third-branch'].sort()); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  | test('Return empty array if there are no branches', async t => { | ||||||
|  |   const {cwd, repositoryUrl} = await initGit(true); | ||||||
|  |   t.deepEqual(await getBranches(repositoryUrl, {cwd}), []); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
| test('Get the commit sha for a given tag', async t => { | test('Get the commit sha for a given tag', async t => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd} = await gitRepo(); |   const {cwd} = await gitRepo(); | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ import getStream from 'get-stream'; | |||||||
| import {GIT_NOTE_REF} from '../../lib/definitions/constants'; | import {GIT_NOTE_REF} from '../../lib/definitions/constants'; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Commit message informations. |  * Commit message information. | ||||||
|  * |  * | ||||||
|  * @typedef {Object} Commit |  * @typedef {Object} Commit | ||||||
|  * @property {String} branch The commit branch. |  * @property {String} branch The commit branch. | ||||||
| @ -15,21 +15,34 @@ import {GIT_NOTE_REF} from '../../lib/definitions/constants'; | |||||||
|  * @property {String} message The commit message. |  * @property {String} message The commit message. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * Initialize git repository | ||||||
|  |  * If `withRemote` is `true`, creates a bare repository and initialize it. | ||||||
|  |  * If `withRemote` is `false`, creates a regular repository and initialize it. | ||||||
|  |  * | ||||||
|  |  * @param {Boolean} withRemote `true` to create a shallow clone of a bare repository. | ||||||
|  |  * @return {String} The path of the repository | ||||||
|  |  */ | ||||||
|  | export async function initGit(withRemote) { | ||||||
|  |   const cwd = tempy.directory(); | ||||||
|  | 
 | ||||||
|  |   await execa('git', ['init', ...(withRemote ? ['--bare'] : [])], {cwd}); | ||||||
|  |   const repositoryUrl = fileUrl(cwd); | ||||||
|  |   return {cwd, repositoryUrl}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * Create a temporary git repository. |  * Create a temporary git repository. | ||||||
|  * If `withRemote` is `true`, creates a bare repository, initialize it and create a shallow clone. Change the current working directory to the clone root. |  * If `withRemote` is `true`, creates a shallow clone. Change the current working directory to the clone root. | ||||||
|  * If `withRemote` is `false`, creates a regular repository and initialize it. Change the current working directory to the repository root. |  * If `withRemote` is `false`, just change the current working directory to the repository root. | ||||||
|  |  * | ||||||
|  * |  * | ||||||
|  * @param {Boolean} withRemote `true` to create a shallow clone of a bare repository. |  * @param {Boolean} withRemote `true` to create a shallow clone of a bare repository. | ||||||
|  * @param {String} [branch='master'] The branch to initialize. |  * @param {String} [branch='master'] The branch to initialize. | ||||||
|  * @return {String} The path of the clone if `withRemote` is `true`, the path of the repository otherwise. |  * @return {String} The path of the clone if `withRemote` is `true`, the path of the repository otherwise. | ||||||
|  */ |  */ | ||||||
| export async function gitRepo(withRemote, branch = 'master') { | export async function gitRepo(withRemote, branch = 'master') { | ||||||
|   let cwd = tempy.directory(); |   let {cwd, repositoryUrl} = await initGit(withRemote); | ||||||
| 
 |  | ||||||
|   await execa('git', ['init', ...(withRemote ? ['--bare'] : [])], {cwd}); |  | ||||||
| 
 |  | ||||||
|   const repositoryUrl = fileUrl(cwd); |  | ||||||
|   if (withRemote) { |   if (withRemote) { | ||||||
|     await initBareRepo(repositoryUrl, branch); |     await initBareRepo(repositoryUrl, branch); | ||||||
|     cwd = await gitShallowClone(repositoryUrl, branch); |     cwd = await gitShallowClone(repositoryUrl, branch); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user