/// <summary> /// Ensure the the environment variable MSBuildDisableFeaturesFromWave is set to a proper value. /// </summary> /// <returns> String representation of the set change wave. "999.999" if unset or invalid, and clamped if out of bounds. </returns> internal static void ApplyChangeWave() { Version changeWave; // If unset, enable all features. if (DisabledWave.Length == 0 || DisabledWave.Equals(EnableAllFeatures, StringComparison.OrdinalIgnoreCase)) { ConversionState = ChangeWaveConversionState.Valid; DisabledWave = ChangeWaves.EnableAllFeatures; return; } // If the version is of invalid format, log a warning and enable all features. if (!Version.TryParse(DisabledWave, out changeWave)) { ConversionState = ChangeWaveConversionState.InvalidFormat; DisabledWave = ChangeWaves.EnableAllFeatures; return; } // If the version is 999.999, we're done. else if (changeWave == EnableAllFeaturesAsVersion) { ConversionState = ChangeWaveConversionState.Valid; DisabledWave = changeWave.ToString(); return; } // If the version is out of rotation, log a warning and clamp the value. else if (changeWave < LowestWaveAsVersion) { ConversionState = ChangeWaveConversionState.OutOfRotation; DisabledWave = LowestWave; return; } else if (changeWave > HighestWaveAsVersion) { ConversionState = ChangeWaveConversionState.OutOfRotation; DisabledWave = HighestWave; return; } // Ensure it's set to an existing version within the current rotation if (!AllWavesAsVersion.Contains(changeWave)) { foreach (Version wave in AllWavesAsVersion) { if (wave > changeWave) { ConversionState = ChangeWaveConversionState.Valid; DisabledWave = wave.ToString(); return; } } } ConversionState = ChangeWaveConversionState.Valid; DisabledWave = changeWave.ToString(); }
/// <summary> /// Compares the passed wave to the MSBuildDisableFeaturesFromVersion environment variable. /// </summary> /// <param name="wave">The version to compare.</param> /// <returns>A bool indicating whether the version is enabled.</returns> public static bool AreFeaturesEnabled(Version wave) { if (_state == ChangeWaveConversionState.NotConvertedYet) { ApplyChangeWave(); } // This is opt out behavior, all waves are enabled by default. if (DisabledWave.Length == 0 || DisabledWave.Equals(EnableAllFeatures, StringComparison.OrdinalIgnoreCase)) { return(true); } Version currentSetWave; // If we can't parse the environment variable, default to enabling features. if (!Version.TryParse(DisabledWave, out currentSetWave)) { return(true); } return(wave < currentSetWave); }