OSDN Git Service

Sync Dialog Basic finished.
authorFrank Li <lznuaa@gmail.com>
Sat, 25 Jul 2009 07:01:49 +0000 (15:01 +0800)
committerFrank Li <lznuaa@gmail.com>
Sat, 25 Jul 2009 07:01:49 +0000 (15:01 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Resources/TortoiseProcENG.rc
src/TortoiseProc/BranchCombox.h
src/TortoiseProc/SyncDlg.cpp
src/TortoiseProc/SyncDlg.h

index 9460c83..df7911f 100644 (file)
Binary files a/src/Resources/TortoiseProcENG.rc and b/src/Resources/TortoiseProcENG.rc differ
index 5573b4e..d1d9339 100644 (file)
@@ -140,8 +140,8 @@ protected:
                \r
        void LoadBranchInfo()\r
        {\r
-               m_ctrlLocalBranch.SetMaxHistoryItems(0x7FFFFFFF);\r
-               m_ctrlRemoteBranch.SetMaxHistoryItems(0x7FFFFFFF);\r
+               m_ctrlLocalBranch.SetMaxHistoryItems(0x0FFFFFFF);\r
+               m_ctrlRemoteBranch.SetMaxHistoryItems(0x0FFFFFFF);\r
 \r
                STRING_VECTOR list;\r
                list.clear();\r
@@ -190,6 +190,15 @@ protected:
 public:\r
        CString m_strLocalBranch;\r
        CString m_strRemoteBranch;\r
+\r
+       void SaveHistory()\r
+       {\r
+               if(!this->m_RegKeyRemoteBranch.IsEmpty())\r
+               {\r
+                       m_ctrlRemoteBranch.AddString(m_strRemoteBranch);\r
+                       m_ctrlRemoteBranch.SaveHistory();\r
+               }\r
+       }\r
 };\r
 \r
 #define BRANCH_COMBOX_DDX \\r
index d1561d5..342cfbb 100644 (file)
@@ -27,6 +27,8 @@
 #include "MessageBox.h"\r
 #include "ImportPatchDlg.h"\r
 #include "PathUtils.h"\r
+#include "RebaseDlg.h"\r
+\r
 // CSyncDlg dialog\r
 \r
 IMPLEMENT_DYNAMIC(CSyncDlg, CResizableStandAloneDialog)\r
@@ -97,7 +99,7 @@ void CSyncDlg::OnBnClickedButtonPull()
        this->m_GitCmdList.clear();\r
 \r
        this->UpdateData();\r
-       UpateCombox();\r
+       UpdateCombox();\r
 \r
        m_oldHash = g_Git.GetHash(CString(_T("HEAD")));\r
 \r
@@ -160,6 +162,33 @@ void CSyncDlg::OnBnClickedButtonPull()
                }\r
 \r
        }\r
+\r
+       ///Fetch\r
+       if(CurrentEntry == 1 || CurrentEntry ==2 ) //Fetch\r
+       {\r
+               cmd.Format(_T("git.exe fetch %s \"%s\" %s"),\r
+                               force,\r
+                               m_strURL,\r
+                               this->m_strRemoteBranch);\r
+               if(CurrentEntry == 1) \r
+                       m_CurrentCmd = GIT_COMMAND_FETCH;\r
+               else\r
+                       m_CurrentCmd = GIT_COMMAND_FETCHANDREBASE;\r
+               m_GitCmdList.push_back(cmd);\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
+\r
        \r
 }\r
 \r
@@ -226,12 +255,51 @@ void CSyncDlg::PullComplete()
        }\r
 }\r
 \r
