From 42d4847fdff3e1c3b0644de5f503db80ef3ff2a1 Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Wed, 20 Aug 2025 13:24:35 -0400 Subject: [PATCH] init: add exe name to bitcoind, bitcoin-node -version output to be able to distinguish these in tests Github-Pull: #33229 Rebased-From: 0972f5504021b482b27523fd3bcb8036cf6b439c --- src/bitcoind.cpp | 11 ++++++++--- src/init/bitcoin-gui.cpp | 1 + src/init/bitcoin-node.cpp | 1 + src/init/bitcoin-qt.cpp | 3 +++ src/init/bitcoind.cpp | 3 +++ src/interfaces/init.h | 1 + 6 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index ceb3c99410c..a4373dafdf2 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -132,11 +132,16 @@ static bool ParseArgs(NodeContext& node, int argc, char* argv[]) return true; } -static bool ProcessInitCommands(ArgsManager& args) +static bool ProcessInitCommands(interfaces::Init& init, ArgsManager& args) { // Process help and version before taking care about datadir if (HelpRequested(args) || args.GetBoolArg("-version", false)) { - std::string strUsage = CLIENT_NAME " daemon version " + FormatFullVersion() + "\n"; + std::string strUsage = CLIENT_NAME " daemon version " + FormatFullVersion(); + if (const char* exe_name{init.exeName()}) { + strUsage += " "; + strUsage += exe_name; + } + strUsage += "\n"; if (args.GetBoolArg("-version", false)) { strUsage += FormatParagraph(LicenseInfo()); @@ -277,7 +282,7 @@ MAIN_FUNCTION ArgsManager& args = *Assert(node.args); if (!ParseArgs(node, argc, argv)) return EXIT_FAILURE; // Process early info return commands such as -help or -version - if (ProcessInitCommands(args)) return EXIT_SUCCESS; + if (ProcessInitCommands(*init, args)) return EXIT_SUCCESS; // Start application if (!AppInit(node) || !Assert(node.shutdown_signal)->wait()) { diff --git a/src/init/bitcoin-gui.cpp b/src/init/bitcoin-gui.cpp index eae30bc995a..aca3fbe1c44 100644 --- a/src/init/bitcoin-gui.cpp +++ b/src/init/bitcoin-gui.cpp @@ -39,6 +39,7 @@ public: // bitcoin-node accepts the option, and bitcoin-gui accepts all bitcoin-node // options and will start the node with those options. bool canListenIpc() override { return true; } + const char* exeName() override { return EXE_NAME; } node::NodeContext m_node; std::unique_ptr m_ipc; }; diff --git a/src/init/bitcoin-node.cpp b/src/init/bitcoin-node.cpp index 3f8c50b8d66..e5f1411fdb5 100644 --- a/src/init/bitcoin-node.cpp +++ b/src/init/bitcoin-node.cpp @@ -38,6 +38,7 @@ public: std::unique_ptr makeEcho() override { return interfaces::MakeEcho(); } interfaces::Ipc* ipc() override { return m_ipc.get(); } bool canListenIpc() override { return true; } + const char* exeName() override { return EXE_NAME; } node::NodeContext& m_node; std::unique_ptr m_ipc; }; diff --git a/src/init/bitcoin-qt.cpp b/src/init/bitcoin-qt.cpp index 5209c729731..05f3bc32d7d 100644 --- a/src/init/bitcoin-qt.cpp +++ b/src/init/bitcoin-qt.cpp @@ -16,6 +16,8 @@ namespace init { namespace { +const char* EXE_NAME = "bitcoin-qt"; + class BitcoinQtInit : public interfaces::Init { public: @@ -32,6 +34,7 @@ public: return MakeWalletLoader(chain, *Assert(m_node.args)); } std::unique_ptr makeEcho() override { return interfaces::MakeEcho(); } + const char* exeName() override { return EXE_NAME; } node::NodeContext m_node; }; } // namespace diff --git a/src/init/bitcoind.cpp b/src/init/bitcoind.cpp index 48be8831d25..0b0ab3f8fa8 100644 --- a/src/init/bitcoind.cpp +++ b/src/init/bitcoind.cpp @@ -18,6 +18,8 @@ using node::NodeContext; namespace init { namespace { +const char* EXE_NAME = "bitcoind"; + class BitcoindInit : public interfaces::Init { public: @@ -34,6 +36,7 @@ public: return MakeWalletLoader(chain, *Assert(m_node.args)); } std::unique_ptr makeEcho() override { return interfaces::MakeEcho(); } + const char* exeName() override { return EXE_NAME; } NodeContext& m_node; }; } // namespace diff --git a/src/interfaces/init.h b/src/interfaces/init.h index b496ada05f4..030ce306c00 100644 --- a/src/interfaces/init.h +++ b/src/interfaces/init.h @@ -38,6 +38,7 @@ public: virtual std::unique_ptr makeEcho() { return nullptr; } virtual Ipc* ipc() { return nullptr; } virtual bool canListenIpc() { return false; } + virtual const char* exeName() { return nullptr; } }; //! Return implementation of Init interface for the node process. If the argv