OSDN Git Service

Commit dialog support check conflict and mark resolve function.
authorFrank Li <lznuaa@gmail.com>
Thu, 22 Jan 2009 16:13:29 +0000 (00:13 +0800)
committerFrank Li <lznuaa@gmail.com>
Thu, 22 Jan 2009 16:13:29 +0000 (00:13 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Git/GitStatusListCtrl.cpp
src/TortoiseGitBlame/TortoiseGitBlame.vcproj
src/TortoiseProc/AppUtils.cpp
src/TortoiseProc/AppUtils.h
src/TortoiseProc/Commands/CleanupCommand.cpp
src/TortoiseProc/Commands/ConflictEditorCommand.cpp
src/TortoiseProc/CommitDlg.cpp
src/TortoiseProc/TortoiseProc.vcproj

index 2f64d6c..982bab7 100644 (file)
@@ -2316,8 +2316,8 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                }\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
@@ -2752,12 +2752,42 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                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
+                       {\r
+                               CAppUtils::ConflictEdit(*filepath);\r
                                break;\r
+                       }\r
+                       case IDSVNLC_RESOLVECONFLICT:\r
+                       {\r
+                               if (CMessageBox::Show(m_hWnd, IDS_PROC_RESOLVE, IDS_APPNAME, MB_ICONQUESTION | MB_YESNO)==IDYES)\r
+                               {\r
+                                       POSITION pos = GetFirstSelectedItemPosition();\r
+                                       while (pos != 0)\r
+                                       {\r
+                                               int index;\r
+                                               index = GetNextSelectedItem(pos);\r
+                                               CTGitPath * fentry =(CTGitPath*) this->GetItemData(index);\r
+                                               if(fentry == NULL)\r
+                                                       continue;\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_OEMCP))\r
+                                                       {\r
+                                                               CMessageBox::Show(m_hWnd, output, _T("TortoiseSVN"), MB_ICONERROR);\r
+                                                       }else\r
+                                                       {\r
+                                                               fentry->m_Action |= CTGitPath::LOGACTIONS_MODIFIED;\r
+                                                               fentry->m_Action &=~CTGitPath::LOGACTIONS_UNMERGED;\r
+                                                       }\r
+                                               }\r
+                                               \r
+                                       }\r
+                                       Show(m_dwShow, 0, m_bShowFolders);\r
+                               }\r
+                       }\r
+                       break;\r
 #if 0\r
                        case IDSVNLC_COPY:\r
                                CopySelectedEntriesToClipboard(0);\r
@@ -3452,47 +3482,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                        case IDSVNLC_EDITCONFLICT:\r
                                SVNDiff::StartConflictEditor(filepath);\r
                                break;\r
