Skip to content

Instantly share code, notes, and snippets.

@alanmcgovern
Created February 9, 2016 16:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alanmcgovern/5794eb9b6e61eea61973 to your computer and use it in GitHub Desktop.
Save alanmcgovern/5794eb9b6e61eea61973 to your computer and use it in GitHub Desktop.
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildFileFormat.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildFileFormat.cs
index 12a69d7..e4a7060 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildFileFormat.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildFileFormat.cs
@@ -174,7 +174,9 @@ namespace MonoDevelop.Projects.MSBuild
internal async Task WriteFile (FilePath file, object obj, ProgressMonitor monitor)
{
if (slnFileFormat.CanWriteFile (obj, this)) {
+ Console.WriteLine ("await slnFileFormat.WriteFile (file, obj, true, monitor);");
await slnFileFormat.WriteFile (file, obj, true, monitor);
+ Console.WriteLine ("Done await slnFileFormat.WriteFile (file, obj, true, monitor);");
} else {
throw new NotSupportedException ();
}
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildProject.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildProject.cs
index 187da6c..dcb7fbf 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildProject.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildProject.cs
@@ -359,7 +359,9 @@ namespace MonoDevelop.Projects.MSBuild
public Task<bool> SaveAsync (string fileName)
{
+ Console.WriteLine ("MSBuildProject.SaveAsync");
return Task.Run (() => {
+ Console.WriteLine ("MSBuildProject.SaveAsync - running it");
string content = SaveToString ();
return TextFile.WriteFile (fileName, content, format.ByteOrderMark, true);
});
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/RemoteProjectBuilder.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/RemoteProjectBuilder.cs
index e2ddb4c..5aadd1a 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/RemoteProjectBuilder.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/RemoteProjectBuilder.cs
@@ -67,6 +67,7 @@ namespace MonoDevelop.Projects.MSBuild
public IProjectBuilder LoadProject (string projectFile)
{
try {
+ Console.WriteLine ("RemoteBuildEngine.LoadProject");
return engine.LoadProject (projectFile);
} catch {
CheckDisconnected ();
@@ -77,6 +78,7 @@ namespace MonoDevelop.Projects.MSBuild
public void UnloadProject (IProjectBuilder pb)
{
try {
+ Console.WriteLine ("RemoteBuildEngine.UnloadProject");
engine.UnloadProject (pb);
} catch (Exception ex) {
LoggingService.LogError ("Project unloading failed", ex);
@@ -88,6 +90,7 @@ namespace MonoDevelop.Projects.MSBuild
public void CancelTask (int taskId)
{
try {
+ Console.WriteLine ("RemoteBuildEngine.CancelTask");
engine.CancelTask (taskId);
} catch {
CheckDisconnected ();
@@ -98,6 +101,7 @@ namespace MonoDevelop.Projects.MSBuild
public void SetCulture (CultureInfo uiCulture)
{
try {
+ Console.WriteLine ("RemoteBuildEngine.SetCulture");
engine.SetCulture (uiCulture);
} catch {
CheckDisconnected ();
@@ -108,6 +112,7 @@ namespace MonoDevelop.Projects.MSBuild
public void SetGlobalProperties (IDictionary<string, string> properties)
{
try {
+ Console.WriteLine ("RemoteBuildEngine.SetGlobalProperties");
engine.SetGlobalProperties (properties);
} catch {
CheckDisconnected ();
@@ -117,11 +122,13 @@ namespace MonoDevelop.Projects.MSBuild
void IBuildEngine.Ping ()
{
+ Console.WriteLine ("RemoteBuildEngine.Ping");
engine.Ping ();
}
bool CheckAlive ()
{
+ Console.WriteLine ("RemoteBuildEngine.CheckAlive");
if (!alive)
return false;
try {
@@ -135,6 +142,7 @@ namespace MonoDevelop.Projects.MSBuild
internal bool CheckDisconnected ()
{
+ Console.WriteLine ("RemoteBuildEngine.CheckDisconnected");
if (!CheckAlive ()) {
if (Disconnected != null)
Disconnected (this, EventArgs.Empty);
@@ -145,6 +153,7 @@ namespace MonoDevelop.Projects.MSBuild
public void Dispose ()
{
+ Console.WriteLine ("RemoteBuildEngine.Dispose");
Interlocked.Decrement (ref count);
try {
alive = false;
@@ -154,8 +163,10 @@ namespace MonoDevelop.Projects.MSBuild
} catch {
}
}
- else
+ else {
+ LoggingService.LogInfo ("XS is disposing this engine");
engine.Dispose ();
+ }
} catch {
// Ignore
}
@@ -163,11 +174,13 @@ namespace MonoDevelop.Projects.MSBuild
public bool Lock ()
{
+ Console.WriteLine ("RemoteBuildEngine.Lock");
return Interlocked.Increment (ref busy) == 1;
}
public void Unlock ()
{
+ Console.WriteLine ("RemoteBuildEngine.Unlock");
Interlocked.Decrement (ref busy);
}
@@ -199,6 +212,7 @@ namespace MonoDevelop.Projects.MSBuild
void CheckDisconnected ()
{
+ Console.WriteLine ("RemoteProjectBuilder.CheckDisconnected");
if (engine != null && engine.CheckDisconnected ()) {
if (Disconnected != null)
Disconnected (this, EventArgs.Empty);
@@ -207,6 +221,7 @@ namespace MonoDevelop.Projects.MSBuild
IDisposable RegisterCancellation (CancellationToken cancellationToken, int taskId)
{
+ Console.WriteLine ("RemoteProjectBuilder.RegisterCancellation");
return cancellationToken.Register (() => {
try {
BeginOperation ();
@@ -232,6 +247,7 @@ namespace MonoDevelop.Projects.MSBuild
)
{
// Get an id for the task, and get ready to cancel it if the cancellation token is signalled
+ Console.WriteLine ("RemoteProjectBuilder.Run some big configuration/task");
var taskId = Interlocked.Increment (ref lastTaskId);
var cr = RegisterCancellation (cancellationToken, taskId);
@@ -265,6 +281,7 @@ namespace MonoDevelop.Projects.MSBuild
public async Task<string[]> ResolveAssemblyReferences (ProjectConfigurationInfo[] configurations, CancellationToken cancellationToken)
{
+ Console.WriteLine ("RemoteProjectBuilder.ResolveAssemblyReferences");
string[] refs = null;
var id = configurations [0].Configuration + "|" + configurations [0].Platform;
@@ -325,6 +342,7 @@ namespace MonoDevelop.Projects.MSBuild
public async Task Refresh ()
{
+ Console.WriteLine ("RemoteProjectBuilder.Refresh");
using (await referenceCacheLock.EnterAsync ())
referenceCache.Clear ();
@@ -343,6 +361,7 @@ namespace MonoDevelop.Projects.MSBuild
public async Task RefreshWithContent (string projectContent)
{
+ Console.WriteLine ("RemoteProjectBuilder.RefreshWithContent");
using (await referenceCacheLock.EnterAsync ())
referenceCache.Clear ();
@@ -361,6 +380,7 @@ namespace MonoDevelop.Projects.MSBuild
public void Dispose ()
{
+ Console.WriteLine ("RemoteProjectBuilder.Dispose");
if (!MSBuildProjectService.ShutDown && engine != null) {
try {
if (builder != null)
@@ -377,16 +397,19 @@ namespace MonoDevelop.Projects.MSBuild
~RemoteProjectBuilder ()
{
+ Console.WriteLine ("RemoteProjectBuilder.Finalizing - oops");
Dispose ();
}
void BeginOperation ()
{
+ Console.WriteLine ("RemoteProjectBuilder.BeginOperation");
engine.Lock ();
}
void EndOperation ()
{
+ Console.WriteLine ("RemoteProjectBuilder.EndOperation");
if (engine != null)
engine.Unlock ();
}
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/SlnFileFormat.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/SlnFileFormat.cs
index b2a2a04..a7aaa59 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/SlnFileFormat.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/SlnFileFormat.cs
@@ -97,7 +97,9 @@ namespace MonoDevelop.Projects.MSBuild
try {
monitor.BeginStep ();
item.SavingSolution = true;
+ Console.WriteLine ("item.SaveAsync (monitor).Wait ();");
item.SaveAsync (monitor).Wait ();
+ Console.WriteLine ("Done item.SaveAsync (monitor).Wait ();");
} finally {
item.SavingSolution = false;
}
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs
index 88f50ba..2ed69d7 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs
@@ -523,11 +523,16 @@ namespace MonoDevelop.Projects
SetFastBuildCheckDirty ();
modifiedInMemory = false;
+ Console.WriteLine ("Project.OnSave - await WriteProjectAsync (monitor);");
await WriteProjectAsync (monitor);
+ Console.WriteLine ("done Project.OnSave - await WriteProjectAsync (monitor);");
// Doesn't save the file to disk if the content did not change
- if (await sourceProject.SaveAsync (FileName) && projectBuilder != null)
+ if (await sourceProject.SaveAsync (FileName) && projectBuilder != null) {
+ Console.WriteLine ("Project.OnSave - await projectBuilder.Refresh ();");
await projectBuilder.Refresh ();
+ Console.WriteLine ("Done Project.OnSave - await projectBuilder.Refresh ();");
+ }
}
protected override IEnumerable<WorkspaceObjectExtension> CreateDefaultExtensions ()
@@ -1984,11 +1989,17 @@ namespace MonoDevelop.Projects
internal async Task WriteProjectAsync (ProgressMonitor monitor)
{
+ Console.WriteLine ("Project.WriteProjectAsync - await writeProjectLock.EnterAsync ().ConfigureAwait (false)");
using (await writeProjectLock.EnterAsync ().ConfigureAwait (false)) {
+ Console.WriteLine ("done Project.WriteProjectAsync - await writeProjectLock.EnterAsync ().ConfigureAwait (false)");
await Task.Run (() => {
+ Console.WriteLine ("WriteProject (monitor);");
WriteProject (monitor);
+ Console.WriteLine ("done WriteProject (monitor);");
}).ConfigureAwait (false);
+ Console.WriteLine ("about to release the lock in Project.WriteProjectAsync");
}
+ Console.WriteLine ("Released the lock in Project.WriteProjectAsync");
}
void WriteProject (ProgressMonitor monitor)
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Solution.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Solution.cs
index 23f0870..ffc690f 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Solution.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Solution.cs
@@ -289,6 +289,7 @@ namespace MonoDevelop.Projects
internal protected override Task OnSave (ProgressMonitor monitor)
{
+ Console.WriteLine ("Solution.OnSave");
return FileFormat.WriteFile (FileName, this, monitor);
}
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionItem.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionItem.cs
index 641aee9..f827a0f 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionItem.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionItem.cs
@@ -420,10 +420,17 @@ namespace MonoDevelop.Projects
public Task SaveAsync (ProgressMonitor monitor)
{
+ Console.WriteLine ("SolutionItem.SaveAsync");
return BindTask (ct => Runtime.RunInMainThread (async () => {
+ Console.WriteLine ("SolutionItem.SaveAsync - await writelock");
+
using (await WriteLock ()) {
+ Console.WriteLine ("SolutionItem.SaveAsync - got writelock");
+
monitor = monitor.WithCancellationToken (ct);
+ Console.WriteLine ("SolutionItem.SaveAsync - ItemExtension.OnSave (monitor);");
await ItemExtension.OnSave (monitor);
+ Console.WriteLine ("Done SolutionItem.SaveAsync - ItemExtension.OnSave (monitor);");
if (ItemExtension.OnCheckHasSolutionData () && !SavingSolution && ParentSolution != null) {
// The project has data that has to be saved in the solution, but the solution is not being saved. Do it now.
@@ -441,7 +448,9 @@ namespace MonoDevelop.Projects
try {
fileStatusTracker.BeginSave ();
+ Console.WriteLine ("SolutionItem.OnSave - await OnSave (monitor);");
await OnSave (monitor);
+ Console.WriteLine ("Done SolutionItem.OnSave - await OnSave (monitor);");
OnSaved (thisItemArgs);
} finally {
fileStatusTracker.EndSave ();
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/WorkspaceItem.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/WorkspaceItem.cs
index c0d02ff..a68235f 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/WorkspaceItem.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/WorkspaceItem.cs
@@ -237,15 +237,19 @@ namespace MonoDevelop.Projects
public Task SaveAsync (ProgressMonitor monitor)
{
return Runtime.RunInMainThread (async delegate {
+ Console.WriteLine ("Awaiting writelock");
using (await WriteLock ()) {
+ Console.WriteLine ("Got writelock");
foreach (var f in GetItemFiles (false))
FileService.RequestFileEdit (f);
try {
fileStatusTracker.BeginSave ();
+ Console.WriteLine ("awaiting ItemExtension.Save (monitor);");
await ItemExtension.Save (monitor);
+ Console.WriteLine ("awaiting OnSaveUserProperties (); ");
await OnSaveUserProperties (); // Call the virtual to avoid the lock
OnSaved (new WorkspaceItemEventArgs (this));
-
+ Console.WriteLine ("All done");
// Update save times
} finally {
fileStatusTracker.EndSave ();
diff --git a/main/src/core/MonoDevelop.Projects.Formats.MSBuild/MonoDevelop.Projects.Formats.MSBuild/BuildEngine.Shared.cs b/main/src/core/MonoDevelop.Projects.Formats.MSBuild/MonoDevelop.Projects.Formats.MSBuild/BuildEngine.Shared.cs
index 1fe71fd..3b99ac2 100644
--- a/main/src/core/MonoDevelop.Projects.Formats.MSBuild/MonoDevelop.Projects.Formats.MSBuild/BuildEngine.Shared.cs
+++ b/main/src/core/MonoDevelop.Projects.Formats.MSBuild/MonoDevelop.Projects.Formats.MSBuild/BuildEngine.Shared.cs
@@ -51,6 +51,7 @@ namespace MonoDevelop.Projects.MSBuild
public void Dispose ()
{
+ Console.WriteLine ("Remote MSBuild has been disposed");
doneEvent.Set ();
}
diff --git a/main/tests/Makefile.am b/main/tests/Makefile.am
index 2ca47df..7bde092 100644
--- a/main/tests/Makefile.am
+++ b/main/tests/Makefile.am
@@ -2,7 +2,7 @@ include $(top_srcdir)/xbuild.include
SUBDIRS=UnitTests MacPlatform.Tests UserInterfaceTests TestRunner Ide.Tests MonoDevelop.CSharpBinding.Tests
-MONO=mono$(SGEN_SUFFIX)
+MONO=mono$(SGEN_SUFFIX) --trace
RUN_TEST=$(MDTOOL_RUN) run-md-tests
TEST_DIR=$(top_builddir)/build/tests
EXTERNAL=$(top_builddir)/external
@@ -54,7 +54,7 @@ TEST_ASSEMBLIES += $(TEST_ASSEMBLIES_WINDOWS)
endif
test:
- @if test -n "$(assembly)"; then \
+ if test -n "$(assembly)"; then \
for asm in $(TEST_ASSEMBLIES); do \
if test `basename $$asm` = $(assembly); then \
($(RUN_TEST) -xml=TestResult_`basename $$asm`.xml -labels $$asm) || exit $?; \
diff --git a/main/tests/UnitTests/MonoDevelop.Projects/MSBuildTests.cs b/main/tests/UnitTests/MonoDevelop.Projects/MSBuildTests.cs
index 4a90089..ed0227a 100644
--- a/main/tests/UnitTests/MonoDevelop.Projects/MSBuildTests.cs
+++ b/main/tests/UnitTests/MonoDevelop.Projects/MSBuildTests.cs
@@ -38,17 +38,17 @@ using MonoDevelop.Projects.MSBuild;
using System.Threading.Tasks;
using MonoDevelop.Core.Serialization;
using MonoDevelop.Projects.Extensions;
-
-namespace MonoDevelop.Projects
+using MonoDevelop.Projects;
+namespace ____MonoDevelop.Projects
{
[TestFixture]
- public class MSBuildTests: TestBase
+ public class ____MSBuildTests: TestBase
{
[Test()]
public async Task LoadSaveBuildConsoleProject()
{
string solFile = Util.GetSampleProject ("console-project", "ConsoleProject.sln");
-
+
Solution item = (Solution) await Services.ProjectService.ReadWorkspaceItem (Util.GetMonitor (), solFile);
Assert.IsTrue (item is Solution);
@@ -489,12 +489,26 @@ namespace MonoDevelop.Projects
{
string solFile = Util.GetSampleProject ("ConsoleApp-VS" + vsVersion, "ConsoleApplication.sln");
var monitor = new ProgressMonitor ();
+
+ //while (true) {
+ // var sol2 = (Solution) await Services.ProjectService.ReadWorkspaceItem (monitor, solFile);
+ // var r2 = await sol2.Build (monitor, "Debug");
+ // Console.WriteLine (r2);
+ // await sol2.SaveAsync (monitor);
+ // monitor.Dispose ();
+ // monitor = new ProgressMonitor ();
+ // Console.WriteLine ("Monitor Disposed");
+ //}
+ Console.WriteLine ("First");
var sol = (Solution) await Services.ProjectService.ReadWorkspaceItem (monitor, solFile);
+ Console.WriteLine ("Second");
Assert.IsTrue (monitor.Errors.Length == 0);
Assert.IsTrue (monitor.Warnings.Length == 0);
var p = (DotNetProject) sol.GetAllProjects ().First ();
Assert.AreEqual (toolsVersion, p.ToolsVersion);
+ Console.WriteLine ("Third");
var r = await sol.Build (monitor, "Debug");
+ Console.WriteLine ("Fourth");
Assert.IsTrue (monitor.Errors.Length == 0);
Assert.IsTrue (monitor.Warnings.Length == 0);
Assert.IsFalse (r.Failed);
@@ -512,7 +526,9 @@ namespace MonoDevelop.Projects
string projectFile = ((Project)sol.Items [0]).FileName;
string projectXml = Util.ReadAllWithWindowsEndings (projectFile);
+ Console.WriteLine ("Fifth");
await sol.SaveAsync (monitor);
+ Console.WriteLine ("Sixth");
Assert.IsTrue (monitor.Errors.Length == 0);
Assert.IsTrue (monitor.Warnings.Length == 0);
@@ -520,9 +536,13 @@ namespace MonoDevelop.Projects
}
[Test]
- public async Task LoadBuildVS2010ConsoleProject ()
+ public async Task ____LoadBuildVS2010ConsoleProject ()
{
- await LoadBuildVSConsoleProject ("2010", "4.0");
+ while (true) {
+ Console.WriteLine ("Starting2");
+ await LoadBuildVSConsoleProject ("2010", "4.0");
+ Console.WriteLine ("Finished2");
+ }
}
[Test]
diff --git a/main/tests/UnitTests/UnitTests.csproj b/main/tests/UnitTests/UnitTests.csproj
index a869b47..c221e71 100644
--- a/main/tests/UnitTests/UnitTests.csproj
+++ b/main/tests/UnitTests/UnitTests.csproj
@@ -172,12 +172,10 @@
<ProjectReference Include="..\..\external\nrefactory\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj">
<Project>{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}</Project>
<Name>ICSharpCode.NRefactory</Name>
- <Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\external\nrefactory\ICSharpCode.NRefactory.CSharp\ICSharpCode.NRefactory.CSharp.csproj">
<Project>{53DCA265-3C3C-42F9-B647-F72BA678122B}</Project>
<Name>ICSharpCode.NRefactory.CSharp</Name>
- <Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\external\mono-addins\Mono.Addins\Mono.Addins.csproj">
<Project>{91DD5A2D-9FE3-4C3C-9253-876141874DAD}</Project>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment