Ejemplo n.º 1
0
        public override void RevertToRevision(FilePath path, Revision revision, IProgressMonitor monitor)
        {
            SvnMergeArgs args = new SvnMergeArgs();

            BindMonitor(args, monitor);
            SvnRevisionRange range = new SvnRevisionRange(GetRevision(SvnRevision.Head), GetRevision(revision));

            client.Merge(path, new SvnPathTarget(path), range, args);
        }
Ejemplo n.º 2
0
        public override void RevertToRevision(FilePath path, Revision revision, ProgressMonitor monitor)
        {
            var args = new SvnMergeArgs();

            BindMonitor(monitor);
            var range = new SvnRevisionRange(GetRevision(SvnRevision.Head), GetRevision(revision));

            lock (client)
                client.Merge(path, new SvnPathTarget(path), range, args);
        }
Ejemplo n.º 3
0
        public override void RevertRevision(FilePath path, Revision revision, IProgressMonitor monitor)
        {
            var args = new SvnMergeArgs();

            BindMonitor(monitor);
            Revision prev  = ((SvnRevision)revision).GetPrevious();
            var      range = new SvnRevisionRange(GetRevision(revision), GetRevision(prev));

            lock (client)
                client.Merge(path, new SvnPathTarget(path), range, args);
        }
Ejemplo n.º 4
0
        public override async void RevertRevision(FilePath path, Revision revision, ProgressMonitor monitor)
        {
            var args = new SvnMergeArgs();

            BindMonitor(monitor);
            Revision prev  = await((SvnRevision)revision).GetPreviousAsync(monitor.CancellationToken);
            var      range = new SvnRevisionRange(GetRevision(revision), GetRevision(prev));

            lock (client)
                client.Merge(path, new SvnPathTarget(path), range, args);
        }
Ejemplo n.º 5
0
        public static void Merge(string targetPath, string svnSourceURL, string svnUsername, string svnPassword, long revisionNumber)
        {
            using (SvnClient client = InitializeSvnClient(svnUsername, svnPassword))
            {
                SvnMergeArgs mergeArgs = new SvnMergeArgs();
                mergeArgs.Depth = SvnDepth.Infinity;

                SvnUriTarget     svnTargetSource = new SvnUriTarget(new Uri(svnSourceURL));
                SvnRevisionRange svnRange        = new SvnRevisionRange(revisionNumber - 1, revisionNumber);
                bool             success         = client.Merge(targetPath, svnTargetSource, svnRange, mergeArgs);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Actual method to be executed for the implementing task
        /// </summary>
        /// <param name="client">The instance of the SVN client</param>
        /// <returns></returns>
        public override bool ExecuteCommand(SvnClient client)
        {
            SvnUriTarget uriTarget = new SvnUriTarget(FromRepositoryUrl);

            SvnMergeArgs args = new SvnMergeArgs();
            args.Depth = GetDepth();
            args.DryRun = DryRun;
            args.Force = Force;
            args.IgnoreAncestry = IgnoreAncestry;

            SvnRevisionRange revisionRange = GetRevisionRange();

            return client.Merge(RepositoryPath, uriTarget, revisionRange, args);
        }
        /// <summary>
        ///     Слияние родительской ветки в ветку фитчи
        /// </summary>
        /// <param name="workingCopyPath">Рабочая папка</param>
        /// <param name="basePathUrl">URL родительской ветки</param>
        /// <returns>Результат слияния</returns>
        private bool MergeBaseBranchIntoFeature(string workingCopyPath, string basePathUrl)
        {
            var svnMergeArgs = new SvnMergeArgs {
                Force = true
            };

            svnMergeArgs.Notify   += OnSvnMergeArgsOnNotify;
            svnMergeArgs.Conflict += OnSvnMergeArgsOnConflict;
            try {
                var mergeRange = new SvnRevisionRange(SvnRevision.One, SvnRevision.Head);
                return(Merge(workingCopyPath, SvnUriTarget.FromString(basePathUrl), mergeRange, svnMergeArgs));
            } catch (SvnException svnException) {
                Logger.LogError(svnException.Message);
            } finally {
                svnMergeArgs.Notify   -= OnSvnMergeArgsOnNotify;
                svnMergeArgs.Conflict -= OnSvnMergeArgsOnConflict;
            }

            return(false);
        }
Ejemplo n.º 8
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;
                        }
                    }
                });
        }
