OSDN Git Service

Fix add fail when file name include space at commit dialog.
[tortoisegit/TortoiseGitJp.git] / src / Git / GitStatusListCtrl.cpp
index ce9ee8d..330c775 100644 (file)
@@ -2528,10 +2528,10 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                        }\r
 \r
 \r
-#if 0                  \r
+               \r
                        if (GetSelectedCount() > 0)\r
                        {\r
-\r
+#if 0  \r
                                if ((!entry->IsFolder())&&(wcStatus >= git_wc_status_normal)\r
                                        &&(wcStatus!=git_wc_status_missing)&&(wcStatus!=git_wc_status_deleted)\r
                                        &&(wcStatus!=git_wc_status_added))\r
@@ -2566,9 +2566,11 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                        popup.AppendMenu(MF_SEPARATOR);\r
                                        popup.AppendMenuIcon(IDSVNLC_PROPERTIES, IDS_STATUSLIST_CONTEXT_PROPERTIES, IDI_PROPERTIES);\r
                                }\r
+#endif \r
                                popup.AppendMenu(MF_SEPARATOR);\r
                                popup.AppendMenuIcon(IDSVNLC_COPY, IDS_STATUSLIST_CONTEXT_COPY, IDI_COPYCLIP);\r
                                popup.AppendMenuIcon(IDSVNLC_COPYEXT, IDS_STATUSLIST_CONTEXT_COPYEXT, IDI_COPYCLIP);\r
+#if 0\r
                                if ((m_dwContextMenus & SVNSLC_POPCHANGELISTS)&&(XPorLater)\r
                                        &&(wcStatus != git_wc_status_unversioned)&&(wcStatus != git_wc_status_none))\r
                                {\r
@@ -2614,8 +2616,9 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                popup.AppendMenu(MF_POPUP|MF_STRING, (UINT_PTR)changelistSubMenu.GetSafeHmenu(), temp);\r
                                        }\r
                                }\r
-                       }\r
 #endif\r
+                       }\r
+\r
                        int cmd = popup.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_NONOTIFY, point.x, point.y, this, 0);\r
 \r
                        m_bBlock = TRUE;\r
