本文整理汇总了C++中GitRev::GetSubject方法的典型用法代码示例。如果您正苦于以下问题:C++ GitRev::GetSubject方法的具体用法?C++ GitRev::GetSubject怎么用?C++ GitRev::GetSubject使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GitRev
的用法示例。
在下文中一共展示了GitRev::GetSubject方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ParserFromRefLog
int CLogDataVector::ParserFromRefLog(CString ref)
{
if(g_Git.m_IsUseGitDLL)
{
git_for_each_reflog_ent(CUnicodeUtils::GetUTF8(ref),AddTolist,this);
for(int i=0;i<size();i++)
{
m_pLogCache->m_HashMap[at(i)].m_Ref.Format(_T("%s{%d}"), ref,i);
}
}
else
{
CString cmd, out;
GitRev rev;
cmd.Format(_T("git.exe reflog show %s"),ref);
if (g_Git.Run(cmd, &out, NULL, CP_UTF8))
return -1;
int pos=0;
while(pos>=0)
{
CString one=out.Tokenize(_T("\n"),pos);
int ref=one.Find(_T(' '),0);
if(ref<0)
continue;
rev.Clear();
rev.m_CommitHash=g_Git.GetHash(one.Left(ref));
int action=one.Find(_T(' '),ref+1);
int message;
if(action>0)
{
rev.m_Ref=one.Mid(ref+1,action-ref-2);
message=one.Find(_T(":"),action);
if(message>0)
{
rev.m_RefAction=one.Mid(action+1,message-action-1);
rev.GetSubject()=one.Right(one.GetLength()-message-1);
}
}
this->m_pLogCache->m_HashMap[rev.m_CommitHash]=rev;
this->push_back(rev.m_CommitHash);
}
}
return 0;
}
示例2: FillLogMessageCtrl
void CRebaseDlg::FillLogMessageCtrl()
{
int selCount = m_CommitList.GetSelectedCount();
if (selCount == 1 && (m_RebaseStage == CHOOSE_BRANCH || m_RebaseStage == CHOOSE_COMMIT_PICK_MODE))
{
POSITION pos = m_CommitList.GetFirstSelectedItemPosition();
int selIndex = m_CommitList.GetNextSelectedItem(pos);
GitRev* pLogEntry = reinterpret_cast<GitRev *>(m_CommitList.m_arShownList.SafeGetAt(selIndex));
m_FileListCtrl.UpdateWithGitPathList(pLogEntry->GetFiles(&m_CommitList));
m_FileListCtrl.m_CurrentVersion = pLogEntry->m_CommitHash;
m_FileListCtrl.Show(GITSLC_SHOWVERSIONED);
m_LogMessageCtrl.Call(SCI_SETREADONLY, FALSE);
m_LogMessageCtrl.SetText(pLogEntry->GetSubject() + _T("\n") + pLogEntry->GetBody());
m_LogMessageCtrl.Call(SCI_SETREADONLY, TRUE);
}
}
示例3: AddTolist
int AddTolist(unsigned char * /*osha1*/, unsigned char *nsha1, const char * /*name*/, unsigned long /*time*/, int /*sz*/, const char *msg, void *data)
{
CLogDataVector *vector = (CLogDataVector*)data;
GitRev rev;
rev.m_CommitHash=(char*)nsha1;
CString one;
g_Git.StringAppend(&one, (BYTE *)msg);
int message=one.Find(_T(":"),0);
if(message>0)
{
rev.m_RefAction=one.Left(message);
rev.GetSubject()=one.Mid(message+1);
}
vector->m_pLogCache->m_HashMap[rev.m_CommitHash]=rev;
vector->insert(vector->begin(),rev.m_CommitHash);
return 0;
}
示例4: AddBranchToolTips
void CRebaseDlg::AddBranchToolTips(CHistoryCombo *pBranch)
{
if(pBranch)
{
CString text=pBranch->GetString();
CString tooltip;
GitRev rev;
rev.GetCommit(text);
tooltip.Format(_T("CommitHash:%s\nCommit by: %s %s\n <b>%s</b> \n %s"),
rev.m_CommitHash.ToString(),
rev.GetAuthorName(),
CLoglistUtils::FormatDateAndTime(rev.GetAuthorDate(), DATE_LONGDATE),
rev.GetSubject(),
rev.GetBody());
pBranch->DisableTooltip();
this->m_tooltips.AddTool(pBranch->GetComboBoxCtrl(),tooltip);
}
}
示例5: AddToRefLoglist
int AddToRefLoglist(unsigned char * /*osha1*/, unsigned char *nsha1, const char * /*name*/, unsigned long time, int /*sz*/, const char *msg, void *data)
{
std::vector<GitRev> *vector = (std::vector<GitRev> *)data;
GitRev rev;
rev.m_CommitHash = (char *)nsha1;
rev.GetCommitterDate() = CTime(time);
CString one;
g_Git.StringAppend(&one, (BYTE *)msg);
int message = one.Find(_T(":"), 0);
if (message > 0)
{
rev.m_RefAction = one.Left(message);
rev.GetSubject() = one.Mid(message + 1);
}
vector->insert(vector->begin(), rev);
return 0;
}
示例6: DoRebase
int CRebaseDlg::DoRebase()
{
CString cmd,out;
if(m_CurrentRebaseIndex <0)
return 0;
if(m_CurrentRebaseIndex >= m_CommitList.GetItemCount() )
return 0;
GitRev *pRev = (GitRev*)m_CommitList.m_arShownList[m_CurrentRebaseIndex];
int mode=pRev->GetAction(&m_CommitList) & CTGitPath::LOGACTIONS_REBASE_MODE_MASK;
CString nocommit;
if( mode== CTGitPath::LOGACTIONS_REBASE_SKIP)
{
pRev->GetAction(&m_CommitList)|= CTGitPath::LOGACTIONS_REBASE_DONE;
return 0;
}
if( mode != CTGitPath::LOGACTIONS_REBASE_PICK )
{
this->m_SquashMessage+= pRev->GetSubject();
this->m_SquashMessage+= _T("\n");
this->m_SquashMessage+= pRev->GetBody();
}
else
this->m_SquashMessage.Empty();
if(mode == CTGitPath::LOGACTIONS_REBASE_SQUASH)
nocommit=_T(" --no-commit ");
CString log;
log.Format(_T("%s %d: %s"),CTGitPath::GetActionName(mode),this->GetCurrentCommitID(),pRev->m_CommitHash.ToString());
AddLogString(log);
AddLogString(pRev->GetSubject());
if (pRev->GetSubject().IsEmpty())
{
CMessageBox::Show(m_hWnd, _T("Found an empty commit message. You have to enter one or rebase cannot proceed."), _T("TortoiseGit"), MB_OK | MB_ICONEXCLAMATION);
mode = CTGitPath::LOGACTIONS_REBASE_EDIT;
}
cmd.Format(_T("git.exe cherry-pick %s %s"),nocommit,pRev->m_CommitHash.ToString());
if(g_Git.Run(cmd,&out,CP_UTF8))
{
AddLogString(out);
CTGitPathList list;
if(g_Git.ListConflictFile(list))
{
AddLogString(_T("Get conflict files fail"));
return -1;
}
if(list.GetCount() == 0 )
{
if(mode == CTGitPath::LOGACTIONS_REBASE_PICK)
{
pRev->GetAction(&m_CommitList)|= CTGitPath::LOGACTIONS_REBASE_DONE;
return 0;
}
if(mode == CTGitPath::LOGACTIONS_REBASE_EDIT)
{
this->m_RebaseStage = REBASE_EDIT ;
return -1; // Edit return -1 to stop rebase.
}
// Squash Case
if(CheckNextCommitIsSquash())
{ // no squash
// let user edit last commmit message
this->m_RebaseStage = REBASE_SQUASH_EDIT;
return -1;
}
}
if(mode == CTGitPath::LOGACTIONS_REBASE_SQUASH)
m_RebaseStage = REBASE_SQUASH_CONFLICT;
else
m_RebaseStage = REBASE_CONFLICT;
return -1;
}
else
{
AddLogString(out);
if(mode == CTGitPath::LOGACTIONS_REBASE_PICK)
{
pRev->GetAction(&m_CommitList)|= CTGitPath::LOGACTIONS_REBASE_DONE;
return 0;
}
if(mode == CTGitPath::LOGACTIONS_REBASE_EDIT)
{
this->m_RebaseStage = REBASE_EDIT ;
return -1; // Edit return -1 to stop rebase.
}
// Squash Case
if(CheckNextCommitIsSquash())
{ // no squash
// let user edit last commmit message
this->m_RebaseStage = REBASE_SQUASH_EDIT;
return -1;
}
else if(mode == CTGitPath::LOGACTIONS_REBASE_SQUASH)
//.........这里部分代码省略.........
示例7: UpdateProperties
void CPropertiesWnd::UpdateProperties(GitRev *rev)
{
if(rev)
{
m_CommitHash->SetValue(rev->m_CommitHash.ToString());
m_AuthorName->SetValue(rev->GetAuthorName());
m_AuthorDate->SetValue(rev->GetAuthorDate().Format(_T("%Y-%m-%d %H:%M")));
m_AuthorEmail->SetValue(rev->GetAuthorEmail());
m_CommitterName->SetValue(rev->GetAuthorName());
m_CommitterEmail->SetValue(rev->GetCommitterEmail());
m_CommitterDate->SetValue(rev->GetCommitterDate().Format(_T("%Y-%m-%d %H:%M")));
m_Subject->SetValue(rev->GetSubject());
m_Body->SetValue(rev->GetBody().Trim());
RemoveParent();
m_ParentGroup;
CLogDataVector *pLogEntry = &((CMainFrame*)AfxGetApp()->GetMainWnd())->m_wndOutput.m_LogList.m_logEntries;
for (unsigned int i = 0; i < rev->m_ParentHash.size(); ++i)
{
CString str;
CString parentsubject;
GitRev *p =NULL;
if( pLogEntry->m_pLogCache->m_HashMap.find(rev->m_ParentHash[i]) == pLogEntry->m_pLogCache->m_HashMap.end())
{
p=NULL;
}
else
{
p= &pLogEntry->m_pLogCache->m_HashMap[rev->m_ParentHash[i]] ;
}
if(p)
parentsubject=p->GetSubject();
str.Format(_T("%d - %s \n %s"),i,rev->m_ParentHash[i].ToString(),parentsubject);
CMFCPropertyGridProperty*pProtery=new CMFCPropertyGridProperty(
rev->m_ParentHash[i].ToString().Left(8),
parentsubject,
str
);
pProtery->AllowEdit(FALSE);
m_ParentGroup->AddSubItem(pProtery);
}
m_ParentGroup->Expand();
for (int i = 0; i < m_BaseInfoGroup->GetSubItemsCount(); ++i)
m_BaseInfoGroup->GetSubItem(i)->SetDescription(m_BaseInfoGroup->GetSubItem(i)->GetValue());
}
else
{
m_CommitHash->SetValue(_T(""));
m_AuthorName->SetValue(_T(""));
m_AuthorDate->SetValue(_T(""));
m_AuthorEmail->SetValue(_T(""));
m_CommitterName->SetValue(_T(""));
m_CommitterEmail->SetValue(_T(""));
m_CommitterDate->SetValue(_T(""));
m_Subject->SetValue(_T(""));
m_Body->SetValue(_T(""));
RemoveParent();
for (int i = 0; i < m_BaseInfoGroup->GetSubItemsCount(); ++i)
m_BaseInfoGroup->GetSubItem(i)->SetDescription(_T(""));
}
this->Invalidate();
m_wndPropList.Invalidate();
}
示例8: GetRevParsingTests
void GetRevParsingTests()
{
GitRev rev;
EXPECT_TRUE(rev.m_CommitHash.IsEmpty());
EXPECT_EQ(0, rev.GetCommit(_T("HEAD")));
EXPECT_STREQ(_T("7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6"), rev.m_CommitHash.ToString());
EXPECT_STREQ(_T("Sven Strickroth"), rev.GetAuthorName());
EXPECT_STREQ(_T("[email protected]"), rev.GetAuthorEmail());
EXPECT_STREQ(_T("2015-03-07 18:03:58"), rev.GetAuthorDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
EXPECT_STREQ(_T("Sven Strickroth"), rev.GetCommitterName());
EXPECT_STREQ(_T("[email protected]"), rev.GetCommitterEmail());
EXPECT_STREQ(_T("2015-03-07 18:03:58"), rev.GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
EXPECT_STREQ(_T("Changed ASCII file"), rev.GetSubject());
EXPECT_STREQ(_T(""), rev.GetBody());
EXPECT_TRUE(rev.GetLastErr().IsEmpty());
EXPECT_EQ(0, rev.ParentsCount());
EXPECT_EQ(0, rev.GetParentFromHash(rev.m_CommitHash));
ASSERT_EQ(1, rev.ParentsCount());
EXPECT_STREQ(_T("1fc3c9688e27596d8717b54f2939dc951568f6cb"), rev.m_ParentHash[0].ToString());
EXPECT_TRUE(rev.GetLastErr().IsEmpty());
rev.Clear();
EXPECT_EQ(0, rev.GetCommit(GitRev::GetWorkingCopy()));
EXPECT_TRUE(rev.m_CommitHash.IsEmpty());
EXPECT_STREQ(_T(""), rev.GetAuthorName());
EXPECT_STREQ(_T(""), rev.GetAuthorEmail());
EXPECT_STREQ(_T(""), rev.GetCommitterName());
EXPECT_STREQ(_T(""), rev.GetCommitterEmail());
EXPECT_STREQ(_T("Working Copy"), rev.GetSubject());
EXPECT_STREQ(_T(""), rev.GetBody());
EXPECT_EQ(0, rev.ParentsCount());
EXPECT_TRUE(rev.GetLastErr().IsEmpty());
rev.Clear();
EXPECT_TRUE(rev.GetLastErr().IsEmpty());
EXPECT_EQ(0, rev.GetCommit(_T("aa5b97f89cea6863222823c8289ce392d06d1691")));
EXPECT_STREQ(_T("aa5b97f89cea6863222823c8289ce392d06d1691"), rev.m_CommitHash.ToString());
EXPECT_STREQ(_T("Another dummy with ümlaut"), rev.GetAuthorName());
EXPECT_STREQ(_T("[email protected]"), rev.GetAuthorEmail());
EXPECT_STREQ(_T("2015-03-14 22:30:06"), rev.GetAuthorDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
EXPECT_STREQ(_T("Another dummy with ümlaut"), rev.GetCommitterName());
EXPECT_STREQ(_T("[email protected]"), rev.GetCommitterEmail());
EXPECT_STREQ(_T("2015-03-14 22:30:06"), rev.GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
EXPECT_STREQ(_T("Subject line"), rev.GetSubject());
EXPECT_STREQ(_T("\nalso some more lines\n\nhere in body\n\nSigned-off-by: Another dummy with ümlaut <[email protected]>\n"), rev.GetBody());
EXPECT_TRUE(rev.GetLastErr().IsEmpty());
rev.Clear();
EXPECT_TRUE(rev.m_CommitHash.IsEmpty());
EXPECT_EQ(0, rev.GetCommit(_T("1fc3c9688e27596d8717b54f2939dc951568f6cb")));
EXPECT_STREQ(_T("1fc3c9688e27596d8717b54f2939dc951568f6cb"), rev.m_CommitHash.ToString());
EXPECT_STREQ(_T("Some other User"), rev.GetAuthorName());
EXPECT_STREQ(_T("[email protected]"), rev.GetAuthorEmail());
EXPECT_STREQ(_T("2015-03-07 18:03:39"), rev.GetAuthorDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
EXPECT_STREQ(_T("Sven Strickroth"), rev.GetCommitterName());
EXPECT_STREQ(_T("[email protected]"), rev.GetCommitterEmail());
EXPECT_STREQ(_T("2015-03-07 18:03:39"), rev.GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
EXPECT_STREQ(_T("Added an ascii file"), rev.GetSubject());
EXPECT_STREQ(_T(""), rev.GetBody());
EXPECT_TRUE(rev.GetLastErr().IsEmpty());
rev.Clear();
EXPECT_EQ(-1, rev.GetCommit(_T("does-not-exist")));
EXPECT_FALSE(rev.GetLastErr().IsEmpty());
EXPECT_TRUE(rev.m_CommitHash.IsEmpty());
rev.Clear();
CGitHash hash(_T("aa5b97f89cea6863222823c8289ce392d06d1691"));
EXPECT_EQ(0, rev.GetCommitFromHash(hash));
EXPECT_EQ(hash, rev.m_CommitHash);
EXPECT_STREQ(_T("Another dummy with ümlaut"), rev.GetAuthorName());
EXPECT_STREQ(_T("[email protected]"), rev.GetAuthorEmail());
EXPECT_STREQ(_T("2015-03-14 22:30:06"), rev.GetAuthorDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
EXPECT_STREQ(_T("Another dummy with ümlaut"), rev.GetCommitterName());
EXPECT_STREQ(_T("[email protected]"), rev.GetCommitterEmail());
EXPECT_STREQ(_T("2015-03-14 22:30:06"), rev.GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
EXPECT_STREQ(_T("Subject line"), rev.GetSubject());
EXPECT_STREQ(_T("\nalso some more lines\n\nhere in body\n\nSigned-off-by: Another dummy with ümlaut <[email protected]>\n"), rev.GetBody());
EXPECT_TRUE(rev.GetLastErr().IsEmpty());
rev.Clear();
EXPECT_EQ(0, rev.GetCommit(_T("8d1ebbcc7eeb63af10ff8bcf7712afb9fcc90b8a")));
EXPECT_STREQ(_T("8d1ebbcc7eeb63af10ff8bcf7712afb9fcc90b8a"), rev.m_CommitHash.ToString());
EXPECT_STREQ(_T("Sven Strickroth"), rev.GetAuthorName());
EXPECT_STREQ(_T("[email protected]"), rev.GetAuthorEmail());
EXPECT_STREQ(_T("2015-03-04 17:50:24"), rev.GetAuthorDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
EXPECT_STREQ(_T("Sven Strickroth"), rev.GetCommitterName());
EXPECT_STREQ(_T("[email protected]"), rev.GetCommitterEmail());
EXPECT_STREQ(_T("2015-03-04 17:50:24"), rev.GetCommitterDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
EXPECT_STREQ(_T("Merge branch 'for-merge' into subdir/branch"), rev.GetSubject());
EXPECT_STREQ(_T(""), rev.GetBody());
EXPECT_EQ(0, rev.ParentsCount());
EXPECT_EQ(0, rev.GetParentFromHash(rev.m_CommitHash));
ASSERT_EQ(2, rev.ParentsCount());
EXPECT_STREQ(_T("3686b9cf74f1a4ef96d6bfe736595ef9abf0fb8d"), rev.m_ParentHash[0].ToString());
EXPECT_STREQ(_T("1ce788330fd3a306c8ad37654063ceee13a7f172"), rev.m_ParentHash[1].ToString());
EXPECT_TRUE(rev.GetLastErr().IsEmpty());
rev.Clear();
EXPECT_TRUE(rev.m_CommitHash.IsEmpty());
EXPECT_EQ(0, rev.GetCommit(_T("844309789a13614b52d5e7cbfe6350dd73d1dc72"))); // root-commit
EXPECT_STREQ(_T("844309789a13614b52d5e7cbfe6350dd73d1dc72"), rev.m_CommitHash.ToString());
EXPECT_STREQ(_T("Sven Strickroth"), rev.GetAuthorName());
EXPECT_STREQ(_T("[email protected]"), rev.GetAuthorEmail());
EXPECT_STREQ(_T("2015-03-04 17:35:13"), rev.GetAuthorDate().FormatGmt(L"%Y-%m-%d %H:%M:%S"));
EXPECT_STREQ(_T("Sven Strickroth"), rev.GetCommitterName());
EXPECT_STREQ(_T("[email protected]"), rev.GetCommitterEmail());
//.........这里部分代码省略.........
示例9: OnFindDialogMessage
LRESULT CRefLogDlg::OnFindDialogMessage(WPARAM /*wParam*/, LPARAM /*lParam*/)
{
ASSERT(m_pFindDialog != NULL);
if (m_RefList.m_arShownList.IsEmpty())
return 0;
// If the FR_DIALOGTERM flag is set,
// invalidate the handle identifying the dialog box.
if (m_pFindDialog->IsTerminating())
{
m_pFindDialog = NULL;
return 0;
}
// If the FR_FINDNEXT flag is set,
// call the application-defined search routine
// to search for the requested string.
if (m_pFindDialog->FindNext())
{
//read data from dialog
CString findString = m_pFindDialog->GetFindString();
bool bFound = false;
bool bCaseSensitive = !!(m_pFindDialog->m_nFlags & FR_MATCHCASE);
if (!bCaseSensitive)
findString.MakeLower();
int i = m_nSearchLine;
if (i < 0 || i >= m_RefList.m_arShownList.GetCount())
i = 0;
do
{
GitRev * data = (GitRev*)m_RefList.m_arShownList.SafeGetAt(i);
CString str;
str += data->m_Ref;
str += _T("\n");
str += data->m_RefAction;
str += _T("\n");
str += data->m_CommitHash.ToString();
str += _T("\n");
str += data->GetSubject();
str += _T("\n");
str += data->GetBody();
str += _T("\n");
if (!bCaseSensitive)
str.MakeLower();
if (str.Find(findString) >= 0)
bFound = true;
++i;
if(!bFound && i >= m_RefList.m_arShownList.GetCount())
i=0;
} while (i != m_nSearchLine && (!bFound));
if (bFound)
{
m_RefList.SetHotItem(i - 1);
m_RefList.EnsureVisible(i - 1, FALSE);
m_nSearchLine = i;
}
else
MessageBox(_T("\"") + findString + _T("\" ") + CString(MAKEINTRESOURCE(IDS_NOTFOUND)), _T("TortoiseGit"), MB_ICONINFORMATION);
}
return 0;
}
示例10: ParserFromRefLog
int ParserFromRefLog(CString ref, std::vector<GitRev> &refloglist)
{
refloglist.clear();
if (g_Git.m_IsUseLibGit2)
{
CAutoRepository repo(g_Git.GetGitRepository());
if (!repo)
{
MessageBox(nullptr, CGit::GetLibGit2LastErr(_T("Could not open repository.")), _T("TortoiseGit"), MB_ICONERROR);
return -1;
}
CAutoReflog reflog;
if (git_reflog_read(reflog.GetPointer(), repo, CUnicodeUtils::GetUTF8(ref)) < 0)
{
MessageBox(nullptr, CGit::GetLibGit2LastErr(_T("Could not read reflog.")), _T("TortoiseGit"), MB_ICONERROR);
return -1;
}
for (size_t i = 0; i < git_reflog_entrycount(reflog); ++i)
{
const git_reflog_entry *entry = git_reflog_entry_byindex(reflog, i);
if (!entry)
continue;
GitRev rev;
rev.m_CommitHash = (char *)git_reflog_entry_id_new(entry)->id;
rev.m_Ref.Format(_T("%[email protected]{%d}"), ref, i);
rev.GetCommitterDate() = CTime(git_reflog_entry_committer(entry)->when.time);
if (git_reflog_entry_message(entry) != nullptr)
{
CString one;
g_Git.StringAppend(&one, (BYTE *)git_reflog_entry_message(entry));
int message = one.Find(_T(":"), 0);
if (message > 0)
{
rev.m_RefAction = one.Left(message);
rev.GetSubject() = one.Mid(message + 1);
}
}
refloglist.push_back(rev);
}
}
else if (g_Git.m_IsUseGitDLL)
{
git_for_each_reflog_ent(CUnicodeUtils::GetUTF8(ref), AddToRefLoglist, &refloglist);
for (size_t i = 0; i < refloglist.size(); ++i)
refloglist[i].m_Ref.Format(_T("%[email protected]{%d}"), ref, i);
}
else
{
CString cmd, out;
GitRev rev;
cmd.Format(_T("git.exe reflog show --pretty=\"%%H %%gD: %%gs\" --date=raw %s"), ref);
if (g_Git.Run(cmd, &out, NULL, CP_UTF8))
return -1;
int i = 0;
CString prefix = ref + _T("@{");
int pos = 0;
while (pos >= 0)
{
CString one = out.Tokenize(_T("\n"), pos);
int refPos = one.Find(_T(' '), 0);
if (refPos < 0)
continue;
rev.Clear();
CString hashStr = one.Left(refPos);
rev.m_CommitHash = hashStr;
rev.m_Ref.Format(_T("%[email protected]{%d}"), ref, i++);
int prefixPos = one.Find(prefix, refPos + 1);
if (prefixPos != refPos + 1)
continue;
int spacePos = one.Find(_T(' '), prefixPos + prefix.GetLength() + 1);
if (spacePos < 0)
continue;
CString timeStr = one.Mid(prefixPos + prefix.GetLength(), spacePos - prefixPos - prefix.GetLength());
rev.GetCommitterDate() = CTime(_ttoi(timeStr));
int action = one.Find(_T("}: "), spacePos + 1);
if (action > 0)
{
action += 2;
int message = one.Find(_T(":"), action);
if (message > 0)
{
rev.m_RefAction = one.Mid(action + 1, message - action - 1);
rev.GetSubject() = one.Right(one.GetLength() - message - 1);
}
}
refloglist.push_back(rev);
}
}
return 0;
}