OSDN Git Service

Sync Dialog remote URL support save history
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / SyncDlg.cpp
index d1561d5..53624d9 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
@@ -56,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
@@ -72,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
@@ -82,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
@@ -97,7 +101,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 +164,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,11 +257,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_PostButtonTexts.Add(_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
+       UpdateCombox();\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
@@ -244,7 +315,7 @@ void CSyncDlg::OnBnClickedButtonPush()
        CString force;\r
        CString all;\r
 \r
-       UpateCombox();\r
+\r
 \r
        switch (m_ctrlPush.GetCurrentEntry())\r
        {\r
@@ -531,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
@@ -552,14 +624,17 @@ 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
+       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
@@ -568,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
@@ -579,6 +656,21 @@ BOOL CSyncDlg::OnInitDialog()
 \r
        EnableSaveRestore(_T("SyncDlg"));\r
 \r
+       this->m_ctrlURL.LoadHistory(CString(_T("Software\\TortoiseGit\\History\\SyncURL\\"))+WorkingDir, _T("url"));\r
+\r
+       STRING_VECTOR list;\r
+       \r
+       if(!g_Git.GetRemoteList(list))\r
+       {       \r
+               for(unsigned int i=0;i<list.size();i++)\r
+               {\r
+                       m_ctrlURL.AddString(list[i]);\r
+               }\r
+       }       \r
+       m_ctrlURL.SetCurSel(0);\r
+       m_ctrlRemoteBranch.SetCurSel(0);\r
+       m_ctrlURL.SetURLHistory(true);\r
+       \r
        this->LoadBranchInfo();\r
 \r
        this->m_bInited=true;\r
@@ -733,6 +825,18 @@ 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
+               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
@@ -796,3 +900,61 @@ 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
+\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