feat: add debug logs for git commands
This commit is contained in:
		
							parent
							
								
									7e785fa757
								
							
						
					
					
						commit
						687435b9a2
					
				| @ -42,10 +42,12 @@ module.exports = async (opts, logger) => { | |||||||
|     }; |     }; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   const repositoryUrl = (await pkgRepoUrl()) || (await repoUrl()); | ||||||
|  | 
 | ||||||
|   // Set default options values if not defined yet
 |   // Set default options values if not defined yet
 | ||||||
|   options = { |   options = { | ||||||
|     branch: 'master', |     branch: 'master', | ||||||
|     repositoryUrl: getGitAuthUrl((await pkgRepoUrl()) || (await repoUrl())), |     repositoryUrl: repositoryUrl ? getGitAuthUrl(repositoryUrl) : repositoryUrl, | ||||||
|     tagFormat: `v\${version}`, |     tagFormat: `v\${version}`, | ||||||
|     // Remove `null` and `undefined` options so they can be replaced with default ones
 |     // Remove `null` and `undefined` options so they can be replaced with default ones
 | ||||||
|     ...pickBy(options, option => !isUndefined(option) && !isNull(option)), |     ...pickBy(options, option => !isUndefined(option) && !isNull(option)), | ||||||
|  | |||||||
							
								
								
									
										44
									
								
								lib/git.js
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								lib/git.js
									
									
									
									
									
								
							| @ -9,7 +9,11 @@ const debug = require('debug')('semantic-release:get-version-head'); | |||||||
|  * @return {string} The commit sha of the tag in parameter or `null`. |  * @return {string} The commit sha of the tag in parameter or `null`. | ||||||
|  */ |  */ | ||||||
| async function gitTagHead(tagName) { | async function gitTagHead(tagName) { | ||||||
|   return execa.stdout('git', ['rev-list', '-1', tagName], {reject: false}); |   try { | ||||||
|  |     return await execa.stdout('git', ['rev-list', '-1', tagName]); | ||||||
|  |   } catch (err) { | ||||||
|  |     debug(err); | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
| @ -28,10 +32,14 @@ async function gitTags() { | |||||||
|  * |  * | ||||||
|  * @param {string} ref The reference to look for. |  * @param {string} ref The reference to look for. | ||||||
|  * |  * | ||||||
|  * @return {boolean} `true` if the reference is in the history of the current branch, `false` otherwise. |  * @return {boolean} `true` if the reference is in the history of the current branch, falsy otherwise. | ||||||
|  */ |  */ | ||||||
| async function isRefInHistory(ref) { | async function isRefInHistory(ref) { | ||||||
|   return (await execa('git', ['merge-base', '--is-ancestor', ref, 'HEAD'], {reject: false})).code === 0; |   try { | ||||||
|  |     return (await execa('git', ['merge-base', '--is-ancestor', ref, 'HEAD'])).code === 0; | ||||||
|  |   } catch (err) { | ||||||
|  |     debug(err); | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
| @ -52,14 +60,22 @@ async function gitHead() { | |||||||
|  * @return {string} The value of the remote git URL. |  * @return {string} The value of the remote git URL. | ||||||
|  */ |  */ | ||||||
| async function repoUrl() { | async function repoUrl() { | ||||||
|   return execa.stdout('git', ['remote', 'get-url', 'origin'], {reject: false}); |   try { | ||||||
|  |     return await execa.stdout('git', ['remote', 'get-url', 'origin']); | ||||||
|  |   } catch (err) { | ||||||
|  |     debug(err); | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * @return {Boolean} `true` if the current working directory is in a git repository, `false` otherwise. |  * @return {Boolean} `true` if the current working directory is in a git repository, falsy otherwise. | ||||||
|  */ |  */ | ||||||
| async function isGitRepo() { | async function isGitRepo() { | ||||||
|   return (await execa('git', ['rev-parse', '--git-dir'], {reject: false})).code === 0; |   try { | ||||||
|  |     return (await execa('git', ['rev-parse', '--git-dir'])).code === 0; | ||||||
|  |   } catch (err) { | ||||||
|  |     debug(err); | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
| @ -68,10 +84,14 @@ async function isGitRepo() { | |||||||
|  * @param {String} origin The remote repository URL. |  * @param {String} origin The remote repository URL. | ||||||
|  * @param {String} branch The repositoru branch for which to verify write access. |  * @param {String} branch The repositoru branch for which to verify write access. | ||||||
|  * |  * | ||||||
|  * @return {Boolean} `true` is authorized to push, `false` otherwise. |  * @return {Boolean} `true` is authorized to push, falsy otherwise. | ||||||
|  */ |  */ | ||||||
| async function verifyAuth(origin, branch) { | async function verifyAuth(origin, branch) { | ||||||
|   return (await execa('git', ['push', '--dry-run', origin, `HEAD:${branch}`], {reject: false})).code === 0; |   try { | ||||||
|  |     return (await execa('git', ['push', '--dry-run', origin, `HEAD:${branch}`])).code === 0; | ||||||
|  |   } catch (err) { | ||||||
|  |     debug(err); | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
| @ -117,10 +137,14 @@ async function deleteTag(origin, tagName) { | |||||||
|  * |  * | ||||||
|  * @method verifyTagName |  * @method verifyTagName | ||||||
|  * @param {string} tagName the tag name to verify. |  * @param {string} tagName the tag name to verify. | ||||||
|  * @return {boolean} `true` if valid, `false` otherwise. |  * @return {boolean} `true` if valid, falsy otherwise. | ||||||
|  */ |  */ | ||||||
| async function verifyTagName(tagName) { | async function verifyTagName(tagName) { | ||||||
|   return (await execa('git', ['check-ref-format', `refs/tags/${tagName}`], {reject: false})).code === 0; |   try { | ||||||
|  |     return (await execa('git', ['check-ref-format', `refs/tags/${tagName}`])).code === 0; | ||||||
|  |   } catch (err) { | ||||||
|  |     debug(err); | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| module.exports = { | module.exports = { | ||||||
|  | |||||||
| @ -88,7 +88,7 @@ test.serial('Verify if the commit `sha` is in the direct history of the current | |||||||
|   await gitCheckout('master', false); |   await gitCheckout('master', false); | ||||||
| 
 | 
 | ||||||
|   t.true(await isRefInHistory(commits[0].hash)); |   t.true(await isRefInHistory(commits[0].hash)); | ||||||
|   t.false(await isRefInHistory(otherCommits[0].hash)); |   t.falsy(await isRefInHistory(otherCommits[0].hash)); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test.serial('Get the commit sha for a given tag or falsy if the tag does not exists', async t => { | test.serial('Get the commit sha for a given tag or falsy if the tag does not exists', async t => { | ||||||
| @ -169,11 +169,11 @@ test.serial('Return "true" if in a Git repository', async t => { | |||||||
|   t.true(await isGitRepo()); |   t.true(await isGitRepo()); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test.serial('Return "false" if not in a Git repository', async t => { | test.serial('Return falsy if not in a Git repository', async t => { | ||||||
|   const dir = tempy.directory(); |   const dir = tempy.directory(); | ||||||
|   process.chdir(dir); |   process.chdir(dir); | ||||||
| 
 | 
 | ||||||
|   t.false(await isGitRepo()); |   t.falsy(await isGitRepo()); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test.serial('Return "true" for valid tag names', async t => { | test.serial('Return "true" for valid tag names', async t => { | ||||||
| @ -183,11 +183,11 @@ test.serial('Return "true" for valid tag names', async t => { | |||||||
|   t.true(await verifyTagName('tag/name')); |   t.true(await verifyTagName('tag/name')); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test.serial('Return "false" for invalid tag names', async t => { | test.serial('Return falsy for invalid tag names', async t => { | ||||||
|   t.false(await verifyTagName('?1.0.0')); |   t.falsy(await verifyTagName('?1.0.0')); | ||||||
|   t.false(await verifyTagName('*1.0.0')); |   t.falsy(await verifyTagName('*1.0.0')); | ||||||
|   t.false(await verifyTagName('[1.0.0]')); |   t.falsy(await verifyTagName('[1.0.0]')); | ||||||
|   t.false(await verifyTagName('1.0.0..')); |   t.falsy(await verifyTagName('1.0.0..')); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test.serial('Throws error if obtaining the tags fails', async t => { | test.serial('Throws error if obtaining the tags fails', async t => { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user