OSDN Git Service

Use new way to convert multi to wide char.
authorFrank Li <lznuaa@gmail.com>
Fri, 23 Jan 2009 10:26:41 +0000 (18:26 +0800)
committerFrank Li <lznuaa@gmail.com>
Fri, 23 Jan 2009 10:26:41 +0000 (18:26 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Git/Git.cpp
src/TortoiseGitBlame/OutputWnd.cpp
src/TortoiseGitBlame/TortoiseGitBlameDoc.cpp
src/TortoiseProc/Commands/ImportPatchCommand.cpp
src/TortoiseProc/LogDataVector.cpp
src/TortoiseProc/TortoiseProc.cpp

index 208ec43..23164db 100644 (file)
@@ -75,9 +75,19 @@ int CGit::RunAsync(CString cmd,PROCESS_INFORMATION *piOut,HANDLE *hReadOut,CStri
 //Becuase A2W use stack as internal convert buffer. \r
 void CGit::StringAppend(CString *str,BYTE *p,int code)\r
 {\r
-       USES_CONVERSION;\r
-       str->Append(A2W_CP((LPCSTR)p,code));\r
-\r
+     //USES_CONVERSION;\r
+        //str->Append(A2W_CP((LPCSTR)p,code));\r
+       WCHAR * buf;\r
+       int len = strlen((const char*)p);\r
+       //if (len==0)\r
+       //      return ;\r
+       //buf = new WCHAR[len*4 + 1];\r
+       buf = str->GetBuffer(len*4+1+str->GetLength())+str->GetLength();\r
+       SecureZeroMemory(buf, (len*4 + 1)*sizeof(WCHAR));\r
+       MultiByteToWideChar(code, 0, (LPCSTR)p, -1, buf, len*4);\r
+       str->ReleaseBuffer();\r
+       //str->Append(buf);\r
+       //delete buf;\r
 }      \r
 BOOL CGit::IsInitRepos()\r
 {\r
@@ -136,6 +146,7 @@ int CGit::Run(CString cmd, CString* output,int code)
                return ret;\r
        \r
        vector.push_back(0);\r
+       \r
        StringAppend(output,&(vector[0]),code);\r
        return 0;\r
 }\r
index 9ae92c1..67820aa 100644 (file)
@@ -168,7 +168,7 @@ int COutputWnd::LoadHistory(CString filename)
 {\r
        m_LogList.ReloadHashMap();\r
        CTGitPath path;\r
-       path.SetFromWin(filename);\r
+       path.SetFromGit(filename);\r
        \r
        m_LogList.Clear();\r
        m_LogList.FillGitLog(&path,0/*CGit::LOG_INFO_FULLHISTORY*/);\r
index 4105e83..20c1a09 100644 (file)
@@ -88,11 +88,19 @@ BOOL CTortoiseGitBlameDoc::OnOpenDocument(LPCTSTR lpszPathName,CString Rev)
        {\r
                m_IsGitFile=TRUE;\r
                g_Git.m_CurrentDir=topdir;\r
-               GetMainFrame()->m_wndOutput.LoadHistory(lpszPathName);\r
+\r
+               CString PathName=lpszPathName;\r
+               PathName=PathName.Right(PathName.GetLength()-g_Git.m_CurrentDir.GetLength()-1);\r
+               CTGitPath path;\r
+               path.SetFromWin(PathName);\r
+\r
+               if(!g_Git.m_CurrentDir.IsEmpty())\r
+                       SetCurrentDirectory(g_Git.m_CurrentDir);\r
                \r
+               GetMainFrame()->m_wndOutput.LoadHistory(path.GetGitPathString());\r
+       \r
                CString cmd;\r
-               CTGitPath path;\r
-               path.SetFromWin(lpszPathName);\r
+               \r
                cmd.Format(_T("git.exe blame -s -l %s -- \"%s\""),Rev,path.GetGitPathString());\r
                m_BlameData.Empty();\r
                if(g_Git.Run(cmd,&m_BlameData,CP_UTF8))\r
index 84ae291..aa50186 100644 (file)
@@ -31,12 +31,13 @@ bool ImportPatchCommand::Execute()
        CImportPatchDlg dlg;\r
 //     dlg.m_bIsTag=TRUE;\r
        CString cmd;\r
+       CString output;\r
        if(dlg.DoModal()==IDOK)\r
        {\r
                for(int i=0;i<dlg.m_PathList.GetCount();i++)\r
                {                       \r
                        cmd.Format(_T("git.exe am \"%s\""),dlg.m_PathList[i].GetGitPathString());\r
-                       CString output;\r
+                       \r
                        if(g_Git.Run(cmd,&output,CP_OEMCP))\r
                        {\r
                                CMessageBox::Show(NULL,output,_T("TortoiseGit"),MB_OK);\r
@@ -45,5 +46,6 @@ bool ImportPatchCommand::Execute()
                }\r
                return TRUE;\r
        }\r
+       CMessageBox::Show(NULL,CString(_T("Patch applied"))+output,_T("TortoiseGit"),MB_OK);\r
        return FALSE;\r
 }\r
index 06db57f..08ff2f7 100644 (file)
@@ -119,8 +119,8 @@ int CLogDataVector::ParserFromLog(CTGitPath *path ,int count ,int infomask)
        
        int start=4;
        int length;
-       int next =1;
-       while( next>0 )
+       int next =0;
+       while( next>=0 )
        {
                next=rev.ParserFromLog(log,next);
                this->push_back(rev);
index 490701e..2d100c7 100644 (file)
@@ -408,7 +408,7 @@ Click Yes to open setting dialog to setup MSysGit Path"),
                                        break;\r
                }\r
 \r
-               if(g_Git.m_CurrentDir)\r
+               if(!g_Git.m_CurrentDir.IsEmpty())\r
                        SetCurrentDirectory(g_Git.m_CurrentDir);\r
 \r
                cmd->SetParser(parser);\r