|
3 | 3 | from operator import itemgetter
|
4 | 4 | from typing import Callable, Dict, List, Optional
|
5 | 5 |
|
6 |
| -from commitizen import changelog, factory, git, out |
| 6 | +from commitizen import bump, changelog, factory, git, out |
7 | 7 | from commitizen.config import BaseConfig
|
8 | 8 | from commitizen.exceptions import (
|
9 | 9 | DryRunExit,
|
10 | 10 | NoCommitsFoundError,
|
11 | 11 | NoPatternMapError,
|
12 | 12 | NoRevisionError,
|
13 | 13 | NotAGitProjectError,
|
| 14 | + NotAllowed, |
14 | 15 | )
|
15 | 16 | from commitizen.git import GitTag
|
16 | 17 |
|
@@ -46,6 +47,10 @@ def __init__(self, config: BaseConfig, args):
|
46 | 47 | self.change_type_order = (
|
47 | 48 | self.config.settings.get("change_type_order") or self.cz.change_type_order
|
48 | 49 | )
|
| 50 | + self.rev_range = args.get("rev_range") |
| 51 | + self.tag_format = args.get("tag_format") or self.config.settings.get( |
| 52 | + "tag_format" |
| 53 | + ) |
49 | 54 |
|
50 | 55 | def _find_incremental_rev(self, latest_version: str, tags: List[GitTag]) -> str:
|
51 | 56 | """Try to find the 'start_rev'.
|
@@ -89,17 +94,32 @@ def __call__(self):
|
89 | 94 | f"'{self.config.settings['name']}' rule does not support changelog"
|
90 | 95 | )
|
91 | 96 |
|
| 97 | + if self.incremental and self.rev_range: |
| 98 | + raise NotAllowed("--incremental cannot be combined with a rev_range") |
| 99 | + |
92 | 100 | tags = git.get_tags()
|
93 | 101 | if not tags:
|
94 | 102 | tags = []
|
95 | 103 |
|
| 104 | + end_rev = "HEAD" |
| 105 | + |
96 | 106 | if self.incremental:
|
97 | 107 | changelog_meta = changelog.get_metadata(self.file_name)
|
98 | 108 | latest_version = changelog_meta.get("latest_version")
|
99 | 109 | if latest_version:
|
100 | 110 | start_rev = self._find_incremental_rev(latest_version, tags)
|
101 | 111 |
|
102 |
| - commits = git.get_commits(start=start_rev, args="--author-date-order") |
| 112 | + if self.rev_range and self.tag_format: |
| 113 | + start_rev, end_rev = changelog.get_start_and_end_rev( |
| 114 | + tags, |
| 115 | + version=self.rev_range, |
| 116 | + tag_format=self.tag_format, |
| 117 | + create_tag=bump.create_tag, |
| 118 | + ) |
| 119 | + |
| 120 | + commits = git.get_commits( |
| 121 | + start=start_rev, end=end_rev, args="--author-date-order" |
| 122 | + ) |
103 | 123 | if not commits:
|
104 | 124 | raise NoCommitsFoundError("No commits found")
|
105 | 125 |
|
|
0 commit comments