OSDN Git Service

Get Log From Git
[tortoisegit/TortoiseGitJp.git] / TortoiseProc / LogDlg.cpp
index 5ba6f3a..7906359 100644 (file)
@@ -313,6 +313,9 @@ BOOL CLogDlg::OnInitDialog()
        Column.fmt = LVCFMT_RIGHT;\r
        m_LogList.SetColumn(0, &Column); \r
        \r
+//     CString log;\r
+//     g_Git.GetLog(log);\r
+\r
        temp.LoadString(IDS_LOG_ACTIONS);\r
        m_LogList.InsertColumn(1, temp);\r
        temp.LoadString(IDS_LOG_AUTHOR);\r
@@ -549,7 +552,7 @@ void CLogDlg::FillLogMessageCtrl(bool bShow /* = true*/)
        // we fill here the log message rich edit control,\r
        // and also populate the changed files list control\r
        // according to the selected revision(s).\r
-\r
+#if 0\r
        CWnd * pMsgView = GetDlgItem(IDC_MSGVIEW);\r
        // empty the log message view\r
        pMsgView->SetWindowText(_T(" "));\r
@@ -661,6 +664,7 @@ void CLogDlg::FillLogMessageCtrl(bool bShow /* = true*/)
        else\r
                SetSortArrow(&m_ChangedFileListCtrl, -1, false);\r
        m_ChangedFileListCtrl.SetRedraw(TRUE);\r
+#endif\r
 }\r
 \r
 void CLogDlg::OnBnClickedGetall()\r
@@ -1036,11 +1040,11 @@ UINT CLogDlg::LogThreadEntry(LPVOID pVoid)
        return ((CLogDlg*)pVoid)->LogThread();\r
 }\r
 \r
-\r
+GitRev g_rev;\r
 //this is the thread function which calls the subversion function\r
 UINT CLogDlg::LogThread()\r
 {\r
-#if 0\r
+\r
        InterlockedExchange(&m_bThreadRunning, TRUE);\r
 \r
     //does the user force the cache to refresh (shift or control key down)?\r
@@ -1070,36 +1074,36 @@ UINT CLogDlg::LogThread()
        m_LogProgress.SetRange32(0, 100);\r
        m_LogProgress.SetPos(0);\r
        GetDlgItem(IDC_PROGRESS)->ShowWindow(TRUE);\r
-       git_revnum_t r = -1;\r
+//     git_revnum_t r = -1;\r
        \r
        // get the repository root url, because the changed-files-list has the\r
        // paths shown there relative to the repository root.\r
-       CTGitPath rootpath;\r
-    BOOL succeeded = GetRootAndHead(m_path, rootpath, r);\r
+//     CTGitPath rootpath;\r
+//  BOOL succeeded = GetRootAndHead(m_path, rootpath, r);\r
 \r
-    m_sRepositoryRoot = rootpath.GetGitPathString();\r
-    m_sURL = m_path.GetGitPathString();\r
+//    m_sRepositoryRoot = rootpath.GetGitPathString();\r
+//    m_sURL = m_path.GetGitPathString();\r
 \r
     // we need the UUID to unambigously identify the log cache\r
-    if (logCachePool.IsEnabled())\r
-        m_sUUID = logCachePool.GetRepositoryInfo().GetRepositoryUUID (rootpath);\r
+//    if (logCachePool.IsEnabled())\r
+//        m_sUUID = logCachePool.GetRepositoryInfo().GetRepositoryUUID (rootpath);\r
 \r
     // if the log dialog is started from a working copy, we need to turn that\r
     // local path into an url here\r
-    if (succeeded)\r
-    {\r
-        if (!m_path.IsUrl())\r
-        {\r
-               m_sURL = GetURLFromPath(m_path);\r
+//    if (succeeded)\r
+//    {\r
+//        if (!m_path.IsUrl())\r
+//        {\r
+//             m_sURL = GetURLFromPath(m_path);\r
 \r
                // The URL is escaped because Git::logReceiver\r
                // returns the path in a native format\r
-               m_sURL = CPathUtils::PathUnescape(m_sURL);\r
-        }\r
-        m_sRelativeRoot = m_sURL.Mid(CPathUtils::PathUnescape(m_sRepositoryRoot).GetLength());\r
-               m_sSelfRelativeURL = m_sRelativeRoot;\r
-    }\r
-\r
+//             m_sURL = CPathUtils::PathUnescape(m_sURL);\r
+  //      }\r
+//        m_sRelativeRoot = m_sURL.Mid(CPathUtils::PathUnescape(m_sRepositoryRoot).GetLength());\r
+//             m_sSelfRelativeURL = m_sRelativeRoot;\r
+  //  }\r
+#if 0\r
     if (succeeded && !m_mergePath.IsEmpty() && m_mergedRevs.empty())\r
     {\r
            // in case we got a merge path set, retrieve the merge info\r
@@ -1221,21 +1225,33 @@ UINT CLogDlg::LogThread()
        m_DateTo.SetRange(&m_timFrom, &m_timTo);\r
        m_DateFrom.SetTime(&m_timFrom);\r
        m_DateTo.SetTime(&m_timTo);\r
-\r
+#endif\r
        DialogEnableWindow(IDC_GETALL, TRUE);\r
+       m_LogList.ClearText();\r
+\r
+       this->m_logEntries.ClearAll();\r
+       this->m_logEntries.ParserFromLog();\r
+       m_LogList.SetItemCountEx(this->m_logEntries.size());\r
        \r
+       this->m_arShownList.Add(&g_rev);\r
+       g_rev.m_AuthorName.Append(_T("Frank Li"));\r
+       \r
+#if 0  \r
        if (!m_bShowedAll)\r
                DialogEnableWindow(IDC_NEXTHUNDRED, TRUE);\r
+#endif\r
        DialogEnableWindow(IDC_CHECK_STOPONCOPY, TRUE);\r
        DialogEnableWindow(IDC_INCLUDEMERGE, TRUE);\r
        DialogEnableWindow(IDC_STATBUTTON, TRUE);\r
        DialogEnableWindow(IDC_REFRESH, TRUE);\r
 \r
+#if 0\r
        LogCache::CRepositoryInfo& cachedProperties = logCachePool.GetRepositoryInfo();\r
        SetDlgTitle(cachedProperties.IsOffline (m_sUUID, m_sRepositoryRoot, false));\r
 \r
        GetDlgItem(IDC_PROGRESS)->ShowWindow(FALSE);\r
        m_bCancelled = true;\r
+#endif\r
        InterlockedExchange(&m_bThreadRunning, FALSE);\r
        m_LogList.RedrawItems(0, m_arShownList.GetCount());\r
        m_LogList.SetRedraw(false);\r
@@ -1258,16 +1274,18 @@ UINT CLogDlg::LogThread()
                        m_LogList.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);\r
                }\r
        }\r
