Skip to content

Commit c1f5042

Browse files
committed
Implement group conditions for SDK-style projects
1 parent eed370a commit c1f5042

File tree

7 files changed

+253
-81
lines changed

7 files changed

+253
-81
lines changed

.paket/Paket.Restore.targets

Lines changed: 63 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@
137137
<PaketRestoreCachedSplitObject Include="$([System.Text.RegularExpressions.Regex]::Split(`$(PaketRestoreCachedContents)`, `{|}|,`))"></PaketRestoreCachedSplitObject>
138138
<!-- Keep Key, Value ItemGroup-->
139139
<PaketRestoreCachedKeyValue Include="@(PaketRestoreCachedSplitObject)"
140-
Condition=" $([System.Text.RegularExpressions.Regex]::Split(`%(Identity)`, `&quot;: &quot;`).Length) &gt; 1 ">
140+
Condition=" $([System.Text.RegularExpressions.Regex]::Split(`%(Identity)`, `&quot;: &quot;`).Length) &gt; 1 ">
141141
<Key>$([System.Text.RegularExpressions.Regex]::Split(`%(Identity)`, `": "`)[0].Replace(`"`, ``).Replace(` `, ``))</Key>
142142
<Value>$([System.Text.RegularExpressions.Regex]::Split(`%(Identity)`, `": "`)[1].Replace(`"`, ``).Replace(` `, ``))</Value>
143143
</PaketRestoreCachedKeyValue>
@@ -241,8 +241,9 @@
241241
<OmitContent Condition="%(PaketReferencesFileLinesInfo.Splits) &gt;= 7">$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[6])</OmitContent>
242242
<ImportTargets Condition="%(PaketReferencesFileLinesInfo.Splits) &gt;= 8">$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[7])</ImportTargets>
243243
<Aliases Condition="%(PaketReferencesFileLinesInfo.Splits) &gt;= 9">$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[8])</Aliases>
244+
<ReferenceCondition Condition="%(PaketReferencesFileLinesInfo.Splits) &gt;= 10">$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[9])</ReferenceCondition>
244245
</PaketReferencesFileLinesInfo>
245-
<PackageReference Condition=" '$(ManagePackageVersionsCentrally)' != 'true' Or '%(PaketReferencesFileLinesInfo.Reference)' == 'Direct' " Include="%(PaketReferencesFileLinesInfo.PackageName)">
246+
<PackageReference Condition=" ('$(ManagePackageVersionsCentrally)' != 'true' Or '%(PaketReferencesFileLinesInfo.Reference)' == 'Direct') AND ('%(PaketReferencesFileLinesInfo.ReferenceCondition)' == 'true' Or $(%(PaketReferencesFileLinesInfo.ReferenceCondition)) == 'true')" Include="%(PaketReferencesFileLinesInfo.PackageName)">
246247
<Version Condition=" '$(ManagePackageVersionsCentrally)' != 'true' ">%(PaketReferencesFileLinesInfo.PackageVersion)</Version>
247248
<PrivateAssets Condition=" ('%(PaketReferencesFileLinesInfo.AllPrivateAssets)' == 'true') Or ('$(PackAsTool)' == 'true') ">All</PrivateAssets>
248249
<ExcludeAssets Condition=" %(PaketReferencesFileLinesInfo.CopyLocal) == 'false' or %(PaketReferencesFileLinesInfo.AllPrivateAssets) == 'exclude'">runtime</ExcludeAssets>
@@ -251,9 +252,7 @@
251252
<Aliases Condition=" %(PaketReferencesFileLinesInfo.Aliases) != ''">%(PaketReferencesFileLinesInfo.Aliases)</Aliases>
252253
<Publish Condition=" '$(PackAsTool)' == 'true' ">true</Publish>
253254
<AllowExplicitVersion>true</AllowExplicitVersion>
254-
255255
</PackageReference>
256-
257256
<PackageVersion Include="%(PaketReferencesFileLinesInfo.PackageName)">
258257
<Version>%(PaketReferencesFileLinesInfo.PackageVersion)</Version>
259258
</PackageVersion>
@@ -319,62 +318,72 @@
319318
</ItemGroup>
320319

