Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
removed FrameworkVersion.All
  • Loading branch information
theimowski committed Oct 18, 2014
commit 52dc78c6bc3cf8862eb4719f2ee13a42ba63fc05
75 changes: 34 additions & 41 deletions src/Paket.Core/FrameworkHandling.fs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ open System
type FrameworkProfile =
| Client
| Full

[<RequireQualifiedAccess>]
type FrameworkVersionNo =
/// The Framework version.
type FrameworkVersion =
| V1
| V1_1
| V2
Expand All @@ -31,22 +32,17 @@ type FrameworkVersionNo =
| V4_5_2 -> "v4.5.2"
| V4_5_3 -> "v4.5.3"

/// The Framework version.
type FrameworkVersion =
| All
| Framework of FrameworkVersionNo

static member KnownDotNetFrameworks =
[ FrameworkVersionNo.V1, Full
FrameworkVersionNo.V1_1, Full
FrameworkVersionNo.V2, Full
FrameworkVersionNo.V3_5, Full
FrameworkVersionNo.V4, Client
FrameworkVersionNo.V4, Full
FrameworkVersionNo.V4_5, Full
FrameworkVersionNo.V4_5_1, Full
FrameworkVersionNo.V4_5_2, Full
FrameworkVersionNo.V4_5_3, Full ]
[ FrameworkVersion.V1, Full
FrameworkVersion.V1_1, Full
FrameworkVersion.V2, Full
FrameworkVersion.V3_5, Full
FrameworkVersion.V4, Client
FrameworkVersion.V4, Full
FrameworkVersion.V4_5, Full
FrameworkVersion.V4_5_1, Full
FrameworkVersion.V4_5_2, Full
FrameworkVersion.V4_5_3, Full ]

type PlatformVersion = string

Expand Down Expand Up @@ -90,25 +86,25 @@ type FrameworkIdentifier =
|> List.fold (fun (path:string) (pattern,replacement) -> path.Replace(pattern.ToLower(),replacement.ToLower())) (path.ToLower())

match path with
| "net" -> Some(DotNetFramework(All, Full))
| "1.0" -> Some(DotNetFramework(All, Full))
| "1.1" -> Some(DotNetFramework(All, Full))
| "2.0" -> Some(DotNetFramework(All, Full))
| "net11" -> Some(DotNetFramework(Framework FrameworkVersionNo.V1_1, Full))
| "net20" -> Some(DotNetFramework(Framework FrameworkVersionNo.V2, Full))
| "net20-full" -> Some(DotNetFramework(Framework FrameworkVersionNo.V2, Full))
| "net35" -> Some(DotNetFramework(Framework FrameworkVersionNo.V3_5, Full))
| "net35-full" -> Some(DotNetFramework(Framework FrameworkVersionNo.V3_5, Full))
| "net4" -> Some(DotNetFramework(Framework FrameworkVersionNo.V4, Full))
| "net40" -> Some(DotNetFramework(Framework FrameworkVersionNo.V4, Full))
| "net40-full" -> Some(DotNetFramework(Framework FrameworkVersionNo.V4, Full))
| "net40-client" -> Some(DotNetFramework(Framework FrameworkVersionNo.V4, Client))
| "net45" -> Some(DotNetFramework(Framework FrameworkVersionNo.V4_5, Full))
| "net45-full" -> Some(DotNetFramework(Framework FrameworkVersionNo.V4_5, Full))
| "net451" -> Some(DotNetFramework(Framework FrameworkVersionNo.V4_5_1, Full))
| "35" -> Some(DotNetFramework(Framework FrameworkVersionNo.V3_5, Full))
| "40" -> Some(DotNetFramework(Framework FrameworkVersionNo.V4, Full))
| "45" -> Some(DotNetFramework(Framework FrameworkVersionNo.V4_5, Full))
| "net" -> Some(DotNetFramework(FrameworkVersion.V2, Full)) // not sure here
| "1.0" -> Some(DotNetFramework(FrameworkVersion.V1, Full))
| "1.1" -> Some(DotNetFramework(FrameworkVersion.V1_1, Full))
| "2.0" -> Some(DotNetFramework(FrameworkVersion.V2, Full))
| "net11" -> Some(DotNetFramework(FrameworkVersion.V1_1, Full))
| "net20" -> Some(DotNetFramework(FrameworkVersion.V2, Full))
| "net20-full" -> Some(DotNetFramework(FrameworkVersion.V2, Full))
| "net35" -> Some(DotNetFramework(FrameworkVersion.V3_5, Full))
| "net35-full" -> Some(DotNetFramework(FrameworkVersion.V3_5, Full))
| "net4" -> Some(DotNetFramework(FrameworkVersion.V4, Full))
| "net40" -> Some(DotNetFramework(FrameworkVersion.V4, Full))
| "net40-full" -> Some(DotNetFramework(FrameworkVersion.V4, Full))
| "net40-client" -> Some(DotNetFramework(FrameworkVersion.V4, Client))
| "net45" -> Some(DotNetFramework(FrameworkVersion.V4_5, Full))
| "net45-full" -> Some(DotNetFramework(FrameworkVersion.V4_5, Full))
| "net451" -> Some(DotNetFramework(FrameworkVersion.V4_5_1, Full))
| "35" -> Some(DotNetFramework(FrameworkVersion.V3_5, Full))
| "40" -> Some(DotNetFramework(FrameworkVersion.V4, Full))
| "45" -> Some(DotNetFramework(FrameworkVersion.V4_5, Full))
| "sl3" -> Some(Silverlight "v3.0")
| "sl4" -> Some(Silverlight "v4.0")
| "sl5" -> Some(Silverlight "v5.0")
Expand Down Expand Up @@ -229,10 +225,7 @@ type FrameworkIdentifier =
y
else x + " And " + y
match x with
| DotNetFramework(v,_) ->
match v with
| Framework fw -> sprintf "$(TargetFrameworkVersion) == '%s'" (fw.ToString()) ++ x.GetFrameworkProfile()
| All -> "true"
| DotNetFramework(fw,_) -> sprintf "$(TargetFrameworkVersion) == '%s'" (fw.ToString()) ++ x.GetFrameworkProfile()
| PortableFramework _ -> x.GetFrameworkProfile() ++ x.GetPlatformIdentifier() ++ x.GetPlatformVersion()
| WindowsPhoneApp _ -> x.GetPlatformVersion()
| Windows _ -> x.GetPlatformVersion()
Expand All @@ -249,7 +242,7 @@ type FrameworkIdentifier =
let path = path.Replace("\\", "/").ToLower()
let fi = new FileInfo(path)

