in src/Common/UpgradeNotification/UpgradeNotificationHelper.cs [59:136]
public void WriteWarningMessageForVersionUpgrade(AzurePSCmdlet cmdlet, AzurePSQoSEvent _qosEvent, IConfigManager configManager, IFrequencyService frequencyService) {
// skip if it's the exceptional case.
if (cmdlet == null || _qosEvent == null || configManager == null || frequencyService == null) {
return;
}
try
{
_qosEvent.HigherVersionsChecked = false;
_qosEvent.UpgradeNotificationPrompted = false;
//disabled by az config, skip
if (configManager.GetConfigValue<bool>(ConfigKeysForCommon.CheckForUpgrade).Equals(false))
{
return;
}
//has done check this session, skip
if (hasNotified)
{
return;
}
frequencyService.Register(FrequencyKeyForUpgradeCheck, FrequencyTimeSpanForUpgradeCheck);
frequencyService.Register(FrequencyKeyForUpgradeNotification, FrequencyTimeSpanForUpgradeNotification);
string checkModuleName = "Az";
string checkModuleCurrentVersion = _qosEvent.AzVersion;
string upgradeModuleNames = "Az";
if ("0.0.0".Equals(_qosEvent.AzVersion))
{
checkModuleName = _qosEvent.ModuleName;
checkModuleCurrentVersion = _qosEvent.ModuleVersion;
upgradeModuleNames = "Az.*";
}
//refresh az module versions if necessary
frequencyService.TryRun(FrequencyKeyForUpgradeCheck, () => true, () =>
{
Thread loadHigherVersionsThread = new Thread(new ThreadStart(() =>
{
_qosEvent.HigherVersionsChecked = true;
try
{
//no lock for this method, may skip some notifications, it's expected.
RefreshVersionInfo(upgradeModuleNames);
}
catch (Exception)
{
//do nothing
}
}));
loadHigherVersionsThread.Start();
});
bool shouldPrintWarningMsg = HasHigherVersion(checkModuleName, checkModuleCurrentVersion);
//prompt warning message for upgrade if necessary
frequencyService.TryRun(FrequencyKeyForUpgradeNotification, () => shouldPrintWarningMsg, () =>
{
_qosEvent.UpgradeNotificationPrompted = true;
hasNotified = true;
string latestModuleVersion = GetModuleLatestVersion(checkModuleName);
string updateModuleCmdletName = GetCmdletForUpdateModule();
string warningMsg = string.Format(Resources.VersionUpgradeMessage, checkModuleName, checkModuleCurrentVersion, latestModuleVersion, updateModuleCmdletName, upgradeModuleNames);
if ("Az".Equals(checkModuleName) && GetInstance().HasHigherMajorVersion(checkModuleName, checkModuleCurrentVersion))
{
warningMsg += Environment.NewLine;
warningMsg += string.Format(Resources.BreakingChangesMessage, checkModuleCurrentVersion, latestModuleVersion, Resources.MigrationGuideLink);
}
cmdlet.WriteWarning(warningMsg);
});
}
catch (Exception ex)
{
cmdlet.WriteDebug($"Failed to write warning message for version upgrade due to '{ex.Message}'.");
}
}