Skip to content

Commit 0c75cf3

Browse files
authored
Merge pull request #26 from nexB/add-top-level-deps
Add top level deps
2 parents b4c167f + d41df19 commit 0c75cf3

File tree

314 files changed

+326356
-107
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

314 files changed

+326356
-107
lines changed

build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ dotnet publish \
1717
--runtime linux-x64 \
1818
--self-contained true \
1919
--configuration Release \
20-
-p:Version=0.9.5 \
20+
-p:Version=0.9.6-beta1 \
2121
--output build \
2222
src/nuget-inspector/nuget-inspector.csproj

release.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
rm -rf release/
1717
mkdir release
1818

19-
VERSION=0.9.5
19+
VERSION=0.9.6-beta1
2020

2121
TARGET_BASE=nuget-inspector-$(git describe)
2222

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[bumpversion]
22
commit = False
33
tag = False
4-
current_version = 0.9.5
4+
current_version = 0.9.6-beta1
55
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\-(?P<release>[a-z]+))?
66
serialize =
77
{major}.{minor}.{patch}-{release}

src/nuget-inspector/Config.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ public static class Config
66
public static bool TRACE_NET = false;
77
public static bool TRACE_DEEP = false;
88
public static bool TRACE_META = false;
9-
public static string NUGET_INSPECTOR_VERSION = "0.9.5";
9+
public static string NUGET_INSPECTOR_VERSION = "0.9.6-beta1";
1010
}

src/nuget-inspector/Models.cs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,52 @@ public static BasePackage FromBasePackage(BasePackage package, List<BasePackage>
204204
};
205205
}
206206

207+
///<summary>
208+
/// Return a deep clone of this package. Does not clone dependencies.
209+
///</summary>
210+
public BasePackage Clone()
211+
{
212+
return new BasePackage(
213+
name: name,
214+
version:version,
215+
datafile_path: datafile_path
216+
)
217+
{
218+
type = type,
219+
namespace_ = namespace_,
220+
221+
qualifiers = qualifiers,
222+
subpath = subpath,
223+
purl = purl,
224+
primary_language = primary_language,
225+
description = description,
226+
release_date = release_date,
227+
parties = new List<Party>(parties.Select(p => p.Clone())),
228+
keywords = new List<string>(keywords),
229+
homepage_url = homepage_url,
230+
download_url = download_url,
231+
size = size,
232+
sha1 = sha1,
233+
md5 = md5,
234+
sha256 = sha256,
235+
sha512 = sha512,
236+
bug_tracking_url = bug_tracking_url,
237+
code_view_url = code_view_url,
238+
vcs_url = vcs_url,
239+
copyright = copyright,
240+
license_expression = license_expression,
241+
declared_license = declared_license,
242+
notice_text = notice_text,
243+
source_packages = new List<string>(source_packages),
244+
repository_homepage_url = repository_homepage_url,
245+
repository_download_url = repository_download_url,
246+
api_data_url = api_data_url,
247+
datasource_id = datasource_id,
248+
249+
extra_data = new Dictionary<string, string>(extra_data),
250+
};
251+
}
252+
207253
protected bool Equals(BasePackage other)
208254
{
209255
return
@@ -426,8 +472,21 @@ public class Party
426472
public string? name { get; set; } = "";
427473
public string? email { get; set; } = "";
428474
public string? url { get; set; } = "";
475+
476+
public Party Clone()
477+
{
478+
return new Party(){
479+
type=type,
480+
role=role,
481+
name=name,
482+
email=email,
483+
url=url
484+
};
485+
}
429486
}
430487

488+
489+
431490
// TODO: unused
432491
public class DependentPackage
433492
{

src/nuget-inspector/OutputFormatJson.cs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ public class ScanOutput
3636

3737
[JsonProperty(propertyName: "packages")]
3838
public List<BasePackage> Packages { get; set; } = new();
39+
40+
[JsonProperty(propertyName: "dependencies")]
41+
public List<BasePackage> Dependencies { get; set; } = new();
42+
3943
}
4044

