OSDN Git Service

gitdll call basic work
authorFrank Li <lznuaa@gmail.com>
Fri, 8 Jan 2010 14:38:19 +0000 (22:38 +0800)
committerFrank Li <lznuaa@gmail.com>
Fri, 8 Jan 2010 14:38:19 +0000 (22:38 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
ext/gitdll/gitdll.c
src/Git/Git.cpp
src/Git/Git.h
src/TortoiseProc/GitLogCache.cpp
src/TortoiseProc/GitLogListBase.cpp

index 3d60256..29bba8a 100644 (file)
@@ -214,7 +214,7 @@ int git_get_commit_first_parent(GIT_COMMIT *commit,GIT_COMMIT_LIST *list)
 int git_get_commit_next_parent(GIT_COMMIT_LIST *list, GIT_HASH hash)\r
 {\r
        struct commit_list *l = *(struct commit_list **)list;\r
-       if(list == NULL)\r
+       if(list == NULL || l==NULL)\r
                return -1;\r
 \r
        if(hash)\r
index baea8f9..737c60a 100644 (file)
@@ -473,7 +473,7 @@ int CGit::GetLog(BYTE_VECTOR& logOut, CString &hash,  CTGitPath *path ,int count
        return GetLog(&gitCall,hash,path,count,mask,from,to);\r
 }\r
 \r
-CString CGit::GetLogCmd( CString &hash, CTGitPath *path, int count, int mask,CString *from,CString *to)\r
+CString CGit::GetLogCmd( CString &hash, CTGitPath *path, int count, int mask,CString *from,CString *to,bool paramonly)\r
 {\r
        CString cmd;\r
        CString log;\r
@@ -533,13 +533,23 @@ CString CGit::GetLogCmd( CString &hash, CTGitPath *path, int count, int mask,CSt
        }\r
        param+=hash;\r
 \r
-       cmd.Format(_T("git.exe log %s -z --topo-order %s --parents --pretty=format:\""),\r
+       if(paramonly)\r
+               cmd.Format(_T("%s -z --topo-order %s --parents "),\r
+                               num,param);\r
+       else\r
+               cmd.Format(_T("git.exe log %s -z --topo-order %s --parents --pretty=format:\""),\r
                                num,param);\r
 \r
        BuildOutputFormat(log,!(mask&CGit::LOG_INFO_ONLY_HASH));\r
 \r
-       cmd += log;\r
-       cmd += CString(_T("\"  "))+hash+file;\r
+       if(paramonly)\r
+       {\r
+               cmd += hash+file;\r
+       }else\r
+       {\r
+               cmd += log;\r
+               cmd += CString(_T("\"  "))+hash+file;\r
+       }\r
 \r
        return cmd;\r
 }\r
index 425f5e4..2f2f659 100644 (file)
@@ -131,7 +131,7 @@ public:
                                                                CString *from=NULL,CString *to=NULL);\r
 \r
        CString GetLogCmd(CString &hash, CTGitPath *path = NULL,int count=-1,int InfoMask=LOG_INFO_FULL_DIFF|LOG_INFO_STAT|LOG_INFO_FILESTATE|LOG_INFO_BOUNDARY|LOG_INFO_DETECT_COPYRENAME|LOG_INFO_SHOW_MERGEDFILE,\r
-                                                               CString *from=NULL,CString *to=NULL);\r
+                                                               CString *from=NULL,CString *to=NULL, bool paramonly=false);\r
 \r
        BOOL EnumFiles(const TCHAR *pszProjectPath, const TCHAR *pszSubPath, unsigned int nFlags, WGENUMFILECB *pEnumCb, void *pUserData);\r
 \r
index 70145be..10c740b 100644 (file)
@@ -25,7 +25,8 @@ GitRev * CLogCache::GetCacheData(CGitHash &hash)
                {\r
                        return &m_HashMap[hash];\r
                }\r
-               return NULL;\r
+               m_HashMap[hash].m_CommitHash=hash;\r
+               return &m_HashMap[hash];\r
        }\r
        else\r
        {\r
@@ -37,7 +38,8 @@ GitRev * CLogCache::GetCacheData(CGitHash &hash)
                        return &m_HashMap[hash];\r
                }\r
        }\r
