OSDN Git Service

Add SYNC dialog
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / Commands / ConflictEditorCommand.cpp
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