#include "CreateBranchTagDlg.h"\r
#include "Settings\SettingGitRemote.h"\r
#include "SinglePropSheetDlg.h"\r
+#include "ConfirmDelRefDlg.h"\r
\r
\r
// CBrowseRefsDlg dialog\r
CPoint clientPoint=point;\r
m_RefTreeCtrl.ScreenToClient(&clientPoint);\r
\r
- int selectedItemCount=m_ListRefLeafs.GetSelectedCount();\r
-\r
\r
std::vector<CShadowTree*> selectedTrees;\r
- selectedTrees.reserve(selectedItemCount);\r
+ selectedTrees.reserve(m_ListRefLeafs.GetSelectedCount());\r
POSITION pos=m_ListRefLeafs.GetFirstSelectedItemPosition();\r
while(pos)\r
{\r
CMenu popupMenu;\r
popupMenu.CreatePopupMenu();\r
\r
- if(selectedItemCount==1)\r
+ if(selectedTrees.size()==1)\r
{\r
popupMenu.AppendMenu(MF_STRING,eCmd_ViewLog,L"View log");\r
+ if(selectedTrees[0]->IsFrom(L"refs/heads"))\r
+ popupMenu.AppendMenu(MF_STRING,eCmd_DeleteBranch,L"Delete Branch");\r
+ else if(selectedTrees[0]->IsFrom(L"refs/tags"))\r
+ popupMenu.AppendMenu(MF_STRING,eCmd_DeleteTag,L"Delete Tag");\r
\r
// CShadowTree* pTree = (CShadowTree*)m_ListRefLeafs.GetItemData(pNMHDR->idFrom);\r
// if(pTree==NULL)\r
dlg.DoModal();\r
}\r
break;\r
+ case eCmd_DeleteBranch:\r
+ {\r
+ CConfirmDelRefDlg(selectedTrees[0]->GetRefName(),this).DoModal();\r
+ Refresh();\r
+ }\r
+ break;\r
+ case eCmd_DeleteTag:\r
+ {\r
+ CConfirmDelRefDlg(selectedTrees[0]->GetRefName(),this).DoModal();\r
+ Refresh();\r
+ }\r
+ break;\r
}\r
}\r
\r
CSinglePropSheetDlg(L"Git Remote Settings",new CSettingGitRemote(m_cmdPath),this).DoModal();\r
// CSettingGitRemote W_Remotes(m_cmdPath);\r
// W_Remotes.DoModal();\r
+ Refresh();\r
}\r
break;\r
case eCmd_CreateBranch:\r
eCmd_AddRemote,\r
eCmd_ManageRemotes,\r
eCmd_CreateBranch,\r
- eCmd_CreateTag\r
+ eCmd_CreateTag,\r
+ eCmd_DeleteBranch,\r
+ eCmd_DeleteTag\r
};\r
\r
// Dialog Data\r
--- /dev/null
+// ConfirmDelRefDlg.cpp : implementation file\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "TortoiseProc.h"\r
+#include "ConfirmDelRefDlg.h"\r
+#include "Git.h"\r
+\r
+\r
+// CConfirmDelRefDlg dialog\r
+\r
+IMPLEMENT_DYNAMIC(CConfirmDelRefDlg, CDialog)\r
+\r
+CConfirmDelRefDlg::CConfirmDelRefDlg(CString completeRefName, CWnd* pParent /*=NULL*/)\r
+: CDialog(CConfirmDelRefDlg::IDD, pParent),\r
+ m_completeRefName(completeRefName)\r
+{\r
+\r
+}\r
+\r
+CConfirmDelRefDlg::~CConfirmDelRefDlg()\r
+{\r
+}\r
+\r
+void CConfirmDelRefDlg::DoDataExchange(CDataExchange* pDX)\r
+{\r
+ CDialog::DoDataExchange(pDX);\r
+ DDX_Control(pDX, IDC_CHECK_FORCE, m_butForce);\r
+ DDX_Control(pDX, IDC_STATIC_MESSAGE, m_statMessage);\r
+ DDX_Control(pDX, IDOK, m_butOK);\r
+}\r
+\r
+\r
+BEGIN_MESSAGE_MAP(CConfirmDelRefDlg, CDialog)\r
+ ON_BN_CLICKED(IDC_CHECK_FORCE, OnBnForce)\r
+END_MESSAGE_MAP()\r
+\r
+\r
+// CConfirmDelRefDlg message handlers\r
+\r
+BOOL CConfirmDelRefDlg::OnInitDialog()\r
+{\r
+ CDialog::OnInitDialog();\r
+ CString csMessage;\r
+\r
+ csMessage=L"Are you sure you want to delete the ";\r
+ if(wcsncmp(m_completeRefName,L"refs/heads",10)==0)\r
+ {\r
+ SetWindowText(L"Confirm deletion of branch " + m_completeRefName);\r
+ csMessage += "branch '";\r
+ csMessage += m_completeRefName;\r
+ csMessage += "'?";\r
+\r
+ //Check if branch is fully merged in HEAD\r
+ CString branchHash = g_Git.GetHash(m_completeRefName);\r
+ CString commonAncestor;\r
+ CString cmd;\r
+ cmd.Format(L"git.exe merge-base HEAD %s",m_completeRefName);\r
+ g_Git.Run(cmd,&commonAncestor,CP_UTF8);\r
+\r
+ branchHash=branchHash.Left(40);\r
+ commonAncestor=commonAncestor.Left(40);\r
+ \r
+ if(commonAncestor != branchHash)\r
+ {\r
+ m_butForce.ShowWindow(SW_SHOW);\r
+ m_butOK.EnableWindow(FALSE);\r
+ 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
+ }\r
+ }\r
+ else if(wcsncmp(m_completeRefName,L"refs/tags",9)==0)\r
+ {\r
+ SetWindowText(L"Confirm deletion of tag " + m_completeRefName);\r
+ csMessage += "tag '";\r
+ csMessage += m_completeRefName;\r
+ csMessage += "'?";\r
+ }\r
+\r
+ m_statMessage.SetWindowText(csMessage);\r
+\r
+ return TRUE;\r
+}\r
+\r
+void CConfirmDelRefDlg::OnOK()\r
+{\r
+ bool bForce = m_butForce.GetCheck()!=0;\r
+\r
+ if(wcsncmp(m_completeRefName,L"refs/heads",10)==0)\r
+ {\r
+ CString branchToDelete = m_completeRefName.Mid(11);\r
+ CString cmd;\r
+ cmd.Format(L"git.exe branch -%c %s",bForce?L'D':L'd',branchToDelete);\r
+ CString resultDummy;\r
+ g_Git.Run(cmd,&resultDummy,CP_UTF8);\r
+ }\r
+ else if(wcsncmp(m_completeRefName,L"refs/tags",9)==0)\r
+ {\r
+ CString tagToDelete = m_completeRefName.Mid(10);\r
+ CString cmd;\r
+ cmd.Format(L"git.exe tag -d %s",tagToDelete);\r
+ CString resultDummy;\r
+ g_Git.Run(cmd,&resultDummy,CP_UTF8);\r
+ }\r
+\r
+ CDialog::OnOK();\r
+}\r
+\r
+void CConfirmDelRefDlg::OnBnForce()\r
+{\r
+ if(m_butForce.GetCheck()!=0)\r
+ m_butOK.EnableWindow(TRUE);\r
+ else if(wcsncmp(m_completeRefName,L"refs/heads",10)==0)\r
+ m_butOK.EnableWindow(FALSE);\r
+}
\ No newline at end of file
--- /dev/null
+#pragma once\r
+#include "afxwin.h"\r
+\r
+\r
+// CConfirmDelRefDlg dialog\r
+\r
+class CConfirmDelRefDlg : public CDialog\r
+{\r
+ DECLARE_DYNAMIC(CConfirmDelRefDlg)\r
+\r
+public:\r
+ CConfirmDelRefDlg(CString completeRefName, CWnd* pParent = NULL); // standard constructor\r
+ virtual ~CConfirmDelRefDlg();\r
+\r
+// Dialog Data\r
+ enum { IDD = IDD_DIALOG_DELETE_REF };\r
+\r
+protected:\r
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support\r
+\r
+ DECLARE_MESSAGE_MAP()\r
+public:\r
+ virtual BOOL OnInitDialog();\r
+\r
+private:\r
+ CString m_completeRefName;\r
+public:\r
+ CButton m_butForce;\r
+ CStatic m_statMessage;\r
+ CButton m_butOK;\r
+protected:\r
+ virtual void OnOK();\r
+ virtual void OnBnForce();\r
+};\r
<?xml version="1.0" encoding="Windows-1252"?>\r
<VisualStudioProject\r
ProjectType="Visual C++"\r
- Version="9.00"\r
+ Version="9,00"\r
Name="TortoiseProc"\r
ProjectGUID="{50797F06-39C5-4802-8E2B-7B7A4EF03214}"\r
RootNamespace="TortoiseProc"\r
/>\r
</Configuration>\r
<Configuration\r
- Name="Debug|x64"\r
- OutputDirectory="..\..\bin\Debug64\bin"\r
- IntermediateDirectory="..\..\obj\TortoiseProc\Debug64"\r
+ Name="Release|Win32"\r
+ OutputDirectory="..\..\bin\$(ConfigurationName)\bin"\r
+ IntermediateDirectory="..\..\obj\TortoiseProc\$(ConfigurationName)"\r
ConfigurationType="1"\r
UseOfMFC="2"\r
- UseOfATL="0"\r
CharacterSet="1"\r
+ WholeProgramOptimization="1"\r
>\r
<Tool\r
Name="VCPreBuildEventTool"\r
/>\r
<Tool\r
Name="VCMIDLTool"\r
- PreprocessorDefinitions="_DEBUG"\r
+ PreprocessorDefinitions="NDEBUG"\r
MkTypLibCompatible="false"\r
- TargetEnvironment="3"\r
/>\r
<Tool\r
Name="VCCLCompilerTool"\r
- Optimization="0"\r
AdditionalIncludeDirectories="..\TortoiseProc;..\Resources;"$InputDir";../../ext/ResizableLib;../Git;"../../ext/apr-util/include";"../../ext/apr-util/xml/expat/lib";../../ext/Subversion/subversion/include;../../ext/Subversion/subversion/libsvn_client;../../ext/apr/include;../../ext/boost;..\Utils;..\SVN;..\..\ext\ResizableLib;..\crashrpt;"..\..\ext\libintl\libintl3-win32\inc";..\..\ext\hunspell;..\..\ext\scintilla\include;..\Utils\TreePropSheet;..\Utils\ColourPickerXP;..\Utils\NewMenu;..\Utils\MiscUI;..\LogCache;"../../ext/cyrus-sasl/include";../../../common/openssl/inc32;.\RevisionGraph;..\TortoiseShell"\r
- PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG;SVN_DEBUG;ENABLE_NLS;THESAURUS"\r
- MinimalRebuild="true"\r
+ PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;THESAURUS"\r
+ StringPooling="true"\r
+ MinimalRebuild="false"\r
ExceptionHandling="2"\r
- RuntimeLibrary="3"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
TreatWChar_tAsBuiltInType="true"\r
ForceConformanceInForLoopScope="true"\r
RuntimeTypeInfo="true"\r
UsePrecompiledHeader="2"\r
WarningLevel="4"\r
DebugInformationFormat="3"\r
+ DisableSpecificWarnings="4996,4018"\r
/>\r
<Tool\r
Name="VCManagedResourceCompilerTool"\r
/>\r
<Tool\r
Name="VCResourceCompilerTool"\r
- PreprocessorDefinitions="_DEBUG"\r
+ PreprocessorDefinitions="NDEBUG"\r
Culture="1033"\r
AdditionalIncludeDirectories=""$(IntDir)";..\TortoiseShell"\r
/>\r
<Tool\r
Name="VCLinkerTool"\r
AdditionalDependencies="Crypt32.lib gdiplus.lib shfolder.lib shell32.lib comctl32.lib ws2_32.lib rpcrt4.lib shlwapi.lib wininet.lib version.lib Dnsapi.lib"\r
- LinkIncremental="2"\r
+ LinkIncremental="1"\r
+ AdditionalLibraryDirectories="../../ext/wingit"\r
IgnoreDefaultLibraryNames=""\r
DelayLoadDLLs="gdiplus.dll"\r
GenerateDebugInformation="true"\r
SubSystem="2"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="0"\r
RandomizedBaseAddress="1"\r
DataExecutionPrevention="0"\r
- TargetMachine="17"\r
+ TargetMachine="1"\r
+ Profile="true"\r
/>\r
<Tool\r
Name="VCALinkTool"\r
/>\r
</Configuration>\r
<Configuration\r
- Name="Release|Win32"\r
- OutputDirectory="..\..\bin\$(ConfigurationName)\bin"\r
- IntermediateDirectory="..\..\obj\TortoiseProc\$(ConfigurationName)"\r
+ Name="Debug|x64"\r
+ OutputDirectory="..\..\bin\Debug64\bin"\r
+ IntermediateDirectory="..\..\obj\TortoiseProc\Debug64"\r
ConfigurationType="1"\r
UseOfMFC="2"\r
+ UseOfATL="0"\r
CharacterSet="1"\r
- WholeProgramOptimization="1"\r
>\r
<Tool\r
Name="VCPreBuildEventTool"\r
/>\r
<Tool\r
Name="VCMIDLTool"\r
- PreprocessorDefinitions="NDEBUG"\r
+ PreprocessorDefinitions="_DEBUG"\r
MkTypLibCompatible="false"\r
+ TargetEnvironment="3"\r
/>\r
<Tool\r
Name="VCCLCompilerTool"\r
+ Optimization="0"\r
AdditionalIncludeDirectories="..\TortoiseProc;..\Resources;"$InputDir";../../ext/ResizableLib;../Git;"../../ext/apr-util/include";"../../ext/apr-util/xml/expat/lib";../../ext/Subversion/subversion/include;../../ext/Subversion/subversion/libsvn_client;../../ext/apr/include;../../ext/boost;..\Utils;..\SVN;..\..\ext\ResizableLib;..\crashrpt;"..\..\ext\libintl\libintl3-win32\inc";..\..\ext\hunspell;..\..\ext\scintilla\include;..\Utils\TreePropSheet;..\Utils\ColourPickerXP;..\Utils\NewMenu;..\Utils\MiscUI;..\LogCache;"../../ext/cyrus-sasl/include";../../../common/openssl/inc32;.\RevisionGraph;..\TortoiseShell"\r
- PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;THESAURUS"\r
- StringPooling="true"\r
- MinimalRebuild="false"\r
+ PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG;SVN_DEBUG;ENABLE_NLS;THESAURUS"\r
+ MinimalRebuild="true"\r
ExceptionHandling="2"\r
- RuntimeLibrary="2"\r
- BufferSecurityCheck="false"\r
+ RuntimeLibrary="3"\r
TreatWChar_tAsBuiltInType="true"\r
ForceConformanceInForLoopScope="true"\r
RuntimeTypeInfo="true"\r
UsePrecompiledHeader="2"\r
WarningLevel="4"\r
DebugInformationFormat="3"\r
- DisableSpecificWarnings="4996,4018"\r
/>\r
<Tool\r
Name="VCManagedResourceCompilerTool"\r
/>\r
<Tool\r
Name="VCResourceCompilerTool"\r
- PreprocessorDefinitions="NDEBUG"\r
+ PreprocessorDefinitions="_DEBUG"\r
Culture="1033"\r
AdditionalIncludeDirectories=""$(IntDir)";..\TortoiseShell"\r
/>\r
<Tool\r
Name="VCLinkerTool"\r
AdditionalDependencies="Crypt32.lib gdiplus.lib shfolder.lib shell32.lib comctl32.lib ws2_32.lib rpcrt4.lib shlwapi.lib wininet.lib version.lib Dnsapi.lib"\r
- LinkIncremental="1"\r
- AdditionalLibraryDirectories="../../ext/wingit"\r
+ LinkIncremental="2"\r
IgnoreDefaultLibraryNames=""\r
DelayLoadDLLs="gdiplus.dll"\r
GenerateDebugInformation="true"\r
SubSystem="2"\r
- OptimizeReferences="2"\r
- EnableCOMDATFolding="2"\r
- OptimizeForWindows98="0"\r
RandomizedBaseAddress="1"\r
DataExecutionPrevention="0"\r
- TargetMachine="1"\r
- Profile="true"\r
+ TargetMachine="17"\r
/>\r
<Tool\r
Name="VCALinkTool"\r
>\r
</File>\r
<File\r
+ RelativePath=".\ConfirmDelRefDlg.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\ConfirmDelRefDlg.h"\r
+ >\r
+ </File>\r
+ <File\r
RelativePath=".\LogFile.cpp"\r
>\r
</File>\r
>\r
</File>\r
<File\r
- RelativePath=".\copy.ico"\r
+ RelativePath="..\Resources\copy.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\copy.ico"\r
+ RelativePath=".\copy.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\explorer.ico"\r
+ RelativePath=".\explorer.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\explorer.ico"\r
+ RelativePath="..\Resources\explorer.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath=".\newfolder.ico"\r
+ RelativePath="..\Resources\newfolder.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\newfolder.ico"\r
+ RelativePath=".\newfolder.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath=".\refresh.ico"\r
+ RelativePath="..\Resources\refresh.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\refresh.ico"\r
+ RelativePath=".\refresh.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\save.ico"\r
+ RelativePath=".\save.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\save.ico"\r
+ RelativePath="..\Resources\save.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath=".\up.ico"\r
+ RelativePath="..\Resources\up.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\up.ico"\r
+ RelativePath=".\up.ico"\r
>\r
</File>\r
<File\r
/>\r
</FileConfiguration>\r
<FileConfiguration\r
- Name="Debug|x64"\r
+ Name="Release|Win32"\r
>\r
<Tool\r
Name="VCCLCompilerTool"\r
/>\r
</FileConfiguration>\r
<FileConfiguration\r
- Name="Release|Win32"\r
+ Name="Debug|x64"\r
>\r
<Tool\r
Name="VCCLCompilerTool"\r