Esempio n. 1
0
        private void CommitMerge(CheckInSummaryViewModel vm, TrackProgressParameters externalProgress = null)
        {
            var associatedWorkItems
                = vm
                  .SourceChangesets
                  .SelectMany(changeset => changeset.RelatedWorkItems)
                  .GroupBy(workItem => workItem.WorkItem.Id)
                  .Select(group => group.First());

            int cs = -1;

            try
            {
                Repository.Instance.BackgroundTaskManager.RunWithCancelDialog(
                    (progressParams) =>
                {
                    //cs = vm.TemporaryWorkspace.CheckIn(associatedWorkItems, vm.CheckInComment);
                    cs = 1;
                }, externalProgress);
            }
            catch (OperationCanceledException)
            {
            }

            var newChangeset = TfsItemCache.UpdateChangesetFromCache(new TfsChangesetWrapper(Repository.Instance.TfsBridgeProvider.GetChangesetById(cs)));

            var relatedChangesetListElements =
                _changesetList.Where(element => vm.SourceChangesets.Any(changeset => changeset.Changeset.ChangesetId == element.SourceCheckinId));

            foreach (var sourceCS in vm.SourceChangesets)
            {
                _allAssociatedChangesetsIncludingMerges.Add(new MergedChangesetLink()
                {
                    Source = TfsItemCache.GetChangesetFromCache(sourceCS.Changeset.ChangesetId), Target = newChangeset
                });
            }

            foreach (var element in relatedChangesetListElements)
            {
                element.TargetCheckinDate = newChangeset.TfsChangeset.Changeset.CreationDate;
                element.TargetCheckinId   = newChangeset.TfsChangeset.Changeset.ChangesetId;
                element.TargetExists      = true;
                element.CanBeMerged       = false;
                DetermineWarningStatus(element);
            }
        }
Esempio n. 2
0
        bool PerformMerge(ChangesetListElement item, TrackProgressParameters externalProgress = null)
        {
            bool returnValue = false;

            if (item == null)
            {
                return(false);
            }

            var tempWorkspace  = Repository.Instance.TfsBridgeProvider.GetTemporaryWorkspace(MergeSource, MergeTarget);
            var mergeChangeset = TfsItemCache.GetChangesetFromCache(item.SourceCheckinId).TfsChangeset;

            bool finished = Repository.Instance.BackgroundTaskManager.RunWithCancelDialog(
                (progressParams) =>
            {
                tempWorkspace.Merge(
                    MergeTarget, PathFilter,
                    new ITfsChangeset[] { mergeChangeset }.AsEnumerable(),
                    progressParams.TrackProgress);
            }, String.Format("Merging changeset #{0} ...", item.SourceCheckinId), externalProgress);

            if (!finished)
            {
                tempWorkspace.UndoAllPendingChanges();
                return(false);
            }

            var checkInSummary = new CheckInSummaryViewModel();

            tempWorkspace.RefreshConflicts();
            checkInSummary.Changes =
                tempWorkspace.PendingChanges
                .Select(
                    change => new CheckInSummaryViewModel.PendingChangeWithConflict(
                        change,
                        tempWorkspace.Conflicts.Where(conflict => conflict.ServerPath == change.ServerPath).FirstOrDefault()))
                .ToList();

            while (tempWorkspace.Conflicts.Count != 0)
            {
                int oldConflictsCount = tempWorkspace.Conflicts.Count;
                Repository.Instance.TfsUIInteractionProvider.ResolveConflictsPerTF(tempWorkspace.MappedFolder);
                tempWorkspace.RefreshConflicts();
                if (tempWorkspace.Conflicts.Count == oldConflictsCount)
                {
                    MessageBoxViewModel mbvm = new MessageBoxViewModel("Cancel merge?", "There are conflicts remaining to be solved. Really cancel the merge?", MessageBoxViewModel.MessageBoxButtons.None);
                    var yesButton            = new MessageBoxViewModel.MessageBoxButton("_Yes");
                    mbvm.ConfirmButtons.Add(yesButton);
                    mbvm.ConfirmButtons.Add(new MessageBoxViewModel.MessageBoxButton("_No"));
                    Repository.Instance.ViewManager.ShowModal(mbvm);

                    if (yesButton.IsChecked)
                    {
                        finished = false;
                        break;
                    }
                }
            }

            if (finished)
            {
                checkInSummary.TemporaryWorkspace  = tempWorkspace;
                checkInSummary.OriginalChangesets  = new ITfsChangeset[] { item.Changeset.TfsChangeset }.ToList();
                checkInSummary.SourceChangesets    = new ITfsChangeset[] { mergeChangeset }.ToList();
                checkInSummary.AssociatedWorkItems = item.Changeset.TfsChangeset.RelatedWorkItems;
                checkInSummary.CheckInComment      = BuildCheckInComment(
                    item.Changeset.TfsChangeset, mergeChangeset);

                if (externalProgress == null)
                {
                    var view = Repository.Instance.ViewManager.CreateViewFor(checkInSummary);
                    view.Finished += CheckInDialogClosed;
                }
                else
                {
                    checkInSummary.Cancelled = false;
                    CommitMerge(checkInSummary, externalProgress);
                }
                returnValue = true;
            }
            else
            {
                tempWorkspace.UndoAllPendingChanges();
            }
            return(returnValue);
        }