OSDN Git Service

SyncDlg implement "apply patch" command.
authorFrank Li <lznuaa@gmail.com>
Fri, 24 Jul 2009 15:53:17 +0000 (23:53 +0800)
committerFrank Li <lznuaa@gmail.com>
Fri, 24 Jul 2009 15:53:17 +0000 (23:53 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/SyncDlg.cpp
src/TortoiseProc/SyncDlg.h

index 636eb18..5b1159a 100644 (file)
@@ -25,7 +25,7 @@
 #include "SyncDlg.h"\r
 #include "progressdlg.h"\r
 #include "MessageBox.h"\r
-\r
+#include "ImportPatchDlg.h"\r
 // CSyncDlg dialog\r
 \r
 IMPLEMENT_DYNAMIC(CSyncDlg, CResizableStandAloneDialog)\r
@@ -160,6 +160,58 @@ void CSyncDlg::OnBnClickedButtonPush()
 void CSyncDlg::OnBnClickedButtonApply()\r
 {\r
        // TODO: Add your control notification handler code here\r
+       CString oldhash;\r
+       oldhash=g_Git.GetHash(CString(_T("HEAD")));\r
+       \r
+       CImportPatchDlg dlg;\r
+       CString cmd,output;\r
+\r
+       if(dlg.DoModal() == IDOK)\r
+       {\r
+               int err=0;\r
+               for(int i=0;i<dlg.m_PathList.GetCount();i++)\r
+               {                       \r
+                       cmd.Format(_T("git.exe am \"%s\""),dlg.m_PathList[i].GetGitPathString());\r
+                       \r
+                       if(g_Git.Run(cmd,&output,CP_ACP))\r
+                       {\r
+                               CMessageBox::Show(NULL,output,_T("TortoiseGit"),MB_OK);\r
+\r
+                               err=1;\r
+                               break;\r
+                       }\r
+               }\r
+               this->m_ctrlCmdOut.SetSel(-1,-1);\r
+               this->m_ctrlCmdOut.ReplaceSel(output);\r
+\r
+               CString newhash=g_Git.GetHash(CString(_T("HEAD")));             \r
+\r
+               this->m_InLogList.Clear();\r
+               this->m_InChangeFileList.Clear();\r
+\r
+               if(newhash == oldhash)\r
+               {\r
+                       this->m_ctrlTabCtrl.ShowTab(IDC_IN_CHANGELIST-1,false);\r
+                       this->m_InLogList.ShowText(_T("No commits get from patch"));\r
+                       this->m_ctrlTabCtrl.ShowTab(IDC_IN_LOGLIST-1,true);\r
+\r
+               }else\r
+               {\r
+                       this->m_ctrlTabCtrl.ShowTab(IDC_IN_CHANGELIST-1,true);\r
+                       this->m_ctrlTabCtrl.ShowTab(IDC_IN_LOGLIST-1,true);\r
+                       \r
+                       this->AddDiffFileList(&m_InChangeFileList,&m_arInChangeList,newhash,oldhash);\r
+               }\r
+\r
+               if(err)\r
+               {\r
+                       this->ShowTab(IDC_CMD_LOG);\r
+\r
+               }else\r
+               {\r
+                       this->ShowTab(IDC_IN_LOGLIST);\r
+               }\r
+       }\r
 }\r
 \r
 void CSyncDlg::OnBnClickedButtonEmail()\r
@@ -250,6 +302,35 @@ BOOL CSyncDlg::OnInitDialog()
        \r
        //m_ctrlCmdOut.ReplaceSel(_T("Hello"));\r
 \r
+       //----------  Create in coming list ctrl -----------\r
+       dwStyle =LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_OWNERDATA | WS_BORDER | WS_TABSTOP | WS_CHILD | WS_VISIBLE;;\r
+\r
+       if( !m_InLogList.Create(dwStyle,rectDummy,&m_ctrlTabCtrl,IDC_IN_LOGLIST))\r
+       {\r
+               TRACE0("Failed to create output commits window\n");\r
+               return FALSE;      // fail to create\r
+\r
+       }\r
+\r
+       m_ctrlTabCtrl.InsertTab(&m_InLogList,_T("In Commits"),-1);\r
+\r
+       m_InLogList.InsertGitColumn();\r
+\r
+       //----------- Create In Change file list -----------\r
+       dwStyle = LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP |LVS_SINGLESEL |WS_CHILD | WS_VISIBLE;\r
+       \r
+       if( !m_InChangeFileList.Create(dwStyle,rectDummy,&m_ctrlTabCtrl,IDC_IN_CHANGELIST))\r
+       {\r
+               TRACE0("Failed to create output change files window\n");\r
+               return FALSE;      // fail to create\r
+       }\r
+       m_ctrlTabCtrl.InsertTab(&m_InChangeFileList,_T("Out ChangeList"),-1);\r
+\r
+       m_InChangeFileList.Init(SVNSLC_COLEXT | SVNSLC_COLSTATUS |SVNSLC_COLADD|SVNSLC_COLDEL , _T("OutSyncDlg"),\r
+                                   (CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_COMPARETWO)|\r
+                                                       CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_GNUDIFF2)),false);\r
+\r
+\r
        //----------  Create Commit List Ctrl---------------\r
                        \r
        dwStyle =LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_OWNERDATA | WS_BORDER | WS_TABSTOP | WS_CHILD | WS_VISIBLE;;\r
