#include "FileDiffDlg.h"\r
#include "CommitDlg.h"\r
#include "RebaseDlg.h"\r
+#include "GitDiff.h"\r
\r
IMPLEMENT_DYNAMIC(CGitLogList, CHintListCtrl)\r
\r
int CGitLogList::CherryPickFrom(CString from, CString to)\r
{\r
- CLogDataVector logs;\r
+ CLogDataVector logs(&m_LogCache);\r
if(logs.ParserFromLog(NULL,-1,0,&from,&to))\r
return -1;\r
\r
{\r
if (progress.IsValid())\r
{\r
- progress.FormatPathLine(1, _T("Pick up %s"), logs[i].m_CommitHash);\r
- progress.FormatPathLine(2, _T("%s"), logs[i].m_Subject);\r
+ progress.FormatPathLine(1, _T("Pick up %s"), logs.GetGitRevAt(i).m_CommitHash.ToString());\r
+ progress.FormatPathLine(2, _T("%s"), logs.GetGitRevAt(i).m_Subject);\r
progress.SetProgress(logs.size()-i, logs.size());\r
}\r
if ((progress.IsValid())&&(progress.HasUserCancelled()))\r
return -1;\r
}\r
CString cmd,out;\r
- cmd.Format(_T("git.exe cherry-pick %s"),logs[i].m_CommitHash);\r
+ cmd.Format(_T("git.exe cherry-pick %s"),logs.GetGitRevAt(i).m_CommitHash.ToString());\r
out.Empty();\r
if(g_Git.Run(cmd,&out,CP_UTF8))\r
{\r
CString tempfile=GetTempFile();\r
CString cmd;\r
GitRev * r1 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(FirstSelect));\r
- if(r1->m_CommitHash != GIT_REV_ZERO)\r
+ if(!r1->m_CommitHash.IsEmpty())\r
{\r
- cmd.Format(_T("git.exe diff-tree -r -p --stat %s"),r1->m_CommitHash);\r
+ cmd.Format(_T("git.exe diff-tree -r -p --stat %s"),r1->m_CommitHash.ToString());\r
}else\r
cmd.Format(_T("git.exe diff -r -p --stat"));\r
\r
g_Git.RunLogFile(cmd,tempfile);\r
- CAppUtils::StartUnifiedDiffViewer(tempfile,r1->m_CommitHash.Left(6)+_T(":")+r1->m_Subject);\r
+ CAppUtils::StartUnifiedDiffViewer(tempfile,r1->m_CommitHash.ToString().Left(6)+_T(":")+r1->m_Subject);\r
}\r
break;\r
\r
GitRev * r1 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(FirstSelect));\r
GitRev * r2 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect));\r
\r
- if( r1->m_CommitHash == GIT_REV_ZERO)\r
+ if( r1->m_CommitHash.IsEmpty())\r
{\r
- cmd.Format(_T("git.exe diff -r -p --stat %s"),r2->m_CommitHash);\r
- }else if( r2->m_CommitHash == GIT_REV_ZERO)\r
+ cmd.Format(_T("git.exe diff -r -p --stat %s"),r2->m_CommitHash.ToString());\r
+ }else if( r2->m_CommitHash.IsEmpty())\r
{\r
- cmd.Format(_T("git.exe diff -r -p --stat %s"),r1->m_CommitHash);\r
+ cmd.Format(_T("git.exe diff -r -p --stat %s"),r1->m_CommitHash.ToString());\r
}else\r
- cmd.Format(_T("git.exe diff-tree -r -p --stat %s %s"),r1->m_CommitHash,r2->m_CommitHash);\r
+ cmd.Format(_T("git.exe diff-tree -r -p --stat %s %s"),r1->m_CommitHash.ToString(),r2->m_CommitHash.ToString());\r
\r
g_Git.RunLogFile(cmd,tempfile);\r
- CAppUtils::StartUnifiedDiffViewer(tempfile,r1->m_CommitHash.Left(6)+_T(":")+r2->m_CommitHash.Left(6));\r
+ CAppUtils::StartUnifiedDiffViewer(tempfile,r1->m_CommitHash.ToString().Left(6)+_T(":")+r2->m_CommitHash.ToString().Left(6));\r
\r
}\r
break;\r
{\r
GitRev * r1 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(FirstSelect));\r
GitRev * r2 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect));\r
- CFileDiffDlg dlg;\r
- dlg.SetDiff(NULL,*r1,*r2);\r
- dlg.DoModal();\r
+ CGitDiff::DiffCommit(this->m_Path, r1,r2);\r
\r
}\r
break;\r
{\r
GitRev * r1 = &m_wcRev;\r
GitRev * r2 = pSelLogEntry;\r
- CFileDiffDlg dlg;\r
- dlg.SetDiff(NULL,*r1,*r2);\r
- dlg.DoModal();\r
+\r
+ CGitDiff::DiffCommit(this->m_Path, r1,r2);\r
\r
//user clicked on the menu item "compare with working copy"\r
//if (PromptShown())\r
if(pSelLogEntry->m_ParentHash.size()>0)\r
//if(m_logEntries.m_HashMap[pSelLogEntry->m_ParentHash[0]]>=0)\r
{\r
- dlg.SetDiff(NULL,pSelLogEntry->m_CommitHash,pSelLogEntry->m_ParentHash[0]);\r
- dlg.DoModal();\r
+ CGitDiff::DiffCommit(this->m_Path, pSelLogEntry->m_CommitHash.ToString(),pSelLogEntry->m_ParentHash[0].ToString());\r
+\r
}else\r
{\r
CMessageBox::Show(NULL,_T("No previous version"),_T("TortoiseGit"),MB_OK); \r
}\r
break;\r
case ID_EXPORT:\r
- CAppUtils::Export(&pSelLogEntry->m_CommitHash);\r
+ CAppUtils::Export(&pSelLogEntry->m_CommitHash.ToString());\r
break;\r
case ID_CREATE_BRANCH:\r
- CAppUtils::CreateBranchTag(FALSE,&pSelLogEntry->m_CommitHash);\r
+ CAppUtils::CreateBranchTag(FALSE,&pSelLogEntry->m_CommitHash.ToString());\r
ReloadHashMap();\r
Invalidate(); \r
break;\r
case ID_CREATE_TAG:\r
- CAppUtils::CreateBranchTag(TRUE,&pSelLogEntry->m_CommitHash);\r
+ CAppUtils::CreateBranchTag(TRUE,&pSelLogEntry->m_CommitHash.ToString());\r
ReloadHashMap();\r
Invalidate();\r
break;\r
case ID_SWITCHTOREV:\r
- CAppUtils::Switch(&pSelLogEntry->m_CommitHash);\r
+ CAppUtils::Switch(&pSelLogEntry->m_CommitHash.ToString());\r
ReloadHashMap();\r
Invalidate();\r
break;\r
case ID_RESET:\r
- CAppUtils::GitReset(&pSelLogEntry->m_CommitHash);\r
+ CAppUtils::GitReset(&pSelLogEntry->m_CommitHash.ToString());\r
ReloadHashMap();\r
Invalidate();\r
break;\r
case ID_COMBINE_COMMIT:\r
{\r
CString head;\r
- CString headhash;\r
- CString hashFirst,hashLast;\r
+ CGitHash headhash;\r
+ CGitHash hashFirst,hashLast;\r
\r
int headindex=GetHeadIndex();\r
if(headindex>=0) //incase show all branch, head is not the first commits. \r
//Use throw to abort this process (reset back to original HEAD)\r
try\r
{\r
- cmd.Format(_T("git.exe reset --hard %s"),pFirstEntry->m_CommitHash);\r
+ cmd.Format(_T("git.exe reset --hard %s"),pFirstEntry->m_CommitHash.ToString());\r
if(g_Git.Run(cmd,&out,CP_UTF8))\r
{\r
CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
throw std::exception(CUnicodeUtils::GetUTF8(_T("Could not reset to first commit (first step) aborting...\r\n\r\n")+out));\r
}\r
- cmd.Format(_T("git.exe reset --mixed %s"),hashLast);\r
+ cmd.Format(_T("git.exe reset --mixed %s"),hashLast.ToString());\r
if(g_Git.Run(cmd,&out,CP_UTF8))\r
{\r
CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
//\r
//Later the progress dialog could be used to execute these steps.\r
\r
- if(CherryPickFrom(pFirstEntry->m_CommitHash,headhash))\r
+ if(CherryPickFrom(pFirstEntry->m_CommitHash.ToString(),headhash))\r
{\r
CString msg;\r
msg.Format(_T("Error while cherry pick commits on top of combined commits. Aborting.\r\n\r\n"));\r
catch(std::exception& e)\r
{\r
CMessageBox::Show(NULL,CUnicodeUtils::GetUnicode(CStringA(e.what())),_T("TortoiseGit: Combine error"),MB_OK|MB_ICONERROR);\r
- cmd.Format(_T("git.exe reset --hard %s"),headhash);\r
+ cmd.Format(_T("git.exe reset --hard %s"),headhash.ToString());\r
out.Empty();\r
if(g_Git.Run(cmd,&out,CP_UTF8))\r
{\r
while(pos)\r
{\r
int indexNext = GetNextSelectedItem(pos);\r
- dlg.m_CommitList.m_logEntries.push_back(*(GitRev*)m_arShownList[indexNext]);\r
- dlg.m_CommitList.m_logEntries.at(dlg.m_CommitList.m_logEntries.size()-1).m_Action |= CTGitPath::LOGACTIONS_REBASE_PICK;\r
+ dlg.m_CommitList.m_logEntries.push_back( ((GitRev*)m_arShownList[indexNext])->m_CommitHash );\r
+ dlg.m_CommitList.m_logEntries.GetGitRevAt(dlg.m_CommitList.m_logEntries.size()-1).m_Action |= CTGitPath::LOGACTIONS_REBASE_PICK;\r
}\r
\r
if(dlg.DoModal() == IDOK)\r
GitRev * r2 = NULL;\r
if(select == 1)\r
{\r
- cmd += _T(" /startrev:")+r1->m_CommitHash;\r
+ cmd += _T(" /startrev:")+r1->m_CommitHash.ToString();\r
}\r
else \r
{\r
r2 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect));\r
if( this->m_IsOldFirst )\r
{ \r
- cmd += _T(" /startrev:")+r1->m_CommitHash+_T("~1");\r
- cmd += _T(" /endrev:")+r2->m_CommitHash;\r
+ cmd += _T(" /startrev:")+r1->m_CommitHash.ToString()+_T("~1");\r
+ cmd += _T(" /endrev:")+r2->m_CommitHash.ToString();\r
\r
}else\r
{ \r
- cmd += _T(" /startrev:")+r2->m_CommitHash+_T("~1");\r
- cmd += _T(" /endrev:")+r1->m_CommitHash; \r
+ cmd += _T(" /startrev:")+r2->m_CommitHash.ToString()+_T("~1");\r
+ cmd += _T(" /endrev:")+r1->m_CommitHash.ToString(); \r
} \r
\r
}\r