mirror of
https://github.com/github/codeql.git
synced 2025-12-18 01:33:15 +01:00
C#: Some re-factoring of NugetPackages and logic for file downloading.
This commit is contained in:
@@ -1,13 +1,11 @@
|
|||||||
using Semmle.Util;
|
using System;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
|
||||||
using System.Xml;
|
|
||||||
using System.Net.Http;
|
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Threading.Tasks;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Xml;
|
||||||
|
using Semmle.Util;
|
||||||
|
|
||||||
namespace Semmle.Autobuild.Shared
|
namespace Semmle.Autobuild.Shared
|
||||||
{
|
{
|
||||||
@@ -283,17 +281,8 @@ namespace Semmle.Autobuild.Shared
|
|||||||
|
|
||||||
public string EnvironmentExpandEnvironmentVariables(string s) => Environment.ExpandEnvironmentVariables(s);
|
public string EnvironmentExpandEnvironmentVariables(string s) => Environment.ExpandEnvironmentVariables(s);
|
||||||
|
|
||||||
private static async Task DownloadFileAsync(string address, string filename)
|
|
||||||
{
|
|
||||||
using var httpClient = new HttpClient();
|
|
||||||
using var request = new HttpRequestMessage(HttpMethod.Get, address);
|
|
||||||
using var contentStream = await (await httpClient.SendAsync(request)).Content.ReadAsStreamAsync();
|
|
||||||
using var stream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None, 4096, true);
|
|
||||||
await contentStream.CopyToAsync(stream);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DownloadFile(string address, string fileName) =>
|
public void DownloadFile(string address, string fileName) =>
|
||||||
DownloadFileAsync(address, fileName).Wait();
|
FileUtils.DownloadFile(address, fileName);
|
||||||
|
|
||||||
public IDiagnosticsWriter CreateDiagnosticsWriter(string filename) => new DiagnosticsStream(filename);
|
public IDiagnosticsWriter CreateDiagnosticsWriter(string filename) => new DiagnosticsStream(filename);
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,26 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
internal class NugetPackages
|
internal class NugetPackages
|
||||||
{
|
{
|
||||||
|
private readonly string nugetExe;
|
||||||
|
private readonly ProgressMonitor progressMonitor;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The list of package files.
|
||||||
|
/// </summary>
|
||||||
|
public FileInfo[] PackageFiles { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The source directory used.
|
||||||
|
/// </summary>
|
||||||
|
public string SourceDirectory { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The computed packages directory.
|
||||||
|
/// This will be in the Temp location
|
||||||
|
/// so as to not trample the source tree.
|
||||||
|
/// </summary>
|
||||||
|
public TemporaryDirectory PackageDirectory { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create the package manager for a specified source tree.
|
/// Create the package manager for a specified source tree.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -32,47 +52,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
|||||||
if (!File.Exists(nugetExe))
|
if (!File.Exists(nugetExe))
|
||||||
throw new FileNotFoundException(string.Format("NuGet could not be found at {0}", nugetExe));
|
throw new FileNotFoundException(string.Format("NuGet could not be found at {0}", nugetExe));
|
||||||
|
|
||||||
packages = new DirectoryInfo(SourceDirectory)
|
PackageFiles = new DirectoryInfo(SourceDirectory)
|
||||||
.EnumerateFiles("packages.config", SearchOption.AllDirectories)
|
.EnumerateFiles("packages.config", SearchOption.AllDirectories)
|
||||||
.ToArray();
|
.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
// List of package files to download.
|
|
||||||
private readonly FileInfo[] packages;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The list of package files.
|
|
||||||
/// </summary>
|
|
||||||
public IEnumerable<FileInfo> PackageFiles => packages;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Download the packages to the temp folder.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pm">The progress monitor used for reporting errors etc.</param>
|
|
||||||
public void InstallPackages()
|
|
||||||
{
|
|
||||||
foreach (var package in packages)
|
|
||||||
{
|
|
||||||
RestoreNugetPackage(package.FullName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The source directory used.
|
|
||||||
/// </summary>
|
|
||||||
public string SourceDirectory
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
private set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The computed packages directory.
|
|
||||||
/// This will be in the Temp location
|
|
||||||
/// so as to not trample the source tree.
|
|
||||||
/// </summary>
|
|
||||||
public TemporaryDirectory PackageDirectory { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Restore all files in a specified package.
|
/// Restore all files in a specified package.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -133,7 +117,16 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly string nugetExe;
|
/// <summary>
|
||||||
private readonly ProgressMonitor progressMonitor;
|
/// Download the packages to the temp folder.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="pm">The progress monitor used for reporting errors etc.</param>
|
||||||
|
public void InstallPackages()
|
||||||
|
{
|
||||||
|
foreach (var package in PackageFiles)
|
||||||
|
{
|
||||||
|
RestoreNugetPackage(package.FullName);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net.Http;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Semmle.Util
|
namespace Semmle.Util
|
||||||
{
|
{
|
||||||
@@ -91,5 +93,20 @@ namespace Semmle.Util
|
|||||||
hex.AppendFormat("{0:x2}", b);
|
hex.AppendFormat("{0:x2}", b);
|
||||||
return hex.ToString();
|
return hex.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static async Task DownloadFileAsync(string address, string filename)
|
||||||
|
{
|
||||||
|
using var httpClient = new HttpClient();
|
||||||
|
using var request = new HttpRequestMessage(HttpMethod.Get, address);
|
||||||
|
using var contentStream = await (await httpClient.SendAsync(request)).Content.ReadAsStreamAsync();
|
||||||
|
using var stream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None, 4096, true);
|
||||||
|
await contentStream.CopyToAsync(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Downloads the file at <paramref name="address"/> to <paramref name="fileName"/>.
|
||||||
|
/// </summary>
|
||||||
|
public static void DownloadFile(string address, string fileName) =>
|
||||||
|
DownloadFileAsync(address, fileName).Wait();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user