OSDN Git Service

Get Log From Git
authorFrank Li <lznuaa@gmail.com>
Fri, 21 Nov 2008 14:38:20 +0000 (22:38 +0800)
committerFrank Li <lznuaa@gmail.com>
Fri, 21 Nov 2008 14:38:20 +0000 (22:38 +0800)
15 files changed:
Git/Git.cpp
Git/Git.h
Git/Git.vcproj
Git/GitRev.cpp
Git/GitRev.h
Git/TGitPath.h
TortoiseProc/Commands/Command.cpp
TortoiseProc/LogDlg.cpp
TortoiseProc/LogDlgHelper.cpp
TortoiseProc/LogDlgHelper.h
TortoiseProc/SVNProgressDlg.h
TortoiseProc/TortoiseProc.vcproj
TortoiseProc/TortoiseProc.vcproj.FSL.B20596.user
TortoiseShell/TortoiseShell.suo
Utils/Utils.vcproj

index 61930cd..20ed425 100644 (file)
@@ -2,6 +2,7 @@
 #include "Git.h"\r
 #include "atlconv.h"\r
 #include "afx.h"\r
+#include "GitRev.h"\r
 \r
 #define MAX_DIRBUFFER 1000\r
 CGit g_Git;\r
@@ -50,20 +51,20 @@ int CGit::Run(CString cmd, CString* output)
                return GIT_ERROR_CREATE_PROCESS;\r
        }\r
        \r
+       CloseHandle(hWrite);\r
+\r
        DWORD readnumber;\r
        while(ReadFile(hRead,buffer,4090,&readnumber,NULL))\r
        {\r
                buffer[readnumber]=0;\r
                USES_CONVERSION;\r
                output->Append(A2W(buffer));\r
-               if(readnumber<4090)\r
-                       break;\r
        }\r
 \r
        \r
        CloseHandle(pi.hThread);\r
        CloseHandle(pi.hProcess);\r
-       CloseHandle(hWrite);\r
+\r
        CloseHandle(hRead);\r
        return GIT_SUCCESS;\r
 }\r
@@ -93,3 +94,38 @@ CString CGit::GetCurrentBranch(void)
        }\r
        return CString("");\r
 }\r
+\r
+int CGit::GetLog(CString& logOut)\r
+{\r
+\r
+       CString cmd;\r
+       CString log;\r
+       cmd=("git.cmd log -C --numstat --pretty=format:\"");\r
+       log.Format(_T("#<%c>%%n"),LOG_REV_ITEM_BEGIN);\r
+       cmd += log;\r
+       log.Format(_T("#<%c>%%an%%n"),LOG_REV_AUTHOR_NAME);\r
+       cmd += log;\r
+       log.Format(_T("#<%c>%%ae%%n"),LOG_REV_AUTHOR_EMAIL);\r
+       cmd += log;\r
+       log.Format(_T("#<%c>%%ai%%n"),LOG_REV_AUTHOR_DATE);\r
+       cmd += log;\r
+       log.Format(_T("#<%c>%%cn%%n"),LOG_REV_COMMIT_NAME);\r
+       cmd += log;\r
+       log.Format(_T("#<%c>%%ce%%n"),LOG_REV_COMMIT_EMAIL);\r
+       cmd += log;\r
+       log.Format(_T("#<%c>%%ci%%n"),LOG_REV_COMMIT_DATE);\r
+       cmd += log;\r
+       log.Format(_T("#<%c>%%s%%n"),LOG_REV_COMMIT_SUBJECT);\r
+       cmd += log;\r
+       log.Format(_T("#<%c>%%b%%n"),LOG_REV_COMMIT_BODY);\r
+       cmd += log;\r
+       log.Format(_T("#<%c>%%H%%n"),LOG_REV_COMMIT_HASH);\r
+       cmd += log;\r
+       log.Format(_T("#<%c>%%P%%n"),LOG_REV_COMMIT_PARENT);\r
+       cmd += log;\r
+       log.Format(_T("#<%c>%%n"),LOG_REV_COMMIT_FILE);\r
+       cmd += log;\r
+       cmd += CString(_T("\""));\r
+       Run(cmd,&logOut);\r
+       return 0;\r
+}\r
index 2712c1b..22a4fb5 100644 (file)
--- a/Git/Git.h
+++ b/Git/Git.h
@@ -17,6 +17,7 @@ public:
        CString GetUserEmail(void);\r
        CString GetCurrentBranch(void);\r
        CString m_CurrentDir;\r
