11module Terminal.PackageDiff exposing
22 ( Config
33 , Options
4- , Error (..)
4+ , LocalError (..)
55 , Result
66 , runLocal
7+ , prettifyLocalError
8+ , GlobalError (..)
79 , runGlobal
10+ , prettifyGlobalError
811 )
912
1013
@@ -28,6 +31,8 @@ import Json.Encode as Json
2831import Json.Decode as Decode exposing (Decoder)
2932import Stream.Extra
3033import Terminal.PackageInstall
34+ import Terminal.Help as Help
35+ import CLI.PrettyPrinter as PP
3136
3237
3338type alias Config =
@@ -46,7 +51,7 @@ type alias Options =
4651 }
4752
4853
49- type Error
54+ type LocalError
5055 = LocalReadProjectOutlineError Terminal.PackageInstall.ReadProjectOutlineError
5156 | LocalCannotDiffApplication
5257 | LocalFetchVersionsFailed Git.Error
@@ -69,7 +74,7 @@ type alias Result =
6974 }
7075
7176
72- runLocal : Config -> Maybe SemanticVersion -> Task Error Result
77+ runLocal : Config -> Maybe SemanticVersion -> Task LocalError Result
7378runLocal config maybeVersion =
7479 Terminal.PackageInstall.readProjectOutline config.fsPermission
7580 |> Task.mapError LocalReadProjectOutlineError
@@ -151,6 +156,32 @@ runLocal config maybeVersion =
151156 )
152157
153158
159+ prettifyLocalError : LocalError -> PP.Document
160+ prettifyLocalError error =
161+ when error is
162+ LocalReadProjectOutlineError outlineError ->
163+ Terminal.PackageInstall.prettifyProjectOutlineError outlineError
164+
165+ LocalCannotDiffApplication ->
166+ Help.report
167+ "CANNOT DIFF APPLICATIONS"
168+ Nothing
169+ ( PP.words "This project is an application, but I can only diff packages!" )
170+
171+ LocalFetchVersionsFailed gitError ->
172+ Git.report
173+ "FAILED TO FETCH PACKAGE VERSIONS"
174+ "I was attempting to fetch the versions for a package"
175+ gitError
176+
177+ LocalInstallError installError ->
178+ Terminal.PackageInstall.prettifyError installError
179+
180+ LocalHiddenProjectError hiddenError ->
181+ prettifyHiddenProjectError hiddenError
182+
183+
184+
154185type InstallHiddenProjectError
155186 = HiddenProjectFileSystemError FileSystem.Error
156187 | HiddenProjectGitCloneError Git.Error
@@ -209,13 +240,71 @@ installHiddenProject config projectPath packageName packageVersion =
209240 )
210241
211242
243+ prettifyHiddenProjectError : InstallHiddenProjectError -> PP.Document
244+ prettifyHiddenProjectError error =
245+ when error is
246+ HiddenProjectFileSystemError fsErr ->
247+ Help.report
248+ "FAILED TO INSTALL PACKAGE"
249+ Nothing
250+ (PP.verticalBlock
251+ [ PP.words "An error occured while I was installing the requested package."
252+ , PP.empty
253+ , PP.words "The error is:"
254+ , PP.empty
255+ , PP.words (FileSystem.errorToString fsErr)
256+ |> PP.indent
257+ ]
258+ )
259+
260+ HiddenProjectGitCloneError gitError ->
261+ Git.report
262+ "FAILED TO FETCH PACKAGE"
263+ "I was attempting to fetch a package from GitHub"
264+ gitError
265+
266+ HiddenProjectReadOutlineError fsErr ->
267+ Help.report
268+ "FAILED TO READ OUTLINE"
269+ Nothing
270+ (PP.verticalBlock
271+ [ PP.words "An error occured when I attempted to read the gren.json of the requested package."
272+ , PP.empty
273+ , PP.words "The error is:"
274+ , PP.empty
275+ , PP.words (FileSystem.errorToString fsErr)
276+ |> PP.indent
277+ ]
278+ )
279+
280+ HiddenProjectOutlineDecodeError jsonError ->
281+ Help.report
282+ "FAILED TO READ OUTLINE"
283+ Nothing
284+ (PP.verticalBlock
285+ [ PP.words "An error occured when I attempted to read the gren.json of the requested package."
286+ , PP.empty
287+ , PP.words "The error is:"
288+ , PP.empty
289+ , PP.words (Decode.errorToString jsonError)
290+ |> PP.indent
291+ ]
292+ )
293+
294+ HiddenProjectInstallError installError ->
295+ Terminal.PackageInstall.prettifyError installError
296+
297+
298+
212299type GlobalError
213300 = GlobalReadProjectOutlineError Terminal.PackageInstall.ReadProjectOutlineError
214301 | GlobalHiddenProjectError InstallHiddenProjectError
215302
216303
217304runGlobal : Config -> PackageName -> SemanticVersion -> SemanticVersion -> Task GlobalError Result
218305runGlobal config packageName lowerVersion upperVersion =
306+ -- TODO: Store in global cache
307+ -- TODO: Perform application check here when packageName isn't specified
219308 Terminal.PackageInstall.readProjectOutline config.fsPermission
220309 |> Task.mapError GlobalReadProjectOutlineError
221310 |> Task.andThen
@@ -239,3 +328,13 @@ runGlobal config packageName lowerVersion upperVersion =
239328 (installHiddenProject config projectPath packageName upperVersion)
240329 |> Task.mapError GlobalHiddenProjectError
241330 )
331+
332+
333+ prettifyGlobalError : GlobalError -> PP.Document
334+ prettifyGlobalError error =
335+ when error is
336+ GlobalReadProjectOutlineError outlineError ->
337+ Terminal.PackageInstall.prettifyProjectOutlineError outlineError
338+
339+ GlobalHiddenProjectError hiddenError ->
340+ prettifyHiddenProjectError hiddenError
0 commit comments