Skip to content

Commit

Permalink
Better packaging of prerelease dependencies - references #1316
Browse files Browse the repository at this point in the history
  • Loading branch information
forki committed Dec 29, 2015
1 parent 7182ae1 commit 9f7c04f
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 12 deletions.
3 changes: 3 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
#### 2.39.9 - 29.12.2015
* BUGFIX: Better packaging of prerelease dependencies - https://github.com/fsprojects/Paket/issues/1316

#### 2.39.8 - 28.12.2015
* BUGFIX: Allow to overwrite versions in template files without id - https://github.com/fsprojects/Paket/issues/1321

Expand Down
29 changes: 17 additions & 12 deletions src/Paket.Core/PackageMetaData.fs
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ let addDependency (templateFile : TemplateFile) (dependency : PackageName * Vers
{ FileName = templateFile.FileName
Contents = CompleteInfo(core, { opt with Dependencies = newDeps }) }
| IncompleteTemplate ->
failwith "You should only try and add dependencies to template files with complete metadata."
failwith "You should only try to add dependencies to template files with complete metadata."

let toFile config platform (p : ProjectFile) =
Path.Combine(Path.GetDirectoryName p.FileName, p.GetOutputDirectory config platform, p.GetAssemblyName())
Expand All @@ -135,6 +135,11 @@ let findDependencies (dependencies : DependenciesFile) config platform (template
| ProjectOutputType.Library -> sprintf "lib/%O/" (project.GetTargetProfile())

let projectDir = Path.GetDirectoryName project.FileName

let getPreReleaseStatus (v:SemVerInfo) =
match v.PreRelease with
| None -> PreReleaseStatus.No
| _ -> PreReleaseStatus.All

let deps, files =
project.GetInterProjectDependencies()
Expand All @@ -143,7 +148,8 @@ let findDependencies (dependencies : DependenciesFile) config platform (template
| Some packagedRef -> packagedRef :: deps, files
| None ->
let p =
match ProjectFile.TryLoad(Path.Combine(projectDir, p.RelativePath) |> normalizePath) with
let path = Path.Combine(projectDir, p.RelativePath) |> normalizePath
match ProjectFile.TryLoad path with
| Some p -> p
| _ -> failwithf "Missing project reference in proj file %s" p.RelativePath

Expand All @@ -164,6 +170,7 @@ let findDependencies (dependencies : DependenciesFile) config platform (template
|> List.exists ((=) (f.Extension.ToLower()))

isSameFileName && isValidExtension)

additionalFiles
|> Array.fold (fun template file -> addFile file.FullName targetDir template) template

Expand All @@ -175,12 +182,9 @@ let findDependencies (dependencies : DependenciesFile) config platform (template
| CompleteTemplate(core, opt) ->
match core.Version with
| Some v ->
let versionConstraint =
if not lockDependencies
then Minimum v
else Specific v
PackageName core.Id, VersionRequirement(versionConstraint, PreReleaseStatus.No)
| None ->failwithf "There was no version given for %s." templateFile.FileName
let versionConstraint = if not lockDependencies then Minimum v else Specific v
PackageName core.Id, VersionRequirement(versionConstraint, getPreReleaseStatus v)
| None -> failwithf "There was no version given for %s." templateFile.FileName
| IncompleteTemplate -> failwithf "You cannot create a dependency on a template file (%s) with incomplete metadata." templateFile.FileName)
|> List.fold addDependency templateWithOutput

Expand All @@ -197,8 +201,8 @@ let findDependencies (dependencies : DependenciesFile) config platform (template
let referenceFile =
FileInfo project.FileName
|> ProjectFile.FindReferencesFile
|> Option.map (ReferencesFile.FromFile)

|> Option.map ReferencesFile.FromFile
match referenceFile with
| Some r ->
r.Groups
Expand Down Expand Up @@ -228,6 +232,7 @@ let findDependencies (dependencies : DependenciesFile) config platform (template
group.Packages
|> Seq.map (fun p -> p.Name, p.VersionRequirement)
|> Map.ofSeq

Map.tryFind np.Name deps
|> function
| Some direct -> Some direct
Expand All @@ -240,14 +245,14 @@ let findDependencies (dependencies : DependenciesFile) config platform (template
// to current locked version
group.Resolution
|> Map.tryFind np.Name
|> Option.map (fun transient -> VersionRequirement(Minimum transient.Version, PreReleaseStatus.No))
|> Option.map (fun transient -> VersionRequirement(Minimum transient.Version, getPreReleaseStatus transient.Version))
else
match lockFile.Groups |> Map.tryFind groupName with
| None -> None
| Some group ->
Map.tryFind np.Name group.Resolution
|> Option.map (fun resolvedPackage -> resolvedPackage.Version)
|> Option.map (fun version -> VersionRequirement(Specific version, PreReleaseStatus.No))
|> Option.map (fun version -> VersionRequirement(Specific version, getPreReleaseStatus version))
let dep =
match dependencyVersionRequirement with
| Some installed -> installed
Expand Down
1 change: 1 addition & 0 deletions src/Paket.Core/VersionRange.fs
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ type VersionRequirement =
let u = v.ToString()
let n = v.Normalize()
if u.Length > n.Length then u else n // Do not short version since Klondike doesn't understand

if s.Contains("-") then s else s + pre

let str =
Expand Down
6 changes: 6 additions & 0 deletions tests/Paket.Tests/NugetVersionRangeSerializerSpecs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ let ``can format less than version``() =
VersionRange.LessThan(SemVer.Parse "2.2") |> format |> shouldEqual "(,2.2.0)"
VersionRange.LessThan(SemVer.Parse "1.2") |> format |> shouldEqual "(,1.2.0)"

[<Test>]
let ``can format prereleases``() =
VersionRange.Specific(SemVer.Parse "1.0-unstable0021") |> format |> shouldEqual "[1.0.0-unstable0021]"
VersionRange.Minimum(SemVer.Parse "1.0-unstable0021") |> format |> shouldEqual "1.0.0-unstable0021"


[<Test>]
let ``can format range version``() =
VersionRange.Range(VersionRangeBound.Excluding, SemVer.Parse "2.2", SemVer.Parse "3", VersionRangeBound.Excluding) |> format |> shouldEqual "(2.2.0,3.0.0)"
Expand Down

0 comments on commit 9f7c04f

Please sign in to comment.