+       int GetLog(CString& logOut);\r
 };\r
 \r
 extern CGit g_Git;
\ No newline at end of file
index 73597ed..8d98ff0 100644 (file)
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\resource.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
                                RelativePath=".\stdafx.h"\r
                                >\r
                        </File>\r
                        Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"\r
                        UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"\r
                        >\r
-                       <File\r
-                               RelativePath=".\Git.rc"\r
-                               >\r
-                       </File>\r
                </Filter>\r
                <File\r
                        RelativePath=".\ReadMe.txt"\r
index 3c918ad..edcd0ae 100644 (file)
@@ -1,6 +1,7 @@
 #include "StdAfx.h"\r
 #include "GitRev.h"\r
 \r
+\r
 GitRev::GitRev(void)\r
 {\r
 }\r
@@ -8,3 +9,108 @@ GitRev::GitRev(void)
 GitRev::~GitRev(void)\r
 {\r
 }\r
+\r
+#if 0\r
+GitRev::GitRev(GitRev & rev)\r
+{\r
+}\r
+GitRev& GitRev::operator=(GitRev &rev)\r
+{\r
+       return *this;\r
+}\r
+#endif\r
+int GitRev::ParserFromLog(CString &log)\r
+{\r
+       int pos=0;\r
+       CString one;\r
+       CString key;\r
+       CString text;\r
+       TCHAR mode;\r
+       CTGitPath  path;\r
+       this->m_Files.Clear();\r
+\r
+       while( pos>=0 )\r
+       {\r
+               one=log.Tokenize(_T("\n"),pos);\r
+               if(one[0]==_T('#') && one[1] == _T('<') && one[3] == _T('>'))\r
+               {\r
+                       text = one.Right(one.GetLength()-4);\r
+                       mode = one[2];\r
+                       switch(mode)\r
+                       {\r
+                       case LOG_REV_AUTHOR_NAME:\r
+                               this->m_AuthorName = text;\r
+                               break;\r
+                       case LOG_REV_AUTHOR_EMAIL:\r
+                               this->m_AuthorEmail = text;\r
+                               break;\r
+                       case LOG_REV_AUTHOR_DATE:\r
+                               this->m_AuthorDate =ConverFromString(text);\r
+                               break;\r
+                       case LOG_REV_COMMIT_NAME:\r
+                               this->m_CommitterName = text;\r
+                               break;\r
+                       case LOG_REV_COMMIT_EMAIL:\r
+                               this->m_CommitterEmail = text;\r
+                               break;\r
+                       case LOG_REV_COMMIT_DATE:\r
+                               this->m_CommitterDate =ConverFromString(text);\r
+                               break;\r
+                       case LOG_REV_COMMIT_SUBJECT:\r
+                               this->m_Subject = text;\r
+                               break;\r
+                       case LOG_REV_COMMIT_BODY:\r
+                               this->m_Body = text;\r
+                               break;\r
+                       case LOG_REV_COMMIT_HASH:\r
+                               this->m_CommitHash = text;\r
+                               break;\r
+                       case LOG_REV_COMMIT_PARENT:\r
+                               this->m_ParentHash.insert(this->m_ParentHash.end(),text);\r
+                               break;\r
+                       case LOG_REV_COMMIT_FILE:\r
+                               break;\r
+                       }\r
+               }else\r
+               {\r
+                       switch(mode)\r
+                       {\r
+                       case LOG_REV_COMMIT_BODY:\r
+                               this->m_Subject += one;\r
+                               break;\r
+                       case LOG_REV_COMMIT_FILE:\r
+                               if(one[0]==_T(':'))\r
+                               {\r
+                                       \r
+                               }else\r
+                               {\r
+                                       int tabstart=0;\r
+                                       \r
+                                       path.m_StatAdd=_wtoi(one.Tokenize(_T("\t"),tabstart));\r
+                                       if( tabstart< 0)\r
+                                               break;\r
+//                                     tabstart+=1;\r
+                                       path.m_StatDel=_wtoi(one.Tokenize(_T("\t"),tabstart));\r
+//                                     tabstart++;\r
+                                       path.SetFromGit(one.Right(one.GetLength()-tabstart));\r
+                               \r
+                                       this->m_Files.AddPath(path);\r
+                               }\r
+                               break;\r
+                       }\r
+               }\r
+       }\r
+       return 0;\r
+}\r
+\r
+CTime GitRev::ConverFromString(CString input)\r
+{\r
+       CTime tm(_wtoi(input.Mid(0,4)),\r
+                        _wtoi(input.Mid(5,2)),\r
+                        _wtoi(input.Mid(8,2)),\r
+                        _wtoi(input.Mid(11,2)),\r
+                        _wtoi(input.Mid(14,2)),\r
+                        _wtoi(input.Mid(17,2)),\r
+                        _wtoi(input.Mid(20,4)));\r
+       return tm;\r
+}\r
index 843037e..6bd54c8 100644 (file)
@@ -1,10 +1,30 @@
 #pragma once\r