-                       case IDSVNLC_RESOLVECONFLICT:\r
-                       case IDSVNLC_RESOLVEMINE:\r
-                       case IDSVNLC_RESOLVETHEIRS:\r
-                               {\r
-                                       git_wc_conflict_choice_t result = git_wc_conflict_choose_merged;\r
-                                       switch (cmd)\r
-                                       {\r
-                                       case IDSVNLC_RESOLVETHEIRS:\r
-                                               result = git_wc_conflict_choose_theirs_full;\r
-                                               break;\r
-                                       case IDSVNLC_RESOLVEMINE:\r
-                                               result = git_wc_conflict_choose_mine_full;\r
-                                               break;\r
-                                       case IDSVNLC_RESOLVECONFLICT:\r
-                                               result = git_wc_conflict_choose_merged;\r
-                                               break;\r
-                                       }\r
-                                       if (CMessageBox::Show(m_hWnd, IDS_PROC_RESOLVE, IDS_APPNAME, MB_ICONQUESTION | MB_YESNO)==IDYES)\r
-                                       {\r
-                                               SVN git;\r
-                                               POSITION pos = GetFirstSelectedItemPosition();\r
-                                               while (pos != 0)\r
-                                               {\r
-                                                       int index;\r
-                                                       index = GetNextSelectedItem(pos);\r
-                                                       FileEntry * fentry = m_arStatusArray[m_arListArray[index]];\r
-                                                       if (!git.Resolve(fentry->GetPath(), result, FALSE))\r
-                                                       {\r
-                                                               CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);\r
-                                                       }\r
-                                                       else\r
-                                                       {\r
-                                                               fentry->status = git_wc_status_modified;\r
-                                                               fentry->textstatus = git_wc_status_modified;\r
-                                                               fentry->isConflicted = false;\r
-                                                       }\r
-                                               }\r
-                                               Show(m_dwShow, 0, m_bShowFolders);\r
-                                       }\r
-                               }\r
-                               break;\r
+                       \r
                        case IDSVNLC_ADD:\r
                                {\r
                                        SVN git;\r
index ca91d9a..2588f48 100644 (file)
                        />\r
                </Configuration>\r
                <Configuration\r
-                       Name="Debug|x64"\r
-                       OutputDirectory="..\..\bin\debug64\bin"\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="..\..\bin\$(ConfigurationName)\bin"\r
                        IntermediateDirectory="..\..\obj\TortoiseGitBlame\$(ConfigurationName)"\r
                        ConfigurationType="1"\r
                        UseOfMFC="2"\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
+                               ValidateParameters="true"\r
                        />\r
                        <Tool\r
                                Name="VCCLCompilerTool"\r
-                               Optimization="0"\r
+                               Optimization="2"\r
+                               EnableIntrinsicFunctions="true"\r
                                AdditionalIncludeDirectories="..\Git;..\TortoiseProc;..\..\ext\scintilla\include;..\Utils;..\Utils\MiscUI;..\..\ext\hunspell;..\..\ext\ResizableLib;..\Resources"\r
-                               PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"\r
-                               MinimalRebuild="true"\r
-                               BasicRuntimeChecks="3"\r
-                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"\r
+                               MinimalRebuild="false"\r
+                               RuntimeLibrary="2"\r
+                               EnableFunctionLevelLinking="true"\r
                                UsePrecompiledHeader="2"\r
                                WarningLevel="3"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                Name="VCResourceCompilerTool"\r
-                               PreprocessorDefinitions="_DEBUG"\r
+                               PreprocessorDefinitions="NDEBUG"\r
                                Culture="1033"\r
                                AdditionalIncludeDirectories="$(IntDir);..\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
-                               IgnoreDefaultLibraryNames="LIBCMTD"\r
+                               LinkIncremental="1"\r
                                GenerateDebugInformation="true"\r
                                SubSystem="2"\r
-                               TargetMachine="17"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               TargetMachine="1"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                </Configuration>\r
                <Configuration\r
-                       Name="Release|Win32"\r
-                       OutputDirectory="..\..\bin\$(ConfigurationName)\bin"\r
+                       Name="Debug|x64"\r
+                       OutputDirectory="..\..\bin\debug64\bin"\r
                        IntermediateDirectory="..\..\obj\TortoiseGitBlame\$(ConfigurationName)"\r
                        ConfigurationType="1"\r
                        UseOfMFC="2"\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
-                               ValidateParameters="true"\r
+                               TargetEnvironment="3"\r
                        />\r
                        <Tool\r
                                Name="VCCLCompilerTool"\r
-                               Optimization="2"\r
-                               EnableIntrinsicFunctions="true"\r
+                               Optimization="0"\r
                                AdditionalIncludeDirectories="..\Git;..\TortoiseProc;..\..\ext\scintilla\include;..\Utils;..\Utils\MiscUI;..\..\ext\hunspell;..\..\ext\ResizableLib;..\Resources"\r
-                               PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"\r
-                               MinimalRebuild="false"\r
-                               RuntimeLibrary="2"\r
-                               EnableFunctionLevelLinking="true"\r
+                               PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"\r
+                               MinimalRebuild="true"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="3"\r
                                UsePrecompiledHeader="2"\r
                                WarningLevel="3"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                Name="VCResourceCompilerTool"\r
-                               PreprocessorDefinitions="NDEBUG"\r
+                               PreprocessorDefinitions="_DEBUG"\r
                                Culture="1033"\r
                                AdditionalIncludeDirectories="$(IntDir);..\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="LIBCMTD"\r
                                GenerateDebugInformation="true"\r
                                SubSystem="2"\r
-                               OptimizeReferences="2"\r
-                               EnableCOMDATFolding="2"\r
-                               TargetMachine="1"\r
+                               TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
                        >\r
                        <File\r
+                               RelativePath="..\TortoiseProc\Colors.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath=".\EditGotoDlg.cpp"\r
                                >\r
                        </File>\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
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\blameres\output_wnd.ico"\r
+                               RelativePath=".\res\output_wnd.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\res\output_wnd.ico"\r
+                               RelativePath="..\Resources\blameres\output_wnd.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\blameres\output_wnd_hc.ico"\r
+                               RelativePath=".\res\output_wnd_hc.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\res\output_wnd_hc.ico"\r
+                               RelativePath="..\Resources\blameres\output_wnd_hc.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\res\properties_hc.bmp"\r
+                               RelativePath="..\Resources\blameres\properties_hc.bmp"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\blameres\properties_hc.bmp"\r
+                               RelativePath=".\res\properties_hc.bmp"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\res\properties_wnd.ico"\r
+                               RelativePath="..\Resources\blameres\properties_wnd.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\blameres\properties_wnd.ico"\r
+                               RelativePath=".\res\properties_wnd.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\res\Toolbar.bmp"\r
+                               RelativePath="..\Resources\blameres\Toolbar.bmp"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\blameres\Toolbar.bmp"\r
+                               RelativePath=".\res\Toolbar.bmp"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\res\Toolbar256.bmp"\r
+                               RelativePath="..\Resources\blameres\Toolbar256.bmp"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\blameres\Toolbar256.bmp"\r
+                               RelativePath=".\res\Toolbar256.bmp"\r
                                >\r
                        </File>\r
                        <File\r
                                        />\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
-                                       Name="Debug|x64"\r
+                                       Name="Release|Win32"\r
                                        >\r
                                        <Tool\r
                                                Name="VCResourceCompilerTool"\r
                                        />\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
-                                       Name="Release|Win32"\r
+                                       Name="Debug|x64"\r
                                        >\r
                                        <Tool\r
                                                Name="VCResourceCompilerTool"\r
                                </FileConfiguration>\r
                        </File>\r
                        <File\r
-                               RelativePath=".\res\TortoiseGitBlameDoc.ico"\r
+                               RelativePath="..\Resources\blameres\TortoiseGitBlameDoc.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\blameres\TortoiseGitBlameDoc.ico"\r
+                               RelativePath=".\res\TortoiseGitBlameDoc.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                        />\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
-                                       Name="Debug|x64"\r
+                                       Name="Release|Win32"\r
                                        >\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
                                        />\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
-                                       Name="Release|Win32"\r
+                                       Name="Debug|x64"\r
                                        >\r
                                        <Tool\r
                                                Name="VCCustomBuildTool"\r
index abc81d4..f6ebd3f 100644 (file)
@@ -1250,4 +1250,346 @@ bool CAppUtils::GitReset(CString *CommitHash,int type)
 \r
        }\r
        return FALSE;\r
