OSDN Git Service

Add union code encode at commit support i18n.commitencoding
authorFrank Li <lznuaa@gmail.com>
Fri, 22 May 2009 14:46:52 +0000 (22:46 +0800)
committerFrank Li <lznuaa@gmail.com>
Fri, 22 May 2009 14:46:52 +0000 (22:46 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/AppUtils.cpp
src/TortoiseProc/AppUtils.h
src/TortoiseProc/CommitDlg.cpp
src/Utils/UnicodeUtils.cpp

index b731c98..74acedb 100644 (file)
@@ -1988,4 +1988,32 @@ bool CAppUtils::SendPatchMail(CTGitPathList &list,bool autoclose)
                return true;\r
        }\r
        return false;\r
                return true;\r
        }\r
        return false;\r
+}\r
+\r
+int CAppUtils::SaveCommitUnicodeFile(CString &filename, CString &message)\r
+{\r
+       CFile file(filename,CFile::modeReadWrite|CFile::modeCreate );\r
+       CString cmd,output;\r
+       int cp=CP_UTF8;\r
+\r
+       cmd=_T("git.exe config i18n.commitencoding");\r
+       if(g_Git.Run(cmd,&output,CP_ACP))\r
+               cp=CP_UTF8;\r
+       \r
+       int start=0;\r
+       output=output.Tokenize(_T("\n"),start);\r
+       cp=CUnicodeUtils::GetCPCode(output);    \r
+\r
+       int len=message.GetLength();\r
+\r
+       char * buf;\r
+       buf = new char[len*4 + 4];\r
+       SecureZeroMemory(buf, (len*4 + 4));\r
+\r
+       int lengthIncTerminator = WideCharToMultiByte(cp, 0, message, -1, buf, len*4, NULL, NULL);\r
+\r
+       file.Write(buf,lengthIncTerminator-1);\r
+       file.Close();\r
+       delete buf;\r
+       return 0;\r
 }
\ No newline at end of file
 }
\ No newline at end of file
index dbac9b3..a9032fb 100644 (file)
@@ -195,6 +195,8 @@ public:
        static CString ChooseRepository(CString *path);\r
 \r
        static bool SendPatchMail(CTGitPathList &pathlist,bool autoclose=false);\r
        static CString ChooseRepository(CString *path);\r
 \r
        static bool SendPatchMail(CTGitPathList &pathlist,bool autoclose=false);\r
+\r
+       static int  SaveCommitUnicodeFile(CString &filename, CString &mesage);\r
        \r
 private:\r
        static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2);\r
        \r
 private:\r
        static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2);\r
index c78eb55..d7e189b 100644 (file)
@@ -470,11 +470,10 @@ void CCommitDlg::OnOK()
        //      g_Git.Run(cmd,&out);\r
 \r
                CString tempfile=::GetTempFile();\r
        //      g_Git.Run(cmd,&out);\r
 \r
                CString tempfile=::GetTempFile();\r
-               CFile file(tempfile,CFile::modeReadWrite|CFile::modeCreate );\r
-               CStringA log=CUnicodeUtils::GetUTF8( m_sLogMessage);\r
-               file.Write(log,log.GetLength());\r
+               \r
+               CAppUtils::SaveCommitUnicodeFile(tempfile,m_sLogMessage);\r
                //file.WriteString(m_sLogMessage);\r
                //file.WriteString(m_sLogMessage);\r
-               file.Close();\r
+                               \r
        \r
                out =_T("");\r
                CString amend;\r
        \r
                out =_T("");\r
                CString amend;\r
index 5d2dff7..20aede4 100644 (file)
@@ -194,9 +194,13 @@ int CUnicodeUtils::GetCPCode(CString &codename)
                \r
        };\r
        static CodeMap *p=map;\r
                \r
        };\r
        static CodeMap *p=map;\r
+       codename=codename.MakeLower();\r
        while(p->m_CodeName != NULL)\r
        {\r
        while(p->m_CodeName != NULL)\r
        {\r
-               if(CString(p->m_CodeName).MakeLower() == codename)\r
+               CString str = p->m_CodeName;\r
+               str=str.MakeLower();\r
+\r
+               if( str == codename)\r
                        return p->m_Code;\r
                p++;\r
        }\r
                        return p->m_Code;\r
                p++;\r
        }\r