OSDN Git Service

merge original branch.
[tortoisegit/TortoiseGitJp.git] / src / Git / GitStatusListCtrl.cpp
index 077b775..9575b35 100644 (file)
@@ -62,6 +62,8 @@ const UINT CGitStatusListCtrl::SVNSLNM_ADDFILE
                                        = ::RegisterWindowMessage(_T("GITSLNM_ADDFILE"));\r
 const UINT CGitStatusListCtrl::SVNSLNM_CHECKCHANGED\r
                                        = ::RegisterWindowMessage(_T("GITSLNM_CHECKCHANGED"));\r
                                        = ::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
 \r
 \r
@@ -124,6 +126,7 @@ CGitStatusListCtrl::CGitStatusListCtrl() : CListCtrl()
 {\r
        m_FileLoaded=0;\r
        m_critSec.Init();\r
 {\r
        m_FileLoaded=0;\r
        m_critSec.Init();\r
+       m_bIsRevertTheirMy = false;\r
 }\r
 \r
 CGitStatusListCtrl::~CGitStatusListCtrl()\r
 }\r
 \r
 CGitStatusListCtrl::~CGitStatusListCtrl()\r
@@ -1047,12 +1050,21 @@ void CGitStatusListCtrl::Show(DWORD dwShow, DWORD dwCheck /*=0*/, bool bShowFold
                        m_arStatusArray.push_back((CTGitPath*)&m_IgnoreFileList[i]);\r
                }\r
        }\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
        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
                if(((CTGitPath*)m_arStatusArray[i])->m_Action & dwShow)\r
                {\r
@@ -1252,6 +1264,9 @@ void CGitStatusListCtrl::Show(DWORD dwShow, DWORD dwCheck /*=0*/, bool bShowFold
 \r
 void CGitStatusListCtrl::Show(DWORD dwShow, const CTGitPathList& checkedList, bool bShowFolders /* = true */)\r
 {\r
 \r
 void CGitStatusListCtrl::Show(DWORD dwShow, const CTGitPathList& checkedList, bool bShowFolders /* = true */)\r
 {\r
+       DeleteAllItems();\r
+       for(int i=0;i<checkedList.GetCount();i++)\r
+               this->AddEntry((CTGitPath *)&checkedList[i],0,i);\r
        return ;\r
 #if 0\r
 \r
        return ;\r
 #if 0\r
 \r
@@ -1787,6 +1802,12 @@ BOOL CGitStatusListCtrl::OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult)
 {\r
        LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);\r
        *pResult = 0;\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
        if ((pNMLV->uNewState==0)||(pNMLV->uNewState & LVIS_SELECTED)||(pNMLV->uNewState & LVIS_FOCUSED))\r
                return FALSE;\r
 \r
@@ -2288,8 +2309,8 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                }\r
                                if ((m_dwContextMenus & SVNSLC_POPRESOLVE)/*&&(entry->textstatus == git_wc_status_conflicted)*/)\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_POPCONFLICT)||(m_dwContextMenus & SVNSLC_POPRESOLVE))\r
                                        popup.AppendMenu(MF_SEPARATOR);\r
@@ -2318,10 +2339,12 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                        //      {\r
                                        //              if ((m_dwContextMenus & SVNSLC_POPGNUDIFF)&&(wcStatus != git_wc_status_deleted)&&(wcStatus != git_wc_status_missing))\r
                                        //              {\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
                                                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
@@ -2353,6 +2376,21 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                //}\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
                        ///Select Multi item\r
                        //if (GetSelectedCount() > 0)\r
@@ -2475,6 +2513,11 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                        popup.AppendMenuIcon(IDSVNLC_ADD, IDS_STATUSLIST_CONTEXT_ADD, IDI_ADD);\r
                                                }\r
                                        }\r
                                                        popup.AppendMenuIcon(IDSVNLC_ADD, IDS_STATUSLIST_CONTEXT_ADD, IDI_ADD);\r
                                                }\r
                                        }\r
