= ::RegisterWindowMessage(_T("GITSLNM_ADDFILE"));\r
const UINT CGitStatusListCtrl::SVNSLNM_CHECKCHANGED\r
= ::RegisterWindowMessage(_T("GITSLNM_CHECKCHANGED"));\r
+const UINT CGitStatusListCtrl::SVNSLNM_ITEMCHANGED\r
+ = ::RegisterWindowMessage(_T("GITSLNM_ITEMCHANGED"));\r
\r
\r
\r
{\r
m_FileLoaded=0;\r
m_critSec.Init();\r
+ m_bIsRevertTheirMy = false;\r
}\r
\r
CGitStatusListCtrl::~CGitStatusListCtrl()\r
m_arStatusArray.push_back((CTGitPath*)&m_IgnoreFileList[i]);\r
}\r
}\r
+\r
+ if( m_nSortedColumn )\r
+ {\r
+ CSorter predicate (&m_ColumnManager, m_nSortedColumn, m_bAscending);\r
+ std::sort(m_arStatusArray.begin(), m_arStatusArray.end(), predicate);\r
+ }\r
+\r
int index =0;\r
for(int i=0;i<this->m_arStatusArray.size();i++)\r
{\r
//set default checkbox status\r
if(((CTGitPath*)m_arStatusArray[i])->m_Action & dwCheck)\r
((CTGitPath*)m_arStatusArray[i])->m_Checked=true;\r
+ else\r
+ ((CTGitPath*)m_arStatusArray[i])->m_Checked=false;\r
\r
if(((CTGitPath*)m_arStatusArray[i])->m_Action & dwShow)\r
{\r
{\r
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);\r
*pResult = 0;\r
+ CWnd* pParent = GetParent();\r
+ if (NULL != pParent && NULL != pParent->GetSafeHwnd())\r
+ {\r
+ pParent->SendMessage(SVNSLNM_ITEMCHANGED, pNMLV->iItem);\r
+ }\r
+\r
if ((pNMLV->uNewState==0)||(pNMLV->uNewState & LVIS_SELECTED)||(pNMLV->uNewState & LVIS_FOCUSED))\r
return FALSE;\r
\r
}\r
if ((m_dwContextMenus & SVNSLC_POPRESOLVE)/*&&(entry->textstatus == git_wc_status_conflicted)*/)\r
{\r
- //popup.AppendMenuIcon(IDSVNLC_RESOLVETHEIRS, IDS_SVNPROGRESS_MENUUSETHEIRS, IDI_RESOLVE);\r
- //popup.AppendMenuIcon(IDSVNLC_RESOLVEMINE, IDS_SVNPROGRESS_MENUUSEMINE, IDI_RESOLVE);\r
+ popup.AppendMenuIcon(IDSVNLC_RESOLVETHEIRS, IDS_SVNPROGRESS_MENUUSETHEIRS, IDI_RESOLVE);\r
+ popup.AppendMenuIcon(IDSVNLC_RESOLVEMINE, IDS_SVNPROGRESS_MENUUSEMINE, IDI_RESOLVE);\r
}\r
if ((m_dwContextMenus & SVNSLC_POPCONFLICT)||(m_dwContextMenus & SVNSLC_POPRESOLVE))\r
popup.AppendMenu(MF_SEPARATOR);\r
// {\r
// if ((m_dwContextMenus & SVNSLC_POPGNUDIFF)&&(wcStatus != git_wc_status_deleted)&&(wcStatus != git_wc_status_missing))\r
// {\r
- if(!g_Git.IsInitRepos())\r
+ if(!g_Git.IsInitRepos() && (m_dwContextMenus&SVNSLC_POPGNUDIFF))\r
+ {\r
popup.AppendMenuIcon(IDSVNLC_GNUDIFF1, IDS_LOG_POPUP_GNUDIFF, IDI_DIFF);\r
\r
- bEntryAdded = true;\r
+ bEntryAdded = true;\r
+ }\r
// }\r
// }\r
//\r
//}\r
}\r
\r
+ if( (!this->m_Rev1.IsEmpty()) || (!this->m_Rev1.IsEmpty()) )\r
+ {\r
+ if(GetSelectedCount() == 1)\r
+ {\r
+ if (m_dwContextMenus & this->GetContextMenuBit(IDSVNLC_COMPARETWO))\r
+ { \r
+ popup.AppendMenuIcon(IDSVNLC_COMPARETWO, IDS_LOG_POPUP_COMPARETWO, IDI_DIFF);\r
+ popup.SetDefaultItem(IDSVNLC_COMPARETWO, FALSE);\r
+ }\r
+ if (m_dwContextMenus & this->GetContextMenuBit(IDSVNLC_GNUDIFF2))\r
+ { \r
+ popup.AppendMenuIcon(IDSVNLC_GNUDIFF2, IDS_LOG_POPUP_GNUDIFF, IDI_DIFF);\r
+ }\r
+ }\r
+ }\r
\r
///Select Multi item\r
//if (GetSelectedCount() > 0)\r
}\r
}\r
break;\r
+ case IDSVNLC_COMPARETWO:\r
+ {\r
+ POSITION pos = GetFirstSelectedItemPosition();\r
+ while ( pos )\r
+ {\r
+ int index = GetNextSelectedItem(pos);\r
+ StartDiffTwo(index);\r
+ }\r
+ }\r
+ break;\r
case IDSVNLC_GNUDIFF1:\r
{\r
// SVNDiff diff(NULL, this->m_hWnd, true);\r
*filepath,m_CurrentVersion+_T("~1"));\r
}\r
break;\r
+ case IDSVNLC_GNUDIFF2:\r
+ {\r
+ // SVNDiff diff(NULL, this->m_hWnd, true);\r
+ //\r
+ // if (entry->remotestatus <= git_wc_status_normal)\r
+ // CAppUtils::StartShowUnifiedDiff(m_hWnd, entry->path, SVNRev::REV_BASE, entry->path, SVNRev::REV_WC);\r
+ // else\r
+ // CAppUtils::StartShowUnifiedDiff(m_hWnd, entry->path, SVNRev::REV_WC, entry->path, SVNRev::REV_HEAD);\r
+ \r
+ CAppUtils::StartShowUnifiedDiff(m_hWnd,*filepath,m_Rev1,\r
+ *filepath,m_Rev2);\r
+ }\r
+ break;\r
+ \r
case IDSVNLC_ADD:\r
{ // The add went ok, but we now need to run through the selected items again\r
// and update their status\r
if(path == NULL)\r
continue;\r
CString cmd;\r
- cmd.Format(_T("git.exe add \"%s\""),path->GetGitPathString());\r
+ cmd.Format(_T("git.exe add -- \"%s\""),path->GetGitPathString());\r
CString output;\r
if(!g_Git.Run(cmd,&output,CP_ACP))\r
{\r
\r
case IDSVNLC_EDITCONFLICT:\r
{\r
- CAppUtils::ConflictEdit(*filepath);\r
+ CAppUtils::ConflictEdit(*filepath,false,this->m_bIsRevertTheirMy);\r
break;\r
}\r
+ case IDSVNLC_RESOLVETHEIRS: //follow up \r
+ case IDSVNLC_RESOLVEMINE: //follow up\r
case IDSVNLC_RESOLVECONFLICT:\r
{\r
if (CMessageBox::Show(m_hWnd, IDS_PROC_RESOLVE, IDS_APPNAME, MB_ICONQUESTION | MB_YESNO)==IDYES)\r
CTGitPath * fentry =(CTGitPath*) this->GetItemData(index);\r
if(fentry == NULL)\r
continue;\r
+ CString gitcmd,output;\r
+ output.Empty();\r
+ int stage=0;\r
+ \r
+ if ( ((!this->m_bIsRevertTheirMy)&&cmd == IDSVNLC_RESOLVETHEIRS) ||\r
+ ((this->m_bIsRevertTheirMy)&&cmd == IDSVNLC_RESOLVEMINE) )\r
+ {\r
+ gitcmd.Format(_T("git.exe cat-file blob \":3:%s\""),fentry->GetGitPathString());\r
+ if(g_Git.RunLogFile(gitcmd,(CString&)fentry->GetWinPathString()))\r
+ {\r
+ CMessageBox::Show(m_hWnd, output, _T("TortoiseGit"), MB_ICONERROR);\r
+ continue;\r
+ }\r
+ }\r
+ output.Empty();\r
+ if ( ((!this->m_bIsRevertTheirMy)&&cmd == IDSVNLC_RESOLVEMINE) ||\r
+ ((this->m_bIsRevertTheirMy)&&cmd == IDSVNLC_RESOLVETHEIRS) )\r
+ {\r
+ gitcmd.Format(_T("git.exe cat-file blob \":2:%s\""),fentry->GetGitPathString());\r
+ if(g_Git.RunLogFile(gitcmd,(CString&)fentry->GetWinPathString()))\r
+ {\r
+ CMessageBox::Show(m_hWnd, output, _T("TortoiseGit"), MB_ICONERROR);\r
+ continue;\r
+ }\r
\r
+ }\r
+ output.Empty();\r
if ( fentry->m_Action & CTGitPath::LOGACTIONS_UNMERGED)\r
{\r
- CString cmd,output;\r
- cmd.Format(_T("git.exe add \"%s\""),fentry->GetGitPathString());\r
- if(g_Git.Run(cmd,&output,CP_ACP))\r
+ gitcmd.Format(_T("git.exe add -- \"%s\""),fentry->GetGitPathString());\r
+ if(g_Git.Run(gitcmd,&output,CP_ACP))\r
{\r
- CMessageBox::Show(m_hWnd, output, _T("TortoiseSVN"), MB_ICONERROR);\r
+ CMessageBox::Show(m_hWnd, output, _T("TortoiseGit"), MB_ICONERROR);\r
}else\r
{\r
fentry->m_Action |= CTGitPath::LOGACTIONS_MODIFIED;\r
{\r
CString temp;\r
temp.Format(IDS_ERR_FAILEDIGNOREPROPERTY, (LPCTSTR)name);\r
- CMessageBox::Show(this->m_hWnd, temp, _T("TortoiseSVN"), MB_ICONERROR);\r
+ CMessageBox::Show(this->m_hWnd, temp, _T("TortoiseGit"), MB_ICONERROR);\r
break;\r
}\r
if (GetCheck(selIndex))\r
{\r
CString temp;\r
temp.Format(IDS_ERR_FAILEDIGNOREPROPERTY, (LPCTSTR)name);\r
- CMessageBox::Show(this->m_hWnd, temp, _T("TortoiseSVN"), MB_ICONERROR);\r
+ CMessageBox::Show(this->m_hWnd, temp, _T("TortoiseGit"), MB_ICONERROR);\r
}\r
else\r
{\r
\r
if (g_Git.Revert(targetList))\r
{\r
- CMessageBox::Show(this->m_hWnd, _T("Revert Fail"), _T("TortoiseSVN"), MB_ICONERROR);\r
+ CMessageBox::Show(this->m_hWnd, _T("Revert Fail"), _T("TortoiseGit"), MB_ICONERROR);\r
}\r
else\r
{\r
{\r
path->m_Action = CTGitPath::LOGACTIONS_UNVER;\r
SetEntryCheck(path,nItem,false);\r
+ PrepareGroups(true);\r
SetItemGroup(nItem,1);\r
this->m_StatusFileList.RemoveItem(*path);\r
this->m_UnRevFileList.AddPath(*path);\r
yes.LoadString(IDS_MSGBOX_YES);\r
no.LoadString(IDS_MSGBOX_NO);\r
yestoall.LoadString(IDS_PROC_YESTOALL);\r
- UINT ret = CMessageBox::Show(m_hWnd, msg, _T("TortoiseSVN"), 2, IDI_ERROR, yes, no, yestoall);\r
+ UINT ret = CMessageBox::Show(m_hWnd, msg, _T("TortoiseGit"), 2, IDI_ERROR, yes, no, yestoall);\r
if ((ret == 1)||(ret==3))\r
{\r
if (!git.Remove(itemsToRemove, TRUE, !!(GetAsyncKeyState(VK_SHIFT) & 0x8000)))\r
{\r
- CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);\r
+ CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
}\r
else\r
bSuccess = true;\r
}\r
}\r
else\r
- CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);\r
+ CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
}\r
if (bSuccess)\r
{\r
}\r
else\r
{\r
- CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);\r
+ CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
}\r
SaveColumnWidths();\r
Show(m_dwShow, 0, m_bShowFolders);\r
SVN git;\r
if (!git.Move(CTSVNPathList(entry1->GetPath()), entry2->GetPath(), TRUE))\r
{\r
- CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);\r
+ CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
}\r
else\r
{\r
}\r
else\r
{\r
- CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);\r
+ CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
}\r
SetRedraw(TRUE);\r
}\r
}\r
else\r
{\r
- CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);\r
+ CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
}\r
}\r
SetRedraw(TRUE);\r
\r
if( file->m_Action&CTGitPath::LOGACTIONS_UNMERGED )\r
{\r
- CAppUtils::ConflictEdit(*file,false);\r
+ CAppUtils::ConflictEdit(*file,false,m_bIsRevertTheirMy);\r
\r
}else\r
{\r
- StartDiff(pNMLV->iItem);\r
+ if( (!m_Rev1.IsEmpty()) || (!m_Rev1.IsEmpty()))\r
+ StartDiffTwo(pNMLV->iItem);\r
+ else\r
+ StartDiff(pNMLV->iItem);\r
}\r
\r
}\r
+void CGitStatusListCtrl::StartDiffTwo(int fileindex)\r
+{\r
+ if(fileindex<0)\r
+ return;\r
+\r
+ CTGitPath file1=*(CTGitPath*)GetItemData(fileindex);\r
+\r
+ CGitDiff::Diff(&file1,&file1,\r
+ m_Rev1,\r
+ m_Rev2);\r
+\r
+}\r
void CGitStatusListCtrl::StartDiffWC(int fileindex)\r
{\r
if(fileindex<0)\r
}\r
else\r
{\r
- CMessageBox::Show(m_pSVNStatusListCtrl->m_hWnd, git.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);\r
+ CMessageBox::Show(m_pSVNStatusListCtrl->m_hWnd, git.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
}\r
}\r
else\r
}\r
else\r
{\r
- CMessageBox::Show(m_pSVNStatusListCtrl->m_hWnd, git.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);\r
+ CMessageBox::Show(m_pSVNStatusListCtrl->m_hWnd, git.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);\r
}\r
}\r
}\r