Exemplo n.º 1
0
    public static Version GetVersion(string workDir, string tagPrefix, MajorMinor minMajorMinor, string buildMeta, VersionPart autoIncrement, string defaultPreReleasePhase, ILogger log, bool ignoreHeight = false)
    {
        log = log ?? throw new ArgumentNullException(nameof(log));

        defaultPreReleasePhase = string.IsNullOrEmpty(defaultPreReleasePhase)
            ? "alpha"
            : defaultPreReleasePhase;

        var(version, height) = GetVersion(workDir, tagPrefix, defaultPreReleasePhase, log);

        _       = height.HasValue && ignoreHeight && log.IsDebugEnabled && log.Debug("Ignoring height.");
        version = !height.HasValue || ignoreHeight ? version : version.WithHeight(height.Value, autoIncrement, defaultPreReleasePhase);

        version = version.AddBuildMetadata(buildMeta);

        var calculatedVersion = version.Satisfying(minMajorMinor, defaultPreReleasePhase);

        _ = calculatedVersion != version
            ? log.IsInfoEnabled && log.Info($"Bumping version to {calculatedVersion} to satisfy minimum major minor {minMajorMinor}.")
            : log.IsDebugEnabled && log.Debug($"The calculated version {calculatedVersion} satisfies the minimum major minor {minMajorMinor}.");

        _ = log.IsInfoEnabled && log.Info($"Calculated version {calculatedVersion}.");

        return(calculatedVersion);
    }
Exemplo n.º 2
0
        private static Version GetVersion(string repoOrWorkDir, string tagPrefix, MajorMinor minMajorMinor, string buildMeta, Verbosity verbosity)
        {
            var log = new Logger(verbosity);

            if (log.IsDebugEnabled)
            {
                log.Debug($"MinVer {informationalVersion}.");
            }

            if (!RepositoryEx.TryCreateRepo(repoOrWorkDir, out var repo))
            {
                var version = new Version(minMajorMinor?.Major ?? 0, minMajorMinor?.Minor ?? 0, buildMeta);

                log.WarnIsNotAValidRepositoryOrWorkDirUsingDefaultVersion(repoOrWorkDir, version);

                return(version);
            }

            try
            {
                return(Versioner.GetVersion(repo, tagPrefix, minMajorMinor, buildMeta, log));
            }
            finally
            {
                repo.Dispose();
            }
        }
Exemplo n.º 3
0
        private static bool TryParse(string repoOrWorkDirOption, string minMajorMinorOption, string verbosityOption, out string repoOrWorkDir, out MajorMinor minMajorMinor, out Verbosity verbosity)
        {
            repoOrWorkDir = ".";
            minMajorMinor = default;
            verbosity     = default;

            if (!string.IsNullOrEmpty(repoOrWorkDirOption) && !Directory.Exists(repoOrWorkDir = repoOrWorkDirOption))
            {
                Logger.ErrorRepoOrWorkDirDoesNotExist(repoOrWorkDirOption);
                return(false);
            }

            if (!string.IsNullOrEmpty(minMajorMinorOption) && !MajorMinor.TryParse(minMajorMinorOption, out minMajorMinor))
            {
                Logger.ErrorInvalidMinMajorMinor(minMajorMinorOption);
                return(false);
            }

            if (!string.IsNullOrEmpty(verbosityOption) && !VerbosityMap.TryMap(verbosityOption, out verbosity))
            {
                Logger.ErrorInvalidVerbosity(verbosityOption);
                return(false);
            }

            return(true);
        }
Exemplo n.º 4
0
 public Chord(NoteLetter key, MajorMinor majorMinor)
 {
     _key        = key;
     _majorMinor = majorMinor;
     _baseNotes  = new List <NoteLetter>();
     _addedNotes = new List <NoteLetter>();
 }
Exemplo n.º 5
0
        public static Version GetVersion(string workDir, string tagPrefix, MajorMinor minMajorMinor, string buildMeta, VersionPart autoIncrement, string defaultPreReleasePhase, ILogger log)
        {
            log = log ?? new NullLogger();

            defaultPreReleasePhase = string.IsNullOrEmpty(defaultPreReleasePhase)
                ? "alpha"
                : defaultPreReleasePhase;

            var version = GetVersion(workDir, tagPrefix, autoIncrement, defaultPreReleasePhase, log).AddBuildMetadata(buildMeta);

            var calculatedVersion = version.Satisfying(minMajorMinor, defaultPreReleasePhase);

            if (calculatedVersion != version)
            {
                log.Info($"Bumping version to {calculatedVersion} to satisfy minimum major minor {minMajorMinor}.");
            }
            else
            {
                if (minMajorMinor != null)
                {
                    log.Debug($"The calculated version {calculatedVersion} satisfies the minimum major minor {minMajorMinor}.");
                }
            }

            log.Info($"Calculated version {calculatedVersion}.");

            return(calculatedVersion);
        }
