feat: log git error message when authentication verification fails

This commit is contained in:
pvdlg 2018-05-04 11:38:11 -04:00 committed by Gregor Martynus
parent d1c3ad0b57
commit cd9f2bdd44
3 changed files with 11 additions and 4 deletions

View File

@ -56,7 +56,10 @@ async function run(options, plugins) {
return false; return false;
} }
if (!await verifyAuth(options.repositoryUrl, options.branch)) { try {
await verifyAuth(options.repositoryUrl, options.branch);
} catch (err) {
logger.error(`The command "${err.cmd}" failed with the error message %s.`, err.stderr);
throw getError('EGITNOPERMISSION', {options}); throw getError('EGITNOPERMISSION', {options});
} }

View File

@ -43,7 +43,9 @@ module.exports = async ({repositoryUrl, branch}) => {
} }
// Test if push is allowed without transforming the URL (e.g. is ssh keys are set up) // Test if push is allowed without transforming the URL (e.g. is ssh keys are set up)
if (!await verifyAuth(repositoryUrl, branch)) { try {
await verifyAuth(repositoryUrl, branch);
} catch (err) {
const envVar = Object.keys(GIT_TOKENS).find(envVar => !isUndefined(process.env[envVar])); const envVar = Object.keys(GIT_TOKENS).find(envVar => !isUndefined(process.env[envVar]));
const gitCredentials = `${GIT_TOKENS[envVar] || ''}${process.env[envVar] || ''}`; const gitCredentials = `${GIT_TOKENS[envVar] || ''}${process.env[envVar] || ''}`;
const {protocols, ...parsed} = gitUrlParse(repositoryUrl); const {protocols, ...parsed} = gitUrlParse(repositoryUrl);
@ -52,5 +54,6 @@ module.exports = async ({repositoryUrl, branch}) => {
// If credentials are set via anvironment variables, convert the URL to http/https and add basic auth, otherwise return `repositoryUrl` as is // If credentials are set via anvironment variables, convert the URL to http/https and add basic auth, otherwise return `repositoryUrl` as is
return gitCredentials ? {...parsed, protocols: [protocol], user: gitCredentials}.toString(protocol) : repositoryUrl; return gitCredentials ? {...parsed, protocols: [protocol], user: gitCredentials}.toString(protocol) : repositoryUrl;
} }
return repositoryUrl; return repositoryUrl;
}; };

View File

@ -86,13 +86,14 @@ async function isGitRepo() {
* @param {String} repositoryUrl The remote repository URL. * @param {String} repositoryUrl 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, falsy otherwise. * @throws {Error} if not authorized to push.
*/ */
async function verifyAuth(repositoryUrl, branch) { async function verifyAuth(repositoryUrl, branch) {
try { try {
return (await execa('git', ['push', '--dry-run', repositoryUrl, `HEAD:${branch}`])).code === 0; await execa('git', ['push', '--dry-run', repositoryUrl, `HEAD:${branch}`]);
} catch (err) { } catch (err) {
debug(err); debug(err);
throw err;
} }
} }