Skip to content

Commit 75f08ec

Browse files
committed
Merge branch 'local_file_version' of https://github.com/theimowski/Paket
2 parents 57852e8 + 18062fe commit 75f08ec

File tree

5 files changed

+62
-35
lines changed

5 files changed

+62
-35
lines changed

Diff for: .gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -191,3 +191,4 @@ docs/tools/FSharp.Formatting.svclog
191191
docs/content/paket.exe
192192
TestResult.xml
193193
tests/Paket.Tests/NuGetConfig/PasswordConfig.xml
194+
paket.local

Diff for: RELEASE_NOTES.md

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
1-
#### 3.9.7 - 01.08.2016
1+
#### 3.10.0 - 03.08.2016
2+
* Allow to specify nupkg version for source override in paket.local file - https://github.com/fsprojects/Paket/issues/1803
23
* BUGFIX: Allow "auto-restore on" to be done twice - https://github.com/fsprojects/Paket/issues/1836
3-
4-
#### 3.9.6 - 27.07.2016
54
* BUGFIX: be careful with distinction between .NET 4.0 client and .NET 4.0 full profile - https://github.com/fsprojects/Paket/issues/1830
6-
7-
#### 3.9.4 - 26.07.2016
85
* BUGFIX: Don't allow empty string as description in template file - https://github.com/fsprojects/Paket/pull/1831
9-
10-
#### 3.9.1 - 22.07.2016
11-
* Respect comments in dependencies file
6+
* BUGFIX: Respect comments in dependencies file
127

138
#### 3.9.0 - 22.07.2016
149
* Don't create runtime references for CoreClr anymore - new concept coming soon

Diff for: docs/content/local-file.md

+9
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,20 @@ Format of git source is the same as used in `paket.dependencies` for specifying
8585

8686
[lang=paket]
8787
nuget Fake -> source c:\github\FAKE\bin
88+
89+
// Argu is searched in specific version
90+
nuget Argu -> source C:\github\Argu\bin version 0.0.0
8891

