Skip to content

Commit

Permalink
src: return error --env-file if file is not found
Browse files Browse the repository at this point in the history
  • Loading branch information
0xArdi-N committed Nov 7, 2023
1 parent 33704c4 commit 3f6ba1c
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 9 deletions.
5 changes: 4 additions & 1 deletion src/node.cc
Original file line number Diff line number Diff line change
Expand Up @@ -866,7 +866,10 @@ static ExitCode InitializeNodeWithArgsInternal(

for (const auto& file_path : file_paths) {
std::string path = cwd + kPathSeparator + file_path;
per_process::dotenv_file.ParsePath(path);
auto file_is_exist = per_process::dotenv_file.ParsePath(path);

if (!file_is_exist)
errors->push_back(std::string(file_path) + ": not found");
}

per_process::dotenv_file.AssignNodeOptionsIfAvailable(&node_options);
Expand Down
8 changes: 2 additions & 6 deletions src/node_dotenv.cc
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,14 @@ void Dotenv::SetEnvironment(node::Environment* env) {
}
}

void Dotenv::ParsePath(const std::string_view path) {
bool Dotenv::ParsePath(const std::string_view path) {
uv_fs_t req;
auto defer_req_cleanup = OnScopeLeave([&req]() { uv_fs_req_cleanup(&req); });

uv_file file = uv_fs_open(nullptr, &req, path.data(), 0, 438, nullptr);
if (req.result < 0) {
// req will be cleaned up by scope leave.
return;
return false;
}
uv_fs_req_cleanup(&req);

Expand All @@ -87,10 +87,6 @@ void Dotenv::ParsePath(const std::string_view path) {

while (true) {
auto r = uv_fs_read(nullptr, &req, file, &buf, 1, -1, nullptr);
if (req.result < 0) {
// req will be cleaned up by scope leave.
return;
}
uv_fs_req_cleanup(&req);
if (r <= 0) {
break;
Expand Down
2 changes: 1 addition & 1 deletion src/node_dotenv.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class Dotenv {
Dotenv& operator=(const Dotenv& d) = default;
~Dotenv() = default;

void ParsePath(const std::string_view path);
bool ParsePath(const std::string_view path);
void AssignNodeOptionsIfAvailable(std::string* node_options);
void SetEnvironment(Environment* env);

Expand Down
3 changes: 2 additions & 1 deletion test/parallel/test-dotenv-edge-cases.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ describe('.env supports edge cases', () => {
[ '--env-file=.env', '--eval', code ],
{ cwd: __dirname },
);
assert.strictEqual(child.stderr, '');
assert.strictEqual(child.stderr.toString().includes('node: .env: not found\n'), true);
assert.strictEqual(child.code, 9);
assert.strictEqual(child.code, 0);
});

Expand Down

0 comments on commit 3f6ba1c

Please sign in to comment.