Skip to content

Commit 84c2a7c

Browse files
committed
Timeout error message
1 parent 361872c commit 84c2a7c

3 files changed

Lines changed: 19 additions & 8 deletions

File tree

src/wasm/constants.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@
88
// Environment variable for http transport timeout.
99
// Must be a positive number as a timeout of 0 will block forever.
1010
inline constexpr std::string_view WASM_HTTP_TRANSPORT_TIMEOUT_NAME = "GIT_HTTP_TIMEOUT";
11-
inline constexpr unsigned int WASM_HTTP_TRANSPORT_TIMEOUT_DEFAULT = 10;
11+
inline constexpr unsigned int WASM_HTTP_TRANSPORT_TIMEOUT_DEFAULT_S = 10;

src/wasm/stream.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
# include <emscripten.h>
99

1010
# include "../utils/common.hpp"
11+
# include "constants.hpp"
1112
# include "response.hpp"
1213

1314
// Buffer size used in transport_smart, hardcoded in libgit2.
@@ -106,7 +107,7 @@ EM_JS(
106107
// clang-format off
107108
Module["git2cpp_js_error"] = { name: err.name ?? "", message : err.message ?? "" };
108109
// clang-format on
109-
console.error(err);
110+
(err.name == "TimeoutError" ? console.warn : console.error)(err);
110111
return -1;
111112
}
112113
}
@@ -208,7 +209,7 @@ EM_JS(
208209
// clang-format off
209210
Module["git2cpp_js_error"] = { name: err.name ?? "", message : err.message ?? "" };
210211
// clang-format on
211-
console.error(err);
212+
(err.name == "TimeoutError" ? console.warn : console.error)(err);
212213
return -1;
213214
}
214215
}
@@ -245,7 +246,7 @@ EM_JS(size_t, js_write, (int request_index, const char* buffer, size_t buffer_si
245246
// clang-format off
246247
Module["git2cpp_js_error"] = { name: err.name ?? "", message : err.message ?? "" };
247248
// clang-format on
248-
console.error(err);
249+
(err.name == "TimeoutError" ? console.warn : console.error)(err);
249250
return -1;
250251
}
251252
});
@@ -273,6 +274,16 @@ static void convert_js_to_git_error(wasm_http_stream* stream)
273274
stream->m_unconverted_url.c_str()
274275
);
275276
}
277+
else if (std::string_view(error_str).starts_with("TimeoutError:"))
278+
{
279+
git_error_set(
280+
GIT_ERROR_HTTP,
281+
"network request timed out connecting to %s. You can set a longer timeout in seconds using the environment variable %s, the default value is %u seconds.",
282+
stream->m_unconverted_url.c_str(),
283+
WASM_HTTP_TRANSPORT_TIMEOUT_NAME.data(),
284+
WASM_HTTP_TRANSPORT_TIMEOUT_DEFAULT_S
285+
);
286+
}
276287
else
277288
{
278289
git_error_set(GIT_ERROR_HTTP, "%s", error_str);

src/wasm/utils.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@
88

99
unsigned long get_request_timeout_ms()
1010
{
11-
double timeout_seconds = WASM_HTTP_TRANSPORT_TIMEOUT_DEFAULT;
11+
double timeout_seconds = WASM_HTTP_TRANSPORT_TIMEOUT_DEFAULT_S;
1212
auto env_var = std::getenv(WASM_HTTP_TRANSPORT_TIMEOUT_NAME.data());
1313
if (env_var != nullptr)
1414
{
1515
try
1616
{
1717
auto value = std::stod(env_var);
18-
if (value <= 0)
18+
if (value < 1e-3) // Must be at least 1 ms.
1919
{
20-
throw std::runtime_error("negative or zero");
20+
throw std::runtime_error(""); // Caught below.
2121
}
2222
timeout_seconds = value;
2323
}
@@ -28,7 +28,7 @@ unsigned long get_request_timeout_ms()
2828
std::cout << termcolor::yellow << "Warning: environment variable "
2929
<< WASM_HTTP_TRANSPORT_TIMEOUT_NAME
3030
<< " must be a positive number of seconds, using default value of "
31-
<< WASM_HTTP_TRANSPORT_TIMEOUT_DEFAULT << " seconds instead." << termcolor::reset
31+
<< WASM_HTTP_TRANSPORT_TIMEOUT_DEFAULT_S << " seconds instead." << termcolor::reset
3232
<< std::endl;
3333
}
3434
}

0 commit comments

Comments
 (0)