+#include "GitStatus.h"\r
+#include "AtlTime.h"\r
+\r
+typedef std::vector<git_revnum_t> GIT_REV_LIST;\r
+\r
+#define LOG_REV_AUTHOR_NAME    _T('0')\r
+#define LOG_REV_AUTHOR_EMAIL   _T('1')\r
+#define LOG_REV_AUTHOR_DATE    _T('2')\r
+#define LOG_REV_COMMIT_NAME    _T('3')\r
+#define LOG_REV_COMMIT_EMAIL   _T('4')\r
+#define LOG_REV_COMMIT_DATE            _T('5')\r
+#define LOG_REV_COMMIT_SUBJECT _T('6')\r
+#define LOG_REV_COMMIT_BODY            _T('7')\r
+#define LOG_REV_COMMIT_HASH            _T('8')\r
+#define LOG_REV_COMMIT_PARENT   _T('9')\r
+#define LOG_REV_COMMIT_FILE            _T('A')\r
+#define LOG_REV_ITEM_BEGIN             _T('B')\r
+#define LOG_REV_ITEM_END               _T('C')\r
+\r
 \r
 class GitRev\r
 {\r
 public:\r
        GitRev(void);\r
-       GitRev(GitRev &rev);\r
+//     GitRev(GitRev &rev);\r
+//     GitRev &operator=(GitRev &rev);\r
        ~GitRev(void);\r
        enum\r
        {\r
@@ -14,4 +34,18 @@ public:
                REV_UNSPECIFIED = -4,   ///< unspecified revision\r
        };\r
 \r
+       CString m_AuthorName;\r
+       CString m_AuthorEmail;\r
+       CTime   m_AuthorDate;\r
+       CString m_CommitterName;\r
+       CString m_CommitterEmail;\r
+       CTime m_CommitterDate;\r
+       CString m_Subject;\r
+       CString m_Body;\r
+       git_revnum_t m_CommitHash;\r
+       GIT_REV_LIST m_ParentHash;\r
+       CTGitPathList m_Files;\r
+\r
+       int ParserFromLog(CString &log);\r
+       CTime ConverFromString(CString input);\r
 };\r
index c49ce61..ba8014c 100644 (file)
@@ -7,6 +7,9 @@ public:
        ~CTGitPath(void);\r
  CTGitPath(const CString& sUnknownPath);\r
 public:\r
+       int m_StatAdd;\r
+       int m_StatDel;\r
+\r
        /**\r
         * Set the path as an UTF8 string with forward slashes\r
         */\r
@@ -218,6 +221,8 @@ private:
        void SanitizeRootPath(CString& sPath, bool bIsForwardPath) const;\r
 \r
        void UpdateAttributes() const;\r
+       \r
+\r
 \r
 private:\r
        mutable CString m_sBackslashPath;\r
