CString hashOld = g_Git.GetHash(L"HEAD");\r
cmd.Format(_T("git.exe pull \"%s\" %s"),url,dlg.m_RemoteBranchName);\r
CProgressDlg progress;\r
- progress.m_GitCmd=cmd;\r
+ progress.m_GitCmd = cmd;\r
+ progress.m_bAutoCloseOnSuccess = true;\r
if(progress.DoModal()==IDOK)\r
{\r
CString hashNew = g_Git.GetHash(L"HEAD");\r
+\r
+ if(hashOld == hashNew)\r
+ {\r
+ CMessageBox::Show(NULL, L"Already up to date.", L"Pull", MB_OK | MB_ICONINFORMATION);\r
+ return TRUE;\r
+ }\r
+\r
CFileDiffDlg dlg;\r
- dlg.SetDiff(NULL,hashOld,hashNew);\r
+ dlg.SetDiff(NULL, hashNew, hashOld);\r
dlg.DoModal();\r
\r
return TRUE;\r
IMPLEMENT_DYNAMIC(CProgressDlg, CResizableStandAloneDialog)\r
\r
CProgressDlg::CProgressDlg(CWnd* pParent /*=NULL*/)\r
- : CResizableStandAloneDialog(CProgressDlg::IDD, pParent), m_bShowCommand(true)\r
+ : CResizableStandAloneDialog(CProgressDlg::IDD, pParent), m_bShowCommand(true), m_bAutoCloseOnSuccess(false)\r
{\r
\r
}\r
DWORD status=0;\r
if(!GetExitCodeProcess(pi.hProcess,&status))\r
{\r
+ CloseHandle(pi.hProcess);\r
+\r
+ CloseHandle(hRead);\r
+\r
+ this->PostMessage(MSG_PROGRESSDLG_UPDATE_UI,MSG_PROGRESSDLG_FAILED,0);\r
return GIT_ERROR_GET_EXIT_CODE;\r
}\r
m_GitStatus |= status;\r
m_Animate.Play(0,-1,-1);\r
this->DialogEnableWindow(IDOK,FALSE);\r
}\r
- if(wParam == MSG_PROGRESSDLG_END)\r
+ if(wParam == MSG_PROGRESSDLG_END || wParam == MSG_PROGRESSDLG_FAILED)\r
{\r
m_Animate.Stop();\r
m_Progress.SetPos(100);\r
this->DialogEnableWindow(IDOK,TRUE);\r
+ if(m_bAutoCloseOnSuccess && wParam == MSG_PROGRESSDLG_END)\r
+ EndDialog(IDOK);\r
}\r
\r
if(lParam != 0)\r
#define MSG_PROGRESSDLG_START 0\r
#define MSG_PROGRESSDLG_RUN 50\r
#define MSG_PROGRESSDLG_END 110\r
+#define MSG_PROGRESSDLG_FAILED 111\r
\r
class CProgressDlg : public CResizableStandAloneDialog\r
{\r
enum { IDD = IDD_GITPROGRESS };\r
CString m_GitCmd;\r
std::vector<CString> m_GitCmdList;\r
+ bool m_bAutoCloseOnSuccess;\r
\r
CString m_LogFile;\r
\r