321320
<Error Text="Error Because of PAKET_ERROR_ON_MSBUILD_EXEC (not calling fix-nuspecs)" Condition=" '$(PAKET_ERROR_ON_MSBUILD_EXEC)' == 'true' " />
322-
<Exec Condition="@(_NuspecFiles) != ''" Command='$(PaketCommand) fix-nuspecs files "@(_NuspecFiles)" project-file "$(PaketProjectFile)" ' />
321+
<Exec Condition="@(_NuspecFiles) != ''" Command='$(PaketCommand) show-conditions -s' ConsoleToMSBuild="true" StandardOutputImportance="low">
322+
<Output TaskParameter="ConsoleOutput" ItemName="_ConditionProperties"/>
323+
</Exec>
324+
<ItemGroup>
325+
<_DefinedConditionProperties Include="@(_ConditionProperties)" Condition="$(%(Identity)) == 'true'"/>
326+
</ItemGroup>
327+
<PropertyGroup>
328+
<_ConditionsParameter></_ConditionsParameter>
329+
<_ConditionsParameter Condition="@(_DefinedConditionProperties) != ''">--conditions @(_DefinedConditionProperties)</_ConditionsParameter>
330+
</PropertyGroup>
331+
<Exec Condition="@(_NuspecFiles) != ''" Command='$(PaketCommand) fix-nuspecs files "@(_NuspecFiles)" project-file "$(PaketProjectFile)" $(_ConditionsParameter)' />
323332
<Error Condition="@(_NuspecFiles) == ''" Text='Could not find nuspec files in "$(AdjustedNuspecOutputPath)" (Version: "$(PackageVersion)"), therefore we cannot call "paket fix-nuspecs" and have to error out!' />
324333

325334
<ConvertToAbsolutePath Condition="@(_NuspecFiles) != ''" Paths="@(_NuspecFiles)">
326335
<Output TaskParameter="AbsolutePaths" PropertyName="NuspecFileAbsolutePath" />
327336
</ConvertToAbsolutePath>
328337

