OSDN Git Service

Fix Commit Show Duplicate Item Problem
[tortoisegit/TortoiseGitJp.git] / src / Git / GitRev.cpp
index f1e4f37..05fb892 100644 (file)
@@ -1,10 +1,12 @@
 #include "StdAfx.h"\r
 #include "GitRev.h"\r
-\r
+#include "Git.h"\r
 \r
 GitRev::GitRev(void)\r
 {\r
        m_Action=0;\r
+       m_IsFull = 0;\r
+       m_IsUpdateing = 0;\r
 }\r
 \r
 GitRev::~GitRev(void)\r
@@ -20,6 +22,35 @@ GitRev& GitRev::operator=(GitRev &rev)
        return *this;\r
 }\r
 #endif\r
+void GitRev::Clear()\r
+{\r
+       this->m_Action=0;\r
+       this->m_Files.Clear();\r
+       this->m_Action=0;\r
+       this->m_ParentHash.clear();\r
+       m_CommitterName.Empty();\r
+       m_CommitterEmail.Empty();\r
+       m_Body.Empty();\r
+       m_Subject.Empty();\r
+       m_CommitHash.Empty();\r
+\r
+}\r
+int GitRev::CopyFrom(GitRev &rev)\r
+{\r
+       m_AuthorName    =rev.m_AuthorName       ;\r
+       m_AuthorEmail   =rev.m_AuthorEmail      ;\r
+       m_AuthorDate    =rev.m_AuthorDate       ;\r
+       m_CommitterName =rev.m_CommitterName    ;\r
+       m_CommitterEmail=rev.m_CommitterEmail;\r
+       m_CommitterDate =rev.m_CommitterDate    ;\r
+       m_Subject               =rev.m_Subject          ;\r
+       m_Body                  =rev.m_Body                     ;\r
+       m_CommitHash    =rev.m_CommitHash       ;\r
+       m_ParentHash    =rev.m_ParentHash       ;\r
+       m_Files                 =rev.m_Files                    ;       \r
+       m_Action                =rev.m_Action           ;\r
+       return 0;\r
+}\r
 int GitRev::ParserFromLog(CString &log)\r
 {\r
        int pos=0;\r
@@ -41,6 +72,9 @@ int GitRev::ParserFromLog(CString &log)
                        mode = one[2];\r
                        switch(mode)\r
                        {\r
+                       case LOG_REV_ITEM_BEGIN:\r
+                               this->Clear();\r
+\r
                        case LOG_REV_AUTHOR_NAME:\r
                                this->m_AuthorName = text;\r
                                break;\r
@@ -104,3 +138,22 @@ CTime GitRev::ConverFromString(CString input)
                         _wtoi(input.Mid(20,4)));\r
        return tm;\r
 }\r
+\r
+int GitRev::SafeFetchFullInfo(CGit *git)\r
+{\r
+       if(InterlockedExchange(&m_IsUpdateing,TRUE) == FALSE)\r
+       {\r
+               //GitRev rev;\r
+               CString onelog;\r
+               git->GetLog(onelog,m_CommitHash,1);\r
+               CString oldhash=m_CommitHash;\r
+               ParserFromLog(onelog);\r
+               \r
+               //ASSERT(oldhash==m_CommitHash);\r
+\r
+               InterlockedExchange(&m_IsUpdateing,FALSE);\r
+               InterlockedExchange(&m_IsFull,TRUE);\r
+               return 0;\r
+       }\r
+       return -1;\r
+}
\ No newline at end of file