void MergeToTarget(MergeSelection what) { try { IEnumerable <ITfsChangeset> changesets = null; if (Repository.Instance.BackgroundTaskManager.RunWithCancelDialog( (trackProgress) => { trackProgress.TrackProgress.ProgressInfo = "Loading merge candidates from tfs ..."; changesets = Repository.Instance.TfsBridgeProvider.GetMergeCandidatesForBranchToBranch(what.SourceBranch, what.TargetBranch, what.SourceFilter); })) { PrepareMergeViewModel vm = new PrepareMergeViewModel(_tfsItemCache, changesets); vm.MergeSource = what.SourceBranch; vm.MergeTarget = what.TargetBranch; vm.PathFilter = what.SourceFilter; if (Repository.Instance.Settings.FetchSettings <bool>(Constants.Settings.PerformNonModalMergeKey)) { vMergePackage.OpenMergeView(vm); } else { Repository.Instance.ViewManager.ShowModal(vm, "Modal"); } } } catch (Exception ex) { SimpleLogger.Log(ex); throw; } }
public static void OpenMergeView(PrepareMergeViewModel data) { PrepareMergeViewModel = data; if (PrepareMergeViewModelChanged != null) PrepareMergeViewModelChanged(_package, new EventArgs()); _package.ShowMergeToolWindow(null, null); }
void Merge(object o) { try { var candidates = FilteredChangesets.Where(cs => cs.IsSelected).Select(cs => cs.TfsChangeset); if (!candidates.Any()) { var mbvm = new MessageBoxViewModel("Perform merge", "No changesets are currently selected.", MessageBoxViewModel.MessageBoxButtons.OK); Repository.Instance.ViewManager.ShowModal(mbvm); } else { var mergeViewModel = new PrepareMergeViewModel(TfsItemCache, candidates); var result = ViewSelectionViewModel.GetMergeSourceTargetBranches(); mergeViewModel.MergeSource = result != null ? result.SourceBranch : null; mergeViewModel.MergeTarget = result != null ? result.TargetBranch : null; mergeViewModel.PathFilter = result != null ? result.PathFilter : null; mergeViewModel.SetDefaults(); if (Repository.Instance.Settings.FetchSettings <bool>(Constants.Settings.PerformNonModalMergeKey)) { vMergePackage.OpenMergeView(mergeViewModel); } else { Repository.Instance.ViewManager.ShowModal(mergeViewModel, "Modal"); } } } catch (Exception ex) { SimpleLogger.Log(ex, true); } }
void Merge(object o) { try { var candidates = WorkItems.Where(wi => wi.IsSelected).Select(wi => wi.TfsWorkItem); if (!candidates.Any()) { var mbvm = new MessageBoxViewModel("Perform merge", "No work items are currently selected.", MessageBoxViewModel.MessageBoxButtons.OK); Repository.Instance.ViewManager.ShowModal(mbvm); } else if (!candidates.Any(candidate => candidate.RelatedChangesetCount > 0)) { var mbvm = new MessageBoxViewModel("Perform merge", "The selected work items don't have any linked changesets.", MessageBoxViewModel.MessageBoxButtons.OK); Repository.Instance.ViewManager.ShowModal(mbvm); } else { PrepareMergeViewModel mergeViewModel; try { mergeViewModel = new PrepareMergeViewModel(TfsItemCache, WorkItems.Where(wi => wi.IsSelected).Select(wi => wi.TfsWorkItem)); } catch (ArgumentException) { var mbvm = new MessageBoxViewModel( "Perform merge", String.Format("The selected work items don't have any linked changesets in the current team project\r\n({0}).", Repository.Instance.TfsBridgeProvider.ActiveTeamProject.Name), MessageBoxViewModel.MessageBoxButtons.OK); Repository.Instance.ViewManager.ShowModal(mbvm); mergeViewModel = null; } if (mergeViewModel != null) { var result = ViewSelectionViewModel.GetMergeSourceTargetBranches(); mergeViewModel.MergeSource = result != null ? result.SourceBranch : null; mergeViewModel.MergeTarget = result != null ? result.TargetBranch : null; mergeViewModel.PathFilter = result != null ? result.PathFilter : null; mergeViewModel.SetDefaults(); if (Repository.Instance.Settings.FetchSettings <bool>(Constants.Settings.PerformNonModalMergeKey)) { vMergePackage.OpenMergeView(mergeViewModel); } else { Repository.Instance.ViewManager.ShowModal(mergeViewModel, "Modal"); } } } } catch (Exception) { } }
/// <summary> /// Default constructor of the package. /// Inside this method you can place any initialization code that does not require /// any Visual Studio service because at this point the package object is created but /// not sited yet inside Visual Studio environment. The place to do all the other /// initialization is the Initialize method. /// </summary> public vMergePackage() { if (AreCapsDisabled()) { //TODO MahApps.Metro.Converters.ToUpperConverter.DisableCaps = true; //TODo MahApps.Metro.Converters.ToLowerConverter.DisableLower = true; } Messenger.Default.Register <OpenLogMessage>(this, ShowLogFileWindow); SimpleLogger.Init(); SimpleLogger.Log(SimpleLogLevel.Info, "------------------------------------------------------------------------------\nSession starting"); Debug.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering constructor for: {0}", this.ToString())); _package = this; string targetPath = "qbus.vMerge.settings"; try { Repository.Initialize( new VsTfsConnectionInfoProvider(), new VsTfsUIInteractionProvider(GetGlobalService(typeof(EnvDTE.DTE)) as EnvDTE.DTE), new vMergeUIProvider(this)); Repository.Instance.TfsBridgeProvider.ActiveProjectSelected += (o, a) => { if (MergeToolWindowIsVisible) { MergeToolWindowIsVisible = false; if (PrepareMergeViewModel != null) { PrepareMergeViewModel.Close(); } if (_mergeToolWindowVisibilityChanged != null) { _mergeToolWindowVisibilityChanged(this, null); } } }; Repository.Instance.ViewManager.BeforeModalDialog += (o, a) => { var uiShell = GetService(typeof(SVsUIShell)) as IVsUIShell; var uiShell5 = (IVsUIShell5)uiShell; var wnd = (o as Window); var interopHelper = new System.Windows.Interop.WindowInteropHelper(wnd); IntPtr ownerWnd; uiShell.GetDialogOwnerHwnd(out ownerWnd); var owner = System.Windows.Interop.HwndSource.FromHwnd(ownerWnd); if (owner != null) { wnd.Owner = (owner.RootVisual as Window); } wnd.ShowInTaskbar = false; uiShell.EnableModeless(0); if (interopHelper.Handle != default(IntPtr) && !Repository.Instance.ViewManager.IsUnmanagedParentOnTop()) { uiShell5.ThemeWindow(interopHelper.Handle); } }; Repository.Instance.ViewManager.WindowCreated += (o, a) => { var window = o as ContentControl; ThemeWindow(window); }; Repository.Instance.ViewManager.AfterModalDialog += (o, a) => { var uiShell = GetService(typeof(SVsUIShell)) as IVsUIShell; var wnd = (o as Window); uiShell.EnableModeless(1); }; try { try { Repository.Instance.Settings.LoadSettings(targetPath); } catch (Exception ex1) { try { Repository.Instance.Settings.LoadSettings(targetPath + ".bak"); } catch (Exception ex) { SimpleLogger.Log(SimpleLogLevel.Error, "Failed to load setting: " + ex1.Message + "\r\n" + ex1.StackTrace); SimpleLogger.Log(SimpleLogLevel.Error, "Failed to load backup setting: " + ex.Message + "\r\n" + ex.StackTrace); } } } catch (Exception ex) { SimpleLogger.Log(ex); } } catch (Exception ex) { SimpleLogger.Log(ex); } try { SetDefaultSettings(); Repository.Instance.ProfileProvider.ReloadFromSettings(); Repository.Instance.Settings.SetAutoSave(targetPath, 10000); } catch (Exception ex) { SimpleLogger.Log(ex); } }