Esempio n. 1
0
        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();
                }
            }
        }
Esempio n. 2
0
        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);
            }
        }