From 58f8d43fff702dd25a4103bee741bfc0de43a87d Mon Sep 17 00:00:00 2001
From: Yuchen Deng <loaden@gmail.com>
Date: Tue, 10 Jan 2012 00:15:50 +0800
Subject: [PATCH] Git: Fix error encoding if the source file not exist

Change-Id: Ia98195f966e79d65f1947c638cb9aacfb9b2f309
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
---
 src/plugins/git/gitclient.cpp | 12 +++++++++++-
 src/plugins/git/gitclient.h   |  1 +
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 5956f085403..849e27dd140 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -408,7 +408,7 @@ VcsBase::VcsBaseEditorWidget *GitClient::createVcsEditor(const Core::Id &id,
     QTC_ASSERT(rc, return 0);
     rc->setSource(source);
     if (codecType == CodecSource) {
-        rc->setCodec(VcsBase::VcsBaseEditorWidget::getCodec(source));
+        rc->setCodec(getSourceCodec(source));
     } else if (codecType == CodecLogOutput) {
         QString encodingName = readConfigValue(source, QLatin1String("i18n.logOutputEncoding"));
         if (encodingName.isEmpty())
@@ -675,6 +675,16 @@ void GitClient::slotBlameRevisionRequested(const QString &source, QString change
     blame(fi.absolutePath(), QStringList(), fi.fileName(), change, lineNumber);
 }
 
+QTextCodec *GitClient::getSourceCodec(const QString &file) const
+{
+    if (QFileInfo(file).isFile())
+        return VcsBase::VcsBaseEditorWidget::getCodec(file);
+    QString encodingName = readConfigValue(file, QLatin1String("gui.encoding"));
+    if (encodingName.isEmpty())
+        encodingName = QLatin1String("utf-8");
+    return QTextCodec::codecForName(encodingName.toLocal8Bit());
+}
+
 void GitClient::blame(const QString &workingDirectory,
                       const QStringList &args,
                       const QString &fileName,
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 3746b420cc4..c2375287993 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -233,6 +233,7 @@ private slots:
     void slotBlameRevisionRequested(const QString &source, QString change, int lineNumber);
 
 private:
+    QTextCodec *getSourceCodec(const QString &file) const;
     VcsBase::VcsBaseEditorWidget *findExistingVCSEditor(const char *registerDynamicProperty,
                                                   const QString &dynamicPropertyValue) const;
     enum CodecType { CodecSource, CodecLogOutput, CodecNone };
-- 
GitLab