Skip to content

Commit d053dc2

Browse files
committed
Properly type terminal command errors.
1 parent c190f74 commit d053dc2

File tree

7 files changed

+147
-82
lines changed

7 files changed

+147
-82
lines changed

src/Main.gren

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -686,8 +686,8 @@ parseUserArgs model compilerPath =
686686
, stdin = model.stdin
687687
}
688688
projectOutline
689+
|> Task.mapError Debug.toString
689690
)
690-
|> Task.mapError Debug.toString
691691
|> Task.map
692692
(\backendFlags ->
693693
Compiler.Backend.run
@@ -723,8 +723,8 @@ parseUserArgs model compilerPath =
723723
, stdin = model.stdin
724724
}
725725
projectOutline
726+
|> Task.mapError Debug.toString
726727
)
727-
|> Task.mapError Debug.toString
728728
|> Task.map
729729
(\backendFlags ->
730730
Compiler.Backend.run
@@ -760,6 +760,7 @@ parseUserArgs model compilerPath =
760760
, stdin = model.stdin
761761
}
762762
Nothing
763+
|> Task.mapError Debug.toString
763764

764765
CliParser.DiffVersion version ->
765766
Terminal.PackageDiff.runLocal
@@ -771,6 +772,7 @@ parseUserArgs model compilerPath =
771772
, stdin = model.stdin
772773
}
773774
(Just version)
775+
|> Task.mapError Debug.toString
774776

775777
CliParser.DiffRange { lower, upper } ->
776778
Terminal.PackageInstall.readProjectOutline model.fsPermission
@@ -794,6 +796,7 @@ parseUserArgs model compilerPath =
794796
pkgOutline.name
795797
lower
796798
upper
799+
|> Task.mapError Debug.toString
797800
)
798801

799802
CliParser.DiffGlobal { package, lower, upper } ->
@@ -808,9 +811,9 @@ parseUserArgs model compilerPath =
808811
package
809812
lower
810813
upper
814+
|> Task.mapError Debug.toString
811815
in
812816
diffTask
813-
|> Task.mapError Debug.toString
814817
|> Task.map
815818
(\backendFlags ->
816819
Compiler.Backend.run

src/Terminal/Init.gren

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@ type Error
4444
| PromptError Stream.Error
4545
| CouldNotRetrieveVersions { packageName : PackageName, error : Git.Error }
4646
| NoVersionFound PackageName
47-
-- TODO
48-
| InstallError
47+
| InstallError PackageInstall.PackageInstallError
4948

5049

5150
run : Config -> Cmd a
@@ -208,7 +207,7 @@ generateGrenJson config deps =
208207
{ projectPath = Path.empty
209208
, outline = outline
210209
}
211-
|> Task.mapError (\_ -> InstallError)
210+
|> Task.mapError InstallError
212211
|> Task.andThen
213212
(\resolution ->
214213
let
@@ -339,5 +338,6 @@ displayError printOpts err =
339338
]
340339
)
341340

342-
InstallError ->
341+
InstallError _ ->
342+
-- TODO
343343
PP.text "Install error"

src/Terminal/PackageBump.gren

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ type alias Options =
4646

4747

4848
type Error
49-
= ErrorDebug String
49+
= CannotBumpApplications
50+
| VersionFetchError Git.Error
51+
| NoPublishedVersions
52+
| CurrentVersionUnpublished
53+
| InstallError Terminal.PackageInstall.PackageInstallError
54+
| PreviousPackageCorruption
5055

5156

5257
type alias Result =
@@ -65,22 +70,22 @@ type alias Result =
6570
}
6671

6772

68-
run : Config -> Options -> Task String Result
73+
run : Config -> Options -> Task Error Result
6974
run config { projectPath, outline } =
7075
when outline is
7176
Outline.App _ ->
72-
Task.fail "Can only use bump on packages"
77+
Task.fail CannotBumpApplications
7378