329-
<!-- Call Pack -->
330-
<PackTask Condition="$(UseMSBuild16_10_Pack)"
331-
PackItem="$(PackProjectInputFile)"
332-
PackageFiles="@(_PackageFiles)"
333-
PackageFilesToExclude="@(_PackageFilesToExclude)"
334-
PackageVersion="$(PackageVersion)"
335-
PackageId="$(PackageId)"
336-
Title="$(Title)"
337-
Authors="$(Authors)"
338-
Description="$(Description)"
339-
Copyright="$(Copyright)"
340-
RequireLicenseAcceptance="$(PackageRequireLicenseAcceptance)"
341-
LicenseUrl="$(PackageLicenseUrl)"
342-
ProjectUrl="$(PackageProjectUrl)"
343-
IconUrl="$(PackageIconUrl)"
344-
ReleaseNotes="$(PackageReleaseNotes)"
345-
Tags="$(PackageTags)"
346-
DevelopmentDependency="$(DevelopmentDependency)"
347-
BuildOutputInPackage="@(_BuildOutputInPackage)"
348-
TargetPathsToSymbols="@(_TargetPathsToSymbols)"
349-
SymbolPackageFormat="$(SymbolPackageFormat)"
350-
TargetFrameworks="@(_TargetFrameworks)"
351-
AssemblyName="$(AssemblyName)"
352-
PackageOutputPath="$(PackageOutputAbsolutePath)"
353-
IncludeSymbols="$(IncludeSymbols)"
354-
IncludeSource="$(IncludeSource)"
355-
PackageTypes="$(PackageType)"
356-
IsTool="$(IsTool)"
357-
RepositoryUrl="$(RepositoryUrl)"
358-
RepositoryType="$(RepositoryType)"
359-
SourceFiles="@(_SourceFiles->Distinct())"
360-
NoPackageAnalysis="$(NoPackageAnalysis)"
361-
MinClientVersion="$(MinClientVersion)"
362-
Serviceable="$(Serviceable)"
363-
FrameworkAssemblyReferences="@(_FrameworkAssemblyReferences)"
364-
ContinuePackingAfterGeneratingNuspec="$(ContinuePackingAfterGeneratingNuspec)"
365-
NuspecOutputPath="$(AdjustedNuspecOutputPath)"
366-
IncludeBuildOutput="$(IncludeBuildOutput)"
367-
BuildOutputFolders="$(BuildOutputTargetFolder)"
368-
ContentTargetFolders="$(ContentTargetFolders)"
369-
RestoreOutputPath="$(RestoreOutputAbsolutePath)"
370-
NuspecFile="$(NuspecFileAbsolutePath)"
371-
NuspecBasePath="$(NuspecBasePath)"
372-
NuspecProperties="$(NuspecProperties)"
373-
PackageLicenseFile="$(PackageLicenseFile)"
374-
PackageLicenseExpression="$(PackageLicenseExpression)"
375-
PackageLicenseExpressionVersion="$(PackageLicenseExpressionVersion)"
376-
Readme="$(PackageReadmeFile)"
377-
NoDefaultExcludes="$(NoDefaultExcludes)"/>
338+
<!-- Call Pack -->
339+
<PackTask Condition="$(UseMSBuild16_10_Pack)"
340+
PackItem="$(PackProjectInputFile)"
341+
PackageFiles="@(_PackageFiles)"
342+
PackageFilesToExclude="@(_PackageFilesToExclude)"
343+
PackageVersion="$(PackageVersion)"
344+
PackageId="$(PackageId)"
345+
Title="$(Title)"
346+
Authors="$(Authors)"
347+
Description="$(Description)"
348+
Copyright="$(Copyright)"
349+
RequireLicenseAcceptance="$(PackageRequireLicenseAcceptance)"
350+
LicenseUrl="$(PackageLicenseUrl)"
351+
ProjectUrl="$(PackageProjectUrl)"
352+
IconUrl="$(PackageIconUrl)"
353+
ReleaseNotes="$(PackageReleaseNotes)"
354+
Tags="$(PackageTags)"
355+
DevelopmentDependency="$(DevelopmentDependency)"
356+
BuildOutputInPackage="@(_BuildOutputInPackage)"
357+
TargetPathsToSymbols="@(_TargetPathsToSymbols)"
358+
SymbolPackageFormat="$(SymbolPackageFormat)"
359+
TargetFrameworks="@(_TargetFrameworks)"
360+
AssemblyName="$(AssemblyName)"
361+
PackageOutputPath="$(PackageOutputAbsolutePath)"
362+
IncludeSymbols="$(IncludeSymbols)"
363+
IncludeSource="$(IncludeSource)"
364+
PackageTypes="$(PackageType)"
365+
IsTool="$(IsTool)"
366+
RepositoryUrl="$(RepositoryUrl)"
367+
RepositoryType="$(RepositoryType)"
368+
SourceFiles="@(_SourceFiles->Distinct())"
369+
NoPackageAnalysis="$(NoPackageAnalysis)"
370+
MinClientVersion="$(MinClientVersion)"
371+
Serviceable="$(Serviceable)"
372+
FrameworkAssemblyReferences="@(_FrameworkAssemblyReferences)"
373+
ContinuePackingAfterGeneratingNuspec="$(ContinuePackingAfterGeneratingNuspec)"
374+
NuspecOutputPath="$(AdjustedNuspecOutputPath)"
375+
IncludeBuildOutput="$(IncludeBuildOutput)"
376+
BuildOutputFolders="$(BuildOutputTargetFolder)"
377+
ContentTargetFolders="$(ContentTargetFolders)"
378+
RestoreOutputPath="$(RestoreOutputAbsolutePath)"
379+
NuspecFile="$(NuspecFileAbsolutePath)"
380+
NuspecBasePath="$(NuspecBasePath)"
381+
NuspecProperties="$(NuspecProperties)"
382+
PackageLicenseFile="$(PackageLicenseFile)"
383+
PackageLicenseExpression="$(PackageLicenseExpression)"
384+
PackageLicenseExpressionVersion="$(PackageLicenseExpressionVersion)"
385+
Readme="$(PackageReadmeFile)"
386+
NoDefaultExcludes="$(NoDefaultExcludes)"/>
378387

