OSDN Git Service

Add launch rebase option at fetch dialog.
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / PullFetchDlg.cpp
index 1267a00..16805de 100644 (file)
@@ -5,7 +5,8 @@
 #include "TortoiseProc.h"\r
 #include "PullFetchDlg.h"\r
 #include "Git.h"\r
-\r
+#include "AppUtils.h"\r
+#include "BrowseRefsDlg.h"\r
 // CPullFetchDlg dialog\r
 \r
 IMPLEMENT_DYNAMIC(CPullFetchDlg, CResizableStandAloneDialog)\r
@@ -14,6 +15,9 @@ CPullFetchDlg::CPullFetchDlg(CWnd* pParent /*=NULL*/)
        : CResizableStandAloneDialog(CPullFetchDlg::IDD, pParent)\r
 {\r
        m_IsPull=TRUE;\r
+    m_bAutoLoad = CAppUtils::IsSSHPutty();\r
+    m_bAutoLoadEnable=true;\r
+       m_regRebase = false;\r
 }\r
 \r
 CPullFetchDlg::~CPullFetchDlg()\r
@@ -26,6 +30,9 @@ void CPullFetchDlg::DoDataExchange(CDataExchange* pDX)
        DDX_Control(pDX, IDC_REMOTE_COMBO, this->m_Remote);\r
        DDX_Control(pDX, IDC_OTHER, this->m_Other);\r
        DDX_Control(pDX, IDC_REMOTE_BRANCH, this->m_RemoteBranch);\r
+    DDX_Control(pDX,IDC_REMOTE_MANAGE, this->m_RemoteManage);\r
+    DDX_Check(pDX,IDC_PUTTYKEY_AUTOLOAD,m_bAutoLoad);\r
+    DDX_Check(pDX,IDC_CHECK_REBASE,m_bRebase);\r
 \r
 }\r
 \r
@@ -34,6 +41,8 @@ BEGIN_MESSAGE_MAP(CPullFetchDlg,CResizableStandAloneDialog )
        ON_BN_CLICKED(IDC_REMOTE_RD, &CPullFetchDlg::OnBnClickedRd)\r
        ON_BN_CLICKED(IDC_OTHER_RD, &CPullFetchDlg::OnBnClickedRd)\r
        ON_BN_CLICKED(IDOK, &CPullFetchDlg::OnBnClickedOk)\r
+    ON_STN_CLICKED(IDC_REMOTE_MANAGE, &CPullFetchDlg::OnStnClickedRemoteManage)\r
+       ON_BN_CLICKED(IDC_BUTTON_BROWSE_REF, &CPullFetchDlg::OnBnClickedButtonBrowseRef)\r
 END_MESSAGE_MAP()\r
 \r
 BOOL CPullFetchDlg::OnInitDialog()\r
@@ -46,32 +55,85 @@ BOOL CPullFetchDlg::OnInitDialog()
        \r
        AddAnchor(IDOK,BOTTOM_RIGHT);\r
        AddAnchor(IDCANCEL,BOTTOM_RIGHT);\r
+    AddAnchor(IDC_GROUPT_REMOTE,TOP_LEFT,BOTTOM_RIGHT);\r
+    AddAnchor(IDC_PUTTYKEY_AUTOLOAD,BOTTOM_LEFT);\r
+       AddAnchor(IDC_CHECK_REBASE,BOTTOM_LEFT);\r
+    AddAnchor(IDC_REMOTE_MANAGE,BOTTOM_LEFT);\r
+       AddAnchor(IDHELP, BOTTOM_RIGHT);\r
+\r
+       CString WorkingDir=g_Git.m_CurrentDir;\r
+       WorkingDir.Replace(_T(':'),_T('_'));\r
+\r
+       CString regkey ;\r
+       regkey.Format(_T("Software\\TortoiseGit\\TortoiseProc\\PullFetch\\%s_%d\\rebase"),WorkingDir,this->m_IsPull);\r
+       m_regRebase=CRegDWORD(regkey,false);\r
+\r
+       this->m_bRebase = m_regRebase;\r
+\r
+       this->UpdateData(FALSE);\r
+\r
+    this->AddOthersToAnchor();\r
+\r
+    this->GetDlgItem(IDC_PUTTYKEY_AUTOLOAD)->EnableWindow(m_bAutoLoadEnable);\r
 \r
        CheckRadioButton(IDC_REMOTE_RD,IDC_OTHER_RD,IDC_REMOTE_RD);\r
        m_Remote.EnableWindow(TRUE);\r
        m_Other.EnableWindow(FALSE);\r
-       m_RemoteBranch.EnableWindow(FALSE);\r
+       if(!m_IsPull)\r
+               m_RemoteBranch.EnableWindow(FALSE);\r
+\r
+       if(m_IsPull)\r
+               GetDlgItem(IDC_CHECK_REBASE)->ShowWindow(SW_HIDE);\r
 \r
        m_Other.SetURLHistory(TRUE);\r
        m_Other.LoadHistory(_T("Software\\TortoiseGit\\History\\PullURLS"), _T("url"));\r
-       m_Other.SetCurSel(0);\r
+       CString clippath=CAppUtils::GetClipboardLink();\r
+       if(clippath.IsEmpty())\r
+               m_Other.SetCurSel(0);\r
+       else\r
+               m_Other.SetWindowText(clippath);\r
 \r
        m_RemoteBranch.LoadHistory(_T("Software\\TortoiseGit\\History\\PullRemoteBranch"), _T("br"));\r
        m_RemoteBranch.SetCurSel(0);\r
 \r
        if(m_IsPull)\r
-               this->SetWindowTextW(_T("Pull"));\r
+               this->SetWindowTextW(CString(_T("Pull - "))+WorkingDir);\r
        else\r