+}\r
+\r
+bool CAppUtils::ConflictEdit(CTGitPath &path,bool bAlternativeTool)\r
+{\r
+       bool bRet = false;\r
+\r
+       CTGitPath merge=path;\r
+       CTGitPath directory = merge.GetDirectory();\r
+       \r
+       \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
 }
\ No newline at end of file
index 8248bb9..45fc0b0 100644 (file)
@@ -166,6 +166,7 @@ public:
 \r
        static bool IgnoreFile(CTGitPath &file, bool IsMask);\r
        static bool GitReset(CString *CommitHash,int type=1);\r
+       static bool ConflictEdit(CTGitPath &file,bool bAlternativeTool=false);\r
 private:\r
        static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2);\r
        static bool GetMimeType(const CTGitPath& file, CString& mimetype);\r
index 4c3b5a5..fb60e17 100644 (file)
@@ -31,11 +31,13 @@ bool CleanupCommand::Execute()
 {\r
        bool bRet = false;\r
 \r
-       CProgressDlg progress;\r
-       progress.m_GitCmd.Format(_T("Git Clean -d -x"));\r
-       if(progress.DoModal()==IDOK)\r
+       if(CMessageBox::Show(NULL,_T("Are you sure clean all unversion files"),_T("TortoiseGit"),MB_YESNO)==IDYES)\r
+       {\r
+               CProgressDlg progress;\r
+               progress.m_GitCmd.Format(_T("Git Clean -d -x -f"));\r
+               if(progress.DoModal()==IDOK)\r
                        return TRUE;\r
-\r
+       }\r
 #if 0\r
        CProgressDlg progress;\r
        progress.SetTitle(IDS_PROC_CLEANUP);\r
index 67ff05f..fe90304 100644 (file)
 \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
+       return CAppUtils::ConflictEdit(this->cmdLinePath,bAlternativeTool);\r
 }\r
index 4caf59f..10751b0 100644 (file)
@@ -123,6 +123,7 @@ BOOL CCommitDlg::OnInitDialog()
        m_ListCtrl.EnableFileDrop();\r
        m_ListCtrl.SetBackgroundImage(IDI_COMMIT_BKG);\r
        \r
+       this->DialogEnableWindow(IDC_COMMIT_AMEND,FALSE);\r
 //     m_ProjectProperties.ReadPropsPathList(m_pathList);\r
        m_cLogMessage.Init(m_ProjectProperties);\r
        m_cLogMessage.SetFont((CString)CRegString(_T("Software\\TortoiseGit\\LogFontName"), _T("Courier New")), (DWORD)CRegDWORD(_T("Software\\TortoiseGit\\LogFontSize"), 8));\r
index bb50e5e..723be75 100644 (file)
                                >\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