11namespace Buckaroo
22
3- open Tasks
4- open Console
53open FSharp.Control
4+ open Buckaroo.Console
5+ open Buckaroo.Tasks
66
77type 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
0 commit comments