private bool CanMerge()
 {
     return(SelectedChangesets != null &&
            SelectedChangesets.Any() &&
            Changesets.Count(x => x.ChangesetId >= SelectedChangesets.Min(y => y.ChangesetId) &&
                             x.ChangesetId <= SelectedChangesets.Max(y => y.ChangesetId)) == SelectedChangesets.Count);
 }
        public PrepareMergeViewModel(TfsItemCache tfsItemCache, IEnumerable <ITfsChangeset> changesets)
            : base(typeof(PrepareMergeViewModel))
        {
            try
            {
                TfsItemCache = tfsItemCache;
                Changesets   = changesets.OrderBy(changeset => changeset.Changeset.ChangesetId).ToList();

                MergeSourcesLoading  = new LoadingProgressViewModel();
                MergeTargetsLoading  = new LoadingProgressViewModel();
                ChangesetsLoading    = new LoadingProgressViewModel();
                ChangesetsRefreshing = new LoadingProgressViewModel();

                OpenChangesetCommand         = new RelayCommand((o) => OpenChangeset((int)o));
                FindOriginalChangesetCommand = new RelayCommand((o) => FindOriginalChangeset((int)o));
                PerformMergeCommand          = new RelayCommand((o) => PerformMerge(o as ChangesetListElement));
                PickPathFilterCommand        = new RelayCommand((o) => PickPathFilter());
                AutoMergeCommand             = new RelayCommand((o) => AutoMerge(), (o) => IsAnythingToMergeLeft());
                OKCommand = new RelayCommand((o) => OK());


                var  potentialMergeSourceBranches = Enumerable.Empty <ITfsBranch>();
                bool finished = Repository.Instance.BackgroundTaskManager.RunWithCancelDialog(
                    (progressParams) =>
                {
                    progressParams.TrackProgress.MaxProgress = Changesets.Count();
                    foreach (var changeset in Changesets)
                    {
                        progressParams.CancellationToken.ThrowIfCancellationRequested();
                        var list = changeset.GetAffectedBranchesForActiveProject().ToArray();
                        potentialMergeSourceBranches = potentialMergeSourceBranches.Union(list);
                        progressParams.TrackProgress.Increment();
                    }
                });
                if (!finished)
                {
                    throw new OperationCanceledException();
                }

                PossibleMergeSources = potentialMergeSourceBranches.ToList();
                ListenToSettingsChanges();
            }
            catch (Exception ex)
            {
                SimpleLogger.Log(ex, true, true);
                throw;
            }
        }
Exemple #3
0
        public PrepareMergeViewModel(TfsItemCache tfsItemCache, IEnumerable <ITfsChangeset> changesets)
            : base(typeof(PrepareMergeViewModel))
        {
            TfsItemCache = tfsItemCache;
            Changesets   = changesets.Where(changeset => changeset.Changeset.CreationDate >= (DateTime.Now - new TimeSpan(30, 0, 0, 0))).ToList();

            MergeSourcesLoading  = new LoadingProgressViewModel();
            MergeTargetsLoading  = new LoadingProgressViewModel();
            ChangesetsLoading    = new LoadingProgressViewModel();
            ChangesetsRefreshing = new LoadingProgressViewModel();

            OpenChangesetCommand  = new RelayCommand((o) => OpenChangeset((int)o));
            PerformMergeCommand   = new RelayCommand((o) => PerformMerge(o as ChangesetListElement));
            PickPathFilterCommand = new RelayCommand((o) => PickPathFilter());
            AutoMergeCommand      = new RelayCommand((o) => AutoMerge(), (o) => IsAnythingToMergeLeft());
            OKCommand             = new RelayCommand((o) => OK());

            var  potentialMergeSourceBranches = Enumerable.Empty <ITfsBranch>();
            bool finished = Repository.Instance.BackgroundTaskManager.RunWithCancelDialog(
                (progressParams) =>
            {
                WorkItems = new List <ITfsWorkItem>();
                progressParams.TrackProgress.MaxProgress = Changesets.Count();
                foreach (var changeset in Changesets)
                {
                    progressParams.CancellationToken.ThrowIfCancellationRequested();
                    foreach (var workItem in changeset.RelatedWorkItems)
                    {
                        progressParams.CancellationToken.ThrowIfCancellationRequested();
                        WorkItems.Add(workItem);
                    }
                    potentialMergeSourceBranches = potentialMergeSourceBranches.Union(changeset.GetAffectedBranchesForActiveProject());
                    progressParams.TrackProgress.Increment();
                }
            });

            if (!finished)
            {
                throw new OperationCanceledException();
            }

            _potentialMergeSourceBranches = potentialMergeSourceBranches.ToList();
        }