@@ -2624,54 +2627,14 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                        bool bForce = false;\r
                        switch (cmd)\r
                        {\r
+                       case IDSVNLC_VIEWREV:\r
+                               OpenFile(filepath,NOTEPAD2);\r
+                               break;\r
                        case IDSVNLC_OPEN:\r
-                               {\r
-                                       CString file;\r
-                                       if(this->m_CurrentVersion.IsEmpty() || m_CurrentVersion == GIT_REV_ZERO)\r
-                                       {\r
-                                               file= filepath->GetWinPath();\r
-                                       }else\r
-                                       {\r
-                                               CString temppath;\r
-                                               GetTempPath(temppath);\r
-                                               file.Format(_T("%s%s_%s%s"),\r
-                                                       temppath,                                               \r
-                                                       filepath->GetBaseFilename(),\r
-                                                       m_CurrentVersion.Left(6),\r
-                                                       filepath->GetFileExtension());\r
-\r
-                                       }\r
-                                       int ret = (int)ShellExecute(this->m_hWnd, NULL,file, NULL, NULL, SW_SHOW);\r
-                                       if (ret <= HINSTANCE_ERROR)\r
-                                       {\r
-                                               CString cmd = _T("RUNDLL32 Shell32,OpenAs_RunDLL ");\r
-                                               cmd += file;\r
-                                               CAppUtils::LaunchApplication(cmd, NULL, false);\r
-                                       }\r
-                               }\r
+                               OpenFile(filepath,OPEN);\r
                                break;\r
                        case IDSVNLC_OPENWITH:\r
-                               {\r
-                                       CString file;\r
-                                       if(m_CurrentVersion.IsEmpty() || m_CurrentVersion == GIT_REV_ZERO)\r
-                                       {\r
-                                               file= filepath->GetWinPath();\r
-                                       }else\r
-                                       {\r
-                                               CString temppath;\r
-                                               GetTempPath(temppath);\r
-                                               file.Format(_T("%s%s_%s%s"),\r
-                                                       temppath,                                               \r
-                                                       filepath->GetBaseFilename(),\r
-                                                       m_CurrentVersion.Left(6),\r
-                                                       filepath->GetFileExtension());\r
-\r
-                                       }\r
-\r
-                                       CString cmd = _T("RUNDLL32 Shell32,OpenAs_RunDLL ");\r
-                                       cmd += file + _T(" ");\r
-                                       CAppUtils::LaunchApplication(cmd, NULL, false);\r
-                               }\r
+                               OpenFile(filepath,OPEN_WITH);\r
                                break;\r
                        case IDSVNLC_EXPLORE:\r
                                {\r
@@ -2729,9 +2692,9 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                if(path == NULL)\r
                                                        continue;\r
                                                CString cmd;\r
-                                               cmd.Format(_T("git.exe add %s"),path->GetGitPathString());\r
+                                               cmd.Format(_T("git.exe add \"%s\""),path->GetGitPathString());\r
                                                CString output;\r
-                                               if(!g_Git.Run(cmd,&output,CP_OEMCP))\r
+                                               if(!g_Git.Run(cmd,&output,CP_ACP))\r
                                                {\r
                                                        path->m_Action = CTGitPath::LOGACTIONS_ADDED;\r
                                                        SetEntryCheck(path,index,true);\r
@@ -2788,7 +2751,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                {\r
                                                        CString cmd,output;\r
                                                        cmd.Format(_T("git.exe add \"%s\""),fentry->GetGitPathString());\r
-                                                       if(g_Git.Run(cmd,&output,CP_OEMCP))\r
+                                                       if(g_Git.Run(cmd,&output,CP_ACP))\r
                                                        {\r
                                                                CMessageBox::Show(m_hWnd, output, _T("TortoiseSVN"), MB_ICONERROR);\r
                                                        }else\r
@@ -4830,7 +4793,7 @@ BOOL CGitStatusListCtrl::PreTranslateMessage(MSG* pMsg)
 \r
 bool CGitStatusListCtrl::CopySelectedEntriesToClipboard(DWORD dwCols)\r
 {\r
-#if 0\r
+\r
        static CString ponly(MAKEINTRESOURCE(IDS_STATUSLIST_PROPONLY));\r
        static HINSTANCE hResourceHandle(AfxGetResourceHandle());\r
        WORD langID = (WORD)CRegStdWORD(_T("Software\\TortoiseGit\\LanguageID"), GetUserDefaultLangID());\r
@@ -4861,18 +4824,23 @@ bool CGitStatusListCtrl::CopySelectedEntriesToClipboard(DWORD dwCols)
        int index;\r
        while ((index = GetNextSelectedItem(pos)) >= 0)\r
        {\r
-               FileEntry * entry = GetListEntry(index);\r
-               sClipboard += entry->GetDisplayName();\r
+               CTGitPath * entry = (CTGitPath*)GetItemData(index);\r
+               if(entry == NULL)\r
+                       continue;\r
+\r
+               sClipboard += entry->GetWinPathString();\r
                if (selection & SVNSLC_COLFILENAME)\r
                {\r
-                       sClipboard += _T("\t")+entry->path.GetFileOrDirectoryName();\r
+                       sClipboard += _T("\t")+entry->GetFileOrDirectoryName();\r
                }\r
                if (selection & SVNSLC_COLEXT)\r
                {\r
-                       sClipboard += _T("\t")+entry->path.GetFileExtension();\r
+                       sClipboard += _T("\t")+entry->GetFileExtension();\r
                }\r
+       \r
                if (selection & SVNSLC_COLSTATUS)\r
                {\r
+#if 0\r
                        if (entry->isNested)\r
                        {\r
                                temp.LoadString(IDS_STATUSLIST_NESTED);\r
@@ -4891,10 +4859,13 @@ bool CGitStatusListCtrl::CopySelectedEntriesToClipboard(DWORD dwCols)
                                        _tcscat_s(buf, 100, ponly);\r
                                temp = buf;\r
                        }\r
-                       sClipboard += _T("\t")+temp;\r
+#endif\r
+                       sClipboard += _T("\t")+entry->GetActionName();\r
                }\r
+#if 0\r
                if (selection & SVNSLC_COLTEXTSTATUS)\r
                {\r
+\r
                        if (entry->isNested)\r
                        {\r
                                temp.LoadString(IDS_STATUSLIST_NESTED);\r
@@ -4910,6 +4881,8 @@ bool CGitStatusListCtrl::CopySelectedEntriesToClipboard(DWORD dwCols)
                        }\r
                        sClipboard += _T("\t")+temp;\r
                }\r
+#endif\r
+#if 0\r
                if (selection & SVNSLC_COLREMOTESTATUS)\r
                {\r
                        if (entry->isNested)\r
@@ -5032,6 +5005,7 @@ bool CGitStatusListCtrl::CopySelectedEntriesToClipboard(DWORD dwCols)
                                temp.Empty();\r
                        sClipboard += _T("\t")+temp;\r
                }\r
+\r
                if (selection & SVNSLC_COLDATE)\r
                {\r
                        TCHAR datebuf[SVN_DATE_BUFFER];\r
@@ -5063,12 +5037,21 @@ bool CGitStatusListCtrl::CopySelectedEntriesToClipboard(DWORD dwCols)
                 sClipboard += _T("\t") + value;\r
             }\r
         }\r
+#endif\r
+               if (selection & SVNSLC_COLADD)\r
+               {\r
+                       sClipboard += _T("\t")+entry->m_StatAdd;\r
+               }\r
+               if (selection & SVNSLC_COLDEL)\r
+               {\r
+                       sClipboard += _T("\t")+entry->m_StatDel;\r
+               }\r
 \r
                sClipboard += _T("\r\n");\r
        }\r
 \r
        return CStringUtils::WriteAsciiStringToClipboard(sClipboard);\r
-#endif\r
+\r
        return TRUE;\r
 \r
 }\r
@@ -5602,4 +5585,57 @@ int CGitStatusListCtrl::RevertSelectedItemToVersion()
 \r
        out.Format(_T("%d files revert to %s"),count,m_CurrentVersion.Left(6));\r
        CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+}\r
+\r
+void CGitStatusListCtrl::OpenFile(CTGitPath*filepath,int mode)\r
+{\r
+       CString file;\r
+       if(this->m_CurrentVersion.IsEmpty() || m_CurrentVersion == GIT_REV_ZERO)\r
+       {\r
+               file= filepath->GetWinPath();\r
+       }else\r
+       {\r
+               CString temppath;\r
+               GetTempPath(temppath);\r
+               file.Format(_T("%s%s_%s%s"),\r
+                                       temppath,                                               \r
+                                       filepath->GetBaseFilename(),\r
+                                       m_CurrentVersion.Left(6),\r
+                                       filepath->GetFileExtension());\r
+               CString cmd,out;\r
+               cmd.Format(_T("git.exe cat-file -p %s:\"%s\""),m_CurrentVersion,filepath->GetGitPathString());\r
+               if(g_Git.RunLogFile(cmd,file))\r
+               {\r
+                       CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+                       return;\r
+               }\r
+\r
+       }\r
+       if(mode == NOTEPAD2)\r
+       {\r
+               CString sCmd;\r
+               sCmd.Format(_T("\"%s\" \"%s\""),\r
+                       (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("notepad2.exe")), file);\r
+\r
+               CAppUtils::LaunchApplication(sCmd, NULL, false);\r
+               return ;\r
+       }\r
+       int ret = HINSTANCE_ERROR;\r
+\r
+       if(mode == OPEN )\r
+       {\r
+               ret = (int)ShellExecute(this->m_hWnd, NULL,file, NULL, NULL, SW_SHOW);\r
+       \r
+               if (ret > HINSTANCE_ERROR)\r
+               {\r
+                       return;\r
+               }\r
+       }\r
+\r
+       {\r
+               CString cmd = _T("RUNDLL32 Shell32,OpenAs_RunDLL ");\r
+               cmd += file;\r
+               CAppUtils::LaunchApplication(cmd, NULL, false);\r
+       }\r
+       \r
 }
\ No newline at end of file