Рыл библиотеку https://github.com/FredrikNoren/ungit/blob/master/source/git-promise.js
Интересует участок кода с 113 строки по 157, собственно, ниже:
const getGitError = (args, stderr, stdout) => {
const err = {};
err.isGitError = true;
err.errorCode = 'unknown';
err.command = args.commands.join(' ');
err.workingDirectory = args.repoPath;
err.error = stderr.toString();
err.message = err.error.split('\n')[0];
err.stderr = stderr;
err.stdout = stdout;
err.stdoutLower = (stdout || "").toLowerCase();
err.stderrLower = (stderr || "").toLowerCase();
if (err.stderrLower.indexOf('not a git repository') >= 0) {
err.errorCode = 'not-a-repository';
} else if (err.stderrLower.indexOf('connection timed out') != -1) {
err.errorCode = 'remote-timeout';
} else if (err.stderrLower.indexOf('permission denied (publickey)') != -1) {
err.errorCode = 'permision-denied-publickey';
} else if (err.stderrLower.indexOf('ssh: connect to host') != -1 && err.stderrLower.indexOf('bad file number') != -1) {
err.errorCode = 'ssh-bad-file-number';
} else if (err.stderrLower.indexOf('no remote configured to list refs from.') != -1) {
err.errorCode = 'no-remote-configured';
} else if ((err.stderrLower.indexOf('unable to access') != -1 && err.stderrLower.indexOf('could not resolve host:') != -1) ||
(err.stderrLower.indexOf('could not resolve hostname') != -1)) {
err.errorCode = 'offline';
} else if (err.stderrLower.indexOf('proxy authentication required') != -1) {
err.errorCode = 'proxy-authentication-required';
} else if (err.stderrLower.indexOf('please tell me who you are') != -1) {
err.errorCode = 'no-git-name-email-configured';
} else if (err.stderrLower.indexOf('fatal error: disconnected: no supported authentication methods available (server sent: publickey)') == 0) {
err.errorCode = 'no-supported-authentication-provided';
} else if (err.stderrLower.indexOf('fatal: no remote repository specified.') == 0) {
err.errorCode = 'no-remote-specified';
} else if (err.stderrLower.indexOf('non-fast-forward') != -1) {
err.errorCode = 'non-fast-forward';
} else if (err.stderrLower.indexOf('failed to merge in the changes.') == 0 || err.stdoutLower.indexOf('conflict (content): merge conflict in') != -1 || err.stderrLower.indexOf('after resolving the conflicts') != -1) {
err.errorCode = 'merge-failed';
} else if (err.stderrLower.indexOf('this operation must be run in a work tree') != -1) {
err.errorCode = 'must-be-in-working-tree';
} else if (err.stderrLower.indexOf('your local changes to the following files would be overwritten by checkout') != -1) {
err.errorCode = 'local-changes-would-be-overwritten';
}
return err;
}
если вычислить GitError до дерева проверок и переделать в switch - будет быстрее? Чтобы так сделать, нужны полные коды ошибок, где взять? Не потеряется гибкость при изменении вывода ошибок (вдруг кто-то добавит пару пробелов или ещё пару символов)? И нужно ли вообще заморачиваться?