void CSyncDlg::RunPostAction() { if (m_bWantToExit) return; FillNewRefMap(); if (this->m_CurrentCmd == GIT_COMMAND_PUSH) { if (!m_GitCmdStatus) { CTGitPathList list; list.AddPath(CTGitPath(g_Git.m_CurrentDir)); DWORD exitcode; CString error; if (CHooks::Instance().PostPush(list,exitcode, error)) { if (exitcode) { CString temp; temp.Format(IDS_ERR_HOOKFAILED, (LPCTSTR)error); //ReportError(temp); CMessageBox::Show(NULL,temp,_T("TortoiseGit"),MB_OK|MB_ICONERROR); return; } } } EnableControlButton(true); SwitchToInput(); this->FetchOutList(true); } else if (this->m_CurrentCmd == GIT_COMMAND_PULL) { PullComplete(); } else if (this->m_CurrentCmd == GIT_COMMAND_FETCH || this->m_CurrentCmd == GIT_COMMAND_FETCHANDREBASE) { FetchComplete(); } else if (this->m_CurrentCmd == GIT_COMMAND_SUBMODULE) { //this->m_ctrlCmdOut.SetSel(-1,-1); //this->m_ctrlCmdOut.ReplaceSel(_T("Done\r\n")); //this->m_ctrlCmdOut.SetSel(-1,-1); EnableControlButton(true); SwitchToInput(); } else if (this->m_CurrentCmd == GIT_COMMAND_STASH) { StashComplete(); } else if (this->m_CurrentCmd == GIT_COMMAND_REMOTE) { this->FetchOutList(true); EnableControlButton(true); SwitchToInput(); ShowTab(IDC_REFLIST); } }
void CSyncDlg::FetchComplete() { EnableControlButton(true); SwitchToInput(); this->FetchOutList(true); ShowTab(IDC_CMD_LOG); if( (!this->m_GitCmdStatus) && this->m_CurrentCmd == GIT_COMMAND_FETCHANDREBASE) { CRebaseDlg dlg; dlg.m_PostButtonTexts.Add(_T("Email &Patch...")); int response = dlg.DoModal(); if(response == IDOK) { return ; } if(response == IDC_REBASE_POST_BUTTON) { CString cmd, out, err; cmd.Format(_T("git.exe format-patch -o \"%s\" %s..%s"), g_Git.m_CurrentDir, g_Git.FixBranchName(dlg.m_Upstream), g_Git.FixBranchName(dlg.m_Branch)); if(g_Git.Run(cmd, &out, &err, CP_ACP)) { CMessageBox::Show(NULL, out + L"\n" + err, _T("TortoiseGit"), MB_OK|MB_ICONERROR); return ; } CAppUtils::SendPatchMail(cmd,out); } } }
void CSyncDlg::FetchComplete() { EnableControlButton(true); SwitchToInput(); this->FetchOutList(true); if (g_Git.UsingLibGit2(CGit::GIT_CMD_FETCH)) ShowTab(IDC_CMD_GIT_PROG); else ShowTab(IDC_REFLIST); if( (!this->m_GitCmdStatus) && this->m_CurrentCmd == GIT_COMMAND_FETCHANDREBASE) { CRebaseDlg dlg; CString remote, remotebranch; m_ctrlURL.GetWindowText(remote); if (!remote.IsEmpty()) { STRING_VECTOR remotes; g_Git.GetRemoteList(remotes); if (std::find(remotes.begin(), remotes.end(), remote) == remotes.end()) remote.Empty(); } m_ctrlRemoteBranch.GetWindowText(remotebranch); if (!remote.IsEmpty() && !remotebranch.IsEmpty()) dlg.m_Upstream = _T("remotes/") + remote + _T("/") + remotebranch; dlg.m_PostButtonTexts.Add(CString(MAKEINTRESOURCE(IDS_MENULOG))); dlg.m_PostButtonTexts.Add(_T("Email &Patch...")); INT_PTR response = dlg.DoModal(); if(response == IDOK) { return ; } if (response == IDC_REBASE_POST_BUTTON) { CString cmd = _T("/command:log"); cmd += _T(" /path:\"") + g_Git.m_CurrentDir + _T("\""); CAppUtils::RunTortoiseGitProc(cmd); } if(response == IDC_REBASE_POST_BUTTON + 1) { CString cmd, out, err; cmd.Format(_T("git.exe format-patch -o \"%s\" %s..%s"), g_Git.m_CurrentDir, g_Git.FixBranchName(dlg.m_Upstream), g_Git.FixBranchName(dlg.m_Branch)); if (g_Git.Run(cmd, &out, &err, CP_UTF8)) { CMessageBox::Show(NULL, out + L"\n" + err, _T("TortoiseGit"), MB_OK|MB_ICONERROR); return ; } CAppUtils::SendPatchMail(cmd,out); } } }
void CSyncDlg::StashComplete() { EnableControlButton(true); INT_PTR entry = m_ctrlStash.GetCurrentEntry(); if (entry != 1 && entry != 2) return; SwitchToInput(); if (m_GitCmdStatus) { CTGitPathList list; if (g_Git.ListConflictFile(list)) { m_ctrlCmdOut.SetSel(-1, -1); m_ctrlCmdOut.ReplaceSel(_T("Get conflict files fail\n")); ShowTab(IDC_CMD_LOG); return; } if (!list.IsEmpty()) { m_ConflictFileList.Clear(); CTGitPathList list; CTGitPath path; list.AddPath(path); m_ConflictFileList.GetStatus(&list,true); m_ConflictFileList.Show(CTGitPath::LOGACTIONS_UNMERGED, CTGitPath::LOGACTIONS_UNMERGED); ShowTab(IDC_IN_CONFLICT); } else ShowTab(IDC_CMD_LOG); } }
void CSyncDlg::PullComplete() { EnableControlButton(true); SwitchToInput(); this->FetchOutList(true); CGitHash newhash; if (g_Git.GetHash(newhash, _T("HEAD"))) MessageBox(g_Git.GetGitLastErr(_T("Could not get HEAD hash after pulling.")), _T("TortoiseGit"), MB_ICONERROR); if( this ->m_GitCmdStatus ) { CTGitPathList list; if(g_Git.ListConflictFile(list)) { this->m_ctrlCmdOut.SetSel(-1,-1); this->m_ctrlCmdOut.ReplaceSel(_T("Get conflict files fail\n")); this->ShowTab(IDC_CMD_LOG); return; } if (!list.IsEmpty()) { this->m_ConflictFileList.Clear(); CTGitPathList list; CTGitPath path; list.AddPath(path); this->m_ConflictFileList.GetStatus(&list,true); this->m_ConflictFileList.Show(CTGitPath::LOGACTIONS_UNMERGED, CTGitPath::LOGACTIONS_UNMERGED); this->ShowTab(IDC_IN_CONFLICT); } else this->ShowTab(IDC_CMD_LOG); } else { if(newhash == this->m_oldHash) { this->m_ctrlTabCtrl.ShowTab(IDC_IN_CHANGELIST-1,false); this->m_InLogList.ShowText(CString(MAKEINTRESOURCE(IDS_UPTODATE))); this->m_ctrlTabCtrl.ShowTab(IDC_IN_LOGLIST-1,true); this->ShowTab(IDC_REFLIST); } else { this->m_ctrlTabCtrl.ShowTab(IDC_IN_CHANGELIST-1,true); this->m_ctrlTabCtrl.ShowTab(IDC_IN_LOGLIST-1,true); this->AddDiffFileList(&m_InChangeFileList, &m_arInChangeList, newhash.ToString(), m_oldHash.ToString()); CString range; range.Format(_T("%s..%s"), m_oldHash.ToString(), newhash.ToString()); m_InLogList.FillGitLog(nullptr, &range, CGit::LOG_INFO_STAT| CGit::LOG_INFO_FILESTATE | CGit::LOG_INFO_SHOW_MERGEDFILE); this->ShowTab(IDC_IN_LOGLIST); } } }
LRESULT CSyncDlg::OnProgressUpdateUI(WPARAM wParam,LPARAM lParam) { if(wParam == MSG_PROGRESSDLG_START) { m_ctrlAnimate.Play(0,-1,-1); this->m_ctrlProgress.SetPos(0); if (m_pTaskbarList) { m_pTaskbarList->SetProgressState(m_hWnd, TBPF_NORMAL); m_pTaskbarList->SetProgressValue(m_hWnd, 0, 100); } } if(wParam == MSG_PROGRESSDLG_END || wParam == MSG_PROGRESSDLG_FAILED) { //m_bDone = true; m_ctrlAnimate.Stop(); m_ctrlProgress.SetPos(100); //this->DialogEnableWindow(IDOK,TRUE); if (m_pTaskbarList) m_pTaskbarList->SetProgressState(m_hWnd, TBPF_NOPROGRESS); //if(wParam == MSG_PROGRESSDLG_END) if(this->m_CurrentCmd == GIT_COMMAND_PUSH ) { if(!m_GitCmdStatus) { CTGitPathList list; list.AddPath(CTGitPath(g_Git.m_CurrentDir)); DWORD exitcode; CString error; if (CHooks::Instance().PostPush(list,exitcode, error)) { if (exitcode) { CString temp; temp.Format(IDS_ERR_HOOKFAILED, (LPCTSTR)error); //ReportError(temp); CMessageBox::Show(NULL,temp,_T("TortoiseGit"),MB_OK|MB_ICONERROR); return false; } } } EnableControlButton(true); SwitchToInput(); this->FetchOutList(true); } if(this->m_CurrentCmd == GIT_COMMAND_PULL ) { PullComplete(); } if(this->m_CurrentCmd == GIT_COMMAND_FETCH || this->m_CurrentCmd == GIT_COMMAND_FETCHANDREBASE) { FetchComplete(); } if(this->m_CurrentCmd == GIT_COMMAND_SUBMODULE) { //this->m_ctrlCmdOut.SetSel(-1,-1); //this->m_ctrlCmdOut.ReplaceSel(_T("Done\r\n")); //this->m_ctrlCmdOut.SetSel(-1,-1); EnableControlButton(true); SwitchToInput(); } if(this->m_CurrentCmd == GIT_COMMAND_REMOTE) { this->FetchOutList(true); EnableControlButton(true); SwitchToInput(); } } if(lParam != 0) ParserCmdOutput((char)lParam); return 0; }
void CSyncDlg::PullComplete() { EnableControlButton(true); SwitchToInput(); this->FetchOutList(true); CString newhash; newhash = g_Git.GetHash(_T("HEAD")); if( this ->m_GitCmdStatus ) { CTGitPathList list; if(g_Git.ListConflictFile(list)) { this->m_ctrlCmdOut.SetSel(-1,-1); this->m_ctrlCmdOut.ReplaceSel(_T("Get conflict files fail\n")); this->ShowTab(IDC_CMD_LOG); return; } if(list.GetCount()>0) { this->m_ConflictFileList.Clear(); CTGitPathList list; CTGitPath path; list.AddPath(path); this->m_ConflictFileList.GetStatus(&list,true); this->m_ConflictFileList.Show(CTGitPath::LOGACTIONS_UNMERGED, CTGitPath::LOGACTIONS_UNMERGED); this->ShowTab(IDC_IN_CONFLICT); this->GetDlgItem(IDC_BUTTON_COMMIT)->ShowWindow(SW_NORMAL); } else this->ShowTab(IDC_CMD_LOG); } else { if(newhash == this->m_oldHash) { this->m_ctrlTabCtrl.ShowTab(IDC_IN_CHANGELIST-1,false); this->m_InLogList.ShowText(_T("No commits get after pull")); this->m_ctrlTabCtrl.ShowTab(IDC_IN_LOGLIST-1,true); } else { this->m_ctrlTabCtrl.ShowTab(IDC_IN_CHANGELIST-1,true); this->m_ctrlTabCtrl.ShowTab(IDC_IN_LOGLIST-1,true); CString oldhash=m_oldHash.ToString(); this->AddDiffFileList(&m_InChangeFileList,&m_arInChangeList,newhash,oldhash); m_InLogList.FillGitLog(NULL,CGit:: LOG_INFO_STAT| CGit::LOG_INFO_FILESTATE | CGit::LOG_INFO_SHOW_MERGEDFILE, &oldhash,&newhash); } this->ShowTab(IDC_IN_LOGLIST); } }