-               this->SetWindowTextW(_T("Fetch"));\r
+               this->SetWindowTextW(CString(_T("Fetch - "))+WorkingDir);\r
 \r
        STRING_VECTOR list;\r
+       \r
+       CRegString remote(CString(_T("Software\\TortoiseGit\\History\\PullRemote\\")+WorkingDir));\r
+       m_RemoteReg = remote;\r
+       int sel=0;\r
+\r
+       //Select pull-remote from current branch\r
+       CString currentBranch = g_Git.GetSymbolicRef();\r
+       CString configName;\r
+       configName.Format(L"branch.%s.remote", currentBranch);\r
+       CString pullRemote = m_configPullRemote = g_Git.GetConfigValue(configName);\r
+\r
+       //Select pull-branch from current branch\r
+       configName.Format(L"branch.%s.merge", currentBranch);\r
+       CString pullBranch = m_configPullBranch = CGit::StripRefName(g_Git.GetConfigValue(configName));\r
+       m_RemoteBranch.AddString(pullBranch);\r
+\r
+       if(pullRemote.IsEmpty())\r
+               pullRemote = remote;\r
 \r
        if(!g_Git.GetRemoteList(list))\r
        {       \r
-               for(int i=0;i<list.size();i++)\r
+               for(unsigned int i=0;i<list.size();i++)\r
+               {\r
                        m_Remote.AddString(list[i]);\r
+                       if(list[i] == pullRemote)\r
+                               sel = i;\r
+               }\r
        }\r
+       m_Remote.SetCurSel(sel);\r
 \r
+       EnableSaveRestore(_T("PullFetchDlg"));\r
+    this->m_RemoteManage.SetURL(CString());\r
        return TRUE;\r
 }\r
 // CPullFetchDlg message handlers\r
@@ -84,14 +146,15 @@ void CPullFetchDlg::OnBnClickedRd()
        {\r
                m_Remote.EnableWindow(TRUE);\r
                m_Other.EnableWindow(FALSE);\r
-               m_RemoteBranch.EnableWindow(FALSE);\r
-\r
+               if(!m_IsPull)\r
+                       m_RemoteBranch.EnableWindow(FALSE);\r
        }\r
        if( GetCheckedRadioButton(IDC_REMOTE_RD,IDC_OTHER_RD) == IDC_OTHER_RD)\r
        {\r
                m_Remote.EnableWindow(FALSE);\r
                m_Other.EnableWindow(TRUE);;\r
-               m_RemoteBranch.EnableWindow(TRUE);\r
+               if(!m_IsPull)\r
+                       m_RemoteBranch.EnableWindow(TRUE);\r
        }\r
        \r
 \r
@@ -99,11 +162,18 @@ void CPullFetchDlg::OnBnClickedRd()
 \r
 void CPullFetchDlg::OnBnClickedOk()\r
 {\r
+       this->UpdateData();\r
        // TODO: Add your control notification handler code here\r
        if( GetCheckedRadioButton(IDC_REMOTE_RD,IDC_OTHER_RD) == IDC_REMOTE_RD)\r
        {\r
                m_RemoteURL=m_Remote.GetString();\r
-               m_RemoteBranchName.Empty();\r
+               if( !m_IsPull ||\r
+                       (m_configPullRemote == m_RemoteURL && m_configPullBranch == m_RemoteBranch.GetString() ))\r
+                       //When fetching or when pulling from the configured tracking branch, dont explicitly set the remote branch name,\r
+                       //because otherwise git will not update the remote tracking branches.\r
+                       m_RemoteBranchName.Empty();\r
+               else\r
+                       m_RemoteBranchName=m_RemoteBranch.GetString();\r
                \r
        }\r
        if( GetCheckedRadioButton(IDC_REMOTE_RD,IDC_OTHER_RD) == IDC_OTHER_RD)\r
@@ -112,8 +182,40 @@ void CPullFetchDlg::OnBnClickedOk()
                m_RemoteBranchName=m_RemoteBranch.GetString();\r
                \r
        }\r
+       \r
+       m_RemoteReg = m_Remote.GetString();\r
 \r
        m_Other.SaveHistory();\r
        m_RemoteBranch.SaveHistory();\r
+       this->m_regRebase=this->m_bRebase;\r
+\r
        this->OnOK();\r
 }\r
+\r
+void CPullFetchDlg::OnStnClickedRemoteManage()\r
+{\r
+    // TODO: Add your control notification handler code here\r
+    CAppUtils::LaunchRemoteSetting();\r
+}\r
+\r
+void CPullFetchDlg::OnBnClickedButtonBrowseRef()\r
+{\r
+       CString initialRef;\r
+       initialRef.Format(L"refs/remotes/%s/%s", m_Remote.GetString(), m_RemoteBranch.GetString());\r
+       CString selectedRef = CBrowseRefsDlg::PickRef(false, initialRef, gPickRef_Remote);\r
+       if(selectedRef.Left(13) != "refs/remotes/")\r
+               return;\r
+\r
+       selectedRef = selectedRef.Mid(13);\r
+       int ixSlash = selectedRef.Find('/');\r
+\r
+       CString remoteName   = selectedRef.Left(ixSlash);\r
+       CString remoteBranch = selectedRef.Mid(ixSlash + 1);\r
+       \r
+       int ixFound = m_Remote.FindStringExact(0, remoteName);\r
+       if(ixFound >= 0)\r
+               m_Remote.SetCurSel(ixFound);\r
+       m_RemoteBranch.AddString(remoteBranch);\r
+\r
+       CheckRadioButton(IDC_REMOTE_RD,IDC_OTHER_RD,IDC_REMOTE_RD);\r
+}\r