OSDN Git Service

Get Change File List at Sync Dialog
authorFrank Li <lznuaa@gmail.com>
Mon, 20 Jul 2009 15:33:41 +0000 (23:33 +0800)
committerFrank Li <lznuaa@gmail.com>
Mon, 20 Jul 2009 15:33:41 +0000 (23:33 +0800)
src/Git/Git.cpp
src/Git/Git.h
src/Git/GitStatusListCtrl.cpp
src/Resources/TortoiseProcENG.rc
src/TortoiseProc/FileDiffDlg.cpp
src/TortoiseProc/SyncDlg.cpp
src/TortoiseProc/SyncDlg.h

index 4e5e951..f17e638 100644 (file)
@@ -655,6 +655,30 @@ git_revnum_t CGit::GetHash(const CString &friendname)
        return out;\r
 }\r
 \r
+int CGit::GetCommitDiffList(CString &rev1,CString &rev2,CTGitPathList &outputlist)\r
+{\r
+       CString cmd;\r
+       \r
+       if(rev1 == GIT_REV_ZERO || rev2 == GIT_REV_ZERO)\r
+       {\r
+               //rev1=+_T("");\r
+               if(rev1 == GIT_REV_ZERO)\r
+                       cmd.Format(_T("git.exe diff -r --raw -C -M --numstat -z %s"),rev2);\r
+               else\r
+                       cmd.Format(_T("git.exe diff -r -R --raw -C -M --numstat -z %s"),rev1);\r
+       }else\r
+       {\r
+               cmd.Format(_T("git.exe diff-tree -r --raw -C -M --numstat -z %s %s"),rev2,rev1);\r
+       }\r
+\r
+       BYTE_VECTOR out;\r
+       if(g_Git.Run(cmd,&out))\r
+               return -1;\r
+\r
+       outputlist.ParserFromLog(out);\r
+\r
+}\r
+\r
 int CGit::GetTagList(STRING_VECTOR &list)\r
 {\r
        int ret;\r
index 2cc24fd..f025ff6 100644 (file)
@@ -119,6 +119,8 @@ public:
        CString GetFullRefName(CString shortRefName);\r
        //Removes 'refs/heads/' or just 'refs'. Example: refs/heads/master -> master\r
        static CString StripRefName(CString refName);\r
+\r
+       int GetCommitDiffList(CString &rev1,CString &rev2,CTGitPathList &outpathlist);\r
        \r
 };\r
 extern void GetTempPath(CString &path);\r