Exemplo n.º 6
0
        public static Version GetVersion(string repoOrWorkDir, string tagPrefix, MajorMinor minMajorMinor, string buildMeta, VersionPart autoIncrement, ILogger log)
        {
            if (log == null)
            {
                throw new System.ArgumentNullException(nameof(log));
            }

            var version = GetVersion(repoOrWorkDir, tagPrefix, autoIncrement, log).AddBuildMetadata(buildMeta);

            var calculatedVersion = version.Satisfying(minMajorMinor);

            if (calculatedVersion != version)
            {
                log.Info($"Bumping version to {calculatedVersion} to satisfy minimum major minor {minMajorMinor}.");
            }
            else
            {
                if (minMajorMinor != default)
                {
                    log.Debug($"The calculated version {calculatedVersion} satisfies the minimum major minor {minMajorMinor}.");
                }
            }

            log.Info($"Calculated version {calculatedVersion}.");

            return(calculatedVersion);
        }
Exemplo n.º 7
0
        private static bool TryParse(string workDirOption, string minMajorMinorOption, string verbosityOption, string autoIncrementOption, out string workDir, out MajorMinor minMajorMinor, out Verbosity verbosity, out VersionPart autoIncrement)
        {
            workDir       = ".";
            minMajorMinor = null;
            verbosity     = default;
            autoIncrement = default;

            if (!string.IsNullOrEmpty(workDirOption) && !Directory.Exists(workDir = workDirOption))
            {
                Logger.ErrorWorkDirDoesNotExist(workDirOption);
                return(false);
            }

            if (!string.IsNullOrEmpty(minMajorMinorOption) && !MajorMinor.TryParse(minMajorMinorOption, out minMajorMinor))
            {
                Logger.ErrorInvalidMinMajorMinor(minMajorMinorOption);
                return(false);
            }

            if (!string.IsNullOrEmpty(verbosityOption) && !VerbosityMap.TryMap(verbosityOption, out verbosity))
            {
                Logger.ErrorInvalidVerbosity(verbosityOption);
                return(false);
            }

            if (!string.IsNullOrEmpty(autoIncrementOption) && !Enum.TryParse(autoIncrementOption, true, out autoIncrement))
            {
                Logger.ErrorInvalidAutoIncrement(autoIncrementOption);
                return(false);
            }

            return(true);
        }
Exemplo n.º 8
0
        public static bool TryParseEnvVars([NotNullWhen(returnValue: true)] out Options?options)
        {
            options = null;

            VersionPart?autoIncrement = null;
            MajorMinor? minMajorMinor = null;
            Verbosity?  verbosity     = null;

            Lib.Version?versionOverride = null;

            var autoIncrementEnvVar = GetEnvVar("MinVerAutoIncrement");

            if (!string.IsNullOrEmpty(autoIncrementEnvVar))
            {
                if (Enum.TryParse <VersionPart>(autoIncrementEnvVar, true, out var versionPart))
                {
                    autoIncrement = versionPart;
                }
                else
                {
                    Logger.ErrorInvalidEnvVar("MinVerAutoIncrement", autoIncrementEnvVar, VersionPartExtensions.ValidValues);
                    return(false);
                }
            }

            var buildMeta = GetEnvVar("MinVerBuildMetadata");

            var defaultPreReleasePhase = GetEnvVar("MinVerDefaultPreReleasePhase");

            var minMajorMinorEnvVar = GetEnvVar("MinVerMinimumMajorMinor");

            if (!string.IsNullOrEmpty(minMajorMinorEnvVar) && !MajorMinor.TryParse(minMajorMinorEnvVar, out minMajorMinor))
            {
                Logger.ErrorInvalidEnvVar("MinVerMinimumMajorMinor", minMajorMinorEnvVar, MajorMinor.ValidValues);
                return(false);
            }

            var tagPrefix = GetEnvVar("MinVerTagPrefix");

            var verbosityEnvVar = GetEnvVar("MinVerVerbosity");

            if (!string.IsNullOrEmpty(verbosityEnvVar) && !VerbosityMap.TryMap(verbosityEnvVar, out verbosity))
            {
                Logger.ErrorInvalidEnvVar("MinVerVerbosity", verbosityEnvVar, VerbosityMap.ValidValues);
                return(false);
            }

            var versionOverrideEnvVar = GetEnvVar("MinVerVersionOverride");

            if (!string.IsNullOrEmpty(versionOverrideEnvVar) && !Lib.Version.TryParse(versionOverrideEnvVar, out versionOverride))
            {
                Logger.ErrorInvalidEnvVar("MinVerVersionOverride", versionOverrideEnvVar, "");
                return(false);
            }

            options = new Options(autoIncrement, buildMeta, defaultPreReleasePhase, minMajorMinor, tagPrefix, verbosity, versionOverride);

            return(true);
        }
