コード例 #1
0
ファイル: Repository.cs プロジェクト: oqewok/gitter
        /// <summary>Control rebase process.</summary>
        /// <param name="control">Type of operation.</param>
        public Task RebaseAsync(RebaseControl control, IProgress <OperationProgress> progress)
        {
            Verify.State.IsFalse(IsDisposed, "Repository is disposed.");

            switch (control)
            {
            case RebaseControl.Abort:
                if (progress != null)
                {
                    progress.Report(new OperationProgress(Resources.StrsAbortingRebase.AddEllipsis()));
                }
                break;

            case RebaseControl.Continue:
                if (progress != null)
                {
                    progress.Report(new OperationProgress(Resources.StrsContinuingRebase.AddEllipsis()));
                }
                break;

            case RebaseControl.Skip:
                if (progress != null)
                {
                    progress.Report(new OperationProgress(Resources.StrsSkippingCommit.AddEllipsis()));
                }
                break;

            default:
                throw new ArgumentException(
                          "Unknown RebaseControl value: {0}".UseAsFormat(control),
                          "control");
            }

            var block = Monitor.BlockNotifications(
                RepositoryNotifications.BranchChanged,
                RepositoryNotifications.Checkout,
                RepositoryNotifications.WorktreeUpdated,
                RepositoryNotifications.IndexUpdated);

            return(Accessor.Rebase.InvokeAsync(new RebaseParameters(control), progress, CancellationToken.None)
                   .ContinueWith(
                       t =>
            {
                block.Dispose();
                _refs.RefreshBranches();
                _head.Refresh();
                _status.Refresh();
                OnStateChanged();
                OnUpdated();
                TaskUtility.PropagateFaultedStates(t);
            },
                       CancellationToken.None,
                       TaskContinuationOptions.ExecuteSynchronously,
                       TaskScheduler.Default));
        }
コード例 #2
0
ファイル: Repository.cs プロジェクト: oqewok/gitter
        public Task CherryPickAsync(CherryPickControl control, IProgress <OperationProgress> progress)
        {
            Verify.State.IsFalse(IsDisposed, "Repository is disposed.");

            switch (control)
            {
            case CherryPickControl.Abort:
                if (progress != null)
                {
                    progress.Report(new OperationProgress(Resources.StrsAbortingCherryPick.AddEllipsis()));
                }
                break;

            case CherryPickControl.Continue:
                if (progress != null)
                {
                    progress.Report(new OperationProgress(Resources.StrsContinuingCherryPick.AddEllipsis()));
                }
                break;

            case CherryPickControl.Quit:
                if (progress != null)
                {
                    progress.Report(new OperationProgress(Resources.StrsQuitingCherryPick.AddEllipsis()));
                }
                break;

            default:
                throw new ArgumentException(
                          "Unknown CherryPickControl value: {0}".UseAsFormat(control),
                          "control");
            }

            var block = Monitor.BlockNotifications(
                RepositoryNotifications.BranchChanged,
                RepositoryNotifications.WorktreeUpdated,
                RepositoryNotifications.IndexUpdated);

            return(Accessor.CherryPick.InvokeAsync(new CherryPickParameters(control), progress, CancellationToken.None)
                   .ContinueWith(
                       t =>
            {
                block.Dispose();
                _head.Refresh();
                _status.Refresh();
                OnStateChanged();
                OnUpdated();
                TaskUtility.PropagateFaultedStates(t);
            }));
        }
コード例 #3
0
        public async Task CherryPickAsync(CherryPickControl control, IProgress <OperationProgress> progress)
        {
            Verify.State.IsFalse(IsDisposed, "Repository is disposed.");

            switch (control)
            {
            case CherryPickControl.Abort:
                progress?.Report(new OperationProgress(Resources.StrsAbortingCherryPick.AddEllipsis()));
                break;

            case CherryPickControl.Continue:
                progress?.Report(new OperationProgress(Resources.StrsContinuingCherryPick.AddEllipsis()));
                break;

            case CherryPickControl.Quit:
                progress?.Report(new OperationProgress(Resources.StrsQuitingCherryPick.AddEllipsis()));
                break;

            default:
                throw new ArgumentException(
                          "Unknown CherryPickControl value: {0}".UseAsFormat(control),
                          nameof(control));
            }

            var block = Monitor.BlockNotifications(
                RepositoryNotifications.BranchChanged,
                RepositoryNotifications.WorktreeUpdated,
                RepositoryNotifications.IndexUpdated);

            try
            {
                await Accessor.CherryPick
                .InvokeAsync(new CherryPickParameters(control), progress, CancellationToken.None)
                .ConfigureAwait(continueOnCapturedContext: false);
            }
            catch
            {
                throw;
            }
            finally
            {
                block.Dispose();
                if (Head.Pointer is Branch branch && !branch.IsRemote)
                {
                    branch.Refresh();
                }
コード例 #4
0
ファイル: Repository.cs プロジェクト: oqewok/gitter
        /// <summary>Control rebase process.</summary>
        /// <param name="control">Type of operation.</param>
        public void Rebase(RebaseControl control)
        {
            Verify.State.IsFalse(IsDisposed, "Repository is disposed.");

            using (Monitor.BlockNotifications(
                       RepositoryNotifications.BranchChanged,
                       RepositoryNotifications.Checkout,
                       RepositoryNotifications.WorktreeUpdated,
                       RepositoryNotifications.IndexUpdated))
            {
                try
                {
                    Accessor.Rebase.Invoke(new RebaseParameters(control));
                }
                finally
                {
                    _refs.RefreshBranches();
                    _head.Refresh();
                    _status.Refresh();
                    OnStateChanged();
                    OnUpdated();
                }
            }
        }