#include "Hooks.h"\r
#include "CommonResource.h"\r
#include "UnicodeUtils.h"\r
+#include "ProgressDlg.h"\r
+#include "ShellUpdater.h"\r
\r
#ifdef _DEBUG\r
#define new DEBUG_NEW\r
, m_itemsCount(0)\r
, m_bSelectFilesForCommit(TRUE)\r
{\r
+ this->m_bCommitAmend=FALSE;\r
}\r
\r
CCommitDlg::~CCommitDlg()\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
+ ON_BN_CLICKED(IDC_WHOLE_PROJECT, &CCommitDlg::OnBnClickedWholeProject)\r
END_MESSAGE_MAP()\r
\r
BOOL CCommitDlg::OnInitDialog()\r
\r
UpdateData(FALSE);\r
\r
- m_ListCtrl.Init(SVNSLC_COLEXT | SVNSLC_COLSTATUS , _T("CommitDlg"));\r
+ m_ListCtrl.Init(SVNSLC_COLEXT | SVNSLC_COLSTATUS | SVNSLC_COLADD |SVNSLC_COLDEL, _T("CommitDlg"));\r
m_ListCtrl.SetSelectButton(&m_SelectAll);\r
m_ListCtrl.SetStatLabel(GetDlgItem(IDC_STATISTICS));\r
m_ListCtrl.SetCancelBool(&m_bCancelled);\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
else\r
cmd.Format(_T("git.exe update-index -- \"%s\""),entry->GetGitPathString());\r
\r
- g_Git.Run(cmd,&out,CP_OEMCP);\r
+ g_Git.Run(cmd,&out,CP_ACP);\r
nchecked++;\r
+\r
//checkedLists.insert(entry->GetGitPathString());\r
// checkedfiles += _T("\"")+entry->GetGitPathString()+_T("\" ");\r
}\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,CP_OEMCP); \r
+ g_Git.Run(cmd,&out,CP_ACP); \r
}\r
- else\r
+ else if(!( entry->m_Action & CTGitPath::LOGACTIONS_UNVER ) )\r
{\r
- cmd.Format(_T("git.exe reset -- %s"),entry->GetGitPathString());\r
- g_Git.Run(cmd,&out,CP_OEMCP);\r
+ cmd.Format(_T("git.exe reset -- \"%s\""),entry->GetGitPathString());\r
+ g_Git.Run(cmd,&out,CP_ACP);\r
}\r
\r
// uncheckedfiles += _T("\"")+entry->GetGitPathString()+_T("\" ");\r
}\r
#endif\r
}\r
+\r
+ CShellUpdater::Instance().AddPathForUpdate(*entry);\r
}\r
\r
//if(uncheckedfiles.GetLength()>0)\r
// g_Git.Run(cmd,&out);\r
//}\r
\r
+ BOOL bCloseCommitDlg=true;\r
//if(checkedfiles.GetLength()>0)\r
if(nchecked||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
+ CProgressDlg progress;\r
+ progress.m_GitCmd=cmd;\r
+ progress.m_bShowCommand = FALSE; // don't show the commit command\r
+ progress.m_PreText = out; // show any output already generated in log window\r
+ progress.DoModal();\r
+ \r
+ if(progress.m_GitStatus)\r
+ {\r
+ bCloseCommitDlg = false;\r
+ this->Refresh();\r
+ }\r
\r
- CMessageBox::Show(this->m_hWnd, out, _T("Commit Finish"), MB_OK | MB_ICONINFORMATION);\r
+ CFile::Remove(tempfile);\r
}else\r
CMessageBox::Show(this->m_hWnd, _T("Nothing Commit"), _T("Commit Finish"), MB_OK | MB_ICONINFORMATION);\r
#if 0\r
\r
SaveSplitterPos();\r
\r
- CResizableStandAloneDialog::OnOK();\r
+ if( bCloseCommitDlg )\r
+ CResizableStandAloneDialog::OnOK();\r
+\r
+ CShellUpdater::Instance().Flush();\r
}\r
\r
void CCommitDlg::SaveSplitterPos()\r
\r
DialogEnableWindow(IDOK, false);\r
DialogEnableWindow(IDC_SHOWUNVERSIONED, false);\r
+ DialogEnableWindow(IDC_WHOLE_PROJECT, false);\r
DialogEnableWindow(IDC_SELECTALL, false);\r
GetDlgItem(IDC_EXTERNALWARNING)->ShowWindow(SW_HIDE);\r
DialogEnableWindow(IDC_EXTERNALWARNING, false);\r
// read the list of recent log entries before querying the WC for status\r
// -> the user may select one and modify / update it while we are crawling the WC\r
-#if 0\r
+\r
if (m_History.GetCount()==0)\r
{\r
CString reg;\r
- if (m_ListCtrl.m_sUUID.IsEmpty() && m_pathList.GetCount()>0)\r
- {\r
- Git Git;\r
- reg.Format(_T("Software\\TortoiseGit\\History\\commit%s"), (LPCTSTR)Git.GetUUIDFromPath(m_pathList[0]));\r
- }\r
- else\r
- reg.Format(_T("Software\\TortoiseGit\\History\\commit%s"), (LPCTSTR)m_ListCtrl.m_sUUID);\r
+ reg.Format(_T("Software\\TortoiseGit\\History\\commit%s"), (LPCTSTR)m_ListCtrl.m_sUUID);\r
+ reg.Replace(_T(':'),_T('_'));\r
m_History.Load(reg, _T("logmsgs"));\r
}\r
-#endif\r
+\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
+ BOOL success;\r
+ if(m_bWholeProject)\r
+ success=m_ListCtrl.GetStatus(NULL);\r
+ else\r
+ success=m_ListCtrl.GetStatus(&m_pathList);\r
\r
//m_ListCtrl.UpdateFileList(git_revnum_t(GIT_REV_ZERO));\r
if(this->m_bShowUnversioned)\r
}\r
\r
CTGitPath commonDir = m_ListCtrl.GetCommonDirectory(false);\r
- SetWindowText(m_sWindowTitle + _T(" - ") + commonDir.GetWinPathString());\r
+\r
+ if(this->m_bWholeProject) \r
+ SetWindowText(m_sWindowTitle + _T(" - ") + CString(_T("Whole Project")));\r
+ else\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
if (m_bRunThread)\r
{\r
DialogEnableWindow(IDC_SHOWUNVERSIONED, true);\r
+ DialogEnableWindow(IDC_WHOLE_PROJECT, true);\r
DialogEnableWindow(IDC_SELECTALL, true);\r
if (m_ListCtrl.HasChangeLists())\r
DialogEnableWindow(IDC_KEEPLISTS, true);\r
dwShow &= ~SVNSLC_SHOWUNVERSIONED;\r
if(dwShow & SVNSLC_SHOWUNVERSIONED)\r
{\r
- m_ListCtrl.GetStatus(&this->m_pathList,false,false,true);\r
+ if(m_bWholeProject)\r
+ m_ListCtrl.GetStatus(NULL,false,false,true);\r
+ else\r
+ m_ListCtrl.GetStatus(&this->m_pathList,false,false,true);\r
}\r
m_ListCtrl.Show(dwShow);\r
}\r
CString sMenuItemText(MAKEINTRESOURCE(IDS_COMMITDLG_POPUP_PASTEFILELIST));\r
m_nPopupPasteListCmd = nCmd++;\r
mPopup.AppendMenu(MF_STRING | MF_ENABLED, m_nPopupPasteListCmd, sMenuItemText);\r
+\r
+ //CString sMenuItemText(MAKEINTRESOURCE(IDS_COMMITDLG_POPUP_PASTEFILELIST));\r
+ if(m_History.GetCount() > 0)\r
+ {\r
+ sMenuItemText.LoadString(IDS_COMMITDLG_POPUP_PASTELASTMESSAGE);\r
+ m_nPopupPasteLastMessage = nCmd++;\r
+ mPopup.AppendMenu(MF_STRING | MF_ENABLED, m_nPopupPasteLastMessage, sMenuItemText);\r
+ }\r
+ \r
}\r
\r
-bool CCommitDlg::HandleMenuItemClick(int /*cmd*/, CSciEdit * /*pSciEdit*/)\r
+bool CCommitDlg::HandleMenuItemClick(int cmd, CSciEdit * pSciEdit)\r
{\r
-#if 0\r
+\r
if (m_bBlock)\r
return false;\r
if (cmd == m_nPopupPasteListCmd)\r
int nListItems = m_ListCtrl.GetItemCount();\r
for (int i=0; i<nListItems; ++i)\r
{\r
- CGitStatusListCtrl::FileEntry * entry = m_ListCtrl.GetListEntry(i);\r
- if (entry->IsChecked())\r
+ CTGitPath * entry = (CTGitPath*)m_ListCtrl.GetItemData(i);\r
+ if (entry&&entry->m_Checked)\r
{\r
CString line;\r
- Git_wc_status_kind status = entry->status;\r
- if (status == Git_wc_status_unversioned)\r
- status = Git_wc_status_added;\r
- if (status == Git_wc_status_missing)\r
- status = Git_wc_status_deleted;\r
+ CString status = entry->GetActionName();\r
+ if(entry->m_Action & CTGitPath::LOGACTIONS_UNVER)\r
+ status = _T("Add");\r
+\r
+ //git_wc_status_kind status = entry->status;\r
WORD langID = (WORD)CRegStdWORD(_T("Software\\TortoiseGit\\LanguageID"), GetUserDefaultLangID());\r
if (m_ProjectProperties.bFileListInEnglish)\r
langID = 1033;\r
- GitStatus::GetStatusString(AfxGetResourceHandle(), status, buf, sizeof(buf)/sizeof(TCHAR), langID);\r
- line.Format(_T("%-10s %s\r\n"), buf, (LPCTSTR)m_ListCtrl.GetItemText(i,0));\r
+ \r
+ line.Format(_T("%-10s %s\r\n"),status , (LPCTSTR)m_ListCtrl.GetItemText(i,0));\r
logmsg += line;\r
}\r
}\r
pSciEdit->InsertText(logmsg);\r
return true;\r
}\r
-#endif\r
+\r
+ if(cmd == m_nPopupPasteLastMessage)\r
+ {\r
+ if(m_History.GetCount() ==0 )\r
+ return false;\r
+\r
+ CString logmsg;\r
+ logmsg +=m_History.GetEntry(0);\r
+ pSciEdit->InsertText(logmsg);\r
+ return true;\r
+ }\r
return false;\r
}\r
\r
}\r
\r
}\r
+\r
+void CCommitDlg::OnBnClickedWholeProject()\r
+{\r
+ // TODO: Add your control notification handler code here\r
+ m_tooltips.Pop(); // hide the tooltips\r
+ UpdateData();\r
+ m_ListCtrl.Clear();\r
+ if (!m_bBlock)\r
+ {\r
+ if(m_bWholeProject)\r
+ m_ListCtrl.GetStatus(NULL,true,false,true);\r
+ else\r
+ m_ListCtrl.GetStatus(&this->m_pathList,true,false,true);\r
+ \r
+ m_ListCtrl.Show(m_ListCtrl.GetShowFlags());\r
+ }\r
+\r
+ CTGitPath commonDir = m_ListCtrl.GetCommonDirectory(false);\r
+\r
+ if(this->m_bWholeProject) \r
+ SetWindowText(m_sWindowTitle + _T(" - ") + CString(_T("Whole Project")));\r
+ else\r
+ SetWindowText(m_sWindowTitle + _T(" - ") + commonDir.GetWinPathString());\r
+\r
+}\r