OSDN Git Service

UDIFF and open is work at log change list dialog
authorFrank Li <lznuaa@gmail.com>
Mon, 29 Dec 2008 15:44:15 +0000 (23:44 +0800)
committerFrank Li <lznuaa@gmail.com>
Mon, 29 Dec 2008 15:44:15 +0000 (23:44 +0800)
src/Git/GitStatusListCtrl.cpp

index 6f30e61..a1d1cb0 100644 (file)
@@ -2654,19 +2654,50 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                        {\r
                        case IDSVNLC_OPEN:\r
                                {\r
-                                       int ret = (int)ShellExecute(this->m_hWnd, NULL, filepath->GetWinPath(), NULL, NULL, SW_SHOW);\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 += filepath->GetWinPath();\r
+                                               cmd += file;\r
                                                CAppUtils::LaunchApplication(cmd, NULL, false);\r
                                        }\r
                                }\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 += filepath->GetWinPathString() + _T(" ");\r
+                                       cmd += file + _T(" ");\r
                                        CAppUtils::LaunchApplication(cmd, NULL, false);\r
                                }\r
                                break;\r
@@ -2693,8 +2724,12 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                //              CAppUtils::StartShowUnifiedDiff(m_hWnd, entry->path, SVNRev::REV_BASE, entry->path, SVNRev::REV_WC);\r
                                //      else\r
                                //              CAppUtils::StartShowUnifiedDiff(m_hWnd, entry->path, SVNRev::REV_WC, entry->path, SVNRev::REV_HEAD);\r
-                                       CAppUtils::StartShowUnifiedDiff(m_hWnd,*filepath,GitRev::GetWorkingCopy(),\r
+                                       if(m_CurrentVersion.IsEmpty() || m_CurrentVersion == GIT_REV_ZERO)\r
+                                               CAppUtils::StartShowUnifiedDiff(m_hWnd,*filepath,GitRev::GetWorkingCopy(),\r
                                                                                                                        *filepath,GitRev::GetHead());\r
+                                       else\r
+                                               CAppUtils::StartShowUnifiedDiff(m_hWnd,*filepath,m_CurrentVersion,\r
+                                                                                                                       *filepath,m_CurrentVersion+_T("~1"));\r
                                }\r
                                break;\r
                        case IDSVNLC_ADD:\r