-       return NULL;\r
+       m_HashMap[hash].m_CommitHash=hash;\r
+       return &m_HashMap[hash];\r
 }\r
 int CLogCache::FetchCacheIndex(CString GitDir)\r
 {\r
index 58700ed..1c55845 100644 (file)
@@ -1748,6 +1748,7 @@ int CGitLogListBase::BeginFetchLog()
        ClearText();\r
 \r
        this->m_logEntries.ClearAll();\r
+       git_init();\r
 \r
        m_LogCache.FetchCacheIndex(g_Git.m_CurrentDir);\r
 \r
@@ -1763,10 +1764,16 @@ int CGitLogListBase::BeginFetchLog()
 //     if(this->m_bAllBranch)\r
        mask |= m_ShowMask;\r
        \r
+       this->m_arShownList.RemoveAll();\r
+\r
        if(m_bShowWC)\r
+       {\r
                this->m_logEntries.insert(m_logEntries.begin(),this->m_wcRev.m_CommitHash);\r
+               this->m_LogCache.m_HashMap[m_wcRev.m_CommitHash]=m_wcRev;\r
+               m_arShownList.Add(&m_wcRev);\r
+       }\r
 \r
-       CString cmd=g_Git.GetLogCmd(m_StartRef,path,-1,mask);\r
+       CString cmd=g_Git.GetLogCmd(m_StartRef,path,-1,mask,NULL,NULL,true);\r
 \r
        //this->m_logEntries.ParserFromLog();\r
        if(IsInWorkingThread())\r
@@ -1777,8 +1784,6 @@ int CGitLogListBase::BeginFetchLog()
        {\r
                SetItemCountEx(this->m_logEntries.size());\r
        }\r
-\r
-       this->m_arShownList.RemoveAll();\r
        \r
        if(git_open_log(&m_DllGitLog,CUnicodeUtils::GetMulti(cmd,CP_ACP).GetBuffer()))\r
        {\r
@@ -2071,6 +2076,7 @@ UINT CGitLogListBase::LogThread()
                }\r
        }\r
 \r
+       git_get_log_firstcommit(m_DllGitLog);\r
        GIT_COMMIT commit;\r
        t1=GetTickCount();\r
 \r
@@ -2105,14 +2111,14 @@ UINT CGitLogListBase::LogThread()
                {\r
                        //update UI\r
                        oldsize = m_logEntries.size();\r
-                       PostMessage(LVM_SETITEMCOUNT, (WPARAM) this->m_logEntries.size(),(LPARAM) LVSICF_NOINVALIDATEALL);\r
-                       ::PostMessage(this->GetParent()->m_hWnd,MSG_LOAD_PERCENTAGE,(WPARAM) GITLOG_END,0);\r
+                       //PostMessage(LVM_SETITEMCOUNT, (WPARAM) this->m_logEntries.size(),(LPARAM) LVSICF_NOINVALIDATEALL);\r
+                       //::PostMessage(this->GetParent()->m_hWnd,MSG_LOAD_PERCENTAGE,(WPARAM) GITLOG_END,0);\r
                }               \r
        }\r
        \r
        //Update UI;\r
-       PostMessage(LVM_SETITEMCOUNT, (WPARAM) this->m_logEntries.size(),(LPARAM) LVSICF_NOINVALIDATEALL);\r
-       ::PostMessage(this->GetParent()->m_hWnd,MSG_LOAD_PERCENTAGE,(WPARAM) GITLOG_END,0);\r
+       //PostMessage(LVM_SETITEMCOUNT, (WPARAM) this->m_logEntries.size(),(LPARAM) LVSICF_NOINVALIDATEALL);\r
+       //::PostMessage(this->GetParent()->m_hWnd,MSG_LOAD_PERCENTAGE,(WPARAM) GITLOG_END,0);\r
 \r
        InterlockedExchange(&m_bThreadRunning, FALSE);\r
 \r