in src/Cli/func/Actions/AzureActions/PublishFunctionAppAction.cs [1324:1383]
private IDictionary<string, string> MergeAppSettings(IDictionary<string, string> azure, IDictionary<string, string> local, IDictionary<string, string> additional)
{
var result = new Dictionary<string, string>(azure);
foreach (var pair in local)
{
if (result.ContainsKeyCaseInsensitive(pair.Key) &&
!result.GetValueCaseInsensitive(pair.Key).Equals(pair.Value, StringComparison.OrdinalIgnoreCase))
{
ColoredConsole.WriteLine($"App setting {pair.Key} is different between azure and {SecretsManager.AppSettingsFileName}");
if (OverwriteSettings)
{
ColoredConsole.WriteLine("Overwriting setting in azure with local value because '--overwrite-settings [-y]' was specified.");
result[pair.Key] = pair.Value;
}
else
{
string answer;
do
{
ColoredConsole.WriteLine(QuestionColor("Would you like to overwrite value in azure? [yes/no/show]"));
answer = Console.ReadLine();
if (answer.Equals("show", StringComparison.OrdinalIgnoreCase))
{
ColoredConsole
.WriteLine($"Azure: {azure.GetValueCaseInsensitive(pair.Key)}")
.WriteLine($"Locally: {pair.Value}");
}
}
while (!answer.Equals("yes", StringComparison.OrdinalIgnoreCase) &&
!answer.Equals("no", StringComparison.OrdinalIgnoreCase));
if (answer.Equals("yes", StringComparison.OrdinalIgnoreCase))
{
result[pair.Key] = pair.Value;
}
}
}
else
{
ColoredConsole.WriteLine($"Setting {pair.Key} = ****");
result[pair.Key] = pair.Value;
}
}
foreach (var pair in additional)
{
if (!string.IsNullOrEmpty(pair.Value))
{
result[pair.Key] = pair.Value;
}
else if (result.ContainsKey(pair.Key))
{
ColoredConsole.WriteLine(WarningColor($"Removing '{pair.Key}' from '{FunctionAppName}'"));
result.Remove(pair.Key);
}
}
return result;
}