зеркало из https://github.com/xamarin/AndroidX.git
Add support for exact version NuGet dependencies based on Maven dependency info from POM. (#770)
This commit is contained in:
Родитель
bf08825d20
Коммит
cd26694543
|
@ -0,0 +1,18 @@
|
|||
<Project>
|
||||
<!-- Enables "ExactVersion" attribute on "ProjectReference" to allow an exact NuGet reference version to be used.
|
||||
https://github.com/NuGet/Home/issues/5556#issuecomment-1179526189 -->
|
||||
<Target Name="UseExplicitPackageVersions" BeforeTargets="GenerateNuspec">
|
||||
<ItemGroup>
|
||||
<_ProjectReferenceWithExplicitPackageVersion Include="@(ProjectReference->'%(FullPath)')" Condition="'%(ProjectReference.PackageVersion)' != ''" />
|
||||
<_ProjectReferenceWithExactPackageVersion Include="@(ProjectReference->'%(FullPath)')" Condition="'%(ProjectReference.ExactVersion)' == 'true'" />
|
||||
<_ProjectReferenceWithReassignedVersion Include="@(_ProjectReferencesWithVersions)" Condition="'%(Identity)' != '' And '@(_ProjectReferenceWithExplicitPackageVersion)' == '@(_ProjectReferencesWithVersions)'">
|
||||
<ProjectVersion>@(_ProjectReferenceWithExplicitPackageVersion->'%(PackageVersion)')</ProjectVersion>
|
||||
</_ProjectReferenceWithReassignedVersion>
|
||||
<_ProjectReferenceWithReassignedVersion Include="@(_ProjectReferencesWithVersions)" Condition="'%(Identity)' != '' And '@(_ProjectReferenceWithExactPackageVersion)' == '@(_ProjectReferencesWithVersions)'">
|
||||
<ProjectVersion>[@(_ProjectReferencesWithVersions->'%(ProjectVersion)')]</ProjectVersion>
|
||||
</_ProjectReferenceWithReassignedVersion>
|
||||
<_ProjectReferencesWithVersions Remove="@(_ProjectReferenceWithReassignedVersion)" />
|
||||
<_ProjectReferencesWithVersions Include="@(_ProjectReferenceWithReassignedVersion)" />
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
</Project>
|
|
@ -173,8 +173,7 @@
|
|||
<!-- ProjectReference -->
|
||||
@foreach (var dep in @Model.NuGetDependencies) {
|
||||
if (dep.IsProjectReference) {
|
||||
<ProjectReference Include="..\..\generated\@(dep.MavenArtifact.MavenGroupId).@(dep.MavenArtifact.MavenArtifactId)\@(dep.MavenArtifact.MavenGroupId).@(dep.MavenArtifact.MavenArtifactId).csproj" PrivateAssets="none" />
|
||||
|
||||
<ProjectReference Include="..\..\generated\@(dep.MavenArtifact.MavenGroupId).@(dep.MavenArtifact.MavenArtifactId)\@(dep.MavenArtifact.MavenGroupId).@(dep.MavenArtifact.MavenArtifactId).csproj" PrivateAssets="none" PackageVersion="@GetProjectVersionString(dep.MavenArtifact.MavenArtifactVersion, dep.NuGetVersion)" />
|
||||
}
|
||||
}
|
||||
</ItemGroup>
|
||||
|
@ -184,7 +183,7 @@
|
|||
<!-- PackageReference -->
|
||||
@foreach (var dep in @Model.NuGetDependencies) {
|
||||
if (!dep.IsProjectReference) {
|
||||
<PackageReference Include="@(dep.NuGetPackageId)" Version="@(dep.NuGetVersion)" PrivateAssets="none" />
|
||||
<PackageReference Include="@(dep.NuGetPackageId)" Version="@GetVersionString(dep.MavenArtifact.MavenArtifactVersion, dep.NuGetVersion)" PrivateAssets="none" />
|
||||
}
|
||||
}
|
||||
</ItemGroup>
|
||||
|
@ -205,4 +204,53 @@
|
|||
</PropertyGroup>
|
||||
}
|
||||
|
||||
@{
|
||||
string GetProjectVersionString (string mavenVersion, string nugetVersion)
|
||||
{
|
||||
var adjusted_string = GetVersionString (mavenVersion, nugetVersion);
|
||||
|
||||
// If nothing changed, return empty string
|
||||
if (adjusted_string == nugetVersion)
|
||||
return null;
|
||||
|
||||
return adjusted_string;
|
||||
}
|
||||
|
||||
string GetVersionString (string mavenVersion, string nugetVersion)
|
||||
{
|
||||
// If this isn't an exact version we don't use this code
|
||||
if (!mavenVersion.StartsWith ('[') || !mavenVersion.EndsWith (']') || mavenVersion.Contains (','))
|
||||
return nugetVersion;
|
||||
|
||||
// An exact version is requested like "1.2.0", however we want to let the revision (4th NuGet number) float,
|
||||
// so that our updates that don't change the Java artifact can still be used.
|
||||
// That is, if the POM specifies "1.2.0" and the dependency NuGet is already "1.2.0.4", we want to allow:
|
||||
// 1.2.0.4 >= x < 1.2.1
|
||||
// NuGet expresses that as "[1.2.0.4, 1.2.1)", so that's what we need to create.
|
||||
var lower_bound = nugetVersion;
|
||||
|
||||
var nuget_first = 0;
|
||||
var nuget_second = 0;
|
||||
var nuget_third = 0;
|
||||
|
||||
var nuget_parts = nugetVersion.Split ('.');
|
||||
|
||||
if (nuget_parts.Length > 0 && int.TryParse (nuget_parts [0], out var p1))
|
||||
nuget_first = p1;
|
||||
|
||||
if (nuget_parts.Length > 1 && int.TryParse (nuget_parts [1], out var p2))
|
||||
nuget_second = p2;
|
||||
|
||||
if (nuget_parts.Length > 2 && int.TryParse (nuget_parts [2], out var p3))
|
||||
nuget_third = p3;
|
||||
|
||||
// Bump the third number
|
||||
nuget_third++;
|
||||
|
||||
var upper_bound = $"{nuget_first}.{nuget_second}.{nuget_third}";
|
||||
|
||||
// Put it all together
|
||||
return $"[{lower_bound}, {upper_bound})";
|
||||
}
|
||||
}
|
||||
</Project>
|
Загрузка…
Ссылка в новой задаче