index 58463a7..bdd1131 100644 (file)
@@ -1252,6 +1252,9 @@ void CGitStatusListCtrl::Show(DWORD dwShow, DWORD dwCheck /*=0*/, bool bShowFold
 \r
 void CGitStatusListCtrl::Show(DWORD dwShow, const CTGitPathList& checkedList, bool bShowFolders /* = true */)\r
 {\r
+       DeleteAllItems();\r
+       for(int i=0;i<checkedList.GetCount();i++)\r
+               this->AddEntry((CTGitPath *)&checkedList[i],0,i);\r
        return ;\r
 #if 0\r
 \r
index 3be546c..c95d38e 100644 (file)
Binary files a/src/Resources/TortoiseProcENG.rc and b/src/Resources/TortoiseProcENG.rc differ
index a8d60e0..94f518d 100644 (file)
@@ -252,24 +252,9 @@ UINT CFileDiffDlg::DiffThread()
 //             return 0;\r
 //     }\r
 #endif\r
-       CString cmd;\r
-       CString rev1=m_rev1.m_CommitHash;\r
-       if(this->m_rev1.m_CommitHash == GIT_REV_ZERO || this->m_rev2.m_CommitHash == GIT_REV_ZERO)\r
-       {\r
-               rev1=+_T("");\r
-               if(this->m_rev1.m_CommitHash == GIT_REV_ZERO)\r
-                       cmd.Format(_T("git.exe diff -r --raw -C -M --numstat -z %s"),m_rev2.m_CommitHash);\r
-               else\r
-                       cmd.Format(_T("git.exe diff -r -R --raw -C -M --numstat -z %s"),m_rev1.m_CommitHash);\r
-       }else\r
-       {\r
-               cmd.Format(_T("git.exe diff-tree -r --raw -C -M --numstat -z %s %s"),m_rev2.m_CommitHash,rev1);\r
-       }\r
 \r
-       BYTE_VECTOR out;\r
-       g_Git.Run(cmd,&out);\r
-       this->m_arFileList.ParserFromLog(out);\r
-       \r
+       g_Git.GetCommitDiffList(m_rev1.m_CommitHash,m_rev2.m_CommitHash,m_arFileList);\r
+               \r
        CString sFilterText;\r
        m_cFilter.GetWindowText(sFilterText);\r
        m_cFileList.SetRedraw(false);\r
index 0d5c108..63a4d60 100644 (file)
@@ -34,6 +34,7 @@ CSyncDlg::CSyncDlg(CWnd* pParent /*=NULL*/)
        , m_bAutoLoadPuttyKey(FALSE)\r
 {\r
        m_pTooltip=&this->m_tooltips;\r
+       m_bInited=false;\r
 }\r
 \r
 CSyncDlg::~CSyncDlg()\r
@@ -189,6 +190,8 @@ BOOL CSyncDlg::OnInitDialog()
 \r
        this->LoadBranchInfo();\r
 \r
+       this->m_bInited=true;\r
+       FetchOutList();\r
        \r
        return TRUE;  // return TRUE unless you set the focus to a control\r
        // EXCEPTION: OCX Property Pages should return FALSE\r
@@ -208,6 +211,8 @@ BOOL CSyncDlg::PreTranslateMessage(MSG* pMsg)
 }\r
 void CSyncDlg::FetchOutList()\r
 {\r
+       if(!m_bInited)\r
+               return;\r
        m_OutChangeFileList.Clear();\r
        this->m_OutLogList.Clear();\r
 \r
@@ -242,11 +247,29 @@ void CSyncDlg::FetchOutList()
                CString localbranch;\r
                localbranch=this->m_ctrlLocalBranch.GetString();\r
 \r
-               if(localbranch != m_OutLocalBranch && m_OutRemoteBranch != remotebranch)\r
+               if(localbranch != m_OutLocalBranch || m_OutRemoteBranch != remotebranch)\r
                {\r
                        m_OutLogList.ClearText();\r
                        m_OutLogList.FillGitLog(NULL,CGit::     LOG_INFO_STAT| CGit::LOG_INFO_FILESTATE | CGit::LOG_INFO_SHOW_MERGEDFILE,\r
                                &remotebranch,&localbranch);\r
+                       \r
+                       CString str;\r
+                       if(m_OutLogList.GetItemCount() == 0)\r
+                       {                       \r
+                               str.Format(_T("No commits ahead \"%s\""),remotebranch);\r
+                               m_OutLogList.ShowText(str);\r
+                               this->m_ctrlStatus.SetWindowText(str);\r
+                               this->m_ctrlTabCtrl.ShowTab(m_OutChangeFileList.GetDlgCtrlID()-1,FALSE);\r
+                       }\r
+                       else\r
+                       {\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.Show(0,this->m_arOutChangeList);\r
+                               m_OutChangeFileList.SetEmptyString(CString(_T("No changed file")));\r
+                               this->m_ctrlTabCtrl.ShowTab(m_OutChangeFileList.GetDlgCtrlID()-1,TRUE);\r
+                       }\r
                }\r
                this->m_OutLocalBranch=localbranch;\r
                this->m_OutRemoteBranch=remotebranch;\r
index 1ca5fa1..f1ead82 100644 (file)
@@ -52,12 +52,15 @@ protected:
        CMFCTabCtrl m_ctrlTabCtrl;\r
        CBalloon                        m_tooltips;\r
        \r
+       BOOL            m_bInited;\r
+       \r
        CGitLogList     m_OutLogList;\r
        CGitLogList m_InLogList;\r
 \r
        CGitStatusListCtrl m_OutChangeFileList;\r
        CGitStatusListCtrl m_InChangeFileList;\r
        CGitStatusListCtrl m_ConflictFileList;\r
+       CTGitPathList   m_arOutChangeList;\r
 \r
        virtual void LocalBranchChange(){FetchOutList();};\r
        virtual void RemoteBranchChange(){FetchOutList();};\r