, m_itemsCount(0)\r
, m_bSelectFilesForCommit(TRUE)\r
{\r
+ this->m_bCommitAmend=FALSE;\r
}\r
\r
CCommitDlg::~CCommitDlg()\r
}\r
err = FALSE;\r
\r
- this->UpdateData(TRUE);\r
- this->m_bCommitAmend=FALSE;\r
- this->UpdateData(FALSE);\r
+ //this->UpdateData(TRUE);\r
+ //this->m_bCommitAmend=FALSE;\r
+ //this->UpdateData(FALSE);\r
\r
return FALSE; // return TRUE unless you set the focus to a control\r
// EXCEPTION: OCX Property Pages should return FALSE\r
//#include "RepositoryInfo.h"\r
//#include "EditPropertiesDlg.h"\r
#include "FileDiffDlg.h"\r
+#include "CommitDlg.h"\r
\r
IMPLEMENT_DYNAMIC(CGitLogList, CHintListCtrl)\r
\r
case ID_REBASE_SKIP:\r
SetSelectedAction(CTGitPath::LOGACTIONS_REBASE_SKIP);\r
break;\r
+ case ID_COMBINE_COMMIT:\r
+ {\r
+ CString head;\r
+ CString headhash;\r
+ \r
+ head.Format(_T("HEAD~%d"),LastSelect);\r
+ CString hash=g_Git.GetHash(head);\r
+ hash=hash.Left(40);\r
+ \r
+ headhash=g_Git.GetHash(CString(_T("HEAD")));\r
+ headhash=headhash.Left(40); \r
+ \r
+ GitRev* pLastEntry = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect));\r
+ if(pLastEntry->m_CommitHash != hash)\r
+ {\r
+ CMessageBox::Show(NULL,_T("Only combine top continuous commit"),_T("TortoiseGit"),MB_OK);\r
+ }\r
+ if(!g_Git.CheckCleanWorkTree())\r
+ {\r
+ CMessageBox::Show(NULL,_T("Combine need clean work tree"),_T("TortoiseGit"),MB_OK);\r
+ break;\r
+ }\r
+ CString cmd,out;\r
+\r
+ cmd.Format(_T("git.exe reset --mixed %s"),hash);\r
+ if(g_Git.Run(cmd,&out,CP_UTF8))\r
+ {\r
+ CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+ }\r
+ CCommitDlg dlg;\r
+ for(int i=FirstSelect;i<=LastSelect;i++)\r
+ {\r
+ GitRev* pRev = reinterpret_cast<GitRev*>(m_arShownList.GetAt(i));\r
+ dlg.m_sLogMessage+=pRev->m_Subject+_T("\n")+pRev->m_Body;\r
+ dlg.m_sLogMessage+=_T("\n");\r
+ }\r
+ dlg.m_bWholeProject=true;\r
+ dlg.m_bSelectFilesForCommit = true;\r
+ dlg.m_bCommitAmend=true;\r
+ dlg.m_AmendStr=dlg.m_sLogMessage;\r
+\r
+ if (dlg.DoModal() == IDOK)\r
+ {\r
+ \r
+ }else\r
+ {\r
+ cmd.Format(_T("git.exe reset --hard %s"),headhash);\r
+ out.Empty();\r
+ if(g_Git.Run(cmd,&out,CP_UTF8))\r
+ {\r
+ CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+ }\r
+ }\r
+ Refresh();\r
+ }\r
+ break;\r
default:\r
//CMessageBox::Show(NULL,_T("Have not implemented"),_T("TortoiseGit"),MB_OK);\r
break;\r
if(m_ContextMenuMask&GetContextMenuBit(ID_COMPARETWO))\r
popup.AppendMenuIcon(ID_COMPARETWO, IDS_LOG_POPUP_COMPARETWO, IDI_DIFF);\r
}\r
+\r
if (GetSelectedCount() == 2)\r
{\r
//popup.AppendMenuIcon(ID_BLAMETWO, IDS_LOG_POPUP_BLAMEREVS, IDI_BLAME);\r
popup.AppendMenuIcon(ID_GNUDIFF2, IDS_LOG_POPUP_GNUDIFF, IDI_DIFF);\r
bAddSeparator = true;\r
}\r
+\r
+ if ( IsSelectionContinuous() )\r
+ {\r
+ if(m_ContextMenuMask&GetContextMenuBit(ID_COMBINE_COMMIT))\r
+ {\r
+ CString head;\r
+ head.Format(_T("HEAD~%d"),LastSelect);\r
+ CString hash=g_Git.GetHash(head);\r
+ hash=hash.Left(40);\r
+ GitRev* pLastEntry = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect));\r
+ if(pLastEntry->m_CommitHash == hash)\r
+ popup.AppendMenuIcon(ID_COMBINE_COMMIT,_T("Combine to one commit"),IDI_MERGE);\r
+ }\r
+ }\r
if (m_hasWC)\r
{\r
//popup.AppendMenuIcon(ID_REVERTREV, IDS_LOG_POPUP_REVERTREVS, IDI_REVERT);\r