Exemplo n.º 1
0
def test_render_changelog(gitcommits, tags, changelog_content):
    parser = defaults.commit_parser
    changelog_pattern = defaults.bump_pattern
    tree = changelog.generate_tree_from_commits(gitcommits, tags, parser,
                                                changelog_pattern)
    result = changelog.render_changelog(tree)
    assert result == changelog_content
Exemplo n.º 2
0
def test_render_changelog_unreleased(gitcommits):
    some_commits = gitcommits[:7]
    parser = defaults.commit_parser
    changelog_pattern = defaults.bump_pattern
    tree = changelog.generate_tree_from_commits(some_commits, [], parser,
                                                changelog_pattern)
    result = changelog.render_changelog(tree)
    assert "Unreleased" in result
Exemplo n.º 3
0
def test_render_changelog_with_change_type(gitcommits, tags):
    new_title = ":some-emoji: feature"
    change_type_map = {"feat": new_title}
    parser = ConventionalCommitsCz.commit_parser
    changelog_pattern = ConventionalCommitsCz.bump_pattern
    tree = changelog.generate_tree_from_commits(
        gitcommits, tags, parser, changelog_pattern, change_type_map=change_type_map
    )
    result = changelog.render_changelog(tree)
    assert new_title in result
Exemplo n.º 4
0
    def __call__(self):
        commit_parser = self.cz.commit_parser
        changelog_pattern = self.cz.changelog_pattern
        start_rev = self.start_rev
        unreleased_version = self.unreleased_version
        changelog_meta: Dict = {}

        if not changelog_pattern or not commit_parser:
            out.error(
                f"'{self.config.settings['name']}' rule does not support changelog"
            )
            raise SystemExit(NO_PATTERN_MAP)

        tags = git.get_tags()
        if not tags:
            tags = []

        if self.incremental:
            changelog_meta = changelog.get_metadata(self.file_name)
            latest_version = changelog_meta.get("latest_version")
            if latest_version:
                start_rev = self._find_incremental_rev(latest_version, tags)

        commits = git.get_commits(start=start_rev, args="--author-date-order")
        if not commits:
            out.error("No commits found")
            raise SystemExit(NO_COMMITS_FOUND)

        tree = changelog.generate_tree_from_commits(commits, tags,
                                                    commit_parser,
                                                    changelog_pattern,
                                                    unreleased_version)
        changelog_out = changelog.render_changelog(tree)

        if self.dry_run:
            out.write(changelog_out)
            raise SystemExit(0)

        lines = []
        if self.incremental and os.path.isfile(self.file_name):
            with open(self.file_name, "r") as changelog_file:
                lines = changelog_file.readlines()

        with open(self.file_name, "w") as changelog_file:
            if self.incremental:
                new_lines = changelog.incremental_build(
                    changelog_out, lines, changelog_meta)
                changelog_file.writelines(new_lines)
            else:
                changelog_file.write(changelog_out)
Exemplo n.º 5
0
def test_render_changelog_tag_and_unreleased(gitcommits, tags):
    some_commits = gitcommits[:7]
    single_tag = [
        tag for tag in tags if tag.rev == "56c8a8da84e42b526bcbe130bd194306f7c7e813"
    ]

    parser = ConventionalCommitsCz.commit_parser
    changelog_pattern = ConventionalCommitsCz.bump_pattern
    tree = changelog.generate_tree_from_commits(
        some_commits, single_tag, parser, changelog_pattern
    )
    result = changelog.render_changelog(tree)

    assert "Unreleased" in result
    assert "## v1.1.1" in result
Exemplo n.º 6
0
def test_render_changelog_with_changelog_message_builder_hook(gitcommits, tags):
    def changelog_message_builder_hook(message: dict, _) -> dict:
        message["message"] = f"{message['message']} [link](github.com/232323232)"
        return message

    parser = defaults.commit_parser
    changelog_pattern = defaults.bump_pattern
    tree = changelog.generate_tree_from_commits(
        gitcommits,
        tags,
        parser,
        changelog_pattern,
        changelog_message_builder_hook=changelog_message_builder_hook,
    )
    result = changelog.render_changelog(tree)
    assert "[link](github.com/232323232)" in result
