diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 8121bf5dac2..467854c4866 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -3011,6 +3011,15 @@ QTextCodec *GitClient::encoding(const QString &workingDirectory, const QByteArra return QTextCodec::codecForName(codecName); } +// returns first line from log and removes it +static QByteArray shiftLogLine(QByteArray &logText) +{ + const int index = logText.indexOf('\n'); + const QByteArray res = logText.left(index); + logText.remove(0, index + 1); + return res; +} + bool GitClient::getCommitData(const QString &workingDirectory, QString *commitTemplate, CommitData &commitData, @@ -3097,19 +3106,20 @@ bool GitClient::getCommitData(const QString &workingDirectory, case AmendCommit: { // Amend: get last commit data as "SHA1authoremailmessage". QStringList args(QLatin1String("log")); - args << QLatin1String("--max-count=1") << QLatin1String("--pretty=format:%h\t%an\t%ae\t%B"); - const Utils::SynchronousProcessResponse sp = synchronousGit(repoDirectory, args, 0, - commitData.commitEncoding); - if (sp.result != Utils::SynchronousProcessResponse::Finished) { + args << QLatin1String("--max-count=1") << QLatin1String("--pretty=format:%h\n%an\n%ae\n%B"); + QByteArray outputText; + if (!fullySynchronousGit(repoDirectory, args, &outputText, 0, + VcsBasePlugin::SuppressCommandLogging)) { *errorMessage = tr("Cannot retrieve last commit data of repository \"%1\".").arg(repoDirectory); return false; } - QStringList values = sp.stdOut.split(QLatin1Char('\t')); - QTC_ASSERT(values.size() >= 4, return false); - commitData.amendSHA1 = values.takeFirst(); - commitData.panelData.author = values.takeFirst(); - commitData.panelData.email = values.takeFirst(); - *commitTemplate = values.join(QLatin1String("\t")); + QTextCodec *authorCodec = Utils::HostOsInfo::isWindowsHost() + ? QTextCodec::codecForName("UTF-8") + : commitData.commitEncoding; + commitData.amendSHA1 = QString::fromLatin1(shiftLogLine(outputText)); + commitData.panelData.author = authorCodec->toUnicode(shiftLogLine(outputText)); + commitData.panelData.email = authorCodec->toUnicode(shiftLogLine(outputText)); + *commitTemplate = commitData.commitEncoding->toUnicode(outputText); break; } case SimpleCommit: {