Skip to content

Commit 29be086

Browse files
committed
Porting fixes from previous branch. Adding ability to only scan external nuget packages
Signed-off-by: Joseph Cutrono <[email protected]>
1 parent 863cf89 commit 29be086

File tree

9 files changed

+108
-50
lines changed

9 files changed

+108
-50
lines changed

src/nuget-inspector/LockFileHelper.cs

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,21 @@ public DependencyResolution Process()
6767
{
6868
var tree_builder = new PackageTree();
6969
var resolution = new DependencyResolution();
70+
var project_references = ProjectLockFile.Libraries
71+
.Where(l => l.Type.Equals(ComponentType.Project))
72+
.Select(l => l.Name)
73+
.ToList();
7074

7175
foreach (var target in ProjectLockFile.Targets)
7276
{
7377
foreach (var library in target.Libraries)
7478
{
79+
var type = library.Type;
7580
var name = library.Name;
7681
var version = library.Version.ToNormalizedString();
77-
var package = new BasePackage(name: name, version: version);
82+
var package = new BasePackage(name: name, type: type, version: version);
7883
var dependencies = new List<BasePackage>();
84+
7985
foreach (var dependency in library.Dependencies)
8086
{
8187
var dep_name = dependency.Id;
@@ -90,7 +96,10 @@ public DependencyResolution Process()
9096
}
9197
else
9298
{
93-
var depId = new BasePackage(name: dep_name, version: best_version.ToNormalizedString());
99+
var dep_type = project_references.Contains(dep_name)
100+
? ComponentType.Project
101+
: ComponentType.NuGet;
102+
var depId = new BasePackage(name: dep_name, dep_type, version: best_version.ToNormalizedString());
94103
dependencies.Add(item: depId);
95104
}
96105
}
@@ -111,7 +120,10 @@ public DependencyResolution Process()
111120
foreach (var dep in ProjectLockFile.PackageSpec.Dependencies)
112121
{
113122
var version = tree_builder.GetResolvedVersion(name: dep.Name, range: dep.LibraryRange.VersionRange);
114-
resolution.Dependencies.Add(item: new BasePackage(name: dep.Name, version: version));
123+
var dep_type1 = project_references.Contains(dep.Name)
124+
? ComponentType.Project
125+
: ComponentType.NuGet;
126+
resolution.Dependencies.Add(item: new BasePackage(name: dep.Name, dep_type1, version: version));
115127
}
116128
}
117129
else
@@ -128,8 +140,11 @@ public DependencyResolution Process()
128140
{
129141
foreach (var dep in framework.Dependencies)
130142
{
143+
var dep_type1 = project_references.Contains(dep.Name)
144+
? ComponentType.Project
145+
: ComponentType.NuGet;
131146
var version = tree_builder.GetResolvedVersion(name: dep.Name, range: dep.LibraryRange.VersionRange);
132-
resolution.Dependencies.Add(item: new BasePackage(name: dep.Name, version: version));
147+
resolution.Dependencies.Add(item: new BasePackage(name: dep.Name, dep_type1, version: version));
133148
}
134149
}
135150
}
@@ -152,8 +167,13 @@ public DependencyResolution Process()
152167
version = library_version.ToNormalizedString();
153168
}
154169

155-
resolution.Dependencies.Add(
156-
item: new BasePackage(name: project_dependency.GetName()!, version: version));
170+
var name = project_dependency.GetName()!;
171+
172+
173+
var dep_type1 = project_references.Contains(name)
174+
? ComponentType.Project
175+
: ComponentType.NuGet;
176+
resolution.Dependencies.Add(item: new BasePackage(name: name, dep_type1, version: version));
157177
}
158178
}
159179

src/nuget-inspector/Models.cs

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,30 @@
77
using NuGet.Versioning;
88