+\r
        if (!GetDlgItem(IDOK)->IsWindowVisible())\r
        {\r
                temp.LoadString(IDS_MSGBOX_OK);\r
                SetDlgItemText(IDCANCEL, temp);\r
        }\r
+\r
        RefreshCursor();\r
        // make sure the filter is applied (if any) now, after we refreshed/fetched\r
        // the log messages\r
        PostMessage(WM_TIMER, LOGFILTER_TIMER);\r
-#endif\r
+\r
        return 0;\r
 }\r
 \r
@@ -2393,7 +2411,7 @@ void CLogDlg::OnBnClickedStatbutton()
 \r
 void CLogDlg::OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult)\r
 {\r
-#if 0\r
+\r
        NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );\r
        // Take the default processing unless we set this to something else below.\r
        *pResult = CDRF_DODEFAULT;\r
@@ -2421,26 +2439,29 @@ void CLogDlg::OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult)
 \r
                        if (m_arShownList.GetCount() > (INT_PTR)pLVCD->nmcd.dwItemSpec)\r
                        {\r
-                               PLOGENTRYDATA data = (PLOGENTRYDATA)m_arShownList.GetAt(pLVCD->nmcd.dwItemSpec);\r
+                               GitRev* data = (GitRev*)m_arShownList.GetAt(pLVCD->nmcd.dwItemSpec);\r
                                if (data)\r
                                {\r
+#if 0\r
                                        if (data->bCopiedSelf)\r
                                        {\r
                                                // only change the background color if the item is not 'hot' (on vista with themes enabled)\r
                                                if (!theme.IsAppThemed() || !m_bVista || ((pLVCD->nmcd.uItemState & CDIS_HOT)==0))\r
                                                        pLVCD->clrTextBk = GetSysColor(COLOR_MENU);\r
                                        }\r
+\r
                                        if (data->bCopies)\r
                                                crText = m_Colors.GetColor(CColors::Modified);\r
-                                       if ((data->childStackDepth)||(m_mergedRevs.find(data->Rev) != m_mergedRevs.end()))\r
-                                               crText = GetSysColor(COLOR_GRAYTEXT);\r
-                                       if (data->Rev == m_wcRev)\r
-                                       {\r
-                                               SelectObject(pLVCD->nmcd.hdc, m_boldFont);\r
+#endif\r
+//                                     if ((data->childStackDepth)||(m_mergedRevs.find(data->Rev) != m_mergedRevs.end()))\r
+//                                             crText = GetSysColor(COLOR_GRAYTEXT);\r
+//                                     if (data->Rev == m_wcRev)\r
+//                                     {\r
+//                                             SelectObject(pLVCD->nmcd.hdc, m_boldFont);\r
                                                // We changed the font, so we're returning CDRF_NEWFONT. This\r
                                                // tells the control to recalculate the extent of the text.\r
-                                               *pResult = CDRF_NOTIFYSUBITEMDRAW | CDRF_NEWFONT;\r
-                                       }\r
+//                                             *pResult = CDRF_NOTIFYSUBITEMDRAW | CDRF_NEWFONT;\r
+//                                     }\r
                                }\r
                        }\r
                        if (m_arShownList.GetCount() == (INT_PTR)pLVCD->nmcd.dwItemSpec)\r
