@if (SaveState == EffectiveConfigSaveFlow.SaveUiState.Saving || SaveState == EffectiveConfigSaveFlow.SaveUiState.RestoreInProgress)
{
@(SaveState == EffectiveConfigSaveFlow.SaveUiState.Saving ? "Saving, validating and restarting…" : "Restoring backup and restarting…")
}
else if (SaveState == EffectiveConfigSaveFlow.SaveUiState.ValidateFailed && SaveResult != null)
{
Config was saved, but validation failed. Restart was not attempted. You can restore the backup or keep editing.
@if (SaveResult.BackupPath != null)
{
Backup: @SaveResult.BackupPath
}
Validation output
@GetValidationFailedOutput(SaveResult)
}
else if (SaveState == EffectiveConfigSaveFlow.SaveUiState.WriteFailed && SaveResult != null)
{
Save failed. @SaveResult.UserMessage
@if (!string.IsNullOrEmpty(SaveResult.RestartStdErr))
{
@SaveResult.RestartStdErr
}
}
else if (SaveState == EffectiveConfigSaveFlow.SaveUiState.ReloadFailed && SaveResult != null)
{
Config was saved, but the restart command failed. You can restore the backup or keep editing.
@if (SaveResult.BackupPath != null)
{
Backup: @SaveResult.BackupPath
}
Command output
@GetRestartFailedOutput(SaveResult)
}
else if (SaveState == EffectiveConfigSaveFlow.SaveUiState.RestoreFailed && RestoreResult != null)
{
@RestoreResult.UserMessage
Command output
@GetRestoreFailedOutput(RestoreResult)
}
else
{
@if (ValidationErrors.Count > 0 || ValidationWarnings.Count > 0)
{
@if (ValidationErrors.Count > 0)
{
Validation errors
@foreach (var issue in ValidationErrors)
{
@issue.Message
}
}
@if (ValidationWarnings.Count > 0)
{
Validation warnings
@foreach (var issue in ValidationWarnings)
{
@issue.Message
}
}
}
These changes will be written to your config. Remove any you don't want to keep.
@if (ManagedFilePath != null)
{
Target file: @ManagedFilePath
}
@if (PendingChanges.Count == 0)
{
No pending changes. Close to continue editing.
}
else
{
@foreach (var c in PendingChanges)
{
var change = c;
var oldList = AsStringList(change.OldValue);
var newList = AsStringList(change.NewValue);
var isMultiValue = oldList != null || newList != null;
@if (!isMultiValue)
{
@FormatValue(change.OldValue, change.OptionName)
→
@FormatValue(change.NewValue, change.OptionName)
}
@if (isMultiValue)
{
var oldSeq = oldList ?? Array.Empty
();
var newSeq = newList ?? Array.Empty();
var added = newSeq.Except(oldSeq).ToList();
var removed = oldSeq.Except(newSeq).ToList();
var orderOrDuplicatesChanged = added.Count == 0 && removed.Count == 0 && !oldSeq.SequenceEqual(newSeq, StringComparer.Ordinal);
@if (orderOrDuplicatesChanged)
{
Order or duplicates changed:
Before: @string.Join(", ", oldSeq)
After: @string.Join(", ", newSeq)
}
else
{
@foreach (var val in removed)
{
− @val
}
@foreach (var val in added)
{
+ @val
}
}
}
@if (change.CurrentSourceFilePath != null)
{
Overrides @System.IO.Path.GetFileName(change.CurrentSourceFilePath)
}
Revert(change)" title="Revert this change" aria-label="Revert @change.OptionName">
Revert
}
}
}