コード例 #1
0
 private void LoadMultiBranchViewData(string remote, IList <GitRef> localHeads)
 {
     _remoteBranchesLoader.Cancel();
     Cursor = Cursors.AppStarting;
     _remoteBranchesLoader.Load(() => Module.GetRemoteRefs(remote, false, true),
                                (remoteHeads) => ProcessHeads(remote, localHeads, remoteHeads));
 }
コード例 #2
0
        public void Cancel_during_load_means_callback_not_fired()
        {
            ThreadHelper.JoinableTaskFactory.Run(async() =>
            {
                var loadSignal     = new SemaphoreSlim(0);
                var completeSignal = new SemaphoreSlim(0);

                var started   = 0;
                var completed = 0;
                var task      = _loader.LoadAsync(
                    () =>
                {
                    started++;
                    loadSignal.Release();
                    completeSignal.Wait();
                },
                    () => completed++);

                Assert.True(await loadSignal.WaitAsync(1000));

                Assert.AreEqual(1, started);
                Assert.AreEqual(0, completed);

                _loader.Cancel();
                completeSignal.Release();

                await task;

                Assert.AreEqual(1, started);
                Assert.AreEqual(0, completed, "Should not have called the follow-up action");

                Assert.AreEqual(TaskStatus.RanToCompletion, task.Status);
            });
        }
コード例 #3
0
 private void CancelBranchNameLoad()
 {
     if (_branchNameLoader != null)
     {
         _branchNameLoader.Cancel();
     }
 }
コード例 #4
0
 void IDisposable.Dispose()
 {
     if (backgroundLoader != null)
     {
         backgroundLoader.Cancel();
     }
     backgroundLoader = null;
 }
コード例 #5
0
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                _branchesLoader.Cancel();
                _branchesLoader.Dispose();

                components?.Dispose();
            }
            base.Dispose(disposing);
        }
コード例 #6
0
ファイル: FormClone.cs プロジェクト: xatazch/gitextensions
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                _branchListLoader.Cancel();

                _branchListLoader.Dispose();

                if (components != null)
                    components.Dispose();
            }
            base.Dispose(disposing);
        }
コード例 #7
0
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                _asyncLoader.Cancel();
                _asyncLoader.Dispose();
                _filterRevisionsHelper.Dispose();
                _filterBranchHelper.Dispose();
                _formBrowseMenus.Dispose();

                components?.Dispose();
            }
            base.Dispose(disposing);
        }
コード例 #8
0
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                loader.Cancel();
                loader.Dispose();

                if (components != null)
                {
                    components.Dispose();
                }
            }

            base.Dispose(disposing);
        }
コード例 #9
0
        private void FilePattern_TextChanged(object sender, EventArgs e)
        {
            _ignoredFilesLoader.Cancel();
            if (_NO_TRANSLATE_Preview.Enabled)
            {
                _ignoredFilesLoader.Delay             = 300;
                _NO_TRANSLATE_filesWillBeIgnored.Text = _updateStatusString.Text;
                _NO_TRANSLATE_Preview.DataSource      = new List <string> {
                    _updateStatusString.Text
                };
                _NO_TRANSLATE_Preview.Enabled = false;
            }

            _ignoredFilesLoader.Load(() => Module.GetIgnoredFiles(GetCurrentPatterns()), UpdatePreviewPanel);
        }
コード例 #10
0
        public void Using_load_or_cancel_after_dispose_throws()
        {
            var loader = new AsyncLoader();

            // Safe to dispose multiple times
            loader.Dispose();
            loader.Dispose();
            loader.Dispose();

            // Any use after dispose should throw
            Assert.ThrowsAsync <ObjectDisposedException>(async() => await loader.LoadAsync(() => { }, () => { }));
            Assert.ThrowsAsync <ObjectDisposedException>(async() => await loader.LoadAsync(() => 1, i => { }));
            Assert.ThrowsAsync <ObjectDisposedException>(async() => await loader.LoadAsync(_ => { }, () => { }));
            Assert.ThrowsAsync <ObjectDisposedException>(async() => await loader.LoadAsync(_ => 1, i => { }));
            Assert.Throws <ObjectDisposedException>(() => loader.Cancel());
        }
コード例 #11
0
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                _asyncLoader.Cancel();
                _asyncLoader.Dispose();
                _filterRevisionsHelper.Dispose();
                _filterBranchHelper.Dispose();

                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }
コード例 #12
0
 private void CancelBranchNameLoad()
 {
     _branchNameLoader?.Cancel();
 }
コード例 #13
0
 private void FormGitStatistics_FormClosing(object sender, FormClosingEventArgs e)
 {
     lineCounter.LinesOfCodeUpdated -= lineCounter_LinesOfCodeUpdated;
     loadThread.Cancel();
 }
コード例 #14
0
        private void LoadMultiBranchViewData(string remote, IList <GitRef> localHeads)
        {
            _remoteBranchesLoader.Cancel();
            Cursor = Cursors.AppStarting;
            _remoteBranchesLoader.Load(() => { return(Module.GetRemoteRefs(remote, false, true)); },
                                       (remoteHeads) =>
            {
                Cursor = Cursors.Default;
                if (remoteHeads.HostKeyFail)
                {
                    string remoteUrl;

                    remoteUrl = Module.GetPathSetting(string.Format(SettingKeyString.RemoteUrl, remote));
                    if (string.IsNullOrEmpty(remoteUrl))
                    {
                        remoteUrl = remote;
                    }

                    if (FormRemoteProcess.AskForCacheHostkey(this, Module, remoteUrl))
                    {
                        LoadMultiBranchViewData(remote, localHeads);
                    }
                }
                else if (remoteHeads.AuthenticationFail)
                {
                    string loadedKey;
                    if (FormPuttyError.AskForKey(this, out loadedKey))
                    {
                        LoadMultiBranchViewData(remote, localHeads);
                    }
                }
                else
                {
                    // Add all the local branches.
                    foreach (var head in localHeads)
                    {
                        DataRow row   = _branchTable.NewRow();
                        row["Force"]  = false;
                        row["Delete"] = false;
                        row["Local"]  = head.Name;

                        string remoteName;
                        if (head.Remote == remote)
                        {
                            remoteName = head.MergeWith ?? head.Name;
                        }
                        else
                        {
                            remoteName = head.Name;
                        }

                        row["Remote"]    = remoteName;
                        bool newAtRemote = remoteHeads.Result.Any(h => h.Name == remoteName);
                        row["New"]       = newAtRemote ? _no.Text : _yes.Text;
                        row["Push"]      = newAtRemote;

                        _branchTable.Rows.Add(row);
                    }

                    // Offer to delete all the left over remote branches.
                    foreach (var remoteHead in remoteHeads.Result)
                    {
                        GitRef head = remoteHead;
                        if (localHeads.All(h => h.Name != head.Name))
                        {
                            DataRow row   = _branchTable.NewRow();
                            row["Local"]  = null;
                            row["Remote"] = remoteHead.Name;
                            row["New"]    = _no.Text;
                            row["Push"]   = false;
                            row["Force"]  = false;
                            row["Delete"] = false;
                            _branchTable.Rows.Add(row);
                        }
                    }
                }
            });
        }
コード例 #15
0
 public void Dispose()
 {
     backgroundLoader.Cancel();
 }
コード例 #16
0
 private void SearchWindow_FormClosing(object sender, FormClosingEventArgs e)
 {
     _backgroundLoader.Cancel();
 }