4145
internal class OutputFormatJson
@@ -49,13 +53,44 @@ public OutputFormatJson(ScanResult result)
4953
Result = result;
5054
scan_output = new ScanOutput
5155
{
52-
Packages = result.Packages!
56+
Packages = result.Packages
5357
};
5458
ScanHeader scan_header = new(result.Options!)
5559
{
5660
project_framework = result.Options!.ProjectFramework!
5761
};
5862
scan_output.Headers.Add(scan_header);
63+
scan_output.Dependencies = GetDependencies(result.Packages);
64+
}
65+
66+
/// <summary>
67+
/// Return a flat list of dependencies collected from a list of top-level packages.
68+
/// </summary>
69+
public static List<BasePackage> GetDependencies(List<BasePackage> packages)
70+
{
71+
var flat_deps = new List<BasePackage>();
72+
foreach (var package in packages)
73+
{
74+
flat_deps.AddRange(FlattenDeps(package.dependencies));
75+
}
76+
flat_deps.Sort();
77+
return flat_deps;
78+
}
79+
80+
/// <summary>
81+
/// Flatten recursively a tree of dependencies. Remove subdeps as the flattening goes.
82+
/// </summary>
83+
public static List<BasePackage> FlattenDeps(List<BasePackage> dependencies)
84+
{
85+
List<BasePackage> flattened = new();
86+
List<BasePackage> depdeps;
87+
foreach (var dep in dependencies)
88+
{
89+
depdeps = dep.dependencies;
90+
flattened.Add(dep.Clone());
91+
flattened.AddRange(FlattenDeps(depdeps));
92+
}
93+
return flattened;
5994
}
6095

6196
public void Write()

src/nuget-inspector/ProjectFileProcessor.cs

Lines changed: 47 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using Microsoft.Build.Evaluation;
2-
using Microsoft.Build.Exceptions;
2+
//using NuGet.Build.Tasks.Console;
3+
using NuGet.Common;
34
using NuGet.Frameworks;
5+
using NuGet.LibraryModel;
46
using NuGet.PackageManagement;
57
using NuGet.Packaging;
68
using NuGet.Packaging.Core;
@@ -66,6 +68,27 @@ public List<Dependency> GetDependenciesFromReferences(List<PackageReference> ref
6668
return dependencies;
6769
}
6870

71+
/// <summary>
72+
/// Copied from NuGet.Client/src/NuGet.Core/NuGet.Build.Tasks.Console/MSBuildStaticGraphRestore.cs
73+
/// Copyright (c) .NET Foundation. All rights reserved.
74+
/// Licensed under the Apache License, Version 2.0.
75+
/// Gets the <see cref="LibraryIncludeFlags" /> for the specified value.
76+
/// </summary>
77+
/// <param name="value">A semicolon delimited list of include flags.</param>
78+
/// <param name="defaultValue">The default value ot return if the value contains no flags.</param>
79+
/// <returns>The <see cref="LibraryIncludeFlags" /> for the specified value, otherwise the <paramref name="defaultValue" />.</returns>
80+
private static LibraryIncludeFlags GetLibraryIncludeFlags(string value, LibraryIncludeFlags defaultValue)
81+
{
82+
if (string.IsNullOrWhiteSpace(value))
83+
{
84+
return defaultValue;
85+
}
86+
87+
string[] parts = MSBuildStringUtility.Split(value);
88+
89+
return parts.Length > 0 ? LibraryIncludeFlagUtils.GetFlags(parts) : defaultValue;
90+
}
91+
6992
/// <summary>
7093
/// Return a list of PackageReference extracted from the project file
7194
/// using a project model.
@@ -87,22 +110,32 @@ public List<PackageReference> GetPackageReferences()
87110
globalProperties: properties,
88111
toolsVersion: null);
89112