Exemplo n.º 9
0
    public static bool TryParse(
        string?autoIncrementOption,
        string?buildMetaOption,
        string?defaultPreReleasePhaseOption,
        bool?ignoreHeight,
        string?minMajorMinorOption,
        string?tagPrefixOption,
        string?verbosityOption,
#if MINVER
        string?versionOverrideOption,
#endif
        [NotNullWhen(returnValue: true)] out Options?options)
    {
        options = null;

        VersionPart?autoIncrement = null;
        MajorMinor? minMajorMinor = null;
        Verbosity?  verbosity     = null;

        Lib.Version?versionOverride = null;

        if (!string.IsNullOrEmpty(autoIncrementOption))
        {
            if (Enum.TryParse <VersionPart>(autoIncrementOption, true, out var versionPart))
            {
                autoIncrement = versionPart;
            }
            else
            {
                Logger.ErrorInvalidAutoIncrement(autoIncrementOption);
                return(false);
            }
        }

        if (!string.IsNullOrEmpty(minMajorMinorOption) && !MajorMinor.TryParse(minMajorMinorOption, out minMajorMinor))
        {
            Logger.ErrorInvalidMinMajorMinor(minMajorMinorOption);
            return(false);
        }

        if (!string.IsNullOrEmpty(verbosityOption) && !VerbosityMap.TryMap(verbosityOption, out verbosity))
        {
            Logger.ErrorInvalidVerbosity(verbosityOption);
            return(false);
        }

#if MINVER
        if (!string.IsNullOrEmpty(versionOverrideOption) && !Lib.Version.TryParse(versionOverrideOption, out versionOverride))
        {
            Logger.ErrorInvalidVersionOverride(versionOverrideOption);
            return(false);
        }
#endif

        options = new Options(autoIncrement, buildMetaOption, defaultPreReleasePhaseOption, ignoreHeight, minMajorMinor, tagPrefixOption, verbosity, versionOverride);

        return(true);
    }
 public ChordSongInterpreter(NoteLetter key, MajorMinor majorMinor, int sampleRate, int beatsPerMinute, int beatsPerMeasure)
 {
     _key                 = key;
     _majorMinor          = majorMinor;
     _sampleRate          = sampleRate;
     _tempo               = beatsPerMinute;
     _timeSignature       = beatsPerMeasure;
     _fallbackInterpreter = new DefaultSongInterpreter(sampleRate, beatsPerMinute, beatsPerMeasure);
     SetupChordLookup();
 }
Exemplo n.º 11
0
        public static async Task RepoWithHistory(int minMajor, int minMinor)
        {
            // arrange
            var minMajorMinor = new MajorMinor(minMajor, minMinor);

            var historicalCommands =
                @"
git commit --allow-empty -m '.'
git tag not-a-version
git checkout -b foo
git commit --allow-empty -m '.'
git tag 1.0.0-foo.1
git checkout main
git merge foo --no-edit --no-ff
git checkout -b bar
git commit --allow-empty -m '.'
git checkout main
git checkout -b baz
git commit --allow-empty -m '.'
git checkout main
git merge bar baz --no-edit --no-ff --strategy=octopus
";

            var path = MethodBase.GetCurrentMethod().GetTestDirectory(minMajorMinor);

            await EnsureEmptyRepository(path);

            foreach (var item in historicalCommands
                     .Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)
                     .Select((command, index) => new { Command = command, Index = $"{index}" }))
            {
                if (item.Command.StartsWith("git commit", StringComparison.Ordinal))
                {
                    // Sometimes git seems to treat bar and baz as a single branch if the commits are empty.
                    // This probably occurs during the octopus merge.
                    // So let's add a file before each commit to ensure that doesn't happen.
                    await File.WriteAllTextAsync(Path.Combine(path, item.Index), item.Index);

                    _ = await ReadAsync("git", $"add {item.Index}", path);

                    // if not enough delay is given between commits,
                    // the order of parallel commits on different branches seems to be non-deterministic
                    await Task.Delay(1100);
                }

                var nameAndArgs = item.Command.Split(" ", 2);
                _ = await ReadAsync(nameAndArgs[0], nameAndArgs[1], path);
            }

            var log = new TestLogger();

            // act
            _ = Versioner.GetVersion(path, "", minMajorMinor, "", default, "", log);
