void ManualMerge() { Logger.AddInfo("ManualMergeCommand. Merge start."); var helper = new MergeHelper(this); var manualMerge = new ManualMergeViewModel(SelectedItem.Path); SelectedItem.MergeState = helper.ManualMerge(CurrentBranch, manualMerge, () => GetService <IDialogService>(ManualMergeWindow).ShowDialog(MessageButton.OKCancel, "Manual merge", manualMerge) == MessageResult.OK); Logger.AddInfo("ManualMergeCommand. Merge end."); }
public MergeState ManualMerge(DXVcsBranch currentBranch, ManualMergeViewModel mergeModel, Func <bool> showManualMergeUIHandler) { try { string filePath = mergeModel.OriginalFilePath; string mergePath = mergeModel.TargetFilePath; IDXVcsRepository repository = DXVcsRepositoryFactory.Create(Port.VcsServer); string vcsTargetFile = mergePath == null?GetMergeVcsPathByOriginalPath(filePath, currentBranch) : GetMergeVcsPathByTargetPath(mergePath, currentBranch); string tmpTargetFile = repository.GetFileWorkingPath(vcsTargetFile); mergeModel.TargetFilePath = tmpTargetFile; if (!showManualMergeUIHandler()) { Logger.AddInfo("ManualMergeCommand. Result = MergeState.None."); return(MergeState.None); } vcsTargetFile = GetMergeVcsPathByTargetPath(mergeModel.TargetFilePath, currentBranch); string tmpOriginalFile = mergeModel.OriginalFilePath; tmpTargetFile = repository.GetFileWorkingPath(vcsTargetFile); if (string.IsNullOrEmpty(tmpTargetFile)) { Logger.AddInfo("ManualMergeCommand. Result = MergeState.TargetFileError."); return(MergeState.TargetFileError); } repository.CheckOutFile(vcsTargetFile, tmpTargetFile, string.Empty); if (MergeFileHelper.IsBinaryFile(tmpTargetFile)) { if (OverwriteFile.Write(tmpOriginalFile, tmpTargetFile)) { return(MergeState.Success); } else { return(MergeState.Conflict); } } LaunchDiffTool(tmpOriginalFile, tmpTargetFile); } catch (Exception e) { Logger.AddError("ManualMergeCommand. Unknown error.", e); Logger.AddInfo("ManualMergeCommand. Result = MergeState.UnknownError."); return(MergeState.UnknownError); } Logger.AddInfo("ManualMergeCommand. Result = MergeState.Success"); return(MergeState.Success); }