summaryrefslogtreecommitdiff
path: root/src/plugins/git
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2014-04-22 09:22:47 +0300
committerOrgad Shaneh <orgads@gmail.com>2014-04-28 14:12:50 +0200
commit954245c645e8a3e362668a89008996b9e004a905 (patch)
tree604860460bb6488b60e2536d1f8f8243a3bf596c /src/plugins/git
parent575259c3c135ea8882705a6da7168b1f5b5a4ac3 (diff)
downloadqt-creator-954245c645e8a3e362668a89008996b9e004a905.tar.gz
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>
Diffstat (limited to 'src/plugins/git')
-rw-r--r--src/plugins/git/gitclient.cpp30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 8121bf5dac..467854c486 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 "SHA1<tab>author<tab>email<tab>message".
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: {