@@ -2470,7 +2491,7 @@ void CLogDlg::OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                                int             iconwidth = ::GetSystemMetrics(SM_CXSMICON);\r
                                int             iconheight = ::GetSystemMetrics(SM_CYSMICON);\r
 \r
-                               PLOGENTRYDATA pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(pLVCD->nmcd.dwItemSpec));\r
+                               GitRev* pLogEntry = reinterpret_cast<GitRev *>(m_arShownList.GetAt(pLVCD->nmcd.dwItemSpec));\r
 \r
                                // Get the selected state of the\r
                                // item being drawn.\r
@@ -2498,6 +2519,7 @@ void CLogDlg::OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                                        }\r
                                        else\r
                                        {\r
+#if 0\r
                                                if (pLogEntry->bCopiedSelf)\r
                                                {\r
                                                        // unfortunately, the pLVCD->nmcd.uItemState does not contain valid\r
@@ -2514,6 +2536,7 @@ void CLogDlg::OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                                                                }\r
                                                        }\r
                                                }\r
+#endif\r
                                        }\r
 \r
                                        if (theme.IsBackgroundPartiallyTransparent(LVP_LISTDETAIL, state))\r
@@ -2533,9 +2556,9 @@ void CLogDlg::OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                                        }\r
                                        else\r
                                        {\r
-                                               if (pLogEntry->bCopiedSelf)\r
-                                                       brush = ::CreateSolidBrush(::GetSysColor(COLOR_MENU));\r
-                                               else\r
+                                               //if (pLogEntry->bCopiedSelf)\r
+                                               //      brush = ::CreateSolidBrush(::GetSysColor(COLOR_MENU));\r
+                                               //else\r
                                                        brush = ::CreateSolidBrush(::GetSysColor(COLOR_WINDOW));\r
                                        }\r
                                        if (brush == NULL)\r
@@ -2544,7 +2567,7 @@ void CLogDlg::OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                                        ::FillRect(pLVCD->nmcd.hdc, &rect, brush);\r
                                        ::DeleteObject(brush);\r
                                }\r
-\r
+#if 0\r
                                // Draw the icon(s) into the compatible DC\r
                                if (pLogEntry->actions & LOGACTIONS_MODIFIED)\r
                                        ::DrawIconEx(pLVCD->nmcd.hdc, rect.left + ICONITEMBORDER, rect.top, m_hModifiedIcon, iconwidth, iconheight, 0, NULL, DI_NORMAL);\r
@@ -2561,7 +2584,7 @@ void CLogDlg::OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                                if (pLogEntry->actions & LOGACTIONS_REPLACED)\r
                                        ::DrawIconEx(pLVCD->nmcd.hdc, rect.left+nIcons*iconwidth + ICONITEMBORDER, rect.top, m_hReplacedIcon, iconwidth, iconheight, 0, NULL, DI_NORMAL);\r
                                nIcons++;\r
-\r
+#endif\r
                                *pResult = CDRF_SKIPDEFAULT;\r
                                return;\r
                        }\r
@@ -2569,7 +2592,7 @@ void CLogDlg::OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                break;\r
        }\r
        *pResult = CDRF_DODEFAULT;\r
