コード例 #1
0
    public void Write(
        Version version,
        DateTimeOffset versionTime,
        IChangelogLinkBuilder linkBuilder,
        IEnumerable <ConventionalCommit> commits,
        ChangelogOptions changelogOptions)
    {
        string markdown = GenerateMarkdown(version, versionTime, linkBuilder, commits, changelogOptions);

        if (File.Exists(FilePath))
        {
            var contents = File.ReadAllText(FilePath);

            var firstReleaseHeadlineIdx = contents.IndexOf("<a name=\"", StringComparison.Ordinal);

            if (firstReleaseHeadlineIdx >= 0)
            {
                markdown = contents.Insert(firstReleaseHeadlineIdx, markdown);
            }
            else
            {
                markdown = contents + "\n\n" + markdown;
            }

            File.WriteAllText(FilePath, markdown);
        }
        else
        {
            File.WriteAllText(FilePath, changelogOptions.Header + "\n" + markdown);
        }
    }
コード例 #2
0
    public static string GenerateMarkdown(
        Version version,
        DateTimeOffset versionTime,
        IChangelogLinkBuilder linkBuilder,
        IEnumerable <ConventionalCommit> commits,
        ChangelogOptions changelogOptions)
    {
        var versionTagLink = string.IsNullOrWhiteSpace(linkBuilder.BuildVersionTagLink(version))
            ? version.ToString()
            : $"[{version}]({linkBuilder.BuildVersionTagLink(version)})";

        var markdown = $"<a name=\"{version}\"></a>";

        markdown += "\n";
        markdown += $"## {versionTagLink} ({versionTime.Year}-{versionTime.Month}-{versionTime.Day})";
        markdown += "\n";
        markdown += "\n";

        var visibleChangelogSections = changelogOptions.Sections.Where(x => !x.Hidden);

        foreach (var changelogSection in visibleChangelogSections)
        {
            var matchingCommits = commits.Where(commit => commit.Type == changelogSection.Type);
            var buildBlock      = BuildBlock(changelogSection.Section, linkBuilder, matchingCommits);
            if (!string.IsNullOrWhiteSpace(buildBlock))
            {
                markdown += buildBlock;
                markdown += "\n";
            }
        }

        var breaking = BuildBlock("Breaking Changes", linkBuilder, commits.Where(commit => commit.IsBreakingChange));

        if (!string.IsNullOrWhiteSpace(breaking))
        {
            markdown += breaking;
            markdown += "\n";
        }

        if (changelogOptions.IncludeAllCommits)
        {
            var other = BuildBlock(
                "Other",
                linkBuilder,
                commits.Where(commit => !visibleChangelogSections.Any(x => x.Type == commit.Type) && !commit.IsBreakingChange));

            if (!string.IsNullOrWhiteSpace(other))
            {
                markdown += other;
                markdown += "\n";
            }
        }

        return(markdown);
    }
コード例 #3
0
    private static ChangelogOptions MergeChangelogOptions(ChangelogOptions customOptions, ChangelogOptions defaultOptions)
    {
        if (customOptions == null)
        {
            return(defaultOptions);
        }

        return(new ChangelogOptions
        {
            Header = customOptions.Header ?? defaultOptions.Header,
            Sections = customOptions.Sections ?? defaultOptions.Sections,
        });
    }
コード例 #4
0
        public void AlteredCurrentVersionChangelog(bool prepends, int length)
        {
            // Set up the repo
            File.AppendAllText(readmePath, "\nThis is for a fix commit");
            repo.Index.Add("README.md");
            repo.Commit("feat(Foo): Foo feature");

            var changelog = new Changelog();

            File.WriteAllText(TestRepoChangelogPath, "This is previous stuff");
            var options = new ChangelogOptions()
            {
                Version          = "1.0.0",
                WorkingDirectory = Util.GetFullPath(Util.TEST_REPO_DIR),
                AlwaysPrepends   = prepends
            };

            changelog.Generate(options);

            File.AppendAllText(readmePath, "\nsecond commit");
            repo.Index.Add("README.md");
            repo.Commit("fix(Foo): second commit");

            options.Version = "1.0.1";
            changelog.Generate(options);

            File.AppendAllText(readmePath, "\n3rd commit");
            repo.Index.Add("README.md");
            repo.Commit("fix(Foo): 3rd commit commit");

            options.Version = "1.0.1";
            changelog.Generate(options);

            var text = File.ReadAllText(TestRepoChangelogPath);

            var r = text.Split(new[] { "1.0.1" }, StringSplitOptions.None);

            Assert.AreEqual(r.Length, length);
        }