@@ -1329,8 +1329,11 @@ namespace
13291329
13301330 struct AwsStorageTool : IObjectStorageTool
13311331 {
1332- AwsStorageTool (const ToolCache& cache, MessageSink& sink, bool no_sign_request)
1333- : m_tool(cache.get_tool_path(Tools::AWSCLI, sink)), m_no_sign_request(no_sign_request)
1332+ AwsStorageTool (const ToolCache& cache, MessageSink& sink, bool no_sign_request, bool trace_ops)
1333+ : m_out_sink(sink)
1334+ , m_tool(cache.get_tool_path(Tools::AWSCLI, sink))
1335+ , m_no_sign_request(no_sign_request)
1336+ , m_trace_ops(trace_ops)
13341337 {
13351338 }
13361339
@@ -1342,6 +1345,14 @@ namespace
13421345
13431346 ExpectedL<CacheAvailability> stat (StringView url) const override
13441347 {
1348+ if (m_trace_ops)
1349+ {
1350+ MessageLine line{};
1351+ line.print (" aws s3 ls " );
1352+ line.print (url);
1353+ m_out_sink.println (std::move (line));
1354+ }
1355+
13451356 auto cmd = Command{m_tool}.string_arg (" s3" ).string_arg (" ls" ).string_arg (url);
13461357 if (m_no_sign_request)
13471358 {
@@ -1387,6 +1398,16 @@ namespace
13871398 return r.error ();
13881399 }
13891400
1401+ if (m_trace_ops)
1402+ {
1403+ MessageLine line{};
1404+ line.print (" aws s3 cp " );
1405+ line.print (object);
1406+ line.print (" " );
1407+ line.print (archive);
1408+ m_out_sink.println (std::move (line));
1409+ }
1410+
13901411 auto cmd = Command{m_tool}.string_arg (" s3" ).string_arg (" cp" ).string_arg (object).string_arg (archive);
13911412 if (m_no_sign_request)
13921413 {
@@ -1398,6 +1419,16 @@ namespace
13981419
13991420 ExpectedL<Unit> upload_file (StringView object, const Path& archive) const override
14001421 {
1422+ if (m_trace_ops)
1423+ {
1424+ MessageLine line{};
1425+ line.print (" aws s3 cp " );
1426+ line.print (archive);
1427+ line.print (" " );
1428+ line.print (object);
1429+ m_out_sink.println (std::move (line));
1430+ }
1431+
14011432 auto cmd = Command{m_tool}.string_arg (" s3" ).string_arg (" cp" ).string_arg (archive).string_arg (object);
14021433 if (m_no_sign_request)
14031434 {
@@ -1406,8 +1437,10 @@ namespace
14061437 return flatten (cmd_execute_and_capture_output (cmd), Tools::AWSCLI);
14071438 }
14081439
1440+ MessageSink& m_out_sink;
14091441 Path m_tool;
14101442 bool m_no_sign_request;
1443+ bool m_trace_ops;
14111444 };
14121445
14131446 struct CosStorageTool : IObjectStorageTool
@@ -2020,23 +2053,32 @@ namespace
20202053 }
20212054 else if (segments[0 ].second == " x-aws-config" )
20222055 {
2023- if (segments.size () != 2 )
2056+ if (segments.size () != 2 && segments. size () != 3 )
20242057 {
2025- return add_error (msg::format (msgInvalidArgumentRequiresSingleStringArgument,
2026- msg::binary_source = " x-aws-config" ));
2058+ return add_error (
2059+ msg::format (msgInvalidArgumentRequiresOneOrTwoArguments, msg::binary_source = " x-aws-config" ));
20272060 }
20282061
20292062 bool no_sign_request = false ;
2030- if (segments[1 ].second == " no-sign-request" )
2063+ bool trace_ops = false ;
2064+ for (size_t i = 1 ; i < segments.size (); ++i)
20312065 {
2032- no_sign_request = true ;
2033- }
2034- else
2035- {
2036- return add_error (msg::format (msgInvalidArgument), segments[1 ].first );
2066+ if (!no_sign_request && segments[i].second == " no-sign-request" )
2067+ {
2068+ no_sign_request = true ;
2069+ }
2070+ else if (!trace_ops && segments[i].second == " trace-ops" )
2071+ {
2072+ trace_ops = true ;
2073+ }
2074+ else
2075+ {
2076+ return add_error (msg::format (msgInvalidArgument), segments[1 ].first );
2077+ }
20372078 }
20382079
20392080 state->aws_no_sign_request = no_sign_request;
2081+ state->aws_trace_ops = trace_ops;
20402082 state->binary_cache_providers .insert (" aws" );
20412083 }
20422084 else if (segments[0 ].second == " x-cos" )
@@ -2653,7 +2695,7 @@ namespace vcpkg
26532695 std::shared_ptr<const AwsStorageTool> aws_tool;
26542696 if (!s.aws_read_prefixes .empty () || !s.aws_write_prefixes .empty ())
26552697 {
2656- aws_tool = std::make_shared<AwsStorageTool>(tools, out_sink, s.aws_no_sign_request );
2698+ aws_tool = std::make_shared<AwsStorageTool>(tools, out_sink, s.aws_no_sign_request , s. aws_trace_ops );
26572699 }
26582700 std::shared_ptr<const CosStorageTool> cos_tool;
26592701 if (!s.cos_read_prefixes .empty () || !s.cos_write_prefixes .empty ())
0 commit comments