Skip to content

Commit 58bbf3a

Browse files
committed
Detect framework assembly references in nuspec template - closes #740
1 parent b305b84 commit 58bbf3a

7 files changed

Lines changed: 101 additions & 2 deletions

File tree

‎RELEASE_NOTES.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
#### 0.38.1 - 31.03.2015
2+
* Added frameworkAssemblies to nuspec templating - https://github.com/fsprojects/Paket/issues/740
3+
14
#### 0.38.0 - 30.03.2015
25
* The restore process downloads package licenses automatically - https://github.com/fsprojects/Paket/pull/737
36

‎docs/content/template-files.md‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,17 @@ A references block looks like this:
116116

117117
If you omit the references block then all libraries in the packages will get referenced.
118118

119+
#### Framework assembly references
120+
121+
A block with framework assembly references looks like this:
122+
123+
[lang=batchfile]
124+
frameworkAssemblies
125+
System.Xml
126+
System.Xml.Linq
127+
128+
If you omit the references block then all libraries in the packages will get referenced.
129+
119130
#### Dependencies
120131

121132
A dependency block looks like this:

‎src/Paket.Core/NupkgWriter.fs‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,18 @@ let nuspecDoc (info:CompleteInfo) =
6666
| Some s -> addChildNode metadataNode nodeName s
6767
| None -> ()
6868

69+
let buildFrameworkReferencesNode libName =
70+
let element = XElement(ns + "frameworkAssembly")
71+
element.SetAttributeValue(XName.Get "assemblyName", libName)
72+
element.SetAttributeValue(XName.Get "targetFramework", "")
73+
element
74+
75+
let buildFrameworkReferencesNode frameworkAssembliesList =
76+
if frameworkAssembliesList = [] then () else
77+
let d = XElement(ns + "frameworkAssemblies")
78+
frameworkAssembliesList |> List.iter (buildFrameworkReferencesNode >> d.Add)
79+
metadataNode.Add d
80+
6981
let buildDependencyNode (Id, (VersionRequirement(range, _))) =
7082
let dep = XElement(ns + "dependency")
7183
dep.SetAttributeValue(XName.Get "id", Id)
@@ -114,6 +126,7 @@ let nuspecDoc (info:CompleteInfo) =
114126
!! "developmentDependency" "true"
115127

116128
optional.References |> buildReferencesNode
129+
optional.FrameworkAssemblyReferences |> buildFrameworkReferencesNode
117130
optional.Dependencies |> buildDependenciesNode
118131
XDocument(declaration, box root)
119132

‎src/Paket.Core/TemplateFile.fs‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ type internal OptionalPackagingInfo =
119119
DevelopmentDependency : bool
120120
Dependencies : (string * VersionRequirement) list
121121
References : string list
122+
FrameworkAssemblyReferences : string list
122123
Files : (string * string) list }
123124
static member Epmty : OptionalPackagingInfo =
124125
{ Title = None
@@ -135,6 +136,7 @@ type internal OptionalPackagingInfo =
135136
DevelopmentDependency = false
136137
Dependencies = []
137138
References = []
139+
FrameworkAssemblyReferences = []
138140
Files = [] }
139141

140142
type internal CompleteInfo = CompleteCoreInfo * OptionalPackagingInfo
@@ -231,6 +233,13 @@ module internal TemplateFile =
231233
|> Option.map (fun d -> d.Split '\n')
232234
|> Option.map List.ofSeq
233235
|> fun x -> defaultArg x []
236+
237+
238+
let private getFrameworkReferences (map : Map<string, string>) =
239+
Map.tryFind "frameworkassemblies" map
240+
|> Option.map (fun d -> d.Split '\n')
241+
|> Option.map List.ofSeq
242+
|> fun x -> defaultArg x []
234243

