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
{\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
\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
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
void *m_ProcData;\r
CStoreSelection* m_pStoreSelection;\r
MAP_HASH_NAME m_HashMap;\r
+\r
+\r
+\r
+ \r
};\r
\r
\r
\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
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