OSDN Git Service

Add Show All branch and Whole Project button at log dialog
authorFrank Li <lznuaa@gmail.com>
Tue, 20 Jan 2009 15:07:14 +0000 (23:07 +0800)
committerFrank Li <lznuaa@gmail.com>
Tue, 20 Jan 2009 15:07:14 +0000 (23:07 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/GitLogListBase.cpp
src/TortoiseProc/GitLogListBase.h
src/TortoiseProc/LogDlg.cpp

index 8d1c162..df70d6e 100644 (file)
@@ -87,6 +87,9 @@ CGitLogListBase::CGitLogListBase():CHintListCtrl()
        m_From=CTime(1970,1,2,0,0,0);\r
        m_To=CTime::GetCurrentTime();\r
     m_bAllBranch = FALSE;\r
+       m_LoadingThread = NULL;\r
+\r
+       m_bExitThread=FALSE;\r
 }\r
 \r
 CGitLogListBase::~CGitLogListBase()\r
@@ -1409,10 +1412,11 @@ int CGitLogListBase::FetchLogAsync(CALLBACK_PROCESS *proc,void * data)
 {\r
        m_ProcCallBack=proc;\r
        m_ProcData=data;\r
-\r
+       m_bExitThread=FALSE;\r
        InterlockedExchange(&m_bThreadRunning, TRUE);\r
        InterlockedExchange(&m_bNoDispUpdates, TRUE);\r
-       if (AfxBeginThread(LogThreadEntry, this)==NULL)\r
+       m_LoadingThread = AfxBeginThread(LogThreadEntry, this);\r
+       if (m_LoadingThread ==NULL)\r
        {\r
                InterlockedExchange(&m_bThreadRunning, FALSE);\r
                InterlockedExchange(&m_bNoDispUpdates, FALSE);\r
@@ -1510,6 +1514,9 @@ UINT CGitLogListBase::LogThread()
                        \r
                        if(m_ProcCallBack)\r
                                m_ProcCallBack(m_ProcData,percent);\r
+\r
+                       if(m_bExitThread)\r
+                               break;\r
                }\r
                if(updated==m_logEntries.size())\r
                        break;\r
index 4fbe806..d668f14 100644 (file)
@@ -159,6 +159,14 @@ public:
                m_HashMap.clear();\r
                g_Git.GetMapHashToFriendName(m_HashMap);\r
        }\r
+       void TerminateThread()\r
+       {\r
+               if(this->m_LoadingThread)\r
+                       AfxTermThread((HINSTANCE)m_LoadingThread->m_hThread);\r
+       };\r
+       \r
+       volatile bool           m_bExitThread;\r
+       CWinThread*                     m_LoadingThread;\r
 protected:\r
        DECLARE_MESSAGE_MAP()\r
        afx_msg void OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult);\r
@@ -205,6 +213,10 @@ protected:
        void                            *m_ProcData;\r
        CStoreSelection*        m_pStoreSelection;\r
        MAP_HASH_NAME           m_HashMap;\r
+\r
+\r
+\r
+       \r
 };\r
 \r
 \r
index 1fa14ff..9ec53da 100644 (file)
@@ -596,53 +596,30 @@ void CLogDlg::OnBnClickedGetall()
 \r
 void CLogDlg::GetAll(bool bForceAll /* = false */)\r
 {\r
-#if 0\r
+\r
        // fetch all requested log messages, either the specified range or\r
        // really *all* available log messages.\r
-       UpdateData();\r
+       ///UpdateData();\r
        INT_PTR entry = m_btnShow.GetCurrentEntry();\r
        if (bForceAll)\r
                entry = 0;\r
 \r
        switch (entry)\r
        {\r
-       case 0: // show all\r
-       \r
-               m_endrev = 0;\r
-               m_startrev = m_LogRevision;\r
-               if (m_bStrict)\r
-                       m_bShowedAll = true;\r
-\r
+       case 0: // show all branch;\r
+               m_LogList.m_bAllBranch=true;\r
                break;\r
-       case 1: // show range\r
-               {\r
-\r
-                       // ask for a revision range\r
-                       CRevisionRangeDlg dlg;\r
-                       dlg.SetStartRevision(m_startrev);\r
-                       dlg.SetEndRevision( (m_endrev>=0) ? m_endrev : 0);\r
-                       if (dlg.DoModal()!=IDOK)\r
-                       {\r
-                               return;\r
-                       }\r
-                       m_endrev = dlg.GetEndRevision();\r
-                       m_startrev = dlg.GetStartRevision();\r
-                       if (((m_endrev.IsNumber())&&(m_startrev.IsNumber()))||\r
-                               (m_endrev.IsHead()||m_startrev.IsHead()))\r
-                       {\r
-                               if (((LONG)m_startrev < (LONG)m_endrev)||\r
-                                       (m_endrev.IsHead()))\r
-                               {\r
-                                       git_revnum_t temp = m_startrev;\r
-                                       m_startrev = m_endrev;\r
-                                       m_endrev = temp;\r
-                               }\r
-                       }\r
-                       m_bShowedAll = false;\r
-               }\r
-\r
+       case 1: // show whole project\r
+               m_LogList.m_Path.Reset();\r
+               SetWindowText(m_sTitle + _T(" - "));\r
                break;\r
        }\r
+       m_LogList.m_bExitThread=TRUE;\r
+       ::WaitForSingleObject(m_LogList.m_LoadingThread->m_hThread,INFINITE);\r
+       \r
+       m_LogList.Clear();\r
+       m_LogList.FetchLogAsync(LogCallBack,this);\r
+#if 0\r
        m_ChangedFileListCtrl.SetItemCountEx(0);\r
        m_ChangedFileListCtrl.Invalidate();\r
        // We need to create CStoreSelection on the heap or else\r
@@ -769,8 +746,9 @@ void CLogDlg::OnCancel()
        temp2.LoadString(IDS_MSGBOX_CANCEL);\r
        if ((temp.Compare(temp2)==0)||(this->IsThreadRunning()))\r
        {\r
-               m_bCancelled = true;\r
-               return;\r
+               //m_bCancelled = true;\r
+               //return;\r
+               m_LogList.TerminateThread();\r
        }\r
        UpdateData();\r
        if (m_bSaveStrict)\r