From 7624c10b2629e632191a1ed7329d35e6f0f9fe46 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Tue, 20 Jan 2009 23:07:14 +0800 Subject: [PATCH] Add Show All branch and Whole Project button at log dialog Signed-off-by: Frank Li --- src/TortoiseProc/GitLogListBase.cpp | 11 ++++++-- src/TortoiseProc/GitLogListBase.h | 12 +++++++++ src/TortoiseProc/LogDlg.cpp | 54 +++++++++++-------------------------- 3 files changed, 37 insertions(+), 40 deletions(-) diff --git a/src/TortoiseProc/GitLogListBase.cpp b/src/TortoiseProc/GitLogListBase.cpp index 8d1c162..df70d6e 100644 --- a/src/TortoiseProc/GitLogListBase.cpp +++ b/src/TortoiseProc/GitLogListBase.cpp @@ -87,6 +87,9 @@ CGitLogListBase::CGitLogListBase():CHintListCtrl() m_From=CTime(1970,1,2,0,0,0); m_To=CTime::GetCurrentTime(); m_bAllBranch = FALSE; + m_LoadingThread = NULL; + + m_bExitThread=FALSE; } CGitLogListBase::~CGitLogListBase() @@ -1409,10 +1412,11 @@ int CGitLogListBase::FetchLogAsync(CALLBACK_PROCESS *proc,void * data) { m_ProcCallBack=proc; m_ProcData=data; - + m_bExitThread=FALSE; InterlockedExchange(&m_bThreadRunning, TRUE); InterlockedExchange(&m_bNoDispUpdates, TRUE); - if (AfxBeginThread(LogThreadEntry, this)==NULL) + m_LoadingThread = AfxBeginThread(LogThreadEntry, this); + if (m_LoadingThread ==NULL) { InterlockedExchange(&m_bThreadRunning, FALSE); InterlockedExchange(&m_bNoDispUpdates, FALSE); @@ -1510,6 +1514,9 @@ UINT CGitLogListBase::LogThread() if(m_ProcCallBack) m_ProcCallBack(m_ProcData,percent); + + if(m_bExitThread) + break; } if(updated==m_logEntries.size()) break; diff --git a/src/TortoiseProc/GitLogListBase.h b/src/TortoiseProc/GitLogListBase.h index 4fbe806..d668f14 100644 --- a/src/TortoiseProc/GitLogListBase.h +++ b/src/TortoiseProc/GitLogListBase.h @@ -159,6 +159,14 @@ public: m_HashMap.clear(); g_Git.GetMapHashToFriendName(m_HashMap); } + void TerminateThread() + { + if(this->m_LoadingThread) + AfxTermThread((HINSTANCE)m_LoadingThread->m_hThread); + }; + + volatile bool m_bExitThread; + CWinThread* m_LoadingThread; protected: DECLARE_MESSAGE_MAP() afx_msg void OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult); @@ -205,6 +213,10 @@ protected: void *m_ProcData; CStoreSelection* m_pStoreSelection; MAP_HASH_NAME m_HashMap; + + + + }; diff --git a/src/TortoiseProc/LogDlg.cpp b/src/TortoiseProc/LogDlg.cpp index 1fa14ff..9ec53da 100644 --- a/src/TortoiseProc/LogDlg.cpp +++ b/src/TortoiseProc/LogDlg.cpp @@ -596,53 +596,30 @@ void CLogDlg::OnBnClickedGetall() void CLogDlg::GetAll(bool bForceAll /* = false */) { -#if 0 + // fetch all requested log messages, either the specified range or // really *all* available log messages. - UpdateData(); + ///UpdateData(); INT_PTR entry = m_btnShow.GetCurrentEntry(); if (bForceAll) entry = 0; switch (entry) { - case 0: // show all - - m_endrev = 0; - m_startrev = m_LogRevision; - if (m_bStrict) - m_bShowedAll = true; - + case 0: // show all branch; + m_LogList.m_bAllBranch=true; break; - case 1: // show range - { - - // ask for a revision range - CRevisionRangeDlg dlg; - dlg.SetStartRevision(m_startrev); - dlg.SetEndRevision( (m_endrev>=0) ? m_endrev : 0); - if (dlg.DoModal()!=IDOK) - { - return; - } - m_endrev = dlg.GetEndRevision(); - m_startrev = dlg.GetStartRevision(); - if (((m_endrev.IsNumber())&&(m_startrev.IsNumber()))|| - (m_endrev.IsHead()||m_startrev.IsHead())) - { - if (((LONG)m_startrev < (LONG)m_endrev)|| - (m_endrev.IsHead())) - { - git_revnum_t temp = m_startrev; - m_startrev = m_endrev; - m_endrev = temp; - } - } - m_bShowedAll = false; - } - + case 1: // show whole project + m_LogList.m_Path.Reset(); + SetWindowText(m_sTitle + _T(" - ")); break; } + m_LogList.m_bExitThread=TRUE; + ::WaitForSingleObject(m_LogList.m_LoadingThread->m_hThread,INFINITE); + + m_LogList.Clear(); + m_LogList.FetchLogAsync(LogCallBack,this); +#if 0 m_ChangedFileListCtrl.SetItemCountEx(0); m_ChangedFileListCtrl.Invalidate(); // We need to create CStoreSelection on the heap or else @@ -769,8 +746,9 @@ void CLogDlg::OnCancel() temp2.LoadString(IDS_MSGBOX_CANCEL); if ((temp.Compare(temp2)==0)||(this->IsThreadRunning())) { - m_bCancelled = true; - return; + //m_bCancelled = true; + //return; + m_LogList.TerminateThread(); } UpdateData(); if (m_bSaveStrict) -- 2.11.0