OSDN Git Service

Add Version Graph Tree Code but there are some problem
[tortoisegit/TortoiseGitJp.git] / src / Git / GitStatusListCtrl.cpp
index ba29f81..8f3995a 100644 (file)
@@ -157,6 +157,7 @@ CGitStatusListCtrl::CGitStatusListCtrl() : CListCtrl()
     , m_nSortedColumn(-1)\r
        , m_sNoPropValueText(MAKEINTRESOURCE(IDS_STATUSLIST_NOPROPVALUE))\r
 {\r
+       m_FileLoaded=0;\r
        m_critSec.Init();\r
 }\r
 \r
@@ -283,10 +284,19 @@ bool CGitStatusListCtrl::SetBackgroundImage(UINT nID)
 BOOL CGitStatusListCtrl::GetStatus ( const CTGitPathList& pathList\r
                                    , bool bUpdate /* = FALSE */\r
                                    , bool bShowIgnores /* = false */\r
+                                                                  , bool bShowUnRev\r
                                    , bool bShowUserProps /* = false */)\r
 {\r
-#if 0\r
        Locker lock(m_critSec);\r
+       int mask= CGitStatusListCtrl::FILELIST_MODIFY;\r
+       if(bShowIgnores)\r
+               mask|= CGitStatusListCtrl::FILELIST_IGNORE;\r
+       if(bShowUnRev)\r
+               mask|= CGitStatusListCtrl::FILELIST_UNVER;\r
+       this->UpdateFileList(mask,bUpdate,(CTGitPathList*)&pathList);\r
+\r
+#if 0\r
+       \r
        int refetchcounter = 0;\r
        BOOL bRet = TRUE;\r
        Invalidate();\r
@@ -4295,7 +4305,7 @@ CTGitPath CGitStatusListCtrl::GetCommonDirectory(bool bStrict)
        int nListItems = GetItemCount();\r
        for (int i=0; i<nListItems; ++i)\r
        {\r
-               const CTGitPath& baseDirectory = GetListEntry(i)->GetPath().GetDirectory();\r
+               CTGitPath& baseDirectory = *(CTGitPath*)this->GetItemData(i);\r
                if(commonBaseDirectory.IsEmpty())\r
                {\r
                        commonBaseDirectory = baseDirectory;\r
@@ -5362,14 +5372,33 @@ void CGitStatusListCtrl::NotifyCheck()
        }\r
 }\r
 \r
-int CGitStatusListCtrl::UpdateFileList(git_revnum_t hash)\r
+int CGitStatusListCtrl::UpdateFileList(git_revnum_t hash,CTGitPathList *list)\r
 {\r
        CString out;\r
        this->m_bBusy=TRUE;\r
        if(hash == GIT_REV_ZERO)\r
        {\r
-               CString cmd(_T("git.cmd diff-index --raw HEAD --numstat -C -M"));\r
-               g_Git.Run(cmd,&out);\r
+               int count = 0;\r
+               if(list == NULL)\r
+                       count = 1;\r
+               else\r
+                       count = list->GetCount();\r
+\r
+               for(int i=0;i<count;i++)\r
+               {       \r
+                       CString cmdout;\r
+                       CString cmd;\r
+                       if(list == NULL)\r
+                               cmd=(_T("git.cmd diff-index --raw HEAD --numstat -C -M"));\r
+                       else\r
+                               cmd.Format(_T("git.cmd diff-index --raw HEAD --numstat -C -M -- \"%s\""),(*list)[i].GetGitPathString());\r
+\r
+                       g_Git.Run(cmd,&cmdout);\r
+\r
+                       out+=cmdout;\r
+               }\r
+\r
+\r
                this->m_StatusFileList.ParserFromLog(out);\r
        }\r
        for(int i=0;i<m_StatusFileList.GetCount();i++)\r
@@ -5381,9 +5410,9 @@ int CGitStatusListCtrl::UpdateFileList(git_revnum_t hash)
        this->m_bBusy=FALSE;\r
        return 0;\r
 }\r
-int CGitStatusListCtrl::UpdateUnRevFileList()\r
+int CGitStatusListCtrl::UpdateUnRevFileList(CTGitPathList *List)\r
 {\r
-       this->m_UnRevFileList.FillUnRev(CTGitPath::LOGACTIONS_UNVER);\r
+       this->m_UnRevFileList.FillUnRev(CTGitPath::LOGACTIONS_UNVER,List);\r
        for(int i=0;i<m_UnRevFileList.GetCount();i++)\r
        {\r
                CTGitPath * gitpatch=(CTGitPath*)&m_UnRevFileList[i];\r
@@ -5393,9 +5422,9 @@ int CGitStatusListCtrl::UpdateUnRevFileList()
        return 0;\r
 }\r
 \r
-int CGitStatusListCtrl::UpdateIgnoreFileList()\r
+int CGitStatusListCtrl::UpdateIgnoreFileList(CTGitPathList *List)\r
 {\r
-       this->m_IgnoreFileList.FillUnRev(CTGitPath::LOGACTIONS_UNVER|CTGitPath::LOGACTIONS_IGNORE);\r
+       this->m_IgnoreFileList.FillUnRev(CTGitPath::LOGACTIONS_UNVER|CTGitPath::LOGACTIONS_IGNORE,List);\r
        for(int i=0;i<m_IgnoreFileList.GetCount();i++)\r
        {\r
                CTGitPath * gitpatch=(CTGitPath*)&m_IgnoreFileList[i];\r
@@ -5404,13 +5433,13 @@ int CGitStatusListCtrl::UpdateIgnoreFileList()
        }\r
        return 0;\r
 }\r
-int CGitStatusListCtrl::UpdateFileList(int mask,bool once)\r
+int CGitStatusListCtrl::UpdateFileList(int mask,bool once,CTGitPathList *List)\r
 {\r
        if(mask&CGitStatusListCtrl::FILELIST_MODIFY)\r
        {\r
                if(once || (!(m_FileLoaded&CGitStatusListCtrl::FILELIST_MODIFY)))\r
                {\r
-                       UpdateFileList(GIT_REV_ZERO);\r
+                       UpdateFileList(git_revnum_t(GIT_REV_ZERO),List);\r
                        m_FileLoaded|=CGitStatusListCtrl::FILELIST_MODIFY;\r
                }\r
        }\r
@@ -5418,7 +5447,7 @@ int CGitStatusListCtrl::UpdateFileList(int mask,bool once)
        {\r
                if(once || (!(m_FileLoaded&CGitStatusListCtrl::FILELIST_UNVER)))\r
                {\r
-                       UpdateUnRevFileList();\r
+                       UpdateUnRevFileList(List);\r
                        m_FileLoaded|=CGitStatusListCtrl::FILELIST_UNVER;\r
                }\r
        }\r