Skip to content

Commit f0a6169

Browse files
committed
Merge branch 'master' into netcoreapp5.0
2 parents cb87212 + 4c4f188 commit f0a6169

File tree

3 files changed

+93
-5
lines changed

3 files changed

+93
-5
lines changed

src/Dotnet.Script.Core/ScriptDownloader.cs

100644100755
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.IO;
33
using System.IO.Compression;
4+
using System.Net;
45
using System.Net.Http;
56
using System.Threading.Tasks;
67

@@ -10,15 +11,20 @@ public class ScriptDownloader
1011
{
1112
public async Task<string> Download(string uri)
1213
{
13-
using (HttpClient client = new HttpClient())
14+
using (HttpClient client = new HttpClient(new HttpClientHandler
15+
{
16+
// Avoid Deflate due to bugs. For more info, see:
17+
// https://github.com/weblinq/WebLinq/issues/132
18+
AutomaticDecompression = DecompressionMethods.GZip
19+
}))
1420
{
1521
using (HttpResponseMessage response = await client.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead))
1622
{
1723
response.EnsureSuccessStatusCode();
1824

1925
using (HttpContent content = response.Content)
2026
{
21-
var mediaType = content.Headers.ContentType.MediaType?.ToLowerInvariant().Trim();
27+
var mediaType = content.Headers.ContentType?.MediaType?.ToLowerInvariant().Trim();
2228
switch (mediaType)
2329
{
2430
case null:

src/Dotnet.Script.DependencyModel/Context/DotnetRestorer.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,13 @@ public void Restore(ProjectFileInfo projectFileInfo, string[] packageSources)
3131

3232
_logger.Debug($"Restoring {projectFileInfo.Path} using the dotnet cli. RuntimeIdentifier : {runtimeIdentifier} NugetConfigFile: {projectFileInfo.NuGetConfigFile}");
3333

34-
var exitcode = _commandRunner.Execute("dotnet", $"restore \"{projectFileInfo.Path}\" -r {runtimeIdentifier} {packageSourcesArgument} {configFileArgument}", workingDirectory);
35-
if (exitcode != 0)
34+
var commandPath = "dotnet";
35+
var commandArguments = $"restore \"{projectFileInfo.Path}\" -r {runtimeIdentifier} {packageSourcesArgument} {configFileArgument}";
36+
var commandResult = _commandRunner.Capture(commandPath, commandArguments, workingDirectory);
37+
if (commandResult.ExitCode != 0)
3638
{
3739
// We must throw here, otherwise we may incorrectly run with the old 'project.assets.json'
38-
throw new Exception($"Unable to restore packages from '{projectFileInfo.Path}'. Make sure that all script files contains valid NuGet references");
40+
throw new Exception($"Unable to restore packages from '{projectFileInfo.Path}'{System.Environment.NewLine}Make sure that all script files contains valid NuGet references{System.Environment.NewLine}{System.Environment.NewLine}Details:{System.Environment.NewLine}{workingDirectory} : {commandPath} {commandArguments}{System.Environment.NewLine}{commandResult.StandardOut}");
3941
}
4042

4143
string CreatePackageSourcesArguments()
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
using Dotnet.Script.DependencyModel.Context;
2+
using Dotnet.Script.DependencyModel.Process;
3+
using Dotnet.Script.DependencyModel.ProjectSystem;
4+
using Dotnet.Script.Shared.Tests;
5+
using System;
6+
using System.IO;
7+
using Xunit;
8+
using Xunit.Abstractions;
9+
10+
namespace Dotnet.Script.Tests
11+
{
12+
public class DotnetRestorerTests
13+
{
14+
private PackageReference ValidPackageReferenceA => new PackageReference("Newtonsoft.Json", "12.0.3");
15+
private PackageReference ValidPackageReferenceB => new PackageReference("Moq", "4.14.5");
16+
17+
private PackageReference InvalidPackageReferenceA => new PackageReference("7c63e1f5-2248-ed31-9480-e4cb5ac322fe", "1.0.0");
18+
19+
public DotnetRestorerTests(ITestOutputHelper testOutputHelper)
20+
{
21+
testOutputHelper.Capture();
22+
}
23+
24+
[Fact]
25+
public void ShouldRestoreProjectPackageReferences()
26+
{
27+
using (var projectFolder = new DisposableFolder())
28+
{
29+
var pathToProjectFile = Path.Combine(projectFolder.Path, "script.csproj");
30+
31+
var projectFile = new ProjectFile();
32+
projectFile.PackageReferences.Add(ValidPackageReferenceA);
33+
projectFile.PackageReferences.Add(ValidPackageReferenceB);
34+
projectFile.Save(pathToProjectFile);
35+
36+
var projectFileInfo = new ProjectFileInfo(pathToProjectFile, string.Empty);
37+
38+
var logFactory = TestOutputHelper.CreateTestLogFactory();
39+
var commandRunner = new CommandRunner(logFactory);
40+
var restorer = new DotnetRestorer(commandRunner, logFactory);
41+
42+
var pathToProjectObjDirectory = Path.Combine(projectFolder.Path, "obj");
43+
44+
Assert.False(Directory.Exists(pathToProjectObjDirectory));
45+
46+
restorer.Restore(projectFileInfo, Array.Empty<string>());
47+
48+
Assert.True(Directory.Exists(pathToProjectObjDirectory));
49+
}
50+
}
51+
52+
[Fact]
53+
public void ShouldThrowExceptionOnRestoreError()
54+
{
55+
using (var projectFolder = new DisposableFolder())
56+
{
57+
var pathToProjectFile = Path.Combine(projectFolder.Path, "script.csproj");
58+
59+
var projectFile = new ProjectFile();
60+
projectFile.PackageReferences.Add(ValidPackageReferenceA);
61+
projectFile.PackageReferences.Add(InvalidPackageReferenceA);
62+
projectFile.PackageReferences.Add(ValidPackageReferenceB);
63+
projectFile.Save(pathToProjectFile);
64+
65+
var projectFileInfo = new ProjectFileInfo(pathToProjectFile, string.Empty);
66+
67+
var logFactory = TestOutputHelper.CreateTestLogFactory();
68+
var commandRunner = new CommandRunner(logFactory);
69+
var restorer = new DotnetRestorer(commandRunner, logFactory);
70+
71+
var exception = Assert.Throws<Exception>(() =>
72+
{
73+
restorer.Restore(projectFileInfo, Array.Empty<string>());
74+
});
75+
76+
Assert.Contains("NU1101", exception.Message); // unable to find package
77+
}
78+
}
79+
}
80+
}

0 commit comments

Comments
 (0)