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); }
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); }
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); }
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); }
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); } }
/// <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); }
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; } } }); }
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); }
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); }
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); } }); } }
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; } } }); }