-
Notifications
You must be signed in to change notification settings - Fork 300
/
Copy pathcoreDependencies.linq
68 lines (63 loc) · 2.25 KB
/
coreDependencies.linq
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<Query Kind="Statements">
<NuGetReference>NuGet.Core</NuGetReference>
<Namespace>NuGet</Namespace>
<Namespace>System.Threading.Tasks</Namespace>
</Query>
var location = Util.CurrentQuery.Location;
//var location = @"C:\Code\docs.particular.net\tools";
var nuGet = PackageRepositoryFactory.Default.CreateRepository("https://www.nuget.org/api/v2/");
var myget = PackageRepositoryFactory.Default.CreateRepository("https://www.myget.org/F/particular/");
var corePackageName = "NServiceBus";
var minCoreVersion = new SemanticVersion(3, 3, 0, 0);
var coreDependencies = Path.Combine(location, @"..\components\core-dependencies");
Directory.CreateDirectory(coreDependencies);
var filePaths = Directory.GetFiles(coreDependencies, "*.txt");
foreach (var filePath in filePaths)
{
File.Delete(filePath);
}
var nugetAliasFile = Path.Combine(location, @"..\components\nugetAlias.txt");
Parallel.ForEach(File.ReadAllLines(nugetAliasFile), line =>
{
var packageName = line.Split(':').Last().Trim();
if (packageName == corePackageName)
{
return;
}
var packages = new List<IPackage>();
packages.AddRange(nuGet.FindPackagesById(packageName).Where(package => package.IsListed()));
packages.AddRange(myget.FindPackagesById(packageName).Where(package => package.IsListed()));
var targetPath = Path.Combine(coreDependencies, $"{packageName}.txt");
using (var writer = File.CreateText(targetPath))
{
var processed = new List<Version>();
foreach (var package in packages.OrderByDescending(x => x.Version))
{
var packageVersion = package.Version.Version;
if (packageVersion.Major == 0)
{
continue;
}
var nsbDependency = package.DependencySets
.SelectMany(x => x.Dependencies)
.SingleOrDefault(d => d.Id == corePackageName);
if (nsbDependency == null)
{
continue;
}
if (nsbDependency.VersionSpec.MinVersion < minCoreVersion)
{
continue;
}
var majorVersion = new Version(packageVersion.Major, packageVersion.Minor);
if (processed.Any(_ => _ == majorVersion))
{
continue;
}
processed.Add(majorVersion);
var minVersion = nsbDependency.VersionSpec.MinVersion.Version;
writer.WriteLine($"{majorVersion} : {minVersion.Major}");
}
writer.Flush();
}
});