popup.AppendMenuIcon(IDSVNLC_COMPARE, IDS_LOG_COMPAREWITHBASE, IDI_DIFF);\r
popup.SetDefaultItem(IDSVNLC_COMPARE, FALSE);\r
}\r
+\r
+ if (m_dwContextMenus & this->GetContextMenuBit(IDSVNLC_COMPAREWC))\r
+ {\r
+ if( (!m_CurrentVersion.IsEmpty()) && m_CurrentVersion != GIT_REV_ZERO)\r
+ popup.AppendMenuIcon(IDSVNLC_COMPAREWC, IDS_LOG_POPUP_COMPARE, IDI_DIFF);\r
+ }\r
//Select one items\r
if (GetSelectedCount() == 1)\r
{\r
ShellExecute(this->m_hWnd, _T("explore"), filepath->GetDirectory().GetWinPath(), NULL, NULL, SW_SHOW);\r
}\r
break;\r
+\r
+ // Compare current version and work copy. \r
+ case IDSVNLC_COMPAREWC:\r
+ {\r
+ POSITION pos = GetFirstSelectedItemPosition();\r
+ while ( pos )\r
+ {\r
+ int index = GetNextSelectedItem(pos);\r
+ StartDiffWC(index);\r
+ }\r
+ }\r
+ break;\r
+ // Compare with base version. when current version is zero, compare workcopy and HEAD. \r
case IDSVNLC_COMPARE:\r
{\r
POSITION pos = GetFirstSelectedItemPosition();\r
CString str;\r
str.Format(IDS_PROC_WARNREVERT,GetSelectedCount());\r
\r
- if (!bConfirm || CMessageBox::Show(this->m_hWnd, str, _T("TortoiseSVN"), MB_YESNO | MB_ICONQUESTION)==IDYES)\r
+ if (!bConfirm || CMessageBox::Show(this->m_hWnd, str, _T("TortoiseGit"), MB_YESNO | MB_ICONQUESTION)==IDYES)\r
{\r
CTGitPathList targetList;\r
FillListOfSelectedItemPaths(targetList);\r
case IDSVNLC_SAVEAS:\r
FileSaveAs(filepath);\r
break;\r
+\r
+ case IDSVNLC_REVERTTOREV:\r
+ RevertSelectedItemToVersion();\r
+ break;\r
#if 0\r
case IDSVNLC_PROPERTIES:\r
{\r
}\r
\r
}\r
+void CGitStatusListCtrl::StartDiffWC(int fileindex)\r
+{\r
+ if(fileindex<0)\r
+ return;\r
+\r
+ CString Ver;\r
+ if(this->m_CurrentVersion.IsEmpty() || m_CurrentVersion== GIT_REV_ZERO)\r
+ return;\r
+\r
+ CTGitPath file1=*(CTGitPath*)GetItemData(fileindex);\r
+\r
+ CGitDiff::Diff(&file1,&file1,\r
+ CString(GIT_REV_ZERO),\r
+ m_CurrentVersion);\r
+\r
+}\r
\r
void CGitStatusListCtrl::StartDiff(int fileindex)\r
{\r
}\r
}\r
\r
+}\r
+\r
+int CGitStatusListCtrl::RevertSelectedItemToVersion()\r
+{\r
+ if(this->m_CurrentVersion.IsEmpty())\r
+ return 0;\r
+ if(this->m_CurrentVersion == GIT_REV_ZERO)\r
+ return 0;\r
+\r
+ POSITION pos = GetFirstSelectedItemPosition();\r
+ int index;\r
+ CString cmd,out;\r
+ int count =0;\r
+ while ((index = GetNextSelectedItem(pos)) >= 0)\r
+ {\r
+ CTGitPath *fentry=(CTGitPath*)GetItemData(index);\r
+ cmd.Format(_T("git.exe checkout %s -- \"%s\""),m_CurrentVersion,fentry->GetGitPathString());\r
+ out.Empty();\r
+ if(g_Git.Run(cmd,&out,CP_ACP))\r
+ {\r
+ CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+ }\r
+ count++;\r
+ }\r
+\r
+ out.Format(_T("%d files revert to %s"),count,m_CurrentVersion.Left(6));\r
+ CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
}
\ No newline at end of file