Exemplo n.º 7
0
def test_render_changelog_with_changelog_message_builder_hook(gitcommits, tags):
    def changelog_message_builder_hook(message: dict, commit: git.GitCommit) -> dict:
        message[
            "message"
        ] = f"{message['message']} [link](github.com/232323232) {commit.author} {commit.author_email}"
        return message

    parser = ConventionalCommitsCz.commit_parser
    changelog_pattern = ConventionalCommitsCz.bump_pattern
    tree = changelog.generate_tree_from_commits(
        gitcommits,
        tags,
        parser,
        changelog_pattern,
        changelog_message_builder_hook=changelog_message_builder_hook,
    )
    result = changelog.render_changelog(tree)

    assert "[link](github.com/232323232) Commitizen [email protected]" in result
Exemplo n.º 8
0
    def __call__(self):
        commit_parser = self.cz.commit_parser
        changelog_pattern = self.cz.changelog_pattern
        start_rev = self.start_rev
        unreleased_version = self.unreleased_version
        changelog_meta: Dict = {}
        change_type_map: Optional[Dict] = self.change_type_map
        changelog_message_builder_hook: Optional[
            Callable] = self.cz.changelog_message_builder_hook
        changelog_hook: Optional[Callable] = self.cz.changelog_hook

        if not changelog_pattern or not commit_parser:
            out.error(
                f"'{self.config.settings['name']}' rule does not support changelog"
            )
            raise SystemExit(NO_PATTERN_MAP)

        tags = git.get_tags()
        if not tags:
            tags = []

        if self.incremental:
            changelog_meta = changelog.get_metadata(self.file_name)
            latest_version = changelog_meta.get("latest_version")
            if latest_version:
                start_rev = self._find_incremental_rev(latest_version, tags)

        commits = git.get_commits(start=start_rev, args="--author-date-order")
        if not commits:
            out.error("No commits found")
            raise SystemExit(NO_COMMITS_FOUND)

        tree = changelog.generate_tree_from_commits(
            commits,
            tags,
            commit_parser,
            changelog_pattern,
            unreleased_version,
            change_type_map=change_type_map,
            changelog_message_builder_hook=changelog_message_builder_hook,
        )
        changelog_out = changelog.render_changelog(tree)
        changelog_out = changelog_out.lstrip("\n")

        if self.dry_run:
            out.write(changelog_out)
            raise SystemExit(0)

        lines = []
        if self.incremental and os.path.isfile(self.file_name):
            with open(self.file_name, "r") as changelog_file:
                lines = changelog_file.readlines()

        with open(self.file_name, "w") as changelog_file:
            partial_changelog: Optional[str] = None
            if self.incremental:
                new_lines = changelog.incremental_build(
                    changelog_out, lines, changelog_meta)
                changelog_out = "".join(new_lines)
                partial_changelog = changelog_out

            if changelog_hook:
                changelog_out = changelog_hook(changelog_out,
                                               partial_changelog)
            changelog_file.write(changelog_out)
 def __call__(
     self,
     chlog_path,
     latest_version,
     start_rev=None,
     incremental=False,
     dry_run=False,
     change_type_map=None,
 ):
     """
     :param start_rev: If None, changelog from beginning
     """
     # THE FOLLOWING CODE DOESN'T HAVE SIDE EFFECTS TO FILESYS OR GIT:
     commit_parser = self.cz.commit_parser
     changelog_pattern = self.cz.changelog_pattern
     changelog_meta = {}
     changelog_message_builder_hook = self.cz.changelog_message_builder_hook
     changelog_hook = self.cz.changelog_hook
     if not changelog_pattern or not commit_parser:
         raise NoPatternMapError(
             f"'{self.commiter_name}' rule doesn't support changelog")
     #
     tags = git.get_tags()
     if not tags:
         tags = []
     #
     if incremental:
         changelog_meta = changelog.get_metadata(chlog_path)
         latest_version = changelog_meta.get("latest_version")
         if latest_version:
             start_rev = self._find_incremental_rev(latest_version, tags)
     #
     commits = git.get_commits(start=start_rev, args="--author-date-order")
     if not commits:
         raise NoCommitsFoundError("No commits found")
     #
     tree = changelog.generate_tree_from_commits(
         commits,
         tags,
         commit_parser,
         changelog_pattern,
         latest_version,
         change_type_map=change_type_map,
         changelog_message_builder_hook=changelog_message_builder_hook,
     )
     changelog_out = changelog.render_changelog(tree)
     changelog_out = changelog_out.lstrip("\n")
     #
     if dry_run:
         out.write(changelog_out)
         raise DryRunExit()
     #
     # CHANGES TO FILESYSTEM: WRITE TO CHLOG_PATH (AFTER READING)
     lines = []
     if incremental and os.path.isfile(chlog_path):
         with open(chlog_path, "r") as changelog_file:
             lines = changelog_file.readlines()
     #
     with open(chlog_path, "w") as changelog_file:
         partial_changelog = None
         if incremental:
             new_lines = changelog.incremental_build(
                 changelog_out, lines, changelog_meta)
             changelog_out = "".join(new_lines)
             partial_changelog = changelog_out
         if changelog_hook:
             changelog_out = changelog_hook(changelog_out,
                                            partial_changelog)
         changelog_file.write(changelog_out)
         out.write(f"Wrote changelog to {chlog_path}!\n")
