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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy