From 478145082a4128ad96ca3311e65865b85776d0c2 Mon Sep 17 00:00:00 2001 From: Gal Schlezinger Date: Wed, 6 Mar 2019 14:41:31 +0200 Subject: [PATCH] Guard from more non-existent directories errors (#79) --- library/Fs.re | 6 ++++++ library/Versions.re | 14 +++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/library/Fs.re b/library/Fs.re index a51b4b7..00dd229 100644 --- a/library/Fs.re +++ b/library/Fs.re @@ -35,4 +35,10 @@ let writeFile = (path, contents) => { Lwt.return(); }; +let exists = path => { + try%lwt (Lwt_unix.file_exists(path)) { + | Unix.Unix_error(_, _, _) => Lwt.return(false) + }; +}; + let realpath = Filename.realpath; diff --git a/library/Versions.re b/library/Versions.re index 74dbaf8..73ec49d 100644 --- a/library/Versions.re +++ b/library/Versions.re @@ -36,9 +36,13 @@ module Local = { let getLatestInstalledNameByPrefix = prefix => { open Lwt; let%lwt versions = - Fs.readdir(Directories.nodeVersions) - >|= List.filter(isVersionFitsPrefix(prefix)) - >|= List.sort(flip(compare)); + Lwt.catch( + () => + Fs.readdir(Directories.nodeVersions) + >|= List.filter(isVersionFitsPrefix(prefix)) + >|= List.sort(flip(compare)), + _ => Lwt.return_nil, + ); switch (versions) { | [version, ...xs] => Lwt.return_some(version) | [] => Lwt.return_none @@ -291,8 +295,8 @@ let parse = version => { let aliasPath = Aliases.toDirectory(version); let versionPath = Local.toDirectory(formattedVersion); - let%lwt aliasExists = Lwt_unix.file_exists(aliasPath) - and versionExists = Lwt_unix.file_exists(versionPath) + let%lwt aliasExists = Fs.exists(aliasPath) + and versionExists = Fs.exists(versionPath) and versionByPrefixPath = Local.getLatestInstalledNameByPrefix(formattedVersion);