OSDN Git Service

Add conflict handle
authorFrank Li <lznuaa@gmail.com>
Thu, 22 Jan 2009 07:32:51 +0000 (15:32 +0800)
committerFrank Li <lznuaa@gmail.com>
Thu, 22 Jan 2009 07:32:51 +0000 (15:32 +0800)
13 files changed:
src/Git/GitStatusListCtrl.cpp
src/Git/GitStatusListCtrl.h
src/Git/TGitPath.cpp
src/Git/TGitPath.h
src/TortoiseProc/Commands/Command.cpp
src/TortoiseProc/Commands/ConflictEditorCommand.cpp [new file with mode: 0644]
src/TortoiseProc/Commands/ConflictEditorCommand.h
src/TortoiseProc/GitDiff.cpp
src/TortoiseProc/GitDiff.h
src/TortoiseProc/GitLogListAction.cpp
src/TortoiseProc/GitLogListBase.cpp
src/TortoiseProc/GitLogListBase.h
src/TortoiseProc/TortoiseProc.vcproj

index b248c5b..2f64d6c 100644 (file)
@@ -2065,7 +2065,7 @@ bool CGitStatusListCtrl::BuildStatistics()
                if(status&(CTGitPath::LOGACTIONS_REPLACED|CTGitPath::LOGACTIONS_MODIFIED))\r
                        m_nModified++;\r
                \r
-               if(status&CTGitPath::LOGACTIONS_CONFLICT)\r
+               if(status&CTGitPath::LOGACTIONS_UNMERGED)\r
                        m_nConflicted++;\r
                \r
                if(status&(CTGitPath::LOGACTIONS_IGNORE|CTGitPath::LOGACTIONS_UNVER))\r
@@ -2303,6 +2303,26 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                if (popup.CreatePopupMenu())\r
                {\r
                        //Add Menu for verion controled file\r
+               \r
+                       if (wcStatus & CTGitPath::LOGACTIONS_UNMERGED)\r
+                       {\r
+                               if ((m_dwContextMenus & SVNSLC_POPCONFLICT)/*&&(entry->textstatus == git_wc_status_conflicted)*/)\r
+                               {\r
+                                       popup.AppendMenuIcon(IDSVNLC_EDITCONFLICT, IDS_MENUCONFLICT, IDI_CONFLICT);\r
+                               }\r
+                               if (m_dwContextMenus & SVNSLC_POPRESOLVE)\r
+                               {\r
+                                       popup.AppendMenuIcon(IDSVNLC_RESOLVECONFLICT, IDS_STATUSLIST_CONTEXT_RESOLVED, IDI_RESOLVE);\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
+                               }\r
+                               if ((m_dwContextMenus & SVNSLC_POPCONFLICT)||(m_dwContextMenus & SVNSLC_POPRESOLVE))\r
+                                       popup.AppendMenu(MF_SEPARATOR);\r
+                       }\r
+\r
                        if (!(wcStatus &CTGitPath::LOGACTIONS_UNVER))\r
                        {\r
                                if (m_dwContextMenus & SVNSLC_POPCOMPAREWITHBASE)\r
@@ -2355,6 +2375,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                //}\r
                        }\r
                        \r
+       \r
                        ///Select Multi item\r
                        //if (GetSelectedCount() > 0)\r
                        //{\r
@@ -2402,17 +2423,17 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                        //              }\r
                        //      }\r
                        //}\r
-                       if ((GetSelectedCount() == 1)&&(!wcStatus & CTGitPath::LOGACTIONS_UNVER)\r
-                               &&(!wcStatus & CTGitPath::LOGACTIONS_IGNORE))\r
+                       if ((GetSelectedCount() == 1)&&(!(wcStatus & CTGitPath::LOGACTIONS_UNVER))\r
+                               &&(!(wcStatus & CTGitPath::LOGACTIONS_IGNORE)))\r
                        {\r
                                if (m_dwContextMenus & SVNSLC_POPSHOWLOG)\r
                                {\r
                                        popup.AppendMenuIcon(IDSVNLC_LOG, IDS_REPOBROWSE_SHOWLOG, IDI_LOG);\r
                                }\r
-//                             if (m_dwContextMenus & SVNSLC_POPBLAME)\r
-//                             {\r
-//                                     popup.AppendMenuIcon(IDSVNLC_BLAME, IDS_MENUBLAME, IDI_BLAME);\r
-//                             }\r
+                               if (m_dwContextMenus & SVNSLC_POPBLAME)\r
+                               {\r
+                                       popup.AppendMenuIcon(IDSVNLC_BLAME, IDS_MENUBLAME, IDI_BLAME);\r
+                               }\r
                        }\r
 //                     if ((wcStatus != git_wc_status_deleted)&&(wcStatus != git_wc_status_missing) && (GetSelectedCount() == 1))\r
 //                     {\r
@@ -2503,27 +2524,8 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                        }\r
                                }\r
                        }\r
-#if 0\r
-                       if (((wcStatus == git_wc_status_conflicted)||(entry->isConflicted)))\r
-                       {\r
-                               if ((m_dwContextMenus & SVNSLC_POPCONFLICT)||(m_dwContextMenus & SVNSLC_POPRESOLVE))\r
-                                       popup.AppendMenu(MF_SEPARATOR);\r
 \r
-                               if ((m_dwContextMenus & SVNSLC_POPCONFLICT)&&(entry->textstatus == git_wc_status_conflicted))\r
-                               {\r
-                                       popup.AppendMenuIcon(IDSVNLC_EDITCONFLICT, IDS_MENUCONFLICT, IDI_CONFLICT);\r
-                               }\r
-                               if (m_dwContextMenus & SVNSLC_POPRESOLVE)\r
-                               {\r
-                                       popup.AppendMenuIcon(IDSVNLC_RESOLVECONFLICT, IDS_STATUSLIST_CONTEXT_RESOLVED, IDI_RESOLVE);\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
-                               }\r
-                       }\r
-#endif\r
+\r
 #if 0                  \r
                        if (GetSelectedCount() > 0)\r
                        {\r
@@ -2728,6 +2730,34 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                        \r
                                }\r
                                break;\r
