From c56b56be81ab74d8fb52765ff89c6f5ddae4cd86 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Mon, 1 Mar 2010 10:32:32 +0100 Subject: [PATCH] VCS: Minor fixes - git status: Recognize text in case -u was passed - Mercurial: Always run in C locale --- src/plugins/git/gitclient.cpp | 5 +++-- src/plugins/mercurial/mercurialclient.cpp | 1 + src/plugins/mercurial/mercurialjobrunner.cpp | 13 ++++++++++++- src/plugins/mercurial/mercurialjobrunner.h | 7 +++++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index b9bbbdbc383..95d4d7ced98 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -1147,8 +1147,9 @@ GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory, } return StatusFailed; } - // Unchanged? - if (outputText.contains("nothing to commit")) + // Unchanged (output text depending on whether -u was passed) + if (outputText.contains("nothing to commit") + || outputText.contains("nothing added to commit but untracked files present")) return StatusUnchanged; return StatusChanged; } diff --git a/src/plugins/mercurial/mercurialclient.cpp b/src/plugins/mercurial/mercurialclient.cpp index eda48fe909e..c798e538822 100644 --- a/src/plugins/mercurial/mercurialclient.cpp +++ b/src/plugins/mercurial/mercurialclient.cpp @@ -121,6 +121,7 @@ bool MercurialClient::executeHgSynchronously(const QString &workingDir, QProcess hgProcess; if (!workingDir.isEmpty()) hgProcess.setWorkingDirectory(workingDir); + MercurialJobRunner::setProcessEnvironment(hgProcess); const MercurialSettings &settings = MercurialPlugin::instance()->settings(); const QString binary = settings.binary(); diff --git a/src/plugins/mercurial/mercurialjobrunner.cpp b/src/plugins/mercurial/mercurialjobrunner.cpp index 17e2ea4f111..54f343c122d 100644 --- a/src/plugins/mercurial/mercurialjobrunner.cpp +++ b/src/plugins/mercurial/mercurialjobrunner.cpp @@ -37,6 +37,7 @@ #include <utils/synchronousprocess.h> #include <QtCore/QProcess> +#include <QtCore/QProcessEnvironment> #include <QtCore/QString> #include <QtCore/QDebug> @@ -161,6 +162,16 @@ QString MercurialJobRunner::msgTimeout(int timeoutSeconds) return tr("Timed out after %1s waiting for mercurial process to finish.").arg(timeoutSeconds); } +// Set environment for a hg process to run in locale "C". Note that there appears +// to be a bug in hg that causes special characters to be garbled when running +// in a different language, which seems to be independent from the encoding. +void MercurialJobRunner::setProcessEnvironment(QProcess &p) +{ + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert(QLatin1String("LANG"), QString(QLatin1Char('C'))); + p.setProcessEnvironment(env); +} + void MercurialJobRunner::task(const QSharedPointer<HgTask> &job) { HgTask *taskData = job.data(); @@ -193,7 +204,7 @@ void MercurialJobRunner::task(const QSharedPointer<HgTask> &job) QProcess hgProcess; hgProcess.setWorkingDirectory(taskData->repositoryRoot()); - + MercurialJobRunner::setProcessEnvironment(hgProcess); hgProcess.start(binary, args); diff --git a/src/plugins/mercurial/mercurialjobrunner.h b/src/plugins/mercurial/mercurialjobrunner.h index 8d124e2457e..df6f1f79d63 100644 --- a/src/plugins/mercurial/mercurialjobrunner.h +++ b/src/plugins/mercurial/mercurialjobrunner.h @@ -39,6 +39,10 @@ #include <QtCore/QVariant> #include <QtCore/QString> +QT_BEGIN_NAMESPACE +class QProcess; +QT_END_NAMESPACE + namespace VCSBase { class VCSBaseEditor; } @@ -95,6 +99,9 @@ public: static QString msgStartFailed(const QString &binary, const QString &why); static QString msgTimeout(int timeoutSeconds); + // Set environment for a hg process to run in locale "C" + static void setProcessEnvironment(QProcess &p); + protected: void run(); -- GitLab