-#endif\r
+\r
 }\r
 void CLogDlg::OnNMCustomdrawChangedFileList(NMHDR *pNMHDR, LRESULT *pResult)\r
 {\r
@@ -2792,6 +2815,7 @@ LRESULT CLogDlg::OnClickedInfoIcon(WPARAM /*wParam*/, LPARAM lParam)
 \r
 LRESULT CLogDlg::OnClickedCancelFilter(WPARAM /*wParam*/, LPARAM /*lParam*/)\r
 {\r
+#if 0\r
        KillTimer(LOGFILTER_TIMER);\r
 \r
        m_sFilterText.Empty();\r
@@ -2826,6 +2850,7 @@ LRESULT CLogDlg::OnClickedCancelFilter(WPARAM /*wParam*/, LPARAM /*lParam*/)
        GetDlgItem(IDC_SEARCHEDIT)->ShowWindow(SW_SHOW);\r
        GetDlgItem(IDC_SEARCHEDIT)->SetFocus();\r
        UpdateLogInfoLabel();\r
+#endif\r
        return 0L;      \r
 }\r
 \r
@@ -2878,9 +2903,9 @@ void CLogDlg::OnLvnGetdispinfoLoglist(NMHDR *pNMHDR, LRESULT *pResult)
 \r
        // Which item number?\r
        int itemid = pItem->iItem;\r
-       PLOGENTRYDATA pLogEntry = NULL;\r
+       GitRev * pLogEntry = NULL;\r
        if (itemid < m_arShownList.GetCount())\r
-               pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(pItem->iItem));\r
+               pLogEntry = reinterpret_cast<GitRev*>(m_arShownList.GetAt(pItem->iItem));\r
     \r
        // Which column?\r
        switch (pItem->iSubItem)\r
@@ -2888,6 +2913,7 @@ void CLogDlg::OnLvnGetdispinfoLoglist(NMHDR *pNMHDR, LRESULT *pResult)
        case 0: //revision\r
                if (pLogEntry)\r
                {\r
+#if 0\r
                        _stprintf_s(pItem->pszText, pItem->cchTextMax, _T("%ld"), pLogEntry->Rev);\r
                        // to make the child entries indented, add spaces\r
                        size_t len = _tcslen(pItem->pszText);\r
@@ -2900,27 +2926,33 @@ void CLogDlg::OnLvnGetdispinfoLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                                nSpaces--;\r
                        }\r
                        *pBuf = 0;\r
+#endif\r
                }\r
                break;\r
        case 1: //action -- no text in the column\r
                break;\r
        case 2: //author\r
                if (pLogEntry)\r
-                       lstrcpyn(pItem->pszText, (LPCTSTR)pLogEntry->sAuthor, pItem->cchTextMax);\r
+                       lstrcpyn(pItem->pszText, (LPCTSTR)pLogEntry->m_AuthorName, pItem->cchTextMax);\r
                break;\r
        case 3: //date\r
+#if 0\r
                if (pLogEntry)\r
                        lstrcpyn(pItem->pszText, (LPCTSTR)pLogEntry->sDate, pItem->cchTextMax);\r
                break;\r
+#endif\r
        case 4: //message or bug id\r
+#if 0\r
                if (m_bShowBugtraqColumn)\r
                {\r
                        if (pLogEntry)\r
                                lstrcpyn(pItem->pszText, (LPCTSTR)pLogEntry->sBugIDs, pItem->cchTextMax);\r
                        break;\r
                }\r
+#endif\r
                // fall through here!\r
        case 5:\r
+#if 0\r
                if (pLogEntry)\r
                {\r
                        // Add as many characters as possible from the short log message\r
@@ -2941,6 +2973,7 @@ void CLogDlg::OnLvnGetdispinfoLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                        sTemp.LoadString(IDS_LOG_STOPONCOPY_HINT);\r
                        lstrcpyn(pItem->pszText, sTemp, pItem->cchTextMax);\r
                }\r
+#endif\r
                break;\r
        default:\r
                ASSERT(false);\r
