diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2025-04-17 13:18:37 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2025-04-17 13:45:30 +0200 |
commit | d65d711f844224dcf9215c52be8f69fd2885adfc (patch) | |
tree | c366659430d12c15ef8dd114b8893bde34b034e4 /src | |
parent | 1af9c8c55f1543ffe2622e1057bdbf50d0983535 (diff) | |
download | justbuild-d65d711f844224dcf9215c52be8f69fd2885adfc.tar.gz |
profile: also honor action cwd
In all presentations of actions to the user, we use output paths
relative to the root of the action directory. Therefore, we should
do the same in the profile. However, when noting the completion of
an action, we get paths as in the wire protocol, i.e., relative to
the working directory of the action. Therefore, rebase appropriately.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/execution_engine/executor/executor.hpp | 7 | ||||
-rw-r--r-- | src/buildtool/profile/TARGETS | 1 | ||||
-rw-r--r-- | src/buildtool/profile/profile.cpp | 17 | ||||
-rw-r--r-- | src/buildtool/profile/profile.hpp | 3 |
4 files changed, 22 insertions, 6 deletions
diff --git a/src/buildtool/execution_engine/executor/executor.hpp b/src/buildtool/execution_engine/executor/executor.hpp index 7015f559..d47397f0 100644 --- a/src/buildtool/execution_engine/executor/executor.hpp +++ b/src/buildtool/execution_engine/executor/executor.hpp @@ -928,7 +928,9 @@ class Executor { context_.progress); if (context_.profile) { (*context_.profile) - ->NoteActionCompleted(action->Content().Id(), *response); + ->NoteActionCompleted(action->Content().Id(), + *response, + action->Content().Cwd()); } return result; } @@ -956,7 +958,8 @@ class Executor { logger, *response, action, context_.statistics, context_.progress); if (context_.profile) { (*context_.profile) - ->NoteActionCompleted(action->Content().Id(), *response); + ->NoteActionCompleted( + action->Content().Id(), *response, action->Content().Cwd()); } return result; } diff --git a/src/buildtool/profile/TARGETS b/src/buildtool/profile/TARGETS index 318ed075..7906c2b4 100644 --- a/src/buildtool/profile/TARGETS +++ b/src/buildtool/profile/TARGETS @@ -13,6 +13,7 @@ , ["src/buildtool/common", "cli"] , ["src/buildtool/common", "common"] , ["src/utils/cpp", "expected"] + , ["src/utils/cpp", "path_rebase"] ] , "stage": ["src", "buildtool", "profile"] } diff --git a/src/buildtool/profile/profile.cpp b/src/buildtool/profile/profile.cpp index 4655ccf4..bc0560cf 100644 --- a/src/buildtool/profile/profile.cpp +++ b/src/buildtool/profile/profile.cpp @@ -20,6 +20,7 @@ #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/cli.hpp" #include "src/utils/cpp/expected.hpp" +#include "src/utils/cpp/path_rebase.hpp" void Profile::Write(int exit_code) { if (not actions_.empty()) { @@ -96,7 +97,8 @@ void Profile::SetCLI(CommandLineArguments const& cli) { } void Profile::NoteActionCompleted(std::string const& id, - IExecutionResponse::Ptr const& response) { + IExecutionResponse::Ptr const& response, + std::string const& cwd) { std::unique_lock lock{mutex_}; auto artifacts = response->Artifacts(); std::optional<std::string> out = std::nullopt; @@ -131,8 +133,17 @@ void Profile::NoteActionCompleted(std::string const& id, .err = err, .artifacts = std::unordered_map<std::string, std::string>( (*artifacts)->size())}; - for (auto const& [k, v] : **artifacts) { - actions_[id].artifacts.emplace(k, v.digest.hash()); + if (cwd.empty()) { + // the typical case of empty cwd, avoid unnecessary calls + for (auto const& [k, v] : **artifacts) { + actions_[id].artifacts.emplace(k, v.digest.hash()); + } + } + else { + for (auto const& [k, v] : **artifacts) { + actions_[id].artifacts.emplace( + RebasePathStringRelativeTo(cwd, k), v.digest.hash()); + } } } } diff --git a/src/buildtool/profile/profile.hpp b/src/buildtool/profile/profile.hpp index 82a23a94..9067a309 100644 --- a/src/buildtool/profile/profile.hpp +++ b/src/buildtool/profile/profile.hpp @@ -38,7 +38,8 @@ class Profile { void SetTarget(nlohmann::json target); void SetConfiguration(nlohmann::json configuration); void NoteActionCompleted(std::string const& id, - IExecutionResponse::Ptr const& response); + IExecutionResponse::Ptr const& response, + std::string const& cwd); private: struct ActionData { |