OSDN Git Service

Implemented issue #162: Ability to sync submodules in TGit sync dialog.
authorFrank Li <lznuaa@gmail.com>
Mon, 14 Sep 2009 15:27:50 +0000 (23:27 +0800)
committerFrank Li <lznuaa@gmail.com>
Mon, 14 Sep 2009 15:27:50 +0000 (23:27 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Resources/TortoiseProcENG.rc
src/TortoiseProc/SyncDlg.cpp
src/TortoiseProc/SyncDlg.h
src/TortoiseProc/resource.h

index 7c2f754..5a942e3 100644 (file)
Binary files a/src/Resources/TortoiseProcENG.rc and b/src/Resources/TortoiseProcENG.rc differ
index f20a7e8..16e7297 100644 (file)
@@ -58,7 +58,7 @@ void CSyncDlg::DoDataExchange(CDataExchange* pDX)
        DDX_Control(pDX, IDC_STATIC_STATUS, m_ctrlStatus);\r
        DDX_Control(pDX, IDC_PROGRESS_SYNC, m_ctrlProgress);\r
        DDX_Control(pDX, IDC_ANIMATE_SYNC, m_ctrlAnimate);\r
-\r
+       DDX_Control(pDX, IDC_BUTTON_SUBMODULE,m_ctrlSubmodule);\r
        BRANCH_COMBOX_DDX;\r
 }\r
 \r
@@ -74,6 +74,7 @@ BEGIN_MESSAGE_MAP(CSyncDlg, CResizableStandAloneDialog)
        ON_CBN_EDITCHANGE(IDC_COMBOBOXEX_URL, &CSyncDlg::OnCbnEditchangeComboboxexUrl)\r
        ON_MESSAGE(MSG_PROGRESSDLG_UPDATE_UI, OnProgressUpdateUI)\r
        ON_BN_CLICKED(IDC_BUTTON_COMMIT, &CSyncDlg::OnBnClickedButtonCommit)\r
+       ON_BN_CLICKED(IDC_BUTTON_SUBMODULE, &CSyncDlg::OnBnClickedButtonSubmodule)\r
 END_MESSAGE_MAP()\r
 \r
 \r
@@ -84,6 +85,7 @@ void CSyncDlg::EnableControlButton(bool bEnabled)
        GetDlgItem(IDC_BUTTON_APPLY)->EnableWindow(bEnabled);\r
        GetDlgItem(IDC_BUTTON_EMAIL)->EnableWindow(bEnabled);\r
        GetDlgItem(IDOK)->EnableWindow(bEnabled);\r
+       GetDlgItem(IDC_BUTTON_SUBMODULE)->EnableWindow(bEnabled);\r
 }\r
 // CSyncDlg message handlers\r
 \r
@@ -600,15 +602,16 @@ BOOL CSyncDlg::OnInitDialog()
        AddAnchor(IDC_BUTTON_MANAGE,TOP_RIGHT);\r
        AddAnchor(IDC_BUTTON_PULL,BOTTOM_LEFT);\r
        AddAnchor(IDC_BUTTON_PUSH,BOTTOM_LEFT);\r
-       AddAnchor(IDC_BUTTON_APPLY,BOTTOM_LEFT);\r
-       AddAnchor(IDC_BUTTON_EMAIL,BOTTOM_LEFT);\r
+       AddAnchor(IDC_BUTTON_SUBMODULE,BOTTOM_LEFT);\r
+       AddAnchor(IDC_BUTTON_APPLY,BOTTOM_RIGHT);\r
+       AddAnchor(IDC_BUTTON_EMAIL,BOTTOM_RIGHT);\r
        AddAnchor(IDC_PROGRESS_SYNC,TOP_LEFT,TOP_RIGHT);\r
        AddAnchor(IDOK,BOTTOM_RIGHT);\r
        AddAnchor(IDHELP,BOTTOM_RIGHT);\r
        AddAnchor(IDC_STATIC_STATUS,BOTTOM_LEFT);\r
        AddAnchor(IDC_ANIMATE_SYNC,TOP_LEFT);\r
        AddAnchor(IDC_BUTTON_COMMIT,BOTTOM_LEFT);\r
-       \r
+\r
        BRANCH_COMBOX_ADD_ANCHOR();\r
 \r
        this->GetDlgItem(IDC_BUTTON_COMMIT)->ShowWindow(SW_HIDE);\r
@@ -629,6 +632,9 @@ BOOL CSyncDlg::OnInitDialog()
        this->m_ctrlPull.AddEntry(CString(_T("Fetc&h")));\r
        this->m_ctrlPull.AddEntry(CString(_T("Fetch&&Re&base")));\r
 \r
+       this->m_ctrlSubmodule.AddEntry(CString(_T("Submodule Update")));\r
+       this->m_ctrlSubmodule.AddEntry(CString(_T("Submodule Init")));\r
+       this->m_ctrlSubmodule.AddEntry(CString(_T("Submodule Sync")));\r
        \r
        WorkingDir.Replace(_T(':'),_T('_'));\r
 \r
