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);
 }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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);
            }
        }