Exemplo n.º 12
0
 public SevenChord(NoteLetter key, MajorMinor majorMinor) : base(key, majorMinor)
 {
     if (_majorMinor == MajorMinor.Major)
     {
         _baseNotes = new List <NoteLetter>(3)
         {
             AddHalfSteps(key, 11), AddHalfSteps(key, 14), AddHalfSteps(key, 17)
         };
     }
     else
     {
         _baseNotes = new List <NoteLetter>(3)
         {
             AddHalfSteps(key, 11), AddHalfSteps(key, 15), AddHalfSteps(key, 18)
         };
     }
 }
Exemplo n.º 13
0
 public SixChord(NoteLetter key, MajorMinor majorMinor) : base(key, majorMinor)
 {
     if (_majorMinor == MajorMinor.Major)
     {
         _baseNotes = new List <NoteLetter>(3)
         {
             AddHalfSteps(key, 9), AddHalfSteps(key, 12), AddHalfSteps(key, 16)
         };
     }
     else
     {
         _baseNotes = new List <NoteLetter>(3)
         {
             AddHalfSteps(key, 9), AddHalfSteps(key, 13), AddHalfSteps(key, 16)
         };
     }
 }
Exemplo n.º 14
0
 public ThreeChord(NoteLetter key, MajorMinor majorMinor) : base(key, majorMinor)
 {
     if (_majorMinor == MajorMinor.Major)
     {
         _baseNotes = new List <NoteLetter>(3)
         {
             AddHalfSteps(key, 4), AddHalfSteps(key, 7), AddHalfSteps(key, 11)
         };
     }
     else
     {
         _baseNotes = new List <NoteLetter>(3)
         {
             AddHalfSteps(key, 4), AddHalfSteps(key, 8), AddHalfSteps(key, 11)
         };
     }
 }
Exemplo n.º 15
0
 public TwoChord(NoteLetter key, MajorMinor majorMinor) : base(key, majorMinor)
 {
     if (_majorMinor == MajorMinor.Major)
     {
         _baseNotes = new List <NoteLetter>(3)
         {
             AddHalfSteps(key, 2), AddHalfSteps(key, 5), AddHalfSteps(key, 9)
         };
     }
     else
     {
         _baseNotes = new List <NoteLetter>(3)
         {
             AddHalfSteps(key, 2), AddHalfSteps(key, 5), AddHalfSteps(key, 8)
         };
     }
 }
Exemplo n.º 16
0
        public static Version GetVersion(string repoOrWorkDir, string tagPrefix, MajorMinor minMajorMinor, string buildMeta, ILogger log)
        {
            var version = GetVersion(repoOrWorkDir, tagPrefix, log).AddBuildMetadata(buildMeta);

            var calculatedVersion = version.Satisfying(minMajorMinor);

            if (calculatedVersion != version)
            {
                log.Info($"Bumping version to {calculatedVersion} to satisfy minimum major minor {minMajorMinor}.");
            }
            else
            {
                if (minMajorMinor != default)
                {
                    log.Debug($"The calculated version {calculatedVersion} satisfies the minimum major minor {minMajorMinor}.");
                }
            }

            log.Info($"Calculated version {calculatedVersion}.");

            return(calculatedVersion);
        }
Exemplo n.º 17
0
        public static bool TryParse(string value, out MajorMinor majorMinor)
        {
            majorMinor = null;

            if (string.IsNullOrWhiteSpace(value))
            {
                return(false);
            }

            var numbers = value.Split('.');

            var minor = 0;

            if (numbers.Length > 2 ||
                !int.TryParse(numbers[0], out var major) ||
                (numbers.Length > 1 && !int.TryParse(numbers[1], out minor)))
            {
                return(false);
            }

            majorMinor = new MajorMinor(major, minor);

            return(true);
        }