Ejemplo n.º 9
0
		public override void RevertToRevision (FilePath path, Revision revision, IProgressMonitor monitor)
		{
			SvnMergeArgs args = new SvnMergeArgs ();
			BindMonitor (args, monitor);
			SvnRevisionRange range = new SvnRevisionRange (GetRevision (SvnRevision.Head), GetRevision (revision));
			lock (client) 
				client.Merge (path, new SvnPathTarget (path), range, args);
		}
Ejemplo n.º 10
0
		public override void RevertRevision (FilePath path, Revision revision, IProgressMonitor monitor)
		{
			var args = new SvnMergeArgs ();
			BindMonitor (monitor);
			Revision prev = ((SvnRevision) revision).GetPrevious ();
			var range = new SvnRevisionRange (GetRevision (revision), GetRevision (prev));
			lock (client) 
				client.Merge (path, new SvnPathTarget (path), range, args);
		}
Ejemplo n.º 11
0
        public void OnExecute(CommandEventArgs e)
        {
            ILogControl     logWindow      = e.Selection.GetActiveControl <ILogControl>();
            IProgressRunner progressRunner = e.GetService <IProgressRunner>();

            if (logWindow == null)
            {
                return;
            }

            List <SvnRevisionRange> revisions = new List <SvnRevisionRange>();

            if (e.Command == AnkhCommand.LogRevertTo)
            {
                ISvnLogItem item = EnumTools.GetSingle(e.Selection.GetSelection <ISvnLogItem>());

                if (item == null)
                {
                    return;
                }

                // Revert to revision, is revert everything after
                revisions.Add(new SvnRevisionRange(SvnRevision.Working, item.Revision));
            }
            else
            {
                foreach (ISvnLogItem item in e.Selection.GetSelection <ISvnLogItem>())
                {
                    revisions.Add(new SvnRevisionRange(item.Revision, item.Revision - 1));
                }
            }

            if (revisions.Count == 0)
            {
                return;
            }

            IAnkhOpenDocumentTracker tracker = e.GetService <IAnkhOpenDocumentTracker>();

            HybridCollection <string> nodes = new HybridCollection <string>(StringComparer.OrdinalIgnoreCase);

            foreach (SvnOrigin o in logWindow.Origins)
            {
                SvnPathTarget pt = o.Target as SvnPathTarget;
                if (pt == null)
                {
                    continue;
                }

                foreach (string file in tracker.GetDocumentsBelow(pt.FullPath))
                {
                    if (!nodes.Contains(file))
                    {
                        nodes.Add(file);
                    }
                }
            }

            if (nodes.Count > 0)
            {
                tracker.SaveDocuments(nodes); // Saves all open documents below all specified origins
            }
            using (DocumentLock dl = tracker.LockDocuments(nodes, DocumentLockType.NoReload))
                using (dl.MonitorChangesForReload())
                {
                    SvnMergeArgs ma = new SvnMergeArgs();

                    progressRunner.RunModal(LogStrings.Reverting,
                                            delegate(object sender, ProgressWorkerArgs ee)
                    {
                        foreach (SvnOrigin item in logWindow.Origins)
                        {
                            SvnPathTarget target = item.Target as SvnPathTarget;

                            if (target == null)
                            {
                                continue;
                            }

                            ee.Client.Merge(target.FullPath, target, revisions, ma);
                        }
                    });
                }
        }
Ejemplo n.º 12
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;
                    }
                }
            });
        }