+\r
+                                       if (m_dwContextMenus & SVNSLC_POPDELETE)\r
+                                       {\r
+                                               popup.AppendMenuIcon(IDSVNLC_DELETE, IDS_MENUREMOVE, IDI_DELETE);\r
+                                       }\r
                                //}\r
                                //if ( (wcStatus == git_wc_status_unversioned) || (wcStatus == git_wc_status_deleted) )\r
                                //{\r
                                //}\r
                                //if ( (wcStatus == git_wc_status_unversioned) || (wcStatus == git_wc_status_deleted) )\r
                                //{\r
@@ -2664,6 +2707,16 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                        }\r
                                }\r
                                break;\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
                        case IDSVNLC_GNUDIFF1:\r
                                {\r
                                //      SVNDiff diff(NULL, this->m_hWnd, true);\r
@@ -2680,6 +2733,20 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                                                                                        *filepath,m_CurrentVersion+_T("~1"));\r
                                }\r
                                break;\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
                        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
@@ -2700,7 +2767,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                if(path == NULL)\r
                                                        continue;\r
                                                CString cmd;\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
                                                CString output;\r
                                                if(!g_Git.Run(cmd,&output,CP_ACP))\r
                                                {\r
@@ -2717,6 +2784,67 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                }\r
                                break;\r
 \r
                                }\r
                                break;\r
 \r
