Skip to content

Commit 121dfcb

Browse files
authored
Merge pull request #43 from nexB/filter-duplicated-deps
Filter duplicated deps
2 parents 2fa4516 + 50ab0a4 commit 121dfcb

File tree

112 files changed

+79407
-252413
lines changed

Some content is hidden

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

112 files changed

+79407
-252413
lines changed

CHANGELOG.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
Changelog
22
=========
33

4+
v0.9.12
5+
--------
6+
7+
This is a minor bug fix release with this fix:
8+
9+
* Improve filtering of duplicated dependency names.
10+
11+
412
v0.9.11
513
--------
614

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ RUN mkdir -p $NI_DOTNET_HOME \
3131
&& curl --location https://aka.ms/dotnet/6.0/dotnet-sdk-linux-x64.tar.gz \
3232
| tar -C $NI_DOTNET_HOME -xz
3333

34-
ARG NI_VERSION=0.9.11
34+
ARG NI_VERSION=0.9.12
3535
RUN mkdir -p $NI_HOME \
3636
&& curl -L https://github.com/nexB/nuget-inspector/releases/download/v${NI_VERSION}/nuget-inspector-v${NI_VERSION}-linux-x64.tar.gz \
3737
| tar --strip-components=1 -C $NI_HOME -xz

Dockerfile.ubuntu18

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ RUN mkdir -p $NI_DOTNET_HOME \
2828
&& curl --location https://aka.ms/dotnet/6.0/dotnet-sdk-linux-x64.tar.gz \
2929
| tar -C $NI_DOTNET_HOME -xz
3030

31-
# ARG NI_VERSION=0.9.11
31+
# ARG NI_VERSION=0.9.12
3232
# RUN mkdir -p $NI_HOME \
3333
# && curl -L https://github.com/nexB/nuget-inspector/releases/download/v${NI_VERSION}/nuget-inspector-v${NI_VERSION}-linux-x64.tar.gz \
3434
# | tar --strip-components=1 -C $NI_HOME -xz

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.11 \
20+
-p:Version=0.9.12 \
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.11
19+
VERSION=0.9.12
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.11
4+
current_version = 0.9.12
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
@@ -9,6 +9,6 @@ public static class Config
99
public static bool TRACE_DEEP = false;
1010
public static bool TRACE_META = false;
1111
public static bool TRACE_OUTPUT = false;
12-
public const string NUGET_INSPECTOR_VERSION = "0.9.11";
12+
public const string NUGET_INSPECTOR_VERSION = "0.9.12";
1313
#pragma warning restore CA2211
1414
}

src/nuget-inspector/Models.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,23 @@ public class Dependency
1414
public string? name;
1515
public NuGetFramework? framework;
1616
public VersionRange? version_range;
17-
public bool is_direct;
17+
public bool is_direct;
1818

19-
public Dependency(string? name, VersionRange? version_range, NuGetFramework? framework = null, bool is_direct = false)
19+
//True only for legacy packages.config-based projects only when set there
20+
public bool is_development_dependency = false;
21+
22+
public Dependency(
23+
string? name,
24+
VersionRange? version_range,
25+
NuGetFramework? framework = null,
26+
bool is_direct = false,
27+
bool is_development_dependency = false)
2028
{
2129
this.framework = framework;
2230
this.name = name;
2331
this.version_range = version_range;
2432
this.is_direct = is_direct;
33+
this.is_development_dependency = is_development_dependency;
2534
}
2635
/// <summary>
2736
/// Return a new empty BasePackageWithDeps using this package.

src/nuget-inspector/NugetApi.cs