379388
<PackTask Condition="$(UseMSBuild16_0_Pack)"
380389
PackItem="$(PackProjectInputFile)"

src/Paket.Core/Installation/RestoreProcess.fs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -321,20 +321,21 @@ let createPaketPropsFile (lockFile:LockFile) (cliTools:ResolvedPackage seq) (ref
321321
| ExplicitRestriction fw -> ExplicitRestriction fw
322322
| _ -> group.Options.Settings.FrameworkRestrictions
323323
let condition = getExplicitRestriction restrictions
324-
p,condition,packageSettings)
325-
|> Seq.groupBy (fun (_,c,__) -> c)
326-
|> Seq.collect (fun (condition,packages) ->
327-
let condition =
324+
p,condition,packageSettings,group.Options.Settings.ReferenceCondition)
325+
|> Seq.groupBy (fun (_,c,__,rc) -> c,rc)
326+
|> Seq.collect (fun ((condition,referenceCondition),packages) ->
327+
let targets =
328328
match condition with
329-
| FrameworkRestriction.HasNoRestriction -> ""
330-
| restrictions -> restrictions.ToMSBuildCondition()
329+
| FrameworkRestriction.HasNoRestriction -> Set.empty
330+
| restrictions -> restrictions.RepresentedFrameworks
331+
let condition = PlatformMatching.getCondition referenceCondition targets
331332
let condition =
332333
if condition = "" || condition = "true" then "" else
333334
sprintf " AND (%s)" condition
334335

335336
let packageReferences =
336337
packages
337-
|> Seq.collect (fun (p,_,packageSettings) ->
338+
|> Seq.collect (fun (p,_,packageSettings, __) ->
338339
let directReferenceCondition =
339340
if not(allDirectPackages.Contains p.Name) then
340341
"Condition=\" '$(ManagePackageVersionsCentrally)' != 'true' \""
@@ -350,16 +351,13 @@ let createPaketPropsFile (lockFile:LockFile) (cliTools:ResolvedPackage seq) (ref
350351
match excludeAssets with
351352
| [] -> ()
352353
| tags -> yield sprintf """ <ExcludeAssets>%s</ExcludeAssets>""" (tags |> String.concat ";")
353-
354354
match combineCopyLocal p.Settings packageSettings with
355355
| Some true -> yield sprintf """ <PrivateAssets>All</PrivateAssets>"""
356356
| _ -> ()
357-
358357
yield """ </PackageReference>"""])
359-
360358
let packageVersions =
361359
packages
362-
|> Seq.collect (fun (p,_,__) ->
360+
|> Seq.collect (fun (p,_,__,___) ->
363361
[yield sprintf """ <PackageVersion Include="%O">""" p.Name
364362
yield sprintf """ <Version>%O</Version>""" p.Version
365363
yield """ </PackageVersion>"""])
@@ -472,6 +470,7 @@ let createProjectReferencesFiles (lockFile:LockFile) (projectFile:ProjectFile) (
472470
let combinedOmitContent = combineOmitContent resolvedPackage.Settings packageSettings
473471
let combinedImportTargets = combineImportTargets resolvedPackage.Settings packageSettings
474472
let aliases = if direct then packageSettings.Settings.Aliases |> Seq.tryHead else None
473+
let condition = kv.Value.Options.Settings.ReferenceCondition |> Option.defaultValue "true"
475474

476475
let privateAssetsAll =
477476
match combinedCopyLocal with
@@ -506,7 +505,8 @@ let createProjectReferencesFiles (lockFile:LockFile) (projectFile:ProjectFile) (
506505
copyLocal
507506
omitContent
508507
importTargets
509-
alias]
508+
alias
509+
condition]
510510
|> String.concat ","
511511

512512
list.Add line

src/Paket.Core/PublicAPI.fs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,13 @@ type Dependencies(dependenciesFileName: string) =
600600
|> Seq.map (fun kv -> kv.Key.ToString())
601601
|> Seq.toList
602602

603+
member __.GetConditions(): string list =
604+
let dependenciesFile = DependenciesFile.ReadFromFile dependenciesFileName
605+
dependenciesFile.Groups
606+
|> Seq.choose (fun kv -> kv.Value.Options.Settings.ReferenceCondition)
607+
|> Seq.distinct
608+
|> Seq.toList
609+
603610
/// Returns the direct dependencies for the given package.
604611
member this.GetDirectDependenciesForPackage(groupName,packageName:string): (string * string * string) list =
605612
let resolvedPackages = this.GetLockFile().GetGroupedResolution()
@@ -855,6 +862,9 @@ type Dependencies(dependenciesFileName: string) =
855862
doc.Save fileStream
856863

857864
static member FixNuspecs (projectFile: ProjectFile, referencesFile:ReferencesFile, nuspecFileList:string list) =
865+
Dependencies.FixNuspecs (projectFile, referencesFile, nuspecFileList, [])
866+
867+
static member FixNuspecs (projectFile: ProjectFile, referencesFile:ReferencesFile, nuspecFileList:string list, conditions:string list) =
858868
let attr (name: string) (node: XmlNode) =
859869
match node.Attributes.[name] with
860870
| null -> None
@@ -880,8 +890,14 @@ type Dependencies(dependenciesFileName: string) =
880890
|> List.map (fun proj -> proj.NameWithoutExtension)
881891
|> Set.ofList
882892
let depsFile = deps.GetDependenciesFile()
893+
let groupMatchesConditions groupName =
894+
let group = depsFile.GetGroup(groupName)
895+
match group.Options.Settings.ReferenceCondition with
896+
| None -> true
897+
| Some condition -> conditions |> List.contains condition
883898
let allFrameworkRestrictions =
884899
locked.GetPackageHull referencesFile
900+
|> Seq.filter (fun kvp -> fst kvp.Key |> groupMatchesConditions)
885901
|> Seq.map(fun kvp -> snd kvp.Key, fst kvp.Key, kvp.Value.Settings.FrameworkRestrictions.GetExplicitRestriction())
886902

887903

@@ -898,6 +914,7 @@ type Dependencies(dependenciesFileName: string) =
898914

899915
let projectReferencedDeps =
900916
referencesFile.Groups
917+
|> Seq.filter (fun (KeyValue(group, _)) -> group |> groupMatchesConditions)
901918
|> Seq.collect (fun (KeyValue(group, packages)) -> packages.NugetPackages |> Seq.map (fun p -> group, p))
902919

903920
let groupsForProjectReferencedDeps =

src/Paket.Core/embedded/Paket.Restore.targets

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,9 @@
241241
<OmitContent Condition="%(PaketReferencesFileLinesInfo.Splits) &gt;= 7">$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[6])</OmitContent>
242242
<ImportTargets Condition="%(PaketReferencesFileLinesInfo.Splits) &gt;= 8">$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[7])</ImportTargets>
243243
<Aliases Condition="%(PaketReferencesFileLinesInfo.Splits) &gt;= 9">$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[8])</Aliases>
244+
<ReferenceCondition Condition="%(PaketReferencesFileLinesInfo.Splits) &gt;= 10">$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[9])</ReferenceCondition>
244245
</PaketReferencesFileLinesInfo>
245-
<PackageReference Condition=" '$(ManagePackageVersionsCentrally)' != 'true' Or '%(PaketReferencesFileLinesInfo.Reference)' == 'Direct' " Include="%(PaketReferencesFileLinesInfo.PackageName)">
246+
<PackageReference Condition=" ('$(ManagePackageVersionsCentrally)' != 'true' Or '%(PaketReferencesFileLinesInfo.Reference)' == 'Direct') AND ('%(PaketReferencesFileLinesInfo.ReferenceCondition)' == 'true' Or $(%(PaketReferencesFileLinesInfo.ReferenceCondition)) == 'true')" Include="%(PaketReferencesFileLinesInfo.PackageName)">
246247
<Version Condition=" '$(ManagePackageVersionsCentrally)' != 'true' ">%(PaketReferencesFileLinesInfo.PackageVersion)</Version>
247248
<PrivateAssets Condition=" ('%(PaketReferencesFileLinesInfo.AllPrivateAssets)' == 'true') Or ('$(PackAsTool)' == 'true') ">All</PrivateAssets>
248249
<ExcludeAssets Condition=" %(PaketReferencesFileLinesInfo.CopyLocal) == 'false' or %(PaketReferencesFileLinesInfo.AllPrivateAssets) == 'exclude'">runtime</ExcludeAssets>
@@ -251,9 +252,7 @@
251252
<Aliases Condition=" %(PaketReferencesFileLinesInfo.Aliases) != ''">%(PaketReferencesFileLinesInfo.Aliases)</Aliases>
252253
<Publish Condition=" '$(PackAsTool)' == 'true' ">true</Publish>
253254
<AllowExplicitVersion>true</AllowExplicitVersion>
254-
255255
</PackageReference>
256-
257256
<PackageVersion Include="%(PaketReferencesFileLinesInfo.PackageName)">
258257
<Version>%(PaketReferencesFileLinesInfo.PackageVersion)</Version>
259258
</PackageVersion>
@@ -319,7 +318,17 @@
319318
</ItemGroup>
320319

