public void WriteWarningMessageForVersionUpgrade()

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}'.");
            }
        }