+                       case IDSVNLC_DELETE:\r
+                               {\r
+                                       //Collect paths\r
+                                       std::vector<int> selectIndex;\r
+\r
+                                       POSITION pos = GetFirstSelectedItemPosition();\r
+                                       int index;\r
+                                       while ((index = GetNextSelectedItem(pos)) >= 0)\r
+                                       {\r
+                                               selectIndex.push_back(index);\r
+                                       }\r
+\r
+                                       //Create file-list ('\0' separated) for SHFileOperation\r
+                                       CString filelist;\r
+                                       for(int i=0;i<selectIndex.size();i++)\r
+                                       {\r
+                                               index=selectIndex[i];\r
+\r
+                                               CTGitPath * path=(CTGitPath*)GetItemData(index);\r
+                                               ASSERT(path);\r
+                                               if(path == NULL)\r
+                                                       continue;\r
+\r
+                                               filelist += path->GetWinPathString();\r
+                                               filelist += _T("|");\r
+                                       }\r
+                                       filelist += _T("|");\r
+                                       int len = filelist.GetLength();\r
+                                       TCHAR * buf = new TCHAR[len+2];\r
+                                       _tcscpy_s(buf, len+2, filelist);\r
+                                       for (int i=0; i<len; ++i)\r
+                                               if (buf[i] == '|')\r
+                                                       buf[i] = 0;\r
+                                       SHFILEOPSTRUCT fileop;\r
+                                       fileop.hwnd = this->m_hWnd;\r
+                                       fileop.wFunc = FO_DELETE;\r
+                                       fileop.pFrom = buf;\r
+                                       fileop.pTo = NULL;\r
+                                       fileop.fFlags = FOF_NO_CONNECTED_ELEMENTS | ((GetAsyncKeyState(VK_SHIFT) & 0x8000) ? 0 : FOF_ALLOWUNDO);\r
+                                       fileop.lpszProgressTitle = _T("deleting file");\r
+                                       int result = SHFileOperation(&fileop);\r
+                                       delete [] buf;\r
+\r
+                                       if ( (result==0) && (!fileop.fAnyOperationsAborted) )\r
+                                       {\r
+                                               SetRedraw(FALSE);\r
+                                               POSITION pos = NULL;\r
+                                               while ((pos = GetFirstSelectedItemPosition()) != 0)\r
+                                               {\r
+                                                       int index = GetNextSelectedItem(pos);\r
+                                                       if (GetCheck(index))\r
+                                                               m_nSelected--;\r
+                                                       m_nTotal--;\r
+\r
+                                                       RemoveListEntry(index);\r
+                                               }\r
+                                               SetRedraw(TRUE);\r
+                                       }\r
+                               }\r
+                               break;\r
+\r
                        case IDSVNLC_BLAME:\r
                                {\r
                                        CString sCmd;\r
                        case IDSVNLC_BLAME:\r
                                {\r
                                        CString sCmd;\r
@@ -2739,9 +2867,11 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
 \r
                        case IDSVNLC_EDITCONFLICT:\r
                        {\r
 \r
                        case IDSVNLC_EDITCONFLICT:\r
                        {\r
-                               CAppUtils::ConflictEdit(*filepath);\r
+                               CAppUtils::ConflictEdit(*filepath,false,this->m_bIsRevertTheirMy);\r
                                break;\r
                        }\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
                        case IDSVNLC_RESOLVECONFLICT:\r
                        {\r
                                if (CMessageBox::Show(m_hWnd, IDS_PROC_RESOLVE, IDS_APPNAME, MB_ICONQUESTION | MB_YESNO)==IDYES)\r
@@ -2754,14 +2884,39 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                CTGitPath * fentry =(CTGitPath*) this->GetItemData(index);\r
                                                if(fentry == NULL)\r
                                                        continue;\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
+                                               }\r
+                                               output.Empty();\r
                                                if ( fentry->m_Action & CTGitPath::LOGACTIONS_UNMERGED)\r
                                                {\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
                                                        {\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
                                                        }else\r
                                                        {\r
                                                                fentry->m_Action |= CTGitPath::LOGACTIONS_MODIFIED;\r
@@ -2843,7 +2998,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                {\r
                                                        CString temp;\r
                                                        temp.Format(IDS_ERR_FAILEDIGNOREPROPERTY, (LPCTSTR)name);\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
                                                        break;\r
                                                }\r
                                                if (GetCheck(selIndex))\r
@@ -3014,7 +3169,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                {\r
                                                        CString temp;\r
                                                        temp.Format(IDS_ERR_FAILEDIGNOREPROPERTY, (LPCTSTR)name);\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
                                                else\r
                                                {\r
@@ -3168,7 +3323,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
 \r
                                                if (g_Git.Revert(targetList))\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
                                                else\r
                                                {\r
@@ -3184,6 +3339,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                                                {\r
                                                                                        path->m_Action = CTGitPath::LOGACTIONS_UNVER;\r
                                                                                        SetEntryCheck(path,nItem,false);\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
                                                                                        SetItemGroup(nItem,1);\r
                                                                                        this->m_StatusFileList.RemoveItem(*path);\r
                                                                                        this->m_UnRevFileList.AddPath(*path);\r
@@ -3344,19 +3500,19 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                        yes.LoadString(IDS_MSGBOX_YES);\r
                                                        no.LoadString(IDS_MSGBOX_NO);\r
                                                        yestoall.LoadString(IDS_PROC_YESTOALL);\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
                                                        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
                                                                }\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
                                        if (bSuccess)\r
                                        {\r
@@ -3490,7 +3646,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                        }\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
                                        SaveColumnWidths();\r
                                        Show(m_dwShow, 0, m_bShowFolders);\r
                                        }\r
                                        SaveColumnWidths();\r
                                        Show(m_dwShow, 0, m_bShowFolders);\r
@@ -3562,7 +3718,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                                                SVN git;\r
                                                                                if (!git.Move(CTSVNPathList(entry1->GetPath()), entry2->GetPath(), TRUE))\r
                                                                                {\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
@@ -3638,7 +3794,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                        }\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
                                        SetRedraw(TRUE);\r
                                }\r
@@ -3701,7 +3857,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                                }\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
                                        }\r
                                        SetRedraw(TRUE);\r
                                                }\r
                                        }\r
                                        SetRedraw(TRUE);\r
@@ -3958,14 +4114,29 @@ void CGitStatusListCtrl::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult)
 \r
        if( file->m_Action&CTGitPath::LOGACTIONS_UNMERGED )\r
        {\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
 \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
        }\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
 void CGitStatusListCtrl::StartDiffWC(int fileindex)\r
 {\r
        if(fileindex<0)\r
@@ -5469,7 +5640,7 @@ bool CGitStatusListCtrlDropTarget::OnDrop(FORMATETC* pFmtEtc, STGMEDIUM& medium,
                                        }\r
                                        else\r
                                        {\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
                                }\r
                                else\r
@@ -5499,7 +5670,7 @@ bool CGitStatusListCtrlDropTarget::OnDrop(FORMATETC* pFmtEtc, STGMEDIUM& medium,
                                        }\r
                                        else\r
                                        {\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
                                        }\r
                                }\r
                        }\r