321320
<Error Text="Error Because of PAKET_ERROR_ON_MSBUILD_EXEC (not calling fix-nuspecs)" Condition=" '$(PAKET_ERROR_ON_MSBUILD_EXEC)' == 'true' " />
322-
<Exec Condition="@(_NuspecFiles) != ''" Command='$(PaketCommand) fix-nuspecs files "@(_NuspecFiles)" project-file "$(PaketProjectFile)" ' />
321+
<Exec Condition="@(_NuspecFiles) != ''" Command='$(PaketCommand) show-conditions -s' ConsoleToMSBuild="true" StandardOutputImportance="low">
322+
<Output TaskParameter="ConsoleOutput" ItemName="_ConditionProperties"/>
323+
</Exec>
324+
<ItemGroup>
325+
<_DefinedConditionProperties Include="@(_ConditionProperties)" Condition="$(%(Identity)) == 'true'"/>
326+
</ItemGroup>
327+
<PropertyGroup>
328+
<_ConditionsParameter></_ConditionsParameter>
329+
<_ConditionsParameter Condition="@(_DefinedConditionProperties) != ''">--conditions @(_DefinedConditionProperties)</_ConditionsParameter>
330+
</PropertyGroup>
331+
<Exec Condition="@(_NuspecFiles) != ''" Command='$(PaketCommand) fix-nuspecs files "@(_NuspecFiles)" project-file "$(PaketProjectFile)" $(_ConditionsParameter)' />
323332
<Error Condition="@(_NuspecFiles) == ''" Text='Could not find nuspec files in "$(AdjustedNuspecOutputPath)" (Version: "$(PackageVersion)"), therefore we cannot call "paket fix-nuspecs" and have to error out!' />
324333

325334
<ConvertToAbsolutePath Condition="@(_NuspecFiles) != ''" Paths="@(_NuspecFiles)">

0 commit comments

Comments
 (0)