예제 #1
0
        private void PopulateUI()
        {
            if (!DesignMode)
            {
                MergeWizard.MergeType mergeType    = Wizard.GetPage <MergeTypePage>().SelectedMergeType;
                MergeOptionsPage      mergeOptions = Wizard.GetPage <MergeOptionsPage>();

                // Populate Merge Target
                mergeTargetTextBox.Text = Wizard.MergeTarget.FullPath;
                // Populate Merge Source 1
                if (mergeType == MergeWizard.MergeType.TwoDifferentTrees)
                {
                    mergeSource1TextBox.Text = Wizard.GetPage <MergeSourceTwoDifferentTreesPage>().MergeSourceOne;
                }
                else
                {
                    mergeSource1TextBox.Text = Wizard.MergeSource.Target.ToString();
                }

                // Populate Merge Source 2
                if (mergeType == MergeWizard.MergeType.TwoDifferentTrees)
                {
                    if (Wizard.GetPage <MergeSourceTwoDifferentTreesPage>().HasSecondMergeSourceUrl)
                    {
                        mergeSource2TextBox.Text = Wizard.GetPage <MergeSourceTwoDifferentTreesPage>().MergeSourceTwo;
                    }
                    else
                    {
                        mergeSource2TextBox.Text = Wizard.GetPage <MergeSourceTwoDifferentTreesPage>().MergeSourceOne;
                    }
                }
                else
                {
                    mergeSource2TextBox.Text = MergeStrings.NotApplicableShort;
                }

                // Populate Revisions
                if (mergeType == MergeWizard.MergeType.TwoDifferentTrees)
                {
                    MergeSourceTwoDifferentTreesPage tdtPage = Wizard.GetPage <MergeSourceTwoDifferentTreesPage>();

                    revisionsTextBox.Text = (tdtPage.MergeFromRevision != -1 ? tdtPage.MergeFromRevision.ToString() : MergeStrings.HEAD) + "-" +
                                            (tdtPage.MergeToRevision != -1 ? tdtPage.MergeToRevision.ToString() : MergeStrings.HEAD);
                }
                else
                if (Wizard.MergeRevisions == null)
                {
                    revisionsTextBox.Text = MergeStrings.All;
                }
                else
                {
                    revisionsTextBox.Text = MergeWizard.MergeRevisionsAsString(Wizard.MergeRevisions);
                }

                // Populate Binary Conflicts
                if (mergeOptions.BinaryConflictResolution == MergeOptionsPage.ConflictResolutionOption.MARK)
                {
                    binaryConflictsTextBox.Text = MergeStrings.ConflictHandlingMark;
                }
                else if (mergeOptions.BinaryConflictResolution == MergeOptionsPage.ConflictResolutionOption.MINE)
                {
                    binaryConflictsTextBox.Text = MergeStrings.ConflictHandlingMine;
                }
                else if (mergeOptions.BinaryConflictResolution == MergeOptionsPage.ConflictResolutionOption.PROMPT)
                {
                    binaryConflictsTextBox.Text = MergeStrings.ConflictHandlingPrompt;
                }
                else if (mergeOptions.BinaryConflictResolution == MergeOptionsPage.ConflictResolutionOption.THEIRS)
                {
                    binaryConflictsTextBox.Text = MergeStrings.ConflictHandlingTheirs;
                }
                else if (mergeOptions.BinaryConflictResolution == MergeOptionsPage.ConflictResolutionOption.BASE)
                {
                    binaryConflictsTextBox.Text = MergeStrings.ConflictHandlingBase;
                }

                // Populate Text Conflicts
                if (mergeOptions.TextConflictResolution == MergeOptionsPage.ConflictResolutionOption.MARK)
                {
                    textConflictsTextBox.Text = MergeStrings.ConflictHandlingMark;
                }
                else if (mergeOptions.TextConflictResolution == MergeOptionsPage.ConflictResolutionOption.MINE)
                {
                    textConflictsTextBox.Text = MergeStrings.ConflictHandlingMine;
                }
                else if (mergeOptions.TextConflictResolution == MergeOptionsPage.ConflictResolutionOption.PROMPT)
                {
                    textConflictsTextBox.Text = MergeStrings.ConflictHandlingPrompt;
                }
                else if (mergeOptions.TextConflictResolution == MergeOptionsPage.ConflictResolutionOption.THEIRS)
                {
                    textConflictsTextBox.Text = MergeStrings.ConflictHandlingTheirs;
                }
                else if (mergeOptions.TextConflictResolution == MergeOptionsPage.ConflictResolutionOption.BASE)
                {
                    textConflictsTextBox.Text = MergeStrings.ConflictHandlingBase;
                }

                // Populate Depth
                if (mergeOptions.Depth == SharpSvn.SvnDepth.Children)
                {
                    depthTextBox.Text = MergeStrings.SvnDepthChildren;
                }
                else if (mergeOptions.Depth == SharpSvn.SvnDepth.Empty)
                {
                    depthTextBox.Text = MergeStrings.SvnDepthEmpty;
                }
                else if (mergeOptions.Depth == SharpSvn.SvnDepth.Files)
                {
                    depthTextBox.Text = MergeStrings.SvnDepthFiles;
                }
                else if (mergeOptions.Depth == SharpSvn.SvnDepth.Infinity)
                {
                    depthTextBox.Text = MergeStrings.SvnDepthInfinity;
                }
                else if (mergeOptions.Depth == SharpSvn.SvnDepth.Unknown)
                {
                    depthTextBox.Text = MergeStrings.SvnDepthUnknown;
                }

                // Populate Ignore Ancestry
                if (mergeOptions.IgnoreAncestry)
                {
                    ignoreAncestryTextBox.Text = MergeStrings.Yes;
                }
                else
                {
                    ignoreAncestryTextBox.Text = MergeStrings.No;
                }

                // Populate Allow Unversioned Obstructions
                if (mergeOptions.AllowUnversionedObstructions)
                {
                    unversionedObstructionsTextBox.Text = MergeStrings.Yes;
                }
                else
                {
                    unversionedObstructionsTextBox.Text = MergeStrings.No;
                }
            }
        }