@@ -637,9 +643,11 @@ BOOL CSyncDlg::OnInitDialog()
 \r
        this->m_regPullButton = CRegDWORD(regkey+_T("\\Pull"),0);\r
        this->m_regPushButton = CRegDWORD(regkey+_T("\\Push"),0);\r
+       this->m_regSubmoduleButton = CRegDWORD(regkey+_T("\\Submodule"));\r
 \r
        this->m_ctrlPull.SetCurrentEntry(this->m_regPullButton);\r
        this->m_ctrlPush.SetCurrentEntry(this->m_regPushButton);\r
+       this->m_ctrlSubmodule.SetCurrentEntry(this->m_regSubmoduleButton);\r
 \r
        CString str;\r
        this->GetWindowText(str);\r
@@ -811,6 +819,14 @@ LRESULT CSyncDlg::OnProgressUpdateUI(WPARAM wParam,LPARAM lParam)
                {\r
                        FetchComplete();\r
                }\r
+               if(this->m_CurrentCmd == GIT_COMMAND_SUBMODULE)\r
+               {\r
+                       //this->m_ctrlCmdOut.SetSel(-1,-1);\r
+                       //this->m_ctrlCmdOut.ReplaceSel(_T("Done\r\n"));\r
+                       //this->m_ctrlCmdOut.SetSel(-1,-1);\r
+                       EnableControlButton(true);\r
+                       SwitchToInput();\r
+               }\r
        }\r
 \r
        if(lParam != 0)\r
@@ -883,3 +899,52 @@ void CSyncDlg::OnOK()
        SaveHistory();\r
        __super::OnOK();\r
 }\r
+\r
+void CSyncDlg::OnBnClickedButtonSubmodule()\r
+{\r
+       // TODO: Add your control notification handler code here\r
+               // TODO: Add your control notification handler code here\r
+       this->UpdateData();\r
+       UpdateCombox();\r
+\r
+       this->m_regSubmoduleButton = this->m_ctrlSubmodule.GetCurrentEntry();\r
+\r
+       this->SwitchToRun();\r
+       \r
+       this->m_bAbort=false;\r
+       this->m_GitCmdList.clear();\r
+\r
+       ShowTab(IDC_CMD_LOG);\r
+\r
+       CString cmd;\r
+\r
+       switch (m_ctrlSubmodule.GetCurrentEntry())\r
+       {\r
+       case 0:\r
+               cmd=_T("git.exe submodule update");\r
+               break;\r
+       case 1:\r
+               cmd=_T("git.exe submodule init");\r
+               break;\r
+       case 2:\r
+               cmd=_T("git.exe submodule sync");\r
+               break;\r
+       }\r
+\r
+       \r
+       m_GitCmdList.push_back(cmd);\r
+\r
+       m_CurrentCmd = GIT_COMMAND_SUBMODULE;\r
+\r
+       m_pThread = AfxBeginThread(ProgressThreadEntry, this, THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);\r
+       if (m_pThread==NULL)\r
+       {\r
+//             ReportError(CString(MAKEINTRESOURCE(IDS_ERR_THREADSTARTFAILED)));\r
+       }\r
+       else\r
+       {\r
+               m_pThread->m_bAutoDelete = TRUE;\r
+               m_pThread->ResumeThread();\r
+       }\r
+\r
+}\r
index ea0c237..6aa205b 100644 (file)
@@ -52,7 +52,8 @@ public:
        enum { GIT_COMMAND_PUSH,\r
                   GIT_COMMAND_PULL,\r
                   GIT_COMMAND_FETCH,\r
-                  GIT_COMMAND_FETCHANDREBASE\r
+                  GIT_COMMAND_FETCHANDREBASE,\r
+                  GIT_COMMAND_SUBMODULE,\r
                };\r
 protected:\r
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\r
@@ -62,6 +63,8 @@ protected:
 \r
        CRegDWORD m_regPullButton;\r
        CRegDWORD m_regPushButton;\r
+       CRegDWORD m_regSubmoduleButton;\r
+\r
        CMFCTabCtrl m_ctrlTabCtrl;\r
 \r
        CBalloon                        m_tooltips;\r
@@ -161,6 +164,7 @@ public:
        CMenuButton m_ctrlPull;\r
        CMenuButton m_ctrlPush;\r
        CMenuButton m_ctrlStatus;\r
+       CMenuButton m_ctrlSubmodule;\r
        afx_msg void OnBnClickedButtonPull();\r
        afx_msg void OnBnClickedButtonPush();\r
        afx_msg void OnBnClickedButtonApply();\r
@@ -177,4 +181,6 @@ public:
        afx_msg void OnBnClickedButtonCommit();\r
 protected:\r
        virtual void OnOK();\r
+public:\r
+       afx_msg void OnBnClickedButtonSubmodule();\r
 };\r
index 0f3afc8..a366ee2 100644 (file)
Binary files a/src/TortoiseProc/resource.h and b/src/TortoiseProc/resource.h differ