OSDN Git Service

Fixed Issue #138: "Format patch" in "Show log" dialog doesn't work
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / GitLogListAction.cpp
index a40b32e..20596cc 100644 (file)
@@ -107,7 +107,7 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
 \r
        theApp.DoWaitCursor(1);\r
        bool bOpenWith = false;\r
-       switch (cmd)\r
+       switch (cmd&0xFFFF)\r
                {\r
                        case ID_GNUDIFF1:\r
                        {\r
@@ -378,7 +378,7 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                case ID_CHERRY_PICK:\r
                        if(!g_Git.CheckCleanWorkTree())\r
                        {\r
-                               CMessageBox::Show(NULL,_T("Cherry Pick Require Clean Working Tree"),_T("TortoiseGit"),MB_OK);\r
+                               CMessageBox::Show(NULL,_T("Cherry Pick requires a clean working tree"),_T("TortoiseGit"),MB_OK);\r
                        \r
                        }else\r
                        {\r
@@ -402,7 +402,7 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                case ID_REBASE_TO_VERSION:\r
                        if(!g_Git.CheckCleanWorkTree())\r
                        {\r
-                               CMessageBox::Show(NULL,_T("Rebase Require Clean Working Tree"),_T("TortoiseGit"),MB_OK);\r
+                               CMessageBox::Show(NULL,_T("Rebase requires a clean working tree"),_T("TortoiseGit"),MB_OK);\r
                        \r
                        }else\r
                        {\r
@@ -424,7 +424,7 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                case ID_REFLOG_DEL:\r
                        {       \r
                                CString str;\r
-                               str.Format(_T("Warning: %s will be deleted. It can <ct=0x0000FF><b>NOT</b></ct> recovered,\r\n \r\n Are you sure delete these?"),pSelLogEntry->m_Ref);\r
+                               str.Format(_T("Warning: %s will be permanently deleted. It can <ct=0x0000FF><b>NOT</b></ct> be recovered!\r\n \r\n Are you sure you want to continue?"),pSelLogEntry->m_Ref);\r
                                if(CMessageBox::Show(NULL,str,_T("TortoiseGit"),MB_YESNO|MB_ICONWARNING) == IDYES)\r
                                {\r
                                        CString cmd,out;\r
@@ -444,6 +444,8 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                                cmd = CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe");\r
                                cmd += _T(" /command:formatpatch");\r
 \r
+                               cmd += _T(" /path:")+g_Git.m_CurrentDir+_T(" ");\r
+\r
                                GitRev * r1 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(FirstSelect));\r
                                GitRev * r2 = NULL;\r
                                if(select == 1)\r
@@ -469,6 +471,55 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                                CAppUtils::LaunchApplication(cmd,IDS_ERR_PROC,false);\r
                        }\r
                        break;\r
+               case ID_DELETE:\r
+                       {\r
+                               int index = cmd>>16;\r
+                               if( this->m_HashMap.find(pSelLogEntry->m_CommitHash) == m_HashMap.end() )\r
+                               {\r
+                                       CMessageBox::Show(NULL,IDS_ERROR_NOREF,IDS_APPNAME,MB_OK|MB_ICONERROR);\r
+                                       return;\r
+                               }\r
+                               if( index >= m_HashMap[pSelLogEntry->m_CommitHash].size())\r
+                               {\r
+                                       CMessageBox::Show(NULL,IDS_ERROR_INDEX,IDS_APPNAME,MB_OK|MB_ICONERROR);\r
+                                       return;                         \r
+                               }\r
+                               CString ref,msg;\r
+                               ref=m_HashMap[pSelLogEntry->m_CommitHash][index];\r
+                               \r
+                               msg=CString(_T("<ct=0x0000FF>Delete</ct> <b>"))+ref;\r
+                               msg+=_T("</b>\n\n Are you sure?");\r
+                               if( CMessageBox::Show(NULL,msg,_T("TortoiseGit"),MB_YESNO) == IDYES )\r
+                               {\r
+                                       CString shortname;\r
+                                       CString cmd;\r
+                                       if(this->GetShortName(ref,shortname,_T("refs/heads/")))\r
+                                       {\r
+                                               cmd.Format(_T("git.exe branch -D %s"),shortname);\r
+                                       }\r
+\r
+                                       if(this->GetShortName(ref,shortname,_T("refs/remotes/")))\r
+                                       {\r
+                                               cmd.Format(_T("git.exe branch -r -D %s"),shortname);\r
+                                       }\r
+\r
+                                       if(this->GetShortName(ref,shortname,_T("refs/tags/")))\r
+                                       {\r
+                                               cmd.Format(_T("git.exe tag -d %s"),shortname);\r
+                                       }\r
+\r
+                                       CString out;\r
+                                       if(g_Git.Run(cmd,&out,CP_UTF8))\r
+                                       {\r
+                                               CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+                                       }\r
+                                       this->ReloadHashMap();\r
+                                       CRect rect;\r
+                                       this->GetItemRect(FirstSelect,&rect,LVIR_BOUNDS);\r
+                                       this->InvalidateRect(rect);\r
+                               }\r
+                       }\r
+                       break;\r
                default:\r
                        //CMessageBox::Show(NULL,_T("Have not implemented"),_T("TortoiseGit"),MB_OK);\r
                        break;\r