aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2026-03-01 12:40:20 +0100
committerGitHub Enterprise <[email protected]>2026-03-01 12:40:20 +0100
commit4d01aaee0a45f4c9f96e8a4925eff696be98de8d (patch)
treea0cefd6ef899f77a98370f52079b86af3db0d070 /src/zenutil
parentsubprocess tracking using Jobs on Windows/hub (#796) (diff)
downloadzen-4d01aaee0a45f4c9f96e8a4925eff696be98de8d.tar.xz
zen-4d01aaee0a45f4c9f96e8a4925eff696be98de8d.zip
added `--verbose` option to zenserver-test and `xmake test` (#798)
* when `--verbose` is specified to zenserver-test, all child process output (typically, zenserver instances) is piped through to stdout. you can also pass `--verbose` to `xmake test` to accomplish the same thing. * this PR also consolidates all test runner `main` function logic (such as from zencore-test, zenhttp-test etc) into central implementation in zencore for consistency and ease of maintenance * also added extended utf8-tests including a fix to `Utf8ToWide()`
Diffstat (limited to 'src/zenutil')
-rw-r--r--src/zenutil/include/zenutil/zenserverprocess.h10
-rw-r--r--src/zenutil/zenserverprocess.cpp13
2 files changed, 14 insertions, 9 deletions
diff --git a/src/zenutil/include/zenutil/zenserverprocess.h b/src/zenutil/include/zenutil/zenserverprocess.h
index 954916fe2..e81b154e8 100644
--- a/src/zenutil/include/zenutil/zenserverprocess.h
+++ b/src/zenutil/include/zenutil/zenserverprocess.h
@@ -46,6 +46,9 @@ public:
inline std::string_view GetServerClass() const { return m_ServerClass; }
inline uint16_t GetNewPortNumber() { return m_NextPortNumber.fetch_add(1); }
+ void SetPassthroughOutput(bool Enable) { m_PassthroughOutput = Enable; }
+ bool IsPassthroughOutput() const { return m_PassthroughOutput; }
+
// The defaults will work for a single root process only. For hierarchical
// setups (e.g., hub managing storage servers), we need to be able to
// allocate distinct child IDs and ports to avoid overlap/conflicts.
@@ -55,9 +58,10 @@ public:
private:
std::filesystem::path m_ProgramBaseDir;
std::filesystem::path m_ChildProcessBaseDir;
- bool m_IsInitialized = false;
- bool m_IsTestInstance = false;
- bool m_IsHubInstance = false;
+ bool m_IsInitialized = false;
+ bool m_IsTestInstance = false;
+ bool m_IsHubInstance = false;
+ bool m_PassthroughOutput = false;
std::string m_ServerClass;
std::atomic_uint16_t m_NextPortNumber{20000};
};
diff --git a/src/zenutil/zenserverprocess.cpp b/src/zenutil/zenserverprocess.cpp
index 0f8ab223d..e127a92d7 100644
--- a/src/zenutil/zenserverprocess.cpp
+++ b/src/zenutil/zenserverprocess.cpp
@@ -829,12 +829,13 @@ ZenServerInstance::SpawnServerInternal(int ChildId, std::string_view ServerArgs,
const std::filesystem::path BaseDir = m_Env.ProgramBaseDir();
const std::filesystem::path Executable =
m_ServerExecutablePath.empty() ? (BaseDir / "zenserver" ZEN_EXE_SUFFIX_LITERAL) : m_ServerExecutablePath;
- const std::filesystem::path OutputPath =
- OpenConsole ? std::filesystem::path{} : std::filesystem::temp_directory_path() / ("zenserver_" + m_Name + ".log");
- CreateProcOptions CreateOptions = {
- .WorkingDirectory = &CurrentDirectory,
- .Flags = CreationFlags,
- .StdoutFile = OutputPath,
+ const std::filesystem::path OutputPath = (OpenConsole || m_Env.IsPassthroughOutput())
+ ? std::filesystem::path{}
+ : std::filesystem::temp_directory_path() / ("zenserver_" + m_Name + ".log");
+ CreateProcOptions CreateOptions = {
+ .WorkingDirectory = &CurrentDirectory,
+ .Flags = CreationFlags,
+ .StdoutFile = OutputPath,
#if ZEN_PLATFORM_WINDOWS
.AssignToJob = m_JobObject,
#endif