Lines changed: 81 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,11 @@ private List<PackageSearchMetadataRegistration> FindPackageVersionsThroughCache(
121121
public PackageSearchMetadataRegistration? FindPackageVersion(PackageIdentity pid)
122122
{
123123
if (Config.TRACE)
124-
Console.WriteLine($"Fetching package metadata for: {pid}");
124+
Console.WriteLine($" Fetching package metadata for: {pid}");
125125

126126
if (psmr_by_identity.TryGetValue(key: pid, out PackageSearchMetadataRegistration? psmr))
127127
{
128-
if (Config.TRACE)
128+
if (Config.TRACE_META)
129129
Console.WriteLine($" Metadata Cache hit for '{pid}'");
130130
return psmr;
131131
}
@@ -145,7 +145,7 @@ private List<PackageSearchMetadataRegistration> FindPackageVersionsThroughCache(
145145

146146
if (psmr != null)
147147
{
148-
if (Config.TRACE)
148+
if (Config.TRACE_META)
149149
Console.WriteLine($" Found metadata for '{pid}' from: {metadata_resource}");
150150
psmr_by_identity[pid] = psmr;
151151
return psmr;
@@ -400,7 +400,7 @@ public IEnumerable<PackageDependency> GetPackageDependenciesForPackage(PackageId
400400
return spdi;
401401
}
402402

403-
if (Config.TRACE)
403+
if (Config.TRACE_META)
404404
Console.WriteLine($" GetPackageInfo: {identity} framework: {framework}");
405405

406406
foreach (var dir in dependency_info_resources)
@@ -416,7 +416,7 @@ public IEnumerable<PackageDependency> GetPackageDependenciesForPackage(PackageId
416416

417417
spdi = infoTask.Result;
418418

419-
if (Config.TRACE && spdi != null)
419+
if (Config.TRACE_META && spdi != null)
420420
Console.WriteLine($" Found download URL: {spdi.DownloadUri} hash: {spdi.PackageHash}");
421421

422422
if (spdi != null)
@@ -506,8 +506,8 @@ public IEnumerable<PackageDependency> GetPackageDependenciesForPackage(PackageId
506506
var spdi = GetResolvedSourcePackageDependencyInfo(
507507
identity: identity,
508508
framework: project_framework);
509-
if (Config.TRACE)
510-
Console.WriteLine($" Info available for package '{spdi}'");
509+
if (Config.TRACE_DEEP)
510+
Console.WriteLine($" Info available for package '{spdi}'");
511511

512512
if (spdi != null)
513513
{
@@ -720,8 +720,9 @@ public HashSet<SourcePackageDependencyInfo> ResolveDependenciesForPackageReferen
720720
var walk_context = new RemoteWalkContext(
721721
cacheContext: source_cache_context,
722722
packageSourceMapping: psm,
723-
logger: nuget_logger);
724-
723+
logger: nuget_logger){
724+
IsMsBuildBased = true
725+
};
725726
var packages = new List<PackageId>();
726727
foreach (var targetref in target_references)
727728
{
@@ -750,8 +751,8 @@ public HashSet<SourcePackageDependencyInfo> ResolveDependenciesForPackageReferen
750751
walk_context.RemoteLibraryProviders.Add(provider);
751752
}
752753

753-
// We need a fake root lib as there is only one allowed input
754-
// This represents the project
754+
// We need a fake root lib as there is only one allowed input to walk
755+
// the dependencies: This represents the project
755756
var rootlib = new LibraryRange(
756757
name: "root_project",
757758
versionRange: VersionRange.Parse("1.0.0"),
@@ -762,23 +763,71 @@ public HashSet<SourcePackageDependencyInfo> ResolveDependenciesForPackageReferen
762763
var results = walker.WalkAsync(
763764
library: rootlib,
764765
framework: project_framework,
766+
// TODO: add eventual support for runtime id
767+
// https://learn.microsoft.com/en-us/dotnet/core/rid-catalog
765768
runtimeIdentifier: null,
766-
runtimeGraph: RuntimeGraph.Empty,
769+
runtimeGraph: null, //RuntimeGraph.Empty,
767770
recursive: true);
768-
var resolved_graph = results.Result;
771+
GraphNode<RemoteResolveResult> resolved_graph = results.Result;
769772
CheckGraphForErrors(resolved_graph);
770773

774+
RestoreTargetGraph rg = RestoreTargetGraph.Create(
775+
graphs: new List<GraphNode<RemoteResolveResult>>() { resolved_graph },
776+
context: walk_context,
777+
logger: nuget_logger,
778+
framework: project_framework
779+
);
780+
771781
var resolved_package_info_by_package_id = new Dictionary<PackageId, ResolvedPackageInfo>();
772782

773-
// we iterate only inner nodes, because we have only one outer node: the "fake" root project
774-
foreach (GraphNode<RemoteResolveResult> inner in resolved_graph.InnerNodes)
783+
if (Config.TRACE)
784+
Console.WriteLine(" RestoreTargetGraph");
785+
786+
if (rg.Flattened != null)
775787
{
776-
if (Config.TRACE_DEEP)
777-
Console.WriteLine($" Resolved direct dependency: {inner.Item.Key.Name}@{inner.Item.Key.Version}");
788+
var flats = new List<GraphItem<RemoteResolveResult>>(rg.Flattened);
789+
flats.Sort((x,y) => x.Data.Match.Library.CompareTo(y.Data.Match.Library));
790+
791+
foreach (var item in flats)
792+
{
793+
LibraryIdentity lib = item.Key;
794+
if (lib.Type != "package")
795+
continue;
796+
797+
798+
string name = lib.Name;
799+
string version = lib.Version.ToNormalizedString();
800+
bool is_prerelease = lib.Version.IsPrerelease;
778801

779-
FlattenGraph(inner, resolved_package_info_by_package_id);
802+
RemoteMatch remote_match= item.Data.Match;
803+
804+
var deps = item.Data.Dependencies;
805+
var pid = new PackageId(id: name, version: version, allow_prerelease_versions: is_prerelease);
806+
var rpi = new ResolvedPackageInfo() {
807+
package_id= pid,
808+
remote_match= remote_match
809+
};
810+
resolved_package_info_by_package_id[pid] = rpi;
811+
if (Config.TRACE)
812+
{
813+
Console.WriteLine($" {lib}");
814+
foreach (var dep in deps)
815+
{
816+
Console.WriteLine($" {lib.Type}/{dep.Name}@{dep.LibraryRange} autoref: {dep.AutoReferenced}");
817+
}
818+
}
819+
}
780820
}
781821

822+
// we iterate only inner nodes, because we have only one outer node: the "fake" root project
823+
// foreach (GraphNode<RemoteResolveResult> inner in resolved_graph.InnerNodes)
824+
// {
825+
// if (Config.TRACE_DEEP)
826+
// Console.WriteLine($"\n Resolved direct dependency: {inner.Item.Key.Name}@{inner.Item.Key.Version}");
827+
828+
// FlattenGraph(inner, resolved_package_info_by_package_id);
829+
// }
830+
782831
HashSet<SourcePackageDependencyInfo> flat_dependencies = new();
783832
foreach (KeyValuePair<PackageId, ResolvedPackageInfo> item in resolved_package_info_by_package_id)
784833
{
@@ -803,7 +852,7 @@ public HashSet<SourcePackageDependencyInfo> ResolveDependenciesForPackageReferen
803852
}
804853

805854
/// <summary>
806-
/// Flatten the graph and populate the result a mapping recursively
855+
/// Flatten the graph and populate the result mapping recursively
807856
/// </summary>
808857
public static void FlattenGraph(
809858
GraphNode<RemoteResolveResult> node,
@@ -831,8 +880,18 @@ public static void FlattenGraph(
831880
string name = key.Name;
832881
string version = key.Version.ToNormalizedString();
833882
bool isPrerelease = key.Version.IsPrerelease;
883+
884+
RemoteMatch remote_match = item.Data.Match;
885+
834886
if (Config.TRACE_DEEP)
835-
Console.WriteLine($" FlattenGraph: node.Item {node.Item} LibraryId: {key}");
887+
{
888+
Console.WriteLine($"\n FlattenGraph: node.Item {node.Item} type: {node.GetType()} LibraryId: {key} LibraryIdType: {key.Type}");
889+
Console.WriteLine($" remote_match: {remote_match} path: {remote_match.Path} type: {remote_match.Library}");
890+
foreach (var idd in item.Data.Dependencies)
891+
{
892+
Console.WriteLine($" Dependency: {idd} AutoReferenced: {idd.AutoReferenced} ");
893+
}
894+
}
836895

837896
var pid = new PackageId(
838897
id: name,
@@ -842,11 +901,11 @@ public static void FlattenGraph(
842901
var resolved_package_info = new ResolvedPackageInfo
843902
{
844903
package_id = pid,
845-
remote_match = (RemoteMatch?)item.Data.Match
904+
remote_match = item.Data.Match
846905
};
847906

848907
if (Config.TRACE_DEEP)
849-
Console.WriteLine($" FlattenGraph: {pid} Library: {item.Data.Match.Library}");
908+
Console.WriteLine($" FlattenGraph: {pid} Library: {item.Data.Match.Library}");
850909

851910
if (!resolved_package_info_by_package_id.ContainsKey(resolved_package_info.package_id))
852911
resolved_package_info_by_package_id.Add(resolved_package_info.package_id, resolved_package_info);

src/nuget-inspector/NugetResolverHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ public void ResolveOne(Dependency dependency)
7474
var resolved_version = package_tree.GetResolvedVersion(name: pkg.Id, range: pkg.VersionRange);
7575
if (resolved_version != null)
7676
{
77-
var id = new BasePackage(name: pkg.Id, version: resolved_version);
78-
dependencies.Add(item: id);
77+
var base_pkg = new BasePackage(name: pkg.Id, version: resolved_version);
78+
dependencies.Add(item: base_pkg);
7979
if (Config.TRACE)
8080
Console.WriteLine($" dependencies.Add name: {pkg.Id}, version: {resolved_version}");
8181
}

0 commit comments

Comments
 (0)