OSDN Git Service

BrowseRefs: Added option to delete branch or tag.
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / ConfirmDelRefDlg.cpp
1 // ConfirmDelRefDlg.cpp : implementation file\r
2 //\r
3 \r
4 #include "stdafx.h"\r
5 #include "TortoiseProc.h"\r
6 #include "ConfirmDelRefDlg.h"\r
7 #include "Git.h"\r
8 \r
9 \r
10 // CConfirmDelRefDlg dialog\r
11 \r
12 IMPLEMENT_DYNAMIC(CConfirmDelRefDlg, CDialog)\r
13 \r
14 CConfirmDelRefDlg::CConfirmDelRefDlg(CString completeRefName, CWnd* pParent /*=NULL*/)\r
15 :       CDialog(CConfirmDelRefDlg::IDD, pParent),\r
16         m_completeRefName(completeRefName)\r
17 {\r
18 \r
19 }\r
20 \r
21 CConfirmDelRefDlg::~CConfirmDelRefDlg()\r
22 {\r
23 }\r
24 \r
25 void CConfirmDelRefDlg::DoDataExchange(CDataExchange* pDX)\r
26 {\r
27         CDialog::DoDataExchange(pDX);\r
28         DDX_Control(pDX, IDC_CHECK_FORCE, m_butForce);\r
29         DDX_Control(pDX, IDC_STATIC_MESSAGE, m_statMessage);\r
30         DDX_Control(pDX, IDOK, m_butOK);\r
31 }\r
32 \r
33 \r
34 BEGIN_MESSAGE_MAP(CConfirmDelRefDlg, CDialog)\r
35         ON_BN_CLICKED(IDC_CHECK_FORCE, OnBnForce)\r
36 END_MESSAGE_MAP()\r
37 \r
38 \r
39 // CConfirmDelRefDlg message handlers\r
40 \r
41 BOOL CConfirmDelRefDlg::OnInitDialog()\r
42 {\r
43         CDialog::OnInitDialog();\r
44         CString csMessage;\r
45 \r
46         csMessage=L"Are you sure you want to delete the ";\r
47         if(wcsncmp(m_completeRefName,L"refs/heads",10)==0)\r
48         {\r
49                 SetWindowText(L"Confirm deletion of branch " + m_completeRefName);\r
50                 csMessage += "branch '";\r
51                 csMessage += m_completeRefName;\r
52                 csMessage += "'?";\r
53 \r
54                 //Check if branch is fully merged in HEAD\r
55                 CString branchHash = g_Git.GetHash(m_completeRefName);\r
56                 CString commonAncestor;\r
57                 CString cmd;\r
58                 cmd.Format(L"git.exe merge-base HEAD %s",m_completeRefName);\r
59                 g_Git.Run(cmd,&commonAncestor,CP_UTF8);\r
60 \r
61                 branchHash=branchHash.Left(40);\r
62                 commonAncestor=commonAncestor.Left(40);\r
63                 \r
64                 if(commonAncestor != branchHash)\r
65                 {\r
66                         m_butForce.ShowWindow(SW_SHOW);\r
67                         m_butOK.EnableWindow(FALSE);\r
68                         csMessage += L"\r\n\r\nWarning: this branch is not fully merged into HEAD. If you realy want to delete this branch, check the force flag.";\r
69                 }\r
70         }\r
71         else if(wcsncmp(m_completeRefName,L"refs/tags",9)==0)\r
72         {\r
73                 SetWindowText(L"Confirm deletion of tag " + m_completeRefName);\r
74                 csMessage += "tag '";\r
75                 csMessage += m_completeRefName;\r
76                 csMessage += "'?";\r
77         }\r
78 \r
79         m_statMessage.SetWindowText(csMessage);\r
80 \r
81         return TRUE;\r
82 }\r
83 \r
84 void CConfirmDelRefDlg::OnOK()\r
85 {\r
86         bool bForce = m_butForce.GetCheck()!=0;\r
87 \r
88         if(wcsncmp(m_completeRefName,L"refs/heads",10)==0)\r
89         {\r
90                 CString branchToDelete = m_completeRefName.Mid(11);\r
91                 CString cmd;\r
92                 cmd.Format(L"git.exe branch -%c %s",bForce?L'D':L'd',branchToDelete);\r
93                 CString resultDummy;\r
94                 g_Git.Run(cmd,&resultDummy,CP_UTF8);\r
95         }\r
96         else if(wcsncmp(m_completeRefName,L"refs/tags",9)==0)\r
97         {\r
98                 CString tagToDelete = m_completeRefName.Mid(10);\r
99                 CString cmd;\r
100                 cmd.Format(L"git.exe tag -d %s",tagToDelete);\r
101                 CString resultDummy;\r
102                 g_Git.Run(cmd,&resultDummy,CP_UTF8);\r
103         }\r
104 \r
105         CDialog::OnOK();\r
106 }\r
107 \r
108 void CConfirmDelRefDlg::OnBnForce()\r
109 {\r
110         if(m_butForce.GetCheck()!=0)\r
111                 m_butOK.EnableWindow(TRUE);\r
112         else if(wcsncmp(m_completeRefName,L"refs/heads",10)==0)\r
113                 m_butOK.EnableWindow(FALSE);\r
114 }