From 27c068889fdf4c3ae0c0ba625ebfc3aa45b0e5eb Mon Sep 17 00:00:00 2001 From: Frank Li Date: Fri, 22 May 2009 22:46:52 +0800 Subject: [PATCH] Add union code encode at commit support i18n.commitencoding Signed-off-by: Frank Li --- src/TortoiseProc/AppUtils.cpp | 28 ++++++++++++++++++++++++++++ src/TortoiseProc/AppUtils.h | 2 ++ src/TortoiseProc/CommitDlg.cpp | 7 +++---- src/Utils/UnicodeUtils.cpp | 6 +++++- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/TortoiseProc/AppUtils.cpp b/src/TortoiseProc/AppUtils.cpp index b731c98d9..74acedbab 100644 --- a/src/TortoiseProc/AppUtils.cpp +++ b/src/TortoiseProc/AppUtils.cpp @@ -1988,4 +1988,32 @@ bool CAppUtils::SendPatchMail(CTGitPathList &list,bool autoclose) return true; } return false; +} + +int CAppUtils::SaveCommitUnicodeFile(CString &filename, CString &message) +{ + CFile file(filename,CFile::modeReadWrite|CFile::modeCreate ); + CString cmd,output; + int cp=CP_UTF8; + + cmd=_T("git.exe config i18n.commitencoding"); + if(g_Git.Run(cmd,&output,CP_ACP)) + cp=CP_UTF8; + + int start=0; + output=output.Tokenize(_T("\n"),start); + cp=CUnicodeUtils::GetCPCode(output); + + int len=message.GetLength(); + + char * buf; + buf = new char[len*4 + 4]; + SecureZeroMemory(buf, (len*4 + 4)); + + int lengthIncTerminator = WideCharToMultiByte(cp, 0, message, -1, buf, len*4, NULL, NULL); + + file.Write(buf,lengthIncTerminator-1); + file.Close(); + delete buf; + return 0; } \ No newline at end of file diff --git a/src/TortoiseProc/AppUtils.h b/src/TortoiseProc/AppUtils.h index dbac9b353..a9032fbb7 100644 --- a/src/TortoiseProc/AppUtils.h +++ b/src/TortoiseProc/AppUtils.h @@ -195,6 +195,8 @@ public: static CString ChooseRepository(CString *path); static bool SendPatchMail(CTGitPathList &pathlist,bool autoclose=false); + + static int SaveCommitUnicodeFile(CString &filename, CString &mesage); private: static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2); diff --git a/src/TortoiseProc/CommitDlg.cpp b/src/TortoiseProc/CommitDlg.cpp index c78eb55a6..d7e189bdf 100644 --- a/src/TortoiseProc/CommitDlg.cpp +++ b/src/TortoiseProc/CommitDlg.cpp @@ -470,11 +470,10 @@ void CCommitDlg::OnOK() // g_Git.Run(cmd,&out); CString tempfile=::GetTempFile(); - CFile file(tempfile,CFile::modeReadWrite|CFile::modeCreate ); - CStringA log=CUnicodeUtils::GetUTF8( m_sLogMessage); - file.Write(log,log.GetLength()); + + CAppUtils::SaveCommitUnicodeFile(tempfile,m_sLogMessage); //file.WriteString(m_sLogMessage); - file.Close(); + out =_T(""); CString amend; diff --git a/src/Utils/UnicodeUtils.cpp b/src/Utils/UnicodeUtils.cpp index 5d2dff76d..20aede4e1 100644 --- a/src/Utils/UnicodeUtils.cpp +++ b/src/Utils/UnicodeUtils.cpp @@ -194,9 +194,13 @@ int CUnicodeUtils::GetCPCode(CString &codename) }; static CodeMap *p=map; + codename=codename.MakeLower(); while(p->m_CodeName != NULL) { - if(CString(p->m_CodeName).MakeLower() == codename) + CString str = p->m_CodeName; + str=str.MakeLower(); + + if( str == codename) return p->m_Code; p++; } -- 2.11.4.GIT