Browse Source

Fix #181 by dropping `exit(1)` (#182)

Seems that Lwt 5 throws a weird error when using `exit(1)` inside a
promise. So instead of exiting in the command, making all executable
modules a function that returns a `result((), status_code)` is a better fit.

Relates to: https://github.com/ocsigen/lwt/issues/758
remotes/origin/add-simple-redirecting-site
Gal Schlezinger 5 years ago committed by GitHub
parent
commit
01601f5be3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      executable/Alias.re
  2. 2
      executable/Env.re
  3. 30
      executable/FnmApp.re
  4. 8
      executable/Install.re
  5. 5
      executable/ListLocal.re
  6. 2
      executable/ListRemote.re
  7. 4
      executable/Uninstall.re
  8. 13
      executable/Use.re

8
executable/Alias.re

@ -16,9 +16,8 @@ let run = (~name, ~version) => {
versionPath versionPath
</Pastel>, </Pastel>,
); );
exit(1); Lwt.return_error(1);
}; } else {
Logger.info( Logger.info(
<Pastel> <Pastel>
"Aliasing " "Aliasing "
@ -30,5 +29,6 @@ let run = (~name, ~version) => {
let%lwt () = Versions.Aliases.set(~alias=name, ~versionPath); let%lwt () = Versions.Aliases.set(~alias=name, ~versionPath);
Lwt.return(); Lwt.return_ok();
};
}; };

2
executable/Env.re

@ -158,5 +158,5 @@ let run =
printUseOnCd(~shell) |> Console.log; printUseOnCd(~shell) |> Console.log;
}; };
Lwt.return(); Lwt.return_ok();
}; };

30
executable/FnmApp.re

@ -1,14 +1,23 @@
let version = Fnm.Fnm__Package.version; let version = Fnm.Fnm__Package.version;
let runCmd = lwt => {
lwt
|> Lwt_main.run
|> (
fun
| Error(err_code) => exit(err_code)
| Ok () => ()
);
};
module Commands = { module Commands = {
let use = (version, quiet) => Lwt_main.run(Use.run(~version, ~quiet)); let use = (version, quiet) => Use.run(~version, ~quiet) |> runCmd;
let alias = (version, name) => Lwt_main.run(Alias.run(~name, ~version)); let alias = (version, name) => Alias.run(~name, ~version) |> runCmd;
let default = version => let default = version => Alias.run(~name="default", ~version) |> runCmd;
Lwt_main.run(Alias.run(~name="default", ~version)); let listRemote = () => ListRemote.run() |> runCmd;
let listRemote = () => Lwt_main.run(ListRemote.run()); let listLocal = () => ListLocal.run() |> runCmd;
let listLocal = () => Lwt_main.run(ListLocal.run()); let install = version => Install.run(~version) |> runCmd;
let install = version => Lwt_main.run(Install.run(~version)); let uninstall = version => Uninstall.run(~version) |> runCmd;
let uninstall = version => Lwt_main.run(Uninstall.run(~version));
let env = let env =
( (
isFishShell, isFishShell,
@ -19,7 +28,6 @@ module Commands = {
useOnCd, useOnCd,
logLevel, logLevel,
) => ) =>
Lwt_main.run(
Env.run( Env.run(
~forceShell=Fnm.System.Shell.(isFishShell ? Some(Fish) : shell), ~forceShell=Fnm.System.Shell.(isFishShell ? Some(Fish) : shell),
~multishell=isMultishell, ~multishell=isMultishell,
@ -27,8 +35,8 @@ module Commands = {
~fnmDir, ~fnmDir,
~useOnCd, ~useOnCd,
~logLevel, ~logLevel,
), )
); |> runCmd;
}; };
open Cmdliner; open Cmdliner;

8
executable/Install.re

@ -123,7 +123,7 @@ let main = (~version as versionName) => {
Lwt.return_unit; Lwt.return_unit;
}; };
Lwt.return(); Lwt.return_ok();
}; };
let run = (~version) => let run = (~version) =>
@ -139,7 +139,7 @@ let run = (~version) =>
<Pastel color=Pastel.Cyan> {System.NodeArch.toString(arch)} </Pastel> <Pastel color=Pastel.Cyan> {System.NodeArch.toString(arch)} </Pastel>
</Pastel>, </Pastel>,
); );
exit(1); Lwt.return_error(1);
| Versions.Version_not_found(version) => | Versions.Version_not_found(version) =>
Logger.error( Logger.error(
<Pastel> <Pastel>
@ -148,7 +148,7 @@ let run = (~version) =>
" not found!" " not found!"
</Pastel>, </Pastel>,
); );
exit(1); Lwt.return_error(1);
| VersionListingLts.Problem_with_finding_latest_lts( | VersionListingLts.Problem_with_finding_latest_lts(
VersionListingLts.Cant_find_latest_lts, VersionListingLts.Cant_find_latest_lts,
) => ) =>
@ -163,5 +163,5 @@ let run = (~version) =>
reason reason
</Pastel>, </Pastel>,
); );
exit(1); Lwt.return_error(1);
}; };

