Skip to content

Commit 49b5425

Browse files
authored
Merge pull request #357 from LoopPerfect/feature/bazel
feature/bazel
2 parents b84a015 + 6ee3037 commit 49b5425

40 files changed

+999
-371
lines changed

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,6 @@ publish/
163163
# Publish Web Output
164164
*.[Pp]ublish.xml
165165
*.azurePubxml
166-
# TODO: Comment the next line if you want to checkin your web deploy settings
167-
# but database connection strings (with potential passwords) will be unencrypted
168166
*.pubxml
169167
*.publishproj
170168

buckaroo-cli/Program.fs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ open System
33
[<EntryPoint>]
44
let main argv =
55
async {
6-
let session = Guid.NewGuid() |> string
6+
let session = Guid.NewGuid () |> string
77
let input = argv |> String.concat " "
88

99
let! telemetry =
@@ -15,12 +15,12 @@ let main argv =
1515
let! exitCode = async {
1616
try
1717
match Buckaroo.Command.parse input with
18-
| Result.Ok (command, loggingLevel, fetchStyle) ->
19-
do!
18+
| Ok (command, loggingLevel, fetchStyle) ->
19+
let! exitCode =
2020
command
2121
|> Buckaroo.Command.runCommand loggingLevel fetchStyle
22-
return 0
23-
| Result.Error error ->
22+
return exitCode
23+
| Error error ->
2424
Console.WriteLine error
2525
return 1
2626
with error ->

buckaroo-tests/Lock.fs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,14 @@ let ``Lock.parse works correctly 2`` () =
4848
|> Lock.parse
4949

5050
let expected = {
51-
ManifestHash = "aabbccddee";
51+
ManifestHash = "aabbccddee"
5252
Dependencies =
5353
[
5454
{
55-
Package = PackageIdentifier.Adhoc { Owner = "abc"; Project = "def" };
55+
PackagePath = [], PackageIdentifier.Adhoc { Owner = "abc"; Project = "def" }
5656
Target = {
57-
Folders = [];
58-
Name = "def";
57+
Folders = []
58+
Name = "def"
5959
}
6060
}
6161
]
@@ -117,14 +117,14 @@ let ``Lock.parse works correctly 3`` () =
117117
|> Lock.parse
118118

119119
let expected = {
120-
ManifestHash = "aabbccddee";
120+
ManifestHash = "aabbccddee"
121121
Dependencies =
122122
[
123123
{
124-
Package = PackageIdentifier.Adhoc { Owner = "abc"; Project = "def" };
124+
PackagePath = [], PackageIdentifier.Adhoc { Owner = "abc"; Project = "def" }
125125
Target = {
126-
Folders = [];
127-
Name = "def";
126+
Folders = []
127+
Name = "def"
128128
}
129129
}
130130
]

buckaroo-tests/Manifest.fs

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
module Buckaroo.Tests.Manifest
22

3-
open System
43
open Xunit
54
open FSharpx
65

7-
open Buckaroo
8-
open Buckaroo.Tests
96
open Buckaroo
107
open Buckaroo.Tests
118

@@ -107,18 +104,26 @@ let ``Manifest.toToml roundtrip 1`` () =
107104
[<Fact>]
108105
let ``Manifest.toToml roundtrip 2`` () =
109106
let expected : Manifest = {
110-
Targets = Set [
111-
{Folders=["foo"; "bar"]; Name = "xxx"}
112-
{Folders=["foo"; "bar"]; Name = "yyy"}
113-
]
114-
Tags = Set ["c++"; "java"; "ml"]
107+
Targets =
108+
Set [
109+
{ Folders = [ "foo"; "bar"]; Name = "xxx" }
110+
{ Folders = [ "foo"; "bar"]; Name = "yyy" }
111+
]
112+
Tags = Set [ "c++"; "java"; "ml" ]
115113
Locations = Map.ofSeq [
116-
({Owner = "test"; Project = "test1"}, PackageSource.Http (Map.ofSeq [
117-
(Version.SemVer { SemVer.zero with Major = 2 }, {
114+
({Owner = "testorg1"; Project = "test1"}, PackageSource.Http (Map.ofSeq [
115+
(Version.SemVer { SemVer.zero with Major = 1 }, {
118116
Url = "https://test.com"
119117
StripPrefix = Some "prefix"
120118
Type = Some ArchiveType.Zip
121119
})
120+
]));
121+
({Owner = "testorg2"; Project = "test2"}, PackageSource.Http (Map.ofSeq [
122+
(Version.SemVer { SemVer.zero with Major = 2 }, {
123+
Url = "https://testing.com"
124+
StripPrefix = Some "other_prefix"
125+
Type = Some ArchiveType.Zip
126+
})
122127
]))
123128
]
124129
Dependencies = Set [{
@@ -131,6 +136,33 @@ let ``Manifest.toToml roundtrip 2`` () =
131136
Constraint = Any <|Set[Constraint.Exactly (Version.SemVer SemVer.zero)]
132137
Package = PackageIdentifier.GitHub { Owner = "abc"; Project = "def" }
133138
}]
139+
Overrides = Map.empty
140+
}
141+
142+
let actual = expected |> Manifest.toToml |> Manifest.parse
143+
144+
// 3 new-lines indicates poor formatting
145+
Assert.True (
146+
expected
147+
|> Manifest.toToml
148+
|> String.contains "\n\n\n"
149+
|> not
150+
)
151+
152+
Assert.Equal (Result.Ok expected, actual)
153+
154+
[<Fact>]
155+
let ``Manifest.toToml roundtrip 3`` () =
156+
let expected : Manifest = {
157+
Manifest.zero with
158+
Overrides =
159+
Map.empty
160+
|> Map.add
161+
(PackageIdentifier.GitHub { Owner = "abc"; Project = "def" })
162+
(PackageIdentifier.GitHub { Owner = "abc"; Project = "pqr" })
163+
|> Map.add
164+
(PackageIdentifier.GitHub { Owner = "ijk"; Project = "lmo" })
165+
(PackageIdentifier.GitHub { Owner = "gfh"; Project = "xyz" })
134166
}
135167

136168
let actual = expected |> Manifest.toToml |> Manifest.parse

buckaroo-tests/Paths.fs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,25 @@ open System.IO
55
open Xunit
66
open Buckaroo
77

8-
let private sep = new String([| Path.DirectorySeparatorChar |])
9-
8+
let private sep = String [| Path.DirectorySeparatorChar |]
109

1110
[<Fact>]
12-
let ``Paths.normalize works correctly`` () =
11+
let ``Paths.normalize works correctly`` () =
1312
let cases = [
14-
(".", "");
15-
("a", "a");
16-
("a" + sep + "", "a" + sep + "");
17-
("" + sep + "a" + sep + "", "" + sep + "a" + sep + "");
18-
("a" + sep + " " + sep + "b", "a" + sep + " " + sep + "b");
19-
("" + sep + "a" + sep + "", "" + sep + "a" + sep + "");
20-
("b", "a" + sep + ".." + sep + "b");
21-
("c" + sep + "d", "a" + sep + ".." + sep + "b" + sep + ".." + sep + "c" + sep + "." + sep + "." + sep + "." + sep + "d");
22-
(".." + sep + ".." + sep + ".." + sep + "a" + sep + "b" + sep + "c", ".." + sep + ".." + sep + ".." + sep + "a" + sep + "b" + sep + "c");
23-
(".." + sep + ".." + sep + ".." + sep + "a", ".." + sep + ".." + sep + ".." + sep + "." + sep + "a");
13+
(".", "");
14+
("a", "a");
15+
("a" + sep + "", "a" + sep + "");
16+
("" + sep + "a" + sep + "", "" + sep + "a" + sep + "");
17+
("a" + sep + " " + sep + "b", "a" + sep + " " + sep + "b");
18+
("" + sep + "a" + sep + "", "" + sep + "a" + sep + "");
19+
("b", "a" + sep + ".." + sep + "b");
20+
("c" + sep + "d", "a" + sep + ".." + sep + "b" + sep + ".." + sep + "c" + sep + "." + sep + "." + sep + "." + sep + "d");
21+
(".." + sep + ".." + sep + ".." + sep + "a" + sep + "b" + sep + "c", ".." + sep + ".." + sep + ".." + sep + "a" + sep + "b" + sep + "c");
22+
(".." + sep + ".." + sep + ".." + sep + "a", ".." + sep + ".." + sep + ".." + sep + "." + sep + "a");
2423
(
25-
".." + sep + ".." + sep + ".." + sep + ".." + sep + ".." + sep + ".." + sep + "buckaroo" + sep + "github" + sep + "buckaroo-pm" + sep + "pkg-config-cairo",
24+
".." + sep + ".." + sep + ".." + sep + ".." + sep + ".." + sep + ".." + sep + "buckaroo" + sep + "github" + sep + "buckaroo-pm" + sep + "pkg-config-cairo",
2625
".." + sep + ".." + sep + ".." + sep + ".." + sep + ".." + sep + ".." + sep + "." + sep + "buckaroo" + sep + "github" + sep + "buckaroo-pm" + sep + "pkg-config-cairo"
27-
);
26+
);
2827
]
2928

3029
for (expected, input) in cases do

buckaroo-tests/Solver.fs

Lines changed: 77 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
module Buckaroo.Tests.Solver
22

33
open Xunit
4-
open Buckaroo
54
open FSharp.Control
6-
5+
open Buckaroo
76
open Buckaroo.Console
87
open Buckaroo.Tasks
98
open Buckaroo.Tests
109

1110
type CookBook = List<PackageIdentifier * Set<Version> * Manifest>
12-
type LockBookEntries = List<(string*int) * List<string*int*Set<Version>>>
11+
type LockBookEntries = List<(string * int) * List<string * int * Set<Version>>>
1312
type LockBook = Map<PackageLock, Lock>
1413

1514
let package name = PackageIdentifier.Adhoc {
@@ -18,38 +17,41 @@ let package name = PackageIdentifier.Adhoc {
1817
}
1918

2019
let br b = Version.Git (GitVersion.Branch b)
21-
let rev (x : int) = Version.Git(GitVersion.Revision (x.ToString()))
22-
let ver (x : int) = Version.SemVer {SemVer.zero with Major = x}
20+
let rev (x : int) = Version.Git (GitVersion.Revision (string x))
21+
let ver (x : int) = Version.SemVer { SemVer.zero with Major = x }
2322

24-
let dep (p : string, c: Constraint) : Buckaroo.Dependency = {
25-
Package = package p;
26-
Constraint = c;
23+
let dep (p : string, c: Constraint) : Buckaroo.Dependency =
24+
{
25+
Package = package p
26+
Constraint = c
2727
Targets = None
28-
}
28+
}
2929

30-
let manifest xs = {
31-
Manifest.zero
32-
with Dependencies = xs |> List.map dep |> Set.ofList
33-
}
30+
let manifest xs =
31+
{
32+
Manifest.zero
33+
with Dependencies = xs |> List.map dep |> Set.ofList
34+
}
3435

3536
let lockPackage (p, r, vs) : LockedPackage = {
3637
Versions = Set vs
3738
Location = PackageLock.GitHub {
38-
Package = {Owner = "test"; Project = p};
39-
Revision = r.ToString()
39+
Package = { Owner = "test"; Project = p }
40+
Revision = string r
4041
}
4142
PrivatePackages = Map.empty
4243
}
4344

4445
let packageLock (p, r) : PackageLock = PackageLock.GitHub {
45-
Package = {Owner = "test"; Project = p};
46-
Revision = r.ToString()
46+
Package = { Owner = "test"; Project = p }
47+
Revision = string r
4748
}
4849

4950
let lock deps : Lock = {
5051
ManifestHash = "";
51-
Dependencies = Set[]
52-
Packages = deps
52+
Dependencies = Set []
53+
Packages =
54+
deps
5355
|> Seq.map (fun (name, r, vs) -> (package name, lockPackage (name, r, vs)))
5456
|> Map.ofSeq
5557
}
@@ -61,7 +63,7 @@ let lockBookOf (entries : LockBookEntries) : LockBook =
6163

6264
type TestingSourceExplorer (cookBook : CookBook, lockBook : LockBook) =
6365
interface ISourceExplorer with
64-
member this.FetchVersions (_ : PackageSources) (package: PackageIdentifier) : AsyncSeq<Version> = asyncSeq {
66+
member this.FetchVersions (_ : PackageSources) (package: PackageIdentifier) : AsyncSeq<Version> = asyncSeq {
6567
yield!
6668
cookBook
6769
|> Seq.choose (fun (p, v, _) ->
@@ -123,26 +125,33 @@ let solve (partial : Solution) (cookBook : CookBook) (lockBookEntries : LockBook
123125
let lockBook = lockBookOf lockBookEntries
124126
let console = ConsoleManager (LoggingLevel.Silent)
125127
let context : TaskContext = {
128+
BuildSystem = BuildSystem.Bazel
126129
Console = console
127130
DownloadManager = DownloadManager(console, "/tmp")
128131
GitManager = new GitManager(CacheFirst, console, new GitCli(console), "/tmp")
129132
SourceExplorer = TestingSourceExplorer(cookBook, lockBook)
130133
}
131134

132135
Buckaroo.Solver.solve
133-
context partial
134-
root style
136+
context
137+
partial
138+
root
139+
style
135140
(lockBook |> Map.tryFind (packageLock ("root", 0)))
136141

137142
let getLockedRev (p : string) (r : _) =
138143
match r with
139144
| Ok solution ->
145+
if not (Map.containsKey (package p) solution.Resolutions)
146+
then
147+
failwith (p + " is not in the solution")
148+
140149
let (resolved, _) = solution.Resolutions.[package p]
150+
141151
match resolved.Lock with
142152
| PackageLock.GitHub g -> g.Revision
143153
| _ -> ""
144154
| _ -> ""
145-
()
146155

147156
let isOk (r : _) =
148157
match r with
@@ -605,9 +614,53 @@ let ``Solver can handle the simple triangle case`` () =
605614
let solution =
606615
solve
607616
completeSolution
608-
cookBook lockBookSpec root
617+
cookBook
618+
lockBookSpec
619+
root
620+
ResolutionStyle.Upgrading
621+
|> Async.RunSynchronously
622+
623+
Assert.Equal ("1", getLockedRev "a" solution)
624+
Assert.Equal ("1", getLockedRev "b" solution)
625+
626+
627+
[<Fact>]
628+
let ``Solver can follow overrides`` () =
629+
let cookBook = [
630+
(package "x",
631+
Set [ver 1],
632+
manifest [("b", Exactly (ver 1))])
633+
(package "y",
634+
Set [ver 1],
635+
manifest [])
636+
]
637+
638+
let lockBookSpec = [
639+
(("root", 0), [
640+
("x", 1, Set [ ver 1 ])
641+
("y", 1, Set [ ver 1 ])
642+
])
643+
]
644+
645+
let root = {
646+
manifest [
647+
("a", Exactly (ver 1) )
648+
] with
649+
Overrides =
650+
Map.empty
651+
|> Map.add (package "a") (package "x")
652+
|> Map.add (package "b") (package "y")
653+
}
654+
655+
let solution =
656+
solve
657+
Solution.empty
658+
cookBook
659+
lockBookSpec
660+
root
609661
ResolutionStyle.Upgrading
610662
|> Async.RunSynchronously
611663

664+
// We should find a and b in solution, but they point to locations from x and y
612665
Assert.Equal ("1", getLockedRev "a" solution)
613666
Assert.Equal ("1", getLockedRev "b" solution)

0 commit comments

Comments
 (0)