235244
let private getOptionalInfo (map : Map<string, string>) =
236245
let get (n : string) = Map.tryFind (n.ToLowerInvariant()) map
@@ -284,6 +293,7 @@ module internal TemplateFile =
284293
DevelopmentDependency = developmentDependency
285294
Dependencies = getDependencies map
286295
References = getReferences map
296+
FrameworkAssemblyReferences = getFrameworkReferences map
287297
Files = getFiles map }
288298

289299
let Parse(file,contentStream : Stream) =

‎src/Paket/Paket.fsproj‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@
2727
<WarningLevel>3</WarningLevel>
2828
<DocumentationFile>
2929
</DocumentationFile>
30-
<StartArguments>restore -f</StartArguments>
30+
<StartArguments>install</StartArguments>
3131
<StartAction>Project</StartAction>
3232
<StartProgram>paket.exe</StartProgram>
33-
<StartWorkingDirectory>D:\code\Paketkopie</StartWorkingDirectory>
33+
<StartWorkingDirectory>D:\code\PaketKopie</StartWorkingDirectory>
3434
</PropertyGroup>
3535
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
3636
<DebugType>pdbonly</DebugType>

‎tests/Paket.Tests/NuspecWriterSpecs.fs‎

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,40 @@ let ``should serialize dependencies``() =
6363
|> normalizeLineEndings
6464
|> shouldEqual (normalizeLineEndings result)
6565

66+
67+
[<Test>]
68+
let ``should serialize frameworkAssemblues``() =
69+
let result = """<package xmlns="http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd">
70+
<metadata>
71+
<id>Paket.Tests</id>
72+
<version>1.0.0.0</version>
73+
<authors>Two, Authors</authors>
74+
<description>A description</description>
75+
<tags>f# rules</tags>
76+
<frameworkAssemblies>
77+
<frameworkAssembly assemblyName="System.Xml" targetFramework="" />
78+
<frameworkAssembly assemblyName="System.Xml.Linq" targetFramework="" />
79+
</frameworkAssemblies>
80+
</metadata>
81+
</package>"""
82+
83+
let core =
84+
{ Id = "Paket.Tests"
85+
Version = SemVer.Parse "1.0.0.0" |> Some
86+
Authors = [ "Two"; "Authors" ]
87+
Description = "A description" }
88+
89+
let optional =
90+
{ OptionalPackagingInfo.Epmty with
91+
Tags = [ "f#"; "rules" ]
92+
FrameworkAssemblyReferences =
93+
[ "System.Xml"; "System.Xml.Linq" ] }
94+
95+
let doc = NupkgWriter.nuspecDoc (core, optional)
96+
doc.ToString()
97+
|> normalizeLineEndings
98+
|> shouldEqual (normalizeLineEndings result)
99+
66100
[<Test>]
67101
let ``should not serialize files``() =
68102
let result = """<package xmlns="http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd">

‎tests/Paket.Tests/TemplateFileParsing.fs‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,34 @@ version
275275
reference2 |> shouldEqual "someOtherFile.dll"
276276
| _ -> Assert.Fail()
277277

278+
279+
[<Test>]
280+
let ``Detect framework references correctly``() =
281+
let text = """type file
282+
id My.Thing
283+
authors Bob McBob
284+
description
285+
A longer description
286+
on two lines.
287+
frameworkAssemblies
288+
somefile
289+
someOtherFile.dll
290+
version
291+
1.0
292+
"""
293+
let sut =
294+
TemplateFile.Parse("file1.template", strToStream text)
295+
|> returnOrFail
296+
|> function
297+
| CompleteInfo (_, opt)
298+
| ProjectInfo (_, opt) -> opt
299+
300+
match sut.FrameworkAssemblyReferences with
301+
| reference1::reference2::[] ->
302+
reference1 |> shouldEqual "somefile"
303+
reference2 |> shouldEqual "someOtherFile.dll"
304+
| _ -> Assert.Fail()
305+
278306
[<Test>]
279307
let ``Detect multiple files correctly``() =
280308
let text = """type file

0 commit comments

Comments
 (0)