99
namespace NugetInspector
10-
{
11-
#pragma warning disable IDE1006
10+
{
11+
#pragma warning disable IDE1006
1212
public class Dependency
1313
{
1414
public string? name;
1515
public NuGetFramework? framework;
1616
public VersionRange? version_range;
17+
public string type;
1718
public bool is_direct;
1819

1920
//True only for legacy packages.config-based projects only when set there
2021
public bool is_development_dependency = false;
2122

2223
public Dependency(
2324
string? name,
25+
string type,
2426
VersionRange? version_range,
2527
NuGetFramework? framework = null,
2628
bool is_direct = false,
2729
bool is_development_dependency = false)
2830
{
2931
this.framework = framework;
3032
this.name = name;
33+
this.type = type;
3134
this.version_range = version_range;
3235
this.is_direct = is_direct;
3336
this.is_development_dependency = is_development_dependency;
@@ -40,6 +43,7 @@ public BasePackage CreateEmptyBasePackage()
4043
{
4144
return new BasePackage(
4245
name: name!,
46+
type: type,
4347
version: version_range?.MinVersion.ToNormalizedString(),
4448
framework: framework?.ToString()
4549
);
@@ -144,6 +148,12 @@ public VersionPair(string rawVersion, NuGetVersion version)
144148
}
145149
}
146150

151+
public static class ComponentType
152+
{
153+
public const string NuGet = "nuget";
154+
public const string Project = "project";
155+
}
156+
147157
/// <summary>
148158
/// Package data object using purl as identifying attributes as
149159
/// specified here https://github.com/package-url/purl-spec
@@ -192,13 +202,14 @@ public class BasePackage : IEquatable<BasePackage>, IComparable<BasePackage>
192202

193203
// Track if we updated this package metadata
194204
[JsonIgnore]
195-
public bool has_updated_metadata;
196-
197-
public BasePackage(){}
205+
public bool has_updated_metadata;
206+
207+
public BasePackage() { }
198208

199-
public BasePackage(string name, string? version, string? framework = "", string? datafile_path = "")
209+
public BasePackage(string name, string type, string? version, string? framework = "", string? datafile_path = "")
200210
{
201211
this.name = name;
212+
this.type = type;
202213
this.version = version;
203214
if (!string.IsNullOrWhiteSpace(framework))
204215
this.version = version;
@@ -210,7 +221,7 @@ public BasePackage(string name, string? version, string? framework = "", string?
210221

211222
public static BasePackage FromPackage(BasePackage package, List<BasePackage> dependencies)
212223
{
213-
return new(name: package.name, version: package.version)
224+
return new(name: package.name, type: package.type, version: package.version)
214225
{
215226
extra_data = package.extra_data,
216227
dependencies = dependencies
@@ -220,13 +231,14 @@ public static BasePackage FromPackage(BasePackage package, List<BasePackage> dep
220231
///<summary>
221232
/// Return a deep clone of this package. Optionally clone dependencies.
222233
///</summary>
223-
public BasePackage Clone(bool with_deps=false)
234+
public BasePackage Clone(bool with_deps = false)
224235
{
225236
List<BasePackage> deps = with_deps ? dependencies : new List<BasePackage>();
226237

227238
return new BasePackage(
228239
name: name,
229-
version:version,
240+
type: type,
241+
version: version,
230242
datafile_path: datafile_path
231243
)
232244
{
@@ -318,7 +330,8 @@ public void Update(NugetApi nugetApi, bool with_details = false)
318330

319331
try
320332
{
321-
UpdateWithRemoteMetadata(nugetApi, with_details: with_details);
333+
if (!type.Equals(ComponentType.Project))
334+
UpdateWithRemoteMetadata(nugetApi, with_details: with_details);
322335
}
323336
catch (Exception ex)
324337
{
@@ -527,7 +540,8 @@ public static string GetApiDataUrl(PackageIdentity pid, SourcePackageDependencyI
527540
/// <summary>
528541
/// Sort recursively the dependencies of this package.
529542
/// </summary>
530-
public void Sort() {
543+
public void Sort()
544+
{
531545
dependencies.Sort();
532546
foreach (var dep in dependencies)
533547
dep.Sort();
@@ -599,12 +613,13 @@ public class Party
599613

600614
public Party Clone()
601615
{
602-
return new Party(){
603-
type=type,
604-
role=role,
605-
name=name,
606-
email=email,
607-
url=url
616+
return new Party()
617+
{
618+
type = type,
619+
role = role,
620+
name = name,
621+
email = email,
622+
url = url
608623
};
609624
}
610625
}
@@ -631,14 +646,15 @@ public class PackageDownload
631646
public string hash { get; set; } = "";
632647
public string hash_algorithm { get; set; } = "";
633648
public int? size { get; set; } = 0;
634-
public bool IsEnhanced(){
649+
public bool IsEnhanced()
650+
{
635651
return !string.IsNullOrWhiteSpace(download_url) && !string.IsNullOrWhiteSpace(hash);
636652
}
637653

638654
public static PackageDownload FromSpdi(SourcePackageDependencyInfo spdi)
639655
{
640-
PackageDownload download = new(){ download_url = spdi.DownloadUri.ToString() };
641-
/// Note that this hash is unlikely there per https://github.com/NuGet/NuGetGallery/issues/9433
656+
PackageDownload download = new() { download_url = spdi.DownloadUri.ToString() };
657+
// Note that this hash is unlikely there per https://github.com/NuGet/NuGetGallery/issues/9433
642658
if (!string.IsNullOrEmpty(spdi.PackageHash))
643659
{
644660
download.hash = spdi.PackageHash;

src/nuget-inspector/NugetResolverHelper.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,13 @@ public void ResolveOne(Dependency dependency)
5656
}
5757

5858
if (dependency.name != null)
59-
package_tree.AddOrUpdatePackage(id: new BasePackage(name: dependency.name, version: version));
59+
package_tree.AddOrUpdatePackage(id: new BasePackage(name: dependency.name, type: dependency.type, version: version));
6060
return;
6161
}
6262

6363
var base_package = new BasePackage(
6464
name: dependency.name!,
65+
type: dependency.type,
6566
version: psmr.Identity.Version.ToNormalizedString());
6667

6768
IEnumerable<NuGet.Packaging.Core.PackageDependency> packages = nugetApi.GetPackageDependenciesForPackage(
@@ -74,7 +75,7 @@ public void ResolveOne(Dependency dependency)
7475
var resolved_version = package_tree.GetResolvedVersion(name: pkg.Id, range: pkg.VersionRange);
7576
if (resolved_version != null)
7677
{
77-
var base_pkg = new BasePackage(name: pkg.Id, version: resolved_version);
78+
var base_pkg = new BasePackage(name: pkg.Id, type: ComponentType.NuGet, version: resolved_version);
7879
dependencies.Add(item: base_pkg);
7980
if (Config.TRACE)
8081
Console.WriteLine($" dependencies.Add name: {pkg.Id}, version: {resolved_version}");
@@ -93,6 +94,7 @@ public void ResolveOne(Dependency dependency)
9394

9495
var dependent_package = new BasePackage(
9596
name: psrm.Identity.Id,
97+
type: ComponentType.NuGet,
9698
version: psrm.Identity.Version.ToNormalizedString());
9799

98100
dependencies.Add(item: dependent_package);
@@ -101,6 +103,7 @@ public void ResolveOne(Dependency dependency)
101103
{
102104
Dependency pd = new(
103105
name: pkg.Id,
106+
type: ComponentType.NuGet,
104107
version_range: pkg.VersionRange,
105108
framework: dependency.framework);
106109

src/nuget-inspector/PackagesConfigHelper.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public PackagesConfigHelper(NugetApi nugetApi)
2828
foreach (var depPair in pkg.Dependencies)
2929
{
3030
if (depPair.Key == id)
31-
result.Add(item: depPair.Value);
31+
result.Add(item: depPair.Value);
3232
}
3333
}
3434

@@ -39,8 +39,10 @@ public List<BasePackage> ProcessAll(List<Dependency> dependencies)
3939
{
4040
foreach (var dependency in dependencies)
4141
{
42+
Console.WriteLine($"ProcessAll() Adding {dependency.type} {dependency.name} to builder");
4243
Add(
4344
id: dependency.name!,
45+
type: dependency.type,
4446
name: dependency.name,
4547
range: dependency.version_range,
4648
framework: dependency.framework);
@@ -60,37 +62,43 @@ public List<BasePackage> ProcessAll(List<Dependency> dependencies)
6062
{
6163
deps.Add(item: new BasePackage(
6264
name: ResolutionDatas[key: dep].Name!,
65+
type: ResolutionDatas[key: dep].Type!,
6366
version: ResolutionDatas[key: dep].CurrentVersion?.ToNormalizedString()));
6467
}
6568
}
6669

6770
builder.AddOrUpdatePackage(
68-
base_package: new BasePackage(name: data.Name!,
71+
base_package: new BasePackage(
72+
name: data.Name!,
73+
type: data.Type!,
6974
version: data.CurrentVersion?.ToNormalizedString()),
7075
dependencies: deps!);
7176
}
7277

7378
return builder.GetPackageList();
7479
}
7580

76-
public void Add(string id, string? name, VersionRange? range, NuGetFramework? framework)
81+
public void Add(string id, string type, string? name, VersionRange? range, NuGetFramework? framework)
7782
{
7883
id = id.ToLower();
7984
Resolve(
8085
id: id,
86+
type: type,
8187
name: name,
8288
project_target_framework: framework,
8389
overrideRange: range);
8490
}
8591

8692
private void Resolve(
8793
string id,
94+
string type,
8895
string? name,
8996
NuGetFramework? project_target_framework = null,
9097
VersionRange? overrideRange = null)
9198
{
9299
id = id.ToLower();
93100
ResolutionData data = new();
101+
data.Type = type;
94102
if (ResolutionDatas.ContainsKey(key: id))
95103
{
96104
data = ResolutionDatas[key: id];
@@ -117,7 +125,7 @@ private void Resolve(
117125
if (best == null)
118126
{
119127
if (Config.TRACE)
120-
Console.WriteLine( value: $"Unable to find package for '{id}' with versions range '{combo}'.");
128+
Console.WriteLine(value: $"Unable to find package for '{id}' with versions range '{combo}'.");
121129

122130
if (data.CurrentVersion == null)
123131
data.CurrentVersion = combo.MinVersion;
@@ -138,6 +146,7 @@ private void Resolve(
138146
data.Dependencies.Add(key: dependency.Id.ToLower(), value: dependency.VersionRange);
139147
Resolve(
140148
id: dependency.Id.ToLower(),
149+
type: ComponentType.NuGet,
141150
name: dependency.Id,
142151
project_target_framework: project_target_framework);
143152
}
@@ -150,5 +159,6 @@ private class ResolutionData
150159
public readonly Dictionary<string, VersionRange?> Dependencies = new();
151160
public VersionRange? ExternalVersionRange;
152161
public string? Name;
162+
public string? Type;
153163
}
154164
}

src/nuget-inspector/PackagesConfigProcessor.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ private List<Dependency> GetDependencies()
101101

102102
Dependency dep = new(
103103
name: name,
104+
type: ComponentType.NuGet,
104105
version_range: range,
105106
framework: package_framework,
106107
is_direct: true,

0 commit comments

Comments
 (0)