From cd0cb1aaa29a3f853f166d4159638c13ccfafff4 Mon Sep 17 00:00:00 2001 From: Gal Schlezinger Date: Thu, 30 May 2019 10:30:46 +0300 Subject: [PATCH] Add a 'debug' log level (#104) * Add a 'debug' log level * update snapshot * Fix tests --- executable/Alias.re | 2 +- executable/FnmApp.re | 4 ++- executable/Install.re | 22 ++++++++++----- executable/Uninstall.re | 22 +++++++-------- executable/Use.re | 27 +++++++++++++------ feature_tests/existing_installation/run.sh | 2 +- library/Config.re | 2 +- library/LogLevel.re | 10 ++++--- library/Logger.re | 17 +++++++++--- .../Smoke_test.4d362c3c.0.snapshot | 2 +- 10 files changed, 72 insertions(+), 38 deletions(-) diff --git a/executable/Alias.re b/executable/Alias.re index 4e6c9b3..27c3524 100644 --- a/executable/Alias.re +++ b/executable/Alias.re @@ -19,7 +19,7 @@ let run = (~name, ~version) => { exit(1); }; - Logger.log( + Logger.info( "Aliasing " name diff --git a/executable/FnmApp.re b/executable/FnmApp.re index 4f22381..bbfc2a3 100644 --- a/executable/FnmApp.re +++ b/executable/FnmApp.re @@ -224,7 +224,9 @@ let env = { enum([ ("quiet", Fnm.LogLevel.Quiet), ("error", Fnm.LogLevel.Error), - ("all", Fnm.LogLevel.All), + ("info", Fnm.LogLevel.Info), + ("all", Fnm.LogLevel.Debug), + ("debug", Fnm.LogLevel.Debug), ]), Fnm.Config.FNM_LOGLEVEL.get(), ) diff --git a/executable/Install.re b/executable/Install.re index 2c03887..a92e440 100644 --- a/executable/Install.re +++ b/executable/Install.re @@ -3,7 +3,7 @@ open Fnm; let mkDownloadsDir = () => { let exists = Lwt_unix.file_exists(Directories.downloads); if%lwt (exists |> Lwt.map(x => !x)) { - Logger.log( + Logger.debug( "Creating " Directories.downloads @@ -29,7 +29,7 @@ let main = (~version as versionName) => { let versionName = Versions.format(versionName); let%lwt _ = Versions.throwIfInstalled(versionName); - Logger.log( + Logger.debug( "Looking for node " versionName @@ -53,7 +53,7 @@ let main = (~version as versionName) => { versionName ++ Versions.Remote.downloadFileSuffix, ); - Logger.log( + Logger.debug( "Downloading " filepath @@ -67,7 +67,7 @@ let main = (~version as versionName) => { let extractionDestination = Filename.concat(Directories.nodeVersions, versionName); - Logger.log( + Logger.debug( "Extracting " tarDestination @@ -76,6 +76,14 @@ let main = (~version as versionName) => { , ); + Logger.info( + + "Version " + versionName + " was successfuly downloaded" + , + ); + let%lwt _ = Compression.extractFile(tarDestination, ~into=extractionDestination); @@ -85,7 +93,7 @@ let main = (~version as versionName) => { let run = (~version) => try%lwt (main(~version)) { | Versions.No_Download_For_System(os, arch) => - Logger.log( + Logger.error( "Version exists, but can't find a file for your system:\n" " OS: " @@ -97,7 +105,7 @@ let run = (~version) => ); exit(1); | Versions.Already_installed(version) => - Logger.log( + Logger.error( "Version " version @@ -106,7 +114,7 @@ let run = (~version) => ) |> Lwt.return | Versions.Version_not_found(version) => - Logger.log( + Logger.error( "Version " version diff --git a/executable/Uninstall.re b/executable/Uninstall.re index 3ea32c3..f7d19e5 100644 --- a/executable/Uninstall.re +++ b/executable/Uninstall.re @@ -8,7 +8,7 @@ let run = (~version) => { installedVersion => switch (installedVersion) { | None => - Logger.log( + Logger.error( "The version " version @@ -17,18 +17,16 @@ let run = (~version) => { ); exit(1); | Some(installedVersion) => - { - Logger.log( - - "Uninstalling node " - - Versions.Local.(installedVersion.name) - - , - ); - }; + Logger.debug( + + "Uninstalling node " + + Versions.Local.(installedVersion.name) + + , + ); let%lwt _ = Versions.Local.remove(installedVersion); - Logger.log( + Logger.info( "Node version " diff --git a/executable/Use.re b/executable/Use.re index 34cb7a0..945cfd2 100644 --- a/executable/Use.re +++ b/executable/Use.re @@ -4,14 +4,25 @@ let lwtIgnore = lwt => Lwt.catch(() => lwt, _ => Lwt.return()); exception Version_Not_Installed(string); -let log = (~quiet, arg) => +let info = (~quiet, arg) => if (!quiet) { - Logger.log(arg); + Logger.info(arg); + }; + +let debug = (~quiet, arg) => + if (!quiet) { + Logger.debug(arg); + }; + +let error = (~quiet, arg) => + if (!quiet) { + Logger.error(arg); }; let switchVersion = (~version, ~quiet) => { open Lwt; - let log = log(~quiet); + let info = info(~quiet); + let debug = debug(~quiet); let%lwt parsedVersion = Versions.parse(version) >>= Opt.toLwt(Version_Not_Installed(version)); @@ -31,7 +42,7 @@ let switchVersion = (~version, ~quiet) => { let source = Directories.currentVersion; - log( + debug( "Linking " source @@ -51,7 +62,7 @@ let switchVersion = (~version, ~quiet) => { Lwt.return(); }; - log( + info( "Using " versionName @@ -93,7 +104,7 @@ let rec askIfInstall = (~version, ~quiet, retry) => { let rec run = (~version, ~quiet) => try%lwt (main(~version, ~quiet)) { | Version_Not_Installed(versionString) => - log( + error( ~quiet, "The following version is not installed: " @@ -106,7 +117,7 @@ let rec run = (~version, ~quiet) => exit(1); }; | Dotfiles.Conflicting_Dotfiles_Found(v1, v2) => - log( + error( ~quiet, "Can't infer version from dotfiles: .node-version and .nvmrc have differing version strings:\n" @@ -119,7 +130,7 @@ let rec run = (~version, ~quiet) => ); exit(1); | Dotfiles.Version_Not_Provided => - log( + error( ~quiet, "No .nvmrc or .node-version file was found in the current directory. Please provide a version number." diff --git a/feature_tests/existing_installation/run.sh b/feature_tests/existing_installation/run.sh index c8308e7..9789ee5 100644 --- a/feature_tests/existing_installation/run.sh +++ b/feature_tests/existing_installation/run.sh @@ -7,7 +7,7 @@ eval `fnm env` echo "> Installing for the first time..." fnm install v8.11.3 echo "> Installing the second time..." -fnm install v8.11.3 | grep "already installed" +fnm install v8.11.3 2>&1 >/dev/null | grep "already installed" if [ "$?" != "0" ]; then echo "The second installation should say it is already installed" diff --git a/library/Config.re b/library/Config.re index 3f53b6d..48a94a0 100644 --- a/library/Config.re +++ b/library/Config.re @@ -70,7 +70,7 @@ module FNM_LOGLEVEL = let unparse = LogLevel.toString; let name = "FNM_LOGLEVEL"; let doc = "The log level of fnm commands"; - let default = LogLevel.All; + let default = LogLevel.Info; }); let parseBooleanOrDie = (~name, str) => diff --git a/library/LogLevel.re b/library/LogLevel.re index 65ef586..d2ce4f4 100644 --- a/library/LogLevel.re +++ b/library/LogLevel.re @@ -1,19 +1,23 @@ type t = | Quiet | Error - | All; + | Info + | Debug; let toString = logLevel => switch (logLevel) { | Quiet => "quiet" | Error => "error" - | All => "all" + | Info => "info" + | Debug => "debug" }; let fromString = logLevelString => switch (logLevelString) { | "quiet" => Quiet | "error" => Error - | "all" => All + | "info" => Info + | "debug" + | "all" => Debug | _ => failwith("Unsupported level: " ++ logLevelString) }; diff --git a/library/Logger.re b/library/Logger.re index 2e623a9..30b846e 100644 --- a/library/Logger.re +++ b/library/Logger.re @@ -1,8 +1,18 @@ let configuredLogLevel = Config.FNM_LOGLEVEL.get(); -let log = message => { +let info = message => { switch (configuredLogLevel) { - | LogLevel.All => Console.log(message) + | LogLevel.Debug + | LogLevel.Info => Console.log(message) + | LogLevel.Error + | LogLevel.Quiet => () + }; +}; + +let debug = message => { + switch (configuredLogLevel) { + | LogLevel.Debug => Console.log(message) + | LogLevel.Info | LogLevel.Error | LogLevel.Quiet => () }; @@ -10,7 +20,8 @@ let log = message => { let error = message => { switch (configuredLogLevel) { - | LogLevel.All + | LogLevel.Debug + | LogLevel.Info | LogLevel.Error => Console.error(message) | LogLevel.Quiet => () }; diff --git a/test/__snapshots__/Smoke_test.4d362c3c.0.snapshot b/test/__snapshots__/Smoke_test.4d362c3c.0.snapshot index 91ab579..7f88166 100644 --- a/test/__snapshots__/Smoke_test.4d362c3c.0.snapshot +++ b/test/__snapshots__/Smoke_test.4d362c3c.0.snapshot @@ -3,5 +3,5 @@ export PATH=/current/bin:$PATH export FNM_MULTISHELL_PATH=/current export FNM_DIR=/ export FNM_NODE_DIST_MIRROR=https://nodejs.org/dist -export FNM_LOGLEVEL=all +export FNM_LOGLEVEL=info