예제 #2
0
        public void PerformMerge()
        {
            MergeType mergeType = GetPage <MergeTypePage>().SelectedMergeType;

            ProgressRunnerArgs runnerArgs = new ProgressRunnerArgs();

            runnerArgs.CreateLog = !PerformDryRun;
            // Perform merge using IProgressRunner
            Context.GetService <IProgressRunner>().RunModal(MergeStrings.MergingTitle, runnerArgs,
                                                            delegate(object sender, ProgressWorkerArgs ee)
            {
                _mergeActions           = new List <SvnNotifyEventArgs>();
                _resolvedMergeConflicts = new Dictionary <string, List <SvnConflictType> >();
                MergeConflictHandler mergeConflictHandler = CreateMergeConflictHandler();
                Handler conflictHandler = new Handler(Context, ee.Synchronizer, mergeConflictHandler);

                try
                {
                    if (!PerformDryRun)
                    {
                        // Attach the conflict handler
                        ee.Client.Conflict += new EventHandler <SvnConflictEventArgs>(conflictHandler.OnConflict);
                    }

                    // Attach the cancel handler
                    ee.Client.Cancel += new EventHandler <SvnCancelEventArgs>(this.OnCancel);

                    // Attach the notify handler
                    ee.Client.Notify += new EventHandler <SvnNotifyEventArgs>(this.OnNotify);

                    if (mergeType == MergeType.TwoDifferentTrees)
                    {
                        MergeSourceTwoDifferentTreesPage page = ((MergeSourceTwoDifferentTreesPage)mergeSourceTwoDifferentTreesPage);
                        SvnDiffMergeArgs dArgs = new SvnDiffMergeArgs();
                        Uri fromUri;
                        Uri toUri;

                        // Set the proper depth
                        dArgs.Depth = ((MergeOptionsPage)mergeOptionsPage).Depth;

                        // Set whether or not unversioned obstructions should be allowed
                        dArgs.Force = ((MergeOptionsPage)mergeOptionsPage).AllowUnversionedObstructions;

                        // Set whether or not to ignore ancestry
                        dArgs.IgnoreAncestry = ((MergeOptionsPage)mergeOptionsPage).IgnoreAncestry;

                        // Set whether or not this is a dry run
                        dArgs.DryRun = PerformDryRun;

                        // Create 'From' uri
                        Uri.TryCreate(page.MergeSourceOne, UriKind.Absolute, out fromUri);

                        // Create 'To' uri if necessary
                        if (page.HasSecondMergeSourceUrl)
                        {
                            Uri.TryCreate(page.MergeSourceTwo, UriKind.Absolute, out toUri);
                        }
                        else
                        {
                            toUri = fromUri;
                        }

                        ee.Client.DiffMerge(MergeTarget.FullPath,
                                            new SvnUriTarget(fromUri, (page.MergeFromRevision > -1 ?
                                                                       new SvnRevision(page.MergeFromRevision - 1) :
                                                                       SvnRevision.Head)),
                                            new SvnUriTarget(toUri, (page.MergeToRevision > -1 ?
                                                                     new SvnRevision(page.MergeToRevision) :
                                                                     SvnRevision.Head)),
                                            dArgs);
                    }
                    else if (mergeType == MergeType.Reintegrate)
                    {
                        SvnReintegrationMergeArgs args = new SvnReintegrationMergeArgs();

                        // Set whether or not this is a dry run
                        args.DryRun = PerformDryRun;

                        ee.Client.ReintegrationMerge(MergeTarget.FullPath, MergeSource.Target, args);
                    }
                    else
                    {
                        SvnMergeArgs args = new SvnMergeArgs();

                        // Set the proper depth
                        args.Depth = mergeOptionsPage.Depth;

                        // Set whether or not unversioned obstructions should be allowed
                        args.Force = mergeOptionsPage.AllowUnversionedObstructions;

                        // Set whether or not to ignore ancestry
                        args.IgnoreAncestry = mergeOptionsPage.IgnoreAncestry;

                        // Set whether or not this merge should just record the merge information
                        args.RecordOnly = (mergeType == MergeType.ManuallyRecord || mergeType == MergeType.ManuallyRemove);

                        // Set whether or not this is a dry run
                        args.DryRun = PerformDryRun;



                        //no need to continue with the merge operation since there are no revisions to merge
                        if (MergeRevisions != null && EnumTools.GetFirst(MergeRevisions) == null)
                        {
                            throw new Exception(MergeStrings.NoLogItems);
                        }

                        if (MergeRevisions == null)
                        {
                            // Merge all eligible
                            ee.Client.Merge(
                                MergeTarget.FullPath,
                                MergeSource.Target,
                                new SvnRevisionRange(SvnRevision.Zero, SvnRevision.Head),
                                args);
                        }
                        else
                        {
                            // Cherrypicking
                            ee.Client.Merge(
                                MergeTarget.FullPath,
                                MergeSource.Target,
                                new List <SvnRevisionRange>(MergeRevisions),
                                args);
                        }
                    }
                }
                finally
                {
                    if (!PerformDryRun)
                    {
                        // Detach the conflict handler
                        ee.Client.Conflict -= new EventHandler <SvnConflictEventArgs>(conflictHandler.OnConflict);
                    }

                    // Detach the notify handler
                    ee.Client.Notify -= new EventHandler <SvnNotifyEventArgs>(OnNotify);

                    // Detach the cancel handler
                    ee.Client.Cancel -= new EventHandler <SvnCancelEventArgs>(this.OnCancel);

                    if (mergeConflictHandler != null)
                    {
                        _resolvedMergeConflicts = mergeConflictHandler.ResolvedMergedConflicts;
                        mergeConflictHandler    = null;
                    }
                }
            });
        }