+\r
+                       case IDSVNLC_BLAME:\r
+                               {\r
+                                       CString sCmd;\r
+                                       sCmd.Format(_T("\"%s\" /command:blame /path:\"%s\""),\r
+                                               (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")), g_Git.m_CurrentDir+filepath->GetWinPath());\r
+\r
+                                       CAppUtils::LaunchApplication(sCmd, NULL, false);\r
+                               }\r
+                               break;\r
+\r
+                       case IDSVNLC_LOG:\r
+                               {\r
+                                       CString sCmd;\r
+                                       sCmd.Format(_T("\"%s\" /command:log /path:\"%s\""),\r
+                                               (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")), g_Git.m_CurrentDir+filepath->GetWinPath());\r
+\r
+                                       CAppUtils::LaunchApplication(sCmd, NULL, false);\r
+                               }\r
+                               break;\r
+\r
+                       case IDSVNLC_EDITCONFLICT:\r
+                               CString sCmd;\r
+                               sCmd.Format(_T("\"%s\" /command:conflicteditor /path:\"%s\""),\r
+                                               (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")), g_Git.m_CurrentDir+filepath->GetWinPath());\r
+                               \r
+                               CAppUtils::LaunchApplication(sCmd, NULL, false);\r
+                               break;\r
 #if 0\r
                        case IDSVNLC_COPY:\r
                                CopySelectedEntriesToClipboard(0);\r
@@ -2960,38 +2990,6 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                        }\r
                                }\r
                                break;\r
-                       case IDSVNLC_LOG:\r
-                               {\r
-                                       CString sCmd;\r
-                                       sCmd.Format(_T("\"%s\" /command:log /path:\"%s\""),\r
-                                               (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")), filepath.GetWinPath());\r
-\r
-                                       if (!filepath.IsUrl())\r
-                                       {\r
-                                               sCmd += _T(" /propspath:\"");\r
-                                               sCmd += filepath.GetWinPathString();\r
-                                               sCmd += _T("\"");\r
-                                       }       \r
-\r
-                                       CAppUtils::LaunchApplication(sCmd, NULL, false);\r
-                               }\r
-                               break;\r
-                       case IDSVNLC_BLAME:\r
-                               {\r
-                                       CString sCmd;\r
-                                       sCmd.Format(_T("\"%s\" /command:blame /path:\"%s\""),\r
-                                               (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")), filepath.GetWinPath());\r
-\r
-                                       if (!filepath.IsUrl())\r
-                                       {\r
-                                               sCmd += _T(" /propspath:\"");\r
-                                               sCmd += filepath.GetWinPathString();\r
-                                               sCmd += _T("\"");\r
-                                       }       \r
-\r
-                                       CAppUtils::LaunchApplication(sCmd, NULL, false);\r
-                               }\r
-                               break;\r
                        case IDSVNLC_OPEN:\r
                                {\r
                                        int ret = (int)ShellExecute(this->m_hWnd, NULL, filepath.GetWinPath(), NULL, NULL, SW_SHOW);\r
@@ -4327,7 +4325,7 @@ void CGitStatusListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
                                // brown  : missing, deleted, replaced\r
                                // green  : merged (or potential merges)\r
                                // red    : conflicts or sure conflicts\r
-                               if(entry->m_Action & CTGitPath::LOGACTIONS_CONFLICT)\r
+                               if(entry->m_Action & CTGitPath::LOGACTIONS_UNMERGED)\r
                                {\r
                                        crText = m_Colors.GetColor(CColors::Conflict);\r
 \r
index 6226cb3..7fda321 100644 (file)
@@ -58,7 +58,7 @@
 #define SVNSLC_SHOWMODIFIED            CTGitPath::LOGACTIONS_MODIFIED\r
 #define SVNSLC_SHOWADDED               CTGitPath::LOGACTIONS_ADDED\r
 #define SVNSLC_SHOWREMOVED             CTGitPath::LOGACTIONS_DELETED\r
-#define SVNSLC_SHOWCONFLICTED  CTGitPath::LOGACTIONS_CONFLICT\r
+#define SVNSLC_SHOWCONFLICTED  CTGitPath::LOGACTIONS_UNMERGED\r
 #define SVNSLC_SHOWMISSING             0x00000000\r
 #define SVNSLC_SHOWREPLACED            CTGitPath::LOGACTIONS_REPLACED\r
 #define SVNSLC_SHOWMERGED              0x00000000\r
index a31dca5..af6a4ab 100644 (file)
@@ -81,6 +81,7 @@ CTGitPath::CTGitPath(const CString& sUnknownPath) :
 {\r
        SetFromUnknown(sUnknownPath);\r
        m_Action=0;\r
+       m_Stage=0;\r
 }\r
 \r
 int CTGitPath::ParserAction(BYTE action)\r
@@ -97,7 +98,10 @@ int CTGitPath::ParserAction(BYTE action)
                m_Action|= LOGACTIONS_DELETED;\r
        if(action == 'U')\r
                m_Action|= LOGACTIONS_UNMERGED;\r
-\r
+       if(action == 'K')\r
+               m_Action|= LOGACTIONS_DELETED;\r
+       if(action == 'H')\r
+               m_Action|= LOGACTIONS_CACHE;\r
        return m_Action;\r
 }\r
 void CTGitPath::SetFromGit(const char* pPath)\r
@@ -827,6 +831,43 @@ CTGitPathList::CTGitPathList(const CTGitPath& firstEntry)
 {\r
        AddPath(firstEntry);\r
 }\r
+int CTGitPathList::ParserFromLsFile(BYTE_VECTOR &out,bool staged)\r
+{\r
+       int pos=0;\r
+       CString one;\r
+       CTGitPath path;\r
+       CString part;\r
+       while(pos>=0 && pos<out.size())\r
+       {\r
+               one.Empty();\r
+               path.Reset();\r
+\r
+               g_Git.StringAppend(&one,&out[pos],CP_OEMCP);\r
+               int tabstart=0;\r
+               path.m_Action=path.ParserAction(out[pos]);\r
+               one.Tokenize(_T("\t"),tabstart); \r
+\r
+               if(tabstart>=0)\r
+                       path.SetFromGit(one.Right(one.GetLength()-tabstart));\r
+\r
+               tabstart=0;\r
+\r
+               part=one.Tokenize(_T(" "),tabstart); //Tag\r
+\r
+               part=one.Tokenize(_T(" "),tabstart); //Mode\r
+               \r
+               part=one.Tokenize(_T(" "),tabstart); //Hash\r
+\r
+               part=one.Tokenize(_T("\t"),tabstart); //Stage\r
+\r
+               path.m_Stage=_ttol(part);\r
+\r
+               this->AddPath(path);\r
+\r
+               pos=out.findNextString(pos);\r
+       }\r
+       return pos;\r
+}\r
 int CTGitPathList::FillUnRev(int action,CTGitPathList *list)\r
 {\r
        int pos=0;\r
@@ -849,23 +890,25 @@ int CTGitPathList::FillUnRev(int action,CTGitPathList *list)
                \r
                if(list==NULL)\r
                {\r
-                       cmd=_T("git.exe ls-files --exclude-standard --full-name --others");\r
+                       cmd=_T("git.exe ls-files --exclude-standard --full-name --others -z");\r
                        cmd+=ignored;\r
                        \r
                }\r
                else\r
-               {       cmd.Format(_T("git.exe ls-files --exclude-standard --full-name --others %s-- \"%s\""),\r
+               {       cmd.Format(_T("git.exe ls-files --exclude-standard --full-name --others -z %s-- \"%s\""),\r
                                        ignored,\r
                                        (*list)[i].GetWinPathString());\r
                }\r
-#ifdef VECTOR_F                \r
-               CString out;\r
-               g_Git.Run(cmd,&out);\r
 \r
+               BYTE_VECTOR out;\r
+               out.clear();\r
+               g_Git.Run(cmd,&out);\r
+               \r
+               pos=0;\r
                CString one;\r
-               while( pos>=0 )\r
+               while( pos>=0 && pos<out.size())\r
                {\r
-                       one=out.Tokenize(_T("\n"),pos);\r
+                       g_Git.StringAppend(&one,&out[pos],CP_OEMCP);\r
                        if(!one.IsEmpty())\r
                        {\r
                                //SetFromGit will clear all status\r
@@ -873,8 +916,9 @@ int CTGitPathList::FillUnRev(int action,CTGitPathList *list)
                                path.m_Action=action;\r
                                AddPath(path);\r
                        }\r
+                       pos=out.findNextString(pos);\r
                }\r
-#endif\r
+\r
        }\r
        return 0;\r
 }\r
@@ -1806,6 +1850,8 @@ CString CTGitPath::GetActionName()
                return _T("Added");\r
        if(m_Action  & CTGitPath::LOGACTIONS_DELETED)\r
                return _T("Deleted");\r
+       if(m_Action  & CTGitPath::LOGACTIONS_UNMERGED)\r
+               return _T("Conflict");\r
        if(m_Action  & CTGitPath::LOGACTIONS_MODIFIED)\r
                return _T("Modified");\r
        if(m_Action  & CTGitPath::LOGACTIONS_REPLACED)\r
index 66d55cb..d6b8964 100644 (file)
@@ -6,7 +6,8 @@ class CTGitPath
 public:\r
        CTGitPath(void);\r
        ~CTGitPath(void);\r
- CTGitPath(const CString& sUnknownPath);\r
+       CTGitPath(const CString& sUnknownPath);\r
+       int m_Stage;\r
 public:\r
        enum\r
        {       \r
@@ -15,9 +16,10 @@ public:
                LOGACTIONS_REPLACED     = 0x00000004,\r
                LOGACTIONS_DELETED      = 0x00000008,\r
                LOGACTIONS_UNMERGED = 0x00000010,\r
+               LOGACTIONS_CACHE        = 0x00000020,\r
                LOGACTIONS_UNVER        = 0x80000000,\r
                LOGACTIONS_IGNORE       = 0x40000000,\r
-               LOGACTIONS_CONFLICT = 0x20000000,\r
+               //LOGACTIONS_CONFLICT = 0x20000000,\r
        };\r
 \r
        CString m_StatAdd;\r
@@ -297,12 +299,14 @@ public:
        // A constructor which allows a path list to be easily built with one initial entry in\r
        explicit CTGitPathList(const CTGitPath& firstEntry);\r
        int m_Action;\r
+\r
 public:\r
        void AddPath(const CTGitPath& newPath);\r
        bool LoadFromFile(const CTGitPath& filename);\r
        bool WriteToFile(const CString& sFilename, bool bANSI = false) const;\r
        CTGitPath * LookForGitPath(CString path);\r
        int     ParserFromLog(BYTE_VECTOR &log);\r
+       int ParserFromLsFile(BYTE_VECTOR &out,bool staged=true);\r
        int FillUnRev(int Action,CTGitPathList *list=NULL);\r
        int GetAction();\r
        /**\r
index 014a0b6..6d4cce3 100644 (file)
@@ -47,6 +47,7 @@
 #include "ImportPatchCommand.h"\r
 #include "BlameCommand.h"\r
 #include "SettingsCommand.h"\r
+#include "ConflictEditorCommand.h"\r
 #if 0\r
 \r
 \r
@@ -54,7 +55,7 @@
 #include "CheckoutCommand.h"\r
 #include "CleanupCommand.h"\r
 \r
-#include "ConflictEditorCommand.h"\r
+\r
 #include "CopyCommand.h"\r
 #include "CrashCommand.h"\r
 #include "CreatePatchCommand.h"\r
@@ -294,6 +295,8 @@ Command * CommandServer::GetCommand(const CString& sCmd)
                return new BlameCommand;\r
        case cmdSettings:\r
                return new SettingsCommand;\r
+       case cmdConflictEditor:\r
+               return new ConflictEditorCommand;\r
 #if 0\r
 \r
        case cmdCat:\r
@@ -303,8 +306,7 @@ Command * CommandServer::GetCommand(const CString& sCmd)
        case cmdCleanup:\r
                return new CleanupCommand;\r
 \r
-       case cmdConflictEditor:\r
-               return new ConflictEditorCommand;\r
+       \r
        case cmdCopy:\r
                return new CopyCommand;\r
        case cmdCrash:\r
diff --git a/src/TortoiseProc/Commands/ConflictEditorCommand.cpp b/src/TortoiseProc/Commands/ConflictEditorCommand.cpp
new file mode 100644 (file)
index 0000000..67ff05f
--- /dev/null
@@ -0,0 +1,371 @@
+// TortoiseSVN - a Windows shell extension for easy version control\r
+\r
+// Copyright (C) 2008-2009 - TortoiseSVN\r
+\r
+// This program is free software; you can redistribute it and/or\r
+// modify it under the terms of the GNU General Public License\r
+// as published by the Free Software Foundation; either version 2\r
+// of the License, or (at your option) any later version.\r
+\r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+// GNU General Public License for more details.\r
+\r
+// You should have received a copy of the GNU General Public License\r
+// along with this program; if not, write to the Free Software Foundation,\r
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+//\r
+#pragma once\r
+#include "stdafx.h"\r
+#include "ConflictEditorCommand.h"\r
+#include "GitStatus.h"\r
+#include "GitDiff.h"\r
+//#include "SVNInfo.h"\r
+#include "UnicodeUtils.h"\r
+#include "PathUtils.h"\r
+#include "AppUtils.h"\r
+//#include "EditPropConflictDlg.h"\r
+//#include "TreeConflictEditorDlg.h"\r
+\r
+bool ConflictEditorCommand::Execute()\r
+{\r
+       bool bRet = false;\r
+\r
+       CTGitPath merge = cmdLinePath;\r
+       CTGitPath directory = merge.GetDirectory();\r
+       \r
+       bool bAlternativeTool = !!parser.HasKey(_T("alternative"));\r
+\r
+       // we have the conflicted file (%merged)\r
+       // now look for the other required files\r
+       //GitStatus stat;\r
+       //stat.GetStatus(merge);\r
+       //if (stat.status == NULL)\r
+       //      return false;\r
+\r
+       BYTE_VECTOR vector;\r
+\r
+       CString cmd;\r
+       cmd.Format(_T("git.exe ls-files -u -t -z -- \"%s\""),merge.GetGitPathString());\r
+\r
+       if(g_Git.Run(cmd,&vector))\r
+       {\r
+               return FALSE;\r
+       }\r
+\r
+       CTGitPathList list;\r
+       list.ParserFromLsFile(vector);\r
+\r
+       if(list.GetCount() == 0)\r
+               return FALSE;\r
+\r
+       TCHAR szTempName[512];  \r
+       GetTempFileName(_T(""),_T(""),0,szTempName);\r
+       CString temp(szTempName);\r
+       temp=temp.Mid(1,temp.GetLength()-5);\r
+\r
+       CTGitPath theirs;\r
+       CTGitPath mine;\r
+       CTGitPath base;\r
+\r
+       CString format;\r
+       format=g_Git.m_CurrentDir+_T("\\")+directory.GetWinPathString()+merge.GetFilename()+CString(_T(".%s."))+temp+merge.GetFileExtension();\r
+\r
+       CString file;\r
+       file.Format(format,_T("LOCAL"));\r
+       mine.SetFromGit(file);\r
+       file.Format(format,_T("REMOTE"));\r
+       theirs.SetFromGit(file);\r
+       file.Format(format,_T("BASE"));\r
+       base.SetFromGit(file);\r
+\r
+       \r
+       format=_T("git.exe cat-file blob \":%d:%s\"");\r
+       for(int i=0;i<list.GetCount();i++)\r
+       {\r
+               CString cmd;\r
+               CString outfile;\r
+               cmd.Format(format,list[i].m_Stage,list[i].GetGitPathString());\r
+\r
+               if( list[i].m_Stage == 1)\r
+               {\r
+                       outfile=base.GetWinPathString();\r
+               }\r
+               if( list[i].m_Stage == 2 )\r
+               {\r
+                       outfile=mine.GetWinPathString();\r
+               }\r
+               if( list[i].m_Stage == 3 )\r
+               {\r
+                       outfile=theirs.GetWinPathString();\r
+               }\r
+               g_Git.RunLogFile(cmd,outfile);\r
+       }\r
+\r
+       merge.SetFromWin(g_Git.m_CurrentDir+_T("\\")+merge.GetWinPathString());\r
+       bRet = !!CAppUtils::StartExtMerge(base, theirs, mine, merge,_T("BASE"),_T("REMOTE"),_T("LOCAL"));\r
+\r
+#if 0\r
+\r
+       CAppUtils::StartExtMerge(CAppUtils::MergeFlags().AlternativeTool(bAlternativeTool), \r
+                       base, theirs, mine, merge);\r
+#endif\r
+#if 0\r
+       if (stat.status->text_status == svn_wc_status_conflicted)\r
+       {\r
+               // we have a text conflict, use our merge tool to resolve the conflict\r
+\r
+               CTSVNPath theirs(directory);\r
+               CTSVNPath mine(directory);\r
+               CTSVNPath base(directory);\r
+               bool bConflictData = false;\r
+\r
+               if ((stat.status->entry)&&(stat.status->entry->conflict_new))\r
+               {\r
+                       theirs.AppendPathString(CUnicodeUtils::GetUnicode(stat.status->entry->conflict_new));\r
+                       bConflictData = true;\r
+               }\r
+               if ((stat.status->entry)&&(stat.status->entry->conflict_old))\r
+               {\r
+                       base.AppendPathString(CUnicodeUtils::GetUnicode(stat.status->entry->conflict_old));\r
+                       bConflictData = true;\r
+               }\r
+               if ((stat.status->entry)&&(stat.status->entry->conflict_wrk))\r
+               {\r
+                       mine.AppendPathString(CUnicodeUtils::GetUnicode(stat.status->entry->conflict_wrk));\r
+                       bConflictData = true;\r
+               }\r
+               else\r
+               {\r
+                       mine = merge;\r
+               }\r
+               if (bConflictData)\r
+                       bRet = !!CAppUtils::StartExtMerge(CAppUtils::MergeFlags().AlternativeTool(bAlternativeTool), \r
+                                                                                               base, theirs, mine, merge);\r
+       }\r
+\r
+       if (stat.status->prop_status == svn_wc_status_conflicted)\r
+       {\r
+               // we have a property conflict\r
+               CTSVNPath prej(directory);\r
+               if ((stat.status->entry)&&(stat.status->entry->prejfile))\r
+               {\r
+                       prej.AppendPathString(CUnicodeUtils::GetUnicode(stat.status->entry->prejfile));\r
+                       // there's a problem: the prej file contains a _description_ of the conflict, and\r
+                       // that description string might be translated. That means we have no way of parsing\r
+                       // the file to find out the conflicting values.\r
+                       // The only thing we can do: show a dialog with the conflict description, then\r
+                       // let the user either accept the existing property or open the property edit dialog\r
+                       // to manually change the properties and values. And a button to mark the conflict as\r
+                       // resolved.\r
+                       CEditPropConflictDlg dlg;\r
+                       dlg.SetPrejFile(prej);\r
+                       dlg.SetConflictedItem(merge);\r
+                       bRet = (dlg.DoModal() != IDCANCEL);\r
+               }\r
+       }\r
+\r
+       if (stat.status->tree_conflict)\r
+       {\r
+               // we have a tree conflict\r
+               SVNInfo info;\r
+               const SVNInfoData * pInfoData = info.GetFirstFileInfo(merge, SVNRev(), SVNRev());\r
+               if (pInfoData)\r
+               {\r
+                       if (pInfoData->treeconflict_kind == svn_wc_conflict_kind_text)\r
+                       {\r
+                               CTSVNPath theirs(directory);\r
+                               CTSVNPath mine(directory);\r
+                               CTSVNPath base(directory);\r
+                               bool bConflictData = false;\r
+\r
+                               if (pInfoData->treeconflict_theirfile)\r
+                               {\r
+                                       theirs.AppendPathString(pInfoData->treeconflict_theirfile);\r
+                                       bConflictData = true;\r
+                               }\r
+                               if (pInfoData->treeconflict_basefile)\r
+                               {\r
+                                       base.AppendPathString(pInfoData->treeconflict_basefile);\r
+                                       bConflictData = true;\r
+                               }\r
+                               if (pInfoData->treeconflict_myfile)\r
+                               {\r
+                                       mine.AppendPathString(pInfoData->treeconflict_myfile);\r
+                                       bConflictData = true;\r
+                               }\r
+                               else\r
+                               {\r
+                                       mine = merge;\r
+                               }\r
+                               if (bConflictData)\r
+                                       bRet = !!CAppUtils::StartExtMerge(CAppUtils::MergeFlags().AlternativeTool(bAlternativeTool),\r
+                                                                                                               base, theirs, mine, merge);\r
+                       }\r
+                       else if (pInfoData->treeconflict_kind == svn_wc_conflict_kind_tree)\r
+                       {\r
+                               CString sConflictAction;\r
+                               CString sConflictReason;\r
+                               CString sResolveTheirs;\r
+                               CString sResolveMine;\r
+                               CTSVNPath treeConflictPath = CTSVNPath(pInfoData->treeconflict_path);\r
+                               CString sItemName = treeConflictPath.GetUIFileOrDirectoryName();\r
+                               \r
+                               if (pInfoData->treeconflict_nodekind == svn_node_file)\r
+                               {\r
+                                       switch (pInfoData->treeconflict_operation)\r
+                                       {\r
+                                       case svn_wc_operation_update:\r
+                                               switch (pInfoData->treeconflict_action)\r
+                                               {\r
+                                               case svn_wc_conflict_action_edit:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_FILEUPDATEEDIT, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE);\r
+                                                       break;\r
+                                               case svn_wc_conflict_action_add:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_FILEUPDATEADD, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE);\r
+                                                       break;\r
+                                               case svn_wc_conflict_action_delete:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_FILEUPDATEDELETE, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEFILE);\r
+                                                       break;\r
+                                               }\r
+                                               break;\r
+                                       case svn_wc_operation_switch:\r
+                                               switch (pInfoData->treeconflict_action)\r
+                                               {\r
+                                               case svn_wc_conflict_action_edit:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_FILESWITCHEDIT, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE);\r
+                                                       break;\r
+                                               case svn_wc_conflict_action_add:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_FILESWITCHADD, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE);\r
+                                                       break;\r
+                                               case svn_wc_conflict_action_delete:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_FILESWITCHDELETE, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEFILE);\r
+                                                       break;\r
+                                               }\r
+                                               break;\r
+                                       case svn_wc_operation_merge:\r
+                                               switch (pInfoData->treeconflict_action)\r
+                                               {\r
+                                               case svn_wc_conflict_action_edit:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_FILEMERGEEDIT, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE);\r
+                                                       break;\r
+                                               case svn_wc_conflict_action_add:\r
+                                                       sResolveTheirs.Format(IDS_TREECONFLICT_FILEMERGEADD, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE);\r
+                                                       break;\r
+                                               case svn_wc_conflict_action_delete:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_FILEMERGEDELETE, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEFILE);\r
+                                                       break;\r
+                                               }\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               else if (pInfoData->treeconflict_nodekind == svn_node_dir)\r
+                               {\r
+                                       switch (pInfoData->treeconflict_operation)\r
+                                       {\r
+                                       case svn_wc_operation_update:\r
+                                               switch (pInfoData->treeconflict_action)\r
+                                               {\r
+                                               case svn_wc_conflict_action_edit:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_DIRUPDATEEDIT, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR);\r
+                                                       break;\r
+                                               case svn_wc_conflict_action_add:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_DIRUPDATEADD, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR);\r
+                                                       break;\r
+                                               case svn_wc_conflict_action_delete:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_DIRUPDATEDELETE, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEDIR);\r
+                                                       break;\r
+                                               }\r
+                                               break;\r
+                                       case svn_wc_operation_switch:\r
+                                               switch (pInfoData->treeconflict_action)\r
+                                               {\r
+                                               case svn_wc_conflict_action_edit:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_DIRSWITCHEDIT, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR);\r
+                                                       break;\r
+                                               case svn_wc_conflict_action_add:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_DIRSWITCHADD, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR);\r
+                                                       break;\r
+                                               case svn_wc_conflict_action_delete:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_DIRSWITCHDELETE, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEDIR);\r
+                                                       break;\r
+                                               }\r
+                                               break;\r
+                                       case svn_wc_operation_merge:\r
+                                               switch (pInfoData->treeconflict_action)\r
+                                               {\r
+                                               case svn_wc_conflict_action_edit:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_DIRMERGEEDIT, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR);\r
+                                                       break;\r
+                                               case svn_wc_conflict_action_add:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_DIRMERGEADD, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR);\r
+                                                       break;\r
+                                               case svn_wc_conflict_action_delete:\r
+                                                       sConflictAction.Format(IDS_TREECONFLICT_DIRMERGEDELETE, (LPCTSTR)sItemName);\r
+                                                       sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEDIR);\r
+                                                       break;\r
+                                               }\r
+                                               break;\r
+                                       }\r
+                               }\r
+\r
+                               UINT uReasonID = 0;\r
+                               switch (pInfoData->treeconflict_reason)\r
+                               { \r
+                               case svn_wc_conflict_reason_edited:\r
+                                       uReasonID = IDS_TREECONFLICT_REASON_EDITED;\r
+                                       sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_KEEPLOCALDIR : IDS_TREECONFLICT_RESOLVE_KEEPLOCALFILE);\r
+                                       break;\r
+                               case svn_wc_conflict_reason_obstructed:\r
+                                       uReasonID = IDS_TREECONFLICT_REASON_OBSTRUCTED;\r
+                                       sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_KEEPLOCALDIR : IDS_TREECONFLICT_RESOLVE_KEEPLOCALFILE);\r
+                                       break;\r
+                               case svn_wc_conflict_reason_deleted:\r
+                                       uReasonID = IDS_TREECONFLICT_REASON_DELETED;\r
+                                       sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_REMOVEDIR : IDS_TREECONFLICT_RESOLVE_REMOVEFILE);\r
+                                       break;\r
+                               case svn_wc_conflict_reason_added:\r
+                                       uReasonID = IDS_TREECONFLICT_REASON_ADDED;\r
+                                       sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_KEEPLOCALDIR : IDS_TREECONFLICT_RESOLVE_KEEPLOCALFILE);\r
+                                       break;\r
+                               case svn_wc_conflict_reason_missing:\r
+                                       uReasonID = IDS_TREECONFLICT_REASON_MISSING;\r
+                                       sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_REMOVEDIR : IDS_TREECONFLICT_RESOLVE_REMOVEFILE);\r
+                                       break;\r
+                               case svn_wc_conflict_reason_unversioned:\r
+                                       uReasonID = IDS_TREECONFLICT_REASON_UNVERSIONED;\r
+                                       sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_KEEPLOCALDIR : IDS_TREECONFLICT_RESOLVE_KEEPLOCALFILE);\r
+                                       break;\r
+                               }\r
+                               sConflictReason.Format(uReasonID, (LPCTSTR)sConflictAction);\r
+\r
+                               CTreeConflictEditorDlg dlg;\r
+                               dlg.SetConflictInfoText(sConflictReason);\r
+                               dlg.SetResolveTexts(sResolveTheirs, sResolveMine);\r
+                               dlg.SetPath(treeConflictPath);\r
+                               INT_PTR dlgRet = dlg.DoModal();\r
+                               bRet = (dlgRet != IDCANCEL);\r
+                       }\r
+               }\r
+       }\r
+#endif\r
+       return bRet;\r
+}\r
index 0436705..dd88eb9 100644 (file)
@@ -31,10 +31,7 @@ public:
        /**\r
         * Executes the command.\r
         */\r
-       virtual bool                    Execute()\r
-       {\r
-//             return SVNDiff::StartConflictEditor(cmdLinePath);\r
-       }\r
+       virtual bool                    Execute();\r
 };\r
 \r
 \r
index 5a08e47..ff446c1 100644 (file)
@@ -108,3 +108,8 @@ int CGitDiff::Diff(CTGitPath * pPath,CTGitPath * pPath2, git_revnum_t & rev1, gi
 \r
        return 0;\r
 }\r
+\r
+int CGitDiff::StartConflictEditor(CTGitPath* file)\r
+{\r
+       return 0;\r
+}
\ No newline at end of file
index a2e5385..0fe8ffa 100644 (file)
@@ -13,4 +13,5 @@ public:
        // Use two path to handle rename cases\r
        static int Diff(CTGitPath * pPath1, CTGitPath *pPath2 ,git_revnum_t & rev1, git_revnum_t & rev2, bool blame=false, bool unified=false);\r
        static int DiffNull(CTGitPath *pPath, git_revnum_t &rev1);\r
+       static int StartConflictEditor(CTGitPath* filepath);\r
 };\r
index 5f5f6fa..230ad54 100644 (file)
@@ -175,7 +175,9 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                        g_Git.GetMapHashToFriendName(m_HashMap);\r
                        Invalidate();\r
                        break;\r
+               case ID_RESET:\r
 \r
+                       break;\r
                default:\r
                        //CMessageBox::Show(NULL,_T("Have not implemented"),_T("TortoiseGit"),MB_OK);\r
                        break;\r
index 4997bd7..b60db80 100644 (file)
@@ -1043,6 +1043,9 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point)
                        //if (m_hasWC)\r
                        //      popup.AppendMenuIcon(ID_MERGEREV, IDS_LOG_POPUP_MERGEREV, IDI_MERGE);\r
                        \r
+                       CString str;\r
+                       str.Format(_T("Reset %s to this"),g_Git.GetCurrentBranch());\r
+                       popup.AppendMenuIcon(ID_RESET,str,IDI_REVERT);\r
                        popup.AppendMenuIcon(ID_SWITCHTOREV, _T("Switch/Checkout to this") , IDI_SWITCH);\r
                        popup.AppendMenuIcon(ID_CREATE_BRANCH, _T("Create Branch at this version") , IDI_COPY);\r
                        popup.AppendMenuIcon(ID_CREATE_TAG, _T("Create Tag at this version"), IDI_COPY);\r
index fb3dfd7..fc27629 100644 (file)
@@ -123,7 +123,8 @@ public:
        ID_CHERRY_PICK,\r
        ID_CREATE_BRANCH,\r
        ID_CREATE_TAG,\r
-       ID_SWITCHTOREV\r
+       ID_SWITCHTOREV,\r
+       ID_RESET\r
        };\r
        void InsertGitColumn();\r
        void ResizeAllListCtrlCols();\r
index e6ac0b3..a438452 100644 (file)
                        />\r
                </Configuration>\r
                <Configuration\r
-                       Name="Debug|x64"\r
-                       OutputDirectory="..\..\bin\Debug64\bin"\r
-                       IntermediateDirectory="..\..\obj\TortoiseProc\Debug64"\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="..\..\bin\$(ConfigurationName)\bin"\r
+                       IntermediateDirectory="..\..\obj\TortoiseProc\$(ConfigurationName)"\r
                        ConfigurationType="1"\r
                        UseOfMFC="2"\r
-                       UseOfATL="0"\r
                        CharacterSet="1"\r
+                       WholeProgramOptimization="1"\r
                        >\r
                        <Tool\r
                                Name="VCPreBuildEventTool"\r
                        />\r
                        <Tool\r
                                Name="VCMIDLTool"\r
-                               PreprocessorDefinitions="_DEBUG"\r
+                               PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="false"\r
-                               TargetEnvironment="3"\r
                        />\r
                        <Tool\r
                                Name="VCCLCompilerTool"\r
-                               Optimization="0"\r
+                               Optimization="1"\r
+                               InlineFunctionExpansion="1"\r
+                               FavorSizeOrSpeed="2"\r
                                AdditionalIncludeDirectories="..\TortoiseProc;..\Resources;&quot;$InputDir&quot;;../../ext/ResizableLib;../Git;&quot;../../ext/apr-util/include&quot;;&quot;../../ext/apr-util/xml/expat/lib&quot;;../../ext/Subversion/subversion/include;../../ext/Subversion/subversion/libsvn_client;../../ext/apr/include;../../ext/boost;..\Utils;..\SVN;..\..\ext\ResizableLib;..\crashrpt;&quot;..\..\ext\libintl\libintl3-win32\inc&quot;;..\..\ext\hunspell;..\..\ext\scintilla\include;..\Utils\TreePropSheet;..\Utils\ColourPickerXP;..\Utils\NewMenu;..\Utils\MiscUI;..\LogCache;&quot;../../ext/cyrus-sasl/include&quot;;../../../common/openssl/inc32;.\RevisionGraph;..\TortoiseShell"\r
-                               PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG;SVN_DEBUG;ENABLE_NLS;THESAURUS"\r
-                               MinimalRebuild="true"\r
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;THESAURUS"\r
+                               StringPooling="true"\r
+                               MinimalRebuild="false"\r
                                ExceptionHandling="2"\r
-                               RuntimeLibrary="3"\r
+                               RuntimeLibrary="2"\r
+                               BufferSecurityCheck="false"\r
                                TreatWChar_tAsBuiltInType="true"\r
                                ForceConformanceInForLoopScope="true"\r
                                RuntimeTypeInfo="true"\r
                        />\r
                        <Tool\r
                                Name="VCResourceCompilerTool"\r
-                               PreprocessorDefinitions="_DEBUG"\r
+                               PreprocessorDefinitions="NDEBUG"\r
                                Culture="1033"\r
                                AdditionalIncludeDirectories="&quot;$(IntDir)&quot;;..\TortoiseShell"\r
                        />\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="Crypt32.lib gdiplus.lib shfolder.lib shell32.lib comctl32.lib ws2_32.lib rpcrt4.lib shlwapi.lib wininet.lib version.lib"\r
-                               LinkIncremental="2"\r
+                               LinkIncremental="1"\r
                                IgnoreDefaultLibraryNames="libcd.lib;libc;shell32;LIBCMT"\r
                                DelayLoadDLLs="gdiplus.dll"\r
                                GenerateDebugInformation="true"\r
                                SubSystem="2"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               OptimizeForWindows98="0"\r
                                RandomizedBaseAddress="1"\r
                                DataExecutionPrevention="0"\r
-                               TargetMachine="17"\r
+                               TargetMachine="1"\r
+                               Profile="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                </Configuration>\r
                <Configuration\r
-                       Name="Release|Win32"\r
-                       OutputDirectory="..\..\bin\$(ConfigurationName)\bin"\r
-                       IntermediateDirectory="..\..\obj\TortoiseProc\$(ConfigurationName)"\r
+                       Name="Debug|x64"\r
+                       OutputDirectory="..\..\bin\Debug64\bin"\r
+                       IntermediateDirectory="..\..\obj\TortoiseProc\Debug64"\r
                        ConfigurationType="1"\r
                        UseOfMFC="2"\r
+                       UseOfATL="0"\r
                        CharacterSet="1"\r
-                       WholeProgramOptimization="1"\r
                        >\r
                        <Tool\r
                                Name="VCPreBuildEventTool"\r
                        />\r
                        <Tool\r
                                Name="VCMIDLTool"\r
-                               PreprocessorDefinitions="NDEBUG"\r
+                               PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="false"\r
+                               TargetEnvironment="3"\r
                        />\r
                        <Tool\r
                                Name="VCCLCompilerTool"\r
-                               Optimization="1"\r
-                               InlineFunctionExpansion="1"\r
-                               FavorSizeOrSpeed="2"\r
+                               Optimization="0"\r
                                AdditionalIncludeDirectories="..\TortoiseProc;..\Resources;&quot;$InputDir&quot;;../../ext/ResizableLib;../Git;&quot;../../ext/apr-util/include&quot;;&quot;../../ext/apr-util/xml/expat/lib&quot;;../../ext/Subversion/subversion/include;../../ext/Subversion/subversion/libsvn_client;../../ext/apr/include;../../ext/boost;..\Utils;..\SVN;..\..\ext\ResizableLib;..\crashrpt;&quot;..\..\ext\libintl\libintl3-win32\inc&quot;;..\..\ext\hunspell;..\..\ext\scintilla\include;..\Utils\TreePropSheet;..\Utils\ColourPickerXP;..\Utils\NewMenu;..\Utils\MiscUI;..\LogCache;&quot;../../ext/cyrus-sasl/include&quot;;../../../common/openssl/inc32;.\RevisionGraph;..\TortoiseShell"\r
-                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;THESAURUS"\r
-                               StringPooling="true"\r
-                               MinimalRebuild="false"\r
+                               PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG;SVN_DEBUG;ENABLE_NLS;THESAURUS"\r
+                               MinimalRebuild="true"\r
                                ExceptionHandling="2"\r
-                               RuntimeLibrary="2"\r
-                               BufferSecurityCheck="false"\r
+                               RuntimeLibrary="3"\r
                                TreatWChar_tAsBuiltInType="true"\r
                                ForceConformanceInForLoopScope="true"\r
                                RuntimeTypeInfo="true"\r
                        />\r
                        <Tool\r
                                Name="VCResourceCompilerTool"\r
-                               PreprocessorDefinitions="NDEBUG"\r
+                               PreprocessorDefinitions="_DEBUG"\r
                                Culture="1033"\r
                                AdditionalIncludeDirectories="&quot;$(IntDir)&quot;;..\TortoiseShell"\r
                        />\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="Crypt32.lib gdiplus.lib shfolder.lib shell32.lib comctl32.lib ws2_32.lib rpcrt4.lib shlwapi.lib wininet.lib version.lib"\r
-                               LinkIncremental="1"\r
+                               LinkIncremental="2"\r
                                IgnoreDefaultLibraryNames="libcd.lib;libc;shell32;LIBCMT"\r
                                DelayLoadDLLs="gdiplus.dll"\r
                                GenerateDebugInformation="true"\r
                                SubSystem="2"\r
-                               OptimizeReferences="2"\r
-                               EnableCOMDATFolding="2"\r
-                               OptimizeForWindows98="0"\r
                                RandomizedBaseAddress="1"\r
                                DataExecutionPrevention="0"\r
-                               TargetMachine="1"\r
-                               Profile="true"\r
+                               TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\explorer.ico"\r
+                               RelativePath="..\Resources\explorer.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\explorer.ico"\r
+                               RelativePath=".\explorer.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\newfolder.ico"\r
+                               RelativePath="..\Resources\newfolder.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\newfolder.ico"\r
+                               RelativePath=".\newfolder.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\open.ico"\r
+                               RelativePath="..\Resources\open.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\open.ico"\r
+                               RelativePath=".\open.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\save.ico"\r
+                               RelativePath="..\Resources\save.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\save.ico"\r
+                               RelativePath=".\save.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\saveas.ico"\r
+                               RelativePath="..\Resources\saveas.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\saveas.ico"\r
+                               RelativePath=".\saveas.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\up.ico"\r
+                               RelativePath="..\Resources\up.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\up.ico"\r
+                               RelativePath=".\up.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                        >\r
                                </File>\r
                        </Filter>\r
+                       <Filter\r
+                               Name="Conflict"\r
+                               >\r
+                               <File\r
+                                       RelativePath=".\Commands\ConflictEditorCommand.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\Commands\ConflictEditorCommand.h"\r
+                                       >\r
+                               </File>\r
+                       </Filter>\r
                </Filter>\r
                <Filter\r
                        Name="Utility Dialogs"\r
                                />\r
                        </FileConfiguration>\r
                        <FileConfiguration\r
-                               Name="Debug|x64"\r
+                               Name="Release|Win32"\r
                                >\r
                                <Tool\r
                                        Name="VCCLCompilerTool"\r
                                />\r
                        </FileConfiguration>\r
                        <FileConfiguration\r
-                               Name="Release|Win32"\r
+                               Name="Debug|x64"\r
                                >\r
                                <Tool\r
                                        Name="VCCLCompilerTool"\r