@@ -341,7 +422,9 @@ BOOL CSyncDlg::OnInitDialog()
        FetchOutList();\r
        \r
        m_ctrlTabCtrl.ShowTab(IDC_CMD_LOG-1,false);\r
-\r
+       m_ctrlTabCtrl.ShowTab(IDC_IN_LOGLIST-1,false);\r
+       m_ctrlTabCtrl.ShowTab(IDC_IN_CHANGELIST-1,false);\r
+       \r
        return TRUE;  // return TRUE unless you set the focus to a control\r
        // EXCEPTION: OCX Property Pages should return FALSE\r
 }\r
@@ -419,11 +502,9 @@ void CSyncDlg::FetchOutList(bool force)
                        {\r
                                str.Format(_T("%d commits ahead \"%s\""),m_OutLogList.GetItemCount(),remotebranch);\r
                                this->m_ctrlStatus.SetWindowText(str);\r
-                               g_Git.GetCommitDiffList(localbranch,remotebranch,m_arOutChangeList);\r
-                               m_OutChangeFileList.m_Rev1=localbranch;\r
-                               m_OutChangeFileList.m_Rev2=remotebranch;\r
-                               m_OutChangeFileList.Show(0,this->m_arOutChangeList);\r
-                               m_OutChangeFileList.SetEmptyString(CString(_T("No changed file")));\r
+\r
+                               AddDiffFileList(&m_OutChangeFileList,&m_arOutChangeList,localbranch,remotebranch);\r
+                               \r
                                this->m_ctrlTabCtrl.ShowTab(m_OutChangeFileList.GetDlgCtrlID()-1,TRUE);\r
                                this->GetDlgItem(IDC_BUTTON_EMAIL)->EnableWindow(TRUE);\r
                        }\r
index 31b4180..7f54c3b 100644 (file)
 #include "GitLoglist.h"\r
 // CSyncDlg dialog\r
 #define IDC_SYNC_TAB 0x1000000\r
-#define IDC_CMD_LOG            0x1\r
-#define IDC_OUT_LOGLIST 0x2\r
-#define IDC_OUT_CHANGELIST 0x3\r
+\r
+#define IDC_CMD_LOG                    0x1\r
+#define IDC_IN_LOGLIST         0x2\r
+#define IDC_IN_CHANGELIST      0x3\r
+#define IDC_OUT_LOGLIST                0x4\r
+#define IDC_OUT_CHANGELIST     0x5\r
+\r
 class CSyncDlg : public CResizableStandAloneDialog,public CBranchCombox\r
 {\r
        DECLARE_DYNAMIC(CSyncDlg)\r
@@ -70,6 +74,8 @@ protected:
        CRichEditCtrl      m_ctrlCmdOut;\r
 \r
        CTGitPathList   m_arOutChangeList;\r
+       CTGitPathList   m_arInChangeList;\r
+\r
        int                             m_CmdOutCurrentPos;\r
 \r
        CWinThread*                             m_pThread;      \r
@@ -110,8 +116,19 @@ protected:
        void ShowInputCtrl(bool bShow=true);\r
        void SwitchToRun(){ShowProgressCtrl(true);ShowInputCtrl(false);EnableControlButton(false);}\r
        void SwitchToInput(){ShowProgressCtrl(false);ShowInputCtrl(true);}\r
+       \r
        LRESULT OnProgressUpdateUI(WPARAM wParam,LPARAM lParam);\r
 \r
+       void AddDiffFileList(CGitStatusListCtrl *pCtrlList, CTGitPathList *pGitList,\r
+                                                       CString &rev1,CString &rev2)\r
+       {\r
+               g_Git.GetCommitDiffList(rev1,rev2,*pGitList);\r
+               pCtrlList->m_Rev1=rev1;\r
+               pCtrlList->m_Rev2=rev2;\r
+               pCtrlList->Show(0,*pGitList);\r
+               pCtrlList->SetEmptyString(CString(_T("No changed file")));\r
+               return;\r
+       }\r
 \r
        DECLARE_MESSAGE_MAP()\r
 public:\r