Skip to content

Commit 43686bb

Browse files
authored
Allow for smaller configuration outputs (#4754)
## Change To prevent anything from outputting to our console, call `FreeConsole` in the configuration server. To allow for output of primarily results, when `--accept-configuration-agreements` is passed, one can now also pass `--suppress-prologue` to prevent the initial details from being presented. The only output (beyond the temporary progress spinner+text) will then be the disclaimer warning and the individual results.
1 parent 3c53030 commit 43686bb

File tree

7 files changed

+42
-20
lines changed

7 files changed

+42
-20
lines changed

src/AppInstallerCLICore/Argument.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,8 @@ namespace AppInstaller::CLI
203203
return { type, "file"_liv, 'f', ArgTypeCategory::ConfigurationSetChoice, ArgTypeExclusiveSet::ConfigurationSetChoice };
204204
case Execution::Args::Type::ConfigurationAcceptWarning:
205205
return { type, "accept-configuration-agreements"_liv };
206+
case Execution::Args::Type::ConfigurationSuppressPrologue:
207+
return { type, "suppress-initial-details"_liv };
206208
case Execution::Args::Type::ConfigurationEnable:
207209
return { type, "enable"_liv, ArgTypeCategory::None, ArgTypeExclusiveSet::StubType };
208210
case Execution::Args::Type::ConfigurationDisable:

src/AppInstallerCLICore/Commands/ConfigureCommand.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ namespace AppInstaller::CLI
3939
Argument{ Execution::Args::Type::ConfigurationModulePath, Resource::String::ConfigurationModulePath, ArgumentType::Positional },
4040
Argument{ Execution::Args::Type::ConfigurationHistoryItem, Resource::String::ConfigurationHistoryItemArgumentDescription, ArgumentType::Standard, Argument::Visibility::Help },
4141
Argument{ Execution::Args::Type::ConfigurationAcceptWarning, Resource::String::ConfigurationAcceptWarningArgumentDescription, ArgumentType::Flag },
42+
Argument{ Execution::Args::Type::ConfigurationSuppressPrologue, Resource::String::ConfigurationSuppressPrologueArgumentDescription, ArgumentType::Flag, Argument::Visibility::Help },
4243
Argument{ Execution::Args::Type::ConfigurationEnable, Resource::String::ConfigurationEnableMessage, ArgumentType::Flag, Argument::Visibility::Help },
4344
Argument{ Execution::Args::Type::ConfigurationDisable, Resource::String::ConfigurationDisableMessage, ArgumentType::Flag, Argument::Visibility::Help },
4445
};

src/AppInstallerCLICore/ExecutionArgs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ namespace AppInstaller::CLI::Execution
124124
// Configuration
125125
ConfigurationFile,
126126
ConfigurationAcceptWarning,
127+
ConfigurationSuppressPrologue,
127128
ConfigurationEnable,
128129
ConfigurationDisable,
129130
ConfigurationModulePath,

src/AppInstallerCLICore/Resources.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ namespace AppInstaller::CLI::Resource
106106
WINGET_DEFINE_RESOURCE_STRINGID(ConfigurationSettings);
107107
WINGET_DEFINE_RESOURCE_STRINGID(ConfigurationStatusWatchArgumentDescription);
108108
WINGET_DEFINE_RESOURCE_STRINGID(ConfigurationSuccessfullyApplied);
109+
WINGET_DEFINE_RESOURCE_STRINGID(ConfigurationSuppressPrologueArgumentDescription);
109110
WINGET_DEFINE_RESOURCE_STRINGID(ConfigurationUnexpectedTestResult);
110111
WINGET_DEFINE_RESOURCE_STRINGID(ConfigurationUnitAssertHadNegativeResult);
111112
WINGET_DEFINE_RESOURCE_STRINGID(ConfigurationUnitFailed);

src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1369,27 +1369,31 @@ namespace AppInstaller::CLI::Workflow
13691369
auto getDetailsOperation = configContext.Processor().GetSetDetailsAsync(configContext.Set(), ConfigurationUnitDetailFlags::ReadOnly);
13701370
auto unification = anon::CreateProgressCancellationUnification(std::move(progressScope), getDetailsOperation);
13711371

1372+
bool suppressDetailsOutput = context.Args.Contains(Args::Type::ConfigurationAcceptWarning) && context.Args.Contains(Args::Type::ConfigurationSuppressPrologue);
13721373
anon::OutputHelper outputHelper{ context };
13731374
uint32_t unitsShown = 0;
13741375