@@ -3016,6 +3049,7 @@ void CLogDlg::OnLvnGetdispinfoChangedFileList(NMHDR *pNMHDR, LRESULT *pResult)
 \r
 void CLogDlg::OnEnChangeSearchedit()\r
 {\r
+#if 0\r
        UpdateData();\r
        if (m_sFilterText.IsEmpty())\r
        {\r
@@ -3049,6 +3083,7 @@ void CLogDlg::OnEnChangeSearchedit()
                SetTimer(LOGFILTER_TIMER, 1000, NULL);\r
        else\r
                KillTimer(LOGFILTER_TIMER);\r
+#endif\r
 }\r
 \r
 bool CLogDlg::ValidateRegexp(LPCTSTR regexp_str, tr1::wregex& pat, bool bMatchCase /* = false */)\r
@@ -3335,10 +3370,13 @@ void CLogDlg::OnDtnDatetimechangeDatefrom(NMHDR * /*pNMHDR*/, LRESULT *pResult)
 \r
 BOOL CLogDlg::IsEntryInDateRange(int i)\r
 {\r
+#if 0\r
        __time64_t time = m_logEntries[i]->tmDate;\r
        if ((time >= m_tFrom)&&(time <= m_tTo))\r
                return TRUE;\r
+#endif\r
        return FALSE;\r
+\r
 }\r
 \r
 CTGitPathList CLogDlg::GetChangedPathsFromSelectedRevisions(bool bRelativePaths /* = false */, bool bUseFilter /* = true */)\r
@@ -3387,6 +3425,7 @@ CTGitPathList CLogDlg::GetChangedPathsFromSelectedRevisions(bool bRelativePaths
 \r
 void CLogDlg::SortByColumn(int nSortColumn, bool bAscending)\r
 {\r
+#if 0\r
        switch(nSortColumn)\r
        {\r
        case 0: // Revision\r
@@ -3443,6 +3482,7 @@ void CLogDlg::SortByColumn(int nSortColumn, bool bAscending)
                ATLASSERT(0);\r
                break;\r
        }\r
+#endif\r
 }\r
 \r
 void CLogDlg::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)\r
@@ -3650,12 +3690,12 @@ void CLogDlg::OnLvnOdfinditemLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                return;\r
        if (pFindInfo->lvfi.psz == 0)\r
                return;\r
-               \r
+#if 0\r
        CString sCmp = pFindInfo->lvfi.psz;\r
        CString sRev;   \r
        for (int i=pFindInfo->iStart; i<m_arShownList.GetCount(); ++i)\r
        {\r
-               PLOGENTRYDATA pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(i));\r
+               GitRev * pLogEntry = reinterpret_cast<GitRev*>(m_arShownList.GetAt(i));\r
                sRev.Format(_T("%ld"), pLogEntry->Rev);\r
                if (pFindInfo->lvfi.flags & LVFI_PARTIAL)\r
                {\r
@@ -3698,7 +3738,7 @@ void CLogDlg::OnLvnOdfinditemLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                        }\r
                }\r
        }\r
-\r
+#endif\r
        *pResult = -1;\r
 }\r
 \r
@@ -3733,6 +3773,7 @@ void CLogDlg::OnBnClickedIncludemerge()
 \r
 void CLogDlg::UpdateLogInfoLabel()\r
 {\r
+#if 0\r
        git_revnum_t rev1 = 0;\r
        git_revnum_t rev2 = 0;\r
        long selectedrevs = 0;\r
@@ -3747,6 +3788,7 @@ void CLogDlg::UpdateLogInfoLabel()
        CString sTemp;\r
        sTemp.Format(IDS_LOG_LOGINFOSTRING, m_arShownList.GetCount(), rev2, rev1, selectedrevs);\r
        m_sLogInfo = sTemp;\r
+#endif\r
        UpdateData(FALSE);\r
 }\r
 \r
@@ -5023,3 +5065,37 @@ CString CLogDlg::GetAbsoluteUrlFromRelativeUrl(const CString& url)
        }\r
        return url;\r
 }\r
+\r
+\r
+int CLogDataVector::ParserFromLog()\r
+{\r
+       CString log;\r
+       GitRev rev;\r
+       g_Git.GetLog(log);\r
+\r
+       CString begin;\r
+       begin.Format(_T("#<%c>"),LOG_REV_ITEM_BEGIN);\r
+       \r
+       if(log.GetLength()==0)\r
+               return 0;\r
+       \r
+       int start=4;\r
+       int length;\r
+       int next =1;\r
+       while( next>0 )\r
+       {\r
+               next=log.Find(begin,start);\r
+               if(next >0 )\r
+                       length = next - start+4;\r
+               else\r
+                       length = log.GetLength()-start+4;\r
+\r
+               CString onelog =log;\r
+               onelog=log.Mid(start -4,length);\r
+               rev.ParserFromLog(onelog);\r
+               this->push_back(rev);\r
+               start = next +4;\r
+       }\r
+\r
+       return 0;\r
+}\r