Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLluis Sanchez <lluis@xamarin.com>2019-09-16 18:48:06 +0300
committerGitHub <noreply@github.com>2019-09-16 18:48:06 +0300
commitb7bf2893f20b01603c139a1b0573a4d50c00bf80 (patch)
treefe1e7a781e4c0540c9c41cfb4a0df2bc68d67b9b /main/src/addins
parentd737ffb8a720e53595866642586cf7360214ee4e (diff)
parentddf702ccbcb1646593f2008a1ad953cbe9a5f34c (diff)
Merge pull request #8726 from mono/fix-all-hangs
Fix all hangs
Diffstat (limited to 'main/src/addins')
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/StatusView.cs6
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs13
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlFileSystemExtension.cs7
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlNodeExtension.cs12
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlService.cs2
5 files changed, 16 insertions, 24 deletions
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/StatusView.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/StatusView.cs
index 124690be2e..afbafe0e84 100644
--- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/StatusView.cs
+++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/StatusView.cs
@@ -988,7 +988,7 @@ namespace MonoDevelop.VersionControl.Views
}
}
- async void OnFileStatusChanged (object s, FileUpdateEventArgs args)
+ void OnFileStatusChanged (object s, FileUpdateEventArgs args)
{
try {
if (args.Any (f => f.FilePath == filepath || (filepath != null && !f.FilePath.IsNullOrEmpty && f.FilePath.IsChildPathOf (filepath) && f.IsDirectory))) {
@@ -996,7 +996,7 @@ namespace MonoDevelop.VersionControl.Views
return;
}
foreach (FileUpdateEventInfo f in args) {
- if (!await OnFileStatusChanged (f))
+ if (!OnFileStatusChanged (f))
break;
}
UpdateControlStatus ();
@@ -1005,7 +1005,7 @@ namespace MonoDevelop.VersionControl.Views
}
}
- async Task<bool> OnFileStatusChanged (FileUpdateEventInfo args)
+ bool OnFileStatusChanged (FileUpdateEventInfo args)
{
if (args.FilePath.IsNullOrEmpty)
return false;
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs
index d96abe1cac..29ff8afe57 100644
--- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs
+++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs
@@ -325,13 +325,13 @@ namespace MonoDevelop.VersionControl
}
if (pathsToQuery.Count > 0) {
ExclusiveOperationFactory.StartNew (async delegate {
- var status = await OnGetVersionInfoAsync (pathsToQuery, (queryFlags & VersionInfoQueryFlags.IncludeRemoteStatus) != 0, cancellationToken);
+ var status = await OnGetVersionInfoAsync (pathsToQuery, (queryFlags & VersionInfoQueryFlags.IncludeRemoteStatus) != 0, cancellationToken).ConfigureAwait (false);
foreach (var vi in status) {
if (!vi.IsInitialized) {
- await vi.InitAsync (this, cancellationToken);
+ await vi.InitAsync (this, cancellationToken).ConfigureAwait (false);
}
}
- await infoCache.SetStatusAsync (status, cancellationToken);
+ await infoCache.SetStatusAsync (status, cancellationToken).ConfigureAwait (false);
}).Ignore ();
}
return result;
@@ -361,13 +361,14 @@ namespace MonoDevelop.VersionControl
}
if (pathsToQuery.Count > 0) {
ExclusiveOperationFactory.StartNew (async delegate {
- var status = await OnGetVersionInfoAsync (paths, (queryFlags & VersionInfoQueryFlags.IncludeRemoteStatus) != 0);
+ // we don't care about initialization and setstatus async to happen on the exclusive thread, as we're not running a query here.
+ var status = await OnGetVersionInfoAsync (paths, (queryFlags & VersionInfoQueryFlags.IncludeRemoteStatus) != 0).ConfigureAwait (false);
foreach (var vi in status) {
if (!vi.IsInitialized) {
- await vi.InitAsync (this);
+ await vi.InitAsync (this).ConfigureAwait (false);
}
}
- await infoCache.SetStatusAsync (status);
+ await infoCache.SetStatusAsync (status).ConfigureAwait (false);
}).Ignore ();
}
if (getVersionInfoFailed) {
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlFileSystemExtension.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlFileSystemExtension.cs
index 1db9b4dd4b..c173760ee4 100644
--- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlFileSystemExtension.cs
+++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlFileSystemExtension.cs
@@ -9,6 +9,7 @@ using System.Linq;
using System;
using System.Threading.Tasks;
using System.Threading;
+using System.IO;
namespace MonoDevelop.VersionControl
{
@@ -132,13 +133,15 @@ namespace MonoDevelop.VersionControl
FileUpdateEventArgs args = new FileUpdateEventArgs ();
foreach (var file in files) {
var rep = GetRepository (file);
- if (rep != null && !rep.IsDisposed) {
+ // FIXME: Remove workaround https://devdiv.visualstudio.com/DevDiv/_workitems/edit/982818
+ if (rep != null && !rep.IsDisposed && File.Exists (file)) {
rep.ClearCachedVersionInfo (file);
if (rep.TryGetFileUpdateEventInfo (rep, file, out var eventInfo))
args.Add (eventInfo);
}
}
- VersionControlService.NotifyFileStatusChanged (args);
+ if (args.Count > 0)
+ VersionControlService.NotifyFileStatusChanged (args);
}
}
}
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlNodeExtension.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlNodeExtension.cs
index da4d6724ba..32d122ad77 100644
--- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlNodeExtension.cs
+++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlNodeExtension.cs
@@ -139,18 +139,6 @@ namespace MonoDevelop.VersionControl
void Monitor (object sender, FileUpdateEventArgs args)
{
foreach (var uinfo in args) {
- if (uinfo.RepositoryChanged) {
- foreach (var kv in pathToObject) {
- var builder = Context.GetTreeBuilder (kv.Value);
- if (kv.Value is WorkspaceObject wo) {
- var rep = VersionControlService.GetRepository (wo);
- rep.ClearCachedVersionInfo (kv.Key);
- }
-
- builder?.Update ();
- }
- break;
- }
foreach (var ob in GetObjectsForPath (uinfo.FilePath)) {
ITreeBuilder builder = Context.GetTreeBuilder (ob);
if (builder != null)
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlService.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlService.cs
index 256d3c981e..fc37ca6ed9 100644
--- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlService.cs
+++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlService.cs
@@ -522,7 +522,7 @@ namespace MonoDevelop.VersionControl
monitor = GetStatusMonitor ();
var gotInfo = repo.TryGetVersionInfo (file, out var versionInfo);
- if (gotInfo == false || versionInfo.CanAdd)
+ if (gotInfo == false || (versionInfo.Status & VersionStatus.Ignored) == 0 && versionInfo.CanAdd)
await repo.AddAsync (file, false, monitor);
}
vargs.AddRange (repoFiles.Select (i => new FileUpdateEventInfo (repo, i.ProjectFile.FilePath, i.ProjectFile.Subtype == Subtype.Directory)));