12 GitRev::~GitRev(void)
\r
17 GitRev::GitRev(GitRev & rev)
\r
20 GitRev& GitRev::operator=(GitRev &rev)
\r
25 void GitRev::Clear()
\r
28 this->m_Files.Clear();
\r
30 this->m_ParentHash.clear();
\r
31 m_CommitterName.Empty();
\r
32 m_CommitterEmail.Empty();
\r
35 m_CommitHash.Empty();
\r
39 int GitRev::CopyFrom(GitRev &rev)
\r
41 m_AuthorName =rev.m_AuthorName ;
\r
42 m_AuthorEmail =rev.m_AuthorEmail ;
\r
43 m_AuthorDate =rev.m_AuthorDate ;
\r
44 m_CommitterName =rev.m_CommitterName ;
\r
45 m_CommitterEmail=rev.m_CommitterEmail;
\r
46 m_CommitterDate =rev.m_CommitterDate ;
\r
47 m_Subject =rev.m_Subject ;
\r
48 m_Body =rev.m_Body ;
\r
49 m_CommitHash =rev.m_CommitHash ;
\r
50 m_ParentHash =rev.m_ParentHash ;
\r
51 m_Files =rev.m_Files ;
\r
52 m_Action =rev.m_Action ;
\r
56 int GitRev::ParserFromLog(CString &log)
\r
65 this->m_Files.Clear();
\r
70 one=log.Tokenize(_T("\n"),pos);
\r
71 if(one[0]==_T('#') && one[1] == _T('<') && one[3] == _T('>'))
\r
73 text = one.Right(one.GetLength()-4);
\r
77 case LOG_REV_ITEM_BEGIN:
\r
80 case LOG_REV_AUTHOR_NAME:
\r
81 this->m_AuthorName = text;
\r
83 case LOG_REV_AUTHOR_EMAIL:
\r
84 this->m_AuthorEmail = text;
\r
86 case LOG_REV_AUTHOR_DATE:
\r
87 this->m_AuthorDate =ConverFromString(text);
\r
89 case LOG_REV_COMMIT_NAME:
\r
90 this->m_CommitterName = text;
\r
92 case LOG_REV_COMMIT_EMAIL:
\r
93 this->m_CommitterEmail = text;
\r
95 case LOG_REV_COMMIT_DATE:
\r
96 this->m_CommitterDate =ConverFromString(text);
\r
98 case LOG_REV_COMMIT_SUBJECT:
\r
99 this->m_Subject = text;
\r
101 case LOG_REV_COMMIT_BODY:
\r
102 this->m_Body = text +_T("\n");
\r
104 case LOG_REV_COMMIT_HASH:
\r
105 this->m_CommitHash = text.Right(40);
\r
106 if(text.GetLength()>40)
\r
108 this->m_Mark=text[0];
\r
111 case LOG_REV_COMMIT_PARENT:
\r
112 while(text.GetLength()>0)
\r
114 this->m_ParentHash.insert(this->m_ParentHash.end(),text.Left(40));
\r
115 if(text.GetLength()>40)
\r
116 text=text.Right(text.GetLength()-41);
\r
121 case LOG_REV_COMMIT_FILE:
\r
128 case LOG_REV_COMMIT_BODY:
\r
129 this->m_Body += one+_T("\n");
\r
131 case LOG_REV_COMMIT_FILE:
\r
132 filelist += one +_T("\n");
\r
138 this->m_Files.ParserFromLog(filelist);
\r
139 this->m_Action=this->m_Files.GetAction();
\r
143 CTime GitRev::ConverFromString(CString input)
\r
145 CTime tm(_wtoi(input.Mid(0,4)),
\r
146 _wtoi(input.Mid(5,2)),
\r
147 _wtoi(input.Mid(8,2)),
\r
148 _wtoi(input.Mid(11,2)),
\r
149 _wtoi(input.Mid(14,2)),
\r
150 _wtoi(input.Mid(17,2)),
\r
151 _wtoi(input.Mid(20,4)));
\r
155 int GitRev::SafeFetchFullInfo(CGit *git)
\r
157 if(InterlockedExchange(&m_IsUpdateing,TRUE) == FALSE)
\r
161 TCHAR oldmark=this->m_Mark;
\r
163 git->GetLog(onelog,m_CommitHash,NULL,1,CGit::LOG_INFO_STAT|CGit::LOG_INFO_FILESTATE);
\r
164 CString oldhash=m_CommitHash;
\r
165 ParserFromLog(onelog);
\r
167 //ASSERT(oldhash==m_CommitHash);
\r
169 this->m_Mark=oldmark; //parser full log will cause old mark overwrited.
\r
170 //So we need keep old bound mark.
\r
172 InterlockedExchange(&m_IsUpdateing,FALSE);
\r
173 InterlockedExchange(&m_IsFull,TRUE);
\r