mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
src: return error --env-file if file is not found
PR-URL: https://github.com/nodejs/node/pull/50588 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
This commit is contained in:
@@ -866,7 +866,9 @@ static ExitCode InitializeNodeWithArgsInternal(
|
||||
|
||||
for (const auto& file_path : file_paths) {
|
||||
std::string path = cwd + kPathSeparator + file_path;
|
||||
per_process::dotenv_file.ParsePath(path);
|
||||
auto path_exists = per_process::dotenv_file.ParsePath(path);
|
||||
|
||||
if (!path_exists) errors->push_back(file_path + ": not found");
|
||||
}
|
||||
|
||||
per_process::dotenv_file.AssignNodeOptionsIfAvailable(&node_options);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -89,7 +89,7 @@ void Dotenv::ParsePath(const std::string_view path) {
|
||||
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;
|
||||
return false;
|
||||
}
|
||||
uv_fs_req_cleanup(&req);
|
||||
if (r <= 0) {
|
||||
@@ -104,6 +104,7 @@ void Dotenv::ParsePath(const std::string_view path) {
|
||||
for (const auto& line : lines) {
|
||||
ParseLine(line);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void Dotenv::AssignNodeOptionsIfAvailable(std::string* node_options) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -34,8 +34,8 @@ describe('.env supports edge cases', () => {
|
||||
[ '--env-file=.env', '--eval', code ],
|
||||
{ cwd: __dirname },
|
||||
);
|
||||
assert.strictEqual(child.stderr, '');
|
||||
assert.strictEqual(child.code, 0);
|
||||
assert.notStrictEqual(child.stderr.toString(), '');
|
||||
assert.strictEqual(child.code, 9);
|
||||
});
|
||||
|
||||
it('should not override existing environment variables but introduce new vars', async () => {
|
||||
|
||||
Reference in New Issue
Block a user