From 1aca636da79028349bb7bc39d4bcaddb7e9f6396 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Fri, 23 Jan 2009 00:13:29 +0800 Subject: [PATCH] Commit dialog support check conflict and mark resolve function. Signed-off-by: Frank Li --- src/Git/GitStatusListCtrl.cpp | 86 +++--- src/TortoiseGitBlame/TortoiseGitBlame.vcproj | 102 +++--- src/TortoiseProc/AppUtils.cpp | 342 +++++++++++++++++++++ src/TortoiseProc/AppUtils.h | 1 + src/TortoiseProc/Commands/CleanupCommand.cpp | 10 +- .../Commands/ConflictEditorCommand.cpp | 338 +------------------- src/TortoiseProc/CommitDlg.cpp | 1 + src/TortoiseProc/TortoiseProc.vcproj | 24 +- 8 files changed, 454 insertions(+), 450 deletions(-) diff --git a/src/Git/GitStatusListCtrl.cpp b/src/Git/GitStatusListCtrl.cpp index 2f64d6c..982bab7 100644 --- a/src/Git/GitStatusListCtrl.cpp +++ b/src/Git/GitStatusListCtrl.cpp @@ -2316,8 +2316,8 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point) } if ((m_dwContextMenus & SVNSLC_POPRESOLVE)/*&&(entry->textstatus == git_wc_status_conflicted)*/) { - popup.AppendMenuIcon(IDSVNLC_RESOLVETHEIRS, IDS_SVNPROGRESS_MENUUSETHEIRS, IDI_RESOLVE); - popup.AppendMenuIcon(IDSVNLC_RESOLVEMINE, IDS_SVNPROGRESS_MENUUSEMINE, IDI_RESOLVE); + //popup.AppendMenuIcon(IDSVNLC_RESOLVETHEIRS, IDS_SVNPROGRESS_MENUUSETHEIRS, IDI_RESOLVE); + //popup.AppendMenuIcon(IDSVNLC_RESOLVEMINE, IDS_SVNPROGRESS_MENUUSEMINE, IDI_RESOLVE); } if ((m_dwContextMenus & SVNSLC_POPCONFLICT)||(m_dwContextMenus & SVNSLC_POPRESOLVE)) popup.AppendMenu(MF_SEPARATOR); @@ -2752,12 +2752,42 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point) break; case IDSVNLC_EDITCONFLICT: - CString sCmd; - sCmd.Format(_T("\"%s\" /command:conflicteditor /path:\"%s\""), - (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")), g_Git.m_CurrentDir+filepath->GetWinPath()); - - CAppUtils::LaunchApplication(sCmd, NULL, false); + { + CAppUtils::ConflictEdit(*filepath); break; + } + case IDSVNLC_RESOLVECONFLICT: + { + if (CMessageBox::Show(m_hWnd, IDS_PROC_RESOLVE, IDS_APPNAME, MB_ICONQUESTION | MB_YESNO)==IDYES) + { + POSITION pos = GetFirstSelectedItemPosition(); + while (pos != 0) + { + int index; + index = GetNextSelectedItem(pos); + CTGitPath * fentry =(CTGitPath*) this->GetItemData(index); + if(fentry == NULL) + continue; + + if ( fentry->m_Action & CTGitPath::LOGACTIONS_UNMERGED) + { + CString cmd,output; + cmd.Format(_T("git.exe add \"%s\""),fentry->GetGitPathString()); + if(g_Git.Run(cmd,&output,CP_OEMCP)) + { + CMessageBox::Show(m_hWnd, output, _T("TortoiseSVN"), MB_ICONERROR); + }else + { + fentry->m_Action |= CTGitPath::LOGACTIONS_MODIFIED; + fentry->m_Action &=~CTGitPath::LOGACTIONS_UNMERGED; + } + } + + } + Show(m_dwShow, 0, m_bShowFolders); + } + } + break; #if 0 case IDSVNLC_COPY: CopySelectedEntriesToClipboard(0); @@ -3452,47 +3482,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point) case IDSVNLC_EDITCONFLICT: SVNDiff::StartConflictEditor(filepath); break; - case IDSVNLC_RESOLVECONFLICT: - case IDSVNLC_RESOLVEMINE: - case IDSVNLC_RESOLVETHEIRS: - { - git_wc_conflict_choice_t result = git_wc_conflict_choose_merged; - switch (cmd) - { - case IDSVNLC_RESOLVETHEIRS: - result = git_wc_conflict_choose_theirs_full; - break; - case IDSVNLC_RESOLVEMINE: - result = git_wc_conflict_choose_mine_full; - break; - case IDSVNLC_RESOLVECONFLICT: - result = git_wc_conflict_choose_merged; - break; - } - if (CMessageBox::Show(m_hWnd, IDS_PROC_RESOLVE, IDS_APPNAME, MB_ICONQUESTION | MB_YESNO)==IDYES) - { - SVN git; - POSITION pos = GetFirstSelectedItemPosition(); - while (pos != 0) - { - int index; - index = GetNextSelectedItem(pos); - FileEntry * fentry = m_arStatusArray[m_arListArray[index]]; - if (!git.Resolve(fentry->GetPath(), result, FALSE)) - { - CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR); - } - else - { - fentry->status = git_wc_status_modified; - fentry->textstatus = git_wc_status_modified; - fentry->isConflicted = false; - } - } - Show(m_dwShow, 0, m_bShowFolders); - } - } - break; + case IDSVNLC_ADD: { SVN git; diff --git a/src/TortoiseGitBlame/TortoiseGitBlame.vcproj b/src/TortoiseGitBlame/TortoiseGitBlame.vcproj index ca91d9a..2588f48 100644 --- a/src/TortoiseGitBlame/TortoiseGitBlame.vcproj +++ b/src/TortoiseGitBlame/TortoiseGitBlame.vcproj @@ -101,12 +101,13 @@ /> @@ -153,11 +155,12 @@ @@ -236,12 +237,11 @@ + + @@ -430,7 +434,7 @@ /> text_status == svn_wc_status_conflicted) + { + // we have a text conflict, use our merge tool to resolve the conflict + + CTSVNPath theirs(directory); + CTSVNPath mine(directory); + CTSVNPath base(directory); + bool bConflictData = false; + + if ((stat.status->entry)&&(stat.status->entry->conflict_new)) + { + theirs.AppendPathString(CUnicodeUtils::GetUnicode(stat.status->entry->conflict_new)); + bConflictData = true; + } + if ((stat.status->entry)&&(stat.status->entry->conflict_old)) + { + base.AppendPathString(CUnicodeUtils::GetUnicode(stat.status->entry->conflict_old)); + bConflictData = true; + } + if ((stat.status->entry)&&(stat.status->entry->conflict_wrk)) + { + mine.AppendPathString(CUnicodeUtils::GetUnicode(stat.status->entry->conflict_wrk)); + bConflictData = true; + } + else + { + mine = merge; + } + if (bConflictData) + bRet = !!CAppUtils::StartExtMerge(CAppUtils::MergeFlags().AlternativeTool(bAlternativeTool), + base, theirs, mine, merge); + } + + if (stat.status->prop_status == svn_wc_status_conflicted) + { + // we have a property conflict + CTSVNPath prej(directory); + if ((stat.status->entry)&&(stat.status->entry->prejfile)) + { + prej.AppendPathString(CUnicodeUtils::GetUnicode(stat.status->entry->prejfile)); + // there's a problem: the prej file contains a _description_ of the conflict, and + // that description string might be translated. That means we have no way of parsing + // the file to find out the conflicting values. + // The only thing we can do: show a dialog with the conflict description, then + // let the user either accept the existing property or open the property edit dialog + // to manually change the properties and values. And a button to mark the conflict as + // resolved. + CEditPropConflictDlg dlg; + dlg.SetPrejFile(prej); + dlg.SetConflictedItem(merge); + bRet = (dlg.DoModal() != IDCANCEL); + } + } + + if (stat.status->tree_conflict) + { + // we have a tree conflict + SVNInfo info; + const SVNInfoData * pInfoData = info.GetFirstFileInfo(merge, SVNRev(), SVNRev()); + if (pInfoData) + { + if (pInfoData->treeconflict_kind == svn_wc_conflict_kind_text) + { + CTSVNPath theirs(directory); + CTSVNPath mine(directory); + CTSVNPath base(directory); + bool bConflictData = false; + + if (pInfoData->treeconflict_theirfile) + { + theirs.AppendPathString(pInfoData->treeconflict_theirfile); + bConflictData = true; + } + if (pInfoData->treeconflict_basefile) + { + base.AppendPathString(pInfoData->treeconflict_basefile); + bConflictData = true; + } + if (pInfoData->treeconflict_myfile) + { + mine.AppendPathString(pInfoData->treeconflict_myfile); + bConflictData = true; + } + else + { + mine = merge; + } + if (bConflictData) + bRet = !!CAppUtils::StartExtMerge(CAppUtils::MergeFlags().AlternativeTool(bAlternativeTool), + base, theirs, mine, merge); + } + else if (pInfoData->treeconflict_kind == svn_wc_conflict_kind_tree) + { + CString sConflictAction; + CString sConflictReason; + CString sResolveTheirs; + CString sResolveMine; + CTSVNPath treeConflictPath = CTSVNPath(pInfoData->treeconflict_path); + CString sItemName = treeConflictPath.GetUIFileOrDirectoryName(); + + if (pInfoData->treeconflict_nodekind == svn_node_file) + { + switch (pInfoData->treeconflict_operation) + { + case svn_wc_operation_update: + switch (pInfoData->treeconflict_action) + { + case svn_wc_conflict_action_edit: + sConflictAction.Format(IDS_TREECONFLICT_FILEUPDATEEDIT, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE); + break; + case svn_wc_conflict_action_add: + sConflictAction.Format(IDS_TREECONFLICT_FILEUPDATEADD, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE); + break; + case svn_wc_conflict_action_delete: + sConflictAction.Format(IDS_TREECONFLICT_FILEUPDATEDELETE, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEFILE); + break; + } + break; + case svn_wc_operation_switch: + switch (pInfoData->treeconflict_action) + { + case svn_wc_conflict_action_edit: + sConflictAction.Format(IDS_TREECONFLICT_FILESWITCHEDIT, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE); + break; + case svn_wc_conflict_action_add: + sConflictAction.Format(IDS_TREECONFLICT_FILESWITCHADD, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE); + break; + case svn_wc_conflict_action_delete: + sConflictAction.Format(IDS_TREECONFLICT_FILESWITCHDELETE, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEFILE); + break; + } + break; + case svn_wc_operation_merge: + switch (pInfoData->treeconflict_action) + { + case svn_wc_conflict_action_edit: + sConflictAction.Format(IDS_TREECONFLICT_FILEMERGEEDIT, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE); + break; + case svn_wc_conflict_action_add: + sResolveTheirs.Format(IDS_TREECONFLICT_FILEMERGEADD, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE); + break; + case svn_wc_conflict_action_delete: + sConflictAction.Format(IDS_TREECONFLICT_FILEMERGEDELETE, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEFILE); + break; + } + break; + } + } + else if (pInfoData->treeconflict_nodekind == svn_node_dir) + { + switch (pInfoData->treeconflict_operation) + { + case svn_wc_operation_update: + switch (pInfoData->treeconflict_action) + { + case svn_wc_conflict_action_edit: + sConflictAction.Format(IDS_TREECONFLICT_DIRUPDATEEDIT, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR); + break; + case svn_wc_conflict_action_add: + sConflictAction.Format(IDS_TREECONFLICT_DIRUPDATEADD, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR); + break; + case svn_wc_conflict_action_delete: + sConflictAction.Format(IDS_TREECONFLICT_DIRUPDATEDELETE, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEDIR); + break; + } + break; + case svn_wc_operation_switch: + switch (pInfoData->treeconflict_action) + { + case svn_wc_conflict_action_edit: + sConflictAction.Format(IDS_TREECONFLICT_DIRSWITCHEDIT, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR); + break; + case svn_wc_conflict_action_add: + sConflictAction.Format(IDS_TREECONFLICT_DIRSWITCHADD, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR); + break; + case svn_wc_conflict_action_delete: + sConflictAction.Format(IDS_TREECONFLICT_DIRSWITCHDELETE, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEDIR); + break; + } + break; + case svn_wc_operation_merge: + switch (pInfoData->treeconflict_action) + { + case svn_wc_conflict_action_edit: + sConflictAction.Format(IDS_TREECONFLICT_DIRMERGEEDIT, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR); + break; + case svn_wc_conflict_action_add: + sConflictAction.Format(IDS_TREECONFLICT_DIRMERGEADD, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR); + break; + case svn_wc_conflict_action_delete: + sConflictAction.Format(IDS_TREECONFLICT_DIRMERGEDELETE, (LPCTSTR)sItemName); + sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEDIR); + break; + } + break; + } + } + + UINT uReasonID = 0; + switch (pInfoData->treeconflict_reason) + { + case svn_wc_conflict_reason_edited: + uReasonID = IDS_TREECONFLICT_REASON_EDITED; + sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_KEEPLOCALDIR : IDS_TREECONFLICT_RESOLVE_KEEPLOCALFILE); + break; + case svn_wc_conflict_reason_obstructed: + uReasonID = IDS_TREECONFLICT_REASON_OBSTRUCTED; + sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_KEEPLOCALDIR : IDS_TREECONFLICT_RESOLVE_KEEPLOCALFILE); + break; + case svn_wc_conflict_reason_deleted: + uReasonID = IDS_TREECONFLICT_REASON_DELETED; + sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_REMOVEDIR : IDS_TREECONFLICT_RESOLVE_REMOVEFILE); + break; + case svn_wc_conflict_reason_added: + uReasonID = IDS_TREECONFLICT_REASON_ADDED; + sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_KEEPLOCALDIR : IDS_TREECONFLICT_RESOLVE_KEEPLOCALFILE); + break; + case svn_wc_conflict_reason_missing: + uReasonID = IDS_TREECONFLICT_REASON_MISSING; + sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_REMOVEDIR : IDS_TREECONFLICT_RESOLVE_REMOVEFILE); + break; + case svn_wc_conflict_reason_unversioned: + uReasonID = IDS_TREECONFLICT_REASON_UNVERSIONED; + sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_KEEPLOCALDIR : IDS_TREECONFLICT_RESOLVE_KEEPLOCALFILE); + break; + } + sConflictReason.Format(uReasonID, (LPCTSTR)sConflictAction); + + CTreeConflictEditorDlg dlg; + dlg.SetConflictInfoText(sConflictReason); + dlg.SetResolveTexts(sResolveTheirs, sResolveMine); + dlg.SetPath(treeConflictPath); + INT_PTR dlgRet = dlg.DoModal(); + bRet = (dlgRet != IDCANCEL); + } + } + } +#endif + return bRet; } \ No newline at end of file diff --git a/src/TortoiseProc/AppUtils.h b/src/TortoiseProc/AppUtils.h index 8248bb9..45fc0b0 100644 --- a/src/TortoiseProc/AppUtils.h +++ b/src/TortoiseProc/AppUtils.h @@ -166,6 +166,7 @@ public: static bool IgnoreFile(CTGitPath &file, bool IsMask); static bool GitReset(CString *CommitHash,int type=1); + static bool ConflictEdit(CTGitPath &file,bool bAlternativeTool=false); private: static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2); static bool GetMimeType(const CTGitPath& file, CString& mimetype); diff --git a/src/TortoiseProc/Commands/CleanupCommand.cpp b/src/TortoiseProc/Commands/CleanupCommand.cpp index 4c3b5a5..fb60e17 100644 --- a/src/TortoiseProc/Commands/CleanupCommand.cpp +++ b/src/TortoiseProc/Commands/CleanupCommand.cpp @@ -31,11 +31,13 @@ bool CleanupCommand::Execute() { bool bRet = false; - CProgressDlg progress; - progress.m_GitCmd.Format(_T("Git Clean -d -x")); - if(progress.DoModal()==IDOK) + if(CMessageBox::Show(NULL,_T("Are you sure clean all unversion files"),_T("TortoiseGit"),MB_YESNO)==IDYES) + { + CProgressDlg progress; + progress.m_GitCmd.Format(_T("Git Clean -d -x -f")); + if(progress.DoModal()==IDOK) return TRUE; - + } #if 0 CProgressDlg progress; progress.SetTitle(IDS_PROC_CLEANUP); diff --git a/src/TortoiseProc/Commands/ConflictEditorCommand.cpp b/src/TortoiseProc/Commands/ConflictEditorCommand.cpp index 67ff05f..fe90304 100644 --- a/src/TortoiseProc/Commands/ConflictEditorCommand.cpp +++ b/src/TortoiseProc/Commands/ConflictEditorCommand.cpp @@ -30,342 +30,6 @@ bool ConflictEditorCommand::Execute() { - bool bRet = false; - - CTGitPath merge = cmdLinePath; - CTGitPath directory = merge.GetDirectory(); - bool bAlternativeTool = !!parser.HasKey(_T("alternative")); - - // we have the conflicted file (%merged) - // now look for the other required files - //GitStatus stat; - //stat.GetStatus(merge); - //if (stat.status == NULL) - // return false; - - BYTE_VECTOR vector; - - CString cmd; - cmd.Format(_T("git.exe ls-files -u -t -z -- \"%s\""),merge.GetGitPathString()); - - if(g_Git.Run(cmd,&vector)) - { - return FALSE; - } - - CTGitPathList list; - list.ParserFromLsFile(vector); - - if(list.GetCount() == 0) - return FALSE; - - TCHAR szTempName[512]; - GetTempFileName(_T(""),_T(""),0,szTempName); - CString temp(szTempName); - temp=temp.Mid(1,temp.GetLength()-5); - - CTGitPath theirs; - CTGitPath mine; - CTGitPath base; - - CString format; - format=g_Git.m_CurrentDir+_T("\\")+directory.GetWinPathString()+merge.GetFilename()+CString(_T(".%s."))+temp+merge.GetFileExtension(); - - CString file; - file.Format(format,_T("LOCAL")); - mine.SetFromGit(file); - file.Format(format,_T("REMOTE")); - theirs.SetFromGit(file); - file.Format(format,_T("BASE")); - base.SetFromGit(file); - - - format=_T("git.exe cat-file blob \":%d:%s\""); - for(int i=0;itext_status == svn_wc_status_conflicted) - { - // we have a text conflict, use our merge tool to resolve the conflict - - CTSVNPath theirs(directory); - CTSVNPath mine(directory); - CTSVNPath base(directory); - bool bConflictData = false; - - if ((stat.status->entry)&&(stat.status->entry->conflict_new)) - { - theirs.AppendPathString(CUnicodeUtils::GetUnicode(stat.status->entry->conflict_new)); - bConflictData = true; - } - if ((stat.status->entry)&&(stat.status->entry->conflict_old)) - { - base.AppendPathString(CUnicodeUtils::GetUnicode(stat.status->entry->conflict_old)); - bConflictData = true; - } - if ((stat.status->entry)&&(stat.status->entry->conflict_wrk)) - { - mine.AppendPathString(CUnicodeUtils::GetUnicode(stat.status->entry->conflict_wrk)); - bConflictData = true; - } - else - { - mine = merge; - } - if (bConflictData) - bRet = !!CAppUtils::StartExtMerge(CAppUtils::MergeFlags().AlternativeTool(bAlternativeTool), - base, theirs, mine, merge); - } - - if (stat.status->prop_status == svn_wc_status_conflicted) - { - // we have a property conflict - CTSVNPath prej(directory); - if ((stat.status->entry)&&(stat.status->entry->prejfile)) - { - prej.AppendPathString(CUnicodeUtils::GetUnicode(stat.status->entry->prejfile)); - // there's a problem: the prej file contains a _description_ of the conflict, and - // that description string might be translated. That means we have no way of parsing - // the file to find out the conflicting values. - // The only thing we can do: show a dialog with the conflict description, then - // let the user either accept the existing property or open the property edit dialog - // to manually change the properties and values. And a button to mark the conflict as - // resolved. - CEditPropConflictDlg dlg; - dlg.SetPrejFile(prej); - dlg.SetConflictedItem(merge); - bRet = (dlg.DoModal() != IDCANCEL); - } - } - - if (stat.status->tree_conflict) - { - // we have a tree conflict - SVNInfo info; - const SVNInfoData * pInfoData = info.GetFirstFileInfo(merge, SVNRev(), SVNRev()); - if (pInfoData) - { - if (pInfoData->treeconflict_kind == svn_wc_conflict_kind_text) - { - CTSVNPath theirs(directory); - CTSVNPath mine(directory); - CTSVNPath base(directory); - bool bConflictData = false; - - if (pInfoData->treeconflict_theirfile) - { - theirs.AppendPathString(pInfoData->treeconflict_theirfile); - bConflictData = true; - } - if (pInfoData->treeconflict_basefile) - { - base.AppendPathString(pInfoData->treeconflict_basefile); - bConflictData = true; - } - if (pInfoData->treeconflict_myfile) - { - mine.AppendPathString(pInfoData->treeconflict_myfile); - bConflictData = true; - } - else - { - mine = merge; - } - if (bConflictData) - bRet = !!CAppUtils::StartExtMerge(CAppUtils::MergeFlags().AlternativeTool(bAlternativeTool), - base, theirs, mine, merge); - } - else if (pInfoData->treeconflict_kind == svn_wc_conflict_kind_tree) - { - CString sConflictAction; - CString sConflictReason; - CString sResolveTheirs; - CString sResolveMine; - CTSVNPath treeConflictPath = CTSVNPath(pInfoData->treeconflict_path); - CString sItemName = treeConflictPath.GetUIFileOrDirectoryName(); - - if (pInfoData->treeconflict_nodekind == svn_node_file) - { - switch (pInfoData->treeconflict_operation) - { - case svn_wc_operation_update: - switch (pInfoData->treeconflict_action) - { - case svn_wc_conflict_action_edit: - sConflictAction.Format(IDS_TREECONFLICT_FILEUPDATEEDIT, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE); - break; - case svn_wc_conflict_action_add: - sConflictAction.Format(IDS_TREECONFLICT_FILEUPDATEADD, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE); - break; - case svn_wc_conflict_action_delete: - sConflictAction.Format(IDS_TREECONFLICT_FILEUPDATEDELETE, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEFILE); - break; - } - break; - case svn_wc_operation_switch: - switch (pInfoData->treeconflict_action) - { - case svn_wc_conflict_action_edit: - sConflictAction.Format(IDS_TREECONFLICT_FILESWITCHEDIT, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE); - break; - case svn_wc_conflict_action_add: - sConflictAction.Format(IDS_TREECONFLICT_FILESWITCHADD, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE); - break; - case svn_wc_conflict_action_delete: - sConflictAction.Format(IDS_TREECONFLICT_FILESWITCHDELETE, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEFILE); - break; - } - break; - case svn_wc_operation_merge: - switch (pInfoData->treeconflict_action) - { - case svn_wc_conflict_action_edit: - sConflictAction.Format(IDS_TREECONFLICT_FILEMERGEEDIT, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE); - break; - case svn_wc_conflict_action_add: - sResolveTheirs.Format(IDS_TREECONFLICT_FILEMERGEADD, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYFILE); - break; - case svn_wc_conflict_action_delete: - sConflictAction.Format(IDS_TREECONFLICT_FILEMERGEDELETE, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEFILE); - break; - } - break; - } - } - else if (pInfoData->treeconflict_nodekind == svn_node_dir) - { - switch (pInfoData->treeconflict_operation) - { - case svn_wc_operation_update: - switch (pInfoData->treeconflict_action) - { - case svn_wc_conflict_action_edit: - sConflictAction.Format(IDS_TREECONFLICT_DIRUPDATEEDIT, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR); - break; - case svn_wc_conflict_action_add: - sConflictAction.Format(IDS_TREECONFLICT_DIRUPDATEADD, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR); - break; - case svn_wc_conflict_action_delete: - sConflictAction.Format(IDS_TREECONFLICT_DIRUPDATEDELETE, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEDIR); - break; - } - break; - case svn_wc_operation_switch: - switch (pInfoData->treeconflict_action) - { - case svn_wc_conflict_action_edit: - sConflictAction.Format(IDS_TREECONFLICT_DIRSWITCHEDIT, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR); - break; - case svn_wc_conflict_action_add: - sConflictAction.Format(IDS_TREECONFLICT_DIRSWITCHADD, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR); - break; - case svn_wc_conflict_action_delete: - sConflictAction.Format(IDS_TREECONFLICT_DIRSWITCHDELETE, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEDIR); - break; - } - break; - case svn_wc_operation_merge: - switch (pInfoData->treeconflict_action) - { - case svn_wc_conflict_action_edit: - sConflictAction.Format(IDS_TREECONFLICT_DIRMERGEEDIT, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR); - break; - case svn_wc_conflict_action_add: - sConflictAction.Format(IDS_TREECONFLICT_DIRMERGEADD, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_KEEPREPOSITORYDIR); - break; - case svn_wc_conflict_action_delete: - sConflictAction.Format(IDS_TREECONFLICT_DIRMERGEDELETE, (LPCTSTR)sItemName); - sResolveTheirs.LoadString(IDS_TREECONFLICT_RESOLVE_REMOVEDIR); - break; - } - break; - } - } - - UINT uReasonID = 0; - switch (pInfoData->treeconflict_reason) - { - case svn_wc_conflict_reason_edited: - uReasonID = IDS_TREECONFLICT_REASON_EDITED; - sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_KEEPLOCALDIR : IDS_TREECONFLICT_RESOLVE_KEEPLOCALFILE); - break; - case svn_wc_conflict_reason_obstructed: - uReasonID = IDS_TREECONFLICT_REASON_OBSTRUCTED; - sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_KEEPLOCALDIR : IDS_TREECONFLICT_RESOLVE_KEEPLOCALFILE); - break; - case svn_wc_conflict_reason_deleted: - uReasonID = IDS_TREECONFLICT_REASON_DELETED; - sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_REMOVEDIR : IDS_TREECONFLICT_RESOLVE_REMOVEFILE); - break; - case svn_wc_conflict_reason_added: - uReasonID = IDS_TREECONFLICT_REASON_ADDED; - sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_KEEPLOCALDIR : IDS_TREECONFLICT_RESOLVE_KEEPLOCALFILE); - break; - case svn_wc_conflict_reason_missing: - uReasonID = IDS_TREECONFLICT_REASON_MISSING; - sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_REMOVEDIR : IDS_TREECONFLICT_RESOLVE_REMOVEFILE); - break; - case svn_wc_conflict_reason_unversioned: - uReasonID = IDS_TREECONFLICT_REASON_UNVERSIONED; - sResolveMine.LoadString(pInfoData->treeconflict_nodekind == svn_node_dir ? IDS_TREECONFLICT_RESOLVE_KEEPLOCALDIR : IDS_TREECONFLICT_RESOLVE_KEEPLOCALFILE); - break; - } - sConflictReason.Format(uReasonID, (LPCTSTR)sConflictAction); - - CTreeConflictEditorDlg dlg; - dlg.SetConflictInfoText(sConflictReason); - dlg.SetResolveTexts(sResolveTheirs, sResolveMine); - dlg.SetPath(treeConflictPath); - INT_PTR dlgRet = dlg.DoModal(); - bRet = (dlgRet != IDCANCEL); - } - } - } -#endif - return bRet; + return CAppUtils::ConflictEdit(this->cmdLinePath,bAlternativeTool); } diff --git a/src/TortoiseProc/CommitDlg.cpp b/src/TortoiseProc/CommitDlg.cpp index 4caf59f..10751b0 100644 --- a/src/TortoiseProc/CommitDlg.cpp +++ b/src/TortoiseProc/CommitDlg.cpp @@ -123,6 +123,7 @@ BOOL CCommitDlg::OnInitDialog() m_ListCtrl.EnableFileDrop(); m_ListCtrl.SetBackgroundImage(IDI_COMMIT_BKG); + this->DialogEnableWindow(IDC_COMMIT_AMEND,FALSE); // m_ProjectProperties.ReadPropsPathList(m_pathList); m_cLogMessage.Init(m_ProjectProperties); m_cLogMessage.SetFont((CString)CRegString(_T("Software\\TortoiseGit\\LogFontName"), _T("Courier New")), (DWORD)CRegDWORD(_T("Software\\TortoiseGit\\LogFontSize"), 8)); diff --git a/src/TortoiseProc/TortoiseProc.vcproj b/src/TortoiseProc/TortoiseProc.vcproj index bb50e5e..723be75 100644 --- a/src/TortoiseProc/TortoiseProc.vcproj +++ b/src/TortoiseProc/TortoiseProc.vcproj @@ -574,11 +574,11 @@ >