Exemplo n.º 10
0
    def __call__(self):
        commit_parser = self.cz.commit_parser
        changelog_pattern = self.cz.changelog_pattern
        start_rev = self.start_rev
        unreleased_version = self.unreleased_version
        changelog_meta: Dict = {}
        change_type_map: Optional[Dict] = self.change_type_map
        changelog_message_builder_hook: Optional[
            Callable
        ] = self.cz.changelog_message_builder_hook

        if not changelog_pattern or not commit_parser:
            raise NoPatternMapError(
                f"'{self.config.settings['name']}' rule does not support changelog"
            )

        if self.incremental and self.rev_range:
            raise NotAllowed("--incremental cannot be combined with a rev_range")

        tags = git.get_tags()
        if not tags:
            tags = []

        end_rev = ""

        if self.incremental:
            changelog_meta = changelog.get_metadata(self.file_name)
            latest_version = changelog_meta.get("latest_version")
            if latest_version:
                start_rev = self._find_incremental_rev(latest_version, tags)

        if self.rev_range and self.tag_format:
            start_rev, end_rev = changelog.get_oldest_and_newest_rev(
                tags,
                version=self.rev_range,
                tag_format=self.tag_format,
            )

        commits = git.get_commits(
            start=start_rev, end=end_rev, args="--author-date-order"
        )
        if not commits:
            raise NoCommitsFoundError("No commits found")

        tree = changelog.generate_tree_from_commits(
            commits,
            tags,
            commit_parser,
            changelog_pattern,
            unreleased_version,
            change_type_map=change_type_map,
            changelog_message_builder_hook=changelog_message_builder_hook,
        )
        if self.change_type_order:
            tree = changelog.order_changelog_tree(tree, self.change_type_order)
        changelog_out = changelog.render_changelog(tree)
        changelog_out = changelog_out.lstrip("\n")

        if self.dry_run:
            out.write(changelog_out)
            raise DryRunExit()

        lines = []
        if self.incremental and os.path.isfile(self.file_name):
            with open(self.file_name, "r") as changelog_file:
                lines = changelog_file.readlines()

        self.write_changelog(changelog_out, lines, changelog_meta)