index 5ccb7c5..cae3793 100644 (file)
@@ -21,6 +21,7 @@
 \r
 #include "AboutCommand.h"\r
 #include "CommitCommand.h"\r
+#include "LogCommand.h"\r
 #if 0\r
 #include "AddCommand.h"\r
 #include "BlameCommand.h"\r
@@ -44,7 +45,7 @@
 #include "IgnoreCommand.h"\r
 #include "ImportCommand.h"\r
 #include "LockCommand.h"\r
-#include "LogCommand.h"\r
+\r
 #include "MergeCommand.h"\r
 #include "MergeAllCommand.h"\r
 #include "PasteCopyCommand.h"\r
@@ -205,6 +206,8 @@ Command * CommandServer::GetCommand(const CString& sCmd)
                return new AboutCommand;        \r
        case cmdCommit:\r
                return new CommitCommand;\r
+       case cmdLog:\r
+               return new LogCommand;\r
 #if 0\r
        case cmdAdd:\r
                return new AddCommand;\r
@@ -247,8 +250,7 @@ Command * CommandServer::GetCommand(const CString& sCmd)
                return new ImportCommand;\r
        case cmdLock:\r
                return new LockCommand;\r
-       case cmdLog:\r
-               return new LogCommand;\r
+\r
        case cmdMerge:\r
                return new MergeCommand;\r
        case cmdMergeAll:\r
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
index ad39bc1..2aa319b 100644 (file)
@@ -69,6 +69,7 @@ CStoreSelection::~CStoreSelection()
 \r
 void CLogDataVector::ClearAll()\r
 {\r
+#if 0\r
        if(size() > 0)\r
        {\r
                for(iterator it=begin(); it!=end(); ++it)\r
@@ -78,4 +79,5 @@ void CLogDataVector::ClearAll()
                }     \r
                clear();\r
        }\r
+#endif\r
 }
\ No newline at end of file
index 3cf05fb..8192495 100644 (file)
@@ -18,6 +18,7 @@
 //\r
 #pragma once\r
 #include "Git.h"\r
+#include "GitRev.h"\r
 #include "GitStatus.h"\r
 #include "ILogReceiver.h"\r
 \r
@@ -42,6 +43,7 @@ protected:
  * \ingroup TortoiseProc\r
  * Contains the data of one log entry, used in the log dialog\r
  */\r
+#if 0\r
 typedef struct LogEntryData\r
 {   \r
        git_revnum_t Rev;\r
@@ -59,22 +61,23 @@ typedef struct LogEntryData
        BOOL haschildren;\r
        DWORD childStackDepth;\r
 } LOGENTRYDATA, *PLOGENTRYDATA;\r
-\r
+#endif\r
 /**\r
  * \ingroup TortoiseProc\r
  * Helper class for the log dialog, handles all the log entries, including\r
  * sorting.\r
  */\r