5
executable/ListLocal.re

@ -31,12 +31,13 @@ let main = () =>
Console.log(<Pastel ?color> "* " {version.name} aliases </Pastel>); Console.log(<Pastel ?color> "* " {version.name} aliases </Pastel>);
}); });
Lwt.return(); Lwt.return_ok();
} }
); );
let run = () => let run = () =>
try%lwt(main()) { try%lwt(main()) {
| Cant_read_local_versions => | Cant_read_local_versions =>
Console.log("No versions installed!") |> Lwt.return Console.log("No versions installed!");
Lwt.return_ok();
}; };

2
executable/ListRemote.re

@ -22,5 +22,5 @@ let run = () => {
Console.log(<Pastel ?color> str </Pastel>); Console.log(<Pastel ?color> str </Pastel>);
}); });
Lwt.return(); Lwt.return_ok();
}; };

4
executable/Uninstall.re

@ -17,7 +17,7 @@ let run = (~version) => {
" is not installed." " is not installed."
</Pastel>, </Pastel>,
); );
exit(1); Lwt.return_error(1);
| Some(installedVersion) => | Some(installedVersion) =>
Logger.debug( Logger.debug(
<Pastel> <Pastel>
@ -37,6 +37,6 @@ let run = (~version) => {
" has correctly been removed." " has correctly been removed."
</Pastel>, </Pastel>,
); );
Lwt.return_unit; Lwt.return_ok();
}; };
}; };

13
executable/Use.re

@ -92,7 +92,8 @@ let main = (~version as providedVersion, ~quiet) => {
| Some(version) => Lwt.return(version) | Some(version) => Lwt.return(version)
| None => Dotfiles.getVersion() | None => Dotfiles.getVersion()
}; };
switchVersion(~version, ~quiet); let%lwt () = switchVersion(~version, ~quiet);
Lwt.return_ok();
}; };
let rec askIfInstall = (~version, ~quiet, retry) => { let rec askIfInstall = (~version, ~quiet, retry) => {
@ -107,7 +108,9 @@ let rec askIfInstall = (~version, ~quiet, retry) => {
let%lwt _ = Install.run(~version); let%lwt _ = Install.run(~version);
retry(~version, ~quiet); retry(~version, ~quiet);
| "N" | "N"
| "n" => Lwt_io.write_line(Lwt_io.stderr, "not installing!") | "n" =>
let%lwt () = Lwt_io.write_line(Lwt_io.stderr, "not installing!");
Lwt.return_ok();
| _ => | _ =>
let%lwt _ = let%lwt _ =
Lwt_io.write_line(Lwt_io.stderr, "Invalid response. Please try again:"); Lwt_io.write_line(Lwt_io.stderr, "Invalid response. Please try again:");
@ -128,7 +131,7 @@ let rec run = (~version, ~quiet) =>
if (Fnm.Config.FNM_INTERACTIVE_CLI.get()) { if (Fnm.Config.FNM_INTERACTIVE_CLI.get()) {
askIfInstall(~version, ~quiet, run); askIfInstall(~version, ~quiet, run);
} else { } else {
exit(1); Lwt.return_error(1);
}; };
| Dotfiles.Conflicting_Dotfiles_Found(v1, v2) => | Dotfiles.Conflicting_Dotfiles_Found(v1, v2) =>
error( error(
@ -142,7 +145,7 @@ let rec run = (~version, ~quiet) =>
v2 v2
</Pastel>, </Pastel>,
); );
exit(1); Lwt.return_error(1);
| Dotfiles.Version_Not_Provided => | Dotfiles.Version_Not_Provided =>
error( error(
~quiet, ~quiet,
@ -150,5 +153,5 @@ let rec run = (~version, ~quiet) =>
"No .nvmrc or .node-version file was found in the current directory. Please provide a version number." "No .nvmrc or .node-version file was found in the current directory. Please provide a version number."
</Pastel>, </Pastel>,
); );
exit(1); Lwt.return_error(1);
}; };

Loading…
Cancel
Save