public static void Revert(this IRevisionPointer revision, int mainline, bool noCommit) { Verify.Argument.IsValidRevisionPointer(revision, "revision"); Verify.Argument.IsNotNegative(mainline, "mainline"); var repository = revision.Repository; var rev = repository.Head.Revision; var currentBranch = repository.Head.CurrentBranch; var notifications = noCommit ? new[] { RepositoryNotifications.IndexUpdated, RepositoryNotifications.WorktreeUpdated, } : new[] { RepositoryNotifications.BranchChanged, RepositoryNotifications.Checkout, RepositoryNotifications.IndexUpdated, RepositoryNotifications.WorktreeUpdated, }; using (repository.Monitor.BlockNotifications(notifications)) { var parameters = new RevertParameters(revision.Pointer, noCommit); if (mainline > 0) { parameters.Mainline = mainline; } try { repository.Accessor.Revert.Invoke(parameters); if (!noCommit) { if (currentBranch != null) { currentBranch.Refresh(); } else { repository.Head.Refresh(); } var headRev = repository.Head.Revision; if (headRev != rev) { repository.OnCommitCreated(headRev); repository.Head.NotifyRelogRecordAdded(); } } } catch (GitException) { repository.OnStateChanged(); throw; } finally { repository.Status.Refresh(); } } }
public Command GetRevertCommand(RevertParameters parameters) { Assert.IsNotNull(parameters); if(parameters.Control.HasValue) { switch(parameters.Control) { case RevertControl.Continue: return new RevertCommand(RevertCommand.Continue()); case RevertControl.Quit: return new RevertCommand(RevertCommand.Quit()); case RevertControl.Abort: return new RevertCommand(RevertCommand.Abort()); default: throw new ArgumentException("Unknown enum value.", "control"); } } else { var args = new List<ICommandArgument>(); if(parameters.NoCommit) { args.Add(RevertCommand.NoCommit()); } if(parameters.Mainline > 0) { args.Add(RevertCommand.Mainline(parameters.Mainline)); } foreach(var rev in parameters.Revisions) { args.Add(new CommandParameter(rev)); } return new RevertCommand(args); } }