OSDN Git Service

BranchView: Show commit subject and date
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / BrowseRefsDlg.cpp
index 16e77fd..25f77f2 100644 (file)
@@ -90,8 +90,9 @@ typedef std::map<CString,CString> MAP_STRING_STRING;
 \r
 void CBrowseRefsDlg::Refresh()\r
 {\r
-       m_RefMap.clear();\r
-       g_Git.GetMapHashToFriendName(m_RefMap);\r
+//     m_RefMap.clear();\r
+//     g_Git.GetMapHashToFriendName(m_RefMap);\r
+               \r
 \r
        m_RefTreeCtrl.DeleteAllItems();\r
        m_TreeRoot.m_ShadowTree.clear();\r
@@ -99,19 +100,46 @@ void CBrowseRefsDlg::Refresh()
        m_TreeRoot.m_hTree=m_RefTreeCtrl.InsertItem(L"Refs",NULL,NULL);\r
        m_RefTreeCtrl.SetItemData(m_TreeRoot.m_hTree,(DWORD_PTR)&m_TreeRoot);\r
 \r
+       CString allRefs;\r
+       g_Git.Run(L"git for-each-ref --format="\r
+                         L"%(refname)%04"\r
+                         L"%(objectname)%04"\r
+                         L"%(authordate:relative)%04"\r
+                         L"%(subject)%04"\r
+                         L"%(authorname)",\r
+                         &allRefs,CP_UTF8);\r
 \r
-       MAP_STRING_STRING refName;\r
+       int linePos=0;\r
+       CString singleRef;\r
+\r
+       MAP_STRING_STRING refMap;\r
 \r
        //First sort on ref name\r
-       for(MAP_HASH_NAME::iterator iterRef=m_RefMap.begin();iterRef!=m_RefMap.end();++iterRef)\r
-               for(STRING_VECTOR::iterator iterRefName=iterRef->second.begin();iterRefName!=iterRef->second.end();++iterRefName)\r
-                       refName[*iterRefName]=iterRef->first;\r
+       while(!(singleRef=allRefs.Tokenize(L"\r\n",linePos)).IsEmpty())\r
+       {\r
+               int valuePos=0;\r
+               CString refName=singleRef.Tokenize(L"\04",valuePos);\r
+               CString refRest=singleRef.Mid(valuePos);\r
+               refMap[refName]=refRest;\r
+       }\r
+\r
+\r
+\r
+//     for(MAP_HASH_NAME::iterator iterRef=m_RefMap.begin();iterRef!=m_RefMap.end();++iterRef)\r
+//             for(STRING_VECTOR::iterator iterRefName=iterRef->second.begin();iterRefName!=iterRef->second.end();++iterRefName)\r
+//                     refName[*iterRefName]=iterRef->first;\r
 \r
        //Populate ref tree\r
-       for(MAP_STRING_STRING::iterator iterRefName=refName.begin();iterRefName!=refName.end();++iterRefName)\r
+       for(MAP_STRING_STRING::iterator iterRefMap=refMap.begin();iterRefMap!=refMap.end();++iterRefMap)\r
        {\r
-               CShadowTree& treeLeaf=GetTreeNode(iterRefName->first);\r
-               treeLeaf.m_csRef=iterRefName->second;\r
+               CShadowTree& treeLeaf=GetTreeNode(iterRefMap->first);\r
+               CString values=iterRefMap->second;\r
+\r
+               int valuePos=0;\r
+               treeLeaf.m_csRef=     values.Tokenize(L"\04",valuePos);\r
+               treeLeaf.m_csDate=    values.Tokenize(L"\04",valuePos);\r
+               treeLeaf.m_csSubject= values.Tokenize(L"\04",valuePos);\r
+               treeLeaf.m_csAuthor=  values.Tokenize(L"\04",valuePos);\r
        }\r
 \r
        CString currHead;\r
@@ -213,6 +241,8 @@ void CBrowseRefsDlg::FillListCtrlForShadowTree(CShadowTree* pTree, CString refNa
 \r
                m_ListRefLeafs.SetItemData(indexItem,(DWORD_PTR)pTree);\r
                m_ListRefLeafs.SetItemText(indexItem,0,refNamePrefix+pTree->m_csName);\r
+               m_ListRefLeafs.SetItemText(indexItem,1,refNamePrefix+pTree->m_csDate);\r
+               m_ListRefLeafs.SetItemText(indexItem,2,refNamePrefix+pTree->m_csSubject);\r
                m_ListRefLeafs.SetItemText(indexItem,3,pTree->m_csRef);\r
        }\r
        else\r