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. 26
      executable/Alias.re
  2. 2
      executable/Env.re
  3. 44
      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

26
executable/Alias.re

@ -16,19 +16,19 @@ let run = (~name, ~version) => { @@ -16,19 +16,19 @@ let run = (~name, ~version) => {
versionPath
</Pastel>,
);
exit(1);
};
Logger.info(
<Pastel>
"Aliasing "
<Pastel color=Pastel.Cyan> name </Pastel>
" to "
<Pastel color=Pastel.Cyan> version </Pastel>
</Pastel>,
);
Lwt.return_error(1);
} else {
Logger.info(
<Pastel>
"Aliasing "
<Pastel color=Pastel.Cyan> name </Pastel>
" to "
<Pastel color=Pastel.Cyan> version </Pastel>
</Pastel>,
);
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 = @@ -158,5 +158,5 @@ let run =
printUseOnCd(~shell) |> Console.log;
};
Lwt.return();
Lwt.return_ok();
};

44
executable/FnmApp.re

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

8
executable/Install.re

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

5
executable/ListLocal.re

@ -31,12 +31,13 @@ let main = () => @@ -31,12 +31,13 @@ let main = () =>
Console.log(<Pastel ?color> "* " {version.name} aliases </Pastel>);
});
Lwt.return();
Lwt.return_ok();
}
);
let run = () =>
try%lwt(main()) {
| 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 = () => { @@ -22,5 +22,5 @@ let run = () => {
Console.log(<Pastel ?color> str </Pastel>);
});
Lwt.return();
Lwt.return_ok();
};

4
executable/Uninstall.re

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

13
executable/Use.re

@ -92,7 +92,8 @@ let main = (~version as providedVersion, ~quiet) => { @@ -92,7 +92,8 @@ let main = (~version as providedVersion, ~quiet) => {
| Some(version) => Lwt.return(version)
| None => Dotfiles.getVersion()
};
switchVersion(~version, ~quiet);
let%lwt () = switchVersion(~version, ~quiet);
Lwt.return_ok();
};
let rec askIfInstall = (~version, ~quiet, retry) => {
@ -107,7 +108,9 @@ let rec askIfInstall = (~version, ~quiet, retry) => { @@ -107,7 +108,9 @@ let rec askIfInstall = (~version, ~quiet, retry) => {
let%lwt _ = Install.run(~version);
retry(~version, ~quiet);
| "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 _ =
Lwt_io.write_line(Lwt_io.stderr, "Invalid response. Please try again:");
@ -128,7 +131,7 @@ let rec run = (~version, ~quiet) => @@ -128,7 +131,7 @@ let rec run = (~version, ~quiet) =>
if (Fnm.Config.FNM_INTERACTIVE_CLI.get()) {
askIfInstall(~version, ~quiet, run);
} else {
exit(1);
Lwt.return_error(1);
};
| Dotfiles.Conflicting_Dotfiles_Found(v1, v2) =>
error(
@ -142,7 +145,7 @@ let rec run = (~version, ~quiet) => @@ -142,7 +145,7 @@ let rec run = (~version, ~quiet) =>
v2
</Pastel>,
);
exit(1);
Lwt.return_error(1);
| Dotfiles.Version_Not_Provided =>
error(
~quiet,
@ -150,5 +153,5 @@ let rec run = (~version, ~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."
</Pastel>,
);
exit(1);
Lwt.return_error(1);
};

Loading…
Cancel
Save