OSDN Git Service

Show GUI friendly diffstat after pull
authorJohan 't Hart <johanthart@gmail.com>
Thu, 4 Jun 2009 22:11:41 +0000 (00:11 +0200)
committerJohan 't Hart <johanthart@gmail.com>
Thu, 4 Jun 2009 22:11:41 +0000 (00:11 +0200)
src/TortoiseProc/Commands/PullCommand.cpp
src/TortoiseProc/ProgressDlg.cpp
src/TortoiseProc/ProgressDlg.h

index 6ef53f8..116039f 100644 (file)
@@ -39,12 +39,20 @@ bool PullCommand::Execute()
                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
index a0c65f8..0335b44 100644 (file)
@@ -11,7 +11,7 @@
 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
@@ -133,6 +133,11 @@ UINT CProgressDlg::ProgressThread()
                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
@@ -154,11 +159,13 @@ LRESULT CProgressDlg::OnProgressUpdateUI(WPARAM wParam,LPARAM lParam)
                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
index 4b89b7e..d07aae3 100644 (file)
@@ -7,6 +7,7 @@
 #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
@@ -20,6 +21,7 @@ public:
        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