1375-
getDetailsOperation.Progress([&](const IAsyncOperationWithProgress<GetConfigurationSetDetailsResult, GetConfigurationUnitDetailsResult>& operation, const GetConfigurationUnitDetailsResult&)
1376-
{
1377-
auto threadContext = context.SetForCurrentThread();
1376+
if (!suppressDetailsOutput)
1377+
{
1378+
getDetailsOperation.Progress([&](const IAsyncOperationWithProgress<GetConfigurationSetDetailsResult, GetConfigurationUnitDetailsResult>& operation, const GetConfigurationUnitDetailsResult&)
1379+
{
1380+
auto threadContext = context.SetForCurrentThread();
13781381

1379-
unification.Reset();
1382+
unification.Reset();
13801383

1381-
auto unitResults = operation.GetResults().UnitResults();
1382-
for (unitsShown; unitsShown < unitResults.Size(); ++unitsShown)
1383-
{
1384-
GetConfigurationUnitDetailsResult unitResult = unitResults.GetAt(unitsShown);
1385-
anon::LogFailedGetConfigurationUnitDetails(unitResult.Unit(), unitResult.ResultInformation());
1386-
outputHelper.OutputConfigurationUnitInformation(unitResult.Unit());
1387-
}
1384+
auto unitResults = operation.GetResults().UnitResults();
1385+
for (unitsShown; unitsShown < unitResults.Size(); ++unitsShown)
1386+
{
1387+
GetConfigurationUnitDetailsResult unitResult = unitResults.GetAt(unitsShown);
1388+
anon::LogFailedGetConfigurationUnitDetails(unitResult.Unit(), unitResult.ResultInformation());
1389+
outputHelper.OutputConfigurationUnitInformation(unitResult.Unit());
1390+
}
13881391

1389-
progressScope = context.Reporter.BeginAsyncProgress(true);
1390-
progressScope->Callback().SetProgressMessage(gettingDetailString);
1391-
unification.Progress(std::move(progressScope));
1392-
});
1392+
progressScope = context.Reporter.BeginAsyncProgress(true);
1393+
progressScope->Callback().SetProgressMessage(gettingDetailString);
1394+
unification.Progress(std::move(progressScope));
1395+
});
1396+
}
13931397

13941398
HRESULT hr = S_OK;
13951399
GetConfigurationSetDetailsResult result = nullptr;
@@ -1419,7 +1423,7 @@ namespace AppInstaller::CLI::Workflow
14191423
}
14201424

14211425
// Handle any missing progress callbacks that are in the results
1422-
if (result)
1426+
if (result && !suppressDetailsOutput)
14231427
{
14241428
auto unitResults = result.UnitResults();
14251429
if (unitResults)
@@ -1434,11 +1438,14 @@ namespace AppInstaller::CLI::Workflow
14341438
}
14351439

14361440
// Handle any units that are NOT in the results (due to an exception part of the way through)
1437-
auto allUnits = configContext.Set().Units();
1438-
for (unitsShown; unitsShown < allUnits.Size(); ++unitsShown)
1441+
if (!suppressDetailsOutput)
14391442
{
1440-
ConfigurationUnit unit = allUnits.GetAt(unitsShown);
1441-
outputHelper.OutputConfigurationUnitInformation(unit);
1443+
auto allUnits = configContext.Set().Units();
1444+
for (unitsShown; unitsShown < allUnits.Size(); ++unitsShown)
1445+
{
1446+
ConfigurationUnit unit = allUnits.GetAt(unitsShown);
1447+
outputHelper.OutputConfigurationUnitInformation(unit);
1448+
}
14421449
}
14431450

14441451
if (outputHelper.ValuesTruncated)

src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3109,4 +3109,7 @@ Please specify one of them using the --source option to proceed.</value>
31093109
<data name="StoreInstall_PackageNotAvailableForCurrentSystem" xml:space="preserve">
31103110
<value>The package is not compatible with the current Windows version or platform.</value>
31113111
</data>
3112+
<data name="ConfigurationSuppressPrologueArgumentDescription" xml:space="preserve">
3113+
<value>Suppress showing initial configuration details when possible</value>
3114+
</data>
31123115
</root>

src/ConfigurationRemotingServer/Program.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ internal class Program
7070

7171
static int Main(string[] args)
7272
{
73+
// Remove any attached console to prevent modules (or their actions) from writing to our console.
74+
FreeConsole();
75+
7376
// Help find WindowsPackageManager.dll
7477
AssemblyLoadContext.Default.ResolvingUnmanagedDll += NativeAssemblyLoadContext.ResolvingUnmanagedHandler;
7578

@@ -196,5 +199,9 @@ private static extern int WindowsPackageManagerConfigurationCompleteOutOfProcess
196199

197200
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
198201
private static extern IntPtr GetCommandLineW();
202+
203+
[DllImport("kernel32.dll")]
204+
[return: MarshalAs(UnmanagedType.Bool)]
205+
private static extern bool FreeConsole();
199206
}
200207
}

0 commit comments

Comments
 (0)