Exemplo n.º 18
0
        public static bool TryParseEnvVars(out Options options)
        {
            options = new Options();

            var autoIncrementEnvVar = GetEnvVar("MinVerAutoIncrement");

            if (!string.IsNullOrEmpty(autoIncrementEnvVar))
            {
                if (!Enum.TryParse <VersionPart>(autoIncrementEnvVar, true, out var autoIncrement))
                {
                    Logger.ErrorInvalidEnvVar("MinVerAutoIncrement", autoIncrementEnvVar, VersionPartEx.ValidValues);
                    return(false);
                }

                options.AutoIncrement = autoIncrement;
            }

            options.BuildMeta = GetEnvVar("MinVerBuildMetadata");
            options.DefaultPreReleasePhase = GetEnvVar("MinVerDefaultPreReleasePhase");

            var minMajorMinorEnvVar = GetEnvVar("MinVerMinimumMajorMinor");

            if (!string.IsNullOrEmpty(minMajorMinorEnvVar))
            {
                if (!MajorMinor.TryParse(minMajorMinorEnvVar, out var minMajorMinor))
                {
                    Logger.ErrorInvalidEnvVar("MinVerMinimumMajorMinor", minMajorMinorEnvVar, MajorMinor.ValidValues);
                    return(false);
                }

                options.MinMajorMinor = minMajorMinor;
            }

            options.TagPrefix = GetEnvVar("MinVerTagPrefix");

            var verbosityEnvVar = GetEnvVar("MinVerVerbosity");

            if (!string.IsNullOrEmpty(verbosityEnvVar))
            {
                if (!VerbosityMap.TryMap(verbosityEnvVar, out var verbosity))
                {
                    Logger.ErrorInvalidEnvVar("MinVerVerbosity", verbosityEnvVar, VerbosityMap.ValidValues);
                    return(false);
                }

                options.Verbosity = verbosity;
            }

            var versionOverrideEnvVar = GetEnvVar("MinVerVersionOverride");

            if (!string.IsNullOrEmpty(versionOverrideEnvVar))
            {
                if (!Lib.Version.TryParse(versionOverrideEnvVar, out var versionOverride))
                {
                    Logger.ErrorInvalidEnvVar("MinVerVersionOverride", versionOverrideEnvVar, null);
                    return(false);
                }

                options.VersionOverride = versionOverride;
            }

            return(true);
        }
Exemplo n.º 19
0
        public static bool TryParse(
            string autoIncrementOption,
            string buildMetaOption,
            string defaultPreReleasePhaseOption,
            string minMajorMinorOption,
            string tagPrefixOption,
            string verbosityOption,
#if MINVER
            string versionOverrideOption,
#endif
            out Options options)
        {
            options = new Options();

            if (!string.IsNullOrEmpty(autoIncrementOption))
            {
                if (!Enum.TryParse <VersionPart>(autoIncrementOption, true, out var autoIncrement))
                {
                    Logger.ErrorInvalidAutoIncrement(autoIncrementOption);
                    return(false);
                }

                options.AutoIncrement = autoIncrement;
            }

            options.BuildMeta = buildMetaOption;
            options.DefaultPreReleasePhase = defaultPreReleasePhaseOption;

            if (!string.IsNullOrEmpty(minMajorMinorOption))
            {
                if (!MajorMinor.TryParse(minMajorMinorOption, out var minMajorMinor))
                {
                    Logger.ErrorInvalidMinMajorMinor(minMajorMinorOption);
                    return(false);
                }

                options.MinMajorMinor = minMajorMinor;
            }

            options.TagPrefix = tagPrefixOption;

            if (!string.IsNullOrEmpty(verbosityOption))
            {
                if (!VerbosityMap.TryMap(verbosityOption, out var verbosity))
                {
                    Logger.ErrorInvalidVerbosity(verbosityOption);
                    return(false);
                }

                options.Verbosity = verbosity;
            }

#if MINVER
            if (!string.IsNullOrEmpty(versionOverrideOption))
            {
                if (!Lib.Version.TryParse(versionOverrideOption, out var versionOverride))
                {
                    Logger.ErrorInvalidVersionOverride(versionOverrideOption);
                    return(false);
                }

                options.VersionOverride = versionOverride;
            }
#endif

            return(true);
        }