diff options
author | Eike Ziller <eike.ziller@digia.com> | 2014-05-02 10:00:20 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@digia.com> | 2014-05-02 10:00:20 +0200 |
commit | 0fb641c90e64054a28a39e3f48d96f953399805a (patch) | |
tree | 504f097db01334a87316f8e825f1db0cba6bfba1 /src/plugins/git/gitclient.cpp | |
parent | f4520bafaccb0832266f8d88f254e910ed7a23f4 (diff) | |
parent | 4b2cc015f867941a7ae35a38d81ec9daa5616711 (diff) |
Merge remote-tracking branch 'origin/3.1'
Conflicts:
qtcreator.pri
qtcreator.qbs
src/libs/qmljs/qmljsmodelmanagerinterface.cpp
src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
Change-Id: Ie216b715d6f87a6d72d3b8fe3d4e777e561579f9
Diffstat (limited to 'src/plugins/git/gitclient.cpp')
-rw-r--r-- | src/plugins/git/gitclient.cpp | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 402b132b09..1f7864b544 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -2401,8 +2401,7 @@ SubmoduleDataMap GitClient::submoduleList(const QString &workingDirectory) if (cachedSubmoduleData.contains(workingDirectory)) return cachedSubmoduleData.value(workingDirectory); - QStringList allConfigs = - commandOutputFromLocal8Bit(readConfig(workingDirectory, QLatin1String("-l"))) + QStringList allConfigs = readConfigValue(workingDirectory, QLatin1String("-l")) .split(QLatin1Char('\n')); const QString submoduleLineStart = QLatin1String("submodule."); foreach (const QString &configLine, allConfigs) { @@ -3015,7 +3014,7 @@ QString GitClient::gitBinaryPath(bool *ok, QString *errorMessage) const QTextCodec *GitClient::encoding(const QString &workingDirectory, const QByteArray &configVar) const { - QByteArray codecName = readConfig(workingDirectory, QLatin1String(configVar)).trimmed(); + QByteArray codecName = readConfigBytes(workingDirectory, QLatin1String(configVar)).trimmed(); // Set default commit encoding to 'UTF-8', when it's not set, // to solve displaying error of commit log with non-latin characters. if (codecName.isEmpty()) @@ -3023,6 +3022,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, @@ -3109,19 +3117,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: { @@ -3739,7 +3748,7 @@ bool GitClient::synchronousStashList(const QString &workingDirectory, return true; } -QByteArray GitClient::readConfig(const QString &workingDirectory, const QString &configVar) const +QByteArray GitClient::readConfigBytes(const QString &workingDirectory, const QString &configVar) const { QStringList arguments; arguments << QLatin1String("config") << configVar; @@ -3757,7 +3766,13 @@ QByteArray GitClient::readConfig(const QString &workingDirectory, const QString // Read a single-line config value, return trimmed QString GitClient::readConfigValue(const QString &workingDirectory, const QString &configVar) const { - return commandOutputFromLocal8Bit(readConfig(workingDirectory, configVar).trimmed()); + // msysGit always uses UTF-8 for configuration: + // https://github.com/msysgit/msysgit/wiki/Git-for-Windows-Unicode-Support#convert-config-files + static QTextCodec *codec = Utils::HostOsInfo::isWindowsHost() + ? QTextCodec::codecForName("UTF-8") + : QTextCodec::codecForLocale(); + const QByteArray value = readConfigBytes(workingDirectory, configVar).trimmed(); + return Utils::SynchronousProcess::normalizeNewlines(codec->toUnicode(value)); } bool GitClient::cloneRepository(const QString &directory,const QByteArray &url) |