Git: Simplify commit message codec handling

Change-Id: I5f90d7f5a17ccbe8585efd8ac7f731440b10db61
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Orgad Shaneh
2014-03-18 13:22:56 +02:00
committed by Orgad Shaneh
parent a5a42c3f67
commit 7872981d62
7 changed files with 19 additions and 21 deletions

View File

@@ -80,6 +80,7 @@ QDebug operator<<(QDebug d, const GitSubmitEditorPanelData &data)
CommitData::CommitData(CommitType type) CommitData::CommitData(CommitType type)
: commitType(type) : commitType(type)
, commitEncoding(0)
, enablePush(false) , enablePush(false)
{ {
} }

View File

@@ -111,7 +111,7 @@ public:
CommitType commitType; CommitType commitType;
QString amendSHA1; QString amendSHA1;
QString commitEncoding; QTextCodec *commitEncoding;
GitSubmitEditorPanelInfo panelInfo; GitSubmitEditorPanelInfo panelInfo;
GitSubmitEditorPanelData panelData; GitSubmitEditorPanelData panelData;
bool enablePush; bool enablePush;

View File

@@ -424,8 +424,7 @@ void GitDiffHandler::collectShowDescription(const QString &id)
m_editorController->clear(m_waitMessage); m_editorController->clear(m_waitMessage);
VcsBase::Command *command = new VcsBase::Command(m_gitPath, m_workingDirectory, m_processEnvironment); VcsBase::Command *command = new VcsBase::Command(m_gitPath, m_workingDirectory, m_processEnvironment);
const QString encoding = GitPlugin::instance()->gitClient()->commitEncoding(m_workingDirectory); command->setCodec(GitPlugin::instance()->gitClient()->commitEncoding(m_workingDirectory));
command->setCodec(QTextCodec::codecForName(encoding.toLocal8Bit()));
connect(command, SIGNAL(output(QString)), this, SLOT(slotShowDescriptionReceived(QString))); connect(command, SIGNAL(output(QString)), this, SLOT(slotShowDescriptionReceived(QString)));
QStringList arguments; QStringList arguments;
arguments << QLatin1String("show") << QLatin1String("-s") arguments << QLatin1String("show") << QLatin1String("-s")
@@ -3028,14 +3027,15 @@ QString GitClient::gitBinaryPath(bool *ok, QString *errorMessage) const
return settings()->gitBinaryPath(ok, errorMessage); return settings()->gitBinaryPath(ok, errorMessage);
} }
QString GitClient::commitEncoding(const QString &workingDirectory) QTextCodec *GitClient::commitEncoding(const QString &workingDirectory)
{ {
QString encoding = readConfigValue(workingDirectory, QLatin1String("i18n.commitEncoding")); QByteArray encoding = readConfigValue(workingDirectory, QLatin1String("i18n.commitEncoding"))
if (!encoding.isEmpty()) .toLocal8Bit();
return encoding;
// Set default commit encoding to 'UTF-8', when it's not set, // Set default commit encoding to 'UTF-8', when it's not set,
// to solve displaying error of commit log with non-latin characters. // to solve displaying error of commit log with non-latin characters.
return QLatin1String("UTF-8"); if (encoding.isEmpty())
encoding = "UTF-8";
return QTextCodec::codecForName(encoding);
} }
bool GitClient::getCommitData(const QString &workingDirectory, bool GitClient::getCommitData(const QString &workingDirectory,
@@ -3125,8 +3125,8 @@ bool GitClient::getCommitData(const QString &workingDirectory,
// Amend: get last commit data as "SHA1<tab>author<tab>email<tab>message". // Amend: get last commit data as "SHA1<tab>author<tab>email<tab>message".
QStringList args(QLatin1String("log")); QStringList args(QLatin1String("log"));
args << QLatin1String("--max-count=1") << QLatin1String("--pretty=format:%h\t%an\t%ae\t%B"); args << QLatin1String("--max-count=1") << QLatin1String("--pretty=format:%h\t%an\t%ae\t%B");
QTextCodec *codec = QTextCodec::codecForName(commitData.commitEncoding.toLocal8Bit()); const Utils::SynchronousProcessResponse sp = synchronousGit(repoDirectory, args, 0,
const Utils::SynchronousProcessResponse sp = synchronousGit(repoDirectory, args, 0, codec); commitData.commitEncoding);
if (sp.result != Utils::SynchronousProcessResponse::Finished) { if (sp.result != Utils::SynchronousProcessResponse::Finished) {
*errorMessage = tr("Cannot retrieve last commit data of repository \"%1\".").arg(repoDirectory); *errorMessage = tr("Cannot retrieve last commit data of repository \"%1\".").arg(repoDirectory);
return false; return false;

View File

@@ -285,7 +285,7 @@ public:
QString readConfigValue(const QString &workingDirectory, const QString &configVar) const; QString readConfigValue(const QString &workingDirectory, const QString &configVar) const;
QString commitEncoding(const QString &workingDirectory); QTextCodec *commitEncoding(const QString &workingDirectory);
bool getCommitData(const QString &workingDirectory, QString *commitTemplate, bool getCommitData(const QString &workingDirectory, QString *commitTemplate,
CommitData &commitData, QString *errorMessage); CommitData &commitData, QString *errorMessage);

View File

@@ -332,8 +332,7 @@ bool GitEditor::open(QString *errorString, const QString &fileName, const QStrin
QFileInfo fi(fileName); QFileInfo fi(fileName);
const QString gitPath = fi.absolutePath(); const QString gitPath = fi.absolutePath();
setSource(gitPath); setSource(gitPath);
const QString commitEncoding = GitPlugin::instance()->gitClient()->commitEncoding(gitPath); baseTextDocument()->setCodec(GitPlugin::instance()->gitClient()->commitEncoding(gitPath));
baseTextDocument()->setCodec(QTextCodec::codecForName(commitEncoding.toLocal8Bit()));
} }
return VcsBaseEditorWidget::open(errorString, fileName, realFileName); return VcsBaseEditorWidget::open(errorString, fileName, realFileName);
} }

View File

@@ -88,6 +88,7 @@ private:
GitSubmitEditor::GitSubmitEditor(const VcsBase::VcsBaseSubmitEditorParameters *parameters, QWidget *parent) : GitSubmitEditor::GitSubmitEditor(const VcsBase::VcsBaseSubmitEditorParameters *parameters, QWidget *parent) :
VcsBaseSubmitEditor(parameters, new GitSubmitEditorWidget(parent)), VcsBaseSubmitEditor(parameters, new GitSubmitEditorWidget(parent)),
m_model(0), m_model(0),
m_commitEncoding(0),
m_commitType(SimpleCommit), m_commitType(SimpleCommit),
m_forceClose(false) m_forceClose(false)
{ {
@@ -202,13 +203,10 @@ QByteArray GitSubmitEditor::fileContents() const
{ {
const QString &text = submitEditorWidget()->descriptionText(); const QString &text = submitEditorWidget()->descriptionText();
if (!m_commitEncoding.isEmpty()) { // Do the encoding convert, When use user-defined encoding
// Do the encoding convert, When use user-defined encoding // e.g. git config --global i18n.commitencoding utf-8
// e.g. git config --global i18n.commitencoding utf-8 if (m_commitEncoding)
QTextCodec *codec = QTextCodec::codecForName(m_commitEncoding.toLocal8Bit()); return m_commitEncoding->fromUnicode(text);
if (codec)
return codec->fromUnicode(text);
}
// Using utf-8 as the default encoding // Using utf-8 as the default encoding
return text.toUtf8(); return text.toUtf8();

View File

@@ -75,7 +75,7 @@ private:
inline const GitSubmitEditorWidget *submitEditorWidget() const; inline const GitSubmitEditorWidget *submitEditorWidget() const;
VcsBase::SubmitFileModel *m_model; VcsBase::SubmitFileModel *m_model;
QString m_commitEncoding; QTextCodec *m_commitEncoding;
CommitType m_commitType; CommitType m_commitType;
QString m_amendSHA1; QString m_amendSHA1;
bool m_forceClose; bool m_forceClose;