summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/common/cli.hpp14
-rw-r--r--src/buildtool/computed_roots/evaluate.cpp2
-rw-r--r--src/buildtool/graph_traverser/graph_traverser.cpp8
3 files changed, 14 insertions, 10 deletions
diff --git a/src/buildtool/common/cli.hpp b/src/buildtool/common/cli.hpp
index 26b284d9..51cf3ef3 100644
--- a/src/buildtool/common/cli.hpp
+++ b/src/buildtool/common/cli.hpp
@@ -114,7 +114,7 @@ struct BuildArguments {
std::optional<std::vector<std::string>> local_launcher{std::nullopt};
std::chrono::milliseconds timeout{kDefaultTimeout};
std::size_t build_jobs{};
- std::optional<std::string> dump_artifacts{std::nullopt};
+ std::vector<std::filesystem::path> dump_artifacts{};
std::optional<std::string> print_to_stdout{std::nullopt};
bool print_unique{false};
bool show_runfiles{false};
@@ -535,10 +535,14 @@ static inline auto SetupExtendedBuildArguments(
gsl::not_null<CLI::App*> const& app,
gsl::not_null<BuildArguments*> const& clargs) {
- app->add_option("--dump-artifacts",
- clargs->dump_artifacts,
- "Dump artifacts to file (use - for stdout).")
- ->type_name("PATH");
+ app->add_option_function<std::string>(
+ "--dump-artifacts",
+ [clargs](auto const& file_) {
+ clargs->dump_artifacts.emplace_back(file_);
+ },
+ "Dump artifacts to file (use - for stdout).")
+ ->type_name("PATH")
+ ->trigger_on_parse();
app->add_flag("-s,--show-runfiles",
clargs->show_runfiles,
diff --git a/src/buildtool/computed_roots/evaluate.cpp b/src/buildtool/computed_roots/evaluate.cpp
index 507f13a9..17b4996b 100644
--- a/src/buildtool/computed_roots/evaluate.cpp
+++ b/src/buildtool/computed_roots/evaluate.cpp
@@ -199,7 +199,7 @@ void ComputeAndFill(
root_build_args.rebuild = std::nullopt;
root_build_args.build.print_to_stdout = std::nullopt;
root_build_args.build.print_unique = false;
- root_build_args.build.dump_artifacts = std::nullopt;
+ root_build_args.build.dump_artifacts = std::vector<std::filesystem::path>{};
root_build_args.build.show_runfiles = false;
auto root_exec_context = ExecutionContext{context->repo_config,
context->apis,
diff --git a/src/buildtool/graph_traverser/graph_traverser.cpp b/src/buildtool/graph_traverser/graph_traverser.cpp
index 440a8078..69fb4138 100644
--- a/src/buildtool/graph_traverser/graph_traverser.cpp
+++ b/src/buildtool/graph_traverser/graph_traverser.cpp
@@ -589,7 +589,7 @@ void GraphTraverser::PrintOutputs(
fmt::format("\n {} {}", path, info->ToString());
failed = true;
}
- if (clargs_.build.dump_artifacts) {
+ if (not clargs_.build.dump_artifacts.empty()) {
json[path] = info->ToJson();
}
}
@@ -611,12 +611,12 @@ void GraphTraverser::PrintOutputs(
Logger::Log(logger_, LogLevel::Info, "{}", msg_failed);
}
- if (clargs_.build.dump_artifacts) {
- if (*clargs_.build.dump_artifacts == "-") {
+ for (auto const& location : clargs_.build.dump_artifacts) {
+ if (location == "-") {
std::cout << std::setw(2) << json << std::endl;
}
else {
- std::ofstream os(*clargs_.build.dump_artifacts);
+ std::ofstream os(location);
os << std::setw(2) << json << std::endl;
}
}