Skip to content

Commit 4584bd8

Browse files
authored
Merge pull request #263 from LoopPerfect/bugfix/262
bugfix/262
2 parents cc38894 + d8e4484 commit 4584bd8

File tree

4 files changed

+99
-37
lines changed

4 files changed

+99
-37
lines changed

buckaroo-tests/Command.fs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,33 @@ let private defaultLoggingLevel = LoggingLevel.Info
88

99
let private verboseLoggingLevel = LoggingLevel.Trace
1010

11+
let private abcDef = Adhoc { Owner = "abc"; Project = "def" }
12+
let private ijkXyz = GitHub { Owner = "ijk"; Project = "xyz" }
13+
1114
[<Fact>]
1215
let ``Command.parse works correctly`` () =
1316
let cases = [
1417
(Result.Ok (Command.Init, defaultLoggingLevel), "init");
18+
(Result.Ok (Command.Install, defaultLoggingLevel), " install ");
1519
(Result.Ok (Command.Resolve, defaultLoggingLevel), "resolve");
1620
(Result.Ok (Command.Resolve, verboseLoggingLevel), "resolve --verbose");
21+
(Result.Ok (Command.UpgradeDependencies [], defaultLoggingLevel), "upgrade");
22+
(Result.Ok (Command.UpgradeDependencies [ abcDef ], defaultLoggingLevel), "upgrade abc/def");
23+
(Result.Ok (Command.UpgradeDependencies [], verboseLoggingLevel), " upgrade --verbose ");
24+
(Result.Ok (Command.UpgradeDependencies [ abcDef ], verboseLoggingLevel), "upgrade abc/def --verbose ");
25+
26+
(
27+
Result.Ok (Command.UpgradeDependencies [ abcDef; ijkXyz ], verboseLoggingLevel),
28+
"upgrade abc/def github.com/ijk/xyz --verbose "
29+
);
1730
]
1831

1932
for (expected, input) in cases do
20-
Assert.Equal(expected, Command.parse input)
33+
let actual = Command.parse input
34+
35+
match actual with
36+
| Result.Error error ->
37+
System.Console.WriteLine (error + "\nfor \"" + input + "\"")
38+
| _ -> ()
39+
40+
Assert.Equal(expected, actual)

buckaroo/Command.fs

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
namespace Buckaroo
22

3-
open Tasks
4-
open Console
53
open FSharp.Control
4+
open Buckaroo.Console
5+
open Buckaroo.Tasks
66

77
type Command =
88
| Start
@@ -22,6 +22,7 @@ module Command =
2222
open System
2323
open System.IO
2424
open FParsec
25+
open Buckaroo.RichOutput
2526

2627
let verboseParser : Parser<bool, Unit> = parse {
2728
let! maybeSkip =
@@ -81,23 +82,31 @@ module Command =
8182
do! CharParsers.spaces
8283
do! CharParsers.skipString "add"
8384
do! CharParsers.spaces1
85+
8486
let! deps = Primitives.sepEndBy1 Dependency.parser CharParsers.spaces1
87+
8588
return AddDependencies deps
8689
}
8790

8891
let upgradeDepenenciesParser = parse {
89-
do! CharParsers.spaces
9092
do! CharParsers.skipString "upgrade"
91-
do! CharParsers.spaces1
92-
let! packages = Primitives.sepEndBy PackageIdentifier.parser CharParsers.spaces1
93+
94+
let! packages =
95+
(attempt >> Primitives.many)
96+
<| parse {
97+
do! CharParsers.spaces1
98+
return! PackageIdentifier.parser
99+
}
100+
93101
return UpgradeDependencies packages
94102
}
95103

96104
let removeDependenciesParser = parse {
97105
do! CharParsers.spaces
98106
do! CharParsers.skipString "remove"
99107
do! CharParsers.spaces1
100-
let! deps = Primitives.sepEndBy1 PackageIdentifier.parser CharParsers.spaces1
108+
let! deps = Primitives.sepBy PackageIdentifier.parser CharParsers.spaces1
109+
do! CharParsers.spaces
101110
return RemoveDependencies deps
102111
}
103112

@@ -109,6 +118,8 @@ module Command =
109118
}
110119

111120
let parser = parse {
121+
do! CharParsers.spaces
122+
112123
let! command =
113124
resolveParser
114125
<|> upgradeDepenenciesParser
@@ -122,9 +133,15 @@ module Command =
122133
<|> showCompletionsParser
123134
<|> startParser
124135

136+
do! CharParsers.spaces
137+
125138
let! isVerbose = verboseParser
126139

127-
return (command, if isVerbose then LoggingLevel.Trace else LoggingLevel.Info)
140+
do! CharParsers.spaces
141+
142+
let loggingLevel = if isVerbose then LoggingLevel.Trace else LoggingLevel.Info
143+
144+
return (command, loggingLevel)
128145
}
129146

