winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit e8b8f31f948531a11b170fc17d270381d97c67c8
parent 8dda5b6461fafe1c459f02c735bfd64cffb9795f
Author: KEINOS <github+fork-qiita-news@keinos.com>
Date:   Wed, 11 Jun 2025 23:27:31 +0000

Merge remote-tracking branch 'upstream/master'

Diffstat:
Msrc/Microsoft.Management.Configuration/ConfigurationProcessor.cpp | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/Microsoft.Management.Configuration/ConfigurationProcessor.h | 5+++++
Msrc/Microsoft.Management.Configuration/Microsoft.Management.Configuration.idl | 4++++
3 files changed, 74 insertions(+), 0 deletions(-)

diff --git a/src/Microsoft.Management.Configuration/ConfigurationProcessor.cpp b/src/Microsoft.Management.Configuration/ConfigurationProcessor.cpp @@ -1065,6 +1065,71 @@ namespace winrt::Microsoft::Management::Configuration::implementation return *result; } + Configuration::TestConfigurationUnitResult ConfigurationProcessor::TestUnit(const ConfigurationUnit& unit) + { + THROW_HR_IF(E_NOT_VALID_STATE, !m_factory); + return TestUnitImpl(unit); + } + + Windows::Foundation::IAsyncOperation<Configuration::TestConfigurationUnitResult> ConfigurationProcessor::TestUnitAsync(const ConfigurationUnit& unit) + { + THROW_HR_IF(E_NOT_VALID_STATE, !m_factory); + + auto strong_this{ get_strong() }; + ConfigurationUnit localUnit = unit; + + co_await winrt::resume_background(); + + co_return TestUnitImpl(localUnit, { co_await winrt::get_cancellation_token() }); + } + + Configuration::TestConfigurationUnitResult ConfigurationProcessor::TestUnitImpl( + const ConfigurationUnit& unit, + AppInstaller::WinRT::AsyncCancellation cancellation) + { + auto threadGlobals = m_threadGlobals.SetForCurrentThread(); + + IConfigurationSetProcessor setProcessor = m_factory.CreateSetProcessor(nullptr); + auto result = make_self<wil::details::module_count_wrapper<implementation::TestConfigurationUnitResult>>(); + auto unitResult = make_self<wil::details::module_count_wrapper<implementation::ConfigurationUnitResultInformation>>(); + result->Unit(unit); + result->ResultInformation(*unitResult); + + cancellation.ThrowIfCancelled(); + + IConfigurationUnitProcessor unitProcessor; + + try + { + unitProcessor = setProcessor.CreateUnitProcessor(unit); + } + catch (...) + { + ExtractUnitResultInformation(std::current_exception(), unitResult); + } + + cancellation.ThrowIfCancelled(); + + if (unitProcessor) + { + try + { + auto testResult = unitProcessor.TestSettings(); + result->Unit(testResult.Unit()); + result->TestResult(testResult.TestResult()); + result->ResultInformation(testResult.ResultInformation()); + } + catch (...) + { + ExtractUnitResultInformation(std::current_exception(), unitResult); + } + + m_threadGlobals.GetTelemetryLogger().LogConfigUnitRunIfAppropriate(GUID_NULL, unit, ConfigurationUnitIntent::Assert, TelemetryTraceLogger::TestAction, result->ResultInformation()); + } + + return *result; + } + IConfigurationGroupProcessor ConfigurationProcessor::GetSetGroupProcessor(const Configuration::ConfigurationSet& configurationSet) { IConfigurationSetProcessor setProcessor = m_factory.CreateSetProcessor(configurationSet); diff --git a/src/Microsoft.Management.Configuration/ConfigurationProcessor.h b/src/Microsoft.Management.Configuration/ConfigurationProcessor.h @@ -92,6 +92,9 @@ namespace winrt::Microsoft::Management::Configuration::implementation Configuration::ApplyConfigurationUnitResult ApplyUnit(const ConfigurationUnit& unit); Windows::Foundation::IAsyncOperation<Configuration::ApplyConfigurationUnitResult> ApplyUnitAsync(const ConfigurationUnit& unit); + + Configuration::TestConfigurationUnitResult TestUnit(const ConfigurationUnit& unit); + Windows::Foundation::IAsyncOperation<Configuration::TestConfigurationUnitResult> TestUnitAsync(const ConfigurationUnit& unit); HRESULT STDMETHODCALLTYPE SetLifetimeWatcher(IUnknown* watcher); @@ -136,6 +139,8 @@ namespace winrt::Microsoft::Management::Configuration::implementation Configuration::ApplyConfigurationUnitResult ApplyUnitImpl(const ConfigurationUnit& unit, AppInstaller::WinRT::AsyncCancellation cancellation = {}); + Configuration::TestConfigurationUnitResult TestUnitImpl(const ConfigurationUnit& unit, AppInstaller::WinRT::AsyncCancellation cancellation = {}); + IConfigurationGroupProcessor GetSetGroupProcessor(const Configuration::ConfigurationSet& configurationSet); void SendDiagnosticsImpl(const IDiagnosticInformation& information); diff --git a/src/Microsoft.Management.Configuration/Microsoft.Management.Configuration.idl b/src/Microsoft.Management.Configuration/Microsoft.Management.Configuration.idl @@ -1028,6 +1028,10 @@ namespace Microsoft.Management.Configuration // Apply the current configuration unit. ApplyConfigurationUnitResult ApplyUnit(ConfigurationUnit unit); Windows.Foundation.IAsyncOperation<ApplyConfigurationUnitResult> ApplyUnitAsync(ConfigurationUnit unit); + + // Test the current configuration unit. + TestConfigurationUnitResult TestUnit(ConfigurationUnit unit); + Windows.Foundation.IAsyncOperation<TestConfigurationUnitResult> TestUnitAsync(ConfigurationUnit unit); } }