DDX_Check(pDX, IDC_KEEPLOCK, m_bKeepLocks);\r
DDX_Control(pDX, IDC_SPLITTER, m_wndSplitter);\r
DDX_Check(pDX, IDC_KEEPLISTS, m_bKeepChangeList);\r
+ DDX_Check(pDX,IDC_COMMIT_AMEND,m_bCommitAmend);\r
}\r
\r
BEGIN_MESSAGE_MAP(CCommitDlg, CResizableStandAloneDialog)\r
ON_STN_CLICKED(IDC_EXTERNALWARNING, &CCommitDlg::OnStnClickedExternalwarning)\r
ON_BN_CLICKED(IDC_SIGNOFF, &CCommitDlg::OnBnClickedSignOff)\r
ON_STN_CLICKED(IDC_COMMITLABEL, &CCommitDlg::OnStnClickedCommitlabel)\r
+ ON_BN_CLICKED(IDC_COMMIT_AMEND, &CCommitDlg::OnBnClickedCommitAmend)\r
END_MESSAGE_MAP()\r
\r
BOOL CCommitDlg::OnInitDialog()\r
m_ListCtrl.EnableFileDrop();\r
m_ListCtrl.SetBackgroundImage(IDI_COMMIT_BKG);\r
\r
+ //this->DialogEnableWindow(IDC_COMMIT_AMEND,FALSE);\r
// m_ProjectProperties.ReadPropsPathList(m_pathList);\r
m_cLogMessage.Init(m_ProjectProperties);\r
m_cLogMessage.SetFont((CString)CRegString(_T("Software\\TortoiseGit\\LogFontName"), _T("Courier New")), (DWORD)CRegDWORD(_T("Software\\TortoiseGit\\LogFontSize"), 8));\r
\r
m_tooltips.Create(this);\r
m_tooltips.AddTool(IDC_EXTERNALWARNING, IDS_COMMITDLG_EXTERNALS);\r
+ m_tooltips.AddTool(IDC_COMMIT_AMEND,IDS_COMMIT_AMEND_TT);\r
// m_tooltips.AddTool(IDC_HISTORY, IDS_COMMITDLG_HISTORY_TT);\r
\r
m_SelectAll.SetCheck(BST_INDETERMINATE);\r
AddAnchor(IDOK, BOTTOM_RIGHT);\r
AddAnchor(IDCANCEL, BOTTOM_RIGHT);\r
AddAnchor(IDHELP, BOTTOM_RIGHT);\r
+ AddAnchor(IDC_COMMIT_AMEND,TOP_LEFT);\r
\r
if (hWndExplorer)\r
CenterWindow(CWnd::FromHandle(hWndExplorer));\r
}\r
err = FALSE;\r
\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
InterlockedExchange(&m_bThreadRunning, FALSE);\r
}\r
}\r
+ this->UpdateData();\r
+\r
CString id;\r
GetDlgItemText(IDC_BUGID, id);\r
if (!m_ProjectProperties.CheckBugID(id))\r
return;\r
}\r
m_sLogMessage = m_cLogMessage.GetText();\r
+ if ( m_sLogMessage.IsEmpty() )\r
+ {\r
+ // no message entered, go round again\r
+ CMessageBox::Show(this->m_hWnd, IDS_COMMITDLG_NOMESSAGE, IDS_APPNAME, MB_OK | MB_ICONERROR);\r
+ return;\r
+ }\r
if ((m_ProjectProperties.bWarnIfNoIssue) && (id.IsEmpty() && !m_ProjectProperties.HasBugID(m_sLogMessage)))\r
{\r
if (CMessageBox::Show(this->m_hWnd, IDS_COMMITDLG_NOISSUEWARNING, IDS_APPNAME, MB_YESNO | MB_ICONWARNING)!=IDYES)\r
CDWordArray arDeleted;\r
//first add all the unversioned files the user selected\r
//and check if all versioned files are selected\r
- int nUnchecked = 0;\r
int nchecked = 0;\r
m_bRecursive = true;\r
int nListItems = m_ListCtrl.GetItemCount();\r
\r
CTGitPathList itemsToAdd;\r
CTGitPathList itemsToRemove;\r
- bool bCheckedInExternal = false;\r
- bool bHasConflicted = false;\r
//std::set<CString> checkedLists;\r
//std::set<CString> uncheckedLists;\r
\r
bCheckedInExternal = true;\r
}\r
#endif\r
- cmd.Format(_T("git.exe update-index -- \"%s\""),entry->GetGitPathString());\r
- g_Git.Run(cmd,&out);\r
+ if( entry->m_Action & CTGitPath::LOGACTIONS_ADDED)\r
+ cmd.Format(_T("git.exe update-index --add -f -- \"%s\""),entry->GetGitPathString());\r
+ else if ( entry->m_Action & CTGitPath::LOGACTIONS_DELETED)\r
+ cmd.Format(_T("git.exe update-index --remove -- \"%s\""),entry->GetGitPathString());\r
+ else\r
+ cmd.Format(_T("git.exe update-index -- \"%s\""),entry->GetGitPathString());\r
+\r
+ g_Git.Run(cmd,&out,CP_OEMCP);\r
nchecked++;\r
//checkedLists.insert(entry->GetGitPathString());\r
// checkedfiles += _T("\"")+entry->GetGitPathString()+_T("\" ");\r
if(entry->m_Action & CTGitPath::LOGACTIONS_ADDED)\r
{ //To init git repository, there are not HEAD, so we can use git reset command\r
cmd.Format(_T("git.exe rm --cache -- \"%s\""),entry->GetGitPathString());\r
- g_Git.Run(cmd,&out); \r
+ g_Git.Run(cmd,&out,CP_OEMCP); \r
}\r
else\r
{\r
cmd.Format(_T("git.exe reset -- %s"),entry->GetGitPathString());\r
- g_Git.Run(cmd,&out);\r
+ g_Git.Run(cmd,&out,CP_OEMCP);\r
}\r
\r
// uncheckedfiles += _T("\"")+entry->GetGitPathString()+_T("\" ");\r
//}\r
\r
//if(checkedfiles.GetLength()>0)\r
- if(nchecked)\r
+ if(nchecked||m_bCommitAmend)\r
{\r
// cmd.Format(_T("git.exe update-index -- %s"),checkedfiles);\r
// g_Git.Run(cmd,&out);\r
file.Close();\r
\r
out =_T("");\r
- cmd.Format(_T("git.exe commit -F \"%s\""), tempfile);\r
- g_Git.Run(cmd,&out);\r
+ CString amend;\r
+ if(this->m_bCommitAmend)\r
+ {\r
+ amend=_T("--amend");\r
+ }\r
+ cmd.Format(_T("git.exe commit %s -F \"%s\""),amend, tempfile);\r
+ g_Git.Run(cmd,&out,CP_OEMCP);\r
\r
CFile::Remove(tempfile);\r
\r
}\r
#endif\r
// Initialise the list control with the status of the files/folders below us\r
+ m_ListCtrl.Clear();\r
BOOL success = m_ListCtrl.GetStatus(m_pathList);\r
\r
//m_ListCtrl.UpdateFileList(git_revnum_t(GIT_REV_ZERO));\r
m_ListCtrl.Show(dwShow, m_checkedPathList);\r
else\r
{\r
- DWORD dwCheck = m_bSelectFilesForCommit ?SVNSLC_SHOWDIRECTS|SVNSLC_SHOWMODIFIED|SVNSLC_SHOWADDED|SVNSLC_SHOWREMOVED\r
- |SVNSLC_SHOWREPLACED|SVNSLC_SHOWMERGED|SVNSLC_SHOWLOCKS : 0;\r
+ DWORD dwCheck = m_bSelectFilesForCommit ? dwShow : 0;\r
m_ListCtrl.Show(dwShow, dwCheck);\r
m_bSelectFilesForCommit = true;\r
}\r
}\r
if ((m_ListCtrl.GetItemCount()==0)&&(m_ListCtrl.HasUnversionedItems()))\r
{\r
-// if (CMessageBox::Show(m_hWnd, IDS_COMMITDLG_NOTHINGTOCOMMITUNVERSIONED, IDS_APPNAME, MB_ICONINFORMATION | MB_YESNO)==IDYES)\r
-// {\r
-// m_bShowUnversioned = TRUE;\r
-// GetDlgItem(IDC_SHOWUNVERSIONED)->SendMessage(BM_SETCHECK, BST_CHECKED);\r
-// DWORD dwShow = SVNSLC_SHOWVERSIONEDBUTNORMALANDEXTERNALSFROMDIFFERENTREPOS | SVNSLC_SHOWUNVERSIONED | SVNSLC_SHOWLOCKS;\r
-// m_ListCtrl.Show(dwShow);\r
-// }\r
+ if (CMessageBox::Show(m_hWnd, IDS_COMMITDLG_NOTHINGTOCOMMITUNVERSIONED, IDS_APPNAME, MB_ICONINFORMATION | MB_YESNO)==IDYES)\r
+ {\r
+ m_bShowUnversioned = TRUE;\r
+ GetDlgItem(IDC_SHOWUNVERSIONED)->SendMessage(BM_SETCHECK, BST_CHECKED);\r
+ DWORD dwShow = (DWORD)(SVNSLC_SHOWVERSIONEDBUTNORMALANDEXTERNALSFROMDIFFERENTREPOS | SVNSLC_SHOWUNVERSIONED | SVNSLC_SHOWLOCKS);\r
+ m_ListCtrl.UpdateFileList(CGitStatusListCtrl::FILELIST_UNVER);\r
+ m_ListCtrl.Show(dwShow);\r
+ }\r
}\r
\r
-// CTGitPath commonDir = m_ListCtrl.GetCommonDirectory(false);\r
-// SetWindowText(m_sWindowTitle + _T(" - ") + commonDir.GetWinPathString());\r
+ CTGitPath commonDir = m_ListCtrl.GetCommonDirectory(false);\r
+ SetWindowText(m_sWindowTitle + _T(" - ") + commonDir.GetWinPathString());\r
\r
m_autolist.clear();\r
// we don't have to block the commit dialog while we fetch the\r
return 0;\r
}\r
\r
-LRESULT CCommitDlg::OnFileDropped(WPARAM, LPARAM lParam)\r
+LRESULT CCommitDlg::OnFileDropped(WPARAM, LPARAM /*lParam*/)\r
{\r
#if 0\r
BringWindowToTop();\r
mPopup.AppendMenu(MF_STRING | MF_ENABLED, m_nPopupPasteListCmd, sMenuItemText);\r
}\r
\r
-bool CCommitDlg::HandleMenuItemClick(int cmd, CSciEdit * pSciEdit)\r
+bool CCommitDlg::HandleMenuItemClick(int /*cmd*/, CSciEdit * /*pSciEdit*/)\r
{\r
#if 0\r
if (m_bBlock)\r
RemoveAnchor(IDC_LOGMESSAGE);\r
RemoveAnchor(IDC_SPLITTER);\r
RemoveAnchor(IDC_SIGNOFF);\r
+ RemoveAnchor(IDC_COMMIT_AMEND);\r
RemoveAnchor(IDC_LISTGROUP);\r
RemoveAnchor(IDC_FILELIST);\r
CSplitterControl::ChangeHeight(&m_cLogMessage, delta, CW_TOPALIGN);\r
CSplitterControl::ChangeHeight(&m_ListCtrl, -delta, CW_BOTTOMALIGN);\r
CSplitterControl::ChangeHeight(GetDlgItem(IDC_LISTGROUP), -delta, CW_BOTTOMALIGN);\r
CSplitterControl::ChangePos(GetDlgItem(IDC_SIGNOFF),0,delta);\r
+ CSplitterControl::ChangePos(GetDlgItem(IDC_COMMIT_AMEND),0,delta);\r
AddAnchor(IDC_MESSAGEGROUP, TOP_LEFT, TOP_RIGHT);\r
AddAnchor(IDC_LOGMESSAGE, TOP_LEFT, TOP_RIGHT);\r
AddAnchor(IDC_SPLITTER, TOP_LEFT, TOP_RIGHT);\r
AddAnchor(IDC_LISTGROUP, TOP_LEFT, BOTTOM_RIGHT);\r
AddAnchor(IDC_FILELIST, TOP_LEFT, BOTTOM_RIGHT);\r
AddAnchor(IDC_SIGNOFF,TOP_RIGHT);\r
+ AddAnchor(IDC_COMMIT_AMEND,TOP_LEFT);\r
ArrangeLayout();\r
// adjust the minimum size of the dialog to prevent the resizing from\r
// moving the list control too far down.\r
{\r
// TODO: Add your control notification handler code here\r
}\r
+\r
+void CCommitDlg::OnBnClickedCommitAmend()\r
+{\r
+ // TODO: Add your control notification handler code here\r
+ this->UpdateData();\r
+ if(this->m_bCommitAmend && this->m_AmendStr.IsEmpty())\r
+ {\r
+ GitRev rev;\r
+ BYTE_VECTOR vector;\r
+ CString head(_T("HEAD"));\r
+ g_Git.GetLog(vector,head,NULL,1);\r
+ rev.ParserFromLog(vector);\r
+ m_AmendStr=rev.m_Subject+_T("\n\n")+rev.m_Body;\r
+ }\r
+\r
+ if(this->m_bCommitAmend)\r
+ {\r
+ this->m_NoAmendStr=this->m_cLogMessage.GetText();\r
+ m_cLogMessage.SetText(m_AmendStr);\r
+\r
+ }else\r
+ {\r
+ this->m_AmendStr=this->m_cLogMessage.GetText();\r
+ m_cLogMessage.SetText(m_NoAmendStr);\r
+\r
+ }\r
+\r
+}\r