Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 19 additions & 7 deletions src/Paket.Core/PaketConfigFiles/ProjectFile.fs
Original file line number Diff line number Diff line change
Expand Up @@ -2087,12 +2087,24 @@ type ProjectFile with
member self.GetTemplateMetadata () =
let prop name = self.GetProperty name

// SDK-style projects (new csproj format) expose several pack-related
// properties under a "Package" prefix (e.g. PackageReleaseNotes,
// PackageProjectUrl). Fall back to the "Package"-prefixed name when the
// plain property isn't present, so both old- and new-style projects work.
let propOrPackage name =
match prop name with
| Some _ as v -> v
| None -> prop ("Package" + name)

let propOr name value =
defaultArg (self.GetProperty name) value

let propMap name value fn =
defaultArg (self.GetProperty name|>Option.map fn) value

let propMapOrPackage name value fn =
defaultArg (propOrPackage name|>Option.map fn) value

let tryBool (s: string) = Boolean.TryParse s |> function true, value -> value | _ -> false

let splitString = String.split[|';'|] >> Array.map (fun x -> x.Trim()) >> List.ofArray
Expand All @@ -2107,22 +2119,22 @@ type ProjectFile with
let optionalInfo = {
Title = prop "Title"
Owners = propMap "Owners" [] splitString
ReleaseNotes = prop "ReleaseNotes"
ReleaseNotes = propOrPackage "ReleaseNotes"
Summary = prop "Summary"
Readme = prop "Readme"
Language = prop "Langauge"
ProjectUrl = prop "ProjectUrl"
IconUrl = prop "IconUrl"
ProjectUrl = propOrPackage "ProjectUrl"
IconUrl = propOrPackage "IconUrl"
Icon = prop "Icon"
LicenseExpression = prop "LicenseExpression"
LicenseUrl = prop "LicenseUrl"
LicenseExpression = propOrPackage "LicenseExpression"
LicenseUrl = propOrPackage "LicenseUrl"
Copyright = prop "Copyright"
RepositoryType = prop "RepositoryType"
RepositoryUrl = prop "RepositoryUrl"
RepositoryBranch = prop "RepositoryBranch"
RepositoryCommit = prop "RepositoryCommit"
RequireLicenseAcceptance = propMap "RequireLicenseAcceptance" false tryBool
Tags = propMap "Tags" [] splitString
RequireLicenseAcceptance = propMapOrPackage "RequireLicenseAcceptance" false tryBool
Tags = propMapOrPackage "Tags" [] splitString
DevelopmentDependency = propMap "DevelopmentDependency" false tryBool
DependencyGroups = []
ExcludedDependencies = Set.empty //propOr "ExcludedDependencies"
Expand Down
31 changes: 30 additions & 1 deletion tests/Paket.Tests/Packaging/PackageProcessSpecs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -94,4 +94,33 @@ let ``#3195 resolveProjectId does not override an id already present in the temp
"""
let projFile = ProjectFile.LoadFromString("dummy.fsproj", projectFileContents)
Paket.PackageProcess.resolveProjectId projFile "AssemblyName" (Some "Template.Id")
|> shouldEqual (Some "Template.Id")
|> shouldEqual (Some "Template.Id")

[<Test>]
let ``#3603 GetTemplateMetadata reads PackageReleaseNotes from an SDK-style csproj``() =
let projectFileContents = """
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageReleaseNotes>Fixed some bugs.</PackageReleaseNotes>
</PropertyGroup>
</Project>
"""
let projFile = ProjectFile.LoadFromString("dummy.fsproj", projectFileContents)
let _, optionalInfo = projFile.GetTemplateMetadata()
optionalInfo.ReleaseNotes |> shouldEqual (Some "Fixed some bugs.")

[<Test>]
let ``#3603 GetTemplateMetadata prefers plain ReleaseNotes over PackageReleaseNotes``() =
let projectFileContents = """
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<ReleaseNotes>Plain wins.</ReleaseNotes>
<PackageReleaseNotes>Package loses.</PackageReleaseNotes>
</PropertyGroup>
</Project>
"""
let projFile = ProjectFile.LoadFromString("dummy.fsproj", projectFileContents)
let _, optionalInfo = projFile.GetTemplateMetadata()
optionalInfo.ReleaseNotes |> shouldEqual (Some "Plain wins.")
Loading