130147
let parse (x : string) =
@@ -133,8 +150,6 @@ module Command =
133150
| Failure(error, _, _) -> Result.Error error
134151

135152
let add (context : Tasks.TaskContext) dependencies = async {
136-
let sourceExplorer = context.SourceExplorer
137-
138153
let! manifest = Tasks.readManifest "."
139154
let newManifest = {
140155
manifest with
@@ -143,50 +158,32 @@ module Command =
143158
|> Seq.append dependencies
144159
|> Set.ofSeq;
145160
}
161+
146162
if manifest = newManifest
147-
then return ()
163+
then
164+
return ()
148165
else
149166
let! maybeLock = async {
150-
if File.Exists(Constants.LockFileName)
167+
if File.Exists (Constants.LockFileName)
151168
then
152169
let! lock = Tasks.readLock
153170
return Some lock
154171
else
155172
return None
156173
}
174+
157175
let! resolution = Solver.solve context Solution.empty newManifest ResolutionStyle.Quick maybeLock
176+
158177
match resolution with
159178
| Resolution.Ok solution ->
160179
do! Tasks.writeManifest newManifest
161180
do! Tasks.writeLock (Lock.fromManifestAndSolution newManifest solution)
162181
do! InstallCommand.task context
163182
| _ -> ()
164-
System.Console.WriteLine ("Success. ")
165-
return ()
166-
}
167183

168-
let upgrade context (packages : List<PackageIdentifier>) = async {
169-
// TODO: Roll-back on failure!
170-
let! maybeLock = async {
171-
if File.Exists(Constants.LockFileName)
172-
then
173-
let! lock = Tasks.readLock
174-
let! partial =
175-
if packages |> Seq.isEmpty
176-
then async { return Solution.empty }
177-
else async {
178-
let! solution = Solver.fromLock context.SourceExplorer lock
179-
return packages |> Set.ofList |> Solver.unlock solution
180-
}
181-
182-
do! ResolveCommand.task context partial ResolutionStyle.Upgrading
183-
do! InstallCommand.task context
184-
return None
185-
else
186-
return None
187-
}
184+
System.Console.WriteLine ("Success. ")
188185

189-
return ()
186+
return ()
190187
}
191188

192189
let init context = async {
@@ -212,7 +209,7 @@ module Command =
212209
| Resolve -> ResolveCommand.task context Solution.empty ResolutionStyle.Quick
213210
| Install -> InstallCommand.task context
214211
| Quickstart -> QuickstartCommand.task context
215-
| UpgradeDependencies dependencies -> upgrade context dependencies
212+
| UpgradeDependencies dependencies -> UpgradeCommand.task context dependencies
216213
| AddDependencies dependencies -> AddCommand.task context dependencies
217214
| RemoveDependencies dependencies -> RemoveCommand.task context dependencies
218215
| ShowCompletions -> ShowCompletions.task context

buckaroo/UpgradeCommand.fs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
module Buckaroo.UpgradeCommand
2+
3+
open System
4+
open System.IO
5+
open Buckaroo
6+
open Buckaroo.Tasks
7+
open Buckaroo.RichOutput
8+
9+
let task context (packages : List<PackageIdentifier>) = async {
10+
if File.Exists (Constants.LockFileName)
11+
then
12+
let! lock = Tasks.readLock
13+
let! partial =
14+
if packages |> Seq.isEmpty
15+
then async { return Solution.empty }
16+
else
17+
async {
18+
let! solution = Solver.fromLock context.SourceExplorer lock
19+
20+
return
21+
packages
22+
|> Set.ofList
23+
|> Solver.unlock solution
24+
}
25+
26+
do! ResolveCommand.task context partial ResolutionStyle.Upgrading
27+
do! InstallCommand.task context
28+
29+
return ()
30+
else
31+
context.Console.Write (
32+
(
33+
"warning "
34+
|> text
35+
|> foreground ConsoleColor.Yellow
36+
) +
37+
"There is no lock-file to upgrade. A fresh lock-file will be generated. "
38+
)
39+
40+
do! ResolveCommand.task context Solution.empty ResolutionStyle.Upgrading
41+
do! InstallCommand.task context
42+
43+
return ()
44+
}

buckaroo/buckaroo.fsproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
<Compile Include="RemoveCommand.fs" />
5252
<Compile Include="QuickstartCommand.fs" />
5353
<Compile Include="AddCommand.fs" />
54+
<Compile Include="UpgradeCommand.fs" />
5455
<Compile Include="VersionCommand.fs" />
5556
<Compile Include="ShowCompletions.fs" />
5657
<Compile Include="Command.fs" />

0 commit comments

Comments
 (0)