7479
Outline.Pkg pkgOutline ->
7580
Git.fetchVersions config.cpPermission pkgOutline.name
76-
|> Task.mapError Debug.toString
81+
|> Task.mapError VersionFetchError
7782
|> Task.andThen
7883
(\knownVersions ->
7984
if Array.isEmpty knownVersions then
80-
Task.fail "No published versions found, you probably want 1.0.0"
85+
Task.fail NoPublishedVersions
8186

8287
else if not <| Array.member pkgOutline.version knownVersions then
83-
Task.fail "The version you're bumping from doesn't exist!"
88+
Task.fail CurrentVersionUnpublished
8489

8590
else
8691
Terminal.PackageInstall.run
@@ -92,7 +97,7 @@ run config { projectPath, outline } =
9297
, stdin = config.stdin
9398
}
9499
{ projectPath = projectPath, outline = outline }
95-
|> Task.mapError Debug.toString
100+
|> Task.mapError InstallError
96101
|> Task.map
97102
(\resolved ->
98103
{ packageName = pkgOutline.name
@@ -111,20 +116,20 @@ run config { projectPath, outline } =
111116
FileSystem.remove config.fsPermission { recursive = True } repoPath
112117
|> Task.onError (\_ -> Task.succeed repoPath) -- Probably because directory doesn't exist, that's fine
113118
|> Task.andThen (\_ -> Git.clonePackage config.cpPermission repoPath packageName packageVersion)
114-
|> Task.mapError (\{ stderr } -> Maybe.withDefault "" <| Bytes.toString stderr)
119+
|> Task.mapError (\_ -> PreviousPackageCorruption)
115120
|> Task.andThen
116121
(\_ ->
117122
Path.append (Path.fromPosixString "gren.json") repoPath
118123
|> Terminal.PackageInstall.readOutline config.fsPermission
119-
|> Task.mapError Debug.toString
124+
|> Task.mapError (\_ -> PreviousPackageCorruption)
120125
|> Task.andThen
121126
(\result ->
122127
when result is
123128
Ok decodedOutline ->
124129
Task.succeed decodedOutline
125130

126131
Err err ->
127-
Task.fail (Debug.toString err)
132+
Task.fail PreviousPackageCorruption
128133
)
129134
)
130135
|> Task.andThen
@@ -138,7 +143,7 @@ run config { projectPath, outline } =
138143
, stdin = config.stdin
139144
}
140145
{ projectPath = repoPath, outline = publishedOutline }
141-
|> Task.mapError Debug.toString
146+
|> Task.mapError (\_ -> PreviousPackageCorruption)
142147
|> Task.map
143148
(\resolved ->
144149
{ currentPackage = currentPackage

src/Terminal/PackageDiff.gren

Lines changed: 46 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,12 @@ type alias Options =
4747

4848

4949
type Error
50-
= ErrorDebug String
50+
= LocalReadProjectOutlineError Terminal.PackageInstall.ReadProjectOutlineError
51+
| LocalCannotDiffApplication
52+
| LocalFetchVersionsFailed Git.Error
53+
| LocalNoPublishedVersions
54+
| LocalInstallError Terminal.PackageInstall.PackageInstallError
55+
| LocalHiddenProjectError InstallHiddenProjectError
5156

5257

5358
type alias Result =
@@ -65,15 +70,15 @@ type alias Result =
6570
}
6671

6772

68-
runLocal : Config -> Maybe SemanticVersion -> Task String Result
73+
runLocal : Config -> Maybe SemanticVersion -> Task Error Result
6974
runLocal config maybeVersion =
7075
Terminal.PackageInstall.readProjectOutline config.fsPermission
71-
|> Task.mapError Debug.toString
76+
|> Task.mapError LocalReadProjectOutlineError
7277
|> Task.andThen
7378
(\{ projectPath, outline } ->
7479
when outline is
7580
Outline.App _ ->
76-
Task.fail "Can only use bump on packages"
81+
Task.fail LocalCannotDiffApplication
7782

7883
Outline.Pkg pkgOutline ->
7984
let
@@ -84,11 +89,11 @@ runLocal config maybeVersion =
8489

8590
Nothing ->
8691
Git.fetchVersions config.cpPermission pkgOutline.name
87-
|> Task.mapError Debug.toString
92+
|> Task.mapError LocalFetchVersionsFailed
8893
|> Task.andThen
8994
(\knownVersions ->
9095
if Array.isEmpty knownVersions then
91-
Task.fail "No published versions"
96+
Task.fail LocalNoPublishedVersions
9297

9398
else
9499
Array.last knownVersions
@@ -112,7 +117,7 @@ runLocal config maybeVersion =
112117
, stdin = config.stdin
113118
}
114119
{ projectPath = projectPath, outline = outline }
115-
|> Task.mapError Debug.toString
120+
|> Task.mapError LocalInstallError
116121
|> Task.map
117122
(\resolved ->
118123
{ projectPath = projectPath
@@ -126,6 +131,7 @@ runLocal config maybeVersion =
126131
|> Task.andThen
127132
(\{ projectPath, packageName, packageVersion, currentPackage } ->
128133
installHiddenProject config projectPath packageName packageVersion
134+
|> Task.mapError LocalHiddenProjectError
129135
|> Task.map
130136
(\resolved ->
131137
{ projectPath = projectPath
@@ -151,29 +157,47 @@ runLocal config maybeVersion =
151157
)
152158

153159

154-
installHiddenProject : Config -> Path -> PackageName -> SemanticVersion -> Task String Terminal.PackageInstall.PackageResolution
160+
type InstallHiddenProjectError
161+
= HiddenProjectFileSystemError FileSystem.Error
162+
| HiddenProjectGitCloneError ChildProcess.FailedRun
163+
| HiddenProjectReadOutlineError FileSystem.Error
164+
| HiddenProjectOutlineDecodeError Decode.Error
165+
| HiddenProjectInstallError Terminal.PackageInstall.PackageInstallError
166+
167+
168+
installHiddenProject : Config -> Path -> PackageName -> SemanticVersion -> Task InstallHiddenProjectError Terminal.PackageInstall.PackageResolution
155169
installHiddenProject config projectPath packageName packageVersion =
156170
let
157171
repoPath =
158172
Terminal.PackageInstall.localRepoPath packageName packageVersion projectPath
159173
in
160174
FileSystem.remove config.fsPermission { recursive = True } repoPath
161-
|> Task.onError (\_ -> Task.succeed repoPath) -- Probably because directory doesn't exist, that's fine
162-
|> Task.andThen (\_ -> Git.clonePackage config.cpPermission repoPath packageName packageVersion)
163-
|> Task.mapError (\{ stderr } -> Maybe.withDefault "" <| Bytes.toString stderr)
175+
|> Task.onError
176+
(\err ->
177+
if FileSystem.errorIsNoSuchFileOrDirectory err then
178+
Task.succeed repoPath
179+
180+
else
181+
Task.fail <| HiddenProjectFileSystemError err
182+
)
183+
|> Task.andThen
184+
(\_ ->
185+
Git.clonePackage config.cpPermission repoPath packageName packageVersion
186+
|> Task.mapError HiddenProjectGitCloneError
187+
)
164188
|> Task.andThen
165189
(\_ ->
166190
Path.append (Path.fromPosixString "gren.json") repoPath
167191
|> Terminal.PackageInstall.readOutline config.fsPermission
168-
|> Task.mapError Debug.toString
192+
|> Task.mapError HiddenProjectReadOutlineError
169193
|> Task.andThen
170194
(\result ->
171195
when result is
172196
Ok decodedOutline ->
173197
Task.succeed decodedOutline
174198

175199
Err err ->
176-
Task.fail (Debug.toString err)
200+
Task.fail <| HiddenProjectOutlineDecodeError err
177201
)
178202
)
179203
|> Task.andThen
@@ -187,14 +211,19 @@ installHiddenProject config projectPath packageName packageVersion =
187211
, stdin = config.stdin
188212
}
189213
{ projectPath = repoPath, outline = publishedOutline }
190-
|> Task.mapError Debug.toString
214+
|> Task.mapError HiddenProjectInstallError
191215
)
192216

193217

194-
runGlobal : Config -> PackageName -> SemanticVersion -> SemanticVersion -> Task String Result
218+
type GlobalError
219+
= GlobalReadProjectOutlineError Terminal.PackageInstall.ReadProjectOutlineError
220+
| GlobalHiddenProjectError InstallHiddenProjectError
221+
222+
223+
runGlobal : Config -> PackageName -> SemanticVersion -> SemanticVersion -> Task GlobalError Result
195224
runGlobal config packageName lowerVersion upperVersion =
196225
Terminal.PackageInstall.readProjectOutline config.fsPermission
197-
|> Task.mapError Debug.toString
226+
|> Task.mapError GlobalReadProjectOutlineError
198227
|> Task.andThen
199228
(\{ projectPath } ->
200229
Task.map2
@@ -214,4 +243,5 @@ runGlobal config packageName lowerVersion upperVersion =
214243
)
215244
(installHiddenProject config projectPath packageName lowerVersion)
216245
(installHiddenProject config projectPath packageName upperVersion)
246+
|> Task.mapError GlobalHiddenProjectError
217247
)

src/Terminal/PackageOutdated.gren

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,8 @@ type alias Options =
4141

4242

4343
type Error
44-
= PackageInstallNoProject FileSystem.Error
45-
| PackageInstallNoGrenJson FileSystem.Error
46-
| PackageInstallInvalidGrenJson Decode.Error
47-
| PackageInstallDebug String
44+
= FailedToFetchVersions { package : PackageName, error : Git.Error }
45+
| PackageHasNoVersions PackageName
4846

4947

5048
run : Config -> Options -> Task Error {}
@@ -83,14 +81,28 @@ run config { projectPath, outline } =
8381
let
8482
task =
8583
Git.fetchVersions config.cpPermission packageName
84+
|> Task.mapError
85+
(\err ->
86+
FailedToFetchVersions
87+
{ package = packageName
88+
, error = err
89+
}
90+
)
8691
|> Task.map (\vs -> Array.keepIf (\v -> SemanticVersion.compare v (SemanticVersionRange.lowerBound versionRange) == GT) vs)
8792
|> Task.map (\vs -> { name = packageName, versions = vs })
93+
|> Task.andThen
94+
(\result ->
95+
if Array.isEmpty result.versions then
96+
Task.fail <| PackageHasNoVersions packageName
97+
98+
else
99+
Task.succeed result
100+
)
88101
in
89102
Array.pushLast task tasks
90103
)
91104
[]
92105
|> Task.concurrent
93-
|> Task.mapError (\_ -> PackageInstallDebug "failed to get versions")
94106
|> Task.map
95107
(\vs ->
96108
Array.mapAndKeepJust
@@ -115,9 +127,10 @@ run config { projectPath, outline } =
115127
else
116128
let
117129
plan =
118-
"The plan is to update the following dependencies:\n\n"
130+
"There are new versions of the following dependencies:\n\n"
119131
++ (Array.foldl (\package acc -> acc ++ " " ++ PackageName.toString package.name ++ " " ++ SemanticVersion.toString package.version ++ "\n") "" vs)
120-
++ "\nDo you want me to update the gren.json file accordingly? [Y/n]: "
121132
in
122133
Stream.Log.line config.stdout plan
123134
)
135+
-- TODO: Might want to check if dependencies are compatible
136+
-- TODO: Ask user to auto-update dependencies

0 commit comments

Comments
 (0)