aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/git/gitclient.cpp
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@digia.com>2014-05-02 10:00:20 +0200
committerEike Ziller <eike.ziller@digia.com>2014-05-02 10:00:20 +0200
commit0fb641c90e64054a28a39e3f48d96f953399805a (patch)
tree504f097db01334a87316f8e825f1db0cba6bfba1 /src/plugins/git/gitclient.cpp
parentf4520bafaccb0832266f8d88f254e910ed7a23f4 (diff)
parent4b2cc015f867941a7ae35a38d81ec9daa5616711 (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.cpp45
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)