90-
foreach (ProjectItem? reference in project.GetItems(itemType: "PackageReference"))
113+
foreach (ProjectItem reference in project.GetItems(itemType: "PackageReference"))
91114
{
92-
if (reference == null)
93-
continue;
94115
if (Config.TRACE)
95116
{
96117
Console.WriteLine($" Project reference: EvaluatedInclude: {reference.EvaluatedInclude}");
97118
foreach (var meta in reference.Metadata)
98119
{
99120
Console.WriteLine($" Metadata: name: '{meta.Name}' value: '{meta.EvaluatedValue}'");
100121
}
101-
foreach (var dmeta in reference.DirectMetadata)
102-
{
103-
Console.WriteLine($" DirectMetadata: name: '{dmeta.Name}' value: '{dmeta.EvaluatedValue}'");
104-
}
105122
}
123+
// var IncludeAssets = reference.Metadata.FirstOrDefault(predicate: meta => meta.Name == "IncludeAssets");
124+
// var IncludeType? = null;
125+
// if (IncludeAssets is not null)
126+
// IncludeType = GetLibraryIncludeFlags(IncludeAssets.EvaluatedValue, LibraryIncludeFlags.All);
127+
128+
// var IncludeType = GetLibraryIncludeFlags(
129+
// reference.GetProperty("IncludeAssets"),
130+
// LibraryIncludeFlags.All) & ~GetLibraryIncludeFlags(
131+
// reference.GetProperty("ExcludeAssets"),
132+
// LibraryIncludeFlags.None),
133+
// LibraryRange = new LibraryRange(
134+
// packageReferenceItem.Identity,
135+
// string.IsNullOrWhiteSpace(version) ? isCentralPackageVersionManagementEnabled ? null : VersionRange.All : VersionRange.Parse(version),
136+
// LibraryDependencyTarget.Package),
137+
// NoWarn = MSBuildStringUtility.GetNuGetLogCodes(packageReferenceItem.GetProperty("NoWarn")).ToList(),
138+
// SuppressParent = GetLibraryIncludeFlags(packageReferenceItem.GetProperty("PrivateAssets"), LibraryIncludeFlagUtils.DefaultSuppressParent),
106139

107140
var version_metadata = reference.Metadata.FirstOrDefault(predicate: meta => meta.Name == "Version");
108141
VersionRange? version_range;
@@ -481,9 +514,12 @@ private List<PackageIdentity> CollectDirectDeps(List<Dependency> dependencies)
481514
/// </summary>
482515
internal class ProjectXmlFileProcessor : ProjectFileProcessor
483516
{
484-
new public const string DatasourceId = "dotnet-project-xml";
517+
public new const string DatasourceId = "dotnet-project-xml";
485518

486-
public ProjectXmlFileProcessor(string projectPath, NugetApi nugetApi, NuGetFramework? project_target_framework) : base(projectPath, nugetApi, project_target_framework)
519+
public ProjectXmlFileProcessor(
520+
string projectPath,
521+
NugetApi nugetApi,
522+
NuGetFramework? project_target_framework) : base(projectPath, nugetApi, project_target_framework)
487523
{
488524
}
489525

@@ -493,7 +529,7 @@ public ProjectXmlFileProcessor(string projectPath, NugetApi nugetApi, NuGetFrame
493529
/// breadth of attributes as with an MSBuild-based parsing. In particular
494530
/// this does not handle frameworks and conditions. /// using a project model.
495531
/// </summary>
496-
new public List<PackageReference> GetPackageReferences()
532+
public new List<PackageReference> GetPackageReferences()
497533
{
498534
if (Config.TRACE)
499535
Console.WriteLine($"ProjectXmlFileProcessor.GetPackageReferences: ProjectPath {ProjectPath}");

src/nuget-inspector/ProjectScanner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ public void FetchMetadata(ScanResult scan_result)
291291
}
292292
else
293293
{
294-
// In the case of older proj file we process the bare XML as a last resort option
294+
// In the case of older proj file we process the bare XML as a last resort option
295295
if (Config.TRACE){
296296
Console.WriteLine($"Failed to use ProjectFileProcessor: {dependency_resolution.ErrorMessage}");
297297
Console.WriteLine("Using Fallback ProjectXmlFileProcessor reader and resolver.");

src/nuget-inspector/nuget-inspector.csproj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@
2323
<PackageId>nuget-inspector</PackageId>
2424
<Product>nuget-inspector</Product>
2525
<AssemblyName>nuget-inspector</AssemblyName>
26-
<Version>0.9.5</Version>
26+
<Version>0.9.6-beta1</Version>
2727
<Authors>nexB Inc.</Authors>
2828
<Company>nexB Inc</Company>
29-
<AssemblyVersion>0.9.5.0</AssemblyVersion>
30-
<FileVersion>0.9.5.0</FileVersion>
29+
<AssemblyVersion>0.9.6.1</AssemblyVersion>
30+
<FileVersion>0.9.6.1</FileVersion>
3131
<Description>A NuGet and Dotnet package dependency resolver</Description>
3232
<PackageProjectUrl>https://github.com/nexB/nuget-inspector</PackageProjectUrl>
3333
<PackageLicenseUrl>Apache-2.0 AND MIT</PackageLicenseUrl>
@@ -43,6 +43,7 @@
4343
<PackageReference Include="Mono.Options" Version="6.12.0.148" />
4444
<PackageReference Include="NuGet.Common" Version="6.4.0" />
4545
<PackageReference Include="NuGet.Configuration" Version="6.4.0" />
46+
<PackageReference Include="NuGet.Build.Tasks.Console" Version="6.4.0" />
4647
<PackageReference Include="NuGet.Frameworks" Version="6.4.0" />
4748
<PackageReference Include="NuGet.LibraryModel" Version="6.4.0" />
4849
<PackageReference Include="NuGet.PackageManagement" Version="6.4.0" />

0 commit comments

Comments
 (0)