OSDN Git Service

Fixed issue #187: Allow start new rebase after finish rebase
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / SVNProgressDlg.cpp
index e891669..ec9ea41 100644 (file)
@@ -68,17 +68,18 @@ enum SVNProgressDlgContextMenuCommands
 IMPLEMENT_DYNAMIC(CGitProgressDlg, CResizableStandAloneDialog)\r
 CGitProgressDlg::CGitProgressDlg(CWnd* pParent /*=NULL*/)\r
        : CResizableStandAloneDialog(CGitProgressDlg::IDD, pParent)\r
+       , m_bCancelled(FALSE)\r
+       , m_pThread(NULL)\r
 #if 0\r
        , m_Revision(_T("HEAD"))\r
        //, m_RevisionEnd(0)\r
        , m_bLockWarning(false)\r
        , m_bLockExists(false)\r
-       , m_bCancelled(FALSE)\r
        , m_bThreadRunning(FALSE)\r
        , m_nConflicts(0)\r
        , m_bErrorsOccurred(FALSE)\r
        , m_bMergesAddsDeletesOccurred(FALSE)\r
-       , m_pThread(NULL)\r
+       \r
        , m_options(ProgOptNone)\r
        , m_dwCloseOnEnd((DWORD)-1)\r
        , m_bFinishedItemAdded(false)\r