8992
The Format of the source is the same as in [path sources](nuget-dependencies.html#Path-sources).
9093

9194
> Note: In case of source override, `paket restore` assumes the NuGet package **already exists** in pointed directory - no build is going to be triggered.
9295
96+
### Nupkg version
97+
98+
If you happen to have a nupkg in local path, but with a different version than in `paket.lock`, you can optionally specify version which should be used for this override.
99+
One use case might be when the package version is determined by your build server, and nupkgs created locally have zero version.
100+
This is currently supported only for [Source override](#Source-override).
101+
93102
### Groups
94103

95104
[lang=paket]

Diff for: src/Paket.Core/LocalFile.fs

+25-18
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ open Paket.ModuleResolver
55
open Paket.PackageSources
66

77
type OverriddenPackage =
8-
OverriddenPackage of packageName: PackageName * group: GroupName
8+
{ Name : PackageName
9+
Group : GroupName }
910

1011
type LocalOverride =
11-
| LocalSourceOverride of package: OverriddenPackage * devSource: PackageSource
12+
| LocalSourceOverride of package: OverriddenPackage * devSource: PackageSource * version: Option<SemVerInfo>
1213
| LocalGitOverride of package: OverriddenPackage * gitSource: string
1314

1415
type LocalFile = LocalFile of devSourceOverrides: LocalOverride list
@@ -26,22 +27,24 @@ module LocalFile =
2627
else
2728
None
2829

29-
let private nameGroup (name, group) =
30+
let nameGroup (name, group) =
3031
let group =
3132
if group = "" then
3233
Constants.MainDependencyGroup
3334
else
3435
GroupName group
35-
OverriddenPackage (PackageName name, group)
36+
{ Name = PackageName name
37+
Group = group }
3638

3739
let private parseLine = function
3840
| Regex
39-
"nuget[ ]+(.*?)([ ]+group[ ]+(.*))?[ ]+->[ ]+(source[ ]+.*)"
40-
[package; _; group; source] ->
41+
"^nuget[ ]+(.*?)([ ]+group[ ]+(.*))?[ ]+->[ ]+(source[ ]+.*?)([ ]+version[ ]+(.*))?$"
42+
[package; _; group; source; _; version] ->
43+
let v = try SemVer.Parse version |> Some with _ -> None
4144
source
4245
|> Trial.Catch PackageSource.Parse
4346
|> Trial.mapFailure (fun _ -> [sprintf "Cannot parse source '%s'" source])
44-
|> Trial.lift (fun s -> LocalSourceOverride (nameGroup(package, group), s))
47+
|> Trial.lift (fun s -> LocalSourceOverride (nameGroup(package, group), s, v))
4548
| Regex
4649
"nuget[ ]+(.*?)([ ]+group[ ]+(.*))?[ ]+->[ ]+git[ ]+(.*)"
4750
[package; _; group; gitSource] ->
@@ -66,35 +69,39 @@ module LocalFile =
6669

6770
let empty = LocalFile []
6871

69-
let private overrideResolution (packageName, source) resolution =
72+
let private overrideResolution (p, v, source) resolution =
7073
resolution
7174
|> Map.map (fun name original ->
72-
if name = packageName then
73-
{ original with PackageResolver.ResolvedPackage.Source = source }
75+
if name = p then
76+
{ original with PackageResolver.ResolvedPackage.Source = source
77+
PackageResolver.ResolvedPackage.Version =
78+
defaultArg v original.Version }
7479
else
7580
original)
7681

7782
let private warning x =
7883
match x with
79-
| LocalSourceOverride (OverriddenPackage(p,g),s) ->
84+
| LocalSourceOverride ({ Name = p; Group = g},s, Some v) ->
85+
sprintf "nuget %s group %s -> %s version %s" (p.ToString()) (g.ToString()) (s.ToString()) (v.ToString())
86+
| LocalSourceOverride ({ Name = p; Group = g},s, None) ->
8087
sprintf "nuget %s group %s -> %s" (p.ToString()) (g.ToString()) (s.ToString())
81-
| LocalGitOverride (OverriddenPackage(p,g),s) ->
88+
| LocalGitOverride ({ Name = p; Group = g},s) ->
8289
sprintf "nuget %s group %s -> %s" (p.ToString()) (g.ToString()) s
8390
|> (+) "paket.local override: "
8491
|> Logging.traceWarn
8592
x
8693

8794
let overrideDependency (lockFile: LockFile) = warning >> function
88-
| LocalSourceOverride (OverriddenPackage(p,group),s) ->
95+
| LocalSourceOverride ({ Name = p; Group = group },s,v) ->
8996
let groups =
9097
lockFile.Groups
9198
|> Map.map (fun name g ->
9299
if name = group then
93-
{ g with Resolution = overrideResolution (p,s) g.Resolution }
100+
{ g with Resolution = overrideResolution (p,v,s) g.Resolution }
94101
else
95102
g )
96103
LockFile(lockFile.FileName, groups)
97-
| LocalGitOverride (OverriddenPackage(p,group),s) ->
104+
| LocalGitOverride ({ Name = p; Group = group},s) ->
98105
let owner,branch,project,cloneUrl,buildCommand,operatingSystemRestriction,packagePath =
99106
Git.Handling.extractUrlParts s
100107
let restriction = VersionRestriction.Concrete (defaultArg branch "master")
@@ -130,7 +137,7 @@ module LocalFile =
130137
lockFile.Groups
131138
|> Map.map (fun name g ->
132139
if name = group then
133-
{ g with Resolution = overrideResolution (p,source g.Name) g.Resolution
140+
{ g with Resolution = overrideResolution (p,None,source g.Name) g.Resolution
134141
RemoteFiles = remoteFile :: g.RemoteFiles }
135142
else
136143
g)
@@ -141,6 +148,6 @@ module LocalFile =
141148

142149
let overrides (LocalFile xs) (package, group) =
143150
xs
144-
|> List.exists (function | LocalSourceOverride (OverriddenPackage(p,g), _)
145-
| LocalGitOverride (OverriddenPackage(p,g), _)
151+
|> List.exists (function | LocalSourceOverride ({ Name = p; Group = g}, _, _)
152+
| LocalGitOverride ({ Name = p; Group = g}, _)
146153
-> p = package && g = group)

Diff for: tests/Paket.Tests/LocalFile/LocalFileSpecs.fs

+24-9
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,10 @@ let ``should parse single dev source override``() =
1717
"""
1818
let expected =
1919
LocalFile [
20-
LocalSourceOverride
21-
(OverriddenPackage(
22-
PackageName "NUnit",
23-
GroupName "main"),
24-
LocalNuGet ("./local_source", None))
20+
LocalSourceOverride
21+
(LocalFile.nameGroup ("NUnit", "main"),
22+
LocalNuGet ("./local_source", None),
23+
None)
2524
]
2625
|> Trial.ok
2726

@@ -37,10 +36,9 @@ let ``should parse single dev source override in group``() =
3736
let expected =
3837
LocalFile [
3938
LocalSourceOverride
40-
(OverriddenPackage(
41-
PackageName "NUnit",
42-
GroupName "Build"),
43-
LocalNuGet ("./local_source", None))
39+
(LocalFile.nameGroup ("NUnit", "Build"),
40+
LocalNuGet ("./local_source", None),
41+
None)
4442
]
4543
|> Trial.ok
4644

@@ -49,6 +47,23 @@ let ``should parse single dev source override in group``() =
4947
actual |> shouldEqual expected
5048

5149

50+
[<Test>]
51+
let ``should parse single dev source override with version``() =
52+
let contents = """
53+
nuget NUnit -> source ./local_source version 0.0.0
54+
"""
55+
let expected =
56+
LocalFile [
57+
LocalSourceOverride
58+
(LocalFile.nameGroup ("NUnit", "main"),
59+
LocalNuGet ("./local_source", None),
60+
Some (SemVer.Zero))
61+
]
62+
|> Trial.ok
63+
64+
let actual = LocalFile.parse (toLines contents |> Array.toList)
65+
66+
actual |> shouldEqual expected
5267

5368
[<Test>]
5469
let ``should ignore comments``() =

0 commit comments

Comments
 (0)