Skip to content

Commit 320aba5

Browse files
authored
Merge pull request #875 from dotnet-maestro-bot/merge/release/2.1-to-release/2.2
[automated] Merge branch 'release/2.1' => 'release/2.2'
2 parents f4b08d7 + 8e23f00 commit 320aba5

File tree

3 files changed

+43
-9
lines changed

3 files changed

+43
-9
lines changed

tools-local/tasks/Microsoft.DotNet.SourceBuild.Tasks/UsageReport/AnnotatedUsage.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ public class AnnotatedUsage
1616
public bool EndsUpInOutput { get; set; }
1717
public bool TestProjectByHeuristic { get; set; }
1818
public bool TestProjectOnlyByHeuristic { get; set; }
19+
public bool IsDirectDependency { get; set; }
20+
public bool IsAutoReferenced { get; set; }
1921

2022
public XElement ToXml() => new XElement(
2123
nameof(AnnotatedUsage),
@@ -25,6 +27,8 @@ public class AnnotatedUsage
2527
ProdConPackageIdCreator.ToXAttributeIfNotNull(nameof(ProdConPackageIdCreator)),
2628
TestProjectByHeuristic.ToXAttributeIfTrue(nameof(TestProjectByHeuristic)),
2729
TestProjectOnlyByHeuristic.ToXAttributeIfTrue(nameof(TestProjectOnlyByHeuristic)),
30+
IsDirectDependency.ToXAttributeIfTrue(nameof(IsDirectDependency)),
31+
IsAutoReferenced.ToXAttributeIfTrue(nameof(IsAutoReferenced)),
2832
EndsUpInOutput.ToXAttributeIfTrue(nameof(EndsUpInOutput)));
2933
}
3034
}

tools-local/tasks/Microsoft.DotNet.SourceBuild.Tasks/UsageReport/Usage.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ public class Usage : IEquatable<Usage>
1616

1717
public string AssetsFile { get; set; }
1818

19+
public bool IsDirectDependency { get; set; }
20+
21+
public bool IsAutoReferenced { get; set; }
22+
1923
/// <summary>
2024
/// The Runtime ID this package is for, or null. Runtime packages (are assumed to) have the
2125
/// id 'runtime.{rid}.{rest of id}'. We can't use a simple regex to grab this value since
@@ -28,24 +32,32 @@ public class Usage : IEquatable<Usage>
2832
nameof(Usage),
2933
PackageIdentity.ToXElement().Attributes(),
3034
AssetsFile.ToXAttributeIfNotNull("File"),
35+
IsDirectDependency.ToXAttributeIfTrue(nameof(IsDirectDependency)),
36+
IsAutoReferenced.ToXAttributeIfTrue(nameof(IsAutoReferenced)),
3137
RuntimePackageRid.ToXAttributeIfNotNull("Rid"));
3238

3339
public static Usage Parse(XElement xml) => new Usage
3440
{
3541
PackageIdentity = XmlParsingHelpers.ParsePackageIdentity(xml),
3642
AssetsFile = xml.Attribute("File")?.Value,
43+
IsDirectDependency = Convert.ToBoolean(xml.Attribute(nameof(IsDirectDependency))?.Value),
44+
IsAutoReferenced = Convert.ToBoolean(xml.Attribute(nameof(IsAutoReferenced))?.Value),
3745
RuntimePackageRid = xml.Attribute("Rid")?.Value
3846
};
3947

4048
public static Usage Create(
4149
string assetsFile,
4250
PackageIdentity identity,
51+
bool isDirectDependency,
52+
bool isAutoReferenced,
4353
IEnumerable<string> possibleRuntimePackageRids)
4454
{
4555
return new Usage
4656
{
4757
AssetsFile = assetsFile,
4858
PackageIdentity = identity,
59+
IsDirectDependency = isDirectDependency,
60+
IsAutoReferenced = isAutoReferenced,
4961
RuntimePackageRid = possibleRuntimePackageRids
5062
.Where(rid => identity.Id.StartsWith($"runtime.{rid}.", StringComparison.Ordinal))
5163
.OrderByDescending(rid => rid.Length)

tools-local/tasks/Microsoft.DotNet.SourceBuild.Tasks/UsageReport/WritePackageUsageData.cs

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -180,28 +180,44 @@ public override bool Execute()
180180
assetFiles,
181181
assetFile =>
182182
{
183-
var properties = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
183+
JObject jObj;
184184

185185
using (var file = File.OpenRead(Path.Combine(RootDir, assetFile)))
186186
using (var reader = new StreamReader(file))
187187
using (var jsonReader = new JsonTextReader(reader))
188188
{
189-
while (jsonReader.Read())
190-
{
191-
if (jsonReader.TokenType == JsonToken.PropertyName &&
192-
jsonReader.Value is string value)
193-
{
194-
properties.Add(value);
195-
}
196-
}
189+
jObj = (JObject)JToken.ReadFrom(jsonReader);
197190
}
198191

192+
var properties = new HashSet<string>(
193+
jObj.SelectTokens("$.targets.*").Children()
194+
.Concat(jObj.SelectToken("$.libraries"))
195+
.Select(t => ((JProperty)t).Name)
196+
.Distinct(),
197+
StringComparer.OrdinalIgnoreCase);
198+
199+
var directDependencies = jObj.SelectTokens("$.project.frameworks.*.dependencies").Children().Select(dep =>
200+
new
201+
{
202+
name = ((JProperty)dep).Name,
203+
target = dep.SelectToken("$..target")?.ToString(),
204+
version = VersionRange.Parse(dep.SelectToken("$..version")?.ToString()),
205+
autoReferenced = dep.SelectToken("$..autoReferenced")?.ToString() == "True",
206+
})
207+
.ToArray();
208+
199209
foreach (var identity in toCheck
200210
.Where(id => properties.Contains(id.Id + "/" + id.Version.OriginalVersion)))
201211
{
212+
var directDependency =
213+
directDependencies?.FirstOrDefault(
214+
d => d.name == identity.Id &&
215+
d.version.Satisfies(identity.Version));
202216
usages.Add(Usage.Create(
203217
assetFile,
204218
identity,
219+
directDependency != null,
220+
directDependency?.autoReferenced == true,
205221
possibleRids));
206222
}
207223
});
@@ -214,6 +230,8 @@ public override bool Execute()
214230
usages.Add(Usage.Create(
215231
null,
216232
restoredWithoutUsagesFound,
233+
false,
234+
false,
217235
possibleRids));
218236
}
219237

0 commit comments

Comments
 (0)