@@ -294,11 +295,21 @@ BOOL CGitProgressDlg::Notify(const CTGitPath& path, git_wc_notify_action_t actio
                data->color = m_Colors.GetColor(CColors::Modified);\r
                break;\r
 \r
+       case git_wc_notify_sendmail_retry:\r
+               data->sActionColumnText.LoadString(IDS_SVNACTION_SENDMAIL_RETRY);\r
+               data->sPathColumnText.Empty();\r
+               data->color = m_Colors.GetColor(CColors::Modified);\r
+               break;\r
+\r
 \r
        case git_wc_notify_resolved:\r
                data->sActionColumnText.LoadString(IDS_SVNACTION_RESOLVE);\r
                break;\r
 \r
+       case git_wc_notify_revert:\r
+               data->sActionColumnText.LoadString(IDS_SVNACTION_REVERT);\r
+               break;\r
+\r
 #if 0\r
        case svn_wc_notify_commit_added:\r
                data->sActionColumnText.LoadString(IDS_SVNACTION_ADDING);\r
@@ -324,9 +335,7 @@ BOOL CGitProgressDlg::Notify(const CTGitPath& path, git_wc_notify_action_t actio
        case svn_wc_notify_restore:\r
                data->sActionColumnText.LoadString(IDS_SVNACTION_RESTORE);\r
                break;\r
-       case svn_wc_notify_revert:\r
-               data->sActionColumnText.LoadString(IDS_SVNACTION_REVERT);\r
-               break;\r
+\r
        case svn_wc_notify_update_replace:\r
        case svn_wc_notify_commit_replaced:\r
                data->sActionColumnText.LoadString(IDS_SVNACTION_REPLACED);\r
@@ -1568,7 +1577,7 @@ void CGitProgressDlg::OnContextMenu(CWnd* pWnd, CPoint point)
                                                                SVN svn;\r
                                                                if (!svn.Cat(data->path, SVNRev(SVNRev::REV_WC), rev, basefile))\r
                                                                {\r
-                                                                       CMessageBox::Show(m_hWnd, svn.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);\r
+                                                                       CMessageBox::Show(m_hWnd, svn.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
                                                                        DialogEnableWindow(IDOK, TRUE);\r
                                                                        break;\r
                                                                }\r
@@ -1601,7 +1610,7 @@ void CGitProgressDlg::OnContextMenu(CWnd* pWnd, CPoint point)
                                                                SVN svn;\r
                                                                if (!svn.Cat(data->path, SVNRev(SVNRev::REV_WC), rev, tempfile))\r
                                                                {\r
-                                                                       CMessageBox::Show(m_hWnd, svn.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);\r
+                                                                       CMessageBox::Show(m_hWnd, svn.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
                                                                        DialogEnableWindow(IDOK, TRUE);\r
                                                                        break;\r
                                                                }\r
@@ -1654,7 +1663,7 @@ void CGitProgressDlg::OnContextMenu(CWnd* pWnd, CPoint point)
                                                                        {\r
                                                                                if (!svn.Resolve(data->path, result, FALSE))\r
                                                                                {\r
-                                                                                       CMessageBox::Show(m_hWnd, svn.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);\r
+                                                                                       CMessageBox::Show(m_hWnd, svn.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
                                                                                        DialogEnableWindow(IDOK, TRUE);\r
                                                                                        break;\r
                                                                                }\r
@@ -1689,7 +1698,7 @@ void CGitProgressDlg::OnContextMenu(CWnd* pWnd, CPoint point)
                                                        {\r
                                                                CString msg;\r
                                                                msg.Format(IDS_SVNPROGRESS_RESOLVED, (LPCTSTR)sResolvedPaths);\r
-                                                               CMessageBox::Show(m_hWnd, msg, _T("TortoiseSVN"), MB_OK | MB_ICONINFORMATION);\r
+                                                               CMessageBox::Show(m_hWnd, msg, _T("TortoiseGit"), MB_OK | MB_ICONINFORMATION);\r
                                                        }\r
                                                }\r
                                                break;\r
@@ -1807,7 +1816,7 @@ bool CGitProgressDlg::CmdAdd(CString& sWindowTitle, bool& localoperation)
        for(int i=0;i<m_targetPathList.GetCount();i++)\r
        {\r
                CString cmd,out;\r
-               cmd.Format(_T("git.exe add -f \"%s\""),m_targetPathList[i].GetGitPathString());\r
+               cmd.Format(_T("git.exe add -f -- \"%s\""),m_targetPathList[i].GetGitPathString());\r
                if(g_Git.Run(cmd,&out,CP_ACP))\r
                {\r
                        CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
@@ -2358,7 +2367,7 @@ bool CGitProgressDlg::CmdResolve(CString& sWindowTitle, bool& localoperation)
        for(int i=0;i<m_targetPathList.GetCount();i++)\r
        {\r
                CString cmd,out,tempmergefile;\r
-               cmd.Format(_T("git.exe add -f \"%s\""),m_targetPathList[i].GetGitPathString());\r
+               cmd.Format(_T("git.exe add -f -- \"%s\""),m_targetPathList[i].GetGitPathString());\r
                if(g_Git.Run(cmd,&out,CP_ACP))\r
                {\r
                        CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
@@ -2450,24 +2459,30 @@ bool CGitProgressDlg::CmdResolve(CString& sWindowTitle, bool& localoperation)
 \r
 bool CGitProgressDlg::CmdRevert(CString& sWindowTitle, bool& localoperation)\r
 {\r
-#if 0\r
+\r
        localoperation = true;\r
        sWindowTitle.LoadString(IDS_PROGRS_TITLE_REVERT);\r
        SetWindowText(sWindowTitle);\r
        SetBackgroundImage(IDI_REVERT_BKG);\r
 \r
-       CTGitPathList delList = m_selectedPaths;\r
-       if (DWORD(CRegDWORD(_T("Software\\TortoiseGit\\RevertWithRecycleBin"), TRUE)))\r
-               delList.DeleteAllFiles(true);\r
+       //CTGitPathList delList = m_selectedPaths;\r
+       //if (DWORD(CRegDWORD(_T("Software\\TortoiseGit\\RevertWithRecycleBin"), TRUE)))\r
+       //      delList.DeleteAllFiles(true);\r
 \r
        ReportCmd(CString(MAKEINTRESOURCE(IDS_PROGRS_CMD_REVERT)));\r
-       if (!Revert(m_targetPathList, CStringArray(), !!(m_options & ProgOptRecursive)))\r
+       for(int i=0;i<m_selectedPaths.GetCount();i++)\r
        {\r
-               ReportSVNError();\r
-               return false;\r
+               if(g_Git.Revert((CTGitPath&)m_selectedPaths[i],true))\r
+               {\r
+                       CMessageBox::Show(NULL,_T("Revert Fail"),_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+                       m_bErrorsOccurred=true;\r
+                       return false;\r
+               }\r
+               Notify(m_selectedPaths[i],git_wc_notify_revert);\r
        }\r
-       CShellUpdater::Instance().AddPathsForUpdate(m_targetPathList);\r
-#endif\r
+\r
+       CShellUpdater::Instance().AddPathsForUpdate(m_selectedPaths);\r
+\r
        return true;\r
 }\r
 \r
@@ -2709,21 +2724,69 @@ bool CGitProgressDlg::CmdSendMail(CString& sWindowTitle, bool& /*localoperation*
        //SetBackgroundImage(IDI_ADD_BKG);\r
        ReportCmd(CString(MAKEINTRESOURCE(IDS_PROGRS_CMD_SENDMAIL)));\r
        bool ret=true;\r
+       if(this->m_SendMailFlags&SENDMAIL_COMBINED)\r
+       {\r
+               CString error;\r
+               CTGitPath path;\r
+               Notify(path,git_wc_notify_sendmail_start);\r
+               CString err;\r
+               int retry=0;\r
+               while(retry <3)\r
+               {\r
+                       if(CPatch::Send(m_targetPathList,m_SendMailTO,m_SendMailCC,m_SendMailSubject,this->m_SendMailFlags&SENDMAIL_ATTACHMENT,&err))\r
+                       {\r
+                               Notify(path,git_wc_notify_sendmail_error,ret,&err);\r
+                               ret = false;\r
+                       }\r
+                       else\r
+                       {\r
+                               break;          \r
+                       }\r
 \r
-       for(int i=0;i<m_targetPathList.GetCount();i++)\r
+                       retry++;\r
+                       Sleep(2000);\r
+                       if(m_bCancelled)\r
+                       {\r
+                               Notify(path,git_wc_notify_sendmail_retry,ret,&CString("User Canceled"));\r
+                           return false;\r
+                       }\r
+               }\r
+               Notify(path,git_wc_notify_sendmail_done,ret);\r
+\r
+       }else\r
        {\r
-               CPatch patch;\r
-               Notify(m_targetPathList[i],git_wc_notify_sendmail_start);\r
-               int ret=patch.Send((CString&)m_targetPathList[i].GetWinPathString(),this->m_SendMailTO,\r
-                                this->m_SendMailCC,this->m_SendMailFlags&SENDMAIL_ATTACHMENT);\r
-               if(ret)\r
+               for(int i=0;i<m_targetPathList.GetCount();i++)\r
                {\r
-                       Notify(m_targetPathList[i],git_wc_notify_sendmail_error,ret,&patch.m_LastError);\r
-                       ret = false;\r
+                       CPatch patch;\r
+                       Notify(m_targetPathList[i],git_wc_notify_sendmail_start);\r
+\r
+                       int retry=0;\r
+                       while(retry<3)\r
+                       {\r
+                               int ret=patch.Send((CString&)m_targetPathList[i].GetWinPathString(),this->m_SendMailTO,\r
+                                        this->m_SendMailCC,this->m_SendMailFlags&SENDMAIL_ATTACHMENT);\r
+                               if(ret)\r
+                               {\r
+                                       Notify(m_targetPathList[i],git_wc_notify_sendmail_error,ret,&patch.m_LastError);\r
+                                       ret = false;\r
+\r
+                               }else\r
+                               {\r
+                                       break;\r
+                               }\r
+                               Notify(m_targetPathList[i],git_wc_notify_sendmail_retry,ret,&patch.m_LastError);\r
+\r
+                               retry++;\r
+                               Sleep(2000);\r
+                               if(m_bCancelled)\r
+                               {\r
+                                       Notify(m_targetPathList[i],git_wc_notify_sendmail_retry,ret,&CString("User Canceled"));\r
+                                   return false;\r
+                               }\r
+                       }\r
+                       Notify(m_targetPathList[i],git_wc_notify_sendmail_done,ret);\r
+                       \r
                }\r
-               Notify(m_targetPathList[i],git_wc_notify_sendmail_done,ret);\r
-               if(m_bCancelled)\r
-                       return false;\r
        }\r
        return ret;\r
 }
\ No newline at end of file