if path.Contains("lib/" + fi.Name.ToLower()) then Some(DotNetFramework(All, Full))
if path.Contains("lib/" + fi.Name.ToLower()) then Some(DotNetFramework(FrameworkVersion.V1, Full))
else
let startPos = path.IndexOf("lib/")
let endPos = path.IndexOf(fi.Name.ToLower())
Expand Down
21 changes: 3 additions & 18 deletions src/Paket.Core/InstallModel.fs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ type InstallModel =

static member EmptyModel(packageName, packageVersion) : InstallModel =
let frameworks =
[ for x, p in FrameworkVersion.KnownDotNetFrameworks -> DotNetFramework(Framework x, p) ]
[ for x, p in FrameworkVersion.KnownDotNetFrameworks -> DotNetFramework(x, p) ]
{ PackageName = packageName
PackageVersion = packageVersion
Fallbacks = Map.empty
Expand Down Expand Up @@ -97,31 +97,17 @@ type InstallModel =
(fun frameworks f -> Map.map (fun _ files -> {files with References = files.References |> Set.filter (f >> not)}) frameworks)
this.Frameworks }

member this.UseGenericFrameworkVersionIfEmpty() =
let genericFramework = DotNetFramework(All, Full)
let newFiles = this.GetReferences genericFramework

let model =
if Set.isEmpty newFiles then this else

let FrameworkVersionNo.V1,Full)
match Map.tryFind target this.Frameworks with
| Some files when Set.isEmpty files.References |> not -> this
| _ -> { this with Frameworks = Map.add target { References = newFiles; ContentFiles = Set.empty } this.Frameworks }

{ model with Frameworks = model.Frameworks |> Map.remove genericFramework }

member this.UseLowerVersionLibIfEmpty() =
FrameworkVersion.KnownDotNetFrameworks
|> List.rev
|> List.fold (fun (model : InstallModel) (lowerVersion,lowerProfile) ->
let newFiles = model.GetReferences(DotNetFramework(Framework lowerVersion, lowerProfile))
let newFiles = model.GetReferences(DotNetFramework(lowerVersion, lowerProfile))
if Set.isEmpty newFiles then model
else
FrameworkVersion.KnownDotNetFrameworks
|> List.filter (fun (version,profile) -> (version,profile) > (lowerVersion,lowerProfile))
|> List.fold (fun (model : InstallModel) (upperVersion,upperProfile) ->
let framework = DotNetFramework(Framework upperVersion, upperProfile)
let framework = DotNetFramework(upperVersion, upperProfile)
match Map.tryFind framework model.Frameworks with
| Some files when Set.isEmpty files.References ->
{ model with Frameworks = Map.add framework { References = newFiles; ContentFiles = Set.empty } model.Frameworks }
Expand Down Expand Up @@ -161,7 +147,6 @@ type InstallModel =

member this.Process() =
this
.UseGenericFrameworkVersionIfEmpty()
.UseLowerVersionLibIfEmpty()
.UsePortableVersionLibIfEmpty()
.UseLowerVersionLibIfEmpty() // because we now might need to use portable
Expand Down
6 changes: 3 additions & 3 deletions tests/Paket.Tests/InstallModel/NuspecSpecs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@ let ``if nuspec is not found we assume no framework references``() =
let ``can detect framework assemblies for Microsoft.Net.Http``() =
Nuspec.Load("TestFiles/Microsoft.Net.Http.nuspec").FrameworkAssemblyReferences
|> shouldEqual
[{ AssemblyName = "System.Net.Http"; TargetFramework = DotNetFramework(FrameworkVersion.Framework(FrameworkVersionNo.V4_5),Full) }
{ AssemblyName = "System.Net.Http.WebRequest"; TargetFramework = DotNetFramework(FrameworkVersion.Framework(FrameworkVersionNo.V4_5),Full) }
[{ AssemblyName = "System.Net.Http"; TargetFramework = DotNetFramework(FrameworkVersion.V4_5,Full) }
{ AssemblyName = "System.Net.Http.WebRequest"; TargetFramework = DotNetFramework(FrameworkVersion.V4_5,Full) }
{ AssemblyName = "System.Net.Http"; TargetFramework = MonoTouch }
{ AssemblyName = "System.Net.Http"; TargetFramework = MonoAndroid } ]

[<Test>]
let ``can detect framework assemblies for Octokit``() =
Nuspec.Load("TestFiles/Octokit.nuspec").FrameworkAssemblyReferences
|> shouldEqual
[{ AssemblyName = "System.Net.Http"; TargetFramework = DotNetFramework(FrameworkVersion.Framework(FrameworkVersionNo.V4_5),Full) }]
[{ AssemblyName = "System.Net.Http"; TargetFramework = DotNetFramework(FrameworkVersion.V4_5,Full) }]
Loading