Пример #1
0
        /// <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();
        }
Пример #2
0
        /// <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);
        }