forked from qt-creator/qt-creator
Git: Fix author encoding on amend commit on Windows...
... when i18n.commitEncoding is not UTF-8 and the author has non-ASCII characters. Change-Id: Ieec0a78f4d31b18f9ebda9c4a1fce4a0d5ecbb9b Reviewed-by: Peter Kümmel <syntheticpp@gmx.net> Reviewed-by: André Hartmann <aha_1980@gmx.de> Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
committed by
Orgad Shaneh
parent
575259c3c1
commit
954245c645
@@ -3011,6 +3011,15 @@ QTextCodec *GitClient::encoding(const QString &workingDirectory, const QByteArra
|
|||||||
return QTextCodec::codecForName(codecName);
|
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,
|
bool GitClient::getCommitData(const QString &workingDirectory,
|
||||||
QString *commitTemplate,
|
QString *commitTemplate,
|
||||||
CommitData &commitData,
|
CommitData &commitData,
|
||||||
@@ -3097,19 +3106,20 @@ bool GitClient::getCommitData(const QString &workingDirectory,
|
|||||||
case AmendCommit: {
|
case AmendCommit: {
|
||||||
// Amend: get last commit data as "SHA1<tab>author<tab>email<tab>message".
|
// Amend: get last commit data as "SHA1<tab>author<tab>email<tab>message".
|
||||||
QStringList args(QLatin1String("log"));
|
QStringList args(QLatin1String("log"));
|
||||||
args << QLatin1String("--max-count=1") << QLatin1String("--pretty=format:%h\t%an\t%ae\t%B");
|
args << QLatin1String("--max-count=1") << QLatin1String("--pretty=format:%h\n%an\n%ae\n%B");
|
||||||
const Utils::SynchronousProcessResponse sp = synchronousGit(repoDirectory, args, 0,
|
QByteArray outputText;
|
||||||
commitData.commitEncoding);
|
if (!fullySynchronousGit(repoDirectory, args, &outputText, 0,
|
||||||
if (sp.result != Utils::SynchronousProcessResponse::Finished) {
|
VcsBasePlugin::SuppressCommandLogging)) {
|
||||||
*errorMessage = tr("Cannot retrieve last commit data of repository \"%1\".").arg(repoDirectory);
|
*errorMessage = tr("Cannot retrieve last commit data of repository \"%1\".").arg(repoDirectory);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
QStringList values = sp.stdOut.split(QLatin1Char('\t'));
|
QTextCodec *authorCodec = Utils::HostOsInfo::isWindowsHost()
|
||||||
QTC_ASSERT(values.size() >= 4, return false);
|
? QTextCodec::codecForName("UTF-8")
|
||||||
commitData.amendSHA1 = values.takeFirst();
|
: commitData.commitEncoding;
|
||||||
commitData.panelData.author = values.takeFirst();
|
commitData.amendSHA1 = QString::fromLatin1(shiftLogLine(outputText));
|
||||||
commitData.panelData.email = values.takeFirst();
|
commitData.panelData.author = authorCodec->toUnicode(shiftLogLine(outputText));
|
||||||
*commitTemplate = values.join(QLatin1String("\t"));
|
commitData.panelData.email = authorCodec->toUnicode(shiftLogLine(outputText));
|
||||||
|
*commitTemplate = commitData.commitEncoding->toUnicode(outputText);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SimpleCommit: {
|
case SimpleCommit: {
|
||||||
|
|||||||
Reference in New Issue
Block a user