+void CSyncDlg::FetchComplete()\r
+{\r
+       EnableControlButton(true);\r
+       SwitchToInput();\r
+       this->FetchOutList(true);\r
+\r
+       ShowTab(IDC_CMD_LOG);\r
+       if( (!this->m_GitCmdStatus) && this->m_CurrentCmd == GIT_COMMAND_FETCHANDREBASE)\r
+       {\r
+               CRebaseDlg dlg;\r
+               dlg.m_PostButtonText=_T("Email &Patch...");\r
+               int response = dlg.DoModal();\r
+               if(response == IDOK)\r
+               {\r
+                       return ;\r
+               }\r
+\r
+               if(response == IDC_REBASE_POST_BUTTON)\r
+               {\r
+                       CString cmd,out;\r
+                       cmd.Format(_T("git.exe  format-patch -o \"%s\" %s..%s"),\r
+                                       g_Git.m_CurrentDir,\r
+                                       dlg.m_Upstream,dlg.m_Branch);\r
+                       if(g_Git.Run(cmd,&out,CP_ACP))\r
+                       {\r
+                               CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+                               return ;\r
+                       }\r
+\r
+                       CAppUtils::SendPatchMail(cmd,out);\r
+               }\r
+       }\r
+}\r
 \r
 void CSyncDlg::OnBnClickedButtonPush()\r
 {\r
        // TODO: Add your control notification handler code here\r
        this->UpdateData();\r
 \r
+       if(this->m_strURL.IsEmpty())\r
+       {\r
+               CMessageBox::Show(NULL,_T("URL can't Empty"),_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+               return;\r
+       }\r
+\r
        this->m_regPushButton=this->m_ctrlPush.GetCurrentEntry();\r
        this->SwitchToRun();\r
        this->m_bAbort=false;\r
@@ -244,7 +312,7 @@ void CSyncDlg::OnBnClickedButtonPush()
        CString force;\r
        CString all;\r
 \r
-       UpateCombox();\r
+       UpdateCombox();\r
 \r
        switch (m_ctrlPush.GetCurrentEntry())\r
        {\r
@@ -552,13 +620,13 @@ BOOL CSyncDlg::OnInitDialog()
        this->AddOthersToAnchor();\r
        // TODO:  Add extra initialization here\r
 \r
-       this->m_ctrlPush.AddEntry(CString(_T("Push")));\r
-       this->m_ctrlPush.AddEntry(CString(_T("Push tags")));\r
+       this->m_ctrlPush.AddEntry(CString(_T("Pus&h")));\r
+       this->m_ctrlPush.AddEntry(CString(_T("Push ta&gs")));\r
        ///this->m_ctrlPush.AddEntry(CString(_T("Push All")));\r
 \r
        this->m_ctrlPull.AddEntry(CString(_T("&Pull")));\r
-       this->m_ctrlPull.AddEntry(CString(_T("&Fetch")));\r
-       this->m_ctrlPull.AddEntry(CString(_T("Fetch&&Rebase")));\r
+       this->m_ctrlPull.AddEntry(CString(_T("Fetc&h")));\r
+       this->m_ctrlPull.AddEntry(CString(_T("Fetch&&Re&base")));\r
 \r
        \r
        WorkingDir.Replace(_T(':'),_T('_'));\r
@@ -579,6 +647,11 @@ BOOL CSyncDlg::OnInitDialog()
 \r
        EnableSaveRestore(_T("SyncDlg"));\r
 \r
+       this->m_ctrlURL.LoadHistory(CString(_T("Software\\TortoiseGit\\History\\SyncURL\\"))+WorkingDir, _T("url"));\r
+               \r
+       m_ctrlURL.SetCurSel(0);\r
+       m_ctrlRemoteBranch.SetCurSel(0);\r
+\r
        this->LoadBranchInfo();\r
 \r
        this->m_bInited=true;\r
@@ -733,6 +806,10 @@ LRESULT CSyncDlg::OnProgressUpdateUI(WPARAM wParam,LPARAM lParam)
                {\r
                        PullComplete();\r
                }\r
+               if(this->m_CurrentCmd == GIT_COMMAND_FETCH || this->m_CurrentCmd == GIT_COMMAND_FETCHANDREBASE)\r
+               {\r
+                       FetchComplete();\r
+               }\r
        }\r
 \r
        if(lParam != 0)\r
@@ -796,3 +873,12 @@ void CSyncDlg::OnBnClickedButtonCommit()
     \r
        CAppUtils::LaunchApplication(proc,IDS_ERROR_CANNON_FIND_TORTOISEPROC,false);\r
 }\r
+\r
+void CSyncDlg::OnOK()\r
+{\r
+       // TODO: Add your specialized code here and/or call the base class\r
+       UpdateCombox();\r
+       m_ctrlURL.SaveHistory();\r
+       SaveHistory();\r
+       __super::OnOK();\r
+}\r
index 32957a9..ea0c237 100644 (file)
@@ -51,6 +51,8 @@ public:
 \r
        enum { GIT_COMMAND_PUSH,\r
                   GIT_COMMAND_PULL,\r
+                  GIT_COMMAND_FETCH,\r
+                  GIT_COMMAND_FETCHANDREBASE\r
                };\r
 protected:\r
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\r
@@ -123,7 +125,7 @@ protected:
        \r
        LRESULT OnProgressUpdateUI(WPARAM wParam,LPARAM lParam);\r
 \r
-       void UpateCombox()\r
+       void UpdateCombox()\r
        {\r
                this->m_strLocalBranch = this->m_ctrlLocalBranch.GetString();\r
                this->m_ctrlRemoteBranch.GetWindowText(this->m_strRemoteBranch);\r
@@ -143,6 +145,7 @@ protected:
        }\r
 \r
        void PullComplete();\r
+       void FetchComplete();\r
 \r
        DECLARE_MESSAGE_MAP()\r
 public:\r
@@ -172,4 +175,6 @@ public:
 \r
        void EnableControlButton(bool bEnabled=true);\r
        afx_msg void OnBnClickedButtonCommit();\r
+protected:\r
+       virtual void OnOK();\r
 };\r