-class CLogDataVector :         public std::vector<PLOGENTRYDATA>\r
+class CLogDataVector :         public std::vector<GitRev>\r
 {\r
 public:\r
        /// De-allocates log items.\r
        void ClearAll();\r
-\r
+       int  ParserFromLog();\r
+#if 0\r
        /// Ascending date sorting.\r
        struct AscDateSort\r
        {\r
-               bool operator()(PLOGENTRYDATA& pStart, PLOGENTRYDATA& pEnd)\r
+               bool operator()(GitRev& pStart, GitRev& pEnd)\r
                {\r
                        return pStart->tmDate < pEnd->tmDate;\r
                }\r
@@ -82,7 +85,7 @@ public:
        /// Descending date sorting.\r
        struct DescDateSort\r
        {\r
-               bool operator()(PLOGENTRYDATA& pStart, PLOGENTRYDATA& pEnd)\r
+               bool operator()(GitRev& pStart, GitRev& pEnd)\r
                {\r
                        return pStart->tmDate > pEnd->tmDate;\r
                }\r
@@ -90,7 +93,7 @@ public:
        /// Ascending revision sorting.\r
        struct AscRevSort\r
        {\r
-               bool operator()(PLOGENTRYDATA& pStart, PLOGENTRYDATA& pEnd)\r
+               bool operator()(GitRev& pStart, GitRev& pEnd)\r
                {\r
                        return pStart->Rev < pEnd->Rev;\r
                }\r
@@ -98,7 +101,7 @@ public:
        /// Descending revision sorting.\r
        struct DescRevSort\r
        {\r
-               bool operator()(PLOGENTRYDATA& pStart, PLOGENTRYDATA& pEnd)\r
+               bool operator()(GitRev& pStart, GitRev& pEnd)\r
                {\r
                        return pStart->Rev > pEnd->Rev;\r
                }\r
@@ -106,7 +109,7 @@ public:
        /// Ascending author sorting.\r
        struct AscAuthorSort\r
        {\r
-               bool operator()(PLOGENTRYDATA& pStart, PLOGENTRYDATA& pEnd)\r
+               bool operator()(GitRev& pStart, GitRev& pEnd)\r
                {\r
                        int ret = pStart->sAuthor.CompareNoCase(pEnd->sAuthor);\r
                        if (ret == 0)\r
@@ -117,7 +120,7 @@ public:
        /// Descending author sorting.\r
        struct DescAuthorSort\r
        {\r
-               bool operator()(PLOGENTRYDATA& pStart, PLOGENTRYDATA& pEnd)\r
+               bool operator()(GitRev& pStart, GitRev& pEnd)\r
                {\r
                        int ret = pStart->sAuthor.CompareNoCase(pEnd->sAuthor);\r
                        if (ret == 0)\r
@@ -128,7 +131,7 @@ public:
        /// Ascending bugID sorting.\r
        struct AscBugIDSort\r
        {\r
-               bool operator()(PLOGENTRYDATA& pStart, PLOGENTRYDATA& pEnd)\r
+               bool operator()(GitRev& pStart, GitRev& pEnd)\r
                {\r
                        int ret = pStart->sBugIDs.CompareNoCase(pEnd->sBugIDs);\r
                        if (ret == 0)\r
@@ -139,7 +142,7 @@ public:
        /// Descending bugID sorting.\r
        struct DescBugIDSort\r
        {\r
-               bool operator()(PLOGENTRYDATA& pStart, PLOGENTRYDATA& pEnd)\r
+               bool operator()(GitRev& pStart, GitRev& pEnd)\r
                {\r
                        int ret = pStart->sBugIDs.CompareNoCase(pEnd->sBugIDs);\r
                        if (ret == 0)\r
@@ -150,7 +153,7 @@ public:
        /// Ascending message sorting.\r
        struct AscMessageSort\r
        {\r
-               bool operator()(PLOGENTRYDATA& pStart, PLOGENTRYDATA& pEnd)\r
+               bool operator()(GitRev& pStart, GitRev& pEnd)\r
                {\r
                        return pStart->sShortMessage.CompareNoCase(pEnd->sShortMessage)<0;\r
                }\r
@@ -158,7 +161,7 @@ public:
        /// Descending message sorting.\r
        struct DescMessageSort\r
        {\r
-               bool operator()(PLOGENTRYDATA& pStart, PLOGENTRYDATA& pEnd)\r
+               bool operator()(GitRev& pStart, GitRev& pEnd)\r
                {\r
                        return pStart->sShortMessage.CompareNoCase(pEnd->sShortMessage)>0;\r
                }\r
@@ -166,7 +169,7 @@ public:
        /// Ascending action sorting\r
        struct AscActionSort\r
        {\r
-               bool operator() (PLOGENTRYDATA& pStart, PLOGENTRYDATA& pEnd)\r
+               bool operator() (GitRev& pStart, GitRev& pEnd)\r
                {\r
                        if (pStart->actions == pEnd->actions)\r
                                return pStart->Rev < pEnd->Rev;\r
@@ -176,11 +179,12 @@ public:
        /// Descending action sorting\r
        struct DescActionSort\r
        {\r
-               bool operator() (PLOGENTRYDATA& pStart, PLOGENTRYDATA& pEnd)\r
+               bool operator() (GitRev& pStart, GitRev& pEnd)\r
                {\r
                        if (pStart->actions == pEnd->actions)\r
                                return pStart->Rev > pEnd->Rev;\r
                        return pStart->actions > pEnd->actions;\r
                }\r
        };\r
+#endif\r
 };\r
index 9784a65..99e1ce9 100644 (file)
@@ -112,8 +112,8 @@ public:
        void SetSecondUrl(const CString& url) {m_url2.SetFromUnknown(url);}\r
        void SetCommitMessage(const CString& msg) {m_sMessage = msg;}\r
        \r
-       void SetRevision(const GitRev& rev) {m_Revision = rev;}\r
-       void SetRevisionEnd(const GitRev& rev) {m_RevisionEnd = rev;}\r
+//     void SetRevision(const GitRev& rev) {m_Revision = rev;}\r
+//     void SetRevisionEnd(const GitRev& rev) {m_RevisionEnd = rev;}\r
        \r
        void SetDiffOptions(const CString& opts) {m_diffoptions = opts;}\r
        void SetDepth(git_depth_t depth = git_depth_unknown) {m_depth = depth;}\r
index 881368b..0a497c5 100644 (file)
@@ -48,7 +48,7 @@
                        <Tool\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
-                               AdditionalIncludeDirectories="../ext/ResizableLib;../Git;&quot;../../ext/apr-util/include&quot;;&quot;../../ext/apr-util/xml/expat/lib&quot;;../../ext/Subversion/subversion/include;../../ext/Subversion/subversion/libsvn_client;../../ext/apr/include;../../ext/boost;..\TortoiseProc;..\Utils;..\SVN;..\..\ext\ResizableLib;..\crashrpt;..\TortoiseShell;&quot;..\..\ext\libintl\libintl3-win32\inc&quot;;..\ext\hunspell;..\ext\scintilla\include;..\Utils\TreePropSheet;..\Utils\ColourPickerXP;..\Utils\NewMenu;..\Utils\MiscUI;..\LogCache;&quot;../../ext/cyrus-sasl/include&quot;;../../../common/openssl/inc32;.\RevisionGraph"\r
+                               AdditionalIncludeDirectories="&quot;$InputDir&quot;;../ext/ResizableLib;../Git;&quot;../../ext/apr-util/include&quot;;&quot;../../ext/apr-util/xml/expat/lib&quot;;../../ext/Subversion/subversion/include;../../ext/Subversion/subversion/libsvn_client;../../ext/apr/include;../../ext/boost;..\TortoiseProc;..\Utils;..\SVN;..\..\ext\ResizableLib;..\crashrpt;..\TortoiseShell;&quot;..\..\ext\libintl\libintl3-win32\inc&quot;;..\ext\hunspell;..\ext\scintilla\include;..\Utils\TreePropSheet;..\Utils\ColourPickerXP;..\Utils\NewMenu;..\Utils\MiscUI;..\LogCache;&quot;../../ext/cyrus-sasl/include&quot;;../../../common/openssl/inc32;.\RevisionGraph"\r
                                PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;SVN_DEBUG;ENABLE_NLS;THESAURUS"\r
                                MinimalRebuild="true"\r
                                ExceptionHandling="2"\r
index 181890c..ce5b2b6 100644 (file)
@@ -11,7 +11,7 @@
                        <DebugSettings\r
                                Command="$(TargetPath)"\r
                                WorkingDirectory="D:\Profiles\b20596\tortoisegit"\r
-                               CommandArguments="/command:commit"\r
+                               CommandArguments="/command:log"\r
                                Attach="false"\r
                                DebuggerType="3"\r
                                Remote="1"\r
index 7374909..6334fe2 100644 (file)
Binary files a/TortoiseShell/TortoiseShell.suo and b/TortoiseShell/TortoiseShell.suo differ
index b452ddb..806a2f9 100644 (file)
                        UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
                        >\r
                        <File\r
-                               RelativePath=".\resource.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
                                RelativePath=".\stdafx.h"\r
                                >\r
                        </File>\r
                        Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"\r
                        UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"\r
                        >\r
-                       <File\r
-                               RelativePath=".\resource.rc"\r
-                               >\r
-                       </File>\r
                </Filter>\r
                <Filter\r
                        Name="MiscUi"\r