From 8cf6ded5a88f2a683bd25ca6d981b89da434595e Mon Sep 17 00:00:00 2001 From: Jannis Mattheis Date: Mon, 26 Jun 2023 16:18:16 +0200 Subject: [PATCH 001/685] fix(bump): version bumping The old implementation wrongly set the `increment` variable to `None` if `increment = "PATCH"` and `new_increment = None`. --- commitizen/bump.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/commitizen/bump.py b/commitizen/bump.py index 979d066033..7b80fc1e50 100644 --- a/commitizen/bump.py +++ b/commitizen/bump.py @@ -10,6 +10,8 @@ from commitizen.git import GitCommit, smart_open from commitizen.version_schemes import DEFAULT_SCHEME, Version, VersionScheme +VERSION_TYPES = [None, PATCH, MINOR, MAJOR] + def find_increment( commits: list[GitCommit], regex: str, increments_map: dict | OrderedDict @@ -34,12 +36,11 @@ def find_increment( new_increment = increments_map[match_pattern] break + if VERSION_TYPES.index(increment) < VERSION_TYPES.index(new_increment): + increment = new_increment + if increment == MAJOR: break - elif increment == MINOR and new_increment == MAJOR: - increment = new_increment - elif increment == PATCH or increment is None: - increment = new_increment return increment From 8f19b24e3e1c589ac0192705f63a7197e8891ed5 Mon Sep 17 00:00:00 2001 From: Jannis Mattheis Date: Mon, 26 Jun 2023 16:19:53 +0200 Subject: [PATCH 002/685] fix(bump): add bump support with custom type + scope + exclamation mark The regex didn't match the following commit with exclamation mark, and therefore didn't update the version. chore(deps)!: drop support for Python 3.9 The regex was simplified, because a lot groups were not needed. --- commitizen/defaults.py | 2 +- tests/test_bump_find_increment.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/commitizen/defaults.py b/commitizen/defaults.py index a243ebda3c..d922717273 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -104,7 +104,7 @@ class Settings(TypedDict, total=False): MINOR = "MINOR" PATCH = "PATCH" -bump_pattern = r"^(((BREAKING[\-\ ]CHANGE|feat|fix|refactor|perf)(\(.+\))?(!)?)|\w+!):" +bump_pattern = r"^((BREAKING[\-\ ]CHANGE|\w+)(\(.+\))?!?):" bump_map = OrderedDict( ( (r"^.+!$", MAJOR), diff --git a/tests/test_bump_find_increment.py b/tests/test_bump_find_increment.py index 337cf17e7a..8e8fc2705e 100644 --- a/tests/test_bump_find_increment.py +++ b/tests/test_bump_find_increment.py @@ -58,6 +58,12 @@ "fix(setup.py): future is now required for every python version", ] +MAJOR_INCREMENTS_EXCLAMATION_OTHER_TYPE_WITH_SCOPE_CC = [ + "chore(deps)!: drop support for Python 3.9", + "docs(README): motivation", + "fix(setup.py): future is now required for every python version", +] + PATCH_INCREMENTS_SVE = ["readme motivation PATCH", "fix setup.py PATCH"] MINOR_INCREMENTS_SVE = [ @@ -85,6 +91,7 @@ (MAJOR_INCREMENTS_BREAKING_CHANGE_CC, "MAJOR"), (MAJOR_INCREMENTS_BREAKING_CHANGE_ALT_CC, "MAJOR"), (MAJOR_INCREMENTS_EXCLAMATION_OTHER_TYPE_CC, "MAJOR"), + (MAJOR_INCREMENTS_EXCLAMATION_OTHER_TYPE_WITH_SCOPE_CC, "MAJOR"), (MAJOR_INCREMENTS_EXCLAMATION_CC, "MAJOR"), (MAJOR_INCREMENTS_EXCLAMATION_CC_SAMPLE_2, "MAJOR"), (NONE_INCREMENT_CC, None), From de3b042b39c779b5608bae59a7bc0428dff830fb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 14 Oct 2023 01:50:42 +0000 Subject: [PATCH 003/685] =?UTF-8?q?bump:=20version=203.10.0=20=E2=86=92=20?= =?UTF-8?q?3.10.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 7 +++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f7a0bef41f..afcaa5f827 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.10.0 # automatically updated by Commitizen + rev: v3.10.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c03d578c5..f18eee0ab3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,11 @@ +## v3.10.1 (2023-10-14) + +### Fix + +- **bump**: add bump support with custom type + scope + exclamation mark +- **bump**: version bumping + ## v3.10.0 (2023-09-25) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 9ce9954cf1..27c09cdf92 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.10.0" +__version__ = "3.10.1" diff --git a/pyproject.toml b/pyproject.toml index c0dfc73151..5f0b564c01 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.10.0" +version = "3.10.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.10.0" +version = "3.10.1" description = "Python commitizen client tool" authors = ["Santiago Fraire "] license = "MIT" From cd472fd374d2cf772da0e8e98cf218f8f98c3281 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 01:17:35 +0000 Subject: [PATCH 004/685] build(deps-dev): bump mkdocs-material from 9.4.4 to 9.4.5 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.4.4 to 9.4.5. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.4.4...9.4.5) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 29ed4edc6d..eb910597a5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -747,13 +747,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.4.4" +version = "9.4.5" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.4.4-py3-none-any.whl", hash = "sha256:86fe79253afccc7f085f89a2d8e9e3300f82c4813d9b910d9081ce57a7e68380"}, - {file = "mkdocs_material-9.4.4.tar.gz", hash = "sha256:ab84a7cfaf009c47cd2926cdd7e6040b8cc12c3806cc533e8b16d57bd16d9c47"}, + {file = "mkdocs_material-9.4.5-py3-none-any.whl", hash = "sha256:0922e3e34d95dbf3f0c84fc817a233e1cbd5874830c6fd821d525ba90e0ce077"}, + {file = "mkdocs_material-9.4.5.tar.gz", hash = "sha256:efaa52843a8c64b99bcf5a97cf4ba57d410424828e3087b13c9b3954e8adb5ff"}, ] [package.dependencies] From c2c42d5e0d1a4cf0f8bef2efbf0f2544a1405b1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 01:16:55 +0000 Subject: [PATCH 005/685] build(deps-dev): bump mypy from 1.5.1 to 1.6.0 Bumps [mypy](https://github.com/python/mypy) from 1.5.1 to 1.6.0. - [Commits](https://github.com/python/mypy/compare/v1.5.1...v1.6.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index eb910597a5..786dda18bb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -787,38 +787,38 @@ files = [ [[package]] name = "mypy" -version = "1.5.1" +version = "1.6.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, - {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, - {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, - {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, - {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, - {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, - {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, - {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, - {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, - {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, - {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, - {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, - {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, - {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, - {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, - {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, - {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, - {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, - {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, + {file = "mypy-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:091f53ff88cb093dcc33c29eee522c087a438df65eb92acd371161c1f4380ff0"}, + {file = "mypy-1.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb7ff4007865833c470a601498ba30462b7374342580e2346bf7884557e40531"}, + {file = "mypy-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49499cf1e464f533fc45be54d20a6351a312f96ae7892d8e9f1708140e27ce41"}, + {file = "mypy-1.6.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c192445899c69f07874dabda7e931b0cc811ea055bf82c1ababf358b9b2a72c"}, + {file = "mypy-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:3df87094028e52766b0a59a3e46481bb98b27986ed6ded6a6cc35ecc75bb9182"}, + {file = "mypy-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c8835a07b8442da900db47ccfda76c92c69c3a575872a5b764332c4bacb5a0a"}, + {file = "mypy-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:24f3de8b9e7021cd794ad9dfbf2e9fe3f069ff5e28cb57af6f873ffec1cb0425"}, + {file = "mypy-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:856bad61ebc7d21dbc019b719e98303dc6256cec6dcc9ebb0b214b81d6901bd8"}, + {file = "mypy-1.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89513ddfda06b5c8ebd64f026d20a61ef264e89125dc82633f3c34eeb50e7d60"}, + {file = "mypy-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:9f8464ed410ada641c29f5de3e6716cbdd4f460b31cf755b2af52f2d5ea79ead"}, + {file = "mypy-1.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:971104bcb180e4fed0d7bd85504c9036346ab44b7416c75dd93b5c8c6bb7e28f"}, + {file = "mypy-1.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab98b8f6fdf669711f3abe83a745f67f50e3cbaea3998b90e8608d2b459fd566"}, + {file = "mypy-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a69db3018b87b3e6e9dd28970f983ea6c933800c9edf8c503c3135b3274d5ad"}, + {file = "mypy-1.6.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:dccd850a2e3863891871c9e16c54c742dba5470f5120ffed8152956e9e0a5e13"}, + {file = "mypy-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:f8598307150b5722854f035d2e70a1ad9cc3c72d392c34fffd8c66d888c90f17"}, + {file = "mypy-1.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fea451a3125bf0bfe716e5d7ad4b92033c471e4b5b3e154c67525539d14dc15a"}, + {file = "mypy-1.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e28d7b221898c401494f3b77db3bac78a03ad0a0fff29a950317d87885c655d2"}, + {file = "mypy-1.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4b7a99275a61aa22256bab5839c35fe8a6887781862471df82afb4b445daae6"}, + {file = "mypy-1.6.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7469545380dddce5719e3656b80bdfbb217cfe8dbb1438532d6abc754b828fed"}, + {file = "mypy-1.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:7807a2a61e636af9ca247ba8494031fb060a0a744b9fee7de3a54bed8a753323"}, + {file = "mypy-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2dad072e01764823d4b2f06bc7365bb1d4b6c2f38c4d42fade3c8d45b0b4b67"}, + {file = "mypy-1.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b19006055dde8a5425baa5f3b57a19fa79df621606540493e5e893500148c72f"}, + {file = "mypy-1.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31eba8a7a71f0071f55227a8057468b8d2eb5bf578c8502c7f01abaec8141b2f"}, + {file = "mypy-1.6.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e0db37ac4ebb2fee7702767dfc1b773c7365731c22787cb99f507285014fcaf"}, + {file = "mypy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:c69051274762cccd13498b568ed2430f8d22baa4b179911ad0c1577d336ed849"}, + {file = "mypy-1.6.0-py3-none-any.whl", hash = "sha256:9e1589ca150a51d9d00bb839bfeca2f7a04f32cd62fad87a847bc0818e15d7dc"}, + {file = "mypy-1.6.0.tar.gz", hash = "sha256:4f3d27537abde1be6d5f2c96c29a454da333a2a271ae7d5bc7110e6d4b7beb3f"}, ] [package.dependencies] From e91ea409b51effb348d392694068cb2350a4f4e9 Mon Sep 17 00:00:00 2001 From: Sebastien Crocquevieille Date: Wed, 26 Oct 2022 04:43:37 +0200 Subject: [PATCH 006/685] feat(cli.py): Added support for extra git CLI args after -- separator for `cz commit` command Additional edits were made in class `commitizen.commands.Commit` and `commit` func from `commitizen.git` Closes #451 --- commitizen/cli.py | 23 +++++++++++++++++++++-- commitizen/commands/commit.py | 3 +++ commitizen/git.py | 4 ++-- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 7f4d4893c0..a241dd4bcb 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -15,6 +15,7 @@ CommitizenException, ExitCode, ExpectedExit, + InvalidCommandArgumentError, NoCommandFoundError, ) @@ -441,7 +442,7 @@ def main(): # This is for the command required constraint in 2.0 try: - args = parser.parse_args() + args, unknown_args = parser.parse_known_args() except (TypeError, SystemExit) as e: # https://github.com/commitizen-tools/commitizen/issues/429 # argparse raises TypeError when non exist command is provided on Python < 3.9 @@ -450,6 +451,24 @@ def main(): raise NoCommandFoundError() raise e + arguments = vars(args) + if unknown_args: + # Raise error for extra-args without -- separation + if "--" not in unknown_args: + raise InvalidCommandArgumentError( + f"Invalid commitizen arguments were found: `{' '.join(unknown_args)}`. " + "Please use -- separator for extra git args" + ) + # Raise error for extra-args before -- + elif unknown_args[0] != "--": + pos = unknown_args.index("--") + raise InvalidCommandArgumentError( + f"Invalid commitizen arguments were found before -- separator: `{' '.join(unknown_args[:pos])}`. " + ) + # TODO: treat case when extra-args and commitizen args are identical + extra_args = " ".join(unknown_args[1:]) + arguments["extra_cli_args"] = extra_args + if args.name: conf.update({"name": args.name}) elif not args.name and not conf.path: @@ -465,7 +484,7 @@ def main(): ) sys.excepthook = no_raise_debug_excepthook - args.func(conf, vars(args))() + args.func(conf, arguments)() if __name__ == "__main__": diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 39cab33b5c..a60a31e257 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -99,6 +99,9 @@ def __call__(self): if signoff: c = git.commit(m, "-s") + + if self.arguments.get("extra_cli_args"): + c = git.commit(m, extra_args=self.arguments.get("extra_cli_args")) else: c = git.commit(m) diff --git a/commitizen/git.py b/commitizen/git.py index 67652b9516..2565ad8296 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -98,13 +98,13 @@ def add(args: str = "") -> cmd.Command: def commit( - message: str, args: str = "", committer_date: str | None = None + message: str, args: str = "", extra_args: str = "", committer_date: str | None = None ) -> cmd.Command: f = NamedTemporaryFile("wb", delete=False) f.write(message.encode("utf-8")) f.close() - command = f"git commit {args} -F {f.name}" + command = cmd.run(f"git commit {args} {extra_args} -F {f.name}") if committer_date and os.name == "nt": # pragma: no cover # Using `cmd /v /c "{command}"` sets environment variables only for that command From 069fbb73b9aa2c3f631920aeac793f99eb6a54c4 Mon Sep 17 00:00:00 2001 From: SCrocky Date: Sat, 26 Nov 2022 18:59:15 +0800 Subject: [PATCH 007/685] refactor(Commit): Added deprecation on git signoff mechanic Signoff dedicated code is no longer necessary & removed #TODO as tests show identical args and extra-args are not an issue. --- commitizen/cli.py | 1 - commitizen/commands/commit.py | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index a241dd4bcb..de1d3ba8a8 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -465,7 +465,6 @@ def main(): raise InvalidCommandArgumentError( f"Invalid commitizen arguments were found before -- separator: `{' '.join(unknown_args[:pos])}`. " ) - # TODO: treat case when extra-args and commitizen args are identical extra_args = " ".join(unknown_args[1:]) arguments["extra_cli_args"] = extra_args diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index a60a31e257..8b3bb136da 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -98,6 +98,7 @@ def __call__(self): ) if signoff: + out.warn("signoff mechanic is deprecated, please use `cz commit -- -s` instead.") c = git.commit(m, "-s") if self.arguments.get("extra_cli_args"): From e702f7933f9b46b3887ef76ab195bed521bd6c1c Mon Sep 17 00:00:00 2001 From: SCrocky Date: Sun, 14 May 2023 12:37:01 +0800 Subject: [PATCH 008/685] test(cli.py): Added tests for -- argument notation raises --- tests/test_cli.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tests/test_cli.py b/tests/test_cli.py index 6d53ed7ba2..4b1788a255 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -7,7 +7,9 @@ from pytest_mock import MockFixture from commitizen import cli -from commitizen.exceptions import ExpectedExit, NoCommandFoundError, NotAGitProjectError +from commitizen.exceptions import ( + ExpectedExit, NoCommandFoundError, NotAGitProjectError, InvalidCommandArgumentError, NothingToCommitError +) def test_sysexit_no_argv(mocker: MockFixture, capsys): @@ -149,3 +151,19 @@ def test_parse_no_raise_mix_invalid_arg_is_skipped(): input_str = "NO_COMMITIZEN_FOUND,2,nothing,4" result = cli.parse_no_raise(input_str) assert result == [1, 2, 4] + + +def test_unknown_args_raises(mocker: MockFixture): + testargs = ["cz", "c", "-this_arg_is_not_supported"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(InvalidCommandArgumentError) as excinfo: + cli.main() + assert "Invalid commitizen arguments were found" in str(excinfo.value) + + +def test_unknown_args_before_double_dash_raises(mocker: MockFixture): + testargs = ["cz", "c", "-this_arg_is_not_supported", "--"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(InvalidCommandArgumentError) as excinfo: + cli.main() + assert "Invalid commitizen arguments were found before -- separator" in str(excinfo.value) From 644708da518ec30aa602fd52756a7ffdf41afa7e Mon Sep 17 00:00:00 2001 From: SCrocky Date: Sun, 14 May 2023 17:38:32 +0800 Subject: [PATCH 009/685] docs(docs/commit.md): Added documentation for `--` syntax to separate commitizen args from git commit cli args --- docs/commit.md | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/docs/commit.md b/docs/commit.md index ab6038946c..334c3062ac 100644 --- a/docs/commit.md +++ b/docs/commit.md @@ -4,28 +4,26 @@ In your terminal run `cz commit` or the shortcut `cz c` to generate a guided git commit. -A commit can be signed off using `cz commit --signoff` or the shortcut `cz commit -s`. - You can run `cz commit --write-message-to-file COMMIT_MSG_FILE` to additionally save the generated message to a file. This can be combined with the `--dry-run` flag to only write the message to a file and not modify files and create a commit. A possible use case for this is to [automatically prepare a commit message](./tutorials/auto_prepare_commit_message.md). -!!! note - To maintain platform compatibility, the `commit` command disables ANSI escaping in its output. - In particular, pre-commit hooks coloring will be deactivated as discussed in [commitizen-tools/commitizen#417](https://github.com/commitizen-tools/commitizen/issues/417). - -## Configuration - -### `always_signoff` -When set to `true`, each commit message created by `cz commit` will be signed off. +!!! note + To maintain platform compatibility, the `commit` command disable ANSI escaping in its output. + In particular pre-commit hooks coloring will be deactivated as discussed in [commitizen-tools/commitizen#417](https://github.com/commitizen-tools/commitizen/issues/417). -Defaults to: `false`. -In your `pyproject.toml` or `.cz.toml`: +### git options -```toml -[tool.commitizen] -always_signoff = true +`git` command options that are not implemented by commitizen can be use via the `--` syntax for the `commit` command. +The syntax separates commitizen arguments from `git commit` arguments by a double dash. This is the resulting syntax: +``` +cz commit -commitizen-args -- -git-cli-args ``` +For example, using the `-S` option on `git commit` to sign a commit is now commitizen compatible: `cz c -- -S` + +!!! note + Deprecation warning: A commit can be signed off using `cz commit --signoff` or the shortcut `cz commit -s`. + This syntax is now deprecated in favor of the new `cz commit -- -s` syntax. \ No newline at end of file From 9b8b268a7ceb2487a41e6e9ae0e2c84b1286fc1b Mon Sep 17 00:00:00 2001 From: SCrocky Date: Sat, 23 Sep 2023 14:37:14 +0800 Subject: [PATCH 010/685] refactor: Code Review - round 1 changes --- commitizen/cli.py | 5 +++++ commitizen/commands/commit.py | 9 ++++----- docs/commit.md | 6 ++++-- tests/test_cli.py | 1 + tests/test_command_commit.py | 22 ++++++++++++++++++++++ 5 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 tests/test_command_commit.py diff --git a/commitizen/cli.py b/commitizen/cli.py index de1d3ba8a8..efea439d41 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -465,6 +465,11 @@ def main(): raise InvalidCommandArgumentError( f"Invalid commitizen arguments were found before -- separator: `{' '.join(unknown_args[:pos])}`. " ) + # Log warning for -- without any extra args + elif len(unknown_args) == 1: + logger.warning( + "Incomplete commit command: received -- separator without any following git arguments" + ) extra_args = " ".join(unknown_args[1:]) arguments["extra_cli_args"] = extra_args diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 8b3bb136da..3eec0a1798 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -99,12 +99,11 @@ def __call__(self): if signoff: out.warn("signoff mechanic is deprecated, please use `cz commit -- -s` instead.") - c = git.commit(m, "-s") - - if self.arguments.get("extra_cli_args"): - c = git.commit(m, extra_args=self.arguments.get("extra_cli_args")) + extra_args = "-s " + self.arguments.get("extra_cli_args") else: - c = git.commit(m) + extra_args = self.arguments.get("extra_cli_args") + + c = git.commit(m, extra_args=extra_args) if c.return_code != 0: out.error(c.err) diff --git a/docs/commit.md b/docs/commit.md index 334c3062ac..50eeea8c2c 100644 --- a/docs/commit.md +++ b/docs/commit.md @@ -19,8 +19,10 @@ case for this is to [automatically prepare a commit message](./tutorials/auto_pr `git` command options that are not implemented by commitizen can be use via the `--` syntax for the `commit` command. The syntax separates commitizen arguments from `git commit` arguments by a double dash. This is the resulting syntax: -``` -cz commit -commitizen-args -- -git-cli-args +```sh +cz commit -- + +# e.g., cz commit --dry-run -- -a -S ``` For example, using the `-S` option on `git commit` to sign a commit is now commitizen compatible: `cz c -- -S` diff --git a/tests/test_cli.py b/tests/test_cli.py index 4b1788a255..ed083bc10d 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -167,3 +167,4 @@ def test_unknown_args_before_double_dash_raises(mocker: MockFixture): with pytest.raises(InvalidCommandArgumentError) as excinfo: cli.main() assert "Invalid commitizen arguments were found before -- separator" in str(excinfo.value) + diff --git a/tests/test_command_commit.py b/tests/test_command_commit.py new file mode 100644 index 0000000000..59670f65d7 --- /dev/null +++ b/tests/test_command_commit.py @@ -0,0 +1,22 @@ +import sys + +from unittest.mock import patch +from pytest_mock import MockFixture + +from commitizen import cli +from commitizen.commands.commit import Commit + + +def test_extra_args_no_raise(mocker: MockFixture): + testargs = ["cz", "c", "--dry-run", "--", "-extra-args1", "-extra-arg2"] + extra_cli_args = "-extra-args1 -extra-args2" + mocker.patch.object(sys, "argv", testargs) + commit_call = mocker.patch.object(Commit, "__call__") + + def assert_extra_args(self): + assert self.arguments["extra_cli_args"] == extra_cli_args + + with patch.object(Commit, "test_extra_args", assert_extra_args, autospec=True) as mock: + commit_call.side_effect = Commit.test_extra_args + cli.main() + Commit.__call__.assert_called_once() From 1a0ad6c14bcc9bd8924f827ba9087a147e9fe072 Mon Sep 17 00:00:00 2001 From: Scrocky <--global> Date: Sun, 24 Sep 2023 19:54:38 +0800 Subject: [PATCH 011/685] refactor(extra_args): Fixed broken code due to rebase and finalized tests --- commitizen/commands/commit.py | 8 +++++--- commitizen/git.py | 7 +++++-- docs/bump.md | 2 +- docs/commit.md | 2 +- tests/commands/test_commit_command.py | 26 +++++++++++++++++++++++--- tests/test_cli.py | 10 +++++++--- tests/test_command_commit.py | 22 ---------------------- 7 files changed, 42 insertions(+), 35 deletions(-) delete mode 100644 tests/test_command_commit.py diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 3eec0a1798..5fde3ea6b8 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -98,10 +98,12 @@ def __call__(self): ) if signoff: - out.warn("signoff mechanic is deprecated, please use `cz commit -- -s` instead.") - extra_args = "-s " + self.arguments.get("extra_cli_args") + out.warn( + "signoff mechanic is deprecated, please use `cz commit -- -s` instead." + ) + extra_args = self.arguments.get("extra_cli_args", "--") + " -s" else: - extra_args = self.arguments.get("extra_cli_args") + extra_args = self.arguments.get("extra_cli_args", "") c = git.commit(m, extra_args=extra_args) diff --git a/commitizen/git.py b/commitizen/git.py index 2565ad8296..33f4e455b0 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -98,13 +98,16 @@ def add(args: str = "") -> cmd.Command: def commit( - message: str, args: str = "", extra_args: str = "", committer_date: str | None = None + message: str, + args: str = "", + extra_args: str = "", + committer_date: str | None = None, ) -> cmd.Command: f = NamedTemporaryFile("wb", delete=False) f.write(message.encode("utf-8")) f.close() - command = cmd.run(f"git commit {args} {extra_args} -F {f.name}") + command = f"git commit {args} {extra_args} -F {f.name}" if committer_date and os.name == "nt": # pragma: no cover # Using `cmd /v /c "{command}"` sets environment variables only for that command diff --git a/docs/bump.md b/docs/bump.md index 287d4e1e35..e58a11e18d 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -323,7 +323,7 @@ These are used in: * `cz bump`: Find previous release tag (exact match) and generate new tag. * Find previous release tags in `cz changelog`. - * If `--incremental`: Using latest version found in the changelog, scan existing Git tags with 89\% similarity match. + * If `--incremental`: Using latest version found in the changelog, scan existing Git tags with 89\% similarity match. * `--rev-range` is converted to Git tag names with `tag_format` before searching Git history. * If the `scm` `version_provider` is used, it uses different regexes to find the previous version tags: * If `tag_format` is set to `$version` (default): `VersionProtocol.parser` (allows `v` prefix) diff --git a/docs/commit.md b/docs/commit.md index 50eeea8c2c..2215e0d805 100644 --- a/docs/commit.md +++ b/docs/commit.md @@ -28,4 +28,4 @@ For example, using the `-S` option on `git commit` to sign a commit is now commi !!! note Deprecation warning: A commit can be signed off using `cz commit --signoff` or the shortcut `cz commit -s`. - This syntax is now deprecated in favor of the new `cz commit -- -s` syntax. \ No newline at end of file + This syntax is now deprecated in favor of the new `cz commit -- -s` syntax. diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index b48ac9d0ed..16489d9858 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -88,7 +88,7 @@ def test_commit_retry_works(config, mocker: MockFixture): commands.Commit(config, {"retry": True})() - commit_mock.assert_called_with("feat: user created\n\ncloses #21") + commit_mock.assert_called_with("feat: user created\n\ncloses #21", extra_args="") prompt_mock.assert_called_once() success_mock.assert_called_once() assert not os.path.isfile(temp_file) @@ -174,7 +174,7 @@ def test_commit_command_with_signoff_option(config, mocker: MockFixture): commands.Commit(config, {"signoff": True})() - commit_mock.assert_called_once_with(ANY, "-s") + commit_mock.assert_called_once_with(ANY, extra_args="-- -s") success_mock.assert_called_once() @@ -197,7 +197,7 @@ def test_commit_command_with_always_signoff_enabled(config, mocker: MockFixture) config.settings["always_signoff"] = True commands.Commit(config, {})() - commit_mock.assert_called_once_with(ANY, "-s") + commit_mock.assert_called_once_with(ANY, extra_args="-- -s") success_mock.assert_called_once() @@ -276,3 +276,23 @@ def test_commit_command_with_all_option(config, mocker: MockFixture): commands.Commit(config, {"all": True})() add_mock.assert_called() success_mock.assert_called_once() + + +@pytest.mark.usefixtures("staging_is_clean") +def test_commit_command_with_extra_args(config, mocker: MockFixture): + prompt_mock = mocker.patch("questionary.prompt") + prompt_mock.return_value = { + "prefix": "feat", + "subject": "user created", + "scope": "", + "is_breaking_change": False, + "body": "", + "footer": "", + } + + commit_mock = mocker.patch("commitizen.git.commit") + commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) + success_mock = mocker.patch("commitizen.out.success") + commands.Commit(config, {"extra_cli_args": "-- -extra-args1 -extra-arg2"})() + commit_mock.assert_called_once_with(ANY, extra_args="-- -extra-args1 -extra-arg2") + success_mock.assert_called_once() diff --git a/tests/test_cli.py b/tests/test_cli.py index ed083bc10d..93f6c16ddd 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -8,7 +8,10 @@ from commitizen import cli from commitizen.exceptions import ( - ExpectedExit, NoCommandFoundError, NotAGitProjectError, InvalidCommandArgumentError, NothingToCommitError + ExpectedExit, + NoCommandFoundError, + NotAGitProjectError, + InvalidCommandArgumentError, ) @@ -166,5 +169,6 @@ def test_unknown_args_before_double_dash_raises(mocker: MockFixture): mocker.patch.object(sys, "argv", testargs) with pytest.raises(InvalidCommandArgumentError) as excinfo: cli.main() - assert "Invalid commitizen arguments were found before -- separator" in str(excinfo.value) - + assert "Invalid commitizen arguments were found before -- separator" in str( + excinfo.value + ) diff --git a/tests/test_command_commit.py b/tests/test_command_commit.py deleted file mode 100644 index 59670f65d7..0000000000 --- a/tests/test_command_commit.py +++ /dev/null @@ -1,22 +0,0 @@ -import sys - -from unittest.mock import patch -from pytest_mock import MockFixture - -from commitizen import cli -from commitizen.commands.commit import Commit - - -def test_extra_args_no_raise(mocker: MockFixture): - testargs = ["cz", "c", "--dry-run", "--", "-extra-args1", "-extra-arg2"] - extra_cli_args = "-extra-args1 -extra-args2" - mocker.patch.object(sys, "argv", testargs) - commit_call = mocker.patch.object(Commit, "__call__") - - def assert_extra_args(self): - assert self.arguments["extra_cli_args"] == extra_cli_args - - with patch.object(Commit, "test_extra_args", assert_extra_args, autospec=True) as mock: - commit_call.side_effect = Commit.test_extra_args - cli.main() - Commit.__call__.assert_called_once() From 82879ab688c7dbdca38fb6e554bee09ef813e50a Mon Sep 17 00:00:00 2001 From: Scrocky <--global> Date: Sun, 24 Sep 2023 22:42:23 +0800 Subject: [PATCH 012/685] style(extra_args): Added newlines and WARN to 'Incomplete commit command' warning --- commitizen/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index efea439d41..212c89b6f7 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -468,7 +468,7 @@ def main(): # Log warning for -- without any extra args elif len(unknown_args) == 1: logger.warning( - "Incomplete commit command: received -- separator without any following git arguments" + "\nWARN: Incomplete commit command: received -- separator without any following git arguments\n" ) extra_args = " ".join(unknown_args[1:]) arguments["extra_cli_args"] = extra_args From 12b214e95b6c17aa47313f3ccf2199bd1ddbfc08 Mon Sep 17 00:00:00 2001 From: Scrocky <--global> Date: Tue, 3 Oct 2023 01:56:49 +0800 Subject: [PATCH 013/685] refactor(git.py): Removed 'extra_args' from git.commit --- commitizen/commands/commit.py | 2 +- commitizen/git.py | 3 +-- tests/commands/test_commit_command.py | 8 ++++---- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 5fde3ea6b8..adb630af86 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -105,7 +105,7 @@ def __call__(self): else: extra_args = self.arguments.get("extra_cli_args", "") - c = git.commit(m, extra_args=extra_args) + c = git.commit(m, args=extra_args) if c.return_code != 0: out.error(c.err) diff --git a/commitizen/git.py b/commitizen/git.py index 33f4e455b0..46aa3abffc 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -100,14 +100,13 @@ def add(args: str = "") -> cmd.Command: def commit( message: str, args: str = "", - extra_args: str = "", committer_date: str | None = None, ) -> cmd.Command: f = NamedTemporaryFile("wb", delete=False) f.write(message.encode("utf-8")) f.close() - command = f"git commit {args} {extra_args} -F {f.name}" + command = f"git commit {args} -F {f.name}" if committer_date and os.name == "nt": # pragma: no cover # Using `cmd /v /c "{command}"` sets environment variables only for that command diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index 16489d9858..e3f9989823 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -88,7 +88,7 @@ def test_commit_retry_works(config, mocker: MockFixture): commands.Commit(config, {"retry": True})() - commit_mock.assert_called_with("feat: user created\n\ncloses #21", extra_args="") + commit_mock.assert_called_with("feat: user created\n\ncloses #21", args="") prompt_mock.assert_called_once() success_mock.assert_called_once() assert not os.path.isfile(temp_file) @@ -174,7 +174,7 @@ def test_commit_command_with_signoff_option(config, mocker: MockFixture): commands.Commit(config, {"signoff": True})() - commit_mock.assert_called_once_with(ANY, extra_args="-- -s") + commit_mock.assert_called_once_with(ANY, args="-- -s") success_mock.assert_called_once() @@ -197,7 +197,7 @@ def test_commit_command_with_always_signoff_enabled(config, mocker: MockFixture) config.settings["always_signoff"] = True commands.Commit(config, {})() - commit_mock.assert_called_once_with(ANY, extra_args="-- -s") + commit_mock.assert_called_once_with(ANY, args="-- -s") success_mock.assert_called_once() @@ -294,5 +294,5 @@ def test_commit_command_with_extra_args(config, mocker: MockFixture): commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) success_mock = mocker.patch("commitizen.out.success") commands.Commit(config, {"extra_cli_args": "-- -extra-args1 -extra-arg2"})() - commit_mock.assert_called_once_with(ANY, extra_args="-- -extra-args1 -extra-arg2") + commit_mock.assert_called_once_with(ANY, args="-- -extra-args1 -extra-arg2") success_mock.assert_called_once() From a48d2630a164d748a412235c4fb36c5253e3a346 Mon Sep 17 00:00:00 2001 From: Axel H Date: Mon, 16 Oct 2023 12:54:20 +0200 Subject: [PATCH 014/685] style(ruff): enable `pyupgrade` (`UP`) rules and fix them all --- commitizen/bump.py | 2 +- commitizen/changelog.py | 6 +-- commitizen/changelog_parser.py | 2 +- commitizen/commands/bump.py | 8 ++-- commitizen/commands/changelog.py | 2 +- commitizen/commands/check.py | 12 +++--- commitizen/commands/commit.py | 2 +- commitizen/config/json_config.py | 2 +- commitizen/config/toml_config.py | 2 +- commitizen/config/yaml_config.py | 2 +- .../conventional_commits.py | 2 +- commitizen/cz/customize/customize.py | 4 +- commitizen/cz/jira/jira.py | 2 +- commitizen/defaults.py | 6 +-- commitizen/version_schemes.py | 7 +--- pyproject.toml | 1 + tests/commands/test_bump_command.py | 28 ++++++------- tests/commands/test_changelog_command.py | 42 +++++++++---------- tests/commands/test_init_command.py | 6 +-- tests/test_bump_update_version_in_files.py | 14 +++---- tests/test_changelog.py | 2 +- tests/test_changelog_parser.py | 2 +- tests/test_conf.py | 8 ++-- 23 files changed, 76 insertions(+), 88 deletions(-) diff --git a/commitizen/bump.py b/commitizen/bump.py index 7b80fc1e50..74d08381dc 100644 --- a/commitizen/bump.py +++ b/commitizen/bump.py @@ -97,7 +97,7 @@ def _bump_with_regex( current_version_found = False lines = [] pattern = re.compile(regex) - with open(version_filepath, "r", encoding=encoding) as f: + with open(version_filepath, encoding=encoding) as f: for line in f: if pattern.search(line): bumped_line = line.replace(current_version, new_version) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index d500110dc0..8c86596d1c 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -30,7 +30,7 @@ import re from collections import OrderedDict, defaultdict from datetime import date -from typing import TYPE_CHECKING, Callable, Iterable, Type, cast +from typing import TYPE_CHECKING, Callable, Iterable, cast from jinja2 import Environment, PackageLoader @@ -74,7 +74,7 @@ def tag_included_in_changelog( return True -def get_version_tags(scheme: Type[BaseVersion], tags: list[GitTag]) -> list[GitTag]: +def get_version_tags(scheme: type[BaseVersion], tags: list[GitTag]) -> list[GitTag]: valid_tags: list[GitTag] = [] for tag in tags: try: @@ -230,7 +230,7 @@ def get_metadata( "latest_version_position": None, } - with open(filepath, "r", encoding=encoding) as changelog_file: + with open(filepath, encoding=encoding) as changelog_file: for index, line in enumerate(changelog_file): line = line.strip().lower() diff --git a/commitizen/changelog_parser.py b/commitizen/changelog_parser.py index 51348d347c..51b39fb956 100644 --- a/commitizen/changelog_parser.py +++ b/commitizen/changelog_parser.py @@ -55,7 +55,7 @@ def find_version_blocks(filepath: str, encoding: str = encoding) -> Generator: ``` """ - with open(filepath, "r", encoding=encoding) as f: + with open(filepath, encoding=encoding) as f: block: list = [] for line in f: line = line.strip("\n") diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index b515435d17..346673c505 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -87,11 +87,9 @@ def is_initial_tag(self, current_tag_version: str, is_yes: bool = False) -> bool else: out.info(f"Tag {current_tag_version} could not be found. ") out.info( - ( - "Possible causes:\n" - "- version in configuration is not the current version\n" - "- tag_format is missing, check them using 'git tag --list'\n" - ) + "Possible causes:\n" + "- version in configuration is not the current version\n" + "- tag_format is missing, check them using 'git tag --list'\n" ) is_initial = questionary.confirm("Is this the first tag created?").ask() return is_initial diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 3e167099b7..6279d65e91 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -192,7 +192,7 @@ def __call__(self): lines = [] if self.incremental and os.path.isfile(self.file_name): - with open(self.file_name, "r", encoding=self.encoding) as changelog_file: + with open(self.file_name, encoding=self.encoding) as changelog_file: lines = changelog_file.readlines() self.write_changelog(changelog_out, lines, changelog_meta) diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index a320b5b8ac..6e98f8cb3f 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -3,7 +3,7 @@ import os import re import sys -from typing import Any, List +from typing import Any from commitizen import factory, git, out from commitizen.config import BaseConfig @@ -35,7 +35,7 @@ def __init__(self, config: BaseConfig, arguments: dict[str, Any], cwd=os.getcwd( # we need to distinguish between None and [], which is a valid value allowed_prefixes = arguments.get("allowed_prefixes") - self.allowed_prefixes: List[str] = ( + self.allowed_prefixes: list[str] = ( allowed_prefixes if allowed_prefixes is not None else config.settings["allowed_prefixes"] @@ -56,10 +56,8 @@ def _valid_command_argument(self): self.commit_msg: str | None = sys.stdin.read() elif num_exclusive_args_provided != 1: raise InvalidCommandArgumentError( - ( - "Only one of --rev-range, --message, and --commit-msg-file is permitted by check command! " - "See 'cz check -h' for more information" - ) + "Only one of --rev-range, --message, and --commit-msg-file is permitted by check command! " + "See 'cz check -h' for more information" ) def __call__(self): @@ -98,7 +96,7 @@ def _get_commits(self): # Get commit message from file (--commit-msg-file) if self.commit_msg_file is not None: # Enter this branch if commit_msg_file is "". - with open(self.commit_msg_file, "r", encoding=self.encoding) as commit_file: + with open(self.commit_msg_file, encoding=self.encoding) as commit_file: msg = commit_file.read() # Get commit message from command line (--message) elif self.commit_msg is not None: diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index adb630af86..b8e5eed6d4 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -42,7 +42,7 @@ def read_backup_message(self) -> str: raise NoCommitBackupError() # Read commit message from backup - with open(self.temp_file, "r", encoding=self.encoding) as f: + with open(self.temp_file, encoding=self.encoding) as f: return f.read().strip() def prompt_commit_questions(self) -> str: diff --git a/commitizen/config/json_config.py b/commitizen/config/json_config.py index 5e821a5a95..cf554922d6 100644 --- a/commitizen/config/json_config.py +++ b/commitizen/config/json_config.py @@ -11,7 +11,7 @@ class JsonConfig(BaseConfig): def __init__(self, *, data: bytes | str, path: Path | str): - super(JsonConfig, self).__init__() + super().__init__() self.is_empty_config = False self.add_path(path) self._parse_setting(data) diff --git a/commitizen/config/toml_config.py b/commitizen/config/toml_config.py index 722e6fcfbc..d45860d650 100644 --- a/commitizen/config/toml_config.py +++ b/commitizen/config/toml_config.py @@ -11,7 +11,7 @@ class TomlConfig(BaseConfig): def __init__(self, *, data: bytes | str, path: Path | str): - super(TomlConfig, self).__init__() + super().__init__() self.is_empty_config = False self.add_path(path) self._parse_setting(data) diff --git a/commitizen/config/yaml_config.py b/commitizen/config/yaml_config.py index 4cf78cf3ee..396e2eba11 100644 --- a/commitizen/config/yaml_config.py +++ b/commitizen/config/yaml_config.py @@ -12,7 +12,7 @@ class YAMLConfig(BaseConfig): def __init__(self, *, data: bytes | str, path: Path | str): - super(YAMLConfig, self).__init__() + super().__init__() self.is_empty_config = False self.add_path(path) self._parse_setting(data) diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 1382622fee..f927a94fdd 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -202,7 +202,7 @@ def schema_pattern(self) -> str: def info(self) -> str: dir_path = os.path.dirname(os.path.realpath(__file__)) filepath = os.path.join(dir_path, "conventional_commits_info.txt") - with open(filepath, "r", encoding=self.config.settings["encoding"]) as f: + with open(filepath, encoding=self.config.settings["encoding"]) as f: content = f.read() return content diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index 7bc650ecf6..5c3b4e76b4 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -22,7 +22,7 @@ class CustomizeCommitsCz(BaseCommitizen): change_type_order = defaults.change_type_order def __init__(self, config: BaseConfig): - super(CustomizeCommitsCz, self).__init__(config) + super().__init__(config) if "customize" not in self.config.settings: raise MissingCzCustomizeConfigError() @@ -81,7 +81,7 @@ def info(self) -> str | None: info_path = self.custom_settings.get("info_path") info = self.custom_settings.get("info") if info_path: - with open(info_path, "r", encoding=self.config.settings["encoding"]) as f: + with open(info_path, encoding=self.config.settings["encoding"]) as f: content = f.read() return content elif info: diff --git a/commitizen/cz/jira/jira.py b/commitizen/cz/jira/jira.py index cc33cd791a..a4fdcfa09e 100644 --- a/commitizen/cz/jira/jira.py +++ b/commitizen/cz/jira/jira.py @@ -76,6 +76,6 @@ def schema_pattern(self) -> str: def info(self) -> str: dir_path = os.path.dirname(os.path.realpath(__file__)) filepath = os.path.join(dir_path, "jira_info.txt") - with open(filepath, "r", encoding=self.config.settings["encoding"]) as f: + with open(filepath, encoding=self.config.settings["encoding"]) as f: content = f.read() return content diff --git a/commitizen/defaults.py b/commitizen/defaults.py index d922717273..101f5aaf32 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -1,14 +1,10 @@ from __future__ import annotations import pathlib -import sys from collections import OrderedDict from typing import Any, Iterable, MutableMapping -if sys.version_info < (3, 8): - from typing_extensions import TypedDict -else: - from typing import TypedDict +from typing import TypedDict # Type Questions = Iterable[MutableMapping[str, Any]] diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index ca13db15b4..d7967ae928 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -4,7 +4,7 @@ import sys import warnings from itertools import zip_longest -from typing import TYPE_CHECKING, ClassVar, Type, cast +from typing import TYPE_CHECKING, ClassVar, Protocol, Type, cast, runtime_checkable import importlib_metadata as metadata from packaging.version import InvalidVersion # noqa: F401: Rexpose the common exception @@ -14,11 +14,6 @@ from commitizen.defaults import MAJOR, MINOR, PATCH from commitizen.exceptions import VersionSchemeUnknown -if sys.version_info >= (3, 8): - from typing import Protocol, runtime_checkable -else: - from typing_extensions import Protocol, runtime_checkable - if TYPE_CHECKING: # TypeAlias is Python 3.10+ but backported in typing-extensions if sys.version_info >= (3, 10): diff --git a/pyproject.toml b/pyproject.toml index 5f0b564c01..704ba0f471 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -133,6 +133,7 @@ addopts = "--strict-markers" [tool.ruff] line-length = 88 +select = ["E", "F", "UP"] ignore = [ "E501", "D1", diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 1faa55ff5e..8952bef440 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -406,10 +406,10 @@ def test_bump_files_only(mocker: MockFixture, tmp_commitizen_project): tag_exists = git.tag_exist("0.3.0") assert tag_exists is False - with open(tmp_version_file, "r", encoding="utf-8") as f: + with open(tmp_version_file, encoding="utf-8") as f: assert "0.3.0" in f.read() - with open(tmp_commitizen_cfg_file, "r", encoding="utf-8") as f: + with open(tmp_commitizen_cfg_file, encoding="utf-8") as f: assert "0.3.0" in f.read() @@ -431,7 +431,7 @@ def test_bump_local_version(mocker: MockFixture, tmp_commitizen_project): tag_exists = git.tag_exist("4.5.1+0.2.0") assert tag_exists is True - with open(tmp_version_file, "r", encoding="utf-8") as f: + with open(tmp_version_file, encoding="utf-8") as f: assert "4.5.1+0.2.0" in f.read() @@ -511,7 +511,7 @@ def test_bump_with_changelog_arg(mocker: MockFixture, changelog_path): tag_exists = git.tag_exist("0.2.0") assert tag_exists is True - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read() assert out.startswith("#") assert "0.2.0" in out @@ -529,7 +529,7 @@ def test_bump_with_changelog_config(mocker: MockFixture, changelog_path, config_ tag_exists = git.tag_exist("0.2.0") assert tag_exists is True - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read() assert out.startswith("#") assert "0.2.0" in out @@ -572,7 +572,7 @@ def test_bump_with_changelog_to_stdout_arg(mocker: MockFixture, capsys, changelo tag_exists = git.tag_exist("0.2.0") assert tag_exists is True - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read() assert out.startswith("#") assert "0.2.0" in out @@ -911,7 +911,7 @@ def test_bump_command_prelease_scheme_via_cli( assert tag_exists is True for version_file in [tmp_version_file, tmp_commitizen_cfg_file]: - with open(version_file, "r") as f: + with open(version_file) as f: assert "0.2.0-a0" in f.read() # PRERELEASE BUMP CREATES VERSION WITHOUT PRERELEASE @@ -923,7 +923,7 @@ def test_bump_command_prelease_scheme_via_cli( assert tag_exists is True for version_file in [tmp_version_file, tmp_commitizen_cfg_file]: - with open(version_file, "r") as f: + with open(version_file) as f: assert "0.2.0" in f.read() @@ -944,7 +944,7 @@ def test_bump_command_prelease_scheme_via_config( assert tag_exists is True for version_file in [tmp_version_file, tmp_commitizen_cfg_file]: - with open(version_file, "r") as f: + with open(version_file) as f: assert "0.2.0-a0" in f.read() testargs = ["cz", "bump", "--prerelease", "alpha", "--yes"] @@ -955,7 +955,7 @@ def test_bump_command_prelease_scheme_via_config( assert tag_exists is True for version_file in [tmp_version_file, tmp_commitizen_cfg_file]: - with open(version_file, "r") as f: + with open(version_file) as f: assert "0.2.0-a1" in f.read() # PRERELEASE BUMP CREATES VERSION WITHOUT PRERELEASE @@ -967,7 +967,7 @@ def test_bump_command_prelease_scheme_via_config( assert tag_exists is True for version_file in [tmp_version_file, tmp_commitizen_cfg_file]: - with open(version_file, "r") as f: + with open(version_file) as f: assert "0.2.0" in f.read() @@ -988,7 +988,7 @@ def test_bump_command_prelease_scheme_check_old_tags( assert tag_exists is True for version_file in [tmp_version_file, tmp_commitizen_cfg_file]: - with open(version_file, "r") as f: + with open(version_file) as f: assert "0.2.0-a0" in f.read() testargs = ["cz", "bump", "--prerelease", "alpha"] @@ -999,7 +999,7 @@ def test_bump_command_prelease_scheme_check_old_tags( assert tag_exists is True for version_file in [tmp_version_file, tmp_commitizen_cfg_file]: - with open(version_file, "r") as f: + with open(version_file) as f: assert "0.2.0-a1" in f.read() # PRERELEASE BUMP CREATES VERSION WITHOUT PRERELEASE @@ -1011,7 +1011,7 @@ def test_bump_command_prelease_scheme_check_old_tags( assert tag_exists is True for version_file in [tmp_version_file, tmp_commitizen_cfg_file]: - with open(version_file, "r") as f: + with open(version_file) as f: assert "0.2.0" in f.read() diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index b9560216b9..535c8f4a4d 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -77,7 +77,7 @@ def test_changelog_from_start( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read() file_regression.check(out, extension=".md") @@ -106,7 +106,7 @@ def test_changelog_replacing_unreleased_using_incremental( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read().replace( datetime.strftime(datetime.now(), "%Y-%m-%d"), "2022-08-14" ) @@ -142,7 +142,7 @@ def test_changelog_is_persisted_using_incremental( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read().replace( datetime.strftime(datetime.now(), "%Y-%m-%d"), "2022-08-14" ) @@ -176,7 +176,7 @@ def test_changelog_incremental_angular_sample( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read() file_regression.check(out, extension=".md") @@ -227,7 +227,7 @@ def test_changelog_incremental_keep_a_changelog_sample( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read() file_regression.check(out, extension=".md") @@ -375,7 +375,7 @@ def test_changelog_multiple_incremental_do_not_add_new_lines( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read() file_regression.check(out, extension=".md") @@ -396,7 +396,7 @@ def test_changelog_incremental_newline_separates_new_content_from_old( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read() assert ( @@ -562,7 +562,7 @@ def test_changelog_config_flag_increment( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read() assert "this should be persisted using increment" in out @@ -597,7 +597,7 @@ def test_changelog_config_flag_merge_prerelease( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r") as f: + with open(changelog_path) as f: out = f.read() file_regression.check(out, extension=".md") @@ -650,7 +650,7 @@ def test_changelog_incremental_keep_a_changelog_sample_with_annotated_tag( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read() file_regression.check(out, extension=".md") @@ -684,7 +684,7 @@ def test_changelog_incremental_with_release_candidate_version( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read() file_regression.check(out, extension=".md") @@ -714,7 +714,7 @@ def test_changelog_incremental_with_prerelease_version_to_prerelease_version( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r") as f: + with open(changelog_path) as f: out = f.read() file_regression.check(out, extension=".md") @@ -748,7 +748,7 @@ def test_changelog_release_candidate_version_with_merge_prerelease( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r") as f: + with open(changelog_path) as f: out = f.read() file_regression.check(out, extension=".md") @@ -788,7 +788,7 @@ def test_changelog_incremental_with_merge_prerelease( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r") as f: + with open(changelog_path) as f: out = f.read() file_regression.check(out, extension=".md") @@ -837,7 +837,7 @@ def test_changelog_from_rev_first_version_from_arg( testargs = ["cz", "changelog", "0.2.0"] mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read() file_regression.check(out, extension=".md") @@ -873,7 +873,7 @@ def test_changelog_from_rev_latest_version_from_arg( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r") as f: + with open(changelog_path) as f: out = f.read() file_regression.check(out, extension=".md") @@ -937,7 +937,7 @@ def test_changelog_from_rev_range_default_tag_format( mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r") as f: + with open(changelog_path) as f: out = f.read() assert "new file" not in out @@ -997,7 +997,7 @@ def test_changelog_from_rev_version_range_including_first_tag( testargs = ["cz", "changelog", "0.2.0..0.3.0"] mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: out = f.read() file_regression.check(out, extension=".md") @@ -1037,7 +1037,7 @@ def test_changelog_from_rev_version_range_from_arg( testargs = ["cz", "changelog", "0.3.0..0.4.0"] mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r") as f: + with open(changelog_path) as f: out = f.read() file_regression.check(out, extension=".md") @@ -1097,7 +1097,7 @@ def test_changelog_from_rev_version_with_big_range_from_arg( testargs = ["cz", "changelog", "0.3.0..0.5.0"] mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r") as f: + with open(changelog_path) as f: out = f.read() file_regression.check(out, extension=".md") @@ -1196,7 +1196,7 @@ def test_changelog_with_customized_change_type_order( testargs = ["cz", "changelog", "0.3.0..0.4.0"] mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, "r") as f: + with open(changelog_path) as f: out = f.read() file_regression.check(out, extension=".md") diff --git a/tests/commands/test_init_command.py b/tests/commands/test_init_command.py index 94506fedf0..ba77a12e3c 100644 --- a/tests/commands/test_init_command.py +++ b/tests/commands/test_init_command.py @@ -74,7 +74,7 @@ def test_init_without_setup_pre_commit_hook(tmpdir, mocker: MockFixture, config) with tmpdir.as_cwd(): commands.Init(config)() - with open("pyproject.toml", "r", encoding="utf-8") as toml_file: + with open("pyproject.toml", encoding="utf-8") as toml_file: config_data = toml_file.read() assert config_data == expected_config @@ -160,7 +160,7 @@ def check_cz_config(config: str): Args: config: The config path """ - with open(config, "r") as file: + with open(config) as file: if "json" in config: assert json.load(file) == EXPECTED_DICT_CONFIG elif "yaml" in config: @@ -174,7 +174,7 @@ def check_pre_commit_config(expected: list[dict[str, Any]]): """ Check the content of pre-commit config is as expected """ - with open(pre_commit_config_filename, "r") as pre_commit_file: + with open(pre_commit_config_filename) as pre_commit_file: pre_commit_config_data = yaml.safe_load(pre_commit_file.read()) assert pre_commit_config_data == {"repos": expected} diff --git a/tests/test_bump_update_version_in_files.py b/tests/test_bump_update_version_in_files.py index 9fe3c66801..9a80d4cfd9 100644 --- a/tests/test_bump_update_version_in_files.py +++ b/tests/test_bump_update_version_in_files.py @@ -108,7 +108,7 @@ def test_update_version_in_files(version_files, file_regression): file_contents = "" for filepath in version_files: - with open(filepath, "r", encoding="utf-8") as f: + with open(filepath, encoding="utf-8") as f: file_contents += f.read() file_regression.check(file_contents, extension=".txt") @@ -120,7 +120,7 @@ def test_partial_update_of_file(version_repeated_file, file_regression): location = f"{version_repeated_file}:{regex}" bump.update_version_in_files(old_version, new_version, [location], encoding="utf-8") - with open(version_repeated_file, "r", encoding="utf-8") as f: + with open(version_repeated_file, encoding="utf-8") as f: file_regression.check(f.read(), extension=".json") @@ -130,7 +130,7 @@ def test_random_location(random_location_version_file, file_regression): location = f"{random_location_version_file}:version.+Commitizen" bump.update_version_in_files(old_version, new_version, [location], encoding="utf-8") - with open(random_location_version_file, "r", encoding="utf-8") as f: + with open(random_location_version_file, encoding="utf-8") as f: file_regression.check(f.read(), extension=".lock") @@ -142,7 +142,7 @@ def test_duplicates_are_change_with_no_regex( location = f"{random_location_version_file}:version" bump.update_version_in_files(old_version, new_version, [location], encoding="utf-8") - with open(random_location_version_file, "r", encoding="utf-8") as f: + with open(random_location_version_file, encoding="utf-8") as f: file_regression.check(f.read(), extension=".lock") @@ -154,7 +154,7 @@ def test_version_bump_increase_string_length( location = f"{multiple_versions_increase_string}:version" bump.update_version_in_files(old_version, new_version, [location], encoding="utf-8") - with open(multiple_versions_increase_string, "r", encoding="utf-8") as f: + with open(multiple_versions_increase_string, encoding="utf-8") as f: file_regression.check(f.read(), extension=".txt") @@ -166,7 +166,7 @@ def test_version_bump_reduce_string_length( location = f"{multiple_versions_reduce_string}:version" bump.update_version_in_files(old_version, new_version, [location], encoding="utf-8") - with open(multiple_versions_reduce_string, "r", encoding="utf-8") as f: + with open(multiple_versions_reduce_string, encoding="utf-8") as f: file_regression.check(f.read(), extension=".txt") @@ -205,5 +205,5 @@ def test_multiplt_versions_to_bump( location = f"{multiple_versions_to_update_poetry_lock}:version" bump.update_version_in_files(old_version, new_version, [location], encoding="utf-8") - with open(multiple_versions_to_update_poetry_lock, "r", encoding="utf-8") as f: + with open(multiple_versions_to_update_poetry_lock, encoding="utf-8") as f: file_regression.check(f.read(), extension=".toml") diff --git a/tests/test_changelog.py b/tests/test_changelog.py index f16f4a1459..faf6ee0c43 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -496,7 +496,7 @@ def tags() -> list: @pytest.fixture def changelog_content() -> str: changelog_path = "tests/CHANGELOG_FOR_TEST.md" - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: return f.read() diff --git a/tests/test_changelog_parser.py b/tests/test_changelog_parser.py index 9145934131..f0f413e7b2 100644 --- a/tests/test_changelog_parser.py +++ b/tests/test_changelog_parser.py @@ -28,7 +28,7 @@ @pytest.fixture def changelog_content() -> str: changelog_path = "tests/CHANGELOG_FOR_TEST.md" - with open(changelog_path, "r", encoding="utf-8") as f: + with open(changelog_path, encoding="utf-8") as f: return f.read() diff --git a/tests/test_conf.py b/tests/test_conf.py index 43d7d045e0..5a7a899e7c 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -164,7 +164,7 @@ def test_init_empty_config_content(self, tmpdir): toml_config = config.TomlConfig(data="", path=path) toml_config.init_empty_config_content() - with open(path, "r", encoding="utf-8") as toml_file: + with open(path, encoding="utf-8") as toml_file: assert toml_file.read() == "[tool.commitizen]\n" def test_init_empty_config_content_with_existing_content(self, tmpdir): @@ -175,7 +175,7 @@ def test_init_empty_config_content_with_existing_content(self, tmpdir): toml_config = config.TomlConfig(data="", path=path) toml_config.init_empty_config_content() - with open(path, "r", encoding="utf-8") as toml_file: + with open(path, encoding="utf-8") as toml_file: assert toml_file.read() == existing_content + "\n[tool.commitizen]\n" def test_init_with_invalid_config_content(self, tmpdir): @@ -192,7 +192,7 @@ def test_init_empty_config_content(self, tmpdir): json_config = config.JsonConfig(data="{}", path=path) json_config.init_empty_config_content() - with open(path, "r", encoding="utf-8") as json_file: + with open(path, encoding="utf-8") as json_file: assert json.load(json_file) == {"commitizen": {}} def test_init_with_invalid_config_content(self, tmpdir): @@ -209,7 +209,7 @@ def test_init_empty_config_content(self, tmpdir): yaml_config = config.YAMLConfig(data="{}", path=path) yaml_config.init_empty_config_content() - with open(path, "r") as yaml_file: + with open(path) as yaml_file: assert yaml.safe_load(yaml_file) == {"commitizen": {}} def test_init_with_invalid_content(self, tmpdir): From 36615a4c41aeaf675a317c3adaf8b714042d09aa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 17 Oct 2023 13:24:58 +0000 Subject: [PATCH 015/685] =?UTF-8?q?bump:=20version=203.10.1=20=E2=86=92=20?= =?UTF-8?q?3.11.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 13 +++++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index afcaa5f827..fa1b9cdbcf 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.10.1 # automatically updated by Commitizen + rev: v3.11.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index f18eee0ab3..d85c52f103 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,17 @@ +## v3.11.0 (2023-10-17) + +### Feat + +- **cli.py**: Added support for extra git CLI args after -- separator for `cz commit` command + +### Refactor + +- **git.py**: Removed 'extra_args' from git.commit +- **extra_args**: Fixed broken code due to rebase and finalized tests +- Code Review - round 1 changes +- **Commit**: Added deprecation on git signoff mechanic + ## v3.10.1 (2023-10-14) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 27c09cdf92..fcbd6954b9 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.10.1" +__version__ = "3.11.0" diff --git a/pyproject.toml b/pyproject.toml index 704ba0f471..9e37e6b4ed 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.10.1" +version = "3.11.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.10.1" +version = "3.11.0" description = "Python commitizen client tool" authors = ["Santiago Fraire "] license = "MIT" From 9e7f6722381a96f2fcd2089748a4422dc89087e5 Mon Sep 17 00:00:00 2001 From: Santiago Fraire Date: Mon, 16 Oct 2023 08:32:46 +0200 Subject: [PATCH 016/685] ci: add py3.12 to tests (#887) --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 32f5c387d1..ad4f8b5ab1 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -6,7 +6,7 @@ jobs: python-check: strategy: matrix: - python-version: [ "3.8", "3.9", "3.10", "3.11" ] + python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12" ] platform: [ ubuntu-20.04, macos-latest, windows-latest ] runs-on: ${{ matrix.platform }} steps: From 7ad5aa1ff8ef610ab1653f22344d7df2da41c5d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Oct 2023 01:21:18 +0000 Subject: [PATCH 017/685] build(deps-dev): bump pre-commit from 3.4.0 to 3.5.0 Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.4.0 to 3.5.0. - [Release notes](https://github.com/pre-commit/pre-commit/releases) - [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) - [Commits](https://github.com/pre-commit/pre-commit/compare/v3.4.0...v3.5.0) --- updated-dependencies: - dependency-name: pre-commit dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 786dda18bb..a2ed1d3d5a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -960,13 +960,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "3.4.0" +version = "3.5.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.8" files = [ - {file = "pre_commit-3.4.0-py2.py3-none-any.whl", hash = "sha256:96d529a951f8b677f730a7212442027e8ba53f9b04d217c4c67dc56c393ad945"}, - {file = "pre_commit-3.4.0.tar.gz", hash = "sha256:6bbd5129a64cad4c0dfaeeb12cd8f7ea7e15b77028d985341478c8af3c759522"}, + {file = "pre_commit-3.5.0-py2.py3-none-any.whl", hash = "sha256:841dc9aef25daba9a0238cd27984041fa0467b4199fc4852e27950664919f660"}, + {file = "pre_commit-3.5.0.tar.gz", hash = "sha256:5804465c675b659b0862f07907f96295d490822a450c4c40e747d0b1c6ebcb32"}, ] [package.dependencies] From eca64aabd42d9d97b09dcaaeac21a148728fbde9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Oct 2023 01:20:49 +0000 Subject: [PATCH 018/685] build(deps-dev): bump mkdocs-material from 9.4.5 to 9.4.6 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.4.5 to 9.4.6. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.4.5...9.4.6) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index a2ed1d3d5a..3e685bfe19 100644 --- a/poetry.lock +++ b/poetry.lock @@ -747,13 +747,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.4.5" +version = "9.4.6" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.4.5-py3-none-any.whl", hash = "sha256:0922e3e34d95dbf3f0c84fc817a233e1cbd5874830c6fd821d525ba90e0ce077"}, - {file = "mkdocs_material-9.4.5.tar.gz", hash = "sha256:efaa52843a8c64b99bcf5a97cf4ba57d410424828e3087b13c9b3954e8adb5ff"}, + {file = "mkdocs_material-9.4.6-py3-none-any.whl", hash = "sha256:78802035d5768a78139c84ad7dce0c6493e8f7dc4861727d36ed91d1520a54da"}, + {file = "mkdocs_material-9.4.6.tar.gz", hash = "sha256:09665e60df7ee9e5ff3a54af173f6d45be718b1ee7dd962bcff3102b81fb0c14"}, ] [package.dependencies] From 7306fa96adfba8a8eacb72c314d32b57178976c1 Mon Sep 17 00:00:00 2001 From: Axel H Date: Wed, 14 Dec 2022 19:05:54 +0100 Subject: [PATCH 019/685] feat(template): allow to override the template from cli, configuration and plugins Fixes #132 Fixes #384 Fixes #433 Closes #376 Closes #640 --- commitizen/changelog.py | 25 ++++- commitizen/cli.py | 48 +++++++++ commitizen/commands/bump.py | 5 + commitizen/commands/changelog.py | 11 +- commitizen/cz/base.py | 8 +- commitizen/defaults.py | 6 +- docs/bump.md | 20 ++++ docs/changelog.md | 21 ++++ docs/config.md | 19 +++- docs/customization.md | 81 ++++++++++++++ tests/commands/test_bump_command.py | 129 +++++++++++++++++++++++ tests/commands/test_changelog_command.py | 119 +++++++++++++++++++++ tests/conftest.py | 27 ++++- tests/test_changelog.py | 88 ++++++++++++++++ tests/test_conf.py | 11 +- 15 files changed, 606 insertions(+), 12 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index 8c86596d1c..e79995eca7 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -32,7 +32,13 @@ from datetime import date from typing import TYPE_CHECKING, Callable, Iterable, cast -from jinja2 import Environment, PackageLoader +from jinja2 import ( + BaseLoader, + ChoiceLoader, + Environment, + FileSystemLoader, + PackageLoader, +) from commitizen import out from commitizen.bump import normalize_tag @@ -49,6 +55,8 @@ if TYPE_CHECKING: from commitizen.version_schemes import VersionScheme +DEFAULT_TEMPLATE = "keep_a_changelog_template.j2" + def get_commit_tag(commit: GitCommit, tags: list[GitTag]) -> GitTag | None: return next((tag for tag in tags if tag.rev == commit.rev), None) @@ -187,11 +195,18 @@ def order_changelog_tree(tree: Iterable, change_type_order: list[str]) -> Iterab return sorted_tree -def render_changelog(tree: Iterable) -> str: - loader = PackageLoader("commitizen", "templates") +def render_changelog( + tree: Iterable, + loader: BaseLoader | None = None, + template: str | None = None, + **kwargs, +) -> str: + loader = ChoiceLoader( + [FileSystemLoader("."), loader or PackageLoader("commitizen", "templates")] + ) env = Environment(loader=loader, trim_blocks=True) - jinja_template = env.get_template("keep_a_changelog_template.j2") - changelog: str = jinja_template.render(tree=tree) + jinja_template = env.get_template(template or DEFAULT_TEMPLATE) + changelog: str = jinja_template.render(tree=tree, **kwargs) return changelog diff --git a/commitizen/cli.py b/commitizen/cli.py index 212c89b6f7..7a9822e641 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -3,6 +3,7 @@ import argparse import logging import sys +from copy import deepcopy from functools import partial from pathlib import Path from types import TracebackType @@ -20,6 +21,51 @@ ) logger = logging.getLogger(__name__) + + +class ParseKwargs(argparse.Action): + """ + Parse arguments in the for `key=value`. + + Quoted strings are automatically unquoted. + Can be submitted multiple times: + + ex: + -k key=value -k double-quotes="value" -k single-quotes='value' + + will result in + + namespace["opt"] == { + "key": "value", + "double-quotes": "value", + "single-quotes": "value", + } + """ + + def __call__(self, parser, namespace, kwarg, option_string=None): + kwargs = getattr(namespace, self.dest, None) or {} + key, value = kwarg.split("=", 1) + kwargs[key] = value.strip("'\"") + setattr(namespace, self.dest, kwargs) + + +tpl_arguments = ( + { + "name": ["--template", "-t"], + "help": ( + "changelog template file name " + "(relative to the current working directory)" + ), + }, + { + "name": ["--extra", "-e"], + "action": ParseKwargs, + "dest": "extras", + "metavar": "EXTRA", + "help": "a changelog extra variable (in the form 'key=value')", + }, +) + data = { "prog": "cz", "description": ( @@ -210,6 +256,7 @@ "default": None, "help": "keep major version at zero, even for breaking changes", }, + *deepcopy(tpl_arguments), { "name": ["--prerelease-offset"], "type": int, @@ -299,6 +346,7 @@ "default": None, "choices": version_schemes.KNOWN_SCHEMES, }, + *deepcopy(tpl_arguments), ], }, { diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 346673c505..2fc4743ff4 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -51,6 +51,7 @@ def __init__(self, config: BaseConfig, arguments: dict): "annotated_tag", "major_version_zero", "prerelease_offset", + "template", ] if arguments[key] is not None }, @@ -77,6 +78,8 @@ def __init__(self, config: BaseConfig, arguments: dict): self.scheme = get_version_scheme( self.config, arguments["version_scheme"] or deprecated_version_type ) + self.template = arguments["template"] or self.config.settings.get("template") + self.extras = arguments["extras"] def is_initial_tag(self, current_tag_version: str, is_yes: bool = False) -> bool: """Check if reading the whole git tree up to HEAD is needed.""" @@ -273,6 +276,8 @@ def __call__(self): # noqa: C901 "unreleased_version": new_tag_version, "incremental": True, "dry_run": dry_run, + "template": self.template, + "extras": self.extras, }, ) changelog_cmd() diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 6279d65e91..38bef366d9 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -65,6 +65,9 @@ def __init__(self, config: BaseConfig, args): "merge_prerelease" ) or self.config.settings.get("changelog_merge_prerelease") + self.template = args.get("template") or self.config.settings.get("template") + self.extras = args.get("extras") or {} + def _find_incremental_rev(self, latest_version: str, tags: list[GitTag]) -> str: """Try to find the 'start_rev'. @@ -183,7 +186,13 @@ def __call__(self): ) if self.change_type_order: tree = changelog.order_changelog_tree(tree, self.change_type_order) - changelog_out = changelog.render_changelog(tree) + + extras = self.cz.template_extras.copy() + extras.update(self.config.settings["extras"]) + extras.update(self.extras) + changelog_out = changelog.render_changelog( + tree, loader=self.cz.template_loader, template=self.template, **extras + ) changelog_out = changelog_out.lstrip("\n") if self.dry_run: diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index 900e62d6b8..f0cf4aa581 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -1,11 +1,13 @@ from __future__ import annotations from abc import ABCMeta, abstractmethod -from typing import Callable +from typing import Any, Callable +from jinja2 import BaseLoader from prompt_toolkit.styles import Style, merge_styles from commitizen import git +from commitizen.changelog import DEFAULT_TEMPLATE from commitizen.config.base_config import BaseConfig from commitizen.defaults import Questions @@ -43,6 +45,10 @@ class BaseCommitizen(metaclass=ABCMeta): # Executed only at the end of the changelog generation changelog_hook: Callable[[str, str | None], str] | None = None + template: str = DEFAULT_TEMPLATE + template_loader: BaseLoader | None = None + template_extras: dict[str, Any] = {} + def __init__(self, config: BaseConfig): self.config = config if not self.config.settings.get("style"): diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 101f5aaf32..59b867c12a 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -52,7 +52,8 @@ class Settings(TypedDict, total=False): post_bump_hooks: list[str] | None prerelease_offset: int encoding: str - always_signoff: bool + template: str | None + extras: dict[str, Any] name: str = "cz_conventional_commits" @@ -94,6 +95,8 @@ class Settings(TypedDict, total=False): "prerelease_offset": 0, "encoding": encoding, "always_signoff": False, + "template": None, + "extras": {}, } MAJOR = "MAJOR" @@ -125,3 +128,4 @@ class Settings(TypedDict, total=False): bump_message = "bump: version $current_version → $new_version" commit_parser = r"^((?Pfeat|fix|refactor|perf|BREAKING CHANGE)(?:\((?P[^()\r\n]*)\)|\()?(?P!)?|\w+!):\s(?P.*)?" # noqa +version_parser = r"(?P([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?(\w+)?)" diff --git a/docs/bump.md b/docs/bump.md index e58a11e18d..8e0980ec82 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -58,6 +58,7 @@ usage: cz bump [-h] [--dry-run] [--files-only] [--local-version] [--changelog] [--devrelease DEVRELEASE] [--increment {MAJOR,MINOR,PATCH}] [--check-consistency] [--annotated-tag] [--gpg-sign] [--changelog-to-stdout] [--git-output-to-stderr] [--retry] [--major-version-zero] + [--template TEMPLATE] [--extra EXTRA] [MANUAL_VERSION] positional arguments: @@ -99,6 +100,10 @@ options: --version-scheme {pep440,semver} choose version scheme + --template TEMPLATE, -t TEMPLATE + changelog template file name (relative to the current working directory) + --extra EXTRA, -e EXTRA + a changelog extra variable (in the form 'key=value') ``` ### `--files-only` @@ -250,6 +255,21 @@ Can I transition from one to the other? Yes, you shouldn't have any issues. +### `--template` + +Provides your own changelog jinja template. +See [the template customization section](customization.md#customizing-the-changelog-template) + +### `--extra` + +Provides your own changelog extra variables by using the `extras` settings or the `--extra/-e` parameter. + +```bash +cz bump --changelog --extra key=value -e short="quoted value" +``` + +See [the template customization section](customization.md#customizing-the-changelog-template). + ## Avoid raising errors Some situations from commitizen raise an exit code different than 0. diff --git a/docs/changelog.md b/docs/changelog.md index d6799e198f..029882c12b 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -14,6 +14,7 @@ update_changelog_on_bump = true ```bash $ cz changelog --help usage: cz changelog [-h] [--dry-run] [--file-name FILE_NAME] [--unreleased-version UNRELEASED_VERSION] [--incremental] [--start-rev START_REV] + [--template TEMPLATE] [--extra EXTRA] [rev_range] positional arguments: @@ -31,6 +32,11 @@ optional arguments: start rev of the changelog. If not set, it will generate changelog from the start --merge-prerelease collect all changes from prereleases into next non-prerelease. If not set, it will include prereleases in the changelog + start rev of the changelog.If not set, it will generate changelog from the start + --template TEMPLATE, -t TEMPLATE + changelog template file name (relative to the current working directory) + --extra EXTRA, -e EXTRA + a changelog extra variable (in the form 'key=value') ``` ### Examples @@ -186,6 +192,21 @@ cz changelog --merge-prerelease changelog_merge_prerelease = true ``` +### `template` + +Provides your own changelog jinja template by using the `template` settings or the `--template` parameter. +See [the template customization section](customization.md#customizing-the-changelog-template) + +### `extras` + +Provides your own changelog extra variables by using the `extras` settings or the `--extra/-e` parameter. + +```bash +cz changelog --extra key=value -e short="quoted value" +``` + +See [the template customization section](customization.md#customizing-the-changelog-template) + ## Hooks Supported hook methods: diff --git a/docs/config.md b/docs/config.md index 85661c12b7..2ae2b5cc38 100644 --- a/docs/config.md +++ b/docs/config.md @@ -166,7 +166,7 @@ Type: `int` Default: `0` -In some circumstances, a prerelease cannot start with a 0, e.g. in an embedded project individual characters are encoded as bytes. This can be done by specifying an offset from which to start counting. [prerelease-offset] | +In some circumstances, a prerelease cannot start with a 0, e.g. in an embedded project individual characters are encoded as bytes. This can be done by specifying an offset from which to start counting. [prerelease-offset] ### `pre_bump_hooks` @@ -192,6 +192,22 @@ Default: `utf-8` Sets the character encoding to be used when parsing commit messages. [Read more][encoding] +### `template` + +Type: `str` + +Default: `None` (provided by plugin) + +Provide custom changelog jinja template path relative to the current working directory. [Read more][template-customization] + +### `extras` + +Type: `dict[str, Any]` + +Default: `{}` + +Provide extra variables to the changelog template. [Read more][template-customization] + ## Configuration file ### pyproject.toml or .cz.toml @@ -364,5 +380,6 @@ setup( [additional-features]: https://github.com/tmbo/questionary#additional-features [customization]: customization.md [shortcuts]: customization.md#shortcut-keys +[template-customization]: customization.md#customizing-the-changelog-template [annotated-tags-vs-lightweight]: https://stackoverflow.com/a/11514139/2047185 [encoding]: tutorials/writing_commits.md#writing-commits diff --git a/docs/customization.md b/docs/customization.md index 610d1f0452..b6ff6105dd 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -431,3 +431,84 @@ setup( ``` Then your plugin will be available under the name `plugin`. + +## Customizing the changelog template + +Commitizen gives you the possibility to provide your own changelog template, by: + +- providing one with your customization class +- providing one from the current working directory and setting it: + - as [configuration][template-config] + - as `--template` parameter to both `bump` and `changelog` commands +- either by providing a template with the same name as the default template + +By default, the template used is the `keep_a_changelog_template.j2` file from the commitizen repository. + +### Providing a template with your customization class + +There is 3 parameters available to change the template rendering from your custom `BaseCommitizen`. + +| Parameter | Type | Default | Description | +| ----------------- | ------ | ------- | ----------------------------------------------------------------------------------------------------- | +| `template` | `str` | `None` | Provide your own template name (default to `keep_a_changelog_template.j2`) | +| `template_loader` | `str` | `None` | Override the default template loader (so you can provide template from you customization class) | +| `template_extras` | `dict` | `None` | Provide some extra template parameters | + +Let's see an example. + +```python +from commitizen.cz.base import BaseCommitizen +from jinja2 import PackageLoader + + +class MyPlugin(BaseCommitizen): + template = "CHANGELOG.md.jinja" + template_loader = PackageLoader("my_plugin", "templates") + template_extras = {"key": "value"} +``` + +This snippet will: + +- use `CHANGELOG.md.jinja` as template name +- search for it in the `templates` directory for `my_plugin` package +- add the `key=value` variable in the template + +### Providing a template from the current working directory + +Users can provides their own template from their current working directory (your project root) by: + +- providing a template with the same name (`keep_a_changelog_template.j2` unless overridden by your custom class) +- setting your template path as `template` configuration +- giving your template path as `--template` parameter to `bump` and `changelog` commands + +!!! Note + The path is relative to the current working directory, aka. your project root most of the time. + +### Template variables + +The default template use a single `tree` variable which is a list of entries (a release) with the following format: + +| Name | Type | Description | +| ---- | ---- | ----------- | +| version | `str` | The release version | +| date | `datetime` | The release date | +| changes | `list[tuple[str, list[Change]]]` | The release sorted changes list in the form `(type, changes)` | + +Each `Change` has the following fields: + +| Name | Type | Description | +| ---- | ---- | ----------- | +| scope | `str | None` | An optional scope | +| message | `str` | The commit message body | + +!!! Note + The field values depend on the customization class and/or the settings you provide + +When using another template (either provided by a plugin or by yourself), you can also pass extra template variables +by: + +- defining them in your configuration with the [`extras` settings][extras-config] +- providing them on the commandline with the `--extra/-e` parameter to `bump` and `changelog` commands + +[template-config]: config.md#template +[extras-config]: config.md#extras diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 8952bef440..a97faee2b0 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -3,6 +3,8 @@ import inspect import re import sys +from pathlib import Path +from textwrap import dedent from unittest.mock import MagicMock, call import pytest @@ -10,6 +12,8 @@ import commitizen.commands.bump as bump from commitizen import cli, cmd, git, hooks +from commitizen.changelog import DEFAULT_TEMPLATE +from commitizen.cz.base import BaseCommitizen from commitizen.exceptions import ( BumpTagFailedError, CommitizenException, @@ -1099,3 +1103,128 @@ def test_bump_command_version_scheme_priority_over_version_type(mocker: MockFixt cli.main() assert git.tag_exist("0.2.0a0") + + +@pytest.mark.parametrize( + "arg,cfg,expected", + ( + pytest.param("", "", "default", id="default"), + pytest.param("", "changelog.cfg", "from config", id="from-config"), + pytest.param( + "--template=changelog.cmd", "changelog.cfg", "from cmd", id="from-command" + ), + ), +) +def test_bump_template_option_precedance( + mocker: MockFixture, + tmp_commitizen_project: Path, + mock_plugin: BaseCommitizen, + arg: str, + cfg: str, + expected: str, +): + project_root = Path(tmp_commitizen_project) + cfg_template = project_root / "changelog.cfg" + cmd_template = project_root / "changelog.cmd" + default_template = project_root / mock_plugin.template + changelog = project_root / "CHANGELOG.md" + + cfg_template.write_text("from config") + cmd_template.write_text("from cmd") + default_template.write_text("default") + + create_file_and_commit("feat: new file") + + if cfg: + pyproject = project_root / "pyproject.toml" + pyproject.write_text( + dedent( + f"""\ + [tool.commitizen] + version = "0.1.0" + template = "{cfg}" + """ + ) + ) + + testargs = ["cz", "bump", "--yes", "--changelog"] + if arg: + testargs.append(arg) + mocker.patch.object(sys, "argv", testargs + ["0.1.1"]) + cli.main() + + out = changelog.read_text() + assert out == expected + + +def test_bump_template_extras_precedance( + mocker: MockFixture, + tmp_commitizen_project: Path, + mock_plugin: BaseCommitizen, +): + project_root = Path(tmp_commitizen_project) + changelog_tpl = project_root / DEFAULT_TEMPLATE + changelog_tpl.write_text("{{first}} - {{second}} - {{third}}") + + mock_plugin.template_extras = dict( + first="from-plugin", second="from-plugin", third="from-plugin" + ) + + pyproject = project_root / "pyproject.toml" + pyproject.write_text( + dedent( + """\ + [tool.commitizen] + version = "0.1.0" + [tool.commitizen.extras] + first = "from-config" + second = "from-config" + """ + ) + ) + + create_file_and_commit("feat: new file") + + testargs = [ + "cz", + "bump", + "--yes", + "--changelog", + "--extra", + "first=from-command", + "0.1.1", + ] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + changelog = project_root / "CHANGELOG.md" + assert changelog.read_text() == "from-command - from-config - from-plugin" + + +def test_bump_template_extra_quotes( + mocker: MockFixture, + tmp_commitizen_project: Path, +): + project_root = Path(tmp_commitizen_project) + changelog_tpl = project_root / DEFAULT_TEMPLATE + changelog_tpl.write_text("{{first}} - {{second}} - {{third}}") + + create_file_and_commit("feat: new file") + + testargs = [ + "cz", + "bump", + "--changelog", + "--yes", + "-e", + "first=no-quote", + "-e", + "second='single quotes'", + "-e", + 'third="double quotes"', + ] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + changelog = project_root / "CHANGELOG.md" + assert changelog.read_text() == "no-quote - single quotes - double quotes" diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index 535c8f4a4d..621c46de93 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -1,13 +1,17 @@ import itertools import sys from datetime import datetime +from pathlib import Path +from textwrap import dedent import pytest from dateutil import relativedelta from pytest_mock import MockFixture from commitizen import cli, git +from commitizen.changelog import DEFAULT_TEMPLATE from commitizen.commands.changelog import Changelog +from commitizen.cz.base import BaseCommitizen from commitizen.exceptions import ( DryRunExit, NoCommitsFoundError, @@ -1359,3 +1363,118 @@ def test_changelog_from_current_version_tag_with_nonversion_tag( - commit 1\n" write_patch.assert_called_with(full_changelog) + + +@pytest.mark.parametrize( + "arg,cfg,expected", + ( + pytest.param("", "", "default", id="default"), + pytest.param("", "changelog.cfg", "from config", id="from-config"), + pytest.param( + "--template=changelog.cmd", "changelog.cfg", "from cmd", id="from-command" + ), + ), +) +def test_changelog_template_option_precedance( + mocker: MockFixture, + tmp_commitizen_project: Path, + mock_plugin: BaseCommitizen, + arg: str, + cfg: str, + expected: str, +): + project_root = Path(tmp_commitizen_project) + cfg_template = project_root / "changelog.cfg" + cmd_template = project_root / "changelog.cmd" + default_template = project_root / mock_plugin.template + changelog = project_root / "CHANGELOG.md" + + cfg_template.write_text("from config") + cmd_template.write_text("from cmd") + default_template.write_text("default") + + create_file_and_commit("feat: new file") + + if cfg: + pyproject = project_root / "pyproject.toml" + pyproject.write_text( + dedent( + f"""\ + [tool.commitizen] + version = "0.1.0" + template = "{cfg}" + """ + ) + ) + + testargs = ["cz", "changelog"] + if arg: + testargs.append(arg) + mocker.patch.object(sys, "argv", testargs) + cli.main() + + out = changelog.read_text() + assert out == expected + + +def test_changelog_template_extras_precedance( + mocker: MockFixture, + tmp_commitizen_project: Path, + mock_plugin: BaseCommitizen, +): + project_root = Path(tmp_commitizen_project) + changelog_tpl = project_root / mock_plugin.template + changelog_tpl.write_text("{{first}} - {{second}} - {{third}}") + + mock_plugin.template_extras = dict( + first="from-plugin", second="from-plugin", third="from-plugin" + ) + + pyproject = project_root / "pyproject.toml" + pyproject.write_text( + dedent( + """\ + [tool.commitizen] + version = "0.1.0" + [tool.commitizen.extras] + first = "from-config" + second = "from-config" + """ + ) + ) + + create_file_and_commit("feat: new file") + + testargs = ["cz", "changelog", "--extra", "first=from-command"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + changelog = project_root / "CHANGELOG.md" + assert changelog.read_text() == "from-command - from-config - from-plugin" + + +def test_changelog_template_extra_quotes( + mocker: MockFixture, + tmp_commitizen_project: Path, +): + project_root = Path(tmp_commitizen_project) + changelog_tpl = project_root / DEFAULT_TEMPLATE + changelog_tpl.write_text("{{first}} - {{second}} - {{third}}") + + create_file_and_commit("feat: new file") + + testargs = [ + "cz", + "changelog", + "-e", + "first=no-quote", + "-e", + "second='single quotes'", + "-e", + 'third="double quotes"', + ] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + changelog = project_root / "CHANGELOG.md" + assert changelog.read_text() == "no-quote - single quotes - double quotes" diff --git a/tests/conftest.py b/tests/conftest.py index 98b56df158..980c4d053e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -4,13 +4,15 @@ import re import tempfile from pathlib import Path +from typing import Iterator import pytest +from pytest_mock import MockerFixture from commitizen import cmd, defaults from commitizen.config import BaseConfig -from commitizen.cz.base import BaseCommitizen from commitizen.cz import registry +from commitizen.cz.base import BaseCommitizen from tests.utils import create_file_and_commit SIGNER = "GitHub Action" @@ -37,6 +39,14 @@ def git_sandbox(monkeypatch: pytest.MonkeyPatch, tmp_path: Path): cmd.run("git config --global init.defaultBranch master") +@pytest.fixture +def chdir(tmp_path: Path) -> Iterator[Path]: + cwd = os.getcwd() + os.chdir(tmp_path) + yield tmp_path + os.chdir(cwd) + + @pytest.fixture(scope="function") def tmp_git_project(tmpdir): with tmpdir.as_cwd(): @@ -200,3 +210,18 @@ def message(self, answers: dict) -> str: def use_cz_semver(mocker): new_cz = {**registry, "cz_semver": SemverCommitizen} mocker.patch.dict("commitizen.cz.registry", new_cz) + + +class MockPlugin(BaseCommitizen): + def questions(self) -> defaults.Questions: + return [] + + def message(self, answers: dict) -> str: + return "" + + +@pytest.fixture +def mock_plugin(mocker: MockerFixture, config: BaseConfig) -> BaseCommitizen: + mock = MockPlugin(config) + mocker.patch("commitizen.factory.commiter_factory", return_value=mock) + return mock diff --git a/tests/test_changelog.py b/tests/test_changelog.py index faf6ee0c43..7b2d45683c 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1,4 +1,7 @@ +from pathlib import Path + import pytest +from jinja2 import FileSystemLoader from commitizen import changelog, defaults, git from commitizen.cz.conventional_commits.conventional_commits import ( @@ -1147,6 +1150,91 @@ def test_render_changelog(gitcommits, tags, changelog_content): assert result == changelog_content +def test_render_changelog_from_default_plugin_values( + gitcommits, tags, changelog_content +): + parser = ConventionalCommitsCz.commit_parser + changelog_pattern = ConventionalCommitsCz.bump_pattern + loader = ConventionalCommitsCz.template_loader + template = ConventionalCommitsCz.template + tree = changelog.generate_tree_from_commits( + gitcommits, tags, parser, changelog_pattern + ) + result = changelog.render_changelog(tree, loader=loader, template=template) + assert result == changelog_content + + +def test_render_changelog_override_loader(gitcommits, tags, tmp_path: Path): + loader = FileSystemLoader(tmp_path) + tpl = "loader overridden" + (tmp_path / changelog.DEFAULT_TEMPLATE).write_text(tpl) + parser = ConventionalCommitsCz.commit_parser + changelog_pattern = ConventionalCommitsCz.bump_pattern + tree = changelog.generate_tree_from_commits( + gitcommits, tags, parser, changelog_pattern + ) + result = changelog.render_changelog(tree, loader=loader) + assert result == tpl + + +def test_render_changelog_override_template_from_cwd(gitcommits, tags, chdir: Path): + tpl = "overridden from cwd" + (chdir / changelog.DEFAULT_TEMPLATE).write_text(tpl) + parser = ConventionalCommitsCz.commit_parser + changelog_pattern = ConventionalCommitsCz.bump_pattern + tree = changelog.generate_tree_from_commits( + gitcommits, tags, parser, changelog_pattern + ) + result = changelog.render_changelog(tree) + assert result == tpl + + +def test_render_changelog_override_template_from_cwd_with_custom_name( + gitcommits, tags, chdir: Path +): + tpl = "template overridden from cwd" + tpl_name = "tpl.j2" + (chdir / tpl_name).write_text(tpl) + parser = ConventionalCommitsCz.commit_parser + changelog_pattern = ConventionalCommitsCz.bump_pattern + tree = changelog.generate_tree_from_commits( + gitcommits, tags, parser, changelog_pattern + ) + result = changelog.render_changelog(tree, template=tpl_name) + assert result == tpl + + +def test_render_changelog_override_loader_and_template( + gitcommits, tags, tmp_path: Path +): + loader = FileSystemLoader(tmp_path) + tpl = "loader and template overridden" + tpl_name = "tpl.j2" + (tmp_path / tpl_name).write_text(tpl) + parser = ConventionalCommitsCz.commit_parser + changelog_pattern = ConventionalCommitsCz.bump_pattern + tree = changelog.generate_tree_from_commits( + gitcommits, tags, parser, changelog_pattern + ) + result = changelog.render_changelog(tree, loader=loader, template=tpl_name) + assert result == tpl + + +def test_render_changelog_support_arbitrary_kwargs(gitcommits, tags, tmp_path: Path): + loader = FileSystemLoader(tmp_path) + tpl_name = "tpl.j2" + (tmp_path / tpl_name).write_text("{{ key }}") + parser = ConventionalCommitsCz.commit_parser + changelog_pattern = ConventionalCommitsCz.bump_pattern + tree = changelog.generate_tree_from_commits( + gitcommits, tags, parser, changelog_pattern + ) + result = changelog.render_changelog( + tree, loader=loader, template=tpl_name, key="value" + ) + assert result == "value" + + def test_render_changelog_unreleased(gitcommits): some_commits = gitcommits[:7] parser = ConventionalCommitsCz.commit_parser diff --git a/tests/test_conf.py b/tests/test_conf.py index 5a7a899e7c..21a48fd2d6 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -1,6 +1,9 @@ +from __future__ import annotations + import json import os from pathlib import Path +from typing import Any import pytest import yaml @@ -42,7 +45,7 @@ } -_settings = { +_settings: dict[str, Any] = { "name": "cz_jira", "version": "1.0.0", "version_provider": "commitizen", @@ -65,9 +68,11 @@ "prerelease_offset": 0, "encoding": "utf-8", "always_signoff": False, + "template": None, + "extras": {}, } -_new_settings = { +_new_settings: dict[str, Any] = { "name": "cz_jira", "version": "2.0.0", "version_provider": "commitizen", @@ -90,6 +95,8 @@ "prerelease_offset": 0, "encoding": "utf-8", "always_signoff": False, + "template": None, + "extras": {}, } _read_settings = { From 3adc1713e78be795ecfdfec21704e7ef46b619a0 Mon Sep 17 00:00:00 2001 From: Axel H Date: Thu, 26 Jan 2023 00:51:19 +0100 Subject: [PATCH 020/685] feat(template): add `changelog --export-template` command --- commitizen/changelog.py | 20 ++++++++--- commitizen/cli.py | 5 +++ commitizen/commands/changelog.py | 17 +++++++++- tests/commands/test_changelog_command.py | 43 ++++++++++++++++++++++++ 4 files changed, 79 insertions(+), 6 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index e79995eca7..2d26c9e0d2 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -38,6 +38,7 @@ Environment, FileSystemLoader, PackageLoader, + Template, ) from commitizen import out @@ -195,17 +196,26 @@ def order_changelog_tree(tree: Iterable, change_type_order: list[str]) -> Iterab return sorted_tree +def get_changelog_template( + loader: BaseLoader | None = None, template: str | None = None +) -> Template: + loader = ChoiceLoader( + [ + FileSystemLoader("."), + loader or PackageLoader("commitizen", "templates"), + ] + ) + env = Environment(loader=loader, trim_blocks=True) + return env.get_template(template or DEFAULT_TEMPLATE) + + def render_changelog( tree: Iterable, loader: BaseLoader | None = None, template: str | None = None, **kwargs, ) -> str: - loader = ChoiceLoader( - [FileSystemLoader("."), loader or PackageLoader("commitizen", "templates")] - ) - env = Environment(loader=loader, trim_blocks=True) - jinja_template = env.get_template(template or DEFAULT_TEMPLATE) + jinja_template = get_changelog_template(loader, template or DEFAULT_TEMPLATE) changelog: str = jinja_template.render(tree=tree, **kwargs) return changelog diff --git a/commitizen/cli.py b/commitizen/cli.py index 7a9822e641..cd3f7f9a20 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -346,6 +346,11 @@ def __call__(self, parser, namespace, kwarg, option_string=None): "default": None, "choices": version_schemes.KNOWN_SCHEMES, }, + { + "name": "--export-template", + "default": None, + "help": "Export the changelog template into this file instead of rendering it", + }, *deepcopy(tpl_arguments), ], }, diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 38bef366d9..fb58161d4d 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -3,9 +3,11 @@ import os.path from difflib import SequenceMatcher from operator import itemgetter +from pathlib import Path from typing import Callable from commitizen import bump, changelog, defaults, factory, git, out + from commitizen.config import BaseConfig from commitizen.exceptions import ( DryRunExit, @@ -65,8 +67,13 @@ def __init__(self, config: BaseConfig, args): "merge_prerelease" ) or self.config.settings.get("changelog_merge_prerelease") - self.template = args.get("template") or self.config.settings.get("template") + self.template = ( + args.get("template") + or self.config.settings.get("template") + or self.cz.template + ) self.extras = args.get("extras") or {} + self.export_template_to = args.get("export_template") def _find_incremental_rev(self, latest_version: str, tags: list[GitTag]) -> str: """Try to find the 'start_rev'. @@ -118,6 +125,11 @@ def write_changelog( changelog_out = changelog_hook(changelog_out, partial_changelog) changelog_file.write(changelog_out) + def export_template(self): + tpl = changelog.get_changelog_template(self.cz.template_loader, self.template) + src = Path(tpl.filename) + Path(self.export_template_to).write_text(src.read_text()) + def __call__(self): commit_parser = self.cz.commit_parser changelog_pattern = self.cz.changelog_pattern @@ -130,6 +142,9 @@ def __call__(self): ) = self.cz.changelog_message_builder_hook merge_prerelease = self.merge_prerelease + if self.export_template_to: + return self.export_template() + if not changelog_pattern or not commit_parser: raise NoPatternMapError( f"'{self.config.settings['name']}' rule does not support changelog" diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index 621c46de93..f474a1b275 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -6,8 +6,10 @@ import pytest from dateutil import relativedelta +from jinja2 import FileSystemLoader from pytest_mock import MockFixture +from commitizen import __file__ as commitizen_init from commitizen import cli, git from commitizen.changelog import DEFAULT_TEMPLATE from commitizen.commands.changelog import Changelog @@ -1478,3 +1480,44 @@ def test_changelog_template_extra_quotes( changelog = project_root / "CHANGELOG.md" assert changelog.read_text() == "no-quote - single quotes - double quotes" + + +def test_export_changelog_template_from_default( + mocker: MockFixture, + tmp_commitizen_project: Path, +): + project_root = Path(tmp_commitizen_project) + target = project_root / "changelog.jinja" + src = Path(commitizen_init).parent / "templates" / DEFAULT_TEMPLATE + + args = ["cz", "changelog", "--export-template", str(target)] + + mocker.patch.object(sys, "argv", args) + cli.main() + + assert target.exists() + assert target.read_text() == src.read_text() + + +def test_export_changelog_template_from_plugin( + mocker: MockFixture, + tmp_commitizen_project: Path, + mock_plugin: BaseCommitizen, + tmp_path: Path, +): + project_root = Path(tmp_commitizen_project) + target = project_root / "changelog.jinja" + filename = "template.jinja" + src = tmp_path / filename + tpl = "I am a custom template" + src.write_text(tpl) + mock_plugin.template_loader = FileSystemLoader(tmp_path) + mock_plugin.template = filename + + args = ["cz", "changelog", "--export-template", str(target)] + + mocker.patch.object(sys, "argv", args) + cli.main() + + assert target.exists() + assert target.read_text() == tpl From 241faad85f6ebbdfc65b724da14ed6103293394d Mon Sep 17 00:00:00 2001 From: Axel H Date: Sat, 8 Apr 2023 15:13:07 +0200 Subject: [PATCH 021/685] style(CHANGELOG.md): rename the default template as `CHANGELOG.md.j2` --- commitizen/changelog.py | 2 +- .../{keep_a_changelog_template.j2 => CHANGELOG.md.j2} | 0 docs/customization.md | 6 +++--- 3 files changed, 4 insertions(+), 4 deletions(-) rename commitizen/templates/{keep_a_changelog_template.j2 => CHANGELOG.md.j2} (100%) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index 2d26c9e0d2..e839efca8a 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -56,7 +56,7 @@ if TYPE_CHECKING: from commitizen.version_schemes import VersionScheme -DEFAULT_TEMPLATE = "keep_a_changelog_template.j2" +DEFAULT_TEMPLATE = "CHANGELOG.md.j2" def get_commit_tag(commit: GitCommit, tags: list[GitTag]) -> GitTag | None: diff --git a/commitizen/templates/keep_a_changelog_template.j2 b/commitizen/templates/CHANGELOG.md.j2 similarity index 100% rename from commitizen/templates/keep_a_changelog_template.j2 rename to commitizen/templates/CHANGELOG.md.j2 diff --git a/docs/customization.md b/docs/customization.md index b6ff6105dd..0c86f60d20 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -442,7 +442,7 @@ Commitizen gives you the possibility to provide your own changelog template, by: - as `--template` parameter to both `bump` and `changelog` commands - either by providing a template with the same name as the default template -By default, the template used is the `keep_a_changelog_template.j2` file from the commitizen repository. +By default, the template used is the `CHANGELOG.md.j2` file from the commitizen repository. ### Providing a template with your customization class @@ -450,7 +450,7 @@ There is 3 parameters available to change the template rendering from your custo | Parameter | Type | Default | Description | | ----------------- | ------ | ------- | ----------------------------------------------------------------------------------------------------- | -| `template` | `str` | `None` | Provide your own template name (default to `keep_a_changelog_template.j2`) | +| `template` | `str` | `None` | Provide your own template name (default to `CHANGELOG.md.j2`) | | `template_loader` | `str` | `None` | Override the default template loader (so you can provide template from you customization class) | | `template_extras` | `dict` | `None` | Provide some extra template parameters | @@ -477,7 +477,7 @@ This snippet will: Users can provides their own template from their current working directory (your project root) by: -- providing a template with the same name (`keep_a_changelog_template.j2` unless overridden by your custom class) +- providing a template with the same name (`CHANGELOG.md.j2` unless overridden by your custom class) - setting your template path as `template` configuration - giving your template path as `--template` parameter to `bump` and `changelog` commands From be5914545705b5f19d076349fdd0a37085669319 Mon Sep 17 00:00:00 2001 From: Axel H Date: Sat, 8 Apr 2023 18:58:55 +0200 Subject: [PATCH 022/685] fix(filename): ensure `file_name` can be passed to `changelog` from `bump` command --- commitizen/cli.py | 4 ++++ commitizen/commands/bump.py | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/commitizen/cli.py b/commitizen/cli.py index cd3f7f9a20..ce0d72b70f 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -257,6 +257,10 @@ def __call__(self, parser, namespace, kwarg, option_string=None): "help": "keep major version at zero, even for breaking changes", }, *deepcopy(tpl_arguments), + { + "name": "--file-name", + "help": "file name of changelog (default: 'CHANGELOG.md')", + }, { "name": ["--prerelease-offset"], "type": int, diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 2fc4743ff4..3a942d79d3 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -52,6 +52,7 @@ def __init__(self, config: BaseConfig, arguments: dict): "major_version_zero", "prerelease_offset", "template", + "file_name", ] if arguments[key] is not None }, @@ -79,6 +80,9 @@ def __init__(self, config: BaseConfig, arguments: dict): self.config, arguments["version_scheme"] or deprecated_version_type ) self.template = arguments["template"] or self.config.settings.get("template") + self.file_name = arguments["file_name"] or self.config.settings.get( + "changelog_file" + ) self.extras = arguments["extras"] def is_initial_tag(self, current_tag_version: str, is_yes: bool = False) -> bool: @@ -278,6 +282,7 @@ def __call__(self): # noqa: C901 "dry_run": dry_run, "template": self.template, "extras": self.extras, + "file_name": self.file_name, }, ) changelog_cmd() From 212b6d60687b184c0688e429bc74a00e50803ca1 Mon Sep 17 00:00:00 2001 From: Axel H Date: Sat, 29 Apr 2023 20:14:52 +0200 Subject: [PATCH 023/685] feat(formats): expose some new customizable changelog formats on the `commitizen.changelog_format` endpoint (Textile, AsciiDoc and RestructuredText) --- commitizen/changelog.py | 112 ++----- commitizen/changelog_formats/__init__.py | 90 +++++ commitizen/changelog_formats/asciidoc.py | 27 ++ commitizen/changelog_formats/base.py | 81 +++++ commitizen/changelog_formats/markdown.py | 28 ++ .../changelog_formats/restructuredtext.py | 95 ++++++ commitizen/changelog_formats/textile.py | 25 ++ commitizen/changelog_parser.py | 135 -------- commitizen/cli.py | 19 +- commitizen/commands/bump.py | 11 +- commitizen/commands/changelog.py | 39 +-- commitizen/cz/base.py | 7 +- .../cz/conventional_commits/__init__.py | 2 +- commitizen/defaults.py | 8 +- commitizen/exceptions.py | 6 + commitizen/templates/CHANGELOG.adoc.j2 | 19 ++ commitizen/templates/CHANGELOG.rst.j2 | 23 ++ commitizen/templates/CHANGELOG.textile.j2 | 19 ++ docs/config.md | 8 + docs/exit_codes.md | 5 +- pyproject.toml | 6 + tests/commands/test_bump_command.py | 21 +- tests/commands/test_changelog_command.py | 129 ++++++-- .../test_changelog_from_start_asciidoc_.adoc | 9 + ...=> test_changelog_from_start_markdown_.md} | 0 ...changelog_from_start_restructuredtext_.rst | 12 + ...test_changelog_from_start_textile_.textile | 9 + ...nreleased_using_incremental_asciidoc_.adoc | 19 ++ ...unreleased_using_incremental_markdown_.md} | 0 ...ed_using_incremental_restructuredtext_.rst | 25 ++ ...eleased_using_incremental_textile_.textile | 19 ++ tests/conftest.py | 28 ++ tests/test_changelog.py | 89 +++-- tests/test_changelog_format_asciidoc.py | 138 ++++++++ tests/test_changelog_format_markdown.py | 138 ++++++++ .../test_changelog_format_restructuredtext.py | 310 ++++++++++++++++++ tests/test_changelog_format_textile.py | 138 ++++++++ tests/test_changelog_formats.py | 58 ++++ tests/test_changelog_meta.py | 165 ---------- tests/test_changelog_parser.py | 196 ----------- tests/test_conf.py | 12 +- 41 files changed, 1592 insertions(+), 688 deletions(-) create mode 100644 commitizen/changelog_formats/__init__.py create mode 100644 commitizen/changelog_formats/asciidoc.py create mode 100644 commitizen/changelog_formats/base.py create mode 100644 commitizen/changelog_formats/markdown.py create mode 100644 commitizen/changelog_formats/restructuredtext.py create mode 100644 commitizen/changelog_formats/textile.py delete mode 100644 commitizen/changelog_parser.py create mode 100644 commitizen/templates/CHANGELOG.adoc.j2 create mode 100644 commitizen/templates/CHANGELOG.rst.j2 create mode 100644 commitizen/templates/CHANGELOG.textile.j2 create mode 100644 tests/commands/test_changelog_command/test_changelog_from_start_asciidoc_.adoc rename tests/commands/test_changelog_command/{test_changelog_from_start.md => test_changelog_from_start_markdown_.md} (100%) create mode 100644 tests/commands/test_changelog_command/test_changelog_from_start_restructuredtext_.rst create mode 100644 tests/commands/test_changelog_command/test_changelog_from_start_textile_.textile create mode 100644 tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_asciidoc_.adoc rename tests/commands/test_changelog_command/{test_changelog_replacing_unreleased_using_incremental.md => test_changelog_replacing_unreleased_using_incremental_markdown_.md} (100%) create mode 100644 tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_restructuredtext_.rst create mode 100644 tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_textile_.textile create mode 100644 tests/test_changelog_format_asciidoc.py create mode 100644 tests/test_changelog_format_markdown.py create mode 100644 tests/test_changelog_format_restructuredtext.py create mode 100644 tests/test_changelog_format_textile.py create mode 100644 tests/test_changelog_formats.py delete mode 100644 tests/test_changelog_meta.py delete mode 100644 tests/test_changelog_parser.py diff --git a/commitizen/changelog.py b/commitizen/changelog.py index e839efca8a..cd9e76a320 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -26,37 +26,44 @@ """ from __future__ import annotations -import os import re from collections import OrderedDict, defaultdict +from dataclasses import dataclass from datetime import date -from typing import TYPE_CHECKING, Callable, Iterable, cast +from typing import TYPE_CHECKING, Callable, Iterable from jinja2 import ( BaseLoader, ChoiceLoader, Environment, FileSystemLoader, - PackageLoader, Template, ) from commitizen import out from commitizen.bump import normalize_tag -from commitizen.defaults import encoding from commitizen.exceptions import InvalidConfigurationError, NoCommitsFoundError from commitizen.git import GitCommit, GitTag from commitizen.version_schemes import ( DEFAULT_SCHEME, BaseVersion, InvalidVersion, - Pep440, ) if TYPE_CHECKING: from commitizen.version_schemes import VersionScheme -DEFAULT_TEMPLATE = "CHANGELOG.md.j2" + +@dataclass +class Metadata: + """ + Metadata extracted from the changelog produced by a plugin + """ + + unreleased_start: int | None = None + unreleased_end: int | None = None + latest_version: str | None = None + latest_version_position: int | None = None def get_commit_tag(commit: GitCommit, tags: list[GitTag]) -> GitTag | None: @@ -196,100 +203,31 @@ def order_changelog_tree(tree: Iterable, change_type_order: list[str]) -> Iterab return sorted_tree -def get_changelog_template( - loader: BaseLoader | None = None, template: str | None = None -) -> Template: +def get_changelog_template(loader: BaseLoader, template: str) -> Template: loader = ChoiceLoader( [ FileSystemLoader("."), - loader or PackageLoader("commitizen", "templates"), + loader, ] ) env = Environment(loader=loader, trim_blocks=True) - return env.get_template(template or DEFAULT_TEMPLATE) + return env.get_template(template) def render_changelog( tree: Iterable, - loader: BaseLoader | None = None, - template: str | None = None, + loader: BaseLoader, + template: str, **kwargs, ) -> str: - jinja_template = get_changelog_template(loader, template or DEFAULT_TEMPLATE) + jinja_template = get_changelog_template(loader, template) changelog: str = jinja_template.render(tree=tree, **kwargs) return changelog -def parse_version_from_markdown( - value: str, scheme: VersionScheme = Pep440 -) -> str | None: - if not value.startswith("#"): - return None - m = scheme.parser.search(value) - if not m: - return None - return cast(str, m.group("version")) - - -def parse_title_type_of_line(value: str) -> str | None: - md_title_parser = r"^(?P#+)" - m = re.search(md_title_parser, value) - if not m: - return None - return m.groupdict().get("title") - - -def get_metadata( - filepath: str, scheme: VersionScheme = Pep440, encoding: str = encoding -) -> dict: - unreleased_start: int | None = None - unreleased_end: int | None = None - unreleased_title: str | None = None - latest_version: str | None = None - latest_version_position: int | None = None - if not os.path.isfile(filepath): - return { - "unreleased_start": None, - "unreleased_end": None, - "latest_version": None, - "latest_version_position": None, - } - - with open(filepath, encoding=encoding) as changelog_file: - for index, line in enumerate(changelog_file): - line = line.strip().lower() - - unreleased: str | None = None - if "unreleased" in line: - unreleased = parse_title_type_of_line(line) - # Try to find beginning and end lines of the unreleased block - if unreleased: - unreleased_start = index - unreleased_title = unreleased - continue - elif ( - isinstance(unreleased_title, str) - and parse_title_type_of_line(line) == unreleased_title - ): - unreleased_end = index - - # Try to find the latest release done - version = parse_version_from_markdown(line, scheme) - if version: - latest_version = version - latest_version_position = index - break # there's no need for more info - if unreleased_start is not None and unreleased_end is None: - unreleased_end = index - return { - "unreleased_start": unreleased_start, - "unreleased_end": unreleased_end, - "latest_version": latest_version, - "latest_version_position": latest_version_position, - } - - -def incremental_build(new_content: str, lines: list[str], metadata: dict) -> list[str]: +def incremental_build( + new_content: str, lines: list[str], metadata: Metadata +) -> list[str]: """Takes the original lines and updates with new_content. The metadata governs how to remove the old unreleased section and where to place the @@ -303,9 +241,9 @@ def incremental_build(new_content: str, lines: list[str], metadata: dict) -> lis Returns: Updated lines """ - unreleased_start = metadata.get("unreleased_start") - unreleased_end = metadata.get("unreleased_end") - latest_version_position = metadata.get("latest_version_position") + unreleased_start = metadata.unreleased_start + unreleased_end = metadata.unreleased_end + latest_version_position = metadata.latest_version_position skip = False output_lines: list[str] = [] for index, line in enumerate(lines): diff --git a/commitizen/changelog_formats/__init__.py b/commitizen/changelog_formats/__init__.py new file mode 100644 index 0000000000..85df4b5144 --- /dev/null +++ b/commitizen/changelog_formats/__init__.py @@ -0,0 +1,90 @@ +from __future__ import annotations + +from typing import ClassVar, Protocol + +import importlib_metadata as metadata + +from commitizen.changelog import Metadata +from commitizen.exceptions import ChangelogFormatUnknown +from commitizen.config.base_config import BaseConfig + + +CHANGELOG_FORMAT_ENTRYPOINT = "commitizen.changelog_format" +TEMPLATE_EXTENSION = "j2" + + +class ChangelogFormat(Protocol): + extension: ClassVar[str] + """Standard known extension associated with this format""" + + alternative_extensions: ClassVar[set[str]] + """Known alternatives extensions for this format""" + + config: BaseConfig + + def __init__(self, config: BaseConfig): + self.config = config + + @property + def ext(self) -> str: + """Dotted version of extensions, as in `pathlib` and `os` modules""" + return f".{self.extension}" + + @property + def template(self) -> str: + """Expected template name for this format""" + return f"CHANGELOG.{self.extension}.{TEMPLATE_EXTENSION}" + + @property + def default_changelog_file(self) -> str: + return f"CHANGELOG.{self.extension}" + + def get_metadata(self, filepath: str) -> Metadata: + """ + Extract the changelog metadata. + """ + raise NotImplementedError + + +KNOWN_CHANGELOG_FORMATS: dict[str, type[ChangelogFormat]] = { + ep.name: ep.load() + for ep in metadata.entry_points(group=CHANGELOG_FORMAT_ENTRYPOINT) +} + + +def get_changelog_format( + config: BaseConfig, filename: str | None = None +) -> ChangelogFormat: + """ + Get a format from its name + + :raises FormatUnknown: if a non-empty name is provided but cannot be found in the known formats + """ + name: str | None = config.settings.get("changelog_format") + format: type[ChangelogFormat] | None = guess_changelog_format(filename) + + if name and name in KNOWN_CHANGELOG_FORMATS: + format = KNOWN_CHANGELOG_FORMATS[name] + + if not format: + raise ChangelogFormatUnknown(f"Unknown changelog format '{name}'") + + return format(config) + + +def guess_changelog_format(filename: str | None) -> type[ChangelogFormat] | None: + """ + Try guessing the file format from the filename. + + Algorithm is basic, extension-based, and won't work + for extension-less file names like `CHANGELOG` or `NEWS`. + """ + if not filename or not isinstance(filename, str): + return None + for format in KNOWN_CHANGELOG_FORMATS.values(): + if filename.endswith(f".{format.extension}"): + return format + for alt_extension in format.alternative_extensions: + if filename.endswith(f".{alt_extension}"): + return format + return None diff --git a/commitizen/changelog_formats/asciidoc.py b/commitizen/changelog_formats/asciidoc.py new file mode 100644 index 0000000000..d738926f6e --- /dev/null +++ b/commitizen/changelog_formats/asciidoc.py @@ -0,0 +1,27 @@ +from __future__ import annotations + +import re + +from .base import BaseFormat + + +class AsciiDoc(BaseFormat): + extension = "adoc" + + RE_TITLE = re.compile(r"^(?P<level>=+) (?P<title>.*)$") + + def parse_version_from_title(self, line: str) -> str | None: + m = self.RE_TITLE.match(line) + if not m: + return None + # Capture last match as AsciiDoc use postfixed URL labels + matches = list(re.finditer(self.version_parser, m.group("title"))) + if not matches: + return None + return matches[-1].group("version") + + def parse_title_level(self, line: str) -> int | None: + m = self.RE_TITLE.match(line) + if not m: + return None + return len(m.group("level")) diff --git a/commitizen/changelog_formats/base.py b/commitizen/changelog_formats/base.py new file mode 100644 index 0000000000..d0dfd9ec55 --- /dev/null +++ b/commitizen/changelog_formats/base.py @@ -0,0 +1,81 @@ +from __future__ import annotations + +import os +from abc import ABCMeta +from re import Pattern +from typing import IO, Any, ClassVar + +from commitizen.changelog import Metadata +from commitizen.config.base_config import BaseConfig +from commitizen.version_schemes import get_version_scheme + +from . import ChangelogFormat + + +class BaseFormat(ChangelogFormat, metaclass=ABCMeta): + """ + Base class to extend to implement a changelog file format. + """ + + extension: ClassVar[str] = "" + alternative_extensions: ClassVar[set[str]] = set() + + def __init__(self, config: BaseConfig): + # Constructor needs to be redefined because `Protocol` prevent instantiation by default + # See: https://bugs.python.org/issue44807 + self.config = config + + @property + def version_parser(self) -> Pattern: + return get_version_scheme(self.config).parser + + def get_metadata(self, filepath: str) -> Metadata: + if not os.path.isfile(filepath): + return Metadata() + + with open(filepath) as changelog_file: + return self.get_metadata_from_file(changelog_file) + + def get_metadata_from_file(self, file: IO[Any]) -> Metadata: + meta = Metadata() + unreleased_level: int | None = None + for index, line in enumerate(file): + line = line.strip().lower() + + unreleased: int | None = None + if "unreleased" in line: + unreleased = self.parse_title_level(line) + # Try to find beginning and end lines of the unreleased block + if unreleased: + meta.unreleased_start = index + unreleased_level = unreleased + continue + elif unreleased_level and self.parse_title_level(line) == unreleased_level: + meta.unreleased_end = index + + # Try to find the latest release done + version = self.parse_version_from_title(line) + if version: + meta.latest_version = version + meta.latest_version_position = index + break # there's no need for more info + if meta.unreleased_start is not None and meta.unreleased_end is None: + meta.unreleased_end = index + + return meta + + def parse_version_from_title(self, line: str) -> str | None: + """ + Extract the version from a title line if any + """ + raise NotImplementedError( + "Default `get_metadata_from_file` requires `parse_version_from_changelog` to be implemented" + ) + + def parse_title_level(self, line: str) -> int | None: + """ + Get the title level/type of a line if any + """ + raise NotImplementedError( + "Default `get_metadata_from_file` requires `parse_title_type_of_line` to be implemented" + ) diff --git a/commitizen/changelog_formats/markdown.py b/commitizen/changelog_formats/markdown.py new file mode 100644 index 0000000000..a5a0f42de3 --- /dev/null +++ b/commitizen/changelog_formats/markdown.py @@ -0,0 +1,28 @@ +from __future__ import annotations + +import re + +from .base import BaseFormat + + +class Markdown(BaseFormat): + extension = "md" + + alternative_extensions = {"markdown", "mkd"} + + RE_TITLE = re.compile(r"^(?P<level>#+) (?P<title>.*)$") + + def parse_version_from_title(self, line: str) -> str | None: + m = self.RE_TITLE.match(line) + if not m: + return None + m = re.search(self.version_parser, m.group("title")) + if not m: + return None + return m.group("version") + + def parse_title_level(self, line: str) -> int | None: + m = self.RE_TITLE.match(line) + if not m: + return None + return len(m.group("level")) diff --git a/commitizen/changelog_formats/restructuredtext.py b/commitizen/changelog_formats/restructuredtext.py new file mode 100644 index 0000000000..a252fe1514 --- /dev/null +++ b/commitizen/changelog_formats/restructuredtext.py @@ -0,0 +1,95 @@ +from __future__ import annotations + +import re +import sys +from itertools import zip_longest +from typing import IO, TYPE_CHECKING, Any, Union, Tuple + +from commitizen.changelog import Metadata + +from .base import BaseFormat + +if TYPE_CHECKING: + # TypeAlias is Python 3.10+ but backported in typing-extensions + if sys.version_info >= (3, 10): + from typing import TypeAlias + else: + from typing_extensions import TypeAlias + + +# Can't use `|` operator and native type because of https://bugs.python.org/issue42233 only fixed in 3.10 +TitleKind: TypeAlias = Union[str, Tuple[str, str]] + + +class RestructuredText(BaseFormat): + extension = "rst" + + def get_metadata_from_file(self, file: IO[Any]) -> Metadata: + """ + RestructuredText section titles are not one-line-based, + they spread on 2 or 3 lines and levels are not predefined + but determined byt their occurrence order. + + It requires its own algorithm. + + For a more generic approach, you need to rely on `docutils`. + """ + meta = Metadata() + unreleased_title_kind: TitleKind | None = None + in_overlined_title = False + lines = file.readlines() + for index, (first, second, third) in enumerate( + zip_longest(lines, lines[1:], lines[2:], fillvalue="") + ): + first = first.strip().lower() + second = second.strip().lower() + third = third.strip().lower() + title: str | None = None + kind: TitleKind | None = None + + if self.is_overlined_title(first, second, third): + title = second + kind = (first[0], third[0]) + in_overlined_title = True + elif not in_overlined_title and self.is_underlined_title(first, second): + title = first + kind = second[0] + else: + in_overlined_title = False + + if title: + if "unreleased" in title: + unreleased_title_kind = kind + meta.unreleased_start = index + continue + elif unreleased_title_kind and unreleased_title_kind == kind: + meta.unreleased_end = index + # Try to find the latest release done + m = re.search(self.version_parser, title) + if m: + version = m.group("version") + meta.latest_version = version + meta.latest_version_position = index + break # there's no need for more info + if meta.unreleased_start is not None and meta.unreleased_end is None: + meta.unreleased_end = ( + meta.latest_version_position if meta.latest_version else index + 1 + ) + + return meta + + def is_overlined_title(self, first: str, second: str, third: str) -> bool: + return ( + len(first) >= len(second) + and len(first) == len(third) + and all(char == first[0] for char in first[1:]) + and first[0] == third[0] + and self.is_underlined_title(second, third) + ) + + def is_underlined_title(self, first: str, second: str) -> bool: + return ( + len(second) >= len(first) + and not second.isalnum() + and all(char == second[0] for char in second[1:]) + ) diff --git a/commitizen/changelog_formats/textile.py b/commitizen/changelog_formats/textile.py new file mode 100644 index 0000000000..80118cdb3c --- /dev/null +++ b/commitizen/changelog_formats/textile.py @@ -0,0 +1,25 @@ +from __future__ import annotations + +import re + +from .base import BaseFormat + + +class Textile(BaseFormat): + extension = "textile" + + RE_TITLE = re.compile(r"^h(?P<level>\d)\. (?P<title>.*)$") + + def parse_version_from_title(self, line: str) -> str | None: + if not self.RE_TITLE.match(line): + return None + m = re.search(self.version_parser, line) + if not m: + return None + return m.group("version") + + def parse_title_level(self, line: str) -> int | None: + m = self.RE_TITLE.match(line) + if not m: + return None + return int(m.group("level")) diff --git a/commitizen/changelog_parser.py b/commitizen/changelog_parser.py deleted file mode 100644 index 51b39fb956..0000000000 --- a/commitizen/changelog_parser.py +++ /dev/null @@ -1,135 +0,0 @@ -"""CHNAGLOG PARSER DESIGN - -## Parse CHANGELOG.md - -1. Get LATEST VERSION from CONFIG -1. Parse the file version to version -2. Build a dict (tree) of that particular version -3. Transform tree into markdown again -""" -from __future__ import annotations - -import re -from collections import defaultdict -from typing import Generator, Iterable - -from commitizen.defaults import encoding - -MD_VERSION_RE = r"^##\s(?P<version>[a-zA-Z0-9.+]+)\s?\(?(?P<date>[0-9-]+)?\)?" -MD_CHANGE_TYPE_RE = r"^###\s(?P<change_type>[a-zA-Z0-9.+\s]+)" -MD_MESSAGE_RE = ( - r"^-\s(\*{2}(?P<scope>[a-zA-Z0-9]+)\*{2}:\s)?(?P<message>.+)(?P<breaking>!)?" -) -md_version_c = re.compile(MD_VERSION_RE) -md_change_type_c = re.compile(MD_CHANGE_TYPE_RE) -md_message_c = re.compile(MD_MESSAGE_RE) - - -CATEGORIES = [ - ("fix", "fix"), - ("breaking", "BREAKING CHANGES"), - ("feat", "feat"), - ("refactor", "refactor"), - ("perf", "perf"), - ("test", "test"), - ("build", "build"), - ("ci", "ci"), - ("chore", "chore"), -] - - -def find_version_blocks(filepath: str, encoding: str = encoding) -> Generator: - """Find version block (version block: contains all the information about a version.) - - E.g: - ``` - ## 1.2.1 (2019-07-20) - - ### Fix - - - username validation not working - - ### Feat - - - new login system - - ``` - """ - with open(filepath, encoding=encoding) as f: - block: list = [] - for line in f: - line = line.strip("\n") - if not line: - continue - - if line.startswith("## "): - if len(block) > 0: - yield block - block = [line] - else: - block.append(line) - yield block - - -def parse_md_version(md_version: str) -> dict: - m = md_version_c.match(md_version) - if not m: - return {} - return m.groupdict() - - -def parse_md_change_type(md_change_type: str) -> dict: - m = md_change_type_c.match(md_change_type) - if not m: - return {} - return m.groupdict() - - -def parse_md_message(md_message: str) -> dict: - m = md_message_c.match(md_message) - if not m: - return {} - return m.groupdict() - - -def transform_change_type(change_type: str) -> str: - # TODO: Use again to parse, for this we have to wait until the maps get - # defined again. - _change_type_lower = change_type.lower() - for match_value, output in CATEGORIES: - if re.search(match_value, _change_type_lower): - return output - else: - raise ValueError(f"Could not match a change_type with {change_type}") - - -def generate_block_tree(block: list[str]) -> dict: - # tree: Dict = {"commits": []} - changes: dict = defaultdict(list) - tree: dict = {"changes": changes} - - change_type = None - for line in block: - if line.startswith("## "): - # version identified - change_type = None - tree = {**tree, **parse_md_version(line)} - elif line.startswith("### "): - # change_type identified - result = parse_md_change_type(line) - if not result: - continue - change_type = result.get("change_type", "").lower() - - elif line.startswith("- "): - # message identified - commit = parse_md_message(line) - changes[change_type].append(commit) - else: - print("it's something else: ", line) - return tree - - -def generate_full_tree(blocks: Iterable) -> Iterable[dict]: - for block in blocks: - yield generate_block_tree(block) diff --git a/commitizen/cli.py b/commitizen/cli.py index ce0d72b70f..19d6b1b80a 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -7,6 +7,7 @@ from functools import partial from pathlib import Path from types import TracebackType +from typing import Any, Sequence import argcomplete from decli import cli @@ -42,9 +43,25 @@ class ParseKwargs(argparse.Action): } """ - def __call__(self, parser, namespace, kwarg, option_string=None): + def __call__( + self, + parser: argparse.ArgumentParser, + namespace: argparse.Namespace, + kwarg: str | Sequence[Any] | None, + option_string: str | None = None, + ): + if not isinstance(kwarg, str): + return + if "=" not in kwarg: + raise InvalidCommandArgumentError( + f"Option {option_string} expect a key=value format" + ) kwargs = getattr(namespace, self.dest, None) or {} key, value = kwarg.split("=", 1) + if not key: + raise InvalidCommandArgumentError( + f"Option {option_string} expect a key=value format" + ) kwargs[key] = value.strip("'\"") setattr(namespace, self.dest, kwargs) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 3a942d79d3..f1b6813566 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -22,6 +22,7 @@ NotAllowed, NoVersionSpecifiedError, ) +from commitizen.changelog_formats import get_changelog_format from commitizen.providers import get_provider from commitizen.version_schemes import InvalidVersion, get_version_scheme @@ -79,10 +80,16 @@ def __init__(self, config: BaseConfig, arguments: dict): self.scheme = get_version_scheme( self.config, arguments["version_scheme"] or deprecated_version_type ) - self.template = arguments["template"] or self.config.settings.get("template") self.file_name = arguments["file_name"] or self.config.settings.get( "changelog_file" ) + self.changelog_format = get_changelog_format(self.config, self.file_name) + + self.template = ( + arguments["template"] + or self.config.settings.get("template") + or self.changelog_format.template + ) self.extras = arguments["extras"] def is_initial_tag(self, current_tag_version: str, is_yes: bool = False) -> bool: @@ -266,6 +273,8 @@ def __call__(self): # noqa: C901 self.config, { "unreleased_version": new_tag_version, + "template": self.template, + "extras": self.extras, "incremental": True, "dry_run": True, }, diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index fb58161d4d..8b3c309636 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -17,6 +17,7 @@ NotAGitProjectError, NotAllowed, ) +from commitizen.changelog_formats import get_changelog_format from commitizen.git import GitTag, smart_open from commitizen.version_schemes import get_version_scheme @@ -38,6 +39,14 @@ def __init__(self, config: BaseConfig, args): self.file_name = args.get("file_name") or self.config.settings.get( "changelog_file" ) + if not isinstance(self.file_name, str): + raise NotAllowed( + "Changelog file name is broken.\n" + "Check the flag `--file-name` in the terminal " + f"or the setting `changelog_file` in {self.config.path}" + ) + self.changelog_format = get_changelog_format(self.config, self.file_name) + self.incremental = args["incremental"] or self.config.settings.get( "changelog_incremental" ) @@ -70,7 +79,7 @@ def __init__(self, config: BaseConfig, args): self.template = ( args.get("template") or self.config.settings.get("template") - or self.cz.template + or self.changelog_format.template ) self.extras = args.get("extras") or {} self.export_template_to = args.get("export_template") @@ -102,15 +111,8 @@ def _find_incremental_rev(self, latest_version: str, tags: list[GitTag]) -> str: return start_rev def write_changelog( - self, changelog_out: str, lines: list[str], changelog_meta: dict + self, changelog_out: str, lines: list[str], changelog_meta: changelog.Metadata ): - if not isinstance(self.file_name, str): - raise NotAllowed( - "Changelog file name is broken.\n" - "Check the flag `--file-name` in the terminal " - f"or the setting `changelog_file` in {self.config.path}" - ) - changelog_hook: Callable | None = self.cz.changelog_hook with smart_open(self.file_name, "w", encoding=self.encoding) as changelog_file: partial_changelog: str | None = None @@ -135,11 +137,11 @@ def __call__(self): changelog_pattern = self.cz.changelog_pattern start_rev = self.start_rev unreleased_version = self.unreleased_version - changelog_meta: dict = {} + changelog_meta = changelog.Metadata() change_type_map: dict | None = self.change_type_map - changelog_message_builder_hook: None | ( - Callable - ) = self.cz.changelog_message_builder_hook + changelog_message_builder_hook: Callable | None = ( + self.cz.changelog_message_builder_hook + ) merge_prerelease = self.merge_prerelease if self.export_template_to: @@ -160,15 +162,10 @@ def __call__(self): end_rev = "" if self.incremental: - changelog_meta = changelog.get_metadata( - self.file_name, - self.scheme, - encoding=self.encoding, - ) - latest_version = changelog_meta.get("latest_version") - if latest_version: + changelog_meta = self.changelog_format.get_metadata(self.file_name) + if changelog_meta.latest_version: latest_tag_version: str = bump.normalize_tag( - latest_version, + changelog_meta.latest_version, tag_format=self.tag_format, scheme=self.scheme, ) diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index f0cf4aa581..d9bf5ea4a0 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -3,11 +3,10 @@ from abc import ABCMeta, abstractmethod from typing import Any, Callable -from jinja2 import BaseLoader +from jinja2 import BaseLoader, PackageLoader from prompt_toolkit.styles import Style, merge_styles from commitizen import git -from commitizen.changelog import DEFAULT_TEMPLATE from commitizen.config.base_config import BaseConfig from commitizen.defaults import Questions @@ -45,8 +44,8 @@ class BaseCommitizen(metaclass=ABCMeta): # Executed only at the end of the changelog generation changelog_hook: Callable[[str, str | None], str] | None = None - template: str = DEFAULT_TEMPLATE - template_loader: BaseLoader | None = None + # Plugins can override templates and provide extra template data + template_loader: BaseLoader = PackageLoader("commitizen", "templates") template_extras: dict[str, Any] = {} def __init__(self, config: BaseConfig): diff --git a/commitizen/cz/conventional_commits/__init__.py b/commitizen/cz/conventional_commits/__init__.py index 4ee406ca1a..52624d2ddb 100644 --- a/commitizen/cz/conventional_commits/__init__.py +++ b/commitizen/cz/conventional_commits/__init__.py @@ -1 +1 @@ -from .conventional_commits import ConventionalCommitsCz # noqa +from .conventional_commits import ConventionalCommitsCz # noqa: F401 diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 59b867c12a..7aa2c793c5 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -40,6 +40,7 @@ class Settings(TypedDict, total=False): allow_abort: bool allowed_prefixes: list[str] changelog_file: str + changelog_format: str | None changelog_incremental: bool changelog_start_rev: str | None changelog_merge_prerelease: bool @@ -52,6 +53,7 @@ class Settings(TypedDict, total=False): post_bump_hooks: list[str] | None prerelease_offset: int encoding: str + always_signoff: bool template: str | None extras: dict[str, Any] @@ -84,6 +86,7 @@ class Settings(TypedDict, total=False): "squash!", ], "changelog_file": "CHANGELOG.md", + "changelog_format": None, # default guessed from changelog_file "changelog_incremental": False, "changelog_start_rev": None, "changelog_merge_prerelease": False, @@ -95,7 +98,7 @@ class Settings(TypedDict, total=False): "prerelease_offset": 0, "encoding": encoding, "always_signoff": False, - "template": None, + "template": None, # default provided by plugin "extras": {}, } @@ -103,6 +106,8 @@ class Settings(TypedDict, total=False): MINOR = "MINOR" PATCH = "PATCH" +CHANGELOG_FORMAT = "markdown" + bump_pattern = r"^((BREAKING[\-\ ]CHANGE|\w+)(\(.+\))?!?):" bump_map = OrderedDict( ( @@ -128,4 +133,3 @@ class Settings(TypedDict, total=False): bump_message = "bump: version $current_version → $new_version" commit_parser = r"^((?P<change_type>feat|fix|refactor|perf|BREAKING CHANGE)(?:\((?P<scope>[^()\r\n]*)\)|\()?(?P<breaking>!)?|\w+!):\s(?P<message>.*)?" # noqa -version_parser = r"(?P<version>([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?(\w+)?)" diff --git a/commitizen/exceptions.py b/commitizen/exceptions.py index 467582ee6c..31b867b8f9 100644 --- a/commitizen/exceptions.py +++ b/commitizen/exceptions.py @@ -33,6 +33,7 @@ class ExitCode(enum.IntEnum): RUN_HOOK_FAILED = 26 VERSION_PROVIDER_UNKNOWN = 27 VERSION_SCHEME_UNKNOWN = 28 + CHANGELOG_FORMAT_UNKNOWN = 29 class CommitizenException(Exception): @@ -183,3 +184,8 @@ class VersionProviderUnknown(CommitizenException): class VersionSchemeUnknown(CommitizenException): exit_code = ExitCode.VERSION_SCHEME_UNKNOWN + + +class ChangelogFormatUnknown(CommitizenException): + exit_code = ExitCode.CHANGELOG_FORMAT_UNKNOWN + message = "Unknown changelog format identifier" diff --git a/commitizen/templates/CHANGELOG.adoc.j2 b/commitizen/templates/CHANGELOG.adoc.j2 new file mode 100644 index 0000000000..fe16c5de3d --- /dev/null +++ b/commitizen/templates/CHANGELOG.adoc.j2 @@ -0,0 +1,19 @@ +{% for entry in tree %} + +== {{ entry.version }}{% if entry.date %} ({{ entry.date }}){% endif %} + +{% for change_key, changes in entry.changes.items() %} + +{% if change_key %} +=== {{ change_key }} +{% endif %} + +{% for change in changes %} +{% if change.scope %} +* *{{ change.scope }}*: {{ change.message }} +{% elif change.message %} +* {{ change.message }} +{% endif %} +{% endfor %} +{% endfor %} +{% endfor %} diff --git a/commitizen/templates/CHANGELOG.rst.j2 b/commitizen/templates/CHANGELOG.rst.j2 new file mode 100644 index 0000000000..4287108b55 --- /dev/null +++ b/commitizen/templates/CHANGELOG.rst.j2 @@ -0,0 +1,23 @@ +{% for entry in tree %} + +{% set entry_title -%} +{{ entry.version }}{% if entry.date %} ({{ entry.date }}){% endif -%} +{%- endset %} +{{ entry_title }} +{{ "=" * entry_title|length }} +{% for change_key, changes in entry.changes.items() %} + +{% if change_key -%} +{{ change_key }} +{{ "-" * change_key|length }} +{% endif %} + +{% for change in changes %} +{% if change.scope %} +- **{{ change.scope }}**: {{ change.message }} +{% elif change.message %} +- {{ change.message }} +{% endif %} +{% endfor %} +{% endfor %} +{% endfor %} diff --git a/commitizen/templates/CHANGELOG.textile.j2 b/commitizen/templates/CHANGELOG.textile.j2 new file mode 100644 index 0000000000..db55f4caad --- /dev/null +++ b/commitizen/templates/CHANGELOG.textile.j2 @@ -0,0 +1,19 @@ +{% for entry in tree %} + +h2. {{ entry.version }}{% if entry.date %} ({{ entry.date }}){% endif %} + +{% for change_key, changes in entry.changes.items() %} + +{% if change_key %} +h3. {{ change_key }} +{% endif %} + +{% for change in changes %} +{% if change.scope %} +- *{{ change.scope }}*: {{ change.message }} +{% elif change.message %} +- {{ change.message }} +{% endif %} +{% endfor %} +{% endfor %} +{% endfor %} diff --git a/docs/config.md b/docs/config.md index 2ae2b5cc38..391c20f0fc 100644 --- a/docs/config.md +++ b/docs/config.md @@ -104,6 +104,14 @@ Default: `CHANGELOG.md` Filename of exported changelog +### `changelog_format` + +Type: `str` + +Default: None + +Format used to parse and generate the changelog, If not specified, guessed from [`changelog_file`](#changelog_file). + ### `changelog_incremental` Type: `bool` diff --git a/docs/exit_codes.md b/docs/exit_codes.md index c7b510ea3a..af9cb83627 100644 --- a/docs/exit_codes.md +++ b/docs/exit_codes.md @@ -33,4 +33,7 @@ These exit codes can be found in `commitizen/exceptions.py::ExitCode`. | GitCommandError | 23 | Unexpected failure while calling a git command | | InvalidManualVersion | 24 | Manually provided version is invalid | | InitFailedError | 25 | Failed to initialize pre-commit | -| VersionProviderUnknown | 26 | `version_provider` setting is set to an unknown version provider identifier | +| RunHookError | 26 | An error occurred during a hook execution | +| VersionProviderUnknown | 27 | `version_provider` setting is set to an unknown version provider identifier | +| VersionSchemeUnknown | 28 | `version_scheme` setting is set to an unknown version scheme identifier | +| ChangelogFormatUnknown | 29 | `changelog_format` setting is set to an unknown version scheme identifier or could not be guessed | diff --git a/pyproject.toml b/pyproject.toml index 9e37e6b4ed..48133f1e11 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -82,6 +82,12 @@ cz_conventional_commits = "commitizen.cz.conventional_commits:ConventionalCommit cz_jira = "commitizen.cz.jira:JiraSmartCz" cz_customize = "commitizen.cz.customize:CustomizeCommitsCz" +[tool.poetry.plugins."commitizen.changelog_format"] +markdown = "commitizen.changelog_formats.markdown:Markdown" +asciidoc = "commitizen.changelog_formats.asciidoc:AsciiDoc" +textile = "commitizen.changelog_formats.textile:Textile" +restructuredtext = "commitizen.changelog_formats.restructuredtext:RestructuredText" + [tool.poetry.plugins."commitizen.provider"] cargo = "commitizen.providers:CargoProvider" commitizen = "commitizen.providers:CommitizenProvider" diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index a97faee2b0..0ae7d1e509 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -12,7 +12,6 @@ import commitizen.commands.bump as bump from commitizen import cli, cmd, git, hooks -from commitizen.changelog import DEFAULT_TEMPLATE from commitizen.cz.base import BaseCommitizen from commitizen.exceptions import ( BumpTagFailedError, @@ -29,6 +28,7 @@ NotAllowed, NoVersionSpecifiedError, ) +from commitizen.changelog_formats import ChangelogFormat from tests.utils import create_file_and_commit, create_tag @@ -1106,7 +1106,7 @@ def test_bump_command_version_scheme_priority_over_version_type(mocker: MockFixt @pytest.mark.parametrize( - "arg,cfg,expected", + "arg, cfg, expected", ( pytest.param("", "", "default", id="default"), pytest.param("", "changelog.cfg", "from config", id="from-config"), @@ -1118,7 +1118,7 @@ def test_bump_command_version_scheme_priority_over_version_type(mocker: MockFixt def test_bump_template_option_precedance( mocker: MockFixture, tmp_commitizen_project: Path, - mock_plugin: BaseCommitizen, + any_changelog_format: ChangelogFormat, arg: str, cfg: str, expected: str, @@ -1126,8 +1126,8 @@ def test_bump_template_option_precedance( project_root = Path(tmp_commitizen_project) cfg_template = project_root / "changelog.cfg" cmd_template = project_root / "changelog.cmd" - default_template = project_root / mock_plugin.template - changelog = project_root / "CHANGELOG.md" + default_template = project_root / any_changelog_format.template + changelog = project_root / any_changelog_format.default_changelog_file cfg_template.write_text("from config") cmd_template.write_text("from cmd") @@ -1160,10 +1160,11 @@ def test_bump_template_option_precedance( def test_bump_template_extras_precedance( mocker: MockFixture, tmp_commitizen_project: Path, + any_changelog_format: ChangelogFormat, mock_plugin: BaseCommitizen, ): project_root = Path(tmp_commitizen_project) - changelog_tpl = project_root / DEFAULT_TEMPLATE + changelog_tpl = project_root / any_changelog_format.template changelog_tpl.write_text("{{first}} - {{second}} - {{third}}") mock_plugin.template_extras = dict( @@ -1197,16 +1198,17 @@ def test_bump_template_extras_precedance( mocker.patch.object(sys, "argv", testargs) cli.main() - changelog = project_root / "CHANGELOG.md" + changelog = project_root / any_changelog_format.default_changelog_file assert changelog.read_text() == "from-command - from-config - from-plugin" def test_bump_template_extra_quotes( mocker: MockFixture, tmp_commitizen_project: Path, + any_changelog_format: ChangelogFormat, ): project_root = Path(tmp_commitizen_project) - changelog_tpl = project_root / DEFAULT_TEMPLATE + changelog_tpl = project_root / any_changelog_format.template changelog_tpl.write_text("{{first}} - {{second}} - {{third}}") create_file_and_commit("feat: new file") @@ -1222,9 +1224,10 @@ def test_bump_template_extra_quotes( "second='single quotes'", "-e", 'third="double quotes"', + "0.1.1", ] mocker.patch.object(sys, "argv", testargs) cli.main() - changelog = project_root / "CHANGELOG.md" + changelog = project_root / any_changelog_format.default_changelog_file assert changelog.read_text() == "no-quote - single quotes - double quotes" diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index f474a1b275..a0183e1cd9 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -11,16 +11,17 @@ from commitizen import __file__ as commitizen_init from commitizen import cli, git -from commitizen.changelog import DEFAULT_TEMPLATE from commitizen.commands.changelog import Changelog from commitizen.cz.base import BaseCommitizen from commitizen.exceptions import ( DryRunExit, + InvalidCommandArgumentError, NoCommitsFoundError, NoRevisionError, NotAGitProjectError, NotAllowed, ) +from commitizen.changelog_formats import ChangelogFormat from tests.utils import ( create_branch, create_file_and_commit, @@ -73,34 +74,60 @@ def test_changelog_with_different_cz(mocker: MockFixture, capsys, file_regressio @pytest.mark.usefixtures("tmp_commitizen_project") def test_changelog_from_start( - mocker: MockFixture, capsys, changelog_path, file_regression + mocker: MockFixture, capsys, changelog_format: ChangelogFormat, file_regression ): create_file_and_commit("feat: new file") create_file_and_commit("refactor: is in changelog") create_file_and_commit("Merge into master") + changelog_file = f"CHANGELOG.{changelog_format.extension}" + template = f"CHANGELOG.{changelog_format.extension}.j2" - testargs = ["cz", "changelog"] + testargs = [ + "cz", + "changelog", + "--file-name", + changelog_file, + "--template", + template, + ] mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, encoding="utf-8") as f: + with open(changelog_file, encoding="utf-8") as f: out = f.read() - file_regression.check(out, extension=".md") + file_regression.check(out, extension=changelog_format.ext) @pytest.mark.usefixtures("tmp_commitizen_project") def test_changelog_replacing_unreleased_using_incremental( - mocker: MockFixture, capsys, changelog_path, file_regression + mocker: MockFixture, capsys, changelog_format: ChangelogFormat, file_regression ): create_file_and_commit("feat: add new output") create_file_and_commit("fix: output glitch") create_file_and_commit("Merge into master") + changelog_file = f"CHANGELOG.{changelog_format.extension}" + template = f"CHANGELOG.{changelog_format.extension}.j2" - testargs = ["cz", "changelog"] + testargs = [ + "cz", + "changelog", + "--file-name", + changelog_file, + "--template", + template, + ] mocker.patch.object(sys, "argv", testargs) cli.main() - testargs = ["cz", "bump", "--yes"] + testargs = [ + "cz", + "bump", + "--yes", + "--file-name", + changelog_file, + "--template", + template, + ] mocker.patch.object(sys, "argv", testargs) cli.main() @@ -108,16 +135,24 @@ def test_changelog_replacing_unreleased_using_incremental( create_file_and_commit("feat: add more stuff") create_file_and_commit("Merge into master") - testargs = ["cz", "changelog", "--incremental"] + testargs = [ + "cz", + "changelog", + "--incremental", + "--file-name", + changelog_file, + "--template", + template, + ] mocker.patch.object(sys, "argv", testargs) cli.main() - with open(changelog_path, encoding="utf-8") as f: + with open(changelog_file, encoding="utf-8") as f: out = f.read().replace( datetime.strftime(datetime.now(), "%Y-%m-%d"), "2022-08-14" ) - file_regression.check(out, extension=".md") + file_regression.check(out, extension=changelog_format.ext) @pytest.mark.usefixtures("tmp_commitizen_project") @@ -1380,7 +1415,7 @@ def test_changelog_from_current_version_tag_with_nonversion_tag( def test_changelog_template_option_precedance( mocker: MockFixture, tmp_commitizen_project: Path, - mock_plugin: BaseCommitizen, + any_changelog_format: ChangelogFormat, arg: str, cfg: str, expected: str, @@ -1388,8 +1423,8 @@ def test_changelog_template_option_precedance( project_root = Path(tmp_commitizen_project) cfg_template = project_root / "changelog.cfg" cmd_template = project_root / "changelog.cmd" - default_template = project_root / mock_plugin.template - changelog = project_root / "CHANGELOG.md" + default_template = project_root / any_changelog_format.template + changelog = project_root / any_changelog_format.default_changelog_file cfg_template.write_text("from config") cmd_template.write_text("from cmd") @@ -1423,9 +1458,10 @@ def test_changelog_template_extras_precedance( mocker: MockFixture, tmp_commitizen_project: Path, mock_plugin: BaseCommitizen, + any_changelog_format: ChangelogFormat, ): project_root = Path(tmp_commitizen_project) - changelog_tpl = project_root / mock_plugin.template + changelog_tpl = project_root / any_changelog_format.template changelog_tpl.write_text("{{first}} - {{second}} - {{third}}") mock_plugin.template_extras = dict( @@ -1451,16 +1487,17 @@ def test_changelog_template_extras_precedance( mocker.patch.object(sys, "argv", testargs) cli.main() - changelog = project_root / "CHANGELOG.md" + changelog = project_root / any_changelog_format.default_changelog_file assert changelog.read_text() == "from-command - from-config - from-plugin" def test_changelog_template_extra_quotes( mocker: MockFixture, tmp_commitizen_project: Path, + any_changelog_format: ChangelogFormat, ): project_root = Path(tmp_commitizen_project) - changelog_tpl = project_root / DEFAULT_TEMPLATE + changelog_tpl = project_root / any_changelog_format.template changelog_tpl.write_text("{{first}} - {{second}} - {{third}}") create_file_and_commit("feat: new file") @@ -1478,17 +1515,66 @@ def test_changelog_template_extra_quotes( mocker.patch.object(sys, "argv", testargs) cli.main() - changelog = project_root / "CHANGELOG.md" + changelog = project_root / any_changelog_format.default_changelog_file assert changelog.read_text() == "no-quote - single quotes - double quotes" +@pytest.mark.parametrize( + "extra, expected", + ( + pytest.param("key=value=", "value=", id="2-equals"), + pytest.param("key==value", "=value", id="2-consecutives-equals"), + pytest.param("key==value==", "=value==", id="multiple-equals"), + ), +) +def test_changelog_template_extra_weird_but_valid( + mocker: MockFixture, + tmp_commitizen_project: Path, + any_changelog_format: ChangelogFormat, + extra: str, + expected, +): + project_root = Path(tmp_commitizen_project) + changelog_tpl = project_root / any_changelog_format.template + changelog_tpl.write_text("{{key}}") + + create_file_and_commit("feat: new file") + + testargs = ["cz", "changelog", "-e", extra] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + changelog = project_root / any_changelog_format.default_changelog_file + assert changelog.read_text() == expected + + +@pytest.mark.parametrize("extra", ("no-equal", "", "=no-key")) +def test_changelog_template_extra_bad_format( + mocker: MockFixture, + tmp_commitizen_project: Path, + any_changelog_format: ChangelogFormat, + extra: str, +): + project_root = Path(tmp_commitizen_project) + changelog_tpl = project_root / any_changelog_format.template + changelog_tpl.write_text("") + + create_file_and_commit("feat: new file") + + testargs = ["cz", "changelog", "-e", extra] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(InvalidCommandArgumentError): + cli.main() + + def test_export_changelog_template_from_default( mocker: MockFixture, tmp_commitizen_project: Path, + any_changelog_format: ChangelogFormat, ): project_root = Path(tmp_commitizen_project) target = project_root / "changelog.jinja" - src = Path(commitizen_init).parent / "templates" / DEFAULT_TEMPLATE + src = Path(commitizen_init).parent / "templates" / any_changelog_format.template args = ["cz", "changelog", "--export-template", str(target)] @@ -1503,16 +1589,15 @@ def test_export_changelog_template_from_plugin( mocker: MockFixture, tmp_commitizen_project: Path, mock_plugin: BaseCommitizen, + changelog_format: ChangelogFormat, tmp_path: Path, ): project_root = Path(tmp_commitizen_project) target = project_root / "changelog.jinja" - filename = "template.jinja" - src = tmp_path / filename + src = tmp_path / changelog_format.template tpl = "I am a custom template" src.write_text(tpl) mock_plugin.template_loader = FileSystemLoader(tmp_path) - mock_plugin.template = filename args = ["cz", "changelog", "--export-template", str(target)] diff --git a/tests/commands/test_changelog_command/test_changelog_from_start_asciidoc_.adoc b/tests/commands/test_changelog_command/test_changelog_from_start_asciidoc_.adoc new file mode 100644 index 0000000000..842e120ba8 --- /dev/null +++ b/tests/commands/test_changelog_command/test_changelog_from_start_asciidoc_.adoc @@ -0,0 +1,9 @@ +== Unreleased + +=== Feat + +* new file + +=== Refactor + +* is in changelog diff --git a/tests/commands/test_changelog_command/test_changelog_from_start.md b/tests/commands/test_changelog_command/test_changelog_from_start_markdown_.md similarity index 100% rename from tests/commands/test_changelog_command/test_changelog_from_start.md rename to tests/commands/test_changelog_command/test_changelog_from_start_markdown_.md diff --git a/tests/commands/test_changelog_command/test_changelog_from_start_restructuredtext_.rst b/tests/commands/test_changelog_command/test_changelog_from_start_restructuredtext_.rst new file mode 100644 index 0000000000..555f5bc64d --- /dev/null +++ b/tests/commands/test_changelog_command/test_changelog_from_start_restructuredtext_.rst @@ -0,0 +1,12 @@ +Unreleased +========== + +Feat +---- + +- new file + +Refactor +-------- + +- is in changelog diff --git a/tests/commands/test_changelog_command/test_changelog_from_start_textile_.textile b/tests/commands/test_changelog_command/test_changelog_from_start_textile_.textile new file mode 100644 index 0000000000..e71fb99cf5 --- /dev/null +++ b/tests/commands/test_changelog_command/test_changelog_from_start_textile_.textile @@ -0,0 +1,9 @@ +h2. Unreleased + +h3. Feat + +- new file + +h3. Refactor + +- is in changelog diff --git a/tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_asciidoc_.adoc b/tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_asciidoc_.adoc new file mode 100644 index 0000000000..2e789bcf2f --- /dev/null +++ b/tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_asciidoc_.adoc @@ -0,0 +1,19 @@ +== Unreleased + +=== Feat + +* add more stuff + +=== Fix + +* mama gotta work + +== 0.2.0 (2022-08-14) + +=== Feat + +* add new output + +=== Fix + +* output glitch diff --git a/tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental.md b/tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_markdown_.md similarity index 100% rename from tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental.md rename to tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_markdown_.md diff --git a/tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_restructuredtext_.rst b/tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_restructuredtext_.rst new file mode 100644 index 0000000000..ca0077a2d8 --- /dev/null +++ b/tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_restructuredtext_.rst @@ -0,0 +1,25 @@ +Unreleased +========== + +Feat +---- + +- add more stuff + +Fix +--- + +- mama gotta work + +0.2.0 (2022-08-14) +================== + +Feat +---- + +- add new output + +Fix +--- + +- output glitch diff --git a/tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_textile_.textile b/tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_textile_.textile new file mode 100644 index 0000000000..07f2ba5ed0 --- /dev/null +++ b/tests/commands/test_changelog_command/test_changelog_replacing_unreleased_using_incremental_textile_.textile @@ -0,0 +1,19 @@ +h2. Unreleased + +h3. Feat + +- add more stuff + +h3. Fix + +- mama gotta work + +h2. 0.2.0 (2022-08-14) + +h3. Feat + +- add new output + +h3. Fix + +- output glitch diff --git a/tests/conftest.py b/tests/conftest.py index 980c4d053e..76d2e53fb7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -13,6 +13,10 @@ from commitizen.config import BaseConfig from commitizen.cz import registry from commitizen.cz.base import BaseCommitizen +from commitizen.changelog_formats import ( + ChangelogFormat, + get_changelog_format, +) from tests.utils import create_file_and_commit SIGNER = "GitHub Action" @@ -225,3 +229,27 @@ def mock_plugin(mocker: MockerFixture, config: BaseConfig) -> BaseCommitizen: mock = MockPlugin(config) mocker.patch("commitizen.factory.commiter_factory", return_value=mock) return mock + + +SUPPORTED_FORMATS = ("markdown", "textile", "asciidoc", "restructuredtext") + + +@pytest.fixture(params=SUPPORTED_FORMATS) +def changelog_format( + config: BaseConfig, request: pytest.FixtureRequest +) -> ChangelogFormat: + """For tests relying on formats specifics""" + format: str = request.param + config.settings["changelog_format"] = format + if "tmp_commitizen_project" in request.fixturenames: + tmp_commitizen_project = request.getfixturevalue("tmp_commitizen_project") + pyproject = tmp_commitizen_project / "pyproject.toml" + pyproject.write(f"{pyproject.read()}\n" f'changelog_format = "{format}"\n') + return get_changelog_format(config) + + +@pytest.fixture +def any_changelog_format(config: BaseConfig) -> ChangelogFormat: + """For test not relying on formats specifics, use the default""" + config.settings["changelog_format"] = defaults.CHANGELOG_FORMAT + return get_changelog_format(config) diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 7b2d45683c..8aef10a31f 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -8,6 +8,7 @@ ConventionalCommitsCz, ) from commitizen.exceptions import InvalidConfigurationError +from commitizen.changelog_formats import ChangelogFormat COMMITS_DATA = [ { @@ -1140,52 +1141,61 @@ def test_order_changelog_tree_raises(): assert "Change types contain duplicates types" in str(excinfo) -def test_render_changelog(gitcommits, tags, changelog_content): +def test_render_changelog( + gitcommits, tags, changelog_content, any_changelog_format: ChangelogFormat +): parser = ConventionalCommitsCz.commit_parser - changelog_pattern = ConventionalCommitsCz.bump_pattern + changelog_pattern = ConventionalCommitsCz.changelog_pattern + loader = ConventionalCommitsCz.template_loader + template = any_changelog_format.template tree = changelog.generate_tree_from_commits( gitcommits, tags, parser, changelog_pattern ) - result = changelog.render_changelog(tree) + result = changelog.render_changelog(tree, loader, template) assert result == changelog_content def test_render_changelog_from_default_plugin_values( - gitcommits, tags, changelog_content + gitcommits, tags, changelog_content, any_changelog_format: ChangelogFormat ): parser = ConventionalCommitsCz.commit_parser - changelog_pattern = ConventionalCommitsCz.bump_pattern + changelog_pattern = ConventionalCommitsCz.changelog_pattern loader = ConventionalCommitsCz.template_loader - template = ConventionalCommitsCz.template + template = any_changelog_format.template tree = changelog.generate_tree_from_commits( gitcommits, tags, parser, changelog_pattern ) - result = changelog.render_changelog(tree, loader=loader, template=template) + result = changelog.render_changelog(tree, loader, template) assert result == changelog_content def test_render_changelog_override_loader(gitcommits, tags, tmp_path: Path): loader = FileSystemLoader(tmp_path) + template = "tpl.j2" tpl = "loader overridden" - (tmp_path / changelog.DEFAULT_TEMPLATE).write_text(tpl) + (tmp_path / template).write_text(tpl) parser = ConventionalCommitsCz.commit_parser - changelog_pattern = ConventionalCommitsCz.bump_pattern + changelog_pattern = ConventionalCommitsCz.changelog_pattern tree = changelog.generate_tree_from_commits( gitcommits, tags, parser, changelog_pattern ) - result = changelog.render_changelog(tree, loader=loader) + result = changelog.render_changelog(tree, loader, template) assert result == tpl -def test_render_changelog_override_template_from_cwd(gitcommits, tags, chdir: Path): +def test_render_changelog_override_template_from_cwd( + gitcommits, tags, chdir: Path, any_changelog_format: ChangelogFormat +): tpl = "overridden from cwd" - (chdir / changelog.DEFAULT_TEMPLATE).write_text(tpl) + template = any_changelog_format.template + (chdir / template).write_text(tpl) parser = ConventionalCommitsCz.commit_parser - changelog_pattern = ConventionalCommitsCz.bump_pattern + changelog_pattern = ConventionalCommitsCz.changelog_pattern + loader = ConventionalCommitsCz.template_loader tree = changelog.generate_tree_from_commits( gitcommits, tags, parser, changelog_pattern ) - result = changelog.render_changelog(tree) + result = changelog.render_changelog(tree, loader, template) assert result == tpl @@ -1196,11 +1206,12 @@ def test_render_changelog_override_template_from_cwd_with_custom_name( tpl_name = "tpl.j2" (chdir / tpl_name).write_text(tpl) parser = ConventionalCommitsCz.commit_parser - changelog_pattern = ConventionalCommitsCz.bump_pattern + changelog_pattern = ConventionalCommitsCz.changelog_pattern + loader = ConventionalCommitsCz.template_loader tree = changelog.generate_tree_from_commits( gitcommits, tags, parser, changelog_pattern ) - result = changelog.render_changelog(tree, template=tpl_name) + result = changelog.render_changelog(tree, loader, tpl_name) assert result == tpl @@ -1216,7 +1227,7 @@ def test_render_changelog_override_loader_and_template( tree = changelog.generate_tree_from_commits( gitcommits, tags, parser, changelog_pattern ) - result = changelog.render_changelog(tree, loader=loader, template=tpl_name) + result = changelog.render_changelog(tree, loader, tpl_name) assert result == tpl @@ -1225,57 +1236,67 @@ def test_render_changelog_support_arbitrary_kwargs(gitcommits, tags, tmp_path: P tpl_name = "tpl.j2" (tmp_path / tpl_name).write_text("{{ key }}") parser = ConventionalCommitsCz.commit_parser - changelog_pattern = ConventionalCommitsCz.bump_pattern + changelog_pattern = ConventionalCommitsCz.changelog_pattern tree = changelog.generate_tree_from_commits( gitcommits, tags, parser, changelog_pattern ) - result = changelog.render_changelog( - tree, loader=loader, template=tpl_name, key="value" - ) + result = changelog.render_changelog(tree, loader, tpl_name, key="value") assert result == "value" -def test_render_changelog_unreleased(gitcommits): +def test_render_changelog_unreleased(gitcommits, any_changelog_format: ChangelogFormat): some_commits = gitcommits[:7] parser = ConventionalCommitsCz.commit_parser - changelog_pattern = ConventionalCommitsCz.bump_pattern + changelog_pattern = ConventionalCommitsCz.changelog_pattern + loader = ConventionalCommitsCz.template_loader + template = any_changelog_format.template tree = changelog.generate_tree_from_commits( some_commits, [], parser, changelog_pattern ) - result = changelog.render_changelog(tree) + result = changelog.render_changelog(tree, loader, template) assert "Unreleased" in result -def test_render_changelog_tag_and_unreleased(gitcommits, tags): +def test_render_changelog_tag_and_unreleased( + gitcommits, tags, any_changelog_format: ChangelogFormat +): some_commits = gitcommits[:7] single_tag = [ tag for tag in tags if tag.rev == "56c8a8da84e42b526bcbe130bd194306f7c7e813" ] parser = ConventionalCommitsCz.commit_parser - changelog_pattern = ConventionalCommitsCz.bump_pattern + changelog_pattern = ConventionalCommitsCz.changelog_pattern + loader = ConventionalCommitsCz.template_loader + template = any_changelog_format.template tree = changelog.generate_tree_from_commits( some_commits, single_tag, parser, changelog_pattern ) - result = changelog.render_changelog(tree) + result = changelog.render_changelog(tree, loader, template) assert "Unreleased" in result assert "## v1.1.1" in result -def test_render_changelog_with_change_type(gitcommits, tags): +def test_render_changelog_with_change_type( + gitcommits, tags, any_changelog_format: ChangelogFormat +): new_title = ":some-emoji: feature" change_type_map = {"feat": new_title} parser = ConventionalCommitsCz.commit_parser - changelog_pattern = ConventionalCommitsCz.bump_pattern + changelog_pattern = ConventionalCommitsCz.changelog_pattern + loader = ConventionalCommitsCz.template_loader + template = any_changelog_format.template tree = changelog.generate_tree_from_commits( gitcommits, tags, parser, changelog_pattern, change_type_map=change_type_map ) - result = changelog.render_changelog(tree) + result = changelog.render_changelog(tree, loader, template) assert new_title in result -def test_render_changelog_with_changelog_message_builder_hook(gitcommits, tags): +def test_render_changelog_with_changelog_message_builder_hook( + gitcommits, tags, any_changelog_format: ChangelogFormat +): def changelog_message_builder_hook(message: dict, commit: git.GitCommit) -> dict: message[ "message" @@ -1283,7 +1304,9 @@ def changelog_message_builder_hook(message: dict, commit: git.GitCommit) -> dict return message parser = ConventionalCommitsCz.commit_parser - changelog_pattern = ConventionalCommitsCz.bump_pattern + changelog_pattern = ConventionalCommitsCz.changelog_pattern + loader = ConventionalCommitsCz.template_loader + template = any_changelog_format.template tree = changelog.generate_tree_from_commits( gitcommits, tags, @@ -1291,7 +1314,7 @@ def changelog_message_builder_hook(message: dict, commit: git.GitCommit) -> dict changelog_pattern, changelog_message_builder_hook=changelog_message_builder_hook, ) - result = changelog.render_changelog(tree) + result = changelog.render_changelog(tree, loader, template) assert "[link](github.com/232323232) Commitizen author@cz.dev" in result diff --git a/tests/test_changelog_format_asciidoc.py b/tests/test_changelog_format_asciidoc.py new file mode 100644 index 0000000000..df9c28f9d7 --- /dev/null +++ b/tests/test_changelog_format_asciidoc.py @@ -0,0 +1,138 @@ +from __future__ import annotations + +from pathlib import Path + +import pytest + +from commitizen.changelog import Metadata +from commitizen.config.base_config import BaseConfig +from commitizen.changelog_formats.asciidoc import AsciiDoc + + +CHANGELOG_A = """ += Changelog + +All notable changes to this project will be documented in this file. + +The format is based on https://keepachangelog.com/en/1.0.0/[Keep a Changelog], +and this project adheres to https://semver.org/spec/v2.0.0.html[Semantic Versioning]. + +== [Unreleased] +* Start using "changelog" over "change log" since it's the common usage. + +== [1.0.0] - 2017-06-20 +=== Added +* New visual identity by https://github.com/tylerfortune8[@tylerfortune8]. +* Version navigation. +""".strip() + +EXPECTED_A = Metadata( + latest_version="1.0.0", + latest_version_position=10, + unreleased_end=10, + unreleased_start=7, +) + + +CHANGELOG_B = """ +== [Unreleased] +* Start using "changelog" over "change log" since it's the common usage. + +== 1.2.0 +""".strip() + +EXPECTED_B = Metadata( + latest_version="1.2.0", + latest_version_position=3, + unreleased_end=3, + unreleased_start=0, +) + + +CHANGELOG_C = """ += Unreleased + +== v1.0.0 +""" +EXPECTED_C = Metadata( + latest_version="1.0.0", + latest_version_position=3, + unreleased_end=3, + unreleased_start=1, +) + +CHANGELOG_D = """ +== Unreleased +* Start using "changelog" over "change log" since it's the common usage. +""" + +EXPECTED_D = Metadata( + latest_version=None, + latest_version_position=None, + unreleased_end=2, + unreleased_start=1, +) + + +@pytest.fixture +def format(config: BaseConfig) -> AsciiDoc: + return AsciiDoc(config) + + +VERSIONS_EXAMPLES = [ + ("== [1.0.0] - 2017-06-20", "1.0.0"), + ( + "= https://github.com/angular/angular/compare/10.0.0-next.2...10.0.0-next.3[10.0.0-next.3] (2020-04-22)", + "10.0.0-next.3", + ), + ("=== 0.19.1 (Jan 7, 2020)", "0.19.1"), + ("== 1.0.0", "1.0.0"), + ("== v1.0.0", "1.0.0"), + ("== v1.0.0 - (2012-24-32)", "1.0.0"), + ("= version 2020.03.24", "2020.03.24"), + ("== [Unreleased]", None), + ("All notable changes to this project will be documented in this file.", None), + ("= Changelog", None), + ("=== Bug Fixes", None), +] + + +@pytest.mark.parametrize("line_from_changelog,output_version", VERSIONS_EXAMPLES) +def test_changelog_detect_version( + line_from_changelog: str, output_version: str, format: AsciiDoc +): + version = format.parse_version_from_title(line_from_changelog) + assert version == output_version + + +TITLES_EXAMPLES = [ + ("== [1.0.0] - 2017-06-20", 2), + ("== [Unreleased]", 2), + ("= Unreleased", 1), +] + + +@pytest.mark.parametrize("line_from_changelog,output_title", TITLES_EXAMPLES) +def test_parse_title_type_of_line( + line_from_changelog: str, output_title: str, format: AsciiDoc +): + title = format.parse_title_level(line_from_changelog) + assert title == output_title + + +@pytest.mark.parametrize( + "content, expected", + ( + pytest.param(CHANGELOG_A, EXPECTED_A, id="A"), + pytest.param(CHANGELOG_B, EXPECTED_B, id="B"), + pytest.param(CHANGELOG_C, EXPECTED_C, id="C"), + pytest.param(CHANGELOG_D, EXPECTED_D, id="D"), + ), +) +def test_get_matadata( + tmp_path: Path, format: AsciiDoc, content: str, expected: Metadata +): + changelog = tmp_path / format.default_changelog_file + changelog.write_text(content) + + assert format.get_metadata(str(changelog)) == expected diff --git a/tests/test_changelog_format_markdown.py b/tests/test_changelog_format_markdown.py new file mode 100644 index 0000000000..2e1ee69977 --- /dev/null +++ b/tests/test_changelog_format_markdown.py @@ -0,0 +1,138 @@ +from __future__ import annotations + +from pathlib import Path + +import pytest + +from commitizen.changelog import Metadata +from commitizen.config.base_config import BaseConfig +from commitizen.changelog_formats.markdown import Markdown + + +CHANGELOG_A = """ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] +- Start using "changelog" over "change log" since it's the common usage. + +## [1.0.0] - 2017-06-20 +### Added +- New visual identity by [@tylerfortune8](https://github.com/tylerfortune8). +- Version navigation. +""".strip() + +EXPECTED_A = Metadata( + latest_version="1.0.0", + latest_version_position=10, + unreleased_end=10, + unreleased_start=7, +) + + +CHANGELOG_B = """ +## [Unreleased] +- Start using "changelog" over "change log" since it's the common usage. + +## 1.2.0 +""".strip() + +EXPECTED_B = Metadata( + latest_version="1.2.0", + latest_version_position=3, + unreleased_end=3, + unreleased_start=0, +) + + +CHANGELOG_C = """ +# Unreleased + +## v1.0.0 +""" +EXPECTED_C = Metadata( + latest_version="1.0.0", + latest_version_position=3, + unreleased_end=3, + unreleased_start=1, +) + +CHANGELOG_D = """ +## Unreleased +- Start using "changelog" over "change log" since it's the common usage. +""" + +EXPECTED_D = Metadata( + latest_version=None, + latest_version_position=None, + unreleased_end=2, + unreleased_start=1, +) + + +@pytest.fixture +def format(config: BaseConfig) -> Markdown: + return Markdown(config) + + +VERSIONS_EXAMPLES = [ + ("## [1.0.0] - 2017-06-20", "1.0.0"), + ( + "# [10.0.0-next.3](https://github.com/angular/angular/compare/10.0.0-next.2...10.0.0-next.3) (2020-04-22)", + "10.0.0-next.3", + ), + ("### 0.19.1 (Jan 7, 2020)", "0.19.1"), + ("## 1.0.0", "1.0.0"), + ("## v1.0.0", "1.0.0"), + ("## v1.0.0 - (2012-24-32)", "1.0.0"), + ("# version 2020.03.24", "2020.03.24"), + ("## [Unreleased]", None), + ("All notable changes to this project will be documented in this file.", None), + ("# Changelog", None), + ("### Bug Fixes", None), +] + + +@pytest.mark.parametrize("line_from_changelog,output_version", VERSIONS_EXAMPLES) +def test_changelog_detect_version( + line_from_changelog: str, output_version: str, format: Markdown +): + version = format.parse_version_from_title(line_from_changelog) + assert version == output_version + + +TITLES_EXAMPLES = [ + ("## [1.0.0] - 2017-06-20", 2), + ("## [Unreleased]", 2), + ("# Unreleased", 1), +] + + +@pytest.mark.parametrize("line_from_changelog,output_title", TITLES_EXAMPLES) +def test_parse_title_type_of_line( + line_from_changelog: str, output_title: str, format: Markdown +): + title = format.parse_title_level(line_from_changelog) + assert title == output_title + + +@pytest.mark.parametrize( + "content, expected", + ( + pytest.param(CHANGELOG_A, EXPECTED_A, id="A"), + pytest.param(CHANGELOG_B, EXPECTED_B, id="B"), + pytest.param(CHANGELOG_C, EXPECTED_C, id="C"), + pytest.param(CHANGELOG_D, EXPECTED_D, id="D"), + ), +) +def test_get_matadata( + tmp_path: Path, format: Markdown, content: str, expected: Metadata +): + changelog = tmp_path / format.default_changelog_file + changelog.write_text(content) + + assert format.get_metadata(str(changelog)) == expected diff --git a/tests/test_changelog_format_restructuredtext.py b/tests/test_changelog_format_restructuredtext.py new file mode 100644 index 0000000000..7c5969f51d --- /dev/null +++ b/tests/test_changelog_format_restructuredtext.py @@ -0,0 +1,310 @@ +from __future__ import annotations + +from pathlib import Path +from textwrap import dedent +from typing import TYPE_CHECKING + +import pytest + +from commitizen.changelog import Metadata +from commitizen.config.base_config import BaseConfig +from commitizen.changelog_formats.restructuredtext import RestructuredText + +if TYPE_CHECKING: + from _pytest.mark.structures import ParameterSet + + +CASES: list[ParameterSet] = [] + + +def case( + id: str, + content: str, + latest_version: str | None = None, + latest_version_position: int | None = None, + unreleased_start: int | None = None, + unreleased_end: int | None = None, +): + CASES.append( + pytest.param( + dedent(content).strip(), + Metadata( + latest_version=latest_version, + latest_version_position=latest_version_position, + unreleased_start=unreleased_start, + unreleased_end=unreleased_end, + ), + id=id, + ) + ) + + +case( + "underlined title with intro and unreleased section", + """ + Changelog + ######### + + All notable changes to this project will be documented in this file. + + The format is based on `Keep a Changelog <https://keepachangelog.com/en/1.0.0/>`, + and this project adheres to `Semantic Versioning <https://semver.org/spec/v2.0.0.html>`. + + Unreleased + ========== + * Start using "changelog" over "change log" since it's the common usage. + + 1.0.0 - 2017-06-20 + ================== + Added + ----- + * New visual identity by `@tylerfortune8 <https://github.com/tylerfortune8>`. + * Version navigation. + """, + latest_version="1.0.0", + latest_version_position=12, + unreleased_start=8, + unreleased_end=12, +) + +case( + "unreleased section without preamble", + """ + Unreleased + ========== + * Start using "changelog" over "change log" since it's the common usage. + + 1.2.0 + ===== + """, + latest_version="1.2.0", + latest_version_position=4, + unreleased_start=0, + unreleased_end=4, +) + +case( + "basic underlined titles with v-prefixed version", + """ + Unreleased + ========== + + v1.0.0 + ====== + """, + latest_version="1.0.0", + latest_version_position=3, + unreleased_start=0, + unreleased_end=3, +) + +case( + "intermediate section in unreleased", + """ + Unreleased + ========== + + intermediate + ------------ + + 1.0.0 + ===== + """, + latest_version="1.0.0", + latest_version_position=6, + unreleased_start=0, + unreleased_end=6, +) + +case( + "weird section with different level than versions", + """ + Unreleased + ########## + + 1.0.0 + ===== + """, + latest_version="1.0.0", + latest_version_position=3, + unreleased_start=0, + unreleased_end=3, +) + +case( + "overlined title without release and intro", + """ + ========== + Unreleased + ========== + * Start using "changelog" over "change log" since it's the common usage. + """, + unreleased_start=0, + unreleased_end=4, +) + +case( + "underlined title with date", + """ + 1.0.0 - 2017-06-20 + ================== + """, + latest_version="1.0.0", + latest_version_position=0, +) + + +UNDERLINED_TITLES = ( + """ + title + ===== + """, + """ + title + ====== + """, + """ + title + ##### + """, + """ + title + ..... + """, + """ + title + !!!!! + """, +) + +NOT_UNDERLINED_TITLES = ( + """ + title + =.=.= + """, + """ + title + ==== + """, + """ + title + aaaaa + """, + """ + title + + """, +) + + +OVERLINED_TITLES = ( + """ + ===== + title + ===== + """, + """ + ====== + title + ====== + """, + """ + ##### + title + ##### + """, + """ + ..... + title + ..... + """, +) + +NOT_OVERLINED_TITLES = ( + """ + ==== + title + ===== + """, + """ + ===== + title + ==== + """, + """ + ==== + title + ==== + """, + """ + ===== + title + ##### + """, + """ + ##### + title + ===== + """, + """ + =.=.= + title + ===== + """, + """ + ===== + title + =.=.= + """, + """ + + title + ===== + """, + """ + ===== + title + + """, + """ + aaaaa + title + aaaaa + """, +) + + +@pytest.fixture +def format(config: BaseConfig) -> RestructuredText: + return RestructuredText(config) + + +@pytest.mark.parametrize("content, expected", CASES) +def test_get_matadata( + tmp_path: Path, format: RestructuredText, content: str, expected: Metadata +): + changelog = tmp_path / format.default_changelog_file + changelog.write_text(content) + + assert format.get_metadata(str(changelog)) == expected + + +@pytest.mark.parametrize( + "text, expected", + [(text, True) for text in UNDERLINED_TITLES] + + [(text, False) for text in NOT_UNDERLINED_TITLES], +) +def test_is_underlined_title(format: RestructuredText, text: str, expected: bool): + _, first, second = dedent(text).splitlines() + assert format.is_underlined_title(first, second) is expected + + +@pytest.mark.parametrize( + "text, expected", + [(text, True) for text in OVERLINED_TITLES] + + [(text, False) for text in NOT_OVERLINED_TITLES], +) +def test_is_overlined_title(format: RestructuredText, text: str, expected: bool): + _, first, second, third = dedent(text).splitlines() + + assert format.is_overlined_title(first, second, third) is expected diff --git a/tests/test_changelog_format_textile.py b/tests/test_changelog_format_textile.py new file mode 100644 index 0000000000..5176243ba0 --- /dev/null +++ b/tests/test_changelog_format_textile.py @@ -0,0 +1,138 @@ +from __future__ import annotations + +from pathlib import Path + +import pytest + +from commitizen.changelog import Metadata +from commitizen.config.base_config import BaseConfig +from commitizen.changelog_formats.textile import Textile + + +CHANGELOG_A = """ +h1. Changelog + +All notable changes to this project will be documented in this file. + +The format is based on "Keep a Changelog":https://keepachangelog.com/en/1.0.0/, +and this project adheres to "Semantic Versioning":https://semver.org/spec/v2.0.0.html. + +h2. [Unreleased] +- Start using "changelog" over "change log" since it's the common usage. + +h2. [1.0.0] - 2017-06-20 +h3. Added +* New visual identity by [@tylerfortune8](https://github.com/tylerfortune8). +* Version navigation. +""".strip() + +EXPECTED_A = Metadata( + latest_version="1.0.0", + latest_version_position=10, + unreleased_end=10, + unreleased_start=7, +) + + +CHANGELOG_B = """ +h2. [Unreleased] +* Start using "changelog" over "change log" since it's the common usage. + +h2. 1.2.0 +""".strip() + +EXPECTED_B = Metadata( + latest_version="1.2.0", + latest_version_position=3, + unreleased_end=3, + unreleased_start=0, +) + + +CHANGELOG_C = """ +h1. Unreleased + +h2. v1.0.0 +""" +EXPECTED_C = Metadata( + latest_version="1.0.0", + latest_version_position=3, + unreleased_end=3, + unreleased_start=1, +) + +CHANGELOG_D = """ +h2. Unreleased +* Start using "changelog" over "change log" since it's the common usage. +""" + +EXPECTED_D = Metadata( + latest_version=None, + latest_version_position=None, + unreleased_end=2, + unreleased_start=1, +) + + +@pytest.fixture +def format(config: BaseConfig) -> Textile: + return Textile(config) + + +VERSIONS_EXAMPLES = [ + ("h2. [1.0.0] - 2017-06-20", "1.0.0"), + ( + 'h1. "10.0.0-next.3":https://github.com/angular/angular/compare/10.0.0-next.2...10.0.0-next.3 (2020-04-22)', + "10.0.0-next.3", + ), + ("h3. 0.19.1 (Jan 7, 2020)", "0.19.1"), + ("h2. 1.0.0", "1.0.0"), + ("h2. v1.0.0", "1.0.0"), + ("h2. v1.0.0 - (2012-24-32)", "1.0.0"), + ("h1. version 2020.03.24", "2020.03.24"), + ("h2. [Unreleased]", None), + ("All notable changes to this project will be documented in this file.", None), + ("h1. Changelog", None), + ("h3. Bug Fixes", None), +] + + +@pytest.mark.parametrize("line_from_changelog,output_version", VERSIONS_EXAMPLES) +def test_changelog_detect_version( + line_from_changelog: str, output_version: str, format: Textile +): + version = format.parse_version_from_title(line_from_changelog) + assert version == output_version + + +TITLES_EXAMPLES = [ + ("h2. [1.0.0] - 2017-06-20", 2), + ("h2. [Unreleased]", 2), + ("h1. Unreleased", 1), +] + + +@pytest.mark.parametrize("line_from_changelog,output_title", TITLES_EXAMPLES) +def test_parse_title_type_of_line( + line_from_changelog: str, output_title: str, format: Textile +): + title = format.parse_title_level(line_from_changelog) + assert title == output_title + + +@pytest.mark.parametrize( + "content, expected", + ( + pytest.param(CHANGELOG_A, EXPECTED_A, id="A"), + pytest.param(CHANGELOG_B, EXPECTED_B, id="B"), + pytest.param(CHANGELOG_C, EXPECTED_C, id="C"), + pytest.param(CHANGELOG_D, EXPECTED_D, id="D"), + ), +) +def test_get_matadata( + tmp_path: Path, format: Textile, content: str, expected: Metadata +): + changelog = tmp_path / format.default_changelog_file + changelog.write_text(content) + + assert format.get_metadata(str(changelog)) == expected diff --git a/tests/test_changelog_formats.py b/tests/test_changelog_formats.py new file mode 100644 index 0000000000..7da87f16ca --- /dev/null +++ b/tests/test_changelog_formats.py @@ -0,0 +1,58 @@ +from __future__ import annotations + +import pytest +from commitizen import defaults +from commitizen.config.base_config import BaseConfig +from commitizen.changelog_formats import ( + KNOWN_CHANGELOG_FORMATS, + ChangelogFormat, + get_changelog_format, + guess_changelog_format, +) +from commitizen.exceptions import ChangelogFormatUnknown + + +@pytest.mark.parametrize("format", KNOWN_CHANGELOG_FORMATS.values()) +def test_guess_format(format: type[ChangelogFormat]): + assert guess_changelog_format(f"CHANGELOG.{format.extension}") is format + for ext in format.alternative_extensions: + assert guess_changelog_format(f"CHANGELOG.{ext}") is format + + +@pytest.mark.parametrize("filename", ("CHANGELOG", "NEWS", "file.unknown", None)) +def test_guess_format_unknown(filename: str): + assert guess_changelog_format(filename) is None + + +@pytest.mark.parametrize( + "name, expected", + [ + pytest.param(name, format, id=name) + for name, format in KNOWN_CHANGELOG_FORMATS.items() + ], +) +def test_get_format(config: BaseConfig, name: str, expected: type[ChangelogFormat]): + config.settings["changelog_format"] = name + assert isinstance(get_changelog_format(config), expected) + + +@pytest.mark.parametrize("filename", (None, "")) +def test_get_format_empty_filename(config: BaseConfig, filename: str | None): + config.settings["changelog_format"] = defaults.CHANGELOG_FORMAT + assert isinstance( + get_changelog_format(config, filename), + KNOWN_CHANGELOG_FORMATS[defaults.CHANGELOG_FORMAT], + ) + + +@pytest.mark.parametrize("filename", (None, "")) +def test_get_format_empty_filename_no_setting(config: BaseConfig, filename: str | None): + config.settings["changelog_format"] = None + with pytest.raises(ChangelogFormatUnknown): + get_changelog_format(config, filename) + + +@pytest.mark.parametrize("filename", ("extensionless", "file.unknown")) +def test_get_format_unknown(config: BaseConfig, filename: str | None): + with pytest.raises(ChangelogFormatUnknown): + get_changelog_format(config, filename) diff --git a/tests/test_changelog_meta.py b/tests/test_changelog_meta.py deleted file mode 100644 index 4b3b9caa01..0000000000 --- a/tests/test_changelog_meta.py +++ /dev/null @@ -1,165 +0,0 @@ -import os - -import pytest - -from commitizen import changelog - -CHANGELOG_A = """ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [Unreleased] -- Start using "changelog" over "change log" since it's the common usage. - -## [1.0.0] - 2017-06-20 -### Added -- New visual identity by [@tylerfortune8](https://github.com/tylerfortune8). -- Version navigation. -""".strip() - -CHANGELOG_B = """ -## [Unreleased] -- Start using "changelog" over "change log" since it's the common usage. - -## 1.2.0 -""".strip() - -CHANGELOG_C = """ -# Unreleased - -## v1.0.0 -""" - -CHANGELOG_D = """ -## Unreleased -- Start using "changelog" over "change log" since it's the common usage. -""" - - -@pytest.fixture -def changelog_a_file(): - changelog_path = "tests/CHANGELOG.md" - - with open(changelog_path, "w", encoding="utf-8") as f: - f.write(CHANGELOG_A) - - yield changelog_path - - os.remove(changelog_path) - - -@pytest.fixture -def changelog_b_file(): - changelog_path = "tests/CHANGELOG.md" - - with open(changelog_path, "w", encoding="utf-8") as f: - f.write(CHANGELOG_B) - - yield changelog_path - - os.remove(changelog_path) - - -@pytest.fixture -def changelog_c_file(): - changelog_path = "tests/CHANGELOG.md" - - with open(changelog_path, "w", encoding="utf-8") as f: - f.write(CHANGELOG_C) - - yield changelog_path - - os.remove(changelog_path) - - -@pytest.fixture -def changelog_d_file(): - changelog_path = "tests/CHANGELOG.md" - - with open(changelog_path, "w", encoding="utf-8") as f: - f.write(CHANGELOG_D) - - yield changelog_path - - os.remove(changelog_path) - - -VERSIONS_EXAMPLES = [ - ("## [1.0.0] - 2017-06-20", "1.0.0"), - ( - "# [10.0.0-next.3](https://github.com/angular/angular/compare/10.0.0-next.2...10.0.0-next.3) (2020-04-22)", - "10.0.0-next.3", - ), - ("### 0.19.1 (Jan 7, 2020)", "0.19.1"), - ("## 1.0.0", "1.0.0"), - ("## v1.0.0", "1.0.0"), - ("## v1.0.0 - (2012-24-32)", "1.0.0"), - ("# version 2020.03.24", "2020.03.24"), - ("## [Unreleased]", None), - ("All notable changes to this project will be documented in this file.", None), - ("# Changelog", None), - ("### Bug Fixes", None), -] - - -@pytest.mark.parametrize("line_from_changelog,output_version", VERSIONS_EXAMPLES) -def test_changelog_detect_version(line_from_changelog, output_version): - version = changelog.parse_version_from_markdown(line_from_changelog) - assert version == output_version - - -TITLES_EXAMPLES = [ - ("## [1.0.0] - 2017-06-20", "##"), - ("## [Unreleased]", "##"), - ("# Unreleased", "#"), -] - - -@pytest.mark.parametrize("line_from_changelog,output_title", TITLES_EXAMPLES) -def test_parse_title_type_of_line(line_from_changelog, output_title): - title = changelog.parse_title_type_of_line(line_from_changelog) - assert title == output_title - - -def test_get_metadata_from_a(changelog_a_file): - meta = changelog.get_metadata(changelog_a_file, encoding="utf-8") - assert meta == { - "latest_version": "1.0.0", - "latest_version_position": 10, - "unreleased_end": 10, - "unreleased_start": 7, - } - - -def test_get_metadata_from_b(changelog_b_file): - meta = changelog.get_metadata(changelog_b_file, encoding="utf-8") - assert meta == { - "latest_version": "1.2.0", - "latest_version_position": 3, - "unreleased_end": 3, - "unreleased_start": 0, - } - - -def test_get_metadata_from_c(changelog_c_file): - meta = changelog.get_metadata(changelog_c_file, encoding="utf-8") - assert meta == { - "latest_version": "1.0.0", - "latest_version_position": 3, - "unreleased_end": 3, - "unreleased_start": 1, - } - - -def test_get_metadata_from_d(changelog_d_file): - meta = changelog.get_metadata(changelog_d_file, encoding="utf-8") - assert meta == { - "latest_version": None, - "latest_version_position": None, - "unreleased_end": 2, - "unreleased_start": 1, - } diff --git a/tests/test_changelog_parser.py b/tests/test_changelog_parser.py deleted file mode 100644 index f0f413e7b2..0000000000 --- a/tests/test_changelog_parser.py +++ /dev/null @@ -1,196 +0,0 @@ -import os - -import pytest - -from commitizen import changelog_parser - -CHANGELOG_TEMPLATE = """ -## 1.0.0 (2019-07-12) - -### Fix - -- issue in poetry add preventing the installation in py36 -- **users**: lorem ipsum apap - -### Feat - -- it is possible to specify a pattern to be matched in configuration files bump. - -## 0.9 (2019-07-11) - -### Fix - -- holis - -""" - - -@pytest.fixture -def changelog_content() -> str: - changelog_path = "tests/CHANGELOG_FOR_TEST.md" - with open(changelog_path, encoding="utf-8") as f: - return f.read() - - -@pytest.fixture -def existing_changelog_file(tmpdir): - with tmpdir.as_cwd(): - changelog_path = os.path.join(os.getcwd(), "CHANGELOG.md") - # changelog_path = "tests/CHANGELOG.md" - - with open(changelog_path, "w", encoding="utf-8") as f: - f.write(CHANGELOG_TEMPLATE) - - yield changelog_path - - os.remove(changelog_path) - - -def test_read_changelog_blocks(existing_changelog_file): - blocks = changelog_parser.find_version_blocks( - existing_changelog_file, encoding="utf-8" - ) - blocks = list(blocks) - amount_of_blocks = len(blocks) - assert amount_of_blocks == 2 - - -VERSION_CASES: list = [ - ("## 1.0.0 (2019-07-12)", {"version": "1.0.0", "date": "2019-07-12"}), - ("## 2.3.0a0", {"version": "2.3.0a0", "date": None}), - ("## 0.10.0a0", {"version": "0.10.0a0", "date": None}), - ("## 1.0.0rc0", {"version": "1.0.0rc0", "date": None}), - ("## 1beta", {"version": "1beta", "date": None}), - ( - "## 1.0.0rc1+e20d7b57f3eb (2019-3-24)", - {"version": "1.0.0rc1+e20d7b57f3eb", "date": "2019-3-24"}, - ), - ("### Bug fixes", {}), - ("- issue in poetry add preventing the installation in py36", {}), -] - -CATEGORIES_CASES: list = [ - ("## 1.0.0 (2019-07-12)", {}), - ("## 2.3.0a0", {}), - ("### Bug fixes", {"change_type": "Bug fixes"}), - ("### Features", {"change_type": "Features"}), - ("- issue in poetry add preventing the installation in py36", {}), -] - -CATEGORIES_TRANSFORMATIONS: list = [ - ("Bug fixes", "fix"), - ("Features", "feat"), - ("BREAKING CHANGES", "BREAKING CHANGES"), -] - -MESSAGES_CASES: list = [ - ("## 1.0.0 (2019-07-12)", {}), - ("## 2.3.0a0", {}), - ("### Fix", {}), - ( - "- name no longer accept invalid chars", - { - "message": "name no longer accept invalid chars", - "scope": None, - "breaking": None, - }, - ), - ( - "- **users**: lorem ipsum apap", - {"message": "lorem ipsum apap", "scope": "users", "breaking": None}, - ), -] - - -@pytest.mark.parametrize("test_input,expected", VERSION_CASES) -def test_parse_md_version(test_input, expected): - assert changelog_parser.parse_md_version(test_input) == expected - - -@pytest.mark.parametrize("test_input,expected", CATEGORIES_CASES) -def test_parse_md_change_type(test_input, expected): - assert changelog_parser.parse_md_change_type(test_input) == expected - - -@pytest.mark.parametrize("test_input,expected", CATEGORIES_TRANSFORMATIONS) -def test_transform_change_type(test_input, expected): - assert changelog_parser.transform_change_type(test_input) == expected - - -@pytest.mark.parametrize("test_input,expected", MESSAGES_CASES) -def test_parse_md_message(test_input, expected): - assert changelog_parser.parse_md_message(test_input) == expected - - -def test_transform_change_type_fail(): - with pytest.raises(ValueError) as excinfo: - changelog_parser.transform_change_type("Bugs") - assert "Could not match a change_type" in str(excinfo.value) - - -def test_generate_block_tree(existing_changelog_file): - blocks = changelog_parser.find_version_blocks( - existing_changelog_file, encoding="utf-8" - ) - block = next(blocks) - tree = changelog_parser.generate_block_tree(block) - assert tree == { - "changes": { - "fix": [ - { - "scope": None, - "breaking": None, - "message": "issue in poetry add preventing the installation in py36", - }, - {"scope": "users", "breaking": None, "message": "lorem ipsum apap"}, - ], - "feat": [ - { - "scope": None, - "breaking": None, - "message": ( - "it is possible to specify a pattern to be matched " - "in configuration files bump." - ), - } - ], - }, - "version": "1.0.0", - "date": "2019-07-12", - } - - -def test_generate_full_tree(existing_changelog_file): - blocks = changelog_parser.find_version_blocks( - existing_changelog_file, encoding="utf-8" - ) - tree = list(changelog_parser.generate_full_tree(blocks)) - - assert tree == [ - { - "changes": { - "fix": [ - { - "scope": None, - "message": "issue in poetry add preventing the installation in py36", - "breaking": None, - }, - {"scope": "users", "message": "lorem ipsum apap", "breaking": None}, - ], - "feat": [ - { - "scope": None, - "message": "it is possible to specify a pattern to be matched in configuration files bump.", - "breaking": None, - } - ], - }, - "version": "1.0.0", - "date": "2019-07-12", - }, - { - "changes": {"fix": [{"scope": None, "message": "holis", "breaking": None}]}, - "version": "0.9", - "date": "2019-07-11", - }, - ] diff --git a/tests/test_conf.py b/tests/test_conf.py index 21a48fd2d6..dcac8e015c 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -57,6 +57,7 @@ "version_files": ["commitizen/__version__.py", "pyproject.toml"], "style": [["pointer", "reverse"], ["question", "underline"]], "changelog_file": "CHANGELOG.md", + "changelog_format": None, "changelog_incremental": False, "changelog_start_rev": None, "changelog_merge_prerelease": False, @@ -84,6 +85,7 @@ "version_files": ["commitizen/__version__.py", "pyproject.toml"], "style": [["pointer", "reverse"], ["question", "underline"]], "changelog_file": "CHANGELOG.md", + "changelog_format": None, "changelog_incremental": False, "changelog_start_rev": None, "changelog_merge_prerelease": False, @@ -99,16 +101,6 @@ "extras": {}, } -_read_settings = { - "name": "cz_jira", - "version": "1.0.0", - "version_files": ["commitizen/__version__.py", "pyproject.toml"], - "style": [["pointer", "reverse"], ["question", "underline"]], - "changelog_file": "CHANGELOG.md", - "pre_bump_hooks": ["scripts/generate_documentation.sh"], - "post_bump_hooks": ["scripts/slack_notification.sh"], -} - @pytest.fixture def config_files_manager(request, tmpdir): From 34a7bd51dd3bb389895e28e026006f7140a72298 Mon Sep 17 00:00:00 2001 From: Axel H <noirbizarre@users.noreply.github.com> Date: Tue, 17 Oct 2023 18:59:33 +0200 Subject: [PATCH 024/685] test(pre-commit): update the pre-commit prettier hook version --- tests/test_bump_create_commit_message.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_bump_create_commit_message.py b/tests/test_bump_create_commit_message.py index e3035ba550..c096f23c39 100644 --- a/tests/test_bump_create_commit_message.py +++ b/tests/test_bump_create_commit_message.py @@ -40,7 +40,7 @@ def test_bump_pre_commit_changelog(mocker: MockFixture, freezer, retry): """\ repos: - repo: https://github.com/pre-commit/mirrors-prettier - rev: v2.6.2 + rev: v3.0.3 hooks: - id: prettier stages: [commit] From e9647c7ae1a8fca4067018642135fe7d78c9f0e9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Wed, 18 Oct 2023 00:17:13 +0000 Subject: [PATCH 025/685] =?UTF-8?q?bump:=20version=203.11.0=20=E2=86=92=20?= =?UTF-8?q?3.12.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 14 ++++++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fa1b9cdbcf..d6c156a530 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.11.0 # automatically updated by Commitizen + rev: v3.12.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index d85c52f103..1b6be177f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,18 @@ +## v3.12.0 (2023-10-18) + +### Feat + +- **formats**: expose some new customizable changelog formats on the `commitizen.changelog_format` endpoint (Textile, AsciiDoc and RestructuredText) +- **template**: add `changelog --export-template` command +- **template**: allow to override the template from cli, configuration and plugins + +### Fix + +- **filename**: ensure `file_name` can be passed to `changelog` from `bump` command + +## 3.11.0 (2023-10-17) + ## v3.11.0 (2023-10-17) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index fcbd6954b9..d1a7f1e0d2 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.11.0" +__version__ = "3.12.0" diff --git a/pyproject.toml b/pyproject.toml index 48133f1e11..3dc780baf0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.11.0" +version = "3.12.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.11.0" +version = "3.12.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From abea39965543bfbaae44785408c1da6cfe339f66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jens=20Tr=C3=B6ger?= <jenstroeger@users.noreply.github.com> Date: Fri, 3 Nov 2023 17:21:27 +1000 Subject: [PATCH 026/685] docs: fix Markdown link on Contributing page (#900) --- docs/contributing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing.md b/docs/contributing.md index 28ea7426fd..77ee1f44fe 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -20,7 +20,7 @@ If you're a first-time contributor, you can check the issues with [good first is 5. Check out a new branch and add your modification. 6. Add test cases for all your changes. (We use [CodeCov](https://codecov.io/) to ensure our test coverage does not drop.) -7. Use [commitizen](https://github.com/commitizen-tools/commitizen) to do git commit. We follow [conventional commits][conventional-commits] +7. Use [commitizen](https://github.com/commitizen-tools/commitizen) to do git commit. We follow [conventional commits](https://www.conventionalcommits.org/). 8. Run `./scripts/format` and `./scripts/test` to ensure you follow the coding style and the tests pass. 9. Optionally, update the `./docs/README.md`. 9. **Do not** update the `CHANGELOG.md`, it will be automatically created after merging to `master`. From 2706d079d1c0bfcd48f390cf29c8e783ef7a3887 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Oct 2023 21:09:17 +0000 Subject: [PATCH 027/685] build(deps-dev): bump urllib3 from 2.0.6 to 2.0.7 Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.0.6 to 2.0.7. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/2.0.6...2.0.7) --- updated-dependencies: - dependency-name: urllib3 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3e685bfe19..0610e6ef26 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1585,13 +1585,13 @@ files = [ [[package]] name = "urllib3" -version = "2.0.6" +version = "2.0.7" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.6-py3-none-any.whl", hash = "sha256:7a7c7003b000adf9e7ca2a377c9688bbc54ed41b985789ed576570342a375cd2"}, - {file = "urllib3-2.0.6.tar.gz", hash = "sha256:b19e1a85d206b56d7df1d5e683df4a7725252a964e3993648dd0fb5a1c157564"}, + {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, + {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, ] [package.extras] From fd54f814f582bde88327d9304c249f01d115ecc5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Nov 2023 00:28:17 +0000 Subject: [PATCH 028/685] build(deps-dev): bump pytest-mock from 3.11.1 to 3.12.0 Bumps [pytest-mock](https://github.com/pytest-dev/pytest-mock) from 3.11.1 to 3.12.0. - [Release notes](https://github.com/pytest-dev/pytest-mock/releases) - [Changelog](https://github.com/pytest-dev/pytest-mock/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-mock/compare/v3.11.1...v3.12.0) --- updated-dependencies: - dependency-name: pytest-mock dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0610e6ef26..9ffb40740e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1118,13 +1118,13 @@ pytest = ">=3.6" [[package]] name = "pytest-mock" -version = "3.11.1" +version = "3.12.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-mock-3.11.1.tar.gz", hash = "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f"}, - {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, + {file = "pytest-mock-3.12.0.tar.gz", hash = "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9"}, + {file = "pytest_mock-3.12.0-py3-none-any.whl", hash = "sha256:0972719a7263072da3a21c7f4773069bcc7486027d7e8e1f81d98a47e701bc4f"}, ] [package.dependencies] From af11332b7ced5959493eb48323fbf38216e9a6c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Nov 2023 02:31:18 +0000 Subject: [PATCH 029/685] build(deps): bump argcomplete from 3.1.2 to 3.1.4 Bumps [argcomplete](https://github.com/kislyuk/argcomplete) from 3.1.2 to 3.1.4. - [Release notes](https://github.com/kislyuk/argcomplete/releases) - [Changelog](https://github.com/kislyuk/argcomplete/blob/develop/Changes.rst) - [Commits](https://github.com/kislyuk/argcomplete/compare/v3.1.2...v3.1.4) --- updated-dependencies: - dependency-name: argcomplete dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9ffb40740e..c4dc6fc593 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "argcomplete" -version = "3.1.2" +version = "3.1.4" description = "Bash tab completion for argparse" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "argcomplete-3.1.2-py3-none-any.whl", hash = "sha256:d97c036d12a752d1079f190bc1521c545b941fda89ad85d15afa909b4d1b9a99"}, - {file = "argcomplete-3.1.2.tar.gz", hash = "sha256:d5d1e5efd41435260b8f85673b74ea2e883affcbec9f4230c582689e8e78251b"}, + {file = "argcomplete-3.1.4-py3-none-any.whl", hash = "sha256:fbe56f8cda08aa9a04b307d8482ea703e96a6a801611acb4be9bf3942017989f"}, + {file = "argcomplete-3.1.4.tar.gz", hash = "sha256:72558ba729e4c468572609817226fb0a6e7e9a0a7d477b882be168c0b4a62b94"}, ] [package.extras] From 8a61d6f6a9dfc0aa94ec481f84c2cf3744b38b1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Nov 2023 15:35:06 +0000 Subject: [PATCH 030/685] build(deps-dev): bump black from 23.9.1 to 23.10.1 Bumps [black](https://github.com/psf/black) from 23.9.1 to 23.10.1. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.9.1...23.10.1) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/poetry.lock b/poetry.lock index c4dc6fc593..464d30bcde 100644 --- a/poetry.lock +++ b/poetry.lock @@ -69,33 +69,29 @@ files = [ [[package]] name = "black" -version = "23.9.1" +version = "23.10.1" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.9.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301"}, - {file = "black-23.9.1-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100"}, - {file = "black-23.9.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71"}, - {file = "black-23.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7"}, - {file = "black-23.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80"}, - {file = "black-23.9.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f"}, - {file = "black-23.9.1-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe"}, - {file = "black-23.9.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186"}, - {file = "black-23.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f"}, - {file = "black-23.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300"}, - {file = "black-23.9.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948"}, - {file = "black-23.9.1-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855"}, - {file = "black-23.9.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204"}, - {file = "black-23.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377"}, - {file = "black-23.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573"}, - {file = "black-23.9.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c"}, - {file = "black-23.9.1-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325"}, - {file = "black-23.9.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393"}, - {file = "black-23.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9"}, - {file = "black-23.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f"}, - {file = "black-23.9.1-py3-none-any.whl", hash = "sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9"}, - {file = "black-23.9.1.tar.gz", hash = "sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d"}, + {file = "black-23.10.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:ec3f8e6234c4e46ff9e16d9ae96f4ef69fa328bb4ad08198c8cee45bb1f08c69"}, + {file = "black-23.10.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:1b917a2aa020ca600483a7b340c165970b26e9029067f019e3755b56e8dd5916"}, + {file = "black-23.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c74de4c77b849e6359c6f01987e94873c707098322b91490d24296f66d067dc"}, + {file = "black-23.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4d10b0f016616a0d93d24a448100adf1699712fb7a4efd0e2c32bbb219b173"}, + {file = "black-23.10.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b15b75fc53a2fbcac8a87d3e20f69874d161beef13954747e053bca7a1ce53a0"}, + {file = "black-23.10.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:e293e4c2f4a992b980032bbd62df07c1bcff82d6964d6c9496f2cd726e246ace"}, + {file = "black-23.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d56124b7a61d092cb52cce34182a5280e160e6aff3137172a68c2c2c4b76bcb"}, + {file = "black-23.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:3f157a8945a7b2d424da3335f7ace89c14a3b0625e6593d21139c2d8214d55ce"}, + {file = "black-23.10.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:cfcce6f0a384d0da692119f2d72d79ed07c7159879d0bb1bb32d2e443382bf3a"}, + {file = "black-23.10.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:33d40f5b06be80c1bbce17b173cda17994fbad096ce60eb22054da021bf933d1"}, + {file = "black-23.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:840015166dbdfbc47992871325799fd2dc0dcf9395e401ada6d88fe11498abad"}, + {file = "black-23.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:037e9b4664cafda5f025a1728c50a9e9aedb99a759c89f760bd83730e76ba884"}, + {file = "black-23.10.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:7cb5936e686e782fddb1c73f8aa6f459e1ad38a6a7b0e54b403f1f05a1507ee9"}, + {file = "black-23.10.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:7670242e90dc129c539e9ca17665e39a146a761e681805c54fbd86015c7c84f7"}, + {file = "black-23.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed45ac9a613fb52dad3b61c8dea2ec9510bf3108d4db88422bacc7d1ba1243d"}, + {file = "black-23.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6d23d7822140e3fef190734216cefb262521789367fbdc0b3f22af6744058982"}, + {file = "black-23.10.1-py3-none-any.whl", hash = "sha256:d431e6739f727bb2e0495df64a6c7a5310758e87505f5f8cde9ff6c0f2d7e4fe"}, + {file = "black-23.10.1.tar.gz", hash = "sha256:1f8ce316753428ff68749c65a5f7844631aa18c8679dfd3ca9dc1a289979c258"}, ] [package.dependencies] From ac2eb27637479f3620b4987bc14d3e7e844b935a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Nov 2023 15:46:38 +0000 Subject: [PATCH 031/685] build(deps-dev): bump mypy from 1.6.0 to 1.6.1 Bumps [mypy](https://github.com/python/mypy) from 1.6.0 to 1.6.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.6.0...v1.6.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index 464d30bcde..ece9e7bca3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -783,38 +783,38 @@ files = [ [[package]] name = "mypy" -version = "1.6.0" +version = "1.6.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:091f53ff88cb093dcc33c29eee522c087a438df65eb92acd371161c1f4380ff0"}, - {file = "mypy-1.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb7ff4007865833c470a601498ba30462b7374342580e2346bf7884557e40531"}, - {file = "mypy-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49499cf1e464f533fc45be54d20a6351a312f96ae7892d8e9f1708140e27ce41"}, - {file = "mypy-1.6.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c192445899c69f07874dabda7e931b0cc811ea055bf82c1ababf358b9b2a72c"}, - {file = "mypy-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:3df87094028e52766b0a59a3e46481bb98b27986ed6ded6a6cc35ecc75bb9182"}, - {file = "mypy-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c8835a07b8442da900db47ccfda76c92c69c3a575872a5b764332c4bacb5a0a"}, - {file = "mypy-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:24f3de8b9e7021cd794ad9dfbf2e9fe3f069ff5e28cb57af6f873ffec1cb0425"}, - {file = "mypy-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:856bad61ebc7d21dbc019b719e98303dc6256cec6dcc9ebb0b214b81d6901bd8"}, - {file = "mypy-1.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89513ddfda06b5c8ebd64f026d20a61ef264e89125dc82633f3c34eeb50e7d60"}, - {file = "mypy-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:9f8464ed410ada641c29f5de3e6716cbdd4f460b31cf755b2af52f2d5ea79ead"}, - {file = "mypy-1.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:971104bcb180e4fed0d7bd85504c9036346ab44b7416c75dd93b5c8c6bb7e28f"}, - {file = "mypy-1.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab98b8f6fdf669711f3abe83a745f67f50e3cbaea3998b90e8608d2b459fd566"}, - {file = "mypy-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a69db3018b87b3e6e9dd28970f983ea6c933800c9edf8c503c3135b3274d5ad"}, - {file = "mypy-1.6.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:dccd850a2e3863891871c9e16c54c742dba5470f5120ffed8152956e9e0a5e13"}, - {file = "mypy-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:f8598307150b5722854f035d2e70a1ad9cc3c72d392c34fffd8c66d888c90f17"}, - {file = "mypy-1.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fea451a3125bf0bfe716e5d7ad4b92033c471e4b5b3e154c67525539d14dc15a"}, - {file = "mypy-1.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e28d7b221898c401494f3b77db3bac78a03ad0a0fff29a950317d87885c655d2"}, - {file = "mypy-1.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4b7a99275a61aa22256bab5839c35fe8a6887781862471df82afb4b445daae6"}, - {file = "mypy-1.6.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7469545380dddce5719e3656b80bdfbb217cfe8dbb1438532d6abc754b828fed"}, - {file = "mypy-1.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:7807a2a61e636af9ca247ba8494031fb060a0a744b9fee7de3a54bed8a753323"}, - {file = "mypy-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2dad072e01764823d4b2f06bc7365bb1d4b6c2f38c4d42fade3c8d45b0b4b67"}, - {file = "mypy-1.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b19006055dde8a5425baa5f3b57a19fa79df621606540493e5e893500148c72f"}, - {file = "mypy-1.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31eba8a7a71f0071f55227a8057468b8d2eb5bf578c8502c7f01abaec8141b2f"}, - {file = "mypy-1.6.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e0db37ac4ebb2fee7702767dfc1b773c7365731c22787cb99f507285014fcaf"}, - {file = "mypy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:c69051274762cccd13498b568ed2430f8d22baa4b179911ad0c1577d336ed849"}, - {file = "mypy-1.6.0-py3-none-any.whl", hash = "sha256:9e1589ca150a51d9d00bb839bfeca2f7a04f32cd62fad87a847bc0818e15d7dc"}, - {file = "mypy-1.6.0.tar.gz", hash = "sha256:4f3d27537abde1be6d5f2c96c29a454da333a2a271ae7d5bc7110e6d4b7beb3f"}, + {file = "mypy-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5012e5cc2ac628177eaac0e83d622b2dd499e28253d4107a08ecc59ede3fc2c"}, + {file = "mypy-1.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8fbb68711905f8912e5af474ca8b78d077447d8f3918997fecbf26943ff3cbb"}, + {file = "mypy-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a1ad938fee7d2d96ca666c77b7c494c3c5bd88dff792220e1afbebb2925b5e"}, + {file = "mypy-1.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b96ae2c1279d1065413965c607712006205a9ac541895004a1e0d4f281f2ff9f"}, + {file = "mypy-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:40b1844d2e8b232ed92e50a4bd11c48d2daa351f9deee6c194b83bf03e418b0c"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81af8adaa5e3099469e7623436881eff6b3b06db5ef75e6f5b6d4871263547e5"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8c223fa57cb154c7eab5156856c231c3f5eace1e0bed9b32a24696b7ba3c3245"}, + {file = "mypy-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8032e00ce71c3ceb93eeba63963b864bf635a18f6c0c12da6c13c450eedb183"}, + {file = "mypy-1.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c46b51de523817a0045b150ed11b56f9fff55f12b9edd0f3ed35b15a2809de0"}, + {file = "mypy-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:19f905bcfd9e167159b3d63ecd8cb5e696151c3e59a1742e79bc3bcb540c42c7"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:82e469518d3e9a321912955cc702d418773a2fd1e91c651280a1bda10622f02f"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4473c22cc296425bbbce7e9429588e76e05bc7342da359d6520b6427bf76660"}, + {file = "mypy-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a0d7d24dfb26729e0a068639a6ce3500e31d6655df8557156c51c1cb874ce7"}, + {file = "mypy-1.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cfd13d47b29ed3bbaafaff7d8b21e90d827631afda134836962011acb5904b71"}, + {file = "mypy-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:eb4f18589d196a4cbe5290b435d135dee96567e07c2b2d43b5c4621b6501531a"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41697773aa0bf53ff917aa077e2cde7aa50254f28750f9b88884acea38a16169"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7274b0c57737bd3476d2229c6389b2ec9eefeb090bbaf77777e9d6b1b5a9d143"}, + {file = "mypy-1.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbaf4662e498c8c2e352da5f5bca5ab29d378895fa2d980630656178bd607c46"}, + {file = "mypy-1.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bb8ccb4724f7d8601938571bf3f24da0da791fe2db7be3d9e79849cb64e0ae85"}, + {file = "mypy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:68351911e85145f582b5aa6cd9ad666c8958bcae897a1bfda8f4940472463c45"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49ae115da099dcc0922a7a895c1eec82c1518109ea5c162ed50e3b3594c71208"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b27958f8c76bed8edaa63da0739d76e4e9ad4ed325c814f9b3851425582a3cd"}, + {file = "mypy-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:925cd6a3b7b55dfba252b7c4561892311c5358c6b5a601847015a1ad4eb7d332"}, + {file = "mypy-1.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8f57e6b6927a49550da3d122f0cb983d400f843a8a82e65b3b380d3d7259468f"}, + {file = "mypy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a43ef1c8ddfdb9575691720b6352761f3f53d85f1b57d7745701041053deff30"}, + {file = "mypy-1.6.1-py3-none-any.whl", hash = "sha256:4cbe68ef919c28ea561165206a2dcb68591c50f3bcf777932323bc208d949cf1"}, + {file = "mypy-1.6.1.tar.gz", hash = "sha256:4d01c00d09a0be62a4ca3f933e315455bde83f37f892ba4b08ce92f3cf44bcc1"}, ] [package.dependencies] From 2c5df376fef7a279fecd26a674d6d885473fa510 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Nov 2023 01:34:00 +0000 Subject: [PATCH 032/685] build(deps-dev): bump mkdocs-material from 9.4.6 to 9.4.14 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.4.6 to 9.4.14. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.4.6...9.4.14) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index ece9e7bca3..7e0461c597 100644 --- a/poetry.lock +++ b/poetry.lock @@ -743,13 +743,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.4.6" +version = "9.4.14" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.4.6-py3-none-any.whl", hash = "sha256:78802035d5768a78139c84ad7dce0c6493e8f7dc4861727d36ed91d1520a54da"}, - {file = "mkdocs_material-9.4.6.tar.gz", hash = "sha256:09665e60df7ee9e5ff3a54af173f6d45be718b1ee7dd962bcff3102b81fb0c14"}, + {file = "mkdocs_material-9.4.14-py3-none-any.whl", hash = "sha256:dbc78a4fea97b74319a6aa9a2f0be575a6028be6958f813ba367188f7b8428f6"}, + {file = "mkdocs_material-9.4.14.tar.gz", hash = "sha256:a511d3ff48fa8718b033e7e37d17abd9cc1de0fdf0244a625ca2ae2387e2416d"}, ] [package.dependencies] @@ -758,7 +758,7 @@ colorama = ">=0.4,<1.0" jinja2 = ">=3.0,<4.0" markdown = ">=3.2,<4.0" mkdocs = ">=1.5.3,<2.0" -mkdocs-material-extensions = ">=1.2,<2.0" +mkdocs-material-extensions = ">=1.3,<2.0" paginate = ">=0.5,<1.0" pygments = ">=2.16,<3.0" pymdown-extensions = ">=10.2,<11.0" @@ -772,13 +772,13 @@ recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2. [[package]] name = "mkdocs-material-extensions" -version = "1.2" +version = "1.3.1" description = "Extension pack for Python Markdown and MkDocs Material." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mkdocs_material_extensions-1.2-py3-none-any.whl", hash = "sha256:c767bd6d6305f6420a50f0b541b0c9966d52068839af97029be14443849fb8a1"}, - {file = "mkdocs_material_extensions-1.2.tar.gz", hash = "sha256:27e2d1ed2d031426a6e10d5ea06989d67e90bb02acd588bc5673106b5ee5eedf"}, + {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, + {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, ] [[package]] From 985a47cdf04fc3ab564ef6977962f501664d1a6c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Nov 2023 01:22:15 +0000 Subject: [PATCH 033/685] build(deps-dev): bump pytest from 7.4.2 to 7.4.3 Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.2 to 7.4.3. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/7.4.2...7.4.3) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7e0461c597..b9ec66f872 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1045,13 +1045,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pytest" -version = "7.4.2" +version = "7.4.3" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, - {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, + {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, + {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, ] [package.dependencies] From a53bea7bcb5634a808cb508bc481446342ef3843 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 3 Dec 2023 02:09:31 +0000 Subject: [PATCH 034/685] build(deps): bump tomlkit from 0.12.1 to 0.12.3 Bumps [tomlkit](https://github.com/sdispater/tomlkit) from 0.12.1 to 0.12.3. - [Release notes](https://github.com/sdispater/tomlkit/releases) - [Changelog](https://github.com/sdispater/tomlkit/blob/master/CHANGELOG.md) - [Commits](https://github.com/sdispater/tomlkit/compare/0.12.1...0.12.3) --- updated-dependencies: - dependency-name: tomlkit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index b9ec66f872..5cc7298bb6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "appnope" @@ -1500,13 +1500,13 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.1" +version = "0.12.3" description = "Style preserving TOML library" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.12.1-py3-none-any.whl", hash = "sha256:712cbd236609acc6a3e2e97253dfc52d4c2082982a88f61b640ecf0817eab899"}, - {file = "tomlkit-0.12.1.tar.gz", hash = "sha256:38e1ff8edb991273ec9f6181244a6a391ac30e9f5098e7535640ea6be97a7c86"}, + {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"}, + {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, ] [[package]] From 9227605e4ab3e975faa43a93aeb67790e0b1e96c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 3 Dec 2023 02:09:05 +0000 Subject: [PATCH 035/685] build(deps): bump charset-normalizer from 3.3.0 to 3.3.2 Bumps [charset-normalizer](https://github.com/Ousret/charset_normalizer) from 3.3.0 to 3.3.2. - [Release notes](https://github.com/Ousret/charset_normalizer/releases) - [Changelog](https://github.com/Ousret/charset_normalizer/blob/master/CHANGELOG.md) - [Commits](https://github.com/Ousret/charset_normalizer/compare/3.3.0...3.3.2) --- updated-dependencies: - dependency-name: charset-normalizer dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 182 ++++++++++++++++++++++++++-------------------------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5cc7298bb6..2f22891a31 100644 --- a/poetry.lock +++ b/poetry.lock @@ -133,101 +133,101 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.0" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, - {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] From d18b261e521df2697cc51bc4e711f13c5dc53db6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 3 Dec 2023 02:08:54 +0000 Subject: [PATCH 036/685] ci(deps): bump actions/github-script from 6 to 7 Bumps [actions/github-script](https://github.com/actions/github-script) from 6 to 7. - [Release notes](https://github.com/actions/github-script/releases) - [Commits](https://github.com/actions/github-script/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/github-script dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- .github/workflows/label_issues.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/label_issues.yml b/.github/workflows/label_issues.yml index 47b9ce29e0..45ca450f89 100644 --- a/.github/workflows/label_issues.yml +++ b/.github/workflows/label_issues.yml @@ -12,7 +12,7 @@ jobs: issues: write runs-on: ubuntu-latest steps: - - uses: actions/github-script@v6 + - uses: actions/github-script@v7 with: script: | github.rest.issues.addLabels({ From e2a5ed1a687343fe71ba6e0cbfec7030b6f6c936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20A=2E=20Sch=C3=BCnemann?= <44511825+LuisHenri@users.noreply.github.com> Date: Wed, 30 Nov 2022 13:41:37 -0300 Subject: [PATCH 037/685] feat: add custom message to annotated git tag --- commitizen/git.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/commitizen/git.py b/commitizen/git.py index 46aa3abffc..1f6df58e1d 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -82,13 +82,14 @@ def from_line(cls, line: str, inner_delimiter: str) -> GitTag: return cls(name=name, rev=obj, date=date) -def tag(tag: str, annotated: bool = False, signed: bool = False) -> cmd.Command: +def tag(tag: str, annotated: bool = False, signed: bool = False, msg: Optional[str] = None) -> cmd.Command: _opt = "" if annotated: _opt = f"-a {tag} -m" if signed: _opt = f"-s {tag} -m" - c = cmd.run(f"git tag {_opt} {tag}") + + c = cmd.run(f"git tag {_opt} {tag if _opt == '' or msg is None else msg}") return c From 775bb30c19decd714df3621f66e32efa0e444426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20Allebrandt=20Sch=C3=BCnemann?= <aluishenrique01@gmail.com> Date: Sun, 4 Dec 2022 10:35:46 -0300 Subject: [PATCH 038/685] fix(commitizen-git): add quotes for tag message --- commitizen/git.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/commitizen/git.py b/commitizen/git.py index 1f6df58e1d..c3cf37bdf0 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -82,14 +82,16 @@ def from_line(cls, line: str, inner_delimiter: str) -> GitTag: return cls(name=name, rev=obj, date=date) -def tag(tag: str, annotated: bool = False, signed: bool = False, msg: Optional[str] = None) -> cmd.Command: +def tag( + tag: str, annotated: bool = False, signed: bool = False, msg: Optional[str] = None +) -> cmd.Command: _opt = "" if annotated: _opt = f"-a {tag} -m" if signed: _opt = f"-s {tag} -m" - c = cmd.run(f"git tag {_opt} {tag if _opt == '' or msg is None else msg}") + c = cmd.run(f'git tag {_opt} "{tag if _opt == "" or msg is None else msg}"') return c From 4c277acf0d2e7c45d1aff5efe120a93375c0779d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20Allebrandt=20Sch=C3=BCnemann?= <aluishenrique01@gmail.com> Date: Sun, 4 Dec 2022 10:57:50 -0300 Subject: [PATCH 039/685] feat(git): add get tag message function --- commitizen/git.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/commitizen/git.py b/commitizen/git.py index c3cf37bdf0..45b5d0c7a1 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -83,7 +83,7 @@ def from_line(cls, line: str, inner_delimiter: str) -> GitTag: def tag( - tag: str, annotated: bool = False, signed: bool = False, msg: Optional[str] = None + tag: str, annotated: bool = False, signed: bool = False, msg: str | None = None ) -> cmd.Command: _opt = "" if annotated: @@ -203,6 +203,13 @@ def get_latest_tag_name() -> str | None: return c.out.strip() +def get_tag_message(tag: str) -> str | None: + c = cmd.run(f"git tag -l --format='%(contents:subject)' {tag}") + if c.err: + return None + return c.out.strip() + + def get_tag_names() -> list[str | None]: c = cmd.run("git tag --list") if c.err: From 0fe2b833ff32c1bf3db02933aece82213f2d159a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20Allebrandt=20Sch=C3=BCnemann?= <aluishenrique01@gmail.com> Date: Sun, 4 Dec 2022 10:59:02 -0300 Subject: [PATCH 040/685] test(utils): add tag message parameters to create_tag function --- tests/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/utils.py b/tests/utils.py index 6eed953270..20d2d2264d 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -55,8 +55,8 @@ def get_current_branch() -> str: return c.out -def create_tag(tag: str): - c = git.tag(tag) +def create_tag(tag: str, message: str | None = None): + c = git.tag(tag, annotated=(message is not None), msg=message) if c.return_code != 0: raise exceptions.CommitError(c.err) From 4df9a7fd950a552b1508f6004e0ab3dfa83801e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20Allebrandt=20Sch=C3=BCnemann?= <aluishenrique01@gmail.com> Date: Sun, 4 Dec 2022 10:59:27 -0300 Subject: [PATCH 041/685] test(utils): add test for creating tag with message --- tests/test_git.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/test_git.py b/tests/test_git.py index 79cd76fca6..2985f3bfdf 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -8,7 +8,7 @@ from commitizen import cmd, exceptions, git from pytest_mock import MockFixture -from tests.utils import FakeCommand, create_file_and_commit +from tests.utils import FakeCommand, create_file_and_commit, create_tag def test_git_object_eq(): @@ -239,3 +239,13 @@ def test_eoltypes_get_eol_for_open(): assert git.EOLTypes.get_eol_for_open(git.EOLTypes.NATIVE) == os.linesep assert git.EOLTypes.get_eol_for_open(git.EOLTypes.LF) == "\n" assert git.EOLTypes.get_eol_for_open(git.EOLTypes.CRLF) == "\r\n" + + +def test_create_tag_with_message(tmp_commitizen_project): + with tmp_commitizen_project.as_cwd(): + create_file_and_commit("feat(test): test") + tag_name = "1.0" + tag_message = "test message" + create_tag(tag_name, tag_message) + assert git.get_latest_tag_name() == tag_name + assert git.get_tag_message(tag_name) == f"'{tag_message}'" From 9d0fb0bbcfc64c1c05ac79267bd3f609460db1b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20Allebrandt=20Sch=C3=BCnemann?= <aluishenrique01@gmail.com> Date: Sun, 4 Dec 2022 11:31:16 -0300 Subject: [PATCH 042/685] feat: add tag message argument to cli --- commitizen/cli.py | 5 +++++ commitizen/commands/bump.py | 3 +++ 2 files changed, 8 insertions(+) diff --git a/commitizen/cli.py b/commitizen/cli.py index 19d6b1b80a..511f745652 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -243,6 +243,11 @@ def __call__( "help": "create annotated tag instead of lightweight one", "action": "store_true", }, + { + "name": ["--annotated-tag-message", "-atm"], + "help": "create annotated tag message", + "type": str, + }, { "name": ["--gpg-sign", "-s"], "help": "sign tag instead of lightweight one", diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index f1b6813566..a6c2948cc2 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -50,6 +50,7 @@ def __init__(self, config: BaseConfig, arguments: dict): "bump_message", "gpg_sign", "annotated_tag", + "annotated_tag_message", "major_version_zero", "prerelease_offset", "template", @@ -366,6 +367,8 @@ def __call__(self): # noqa: C901 or bool(self.config.settings.get("gpg_sign", False)), annotated=self.bump_settings.get("annotated_tag", False) or bool(self.config.settings.get("annotated_tag", False)), + msg=self.bump_settings.get("annotated_tag_message", None), + # TODO: also get from self.config.settings? ) if c.return_code != 0: raise BumpTagFailedError(c.err) From 25c03276600c289add3dd4c36c63e88d88a92081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20Allebrandt=20Sch=C3=BCnemann?= <aluishenrique01@gmail.com> Date: Sun, 4 Dec 2022 11:40:01 -0300 Subject: [PATCH 043/685] docs(bump): add documentation for annotated tag message --- docs/bump.md | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/docs/bump.md b/docs/bump.md index 8e0980ec82..75d6eb7c11 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -52,13 +52,10 @@ Some examples of pep440: ```bash $ cz bump --help -usage: cz bump [-h] [--dry-run] [--files-only] [--local-version] [--changelog] - [--no-verify] [--yes] [--tag-format TAG_FORMAT] - [--bump-message BUMP_MESSAGE] [--prerelease {alpha,beta,rc}] - [--devrelease DEVRELEASE] [--increment {MAJOR,MINOR,PATCH}] - [--check-consistency] [--annotated-tag] [--gpg-sign] - [--changelog-to-stdout] [--git-output-to-stderr] [--retry] [--major-version-zero] - [--template TEMPLATE] [--extra EXTRA] +usage: cz bump [-h] [--dry-run] [--files-only] [--local-version] [--changelog] [--no-verify] [--yes] [--tag-format TAG_FORMAT] + [--bump-message BUMP_MESSAGE] [--prerelease {alpha,beta,rc}] [--devrelease DEVRELEASE] [--increment {MAJOR,MINOR,PATCH}] + [--check-consistency] [--annotated-tag] [--gpg-sign] [--changelog-to-stdout] [--git-output-to-stderr] [--retry] [--major-version-zero] + [--prerelease-offset PRERELEASE_OFFSET] [--version-scheme {semver,pep440}] [--version-type {semver,pep440}] [MANUAL_VERSION] positional arguments: @@ -70,15 +67,12 @@ options: --files-only bump version in the files from the config --local-version bump only the local version portion --changelog, -ch generate the changelog for the newest version - --no-verify this option bypasses the pre-commit and commit-msg - hooks + --no-verify this option bypasses the pre-commit and commit-msg hooks --yes accept automatically questions done --tag-format TAG_FORMAT - the format used to tag the commit and read it, use it - in existing projects, wrap around simple quotes + the format used to tag the commit and read it, use it in existing projects, wrap around simple quotes --bump-message BUMP_MESSAGE - template used to create the release commit, useful - when working with CI + template used to create the release commit, useful when working with CI --prerelease {alpha,beta,rc}, -pr {alpha,beta,rc} choose type of prerelease --devrelease DEVRELEASE, -d DEVRELEASE @@ -86,8 +80,7 @@ options: --increment {MAJOR,MINOR,PATCH} manually specify the desired increment --check-consistency, -cc - check consistency among versions defined in commitizen - configuration and version_files + check consistency among versions defined in commitizen configuration and version_files --annotated-tag, -at create annotated tag instead of lightweight one --gpg-sign, -s sign tag instead of lightweight one --changelog-to-stdout @@ -96,14 +89,12 @@ options: Redirect git output to stderr --retry retry commit if it fails the 1st time --major-version-zero keep major version at zero, even for breaking changes - --prerelease-offset start pre-releases with this offset - --version-scheme {pep440,semver} + --prerelease-offset PRERELEASE_OFFSET + start pre-releases with this offset + --version-scheme {semver,pep440} choose version scheme - - --template TEMPLATE, -t TEMPLATE - changelog template file name (relative to the current working directory) - --extra EXTRA, -e EXTRA - a changelog extra variable (in the form 'key=value') + --version-type {semver,pep440} + Deprecated, use --version-scheme ``` ### `--files-only` @@ -184,6 +175,9 @@ If `--local-version` is used, it will bump only the local version `0.1.0` and ke If `--annotated-tag` is used, commitizen will create annotated tags. Also available via configuration, in `pyproject.toml` or `.cz.toml`. +### `--annotated-tag-message` +If `--annotated-tag-message` is used, commitizen will create annotated tags with the given message. + ### `--changelog-to-stdout` If `--changelog-to-stdout` is used, the incremental changelog generated by the bump From 6bccbbf0beb9547ccf60a493cac099e1934fcbbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20Allebrandt=20Sch=C3=BCnemann?= <aluishenrique01@gmail.com> Date: Sun, 4 Dec 2022 11:41:17 -0300 Subject: [PATCH 044/685] feat(commands-bump): automatically create annotated tag if message is given --- commitizen/commands/bump.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index a6c2948cc2..a3095193b0 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -366,7 +366,8 @@ def __call__(self): # noqa: C901 signed=self.bump_settings.get("gpg_sign", False) or bool(self.config.settings.get("gpg_sign", False)), annotated=self.bump_settings.get("annotated_tag", False) - or bool(self.config.settings.get("annotated_tag", False)), + or bool(self.config.settings.get("annotated_tag", False)) + or self.bump_settings.get("annotated_tag_message", False), msg=self.bump_settings.get("annotated_tag_message", None), # TODO: also get from self.config.settings? ) From ac81729446ab8f2bf36cbff3ef5d595ed9c03960 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20Allebrandt=20Sch=C3=BCnemann?= <aluishenrique01@gmail.com> Date: Mon, 5 Dec 2022 08:54:00 -0300 Subject: [PATCH 045/685] refactor(commands-bump): cast str to bool --- commitizen/commands/bump.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index a3095193b0..2aa1be0c21 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -367,7 +367,7 @@ def __call__(self): # noqa: C901 or bool(self.config.settings.get("gpg_sign", False)), annotated=self.bump_settings.get("annotated_tag", False) or bool(self.config.settings.get("annotated_tag", False)) - or self.bump_settings.get("annotated_tag_message", False), + or bool(self.bump_settings.get("annotated_tag_message", False)), msg=self.bump_settings.get("annotated_tag_message", None), # TODO: also get from self.config.settings? ) From ded3a95440123448fe64786223453c6cd27521bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20Allebrandt=20Sch=C3=BCnemann?= <aluishenrique01@gmail.com> Date: Mon, 5 Dec 2022 08:55:22 -0300 Subject: [PATCH 046/685] refactor(commands-bump): make changelog variable in 1 line --- commitizen/commands/bump.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 2aa1be0c21..af365ecd28 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -198,8 +198,7 @@ def __call__(self): # noqa: C901 # If user specified changelog_to_stdout, they probably want the # changelog to be generated as well, this is the most intuitive solution - if not self.changelog and self.changelog_to_stdout: - self.changelog = True + self.changelog = self.changelog or bool(self.changelog_to_stdout) # No commits, there is no need to create an empty tag. # Unless we previously had a prerelease. From b99b6d8bf392d85a3431ce837cd0a617d6d9d4fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20Allebrandt=20Sch=C3=BCnemann?= <aluishenrique01@gmail.com> Date: Wed, 14 Dec 2022 00:31:22 -0300 Subject: [PATCH 047/685] test(git): fix tag with message test --- tests/test_git.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_git.py b/tests/test_git.py index 2985f3bfdf..abee634fd7 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -248,4 +248,4 @@ def test_create_tag_with_message(tmp_commitizen_project): tag_message = "test message" create_tag(tag_name, tag_message) assert git.get_latest_tag_name() == tag_name - assert git.get_tag_message(tag_name) == f"'{tag_message}'" + assert git.get_tag_message(tag_name) == tag_message From 79418335f53f23ab1ceeb17b61d3818eb4b142cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20Allebrandt=20Sch=C3=BCnemann?= <aluishenrique01@gmail.com> Date: Thu, 29 Dec 2022 21:57:25 -0300 Subject: [PATCH 048/685] fix(test-bump-command): typo in --annotated-tag option inside test --- tests/commands/test_bump_command.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 0ae7d1e509..774ec0a95f 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -673,7 +673,7 @@ def test_bump_with_git_to_stdout_arg(mocker: MockFixture, capsys, changelog_path "bump", "--changelog", "--changelog-to-stdout", - "--annotated", + "--annotated-tag", "--check-consistency", "--yes", ), From 4785100d5ad8695329b1a2dd11ac84d76c9a9119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20Allebrandt=20Sch=C3=BCnemann?= <aluishenrique01@gmail.com> Date: Thu, 29 Dec 2022 22:05:08 -0300 Subject: [PATCH 049/685] test(git): different output for tag message on Windows --- tests/test_git.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/test_git.py b/tests/test_git.py index abee634fd7..4ae11a45dd 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -2,6 +2,7 @@ import inspect import os +import platform import shutil import pytest @@ -248,4 +249,6 @@ def test_create_tag_with_message(tmp_commitizen_project): tag_message = "test message" create_tag(tag_name, tag_message) assert git.get_latest_tag_name() == tag_name - assert git.get_tag_message(tag_name) == tag_message + assert git.get_tag_message(tag_name) == ( + tag_message if platform.system() != "Windows" else f"'{tag_message}'" + ) From 3fd0779b16bd0af94bd0490734d9195f0477a7a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Henrique=20A=2E=20Sch=C3=BCnemann?= <44511825+LuisHenri@users.noreply.github.com> Date: Sat, 29 Jul 2023 14:50:32 -0300 Subject: [PATCH 050/685] docs: accept type hint suggestions Co-authored-by: Wei Lee <weilee.rx@gmail.com> --- tests/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/utils.py b/tests/utils.py index 20d2d2264d..08d4414ba3 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -55,7 +55,7 @@ def get_current_branch() -> str: return c.out -def create_tag(tag: str, message: str | None = None): +def create_tag(tag: str, message: str | None = None) -> None: c = git.tag(tag, annotated=(message is not None), msg=message) if c.return_code != 0: raise exceptions.CommitError(c.err) From 9a0164c8179b96b6a7972298a3adc7ba793faedc Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Mon, 6 Nov 2023 22:55:09 +0800 Subject: [PATCH 051/685] docs(git): add comment for not able to create a lightweight tag with message --- commitizen/git.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/commitizen/git.py b/commitizen/git.py index 45b5d0c7a1..4c4dfdb961 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -91,6 +91,9 @@ def tag( if signed: _opt = f"-s {tag} -m" + # according to https://git-scm.com/book/en/v2/Git-Basics-Tagging, + # we're not able to create lightweight tag with message. + # by adding message, we make it a annotated tags c = cmd.run(f'git tag {_opt} "{tag if _opt == "" or msg is None else msg}"') return c From a49bd916fee4aced4ff753dba77b9e2724238a23 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 3 Dec 2023 10:37:30 +0800 Subject: [PATCH 052/685] docs(github): add maintainers as codeowners --- .github/CODEOWNERS | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000000..0870e6ebb2 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,3 @@ +@woile +@Lee-W +@noirbizarre From a35591485dae4eadc30291fcb676169c209604a4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sun, 3 Dec 2023 14:04:35 +0000 Subject: [PATCH 053/685] =?UTF-8?q?bump:=20version=203.12.0=20=E2=86=92=20?= =?UTF-8?q?3.13.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 19 +++++++++++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d6c156a530..33bebc75cf 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.12.0 # automatically updated by Commitizen + rev: v3.13.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b6be177f1..88039eaf85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,23 @@ +## v3.13.0 (2023-12-03) + +### Feat + +- **commands-bump**: automatically create annotated tag if message is given +- add tag message argument to cli +- **git**: add get tag message function +- add custom message to annotated git tag + +### Fix + +- **test-bump-command**: typo in --annotated-tag option inside test +- **commitizen-git**: add quotes for tag message + +### Refactor + +- **commands-bump**: make changelog variable in 1 line +- **commands-bump**: cast str to bool + ## v3.12.0 (2023-10-18) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index d1a7f1e0d2..62ee17b836 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.12.0" +__version__ = "3.13.0" diff --git a/pyproject.toml b/pyproject.toml index 3dc780baf0..eb69e9dec9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.12.0" +version = "3.13.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.12.0" +version = "3.13.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 06e3b4c70067ca53a0f29a0f4603dab14524de11 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 3 Dec 2023 13:00:36 +0800 Subject: [PATCH 054/685] ci(github-actions): fix release step tag name and use ncipollo/release-action@v1 Closes: #923 --- .github/workflows/bumpversion.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/bumpversion.yml b/.github/workflows/bumpversion.yml index 86a379ef20..f3ce05ecc6 100644 --- a/.github/workflows/bumpversion.yml +++ b/.github/workflows/bumpversion.yml @@ -27,9 +27,7 @@ jobs: github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} changelog_increment_filename: body.md - name: Release - uses: softprops/action-gh-release@v1 + uses: ncipollo/release-action@v1 with: - body_path: "body.md" - tag_name: ${{ env.REVISION }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + tag: v${{ env.REVISION }} + bodyFile: "body.md" From e0af369042f0f7384e884acd443a72be4b093bd7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 01:56:14 +0000 Subject: [PATCH 055/685] build(deps): bump argcomplete from 3.1.4 to 3.2.1 Bumps [argcomplete](https://github.com/kislyuk/argcomplete) from 3.1.4 to 3.2.1. - [Release notes](https://github.com/kislyuk/argcomplete/releases) - [Changelog](https://github.com/kislyuk/argcomplete/blob/develop/Changes.rst) - [Commits](https://github.com/kislyuk/argcomplete/compare/v3.1.4...v3.2.1) --- updated-dependencies: - dependency-name: argcomplete dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2f22891a31..23ac40a6ed 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "argcomplete" -version = "3.1.4" +version = "3.2.1" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.1.4-py3-none-any.whl", hash = "sha256:fbe56f8cda08aa9a04b307d8482ea703e96a6a801611acb4be9bf3942017989f"}, - {file = "argcomplete-3.1.4.tar.gz", hash = "sha256:72558ba729e4c468572609817226fb0a6e7e9a0a7d477b882be168c0b4a62b94"}, + {file = "argcomplete-3.2.1-py3-none-any.whl", hash = "sha256:30891d87f3c1abe091f2142613c9d33cac84a5e15404489f033b20399b691fec"}, + {file = "argcomplete-3.2.1.tar.gz", hash = "sha256:437f67fb9b058da5a090df505ef9be0297c4883993f3f56cb186ff087778cfb4"}, ] [package.extras] @@ -1768,4 +1768,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "56abcd89fe754b25b325526988664752aa8e53c5339d3ddae12978162b8e57b9" +content-hash = "29e446da6af6f9b07dad6535fc2073109a32f65653e5f50fa07c2fda3a39fa45" diff --git a/pyproject.toml b/pyproject.toml index eb69e9dec9..315308d37e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,7 +42,7 @@ packaging = ">=19" tomlkit = ">=0.5.3,<1.0.0" jinja2 = ">=2.10.3" pyyaml = ">=3.08" -argcomplete = ">=1.12.1,<3.2" +argcomplete = ">=1.12.1,<3.3" typing-extensions = { version = "^4.0.1", python = "<3.8" } charset-normalizer = ">=2.1.0,<4" # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility From a4975fceeb7c704fbfe69436ed647b2fe4d66e44 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 01:49:01 +0000 Subject: [PATCH 056/685] ci(deps): bump actions/labeler from 4 to 5 Bumps [actions/labeler](https://github.com/actions/labeler) from 4 to 5. - [Release notes](https://github.com/actions/labeler/releases) - [Commits](https://github.com/actions/labeler/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/labeler dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- .github/workflows/label_pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/label_pr.yml b/.github/workflows/label_pr.yml index 780ad5088c..61acf53642 100644 --- a/.github/workflows/label_pr.yml +++ b/.github/workflows/label_pr.yml @@ -9,4 +9,4 @@ jobs: pull-requests: write runs-on: ubuntu-latest steps: - - uses: actions/labeler@v4 + - uses: actions/labeler@v5 From c3b7d07ca0ccf12ed59e878e856857916f529741 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Dec 2023 01:11:27 +0000 Subject: [PATCH 057/685] ci(deps): bump actions/setup-python from 4 to 5 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- .github/workflows/docspublish.yml | 2 +- .github/workflows/homebrewpublish.yml | 2 +- .github/workflows/pythonpackage.yml | 2 +- .github/workflows/pythonpublish.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml index efa7873091..9ffbbf816e 100644 --- a/.github/workflows/docspublish.yml +++ b/.github/workflows/docspublish.yml @@ -14,7 +14,7 @@ jobs: token: '${{ secrets.PERSONAL_ACCESS_TOKEN }}' fetch-depth: 0 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.x' - name: Install dependencies diff --git a/.github/workflows/homebrewpublish.yml b/.github/workflows/homebrewpublish.yml index 5d193c5ed7..a2610229bc 100644 --- a/.github/workflows/homebrewpublish.yml +++ b/.github/workflows/homebrewpublish.yml @@ -14,7 +14,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.x' - name: Install dependencies diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index ad4f8b5ab1..00ab9a765d 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -14,7 +14,7 @@ jobs: with: fetch-depth: 0 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/.github/workflows/pythonpublish.yml b/.github/workflows/pythonpublish.yml index 468a452cb5..f31691a50b 100644 --- a/.github/workflows/pythonpublish.yml +++ b/.github/workflows/pythonpublish.yml @@ -14,7 +14,7 @@ jobs: token: '${{ secrets.PERSONAL_ACCESS_TOKEN }}' fetch-depth: 0 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.x' - name: Install dependencies From dbccc9bdf0b2a3513353ab264f9a24f6472dfed9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 01:28:49 +0000 Subject: [PATCH 058/685] build(deps-dev): bump pytest-xdist from 3.3.1 to 3.5.0 Bumps [pytest-xdist](https://github.com/pytest-dev/pytest-xdist) from 3.3.1 to 3.5.0. - [Release notes](https://github.com/pytest-dev/pytest-xdist/releases) - [Changelog](https://github.com/pytest-dev/pytest-xdist/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-xdist/compare/v3.3.1...v3.5.0) --- updated-dependencies: - dependency-name: pytest-xdist dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 23ac40a6ed..efbec9c84f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1153,13 +1153,13 @@ num = ["numpy", "pandas"] [[package]] name = "pytest-xdist" -version = "3.3.1" +version = "3.5.0" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-xdist-3.3.1.tar.gz", hash = "sha256:d5ee0520eb1b7bcca50a60a518ab7a7707992812c578198f8b44fdfac78e8c93"}, - {file = "pytest_xdist-3.3.1-py3-none-any.whl", hash = "sha256:ff9daa7793569e6a68544850fd3927cd257cc03a7ef76c95e86915355e82b5f2"}, + {file = "pytest-xdist-3.5.0.tar.gz", hash = "sha256:cbb36f3d67e0c478baa57fa4edc8843887e0f6cfc42d677530a36d7472b32d8a"}, + {file = "pytest_xdist-3.5.0-py3-none-any.whl", hash = "sha256:d075629c7e00b611df89f490a5063944bee7a4362a5ff11c7cc7824a03dfce24"}, ] [package.dependencies] From e76857eb63de2714c2cad07b2042cd12b6cc1974 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 01:28:05 +0000 Subject: [PATCH 059/685] build(deps-dev): bump mypy from 1.6.1 to 1.7.1 Bumps [mypy](https://github.com/python/mypy) from 1.6.1 to 1.7.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.6.1...v1.7.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 57 +++++++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index efbec9c84f..55cab89c85 100644 --- a/poetry.lock +++ b/poetry.lock @@ -783,38 +783,38 @@ files = [ [[package]] name = "mypy" -version = "1.6.1" +version = "1.7.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5012e5cc2ac628177eaac0e83d622b2dd499e28253d4107a08ecc59ede3fc2c"}, - {file = "mypy-1.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8fbb68711905f8912e5af474ca8b78d077447d8f3918997fecbf26943ff3cbb"}, - {file = "mypy-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a1ad938fee7d2d96ca666c77b7c494c3c5bd88dff792220e1afbebb2925b5e"}, - {file = "mypy-1.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b96ae2c1279d1065413965c607712006205a9ac541895004a1e0d4f281f2ff9f"}, - {file = "mypy-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:40b1844d2e8b232ed92e50a4bd11c48d2daa351f9deee6c194b83bf03e418b0c"}, - {file = "mypy-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81af8adaa5e3099469e7623436881eff6b3b06db5ef75e6f5b6d4871263547e5"}, - {file = "mypy-1.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8c223fa57cb154c7eab5156856c231c3f5eace1e0bed9b32a24696b7ba3c3245"}, - {file = "mypy-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8032e00ce71c3ceb93eeba63963b864bf635a18f6c0c12da6c13c450eedb183"}, - {file = "mypy-1.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c46b51de523817a0045b150ed11b56f9fff55f12b9edd0f3ed35b15a2809de0"}, - {file = "mypy-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:19f905bcfd9e167159b3d63ecd8cb5e696151c3e59a1742e79bc3bcb540c42c7"}, - {file = "mypy-1.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:82e469518d3e9a321912955cc702d418773a2fd1e91c651280a1bda10622f02f"}, - {file = "mypy-1.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4473c22cc296425bbbce7e9429588e76e05bc7342da359d6520b6427bf76660"}, - {file = "mypy-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a0d7d24dfb26729e0a068639a6ce3500e31d6655df8557156c51c1cb874ce7"}, - {file = "mypy-1.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cfd13d47b29ed3bbaafaff7d8b21e90d827631afda134836962011acb5904b71"}, - {file = "mypy-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:eb4f18589d196a4cbe5290b435d135dee96567e07c2b2d43b5c4621b6501531a"}, - {file = "mypy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41697773aa0bf53ff917aa077e2cde7aa50254f28750f9b88884acea38a16169"}, - {file = "mypy-1.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7274b0c57737bd3476d2229c6389b2ec9eefeb090bbaf77777e9d6b1b5a9d143"}, - {file = "mypy-1.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbaf4662e498c8c2e352da5f5bca5ab29d378895fa2d980630656178bd607c46"}, - {file = "mypy-1.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bb8ccb4724f7d8601938571bf3f24da0da791fe2db7be3d9e79849cb64e0ae85"}, - {file = "mypy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:68351911e85145f582b5aa6cd9ad666c8958bcae897a1bfda8f4940472463c45"}, - {file = "mypy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49ae115da099dcc0922a7a895c1eec82c1518109ea5c162ed50e3b3594c71208"}, - {file = "mypy-1.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b27958f8c76bed8edaa63da0739d76e4e9ad4ed325c814f9b3851425582a3cd"}, - {file = "mypy-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:925cd6a3b7b55dfba252b7c4561892311c5358c6b5a601847015a1ad4eb7d332"}, - {file = "mypy-1.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8f57e6b6927a49550da3d122f0cb983d400f843a8a82e65b3b380d3d7259468f"}, - {file = "mypy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a43ef1c8ddfdb9575691720b6352761f3f53d85f1b57d7745701041053deff30"}, - {file = "mypy-1.6.1-py3-none-any.whl", hash = "sha256:4cbe68ef919c28ea561165206a2dcb68591c50f3bcf777932323bc208d949cf1"}, - {file = "mypy-1.6.1.tar.gz", hash = "sha256:4d01c00d09a0be62a4ca3f933e315455bde83f37f892ba4b08ce92f3cf44bcc1"}, + {file = "mypy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12cce78e329838d70a204293e7b29af9faa3ab14899aec397798a4b41be7f340"}, + {file = "mypy-1.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1484b8fa2c10adf4474f016e09d7a159602f3239075c7bf9f1627f5acf40ad49"}, + {file = "mypy-1.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31902408f4bf54108bbfb2e35369877c01c95adc6192958684473658c322c8a5"}, + {file = "mypy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f2c2521a8e4d6d769e3234350ba7b65ff5d527137cdcde13ff4d99114b0c8e7d"}, + {file = "mypy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:fcd2572dd4519e8a6642b733cd3a8cfc1ef94bafd0c1ceed9c94fe736cb65b6a"}, + {file = "mypy-1.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b901927f16224d0d143b925ce9a4e6b3a758010673eeded9b748f250cf4e8f7"}, + {file = "mypy-1.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2f7f6985d05a4e3ce8255396df363046c28bea790e40617654e91ed580ca7c51"}, + {file = "mypy-1.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:944bdc21ebd620eafefc090cdf83158393ec2b1391578359776c00de00e8907a"}, + {file = "mypy-1.7.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9c7ac372232c928fff0645d85f273a726970c014749b924ce5710d7d89763a28"}, + {file = "mypy-1.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:f6efc9bd72258f89a3816e3a98c09d36f079c223aa345c659622f056b760ab42"}, + {file = "mypy-1.7.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6dbdec441c60699288adf051f51a5d512b0d818526d1dcfff5a41f8cd8b4aaf1"}, + {file = "mypy-1.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4fc3d14ee80cd22367caaaf6e014494415bf440980a3045bf5045b525680ac33"}, + {file = "mypy-1.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c6e4464ed5f01dc44dc9821caf67b60a4e5c3b04278286a85c067010653a0eb"}, + {file = "mypy-1.7.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:d9b338c19fa2412f76e17525c1b4f2c687a55b156320acb588df79f2e6fa9fea"}, + {file = "mypy-1.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:204e0d6de5fd2317394a4eff62065614c4892d5a4d1a7ee55b765d7a3d9e3f82"}, + {file = "mypy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:84860e06ba363d9c0eeabd45ac0fde4b903ad7aa4f93cd8b648385a888e23200"}, + {file = "mypy-1.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8c5091ebd294f7628eb25ea554852a52058ac81472c921150e3a61cdd68f75a7"}, + {file = "mypy-1.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40716d1f821b89838589e5b3106ebbc23636ffdef5abc31f7cd0266db936067e"}, + {file = "mypy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cf3f0c5ac72139797953bd50bc6c95ac13075e62dbfcc923571180bebb662e9"}, + {file = "mypy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:78e25b2fd6cbb55ddfb8058417df193f0129cad5f4ee75d1502248e588d9e0d7"}, + {file = "mypy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75c4d2a6effd015786c87774e04331b6da863fc3fc4e8adfc3b40aa55ab516fe"}, + {file = "mypy-1.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2643d145af5292ee956aa0a83c2ce1038a3bdb26e033dadeb2f7066fb0c9abce"}, + {file = "mypy-1.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75aa828610b67462ffe3057d4d8a4112105ed211596b750b53cbfe182f44777a"}, + {file = "mypy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ee5d62d28b854eb61889cde4e1dbc10fbaa5560cb39780c3995f6737f7e82120"}, + {file = "mypy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:72cf32ce7dd3562373f78bd751f73c96cfb441de147cc2448a92c1a308bd0ca6"}, + {file = "mypy-1.7.1-py3-none-any.whl", hash = "sha256:f7c5d642db47376a0cc130f0de6d055056e010debdaf0707cd2b0fc7e7ef30ea"}, + {file = "mypy-1.7.1.tar.gz", hash = "sha256:fcb6d9afb1b6208b4c712af0dafdc650f518836065df0d4fb1d800f5d6773db2"}, ] [package.dependencies] @@ -825,6 +825,7 @@ typing-extensions = ">=4.1.0" [package.extras] dmypy = ["psutil (>=4.0)"] install-types = ["pip"] +mypyc = ["setuptools (>=50)"] reports = ["lxml"] [[package]] From 8fba6de727591b6d2542577e8182ce2b4d9f5086 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 3 Dec 2023 13:11:06 +0800 Subject: [PATCH 060/685] ci(github-actions): fix laber-pr by adding necessary checkout step --- .github/workflows/label_pr.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/label_pr.yml b/.github/workflows/label_pr.yml index 61acf53642..ef55419654 100644 --- a/.github/workflows/label_pr.yml +++ b/.github/workflows/label_pr.yml @@ -9,4 +9,5 @@ jobs: pull-requests: write runs-on: ubuntu-latest steps: + - uses: actions/checkout@v4 - uses: actions/labeler@v5 From 5b143e893e2f0009de745bdb58670d7de2a3fd9e Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 3 Dec 2023 10:26:44 +0800 Subject: [PATCH 061/685] docs(changelog): remove duplicate versions --- CHANGELOG.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88039eaf85..c071ba9075 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,8 +30,6 @@ - **filename**: ensure `file_name` can be passed to `changelog` from `bump` command -## 3.11.0 (2023-10-17) - ## v3.11.0 (2023-10-17) ### Feat @@ -64,8 +62,6 @@ - **conf**: handle parse error when init (#856) -## 3.9.0 (2023-09-15) - ## v3.9.0 (2023-09-15) ### Feat @@ -99,8 +95,6 @@ - **defaults.py**: add always_signoff config option for commits -## 3.7.1 (2023-09-04) - ## v3.7.1 (2023-09-04) ### Fix From 132f03669244243f77f17bcb4ef59cf497c373ab Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 3 Dec 2023 10:49:08 +0800 Subject: [PATCH 062/685] build(poetry): update dependencies, relax black and ruff constraint --- poetry.lock | 781 ++++++++++++++++++++++++------------------------- pyproject.toml | 5 +- 2 files changed, 380 insertions(+), 406 deletions(-) diff --git a/poetry.lock b/poetry.lock index 55cab89c85..138f50baaa 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "appnope" @@ -13,13 +13,13 @@ files = [ [[package]] name = "argcomplete" -version = "3.2.1" +version = "3.1.6" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.2.1-py3-none-any.whl", hash = "sha256:30891d87f3c1abe091f2142613c9d33cac84a5e15404489f033b20399b691fec"}, - {file = "argcomplete-3.2.1.tar.gz", hash = "sha256:437f67fb9b058da5a090df505ef9be0297c4883993f3f56cb186ff087778cfb4"}, + {file = "argcomplete-3.1.6-py3-none-any.whl", hash = "sha256:71f4683bc9e6b0be85f2b2c1224c47680f210903e23512cfebfe5a41edfd883a"}, + {file = "argcomplete-3.1.6.tar.gz", hash = "sha256:3b1f07d133332547a53c79437527c00be48cca3807b1d4ca5cab1b26313386a6"}, ] [package.extras] @@ -27,34 +27,39 @@ test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] [[package]] name = "asttokens" -version = "2.4.0" +version = "2.4.1" description = "Annotate AST trees with source code positions" optional = false python-versions = "*" files = [ - {file = "asttokens-2.4.0-py2.py3-none-any.whl", hash = "sha256:cf8fc9e61a86461aa9fb161a14a0841a03c405fa829ac6b202670b3495d2ce69"}, - {file = "asttokens-2.4.0.tar.gz", hash = "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e"}, + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, ] [package.dependencies] six = ">=1.12.0" [package.extras] -test = ["astroid", "pytest"] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] [[package]] name = "babel" -version = "2.12.1" +version = "2.13.1" description = "Internationalization utilities" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, + {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, + {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, ] [package.dependencies] pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} +setuptools = {version = "*", markers = "python_version >= \"3.12\""} + +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] name = "backcall" @@ -69,29 +74,29 @@ files = [ [[package]] name = "black" -version = "23.10.1" +version = "23.11.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.10.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:ec3f8e6234c4e46ff9e16d9ae96f4ef69fa328bb4ad08198c8cee45bb1f08c69"}, - {file = "black-23.10.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:1b917a2aa020ca600483a7b340c165970b26e9029067f019e3755b56e8dd5916"}, - {file = "black-23.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c74de4c77b849e6359c6f01987e94873c707098322b91490d24296f66d067dc"}, - {file = "black-23.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4d10b0f016616a0d93d24a448100adf1699712fb7a4efd0e2c32bbb219b173"}, - {file = "black-23.10.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b15b75fc53a2fbcac8a87d3e20f69874d161beef13954747e053bca7a1ce53a0"}, - {file = "black-23.10.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:e293e4c2f4a992b980032bbd62df07c1bcff82d6964d6c9496f2cd726e246ace"}, - {file = "black-23.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d56124b7a61d092cb52cce34182a5280e160e6aff3137172a68c2c2c4b76bcb"}, - {file = "black-23.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:3f157a8945a7b2d424da3335f7ace89c14a3b0625e6593d21139c2d8214d55ce"}, - {file = "black-23.10.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:cfcce6f0a384d0da692119f2d72d79ed07c7159879d0bb1bb32d2e443382bf3a"}, - {file = "black-23.10.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:33d40f5b06be80c1bbce17b173cda17994fbad096ce60eb22054da021bf933d1"}, - {file = "black-23.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:840015166dbdfbc47992871325799fd2dc0dcf9395e401ada6d88fe11498abad"}, - {file = "black-23.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:037e9b4664cafda5f025a1728c50a9e9aedb99a759c89f760bd83730e76ba884"}, - {file = "black-23.10.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:7cb5936e686e782fddb1c73f8aa6f459e1ad38a6a7b0e54b403f1f05a1507ee9"}, - {file = "black-23.10.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:7670242e90dc129c539e9ca17665e39a146a761e681805c54fbd86015c7c84f7"}, - {file = "black-23.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed45ac9a613fb52dad3b61c8dea2ec9510bf3108d4db88422bacc7d1ba1243d"}, - {file = "black-23.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6d23d7822140e3fef190734216cefb262521789367fbdc0b3f22af6744058982"}, - {file = "black-23.10.1-py3-none-any.whl", hash = "sha256:d431e6739f727bb2e0495df64a6c7a5310758e87505f5f8cde9ff6c0f2d7e4fe"}, - {file = "black-23.10.1.tar.gz", hash = "sha256:1f8ce316753428ff68749c65a5f7844631aa18c8679dfd3ca9dc1a289979c258"}, + {file = "black-23.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbea0bb8575c6b6303cc65017b46351dc5953eea5c0a59d7b7e3a2d2f433a911"}, + {file = "black-23.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:412f56bab20ac85927f3a959230331de5614aecda1ede14b373083f62ec24e6f"}, + {file = "black-23.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d136ef5b418c81660ad847efe0e55c58c8208b77a57a28a503a5f345ccf01394"}, + {file = "black-23.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:6c1cac07e64433f646a9a838cdc00c9768b3c362805afc3fce341af0e6a9ae9f"}, + {file = "black-23.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf57719e581cfd48c4efe28543fea3d139c6b6f1238b3f0102a9c73992cbb479"}, + {file = "black-23.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:698c1e0d5c43354ec5d6f4d914d0d553a9ada56c85415700b81dc90125aac244"}, + {file = "black-23.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760415ccc20f9e8747084169110ef75d545f3b0932ee21368f63ac0fee86b221"}, + {file = "black-23.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:58e5f4d08a205b11800332920e285bd25e1a75c54953e05502052738fe16b3b5"}, + {file = "black-23.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:45aa1d4675964946e53ab81aeec7a37613c1cb71647b5394779e6efb79d6d187"}, + {file = "black-23.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c44b7211a3a0570cc097e81135faa5f261264f4dfaa22bd5ee2875a4e773bd6"}, + {file = "black-23.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a9acad1451632021ee0d146c8765782a0c3846e0e0ea46659d7c4f89d9b212b"}, + {file = "black-23.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:fc7f6a44d52747e65a02558e1d807c82df1d66ffa80a601862040a43ec2e3142"}, + {file = "black-23.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f622b6822f02bfaf2a5cd31fdb7cd86fcf33dab6ced5185c35f5db98260b055"}, + {file = "black-23.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:250d7e60f323fcfc8ea6c800d5eba12f7967400eb6c2d21ae85ad31c204fb1f4"}, + {file = "black-23.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5133f5507007ba08d8b7b263c7aa0f931af5ba88a29beacc4b2dc23fcefe9c06"}, + {file = "black-23.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:421f3e44aa67138ab1b9bfbc22ee3780b22fa5b291e4db8ab7eee95200726b07"}, + {file = "black-23.11.0-py3-none-any.whl", hash = "sha256:54caaa703227c6e0c87b76326d0862184729a69b73d3b7305b6288e1d830067e"}, + {file = "black-23.11.0.tar.gz", hash = "sha256:4c68855825ff432d197229846f971bc4d6666ce90492e5b02013bcaca4d9ab05"}, ] [package.dependencies] @@ -111,24 +116,24 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2023.7.22" +version = "2023.11.17" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, ] [[package]] name = "cfgv" -version = "3.3.1" +version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.8" files = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, ] [[package]] @@ -257,71 +262,63 @@ files = [ [[package]] name = "coverage" -version = "7.2.7" +version = "7.3.2" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, - {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, - {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, - {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, - {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, - {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, - {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, - {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, - {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, - {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, - {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, - {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, - {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, - {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, - {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, - {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, - {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, - {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, + {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, + {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, + {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, + {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, + {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, + {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, + {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, + {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, + {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, + {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, + {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, + {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, + {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, + {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, ] [package.dependencies] @@ -382,13 +379,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.3" +version = "1.2.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, ] [package.extras] @@ -410,32 +407,33 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "executing" -version = "1.2.0" +version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" optional = false -python-versions = "*" +python-versions = ">=3.5" files = [ - {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, - {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"}, + {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, + {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, ] [package.extras] -tests = ["asttokens", "littleutils", "pytest", "rich"] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] [[package]] name = "filelock" -version = "3.12.2" +version = "3.13.1" description = "A platform independent file lock." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, + {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, + {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] [[package]] name = "freezegun" @@ -470,13 +468,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "identify" -version = "2.5.24" +version = "2.5.32" description = "File identification library for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, - {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, + {file = "identify-2.5.32-py2.py3-none-any.whl", hash = "sha256:0b7656ef6cba81664b783352c73f8c24b39cf82f926f78f4550eda928e5e0545"}, + {file = "identify-2.5.32.tar.gz", hash = "sha256:5d9979348ec1a21c768ae07e0a652924538e8bce67313a73cb0f681cf08ba407"}, ] [package.extras] @@ -484,31 +482,31 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] name = "importlib-metadata" -version = "6.8.0" +version = "6.9.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, + {file = "importlib_metadata-6.9.0-py3-none-any.whl", hash = "sha256:1c8dc6839ddc9771412596926f24cb5a553bbd40624ee2c7e55e531542bed3b8"}, + {file = "importlib_metadata-6.9.0.tar.gz", hash = "sha256:e8acb523c335a91822674e149b46c0399ec4d328c4d1f6e49c273da5ff0201b9"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] @@ -564,13 +562,13 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa [[package]] name = "jedi" -version = "0.19.0" +version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, - {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, ] [package.dependencies] @@ -579,7 +577,7 @@ parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" @@ -600,20 +598,20 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "markdown" -version = "3.4.4" +version = "3.5.1" description = "Python implementation of John Gruber's Markdown." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Markdown-3.4.4-py3-none-any.whl", hash = "sha256:a4c1b65c0957b4bd9e7d86ddc7b3c9868fb9670660f6f99f6d1bca8954d5a941"}, - {file = "Markdown-3.4.4.tar.gz", hash = "sha256:225c6123522495d4119a90b3a3ba31a1e87a70369e03f14799ea9c0d7183a3d6"}, + {file = "Markdown-3.5.1-py3-none-any.whl", hash = "sha256:5874b47d4ee3f0b14d764324d2c94c03ea66bee56f2d929da9f2508d65e722dc"}, + {file = "Markdown-3.5.1.tar.gz", hash = "sha256:b65d7beb248dc22f2e8a31fb706d93798093c308dc1aba295aedeb9d41a813bd"}, ] [package.dependencies] importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} [package.extras] -docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.0)", "mkdocs-nature (>=0.4)"] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] [[package]] @@ -643,16 +641,6 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -902,13 +890,13 @@ files = [ [[package]] name = "pexpect" -version = "4.8.0" +version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, ] [package.dependencies] @@ -927,13 +915,13 @@ files = [ [[package]] name = "platformdirs" -version = "3.10.0" +version = "4.0.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"}, + {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"}, ] [package.extras] @@ -942,13 +930,13 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co [[package]] name = "pluggy" -version = "1.2.0" +version = "1.3.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, ] [package.extras] @@ -1014,31 +1002,32 @@ tests = ["pytest"] [[package]] name = "pygments" -version = "2.16.1" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.2.1" +version = "10.5" description = "Extension pack for Python Markdown." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.2.1-py3-none-any.whl", hash = "sha256:bded105eb8d93f88f2f821f00108cb70cef1269db6a40128c09c5f48bfc60ea4"}, - {file = "pymdown_extensions-10.2.1.tar.gz", hash = "sha256:d0c534b4a5725a4be7ccef25d65a4c97dba58b54ad7c813babf0eb5ba9c81591"}, + {file = "pymdown_extensions-10.5-py3-none-any.whl", hash = "sha256:1f0ca8bb5beff091315f793ee17683bc1390731f6ac4c5eb01e27464b80fe879"}, + {file = "pymdown_extensions-10.5.tar.gz", hash = "sha256:1b60f1e462adbec5a1ed79dac91f666c9c0d241fa294de1989f29d20096cfd0b"}, ] [package.dependencies] -markdown = ">=3.2" +markdown = ">=3.5" pyyaml = "*" [package.extras] @@ -1086,13 +1075,13 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale [[package]] name = "pytest-datadir" -version = "1.4.1" +version = "1.5.0" description = "pytest plugin for test data directories and files" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pytest-datadir-1.4.1.tar.gz", hash = "sha256:9f7a3c4def6ac4cac3cc8181139ab53bd2667231052bd40cb07081748d4420f0"}, - {file = "pytest_datadir-1.4.1-py3-none-any.whl", hash = "sha256:095f441782b1b907587eca7227fdbae94be43f1c96b4b2cbcc6801a4645be1af"}, + {file = "pytest-datadir-1.5.0.tar.gz", hash = "sha256:1617ed92f9afda0c877e4eac91904b5f779d24ba8f5e438752e3ae39d8d2ee3f"}, + {file = "pytest_datadir-1.5.0-py3-none-any.whl", hash = "sha256:34adf361bcc7b37961bbc1dfa8d25a4829e778bab461703c38a5c50ca9c36dc8"}, ] [package.dependencies] @@ -1188,13 +1177,13 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2023.3" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] @@ -1209,7 +1198,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1217,15 +1205,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -1242,7 +1223,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -1250,7 +1230,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -1286,99 +1265,99 @@ prompt_toolkit = ">=2.0,<=3.0.36" [[package]] name = "regex" -version = "2022.10.31" +version = "2023.10.3" description = "Alternative regular expression module, to replace re." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "regex-2022.10.31-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a8ff454ef0bb061e37df03557afda9d785c905dab15584860f982e88be73015f"}, - {file = "regex-2022.10.31-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1eba476b1b242620c266edf6325b443a2e22b633217a9835a52d8da2b5c051f9"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0e5af9a9effb88535a472e19169e09ce750c3d442fb222254a276d77808620b"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d03fe67b2325cb3f09be029fd5da8df9e6974f0cde2c2ac6a79d2634e791dd57"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9d0b68ac1743964755ae2d89772c7e6fb0118acd4d0b7464eaf3921c6b49dd4"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a45b6514861916c429e6059a55cf7db74670eaed2052a648e3e4d04f070e001"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8b0886885f7323beea6f552c28bff62cbe0983b9fbb94126531693ea6c5ebb90"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5aefb84a301327ad115e9d346c8e2760009131d9d4b4c6b213648d02e2abe144"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:702d8fc6f25bbf412ee706bd73019da5e44a8400861dfff7ff31eb5b4a1276dc"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a3c1ebd4ed8e76e886507c9eddb1a891673686c813adf889b864a17fafcf6d66"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:50921c140561d3db2ab9f5b11c5184846cde686bb5a9dc64cae442926e86f3af"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:7db345956ecce0c99b97b042b4ca7326feeec6b75facd8390af73b18e2650ffc"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:763b64853b0a8f4f9cfb41a76a4a85a9bcda7fdda5cb057016e7706fde928e66"}, - {file = "regex-2022.10.31-cp310-cp310-win32.whl", hash = "sha256:44136355e2f5e06bf6b23d337a75386371ba742ffa771440b85bed367c1318d1"}, - {file = "regex-2022.10.31-cp310-cp310-win_amd64.whl", hash = "sha256:bfff48c7bd23c6e2aec6454aaf6edc44444b229e94743b34bdcdda2e35126cf5"}, - {file = "regex-2022.10.31-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b4b1fe58cd102d75ef0552cf17242705ce0759f9695334a56644ad2d83903fe"}, - {file = "regex-2022.10.31-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:542e3e306d1669b25936b64917285cdffcd4f5c6f0247636fec037187bd93542"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c27cc1e4b197092e50ddbf0118c788d9977f3f8f35bfbbd3e76c1846a3443df7"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8e38472739028e5f2c3a4aded0ab7eadc447f0d84f310c7a8bb697ec417229e"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:76c598ca73ec73a2f568e2a72ba46c3b6c8690ad9a07092b18e48ceb936e9f0c"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c28d3309ebd6d6b2cf82969b5179bed5fefe6142c70f354ece94324fa11bf6a1"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9af69f6746120998cd9c355e9c3c6aec7dff70d47247188feb4f829502be8ab4"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a5f9505efd574d1e5b4a76ac9dd92a12acb2b309551e9aa874c13c11caefbe4f"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5ff525698de226c0ca743bfa71fc6b378cda2ddcf0d22d7c37b1cc925c9650a5"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4fe7fda2fe7c8890d454f2cbc91d6c01baf206fbc96d89a80241a02985118c0c"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:2cdc55ca07b4e70dda898d2ab7150ecf17c990076d3acd7a5f3b25cb23a69f1c"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:44a6c2f6374e0033873e9ed577a54a3602b4f609867794c1a3ebba65e4c93ee7"}, - {file = "regex-2022.10.31-cp311-cp311-win32.whl", hash = "sha256:d8716f82502997b3d0895d1c64c3b834181b1eaca28f3f6336a71777e437c2af"}, - {file = "regex-2022.10.31-cp311-cp311-win_amd64.whl", hash = "sha256:61edbca89aa3f5ef7ecac8c23d975fe7261c12665f1d90a6b1af527bba86ce61"}, - {file = "regex-2022.10.31-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0a069c8483466806ab94ea9068c34b200b8bfc66b6762f45a831c4baaa9e8cdd"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d26166acf62f731f50bdd885b04b38828436d74e8e362bfcb8df221d868b5d9b"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac741bf78b9bb432e2d314439275235f41656e189856b11fb4e774d9f7246d81"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75f591b2055523fc02a4bbe598aa867df9e953255f0b7f7715d2a36a9c30065c"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bddd61d2a3261f025ad0f9ee2586988c6a00c780a2fb0a92cea2aa702c54"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef4163770525257876f10e8ece1cf25b71468316f61451ded1a6f44273eedeb5"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7b280948d00bd3973c1998f92e22aa3ecb76682e3a4255f33e1020bd32adf443"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:d0213671691e341f6849bf33cd9fad21f7b1cb88b89e024f33370733fec58742"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:22e7ebc231d28393dfdc19b185d97e14a0f178bedd78e85aad660e93b646604e"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:8ad241da7fac963d7573cc67a064c57c58766b62a9a20c452ca1f21050868dfa"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:586b36ebda81e6c1a9c5a5d0bfdc236399ba6595e1397842fd4a45648c30f35e"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:0653d012b3bf45f194e5e6a41df9258811ac8fc395579fa82958a8b76286bea4"}, - {file = "regex-2022.10.31-cp36-cp36m-win32.whl", hash = "sha256:144486e029793a733e43b2e37df16a16df4ceb62102636ff3db6033994711066"}, - {file = "regex-2022.10.31-cp36-cp36m-win_amd64.whl", hash = "sha256:c14b63c9d7bab795d17392c7c1f9aaabbffd4cf4387725a0ac69109fb3b550c6"}, - {file = "regex-2022.10.31-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4cac3405d8dda8bc6ed499557625585544dd5cbf32072dcc72b5a176cb1271c8"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23cbb932cc53a86ebde0fb72e7e645f9a5eec1a5af7aa9ce333e46286caef783"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74bcab50a13960f2a610cdcd066e25f1fd59e23b69637c92ad470784a51b1347"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78d680ef3e4d405f36f0d6d1ea54e740366f061645930072d39bca16a10d8c93"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce6910b56b700bea7be82c54ddf2e0ed792a577dfaa4a76b9af07d550af435c6"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:659175b2144d199560d99a8d13b2228b85e6019b6e09e556209dfb8c37b78a11"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1ddf14031a3882f684b8642cb74eea3af93a2be68893901b2b387c5fd92a03ec"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b683e5fd7f74fb66e89a1ed16076dbab3f8e9f34c18b1979ded614fe10cdc4d9"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2bde29cc44fa81c0a0c8686992c3080b37c488df167a371500b2a43ce9f026d1"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4919899577ba37f505aaebdf6e7dc812d55e8f097331312db7f1aab18767cce8"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:9c94f7cc91ab16b36ba5ce476f1904c91d6c92441f01cd61a8e2729442d6fcf5"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae1e96785696b543394a4e3f15f3f225d44f3c55dafe3f206493031419fedf95"}, - {file = "regex-2022.10.31-cp37-cp37m-win32.whl", hash = "sha256:c670f4773f2f6f1957ff8a3962c7dd12e4be54d05839b216cb7fd70b5a1df394"}, - {file = "regex-2022.10.31-cp37-cp37m-win_amd64.whl", hash = "sha256:8e0caeff18b96ea90fc0eb6e3bdb2b10ab5b01a95128dfeccb64a7238decf5f0"}, - {file = "regex-2022.10.31-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:131d4be09bea7ce2577f9623e415cab287a3c8e0624f778c1d955ec7c281bd4d"}, - {file = "regex-2022.10.31-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e613a98ead2005c4ce037c7b061f2409a1a4e45099edb0ef3200ee26ed2a69a8"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052b670fafbe30966bbe5d025e90b2a491f85dfe5b2583a163b5e60a85a321ad"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa62a07ac93b7cb6b7d0389d8ef57ffc321d78f60c037b19dfa78d6b17c928ee"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5352bea8a8f84b89d45ccc503f390a6be77917932b1c98c4cdc3565137acc714"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20f61c9944f0be2dc2b75689ba409938c14876c19d02f7585af4460b6a21403e"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29c04741b9ae13d1e94cf93fca257730b97ce6ea64cfe1eba11cf9ac4e85afb6"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:543883e3496c8b6d58bd036c99486c3c8387c2fc01f7a342b760c1ea3158a318"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7a8b43ee64ca8f4befa2bea4083f7c52c92864d8518244bfa6e88c751fa8fff"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6a9a19bea8495bb419dc5d38c4519567781cd8d571c72efc6aa959473d10221a"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6ffd55b5aedc6f25fd8d9f905c9376ca44fcf768673ffb9d160dd6f409bfda73"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4bdd56ee719a8f751cf5a593476a441c4e56c9b64dc1f0f30902858c4ef8771d"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ca88da1bd78990b536c4a7765f719803eb4f8f9971cc22d6ca965c10a7f2c4c"}, - {file = "regex-2022.10.31-cp38-cp38-win32.whl", hash = "sha256:5a260758454580f11dd8743fa98319bb046037dfab4f7828008909d0aa5292bc"}, - {file = "regex-2022.10.31-cp38-cp38-win_amd64.whl", hash = "sha256:5e6a5567078b3eaed93558842346c9d678e116ab0135e22eb72db8325e90b453"}, - {file = "regex-2022.10.31-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5217c25229b6a85049416a5c1e6451e9060a1edcf988641e309dbe3ab26d3e49"}, - {file = "regex-2022.10.31-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4bf41b8b0a80708f7e0384519795e80dcb44d7199a35d52c15cc674d10b3081b"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf0da36a212978be2c2e2e2d04bdff46f850108fccc1851332bcae51c8907cc"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d403d781b0e06d2922435ce3b8d2376579f0c217ae491e273bab8d092727d244"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a37d51fa9a00d265cf73f3de3930fa9c41548177ba4f0faf76e61d512c774690"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4f781ffedd17b0b834c8731b75cce2639d5a8afe961c1e58ee7f1f20b3af185"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d243b36fbf3d73c25e48014961e83c19c9cc92530516ce3c43050ea6276a2ab7"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:370f6e97d02bf2dd20d7468ce4f38e173a124e769762d00beadec3bc2f4b3bc4"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:597f899f4ed42a38df7b0e46714880fb4e19a25c2f66e5c908805466721760f5"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7dbdce0c534bbf52274b94768b3498abdf675a691fec5f751b6057b3030f34c1"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:22960019a842777a9fa5134c2364efaed5fbf9610ddc5c904bd3a400973b0eb8"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7f5a3ffc731494f1a57bd91c47dc483a1e10048131ffb52d901bfe2beb6102e8"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7ef6b5942e6bfc5706301a18a62300c60db9af7f6368042227ccb7eeb22d0892"}, - {file = "regex-2022.10.31-cp39-cp39-win32.whl", hash = "sha256:395161bbdbd04a8333b9ff9763a05e9ceb4fe210e3c7690f5e68cedd3d65d8e1"}, - {file = "regex-2022.10.31-cp39-cp39-win_amd64.whl", hash = "sha256:957403a978e10fb3ca42572a23e6f7badff39aa1ce2f4ade68ee452dc6807692"}, - {file = "regex-2022.10.31.tar.gz", hash = "sha256:a3a98921da9a1bf8457aeee6a551948a83601689e5ecdd736894ea9bbec77e83"}, + {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"}, + {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a"}, + {file = "regex-2023.10.3-cp310-cp310-win32.whl", hash = "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec"}, + {file = "regex-2023.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54"}, + {file = "regex-2023.10.3-cp311-cp311-win32.whl", hash = "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2"}, + {file = "regex-2023.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a"}, + {file = "regex-2023.10.3-cp312-cp312-win32.whl", hash = "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a"}, + {file = "regex-2023.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b"}, + {file = "regex-2023.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb"}, + {file = "regex-2023.10.3-cp37-cp37m-win32.whl", hash = "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a"}, + {file = "regex-2023.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4"}, + {file = "regex-2023.10.3-cp38-cp38-win32.whl", hash = "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d"}, + {file = "regex-2023.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48"}, + {file = "regex-2023.10.3-cp39-cp39-win32.whl", hash = "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd"}, + {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"}, + {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"}, ] [[package]] @@ -1404,45 +1383,45 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.0.292" -description = "An extremely fast Python linter, written in Rust." +version = "0.1.6" +description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.0.292-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:02f29db018c9d474270c704e6c6b13b18ed0ecac82761e4fcf0faa3728430c96"}, - {file = "ruff-0.0.292-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:69654e564342f507edfa09ee6897883ca76e331d4bbc3676d8a8403838e9fade"}, - {file = "ruff-0.0.292-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c3c91859a9b845c33778f11902e7b26440d64b9d5110edd4e4fa1726c41e0a4"}, - {file = "ruff-0.0.292-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f4476f1243af2d8c29da5f235c13dca52177117935e1f9393f9d90f9833f69e4"}, - {file = "ruff-0.0.292-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be8eb50eaf8648070b8e58ece8e69c9322d34afe367eec4210fdee9a555e4ca7"}, - {file = "ruff-0.0.292-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:9889bac18a0c07018aac75ef6c1e6511d8411724d67cb879103b01758e110a81"}, - {file = "ruff-0.0.292-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6bdfabd4334684a4418b99b3118793f2c13bb67bf1540a769d7816410402a205"}, - {file = "ruff-0.0.292-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7c77c53bfcd75dbcd4d1f42d6cabf2485d2e1ee0678da850f08e1ab13081a8"}, - {file = "ruff-0.0.292-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e087b24d0d849c5c81516ec740bf4fd48bf363cfb104545464e0fca749b6af9"}, - {file = "ruff-0.0.292-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f160b5ec26be32362d0774964e218f3fcf0a7da299f7e220ef45ae9e3e67101a"}, - {file = "ruff-0.0.292-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ac153eee6dd4444501c4bb92bff866491d4bfb01ce26dd2fff7ca472c8df9ad0"}, - {file = "ruff-0.0.292-py3-none-musllinux_1_2_i686.whl", hash = "sha256:87616771e72820800b8faea82edd858324b29bb99a920d6aa3d3949dd3f88fb0"}, - {file = "ruff-0.0.292-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b76deb3bdbea2ef97db286cf953488745dd6424c122d275f05836c53f62d4016"}, - {file = "ruff-0.0.292-py3-none-win32.whl", hash = "sha256:e854b05408f7a8033a027e4b1c7f9889563dd2aca545d13d06711e5c39c3d003"}, - {file = "ruff-0.0.292-py3-none-win_amd64.whl", hash = "sha256:f27282bedfd04d4c3492e5c3398360c9d86a295be00eccc63914438b4ac8a83c"}, - {file = "ruff-0.0.292-py3-none-win_arm64.whl", hash = "sha256:7f67a69c8f12fbc8daf6ae6d36705037bde315abf8b82b6e1f4c9e74eb750f68"}, - {file = "ruff-0.0.292.tar.gz", hash = "sha256:1093449e37dd1e9b813798f6ad70932b57cf614e5c2b5c51005bf67d55db33ac"}, + {file = "ruff-0.1.6-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:88b8cdf6abf98130991cbc9f6438f35f6e8d41a02622cc5ee130a02a0ed28703"}, + {file = "ruff-0.1.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c549ed437680b6105a1299d2cd30e4964211606eeb48a0ff7a93ef70b902248"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cf5f701062e294f2167e66d11b092bba7af6a057668ed618a9253e1e90cfd76"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:05991ee20d4ac4bb78385360c684e4b417edd971030ab12a4fbd075ff535050e"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87455a0c1f739b3c069e2f4c43b66479a54dea0276dd5d4d67b091265f6fd1dc"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:683aa5bdda5a48cb8266fcde8eea2a6af4e5700a392c56ea5fb5f0d4bfdc0240"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:137852105586dcbf80c1717facb6781555c4e99f520c9c827bd414fac67ddfb6"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd98138a98d48a1c36c394fd6b84cd943ac92a08278aa8ac8c0fdefcf7138f35"}, + {file = "ruff-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0cd909d25f227ac5c36d4e7e681577275fb74ba3b11d288aff7ec47e3ae745"}, + {file = "ruff-0.1.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8fd1c62a47aa88a02707b5dd20c5ff20d035d634aa74826b42a1da77861b5ff"}, + {file = "ruff-0.1.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fd89b45d374935829134a082617954120d7a1470a9f0ec0e7f3ead983edc48cc"}, + {file = "ruff-0.1.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:491262006e92f825b145cd1e52948073c56560243b55fb3b4ecb142f6f0e9543"}, + {file = "ruff-0.1.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:ea284789861b8b5ca9d5443591a92a397ac183d4351882ab52f6296b4fdd5462"}, + {file = "ruff-0.1.6-py3-none-win32.whl", hash = "sha256:1610e14750826dfc207ccbcdd7331b6bd285607d4181df9c1c6ae26646d6848a"}, + {file = "ruff-0.1.6-py3-none-win_amd64.whl", hash = "sha256:4558b3e178145491e9bc3b2ee3c4b42f19d19384eaa5c59d10acf6e8f8b57e33"}, + {file = "ruff-0.1.6-py3-none-win_arm64.whl", hash = "sha256:03910e81df0d8db0e30050725a5802441c2022ea3ae4fe0609b76081731accbc"}, + {file = "ruff-0.1.6.tar.gz", hash = "sha256:1b09f29b16c6ead5ea6b097ef2764b42372aebe363722f1605ecbcd2b9207184"}, ] [[package]] name = "setuptools" -version = "68.0.0" +version = "69.0.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, + {file = "setuptools-69.0.2-py3-none-any.whl", hash = "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2"}, + {file = "setuptools-69.0.2.tar.gz", hash = "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -1457,13 +1436,13 @@ files = [ [[package]] name = "stack-data" -version = "0.6.2" +version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" optional = false python-versions = "*" files = [ - {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, - {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"}, + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, ] [package.dependencies] @@ -1476,13 +1455,13 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "termcolor" -version = "2.3.0" +version = "2.4.0" description = "ANSI color formatting for output in terminal" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "termcolor-2.3.0-py3-none-any.whl", hash = "sha256:3afb05607b89aed0ffe25202399ee0867ad4d3cb4180d98aaf8eefa6a5f7d475"}, - {file = "termcolor-2.3.0.tar.gz", hash = "sha256:b5b08f68937f138fe92f6c089b99f1e2da0ae56c52b78bf7075fd95420fd9a5a"}, + {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, + {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, ] [package.extras] @@ -1512,18 +1491,18 @@ files = [ [[package]] name = "traitlets" -version = "5.9.0" +version = "5.14.0" description = "Traitlets Python configuration system" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, + {file = "traitlets-5.14.0-py3-none-any.whl", hash = "sha256:f14949d23829023013c47df20b4a76ccd1a85effb786dc060f34de7948361b33"}, + {file = "traitlets-5.14.0.tar.gz", hash = "sha256:fcdaa8ac49c04dfa0ed3ee3384ef6dfdb5d6f3741502be247279407679296772"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "types-deprecated" @@ -1582,39 +1561,38 @@ files = [ [[package]] name = "urllib3" -version = "2.0.7" +version = "2.1.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, - {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.24.3" +version = "20.25.0" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.24.3-py3-none-any.whl", hash = "sha256:95a6e9398b4967fbcb5fef2acec5efaf9aa4972049d9ae41f95e0972a683fd02"}, - {file = "virtualenv-20.24.3.tar.gz", hash = "sha256:e5c3b4ce817b0b328af041506a2a299418c98747c4b1e68cb7527e74ced23efc"}, + {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"}, + {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"}, ] [package.dependencies] distlib = ">=0.3.7,<1" filelock = ">=3.12.2,<4" -platformdirs = ">=3.9.1,<4" +platformdirs = ">=3.9.1,<5" [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] @@ -1658,115 +1636,110 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "wcwidth" -version = "0.2.6" +version = "0.2.12" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, + {file = "wcwidth-0.2.12-py2.py3-none-any.whl", hash = "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c"}, + {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"}, ] [[package]] name = "wrapt" -version = "1.15.0" +version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, - {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, - {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, - {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, - {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, - {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, - {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, - {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, - {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, - {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, - {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, - {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, - {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, - {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, - {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, - {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, - {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, - {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, - {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, +python-versions = ">=3.6" +files = [ + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] [[package]] name = "zipp" -version = "3.15.0" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "29e446da6af6f9b07dad6535fc2073109a32f65653e5f50fa07c2fda3a39fa45" +content-hash = "2fec265a9d8e12426627b6eee52cc2e4ad7a7837ae022b628e6ea57ae9d40858" diff --git a/pyproject.toml b/pyproject.toml index 315308d37e..15b32b4634 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,6 +49,7 @@ charset-normalizer = ">=2.1.0,<4" importlib_metadata = { version = ">=4.13,<7"} [tool.poetry.group.dev.dependencies] +# dev tool ipython = "^8.0" # test pytest = "^7.2.0" @@ -58,9 +59,9 @@ pytest-regressions = "^2.4.0" pytest-freezer = "^0.4.6" pytest-xdist = "^3.1.0" # code formatter -black = ">=22.10,<24.0" +black = ">=22.10" # linter -ruff = ">=0.0.275,<0.0.293" +ruff = ">=0.1.6" pre-commit = ">=2.18,<4.0" mypy = "^1.4" types-PyYAML = ">=5.4.3,<7.0.0" From 9282729d2f6582cd29b2335111d76310b8a48555 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 3 Dec 2023 10:49:51 +0800 Subject: [PATCH 063/685] build(script): use latest ruff format --- scripts/format | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/format b/scripts/format index e6a82477a9..e1282f598d 100755 --- a/scripts/format +++ b/scripts/format @@ -5,5 +5,5 @@ export PREFIX="poetry run python -m " set -x -${PREFIX}ruff commitizen tests --fix +${PREFIX}ruff format commitizen tests ${PREFIX}black commitizen tests From 34f5d137001498c89b77f85f1dbe4122de17ce18 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Tue, 5 Dec 2023 08:52:18 +0800 Subject: [PATCH 064/685] build(poetry): keep black version in sync --- .pre-commit-config.yaml | 2 +- pyproject.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 33bebc75cf..dbe313c5da 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -33,7 +33,7 @@ repos: rev: 1.13.0 hooks: - id: blacken-docs - additional_dependencies: [ black==22.10 ] + additional_dependencies: [ black~=23.11 ] - repo: https://github.com/codespell-project/codespell rev: v2.2.4 diff --git a/pyproject.toml b/pyproject.toml index 15b32b4634..563d0a09d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -59,9 +59,9 @@ pytest-regressions = "^2.4.0" pytest-freezer = "^0.4.6" pytest-xdist = "^3.1.0" # code formatter -black = ">=22.10" +black = "~=23.11" # linter -ruff = ">=0.1.6" +ruff = "~=0.1.6" pre-commit = ">=2.18,<4.0" mypy = "^1.4" types-PyYAML = ">=5.4.3,<7.0.0" From 83472829433cec004931f51ae8b1cefd14b7722c Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Tue, 5 Dec 2023 08:53:19 +0800 Subject: [PATCH 065/685] build(poetry): update dependencies --- poetry.lock | 60 ++++++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/poetry.lock b/poetry.lock index 138f50baaa..7c1c63be7a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -437,13 +437,13 @@ typing = ["typing-extensions (>=4.8)"] [[package]] name = "freezegun" -version = "1.2.2" +version = "1.3.1" description = "Let your Python tests travel through time" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "freezegun-1.2.2-py3-none-any.whl", hash = "sha256:ea1b963b993cb9ea195adbd893a48d573fda951b0da64f60883d7e988b606c9f"}, - {file = "freezegun-1.2.2.tar.gz", hash = "sha256:cd22d1ba06941384410cd967d8a99d5ae2442f57dfafeff2fda5de8dc5c05446"}, + {file = "freezegun-1.3.1-py3-none-any.whl", hash = "sha256:065e77a12624d05531afa87ade12a0b9bdb53495c4573893252a055b545ce3ea"}, + {file = "freezegun-1.3.1.tar.gz", hash = "sha256:48984397b3b58ef5dfc645d6a304b0060f612bcecfdaaf45ce8aff0077a6cb6a"}, ] [package.dependencies] @@ -493,13 +493,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.9.0" +version = "6.11.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.9.0-py3-none-any.whl", hash = "sha256:1c8dc6839ddc9771412596926f24cb5a553bbd40624ee2c7e55e531542bed3b8"}, - {file = "importlib_metadata-6.9.0.tar.gz", hash = "sha256:e8acb523c335a91822674e149b46c0399ec4d328c4d1f6e49c273da5ff0201b9"}, + {file = "importlib_metadata-6.11.0-py3-none-any.whl", hash = "sha256:f0afba6205ad8f8947c7d338b5342d5db2afbfd82f9cbef7879a9539cc12eb9b"}, + {file = "importlib_metadata-6.11.0.tar.gz", hash = "sha256:1231cf92d825c9e03cfc4da076a16de6422c863558229ea0b22b675657463443"}, ] [package.dependencies] @@ -915,13 +915,13 @@ files = [ [[package]] name = "platformdirs" -version = "4.0.0" +version = "4.1.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"}, - {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"}, + {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, + {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, ] [package.extras] @@ -1383,28 +1383,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.1.6" +version = "0.1.7" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.1.6-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:88b8cdf6abf98130991cbc9f6438f35f6e8d41a02622cc5ee130a02a0ed28703"}, - {file = "ruff-0.1.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c549ed437680b6105a1299d2cd30e4964211606eeb48a0ff7a93ef70b902248"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cf5f701062e294f2167e66d11b092bba7af6a057668ed618a9253e1e90cfd76"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:05991ee20d4ac4bb78385360c684e4b417edd971030ab12a4fbd075ff535050e"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87455a0c1f739b3c069e2f4c43b66479a54dea0276dd5d4d67b091265f6fd1dc"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:683aa5bdda5a48cb8266fcde8eea2a6af4e5700a392c56ea5fb5f0d4bfdc0240"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:137852105586dcbf80c1717facb6781555c4e99f520c9c827bd414fac67ddfb6"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd98138a98d48a1c36c394fd6b84cd943ac92a08278aa8ac8c0fdefcf7138f35"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0cd909d25f227ac5c36d4e7e681577275fb74ba3b11d288aff7ec47e3ae745"}, - {file = "ruff-0.1.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8fd1c62a47aa88a02707b5dd20c5ff20d035d634aa74826b42a1da77861b5ff"}, - {file = "ruff-0.1.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fd89b45d374935829134a082617954120d7a1470a9f0ec0e7f3ead983edc48cc"}, - {file = "ruff-0.1.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:491262006e92f825b145cd1e52948073c56560243b55fb3b4ecb142f6f0e9543"}, - {file = "ruff-0.1.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:ea284789861b8b5ca9d5443591a92a397ac183d4351882ab52f6296b4fdd5462"}, - {file = "ruff-0.1.6-py3-none-win32.whl", hash = "sha256:1610e14750826dfc207ccbcdd7331b6bd285607d4181df9c1c6ae26646d6848a"}, - {file = "ruff-0.1.6-py3-none-win_amd64.whl", hash = "sha256:4558b3e178145491e9bc3b2ee3c4b42f19d19384eaa5c59d10acf6e8f8b57e33"}, - {file = "ruff-0.1.6-py3-none-win_arm64.whl", hash = "sha256:03910e81df0d8db0e30050725a5802441c2022ea3ae4fe0609b76081731accbc"}, - {file = "ruff-0.1.6.tar.gz", hash = "sha256:1b09f29b16c6ead5ea6b097ef2764b42372aebe363722f1605ecbcd2b9207184"}, + {file = "ruff-0.1.7-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7f80496854fdc65b6659c271d2c26e90d4d401e6a4a31908e7e334fab4645aac"}, + {file = "ruff-0.1.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:1ea109bdb23c2a4413f397ebd8ac32cb498bee234d4191ae1a310af760e5d287"}, + {file = "ruff-0.1.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0c2de9dd9daf5e07624c24add25c3a490dbf74b0e9bca4145c632457b3b42a"}, + {file = "ruff-0.1.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:69a4bed13bc1d5dabf3902522b5a2aadfebe28226c6269694283c3b0cecb45fd"}, + {file = "ruff-0.1.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de02ca331f2143195a712983a57137c5ec0f10acc4aa81f7c1f86519e52b92a1"}, + {file = "ruff-0.1.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:45b38c3f8788a65e6a2cab02e0f7adfa88872696839d9882c13b7e2f35d64c5f"}, + {file = "ruff-0.1.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c64cb67b2025b1ac6d58e5ffca8f7b3f7fd921f35e78198411237e4f0db8e73"}, + {file = "ruff-0.1.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dcc6bb2f4df59cb5b4b40ff14be7d57012179d69c6565c1da0d1f013d29951b"}, + {file = "ruff-0.1.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2bb4bb6bbe921f6b4f5b6fdd8d8468c940731cb9406f274ae8c5ed7a78c478"}, + {file = "ruff-0.1.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:276a89bcb149b3d8c1b11d91aa81898fe698900ed553a08129b38d9d6570e717"}, + {file = "ruff-0.1.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:90c958fe950735041f1c80d21b42184f1072cc3975d05e736e8d66fc377119ea"}, + {file = "ruff-0.1.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6b05e3b123f93bb4146a761b7a7d57af8cb7384ccb2502d29d736eaade0db519"}, + {file = "ruff-0.1.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:290ecab680dce94affebefe0bbca2322a6277e83d4f29234627e0f8f6b4fa9ce"}, + {file = "ruff-0.1.7-py3-none-win32.whl", hash = "sha256:416dfd0bd45d1a2baa3b1b07b1b9758e7d993c256d3e51dc6e03a5e7901c7d80"}, + {file = "ruff-0.1.7-py3-none-win_amd64.whl", hash = "sha256:4af95fd1d3b001fc41325064336db36e3d27d2004cdb6d21fd617d45a172dd96"}, + {file = "ruff-0.1.7-py3-none-win_arm64.whl", hash = "sha256:0683b7bfbb95e6df3c7c04fe9d78f631f8e8ba4868dfc932d43d690698057e2e"}, + {file = "ruff-0.1.7.tar.gz", hash = "sha256:dffd699d07abf54833e5f6cc50b85a6ff043715da8788c4a79bcd4ab4734d306"}, ] [[package]] @@ -1742,4 +1742,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "2fec265a9d8e12426627b6eee52cc2e4ad7a7837ae022b628e6ea57ae9d40858" +content-hash = "cf5ff67dec1b13e013d7e8f5d51552b809716641c7b41aed2150b311eb7f7c8c" From aa9eda874613c85aebf9d03bbfa31ef2a72a911d Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Mon, 18 Dec 2023 20:29:34 +0800 Subject: [PATCH 066/685] build: upgrade ruff to 0.1.8 --- poetry.lock | 233 ++++++++++++++++++++++++++-------------------------- 1 file changed, 118 insertions(+), 115 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7c1c63be7a..37a5edb266 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "argcomplete" -version = "3.1.6" +version = "3.2.1" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.1.6-py3-none-any.whl", hash = "sha256:71f4683bc9e6b0be85f2b2c1224c47680f210903e23512cfebfe5a41edfd883a"}, - {file = "argcomplete-3.1.6.tar.gz", hash = "sha256:3b1f07d133332547a53c79437527c00be48cca3807b1d4ca5cab1b26313386a6"}, + {file = "argcomplete-3.2.1-py3-none-any.whl", hash = "sha256:30891d87f3c1abe091f2142613c9d33cac84a5e15404489f033b20399b691fec"}, + {file = "argcomplete-3.2.1.tar.gz", hash = "sha256:437f67fb9b058da5a090df505ef9be0297c4883993f3f56cb186ff087778cfb4"}, ] [package.extras] @@ -45,18 +45,17 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] [[package]] name = "babel" -version = "2.13.1" +version = "2.14.0" description = "Internationalization utilities" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, - {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, + {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, + {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, ] [package.dependencies] pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} -setuptools = {version = "*", markers = "python_version >= \"3.12\""} [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] @@ -74,29 +73,33 @@ files = [ [[package]] name = "black" -version = "23.11.0" +version = "23.12.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbea0bb8575c6b6303cc65017b46351dc5953eea5c0a59d7b7e3a2d2f433a911"}, - {file = "black-23.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:412f56bab20ac85927f3a959230331de5614aecda1ede14b373083f62ec24e6f"}, - {file = "black-23.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d136ef5b418c81660ad847efe0e55c58c8208b77a57a28a503a5f345ccf01394"}, - {file = "black-23.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:6c1cac07e64433f646a9a838cdc00c9768b3c362805afc3fce341af0e6a9ae9f"}, - {file = "black-23.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf57719e581cfd48c4efe28543fea3d139c6b6f1238b3f0102a9c73992cbb479"}, - {file = "black-23.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:698c1e0d5c43354ec5d6f4d914d0d553a9ada56c85415700b81dc90125aac244"}, - {file = "black-23.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760415ccc20f9e8747084169110ef75d545f3b0932ee21368f63ac0fee86b221"}, - {file = "black-23.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:58e5f4d08a205b11800332920e285bd25e1a75c54953e05502052738fe16b3b5"}, - {file = "black-23.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:45aa1d4675964946e53ab81aeec7a37613c1cb71647b5394779e6efb79d6d187"}, - {file = "black-23.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c44b7211a3a0570cc097e81135faa5f261264f4dfaa22bd5ee2875a4e773bd6"}, - {file = "black-23.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a9acad1451632021ee0d146c8765782a0c3846e0e0ea46659d7c4f89d9b212b"}, - {file = "black-23.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:fc7f6a44d52747e65a02558e1d807c82df1d66ffa80a601862040a43ec2e3142"}, - {file = "black-23.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f622b6822f02bfaf2a5cd31fdb7cd86fcf33dab6ced5185c35f5db98260b055"}, - {file = "black-23.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:250d7e60f323fcfc8ea6c800d5eba12f7967400eb6c2d21ae85ad31c204fb1f4"}, - {file = "black-23.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5133f5507007ba08d8b7b263c7aa0f931af5ba88a29beacc4b2dc23fcefe9c06"}, - {file = "black-23.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:421f3e44aa67138ab1b9bfbc22ee3780b22fa5b291e4db8ab7eee95200726b07"}, - {file = "black-23.11.0-py3-none-any.whl", hash = "sha256:54caaa703227c6e0c87b76326d0862184729a69b73d3b7305b6288e1d830067e"}, - {file = "black-23.11.0.tar.gz", hash = "sha256:4c68855825ff432d197229846f971bc4d6666ce90492e5b02013bcaca4d9ab05"}, + {file = "black-23.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:67f19562d367468ab59bd6c36a72b2c84bc2f16b59788690e02bbcb140a77175"}, + {file = "black-23.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bbd75d9f28a7283b7426160ca21c5bd640ca7cd8ef6630b4754b6df9e2da8462"}, + {file = "black-23.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:593596f699ca2dcbbbdfa59fcda7d8ad6604370c10228223cd6cf6ce1ce7ed7e"}, + {file = "black-23.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:12d5f10cce8dc27202e9a252acd1c9a426c83f95496c959406c96b785a92bb7d"}, + {file = "black-23.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e73c5e3d37e5a3513d16b33305713237a234396ae56769b839d7c40759b8a41c"}, + {file = "black-23.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba09cae1657c4f8a8c9ff6cfd4a6baaf915bb4ef7d03acffe6a2f6585fa1bd01"}, + {file = "black-23.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace64c1a349c162d6da3cef91e3b0e78c4fc596ffde9413efa0525456148873d"}, + {file = "black-23.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:72db37a2266b16d256b3ea88b9affcdd5c41a74db551ec3dd4609a59c17d25bf"}, + {file = "black-23.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fdf6f23c83078a6c8da2442f4d4eeb19c28ac2a6416da7671b72f0295c4a697b"}, + {file = "black-23.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39dda060b9b395a6b7bf9c5db28ac87b3c3f48d4fdff470fa8a94ab8271da47e"}, + {file = "black-23.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7231670266ca5191a76cb838185d9be59cfa4f5dd401b7c1c70b993c58f6b1b5"}, + {file = "black-23.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:193946e634e80bfb3aec41830f5d7431f8dd5b20d11d89be14b84a97c6b8bc75"}, + {file = "black-23.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcf91b01ddd91a2fed9a8006d7baa94ccefe7e518556470cf40213bd3d44bbbc"}, + {file = "black-23.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:996650a89fe5892714ea4ea87bc45e41a59a1e01675c42c433a35b490e5aa3f0"}, + {file = "black-23.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdbff34c487239a63d86db0c9385b27cdd68b1bfa4e706aa74bb94a435403672"}, + {file = "black-23.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:97af22278043a6a1272daca10a6f4d36c04dfa77e61cbaaf4482e08f3640e9f0"}, + {file = "black-23.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ead25c273adfad1095a8ad32afdb8304933efba56e3c1d31b0fee4143a1e424a"}, + {file = "black-23.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c71048345bdbced456cddf1622832276d98a710196b842407840ae8055ade6ee"}, + {file = "black-23.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a832b6e00eef2c13b3239d514ea3b7d5cc3eaa03d0474eedcbbda59441ba5d"}, + {file = "black-23.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:6a82a711d13e61840fb11a6dfecc7287f2424f1ca34765e70c909a35ffa7fb95"}, + {file = "black-23.12.0-py3-none-any.whl", hash = "sha256:a7c07db8200b5315dc07e331dda4d889a56f6bf4db6a9c2a526fa3166a81614f"}, + {file = "black-23.12.0.tar.gz", hash = "sha256:330a327b422aca0634ecd115985c1c7fd7bdb5b5a2ef8aa9888a82e2ebe9437a"}, ] [package.dependencies] @@ -110,7 +113,7 @@ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] @@ -262,63 +265,63 @@ files = [ [[package]] name = "coverage" -version = "7.3.2" +version = "7.3.3" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, - {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, - {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, - {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, - {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, - {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, - {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, - {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, - {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, - {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, - {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, - {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, - {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, - {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, + {file = "coverage-7.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d874434e0cb7b90f7af2b6e3309b0733cde8ec1476eb47db148ed7deeb2a9494"}, + {file = "coverage-7.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee6621dccce8af666b8c4651f9f43467bfbf409607c604b840b78f4ff3619aeb"}, + {file = "coverage-7.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1367aa411afb4431ab58fd7ee102adb2665894d047c490649e86219327183134"}, + {file = "coverage-7.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f0f8f0c497eb9c9f18f21de0750c8d8b4b9c7000b43996a094290b59d0e7523"}, + {file = "coverage-7.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db0338c4b0951d93d547e0ff8d8ea340fecf5885f5b00b23be5aa99549e14cfd"}, + {file = "coverage-7.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d31650d313bd90d027f4be7663dfa2241079edd780b56ac416b56eebe0a21aab"}, + {file = "coverage-7.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9437a4074b43c177c92c96d051957592afd85ba00d3e92002c8ef45ee75df438"}, + {file = "coverage-7.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9e17d9cb06c13b4f2ef570355fa45797d10f19ca71395910b249e3f77942a837"}, + {file = "coverage-7.3.3-cp310-cp310-win32.whl", hash = "sha256:eee5e741b43ea1b49d98ab6e40f7e299e97715af2488d1c77a90de4a663a86e2"}, + {file = "coverage-7.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:593efa42160c15c59ee9b66c5f27a453ed3968718e6e58431cdfb2d50d5ad284"}, + {file = "coverage-7.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c944cf1775235c0857829c275c777a2c3e33032e544bcef614036f337ac37bb"}, + {file = "coverage-7.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eda7f6e92358ac9e1717ce1f0377ed2b9320cea070906ece4e5c11d172a45a39"}, + {file = "coverage-7.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c854c1d2c7d3e47f7120b560d1a30c1ca221e207439608d27bc4d08fd4aeae8"}, + {file = "coverage-7.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:222b038f08a7ebed1e4e78ccf3c09a1ca4ac3da16de983e66520973443b546bc"}, + {file = "coverage-7.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff4800783d85bff132f2cc7d007426ec698cdce08c3062c8d501ad3f4ea3d16c"}, + {file = "coverage-7.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fc200cec654311ca2c3f5ab3ce2220521b3d4732f68e1b1e79bef8fcfc1f2b97"}, + {file = "coverage-7.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:307aecb65bb77cbfebf2eb6e12009e9034d050c6c69d8a5f3f737b329f4f15fb"}, + {file = "coverage-7.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ffb0eacbadb705c0a6969b0adf468f126b064f3362411df95f6d4f31c40d31c1"}, + {file = "coverage-7.3.3-cp311-cp311-win32.whl", hash = "sha256:79c32f875fd7c0ed8d642b221cf81feba98183d2ff14d1f37a1bbce6b0347d9f"}, + {file = "coverage-7.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:243576944f7c1a1205e5cd658533a50eba662c74f9be4c050d51c69bd4532936"}, + {file = "coverage-7.3.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a2ac4245f18057dfec3b0074c4eb366953bca6787f1ec397c004c78176a23d56"}, + {file = "coverage-7.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f9191be7af41f0b54324ded600e8ddbcabea23e1e8ba419d9a53b241dece821d"}, + {file = "coverage-7.3.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31c0b1b8b5a4aebf8fcd227237fc4263aa7fa0ddcd4d288d42f50eff18b0bac4"}, + {file = "coverage-7.3.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee453085279df1bac0996bc97004771a4a052b1f1e23f6101213e3796ff3cb85"}, + {file = "coverage-7.3.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1191270b06ecd68b1d00897b2daddb98e1719f63750969614ceb3438228c088e"}, + {file = "coverage-7.3.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:007a7e49831cfe387473e92e9ff07377f6121120669ddc39674e7244350a6a29"}, + {file = "coverage-7.3.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:af75cf83c2d57717a8493ed2246d34b1f3398cb8a92b10fd7a1858cad8e78f59"}, + {file = "coverage-7.3.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:811ca7373da32f1ccee2927dc27dc523462fd30674a80102f86c6753d6681bc6"}, + {file = "coverage-7.3.3-cp312-cp312-win32.whl", hash = "sha256:733537a182b5d62184f2a72796eb6901299898231a8e4f84c858c68684b25a70"}, + {file = "coverage-7.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:e995efb191f04b01ced307dbd7407ebf6e6dc209b528d75583277b10fd1800ee"}, + {file = "coverage-7.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fbd8a5fe6c893de21a3c6835071ec116d79334fbdf641743332e442a3466f7ea"}, + {file = "coverage-7.3.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:50c472c1916540f8b2deef10cdc736cd2b3d1464d3945e4da0333862270dcb15"}, + {file = "coverage-7.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e9223a18f51d00d3ce239c39fc41410489ec7a248a84fab443fbb39c943616c"}, + {file = "coverage-7.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f501e36ac428c1b334c41e196ff6bd550c0353c7314716e80055b1f0a32ba394"}, + {file = "coverage-7.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:475de8213ed95a6b6283056d180b2442eee38d5948d735cd3d3b52b86dd65b92"}, + {file = "coverage-7.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:afdcc10c01d0db217fc0a64f58c7edd635b8f27787fea0a3054b856a6dff8717"}, + {file = "coverage-7.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:fff0b2f249ac642fd735f009b8363c2b46cf406d3caec00e4deeb79b5ff39b40"}, + {file = "coverage-7.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a1f76cfc122c9e0f62dbe0460ec9cc7696fc9a0293931a33b8870f78cf83a327"}, + {file = "coverage-7.3.3-cp38-cp38-win32.whl", hash = "sha256:757453848c18d7ab5d5b5f1827293d580f156f1c2c8cef45bfc21f37d8681069"}, + {file = "coverage-7.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:ad2453b852a1316c8a103c9c970db8fbc262f4f6b930aa6c606df9b2766eee06"}, + {file = "coverage-7.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b15e03b8ee6a908db48eccf4e4e42397f146ab1e91c6324da44197a45cb9132"}, + {file = "coverage-7.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:89400aa1752e09f666cc48708eaa171eef0ebe3d5f74044b614729231763ae69"}, + {file = "coverage-7.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c59a3e59fb95e6d72e71dc915e6d7fa568863fad0a80b33bc7b82d6e9f844973"}, + {file = "coverage-7.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ede881c7618f9cf93e2df0421ee127afdfd267d1b5d0c59bcea771cf160ea4a"}, + {file = "coverage-7.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3bfd2c2f0e5384276e12b14882bf2c7621f97c35320c3e7132c156ce18436a1"}, + {file = "coverage-7.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7f3bad1a9313401ff2964e411ab7d57fb700a2d5478b727e13f156c8f89774a0"}, + {file = "coverage-7.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:65d716b736f16e250435473c5ca01285d73c29f20097decdbb12571d5dfb2c94"}, + {file = "coverage-7.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a702e66483b1fe602717020a0e90506e759c84a71dbc1616dd55d29d86a9b91f"}, + {file = "coverage-7.3.3-cp39-cp39-win32.whl", hash = "sha256:7fbf3f5756e7955174a31fb579307d69ffca91ad163467ed123858ce0f3fd4aa"}, + {file = "coverage-7.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cad9afc1644b979211989ec3ff7d82110b2ed52995c2f7263e7841c846a75348"}, + {file = "coverage-7.3.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:d299d379b676812e142fb57662a8d0d810b859421412b4d7af996154c00c31bb"}, + {file = "coverage-7.3.3.tar.gz", hash = "sha256:df04c64e58df96b4427db8d0559e95e2df3138c9916c96f9f6a4dd220db2fdb7"}, ] [package.dependencies] @@ -368,13 +371,13 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] [[package]] name = "distlib" -version = "0.3.7" +version = "0.3.8" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, - {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, + {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, ] [[package]] @@ -468,13 +471,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "identify" -version = "2.5.32" +version = "2.5.33" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.32-py2.py3-none-any.whl", hash = "sha256:0b7656ef6cba81664b783352c73f8c24b39cf82f926f78f4550eda928e5e0545"}, - {file = "identify-2.5.32.tar.gz", hash = "sha256:5d9979348ec1a21c768ae07e0a652924538e8bce67313a73cb0f681cf08ba407"}, + {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"}, + {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"}, ] [package.extras] @@ -731,13 +734,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.4.14" +version = "9.5.2" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.4.14-py3-none-any.whl", hash = "sha256:dbc78a4fea97b74319a6aa9a2f0be575a6028be6958f813ba367188f7b8428f6"}, - {file = "mkdocs_material-9.4.14.tar.gz", hash = "sha256:a511d3ff48fa8718b033e7e37d17abd9cc1de0fdf0244a625ca2ae2387e2416d"}, + {file = "mkdocs_material-9.5.2-py3-none-any.whl", hash = "sha256:6ed0fbf4682491766f0ec1acc955db6901c2fd424c7ab343964ef51b819741f5"}, + {file = "mkdocs_material-9.5.2.tar.gz", hash = "sha256:ca8b9cd2b3be53e858e5a1a45ac9668bd78d95d77a30288bb5ebc1a31db6184c"}, ] [package.dependencies] @@ -879,13 +882,13 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.2" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] @@ -1383,28 +1386,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.1.7" +version = "0.1.8" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.1.7-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7f80496854fdc65b6659c271d2c26e90d4d401e6a4a31908e7e334fab4645aac"}, - {file = "ruff-0.1.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:1ea109bdb23c2a4413f397ebd8ac32cb498bee234d4191ae1a310af760e5d287"}, - {file = "ruff-0.1.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0c2de9dd9daf5e07624c24add25c3a490dbf74b0e9bca4145c632457b3b42a"}, - {file = "ruff-0.1.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:69a4bed13bc1d5dabf3902522b5a2aadfebe28226c6269694283c3b0cecb45fd"}, - {file = "ruff-0.1.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de02ca331f2143195a712983a57137c5ec0f10acc4aa81f7c1f86519e52b92a1"}, - {file = "ruff-0.1.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:45b38c3f8788a65e6a2cab02e0f7adfa88872696839d9882c13b7e2f35d64c5f"}, - {file = "ruff-0.1.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c64cb67b2025b1ac6d58e5ffca8f7b3f7fd921f35e78198411237e4f0db8e73"}, - {file = "ruff-0.1.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dcc6bb2f4df59cb5b4b40ff14be7d57012179d69c6565c1da0d1f013d29951b"}, - {file = "ruff-0.1.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2bb4bb6bbe921f6b4f5b6fdd8d8468c940731cb9406f274ae8c5ed7a78c478"}, - {file = "ruff-0.1.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:276a89bcb149b3d8c1b11d91aa81898fe698900ed553a08129b38d9d6570e717"}, - {file = "ruff-0.1.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:90c958fe950735041f1c80d21b42184f1072cc3975d05e736e8d66fc377119ea"}, - {file = "ruff-0.1.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6b05e3b123f93bb4146a761b7a7d57af8cb7384ccb2502d29d736eaade0db519"}, - {file = "ruff-0.1.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:290ecab680dce94affebefe0bbca2322a6277e83d4f29234627e0f8f6b4fa9ce"}, - {file = "ruff-0.1.7-py3-none-win32.whl", hash = "sha256:416dfd0bd45d1a2baa3b1b07b1b9758e7d993c256d3e51dc6e03a5e7901c7d80"}, - {file = "ruff-0.1.7-py3-none-win_amd64.whl", hash = "sha256:4af95fd1d3b001fc41325064336db36e3d27d2004cdb6d21fd617d45a172dd96"}, - {file = "ruff-0.1.7-py3-none-win_arm64.whl", hash = "sha256:0683b7bfbb95e6df3c7c04fe9d78f631f8e8ba4868dfc932d43d690698057e2e"}, - {file = "ruff-0.1.7.tar.gz", hash = "sha256:dffd699d07abf54833e5f6cc50b85a6ff043715da8788c4a79bcd4ab4734d306"}, + {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7de792582f6e490ae6aef36a58d85df9f7a0cfd1b0d4fe6b4fb51803a3ac96fa"}, + {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c8e3255afd186c142eef4ec400d7826134f028a85da2146102a1172ecc7c3696"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff78a7583020da124dd0deb835ece1d87bb91762d40c514ee9b67a087940528b"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd8ee69b02e7bdefe1e5da2d5b6eaaddcf4f90859f00281b2333c0e3a0cc9cd6"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a05b0ddd7ea25495e4115a43125e8a7ebed0aa043c3d432de7e7d6e8e8cd6448"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e6f08ca730f4dc1b76b473bdf30b1b37d42da379202a059eae54ec7fc1fbcfed"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f35960b02df6b827c1b903091bb14f4b003f6cf102705efc4ce78132a0aa5af3"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d076717c67b34c162da7c1a5bda16ffc205e0e0072c03745275e7eab888719f"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6a21ab023124eafb7cef6d038f835cb1155cd5ea798edd8d9eb2f8b84be07d9"}, + {file = "ruff-0.1.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ce697c463458555027dfb194cb96d26608abab920fa85213deb5edf26e026664"}, + {file = "ruff-0.1.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:db6cedd9ffed55548ab313ad718bc34582d394e27a7875b4b952c2d29c001b26"}, + {file = "ruff-0.1.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:05ffe9dbd278965271252704eddb97b4384bf58b971054d517decfbf8c523f05"}, + {file = "ruff-0.1.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5daaeaf00ae3c1efec9742ff294b06c3a2a9db8d3db51ee4851c12ad385cda30"}, + {file = "ruff-0.1.8-py3-none-win32.whl", hash = "sha256:e49fbdfe257fa41e5c9e13c79b9e79a23a79bd0e40b9314bc53840f520c2c0b3"}, + {file = "ruff-0.1.8-py3-none-win_amd64.whl", hash = "sha256:f41f692f1691ad87f51708b823af4bb2c5c87c9248ddd3191c8f088e66ce590a"}, + {file = "ruff-0.1.8-py3-none-win_arm64.whl", hash = "sha256:aa8ee4f8440023b0a6c3707f76cadce8657553655dcbb5fc9b2f9bb9bee389f6"}, + {file = "ruff-0.1.8.tar.gz", hash = "sha256:f7ee467677467526cfe135eab86a40a0e8db43117936ac4f9b469ce9cdb3fb62"}, ] [[package]] @@ -1550,13 +1553,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.8.0" +version = "4.9.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, - {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] [[package]] @@ -1742,4 +1745,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "cf5ff67dec1b13e013d7e8f5d51552b809716641c7b41aed2150b311eb7f7c8c" +content-hash = "09b87ecd62b347c86f849c7ce735c39130ffebe735d6aec6273601ddb7ff2453" From 193ab237e3d0865336444fdf45199256616a029c Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Mon, 6 Nov 2023 22:45:59 +0800 Subject: [PATCH 067/685] ci(github-actions): move the generate sponsor step to docpublish workflow --- .github/workflows/bumpversion.yml | 5 ----- .github/workflows/docspublish.yml | 5 +++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/bumpversion.yml b/.github/workflows/bumpversion.yml index f3ce05ecc6..254cbada05 100644 --- a/.github/workflows/bumpversion.yml +++ b/.github/workflows/bumpversion.yml @@ -16,11 +16,6 @@ jobs: with: fetch-depth: 0 token: '${{ secrets.PERSONAL_ACCESS_TOKEN }}' - - name: Generate Sponsors 💖 - uses: JamesIves/github-sponsors-readme-action@v1 - with: - token: ${{ secrets.PERSONAL_ACCESS_TOKEN_FOR_ORG }} - file: 'docs/README.md' - name: Create bump and changelog uses: commitizen-tools/commitizen-action@master with: diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml index 9ffbbf816e..6aa1a75e2e 100644 --- a/.github/workflows/docspublish.yml +++ b/.github/workflows/docspublish.yml @@ -25,6 +25,11 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | python -m mkdocs build + - name: Generate Sponsors 💖 + uses: JamesIves/github-sponsors-readme-action@v1 + with: + token: ${{ secrets.PERSONAL_ACCESS_TOKEN_FOR_ORG }} + file: 'docs/README.md' - name: Push doc to Github Page uses: peaceiris/actions-gh-pages@v2 env: From 4b4e2824ecfdbf4709963545652ee6cb7f35929c Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Tue, 19 Dec 2023 09:16:45 +0800 Subject: [PATCH 068/685] ci(github-actions): use new v5 labeler syntax --- .github/labeler.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index 7fc4c45543..5f3f5b82dc 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,2 +1,3 @@ 'pr-status: wait-for-review': -- '**/*' +- changed-files: + - any-glob-to-any-file: '**' From 103ab56e828bd31fdd767e728721ef6bde6393df Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Tue, 19 Dec 2023 09:20:31 +0800 Subject: [PATCH 069/685] ci(github-actions): checkout only .github/labeler.yml when running labeler --- .github/workflows/label_pr.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/label_pr.yml b/.github/workflows/label_pr.yml index ef55419654..6977c78193 100644 --- a/.github/workflows/label_pr.yml +++ b/.github/workflows/label_pr.yml @@ -10,4 +10,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + with: + sparse-checkout: | + .github/labeler.yaml + sparse-checkout-cone-mode: false - uses: actions/labeler@v5 + with: + configuration-path: .github/labeler.yaml From 3cecd304d01c7530e0e937c5424eab4d0a4b9199 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Tue, 19 Dec 2023 09:40:48 +0800 Subject: [PATCH 070/685] ci(github-actions): fix labeler typo --- .github/workflows/label_pr.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/label_pr.yml b/.github/workflows/label_pr.yml index 6977c78193..b409c8b757 100644 --- a/.github/workflows/label_pr.yml +++ b/.github/workflows/label_pr.yml @@ -12,8 +12,8 @@ jobs: - uses: actions/checkout@v4 with: sparse-checkout: | - .github/labeler.yaml + .github/labeler.yml sparse-checkout-cone-mode: false - uses: actions/labeler@v5 with: - configuration-path: .github/labeler.yaml + configuration-path: .github/labeler.yml From a61dfb8c9ef2df17365c34f795f99da8d8089a39 Mon Sep 17 00:00:00 2001 From: Audric Schiltknecht <aschiltknecht@addenergie.com> Date: Tue, 19 Dec 2023 14:31:08 -0500 Subject: [PATCH 071/685] docs(bump): Fix typo in documentation --- docs/bump.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bump.md b/docs/bump.md index 75d6eb7c11..d0ceb90ea0 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -380,7 +380,7 @@ Supported variables: It is used to identify the files which should be updated with the new version. It is also possible to provide a pattern for each file, separated by colons (`:`). -Commitizen will update it's configuration file automatically (`pyproject.toml`, `.cz`) when bumping, +Commitizen will update its configuration file automatically (`pyproject.toml`, `.cz`) when bumping, regarding if the file is present or not in `version_files`. \* Renamed from `files` to `version_files`. From 7e923e60b94636344761d093181e8ab189c89283 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Mon, 18 Dec 2023 20:32:46 +0800 Subject: [PATCH 072/685] ci(github-actions): skip release action if no version is bumped --- .github/workflows/bumpversion.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/bumpversion.yml b/.github/workflows/bumpversion.yml index 254cbada05..ed010b4158 100644 --- a/.github/workflows/bumpversion.yml +++ b/.github/workflows/bumpversion.yml @@ -26,3 +26,4 @@ jobs: with: tag: v${{ env.REVISION }} bodyFile: "body.md" + skipIfReleaseExists: true From c7fbfc2e042fbb62b59e3928dbb2894097a43300 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Mon, 18 Dec 2023 22:54:43 +0800 Subject: [PATCH 073/685] ci(github): fix codeowners format --- .github/CODEOWNERS | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0870e6ebb2..5d29c85b70 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,3 +1 @@ -@woile -@Lee-W -@noirbizarre +* @woile @Lee-W @noirbizarre From 5c4c4f32a538cb414a37c773b5fa880a9f54407e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 01:47:02 +0000 Subject: [PATCH 074/685] build(deps): bump importlib-metadata from 6.8.0 to 7.0.0 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 6.8.0 to 7.0.0. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v6.8.0...v7.0.0) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 30 +++++++++++++++++++++++++----- pyproject.toml | 2 +- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 37a5edb266..2634fe2183 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "appnope" @@ -496,13 +496,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.11.0" +version = "7.0.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.11.0-py3-none-any.whl", hash = "sha256:f0afba6205ad8f8947c7d338b5342d5db2afbfd82f9cbef7879a9539cc12eb9b"}, - {file = "importlib_metadata-6.11.0.tar.gz", hash = "sha256:1231cf92d825c9e03cfc4da076a16de6422c863558229ea0b22b675657463443"}, + {file = "importlib_metadata-7.0.0-py3-none-any.whl", hash = "sha256:d97503976bb81f40a193d41ee6570868479c69d5068651eb039c40d850c59d67"}, + {file = "importlib_metadata-7.0.0.tar.gz", hash = "sha256:7fc841f8b8332803464e5dc1c63a2e59121f46ca186c0e2e182e80bf8c1319f7"}, ] [package.dependencies] @@ -644,6 +644,16 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -1201,6 +1211,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1208,8 +1219,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -1226,6 +1244,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -1233,6 +1252,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -1745,4 +1765,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "09b87ecd62b347c86f849c7ce735c39130ffebe735d6aec6273601ddb7ff2453" +content-hash = "a5c0fbba4345989709fd201b2755ec9445972072108b5962666f41d451c7e6e2" diff --git a/pyproject.toml b/pyproject.toml index 563d0a09d4..b644753b1b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,7 +46,7 @@ argcomplete = ">=1.12.1,<3.3" typing-extensions = { version = "^4.0.1", python = "<3.8" } charset-normalizer = ">=2.1.0,<4" # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility -importlib_metadata = { version = ">=4.13,<7"} +importlib_metadata = { version = ">=4.13,<8"} [tool.poetry.group.dev.dependencies] # dev tool From 2d8cbe5c0147c057ece66ee39e5fd686753a3c1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Dec 2023 01:21:36 +0000 Subject: [PATCH 075/685] build(deps-dev): bump mypy from 1.7.1 to 1.8.0 Bumps [mypy](https://github.com/python/mypy) from 1.7.1 to 1.8.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.7.1...v1.8.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2634fe2183..768ffdf3a9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -784,38 +784,38 @@ files = [ [[package]] name = "mypy" -version = "1.7.1" +version = "1.8.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12cce78e329838d70a204293e7b29af9faa3ab14899aec397798a4b41be7f340"}, - {file = "mypy-1.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1484b8fa2c10adf4474f016e09d7a159602f3239075c7bf9f1627f5acf40ad49"}, - {file = "mypy-1.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31902408f4bf54108bbfb2e35369877c01c95adc6192958684473658c322c8a5"}, - {file = "mypy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f2c2521a8e4d6d769e3234350ba7b65ff5d527137cdcde13ff4d99114b0c8e7d"}, - {file = "mypy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:fcd2572dd4519e8a6642b733cd3a8cfc1ef94bafd0c1ceed9c94fe736cb65b6a"}, - {file = "mypy-1.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b901927f16224d0d143b925ce9a4e6b3a758010673eeded9b748f250cf4e8f7"}, - {file = "mypy-1.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2f7f6985d05a4e3ce8255396df363046c28bea790e40617654e91ed580ca7c51"}, - {file = "mypy-1.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:944bdc21ebd620eafefc090cdf83158393ec2b1391578359776c00de00e8907a"}, - {file = "mypy-1.7.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9c7ac372232c928fff0645d85f273a726970c014749b924ce5710d7d89763a28"}, - {file = "mypy-1.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:f6efc9bd72258f89a3816e3a98c09d36f079c223aa345c659622f056b760ab42"}, - {file = "mypy-1.7.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6dbdec441c60699288adf051f51a5d512b0d818526d1dcfff5a41f8cd8b4aaf1"}, - {file = "mypy-1.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4fc3d14ee80cd22367caaaf6e014494415bf440980a3045bf5045b525680ac33"}, - {file = "mypy-1.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c6e4464ed5f01dc44dc9821caf67b60a4e5c3b04278286a85c067010653a0eb"}, - {file = "mypy-1.7.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:d9b338c19fa2412f76e17525c1b4f2c687a55b156320acb588df79f2e6fa9fea"}, - {file = "mypy-1.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:204e0d6de5fd2317394a4eff62065614c4892d5a4d1a7ee55b765d7a3d9e3f82"}, - {file = "mypy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:84860e06ba363d9c0eeabd45ac0fde4b903ad7aa4f93cd8b648385a888e23200"}, - {file = "mypy-1.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8c5091ebd294f7628eb25ea554852a52058ac81472c921150e3a61cdd68f75a7"}, - {file = "mypy-1.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40716d1f821b89838589e5b3106ebbc23636ffdef5abc31f7cd0266db936067e"}, - {file = "mypy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cf3f0c5ac72139797953bd50bc6c95ac13075e62dbfcc923571180bebb662e9"}, - {file = "mypy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:78e25b2fd6cbb55ddfb8058417df193f0129cad5f4ee75d1502248e588d9e0d7"}, - {file = "mypy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75c4d2a6effd015786c87774e04331b6da863fc3fc4e8adfc3b40aa55ab516fe"}, - {file = "mypy-1.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2643d145af5292ee956aa0a83c2ce1038a3bdb26e033dadeb2f7066fb0c9abce"}, - {file = "mypy-1.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75aa828610b67462ffe3057d4d8a4112105ed211596b750b53cbfe182f44777a"}, - {file = "mypy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ee5d62d28b854eb61889cde4e1dbc10fbaa5560cb39780c3995f6737f7e82120"}, - {file = "mypy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:72cf32ce7dd3562373f78bd751f73c96cfb441de147cc2448a92c1a308bd0ca6"}, - {file = "mypy-1.7.1-py3-none-any.whl", hash = "sha256:f7c5d642db47376a0cc130f0de6d055056e010debdaf0707cd2b0fc7e7ef30ea"}, - {file = "mypy-1.7.1.tar.gz", hash = "sha256:fcb6d9afb1b6208b4c712af0dafdc650f518836065df0d4fb1d800f5d6773db2"}, + {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"}, + {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"}, + {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"}, + {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"}, + {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"}, + {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"}, + {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"}, + {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"}, + {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"}, + {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"}, + {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"}, + {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"}, + {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"}, + {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"}, + {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"}, + {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"}, + {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"}, + {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"}, + {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"}, + {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"}, + {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"}, + {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"}, + {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"}, + {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"}, + {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"}, + {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"}, + {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"}, ] [package.dependencies] From 0ae9c517cc83e61927f45d96500c554cfc2ae750 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Dec 2023 01:22:02 +0000 Subject: [PATCH 076/685] build(deps-dev): bump ruff from 0.1.8 to 0.1.9 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.8 to 0.1.9. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.1.8...v0.1.9) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 768ffdf3a9..f474725498 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1406,28 +1406,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.1.8" +version = "0.1.9" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7de792582f6e490ae6aef36a58d85df9f7a0cfd1b0d4fe6b4fb51803a3ac96fa"}, - {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c8e3255afd186c142eef4ec400d7826134f028a85da2146102a1172ecc7c3696"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff78a7583020da124dd0deb835ece1d87bb91762d40c514ee9b67a087940528b"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd8ee69b02e7bdefe1e5da2d5b6eaaddcf4f90859f00281b2333c0e3a0cc9cd6"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a05b0ddd7ea25495e4115a43125e8a7ebed0aa043c3d432de7e7d6e8e8cd6448"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e6f08ca730f4dc1b76b473bdf30b1b37d42da379202a059eae54ec7fc1fbcfed"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f35960b02df6b827c1b903091bb14f4b003f6cf102705efc4ce78132a0aa5af3"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d076717c67b34c162da7c1a5bda16ffc205e0e0072c03745275e7eab888719f"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6a21ab023124eafb7cef6d038f835cb1155cd5ea798edd8d9eb2f8b84be07d9"}, - {file = "ruff-0.1.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ce697c463458555027dfb194cb96d26608abab920fa85213deb5edf26e026664"}, - {file = "ruff-0.1.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:db6cedd9ffed55548ab313ad718bc34582d394e27a7875b4b952c2d29c001b26"}, - {file = "ruff-0.1.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:05ffe9dbd278965271252704eddb97b4384bf58b971054d517decfbf8c523f05"}, - {file = "ruff-0.1.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5daaeaf00ae3c1efec9742ff294b06c3a2a9db8d3db51ee4851c12ad385cda30"}, - {file = "ruff-0.1.8-py3-none-win32.whl", hash = "sha256:e49fbdfe257fa41e5c9e13c79b9e79a23a79bd0e40b9314bc53840f520c2c0b3"}, - {file = "ruff-0.1.8-py3-none-win_amd64.whl", hash = "sha256:f41f692f1691ad87f51708b823af4bb2c5c87c9248ddd3191c8f088e66ce590a"}, - {file = "ruff-0.1.8-py3-none-win_arm64.whl", hash = "sha256:aa8ee4f8440023b0a6c3707f76cadce8657553655dcbb5fc9b2f9bb9bee389f6"}, - {file = "ruff-0.1.8.tar.gz", hash = "sha256:f7ee467677467526cfe135eab86a40a0e8db43117936ac4f9b469ce9cdb3fb62"}, + {file = "ruff-0.1.9-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:e6a212f436122ac73df851f0cf006e0c6612fe6f9c864ed17ebefce0eff6a5fd"}, + {file = "ruff-0.1.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:28d920e319783d5303333630dae46ecc80b7ba294aeffedf946a02ac0b7cc3db"}, + {file = "ruff-0.1.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:104aa9b5e12cb755d9dce698ab1b97726b83012487af415a4512fedd38b1459e"}, + {file = "ruff-0.1.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1e63bf5a4a91971082a4768a0aba9383c12392d0d6f1e2be2248c1f9054a20da"}, + {file = "ruff-0.1.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4d0738917c203246f3e275b37006faa3aa96c828b284ebfe3e99a8cb413c8c4b"}, + {file = "ruff-0.1.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:69dac82d63a50df2ab0906d97a01549f814b16bc806deeac4f064ff95c47ddf5"}, + {file = "ruff-0.1.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2aec598fb65084e41a9c5d4b95726173768a62055aafb07b4eff976bac72a592"}, + {file = "ruff-0.1.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:744dfe4b35470fa3820d5fe45758aace6269c578f7ddc43d447868cfe5078bcb"}, + {file = "ruff-0.1.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:479ca4250cab30f9218b2e563adc362bd6ae6343df7c7b5a7865300a5156d5a6"}, + {file = "ruff-0.1.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:aa8344310f1ae79af9ccd6e4b32749e93cddc078f9b5ccd0e45bd76a6d2e8bb6"}, + {file = "ruff-0.1.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:837c739729394df98f342319f5136f33c65286b28b6b70a87c28f59354ec939b"}, + {file = "ruff-0.1.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:e6837202c2859b9f22e43cb01992373c2dbfeae5c0c91ad691a4a2e725392464"}, + {file = "ruff-0.1.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:331aae2cd4a0554667ac683243b151c74bd60e78fb08c3c2a4ac05ee1e606a39"}, + {file = "ruff-0.1.9-py3-none-win32.whl", hash = "sha256:8151425a60878e66f23ad47da39265fc2fad42aed06fb0a01130e967a7a064f4"}, + {file = "ruff-0.1.9-py3-none-win_amd64.whl", hash = "sha256:c497d769164df522fdaf54c6eba93f397342fe4ca2123a2e014a5b8fc7df81c7"}, + {file = "ruff-0.1.9-py3-none-win_arm64.whl", hash = "sha256:0e17f53bcbb4fff8292dfd84cf72d767b5e146f009cccd40c2fad27641f8a7a9"}, + {file = "ruff-0.1.9.tar.gz", hash = "sha256:b041dee2734719ddbb4518f762c982f2e912e7f28b8ee4fe1dee0b15d1b6e800"}, ] [[package]] From 86165a106b54966dbe6b7b5db83b1fd33ae8c919 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Dec 2023 01:28:27 +0000 Subject: [PATCH 077/685] build(deps-dev): bump mkdocs-material from 9.5.2 to 9.5.3 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.2 to 9.5.3. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.2...9.5.3) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index f474725498..cc9491c9d0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.2" +version = "9.5.3" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.2-py3-none-any.whl", hash = "sha256:6ed0fbf4682491766f0ec1acc955db6901c2fd424c7ab343964ef51b819741f5"}, - {file = "mkdocs_material-9.5.2.tar.gz", hash = "sha256:ca8b9cd2b3be53e858e5a1a45ac9668bd78d95d77a30288bb5ebc1a31db6184c"}, + {file = "mkdocs_material-9.5.3-py3-none-any.whl", hash = "sha256:76c93a8525cceb0b395b9cedab3428bf518cf6439adef2b940f1c1574b775d89"}, + {file = "mkdocs_material-9.5.3.tar.gz", hash = "sha256:5899219f422f0a6de784232d9d40374416302ffae3c160cacc72969fcc1ee372"}, ] [package.dependencies] @@ -758,7 +758,7 @@ babel = ">=2.10,<3.0" colorama = ">=0.4,<1.0" jinja2 = ">=3.0,<4.0" markdown = ">=3.2,<4.0" -mkdocs = ">=1.5.3,<2.0" +mkdocs = ">=1.5.3,<1.6.0" mkdocs-material-extensions = ">=1.3,<2.0" paginate = ">=0.5,<1.0" pygments = ">=2.16,<3.0" From f56b20ec0f67fbd18eb4bf5b9a9b891e663ce5ca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Dec 2023 01:28:46 +0000 Subject: [PATCH 078/685] build(deps-dev): bump black from 23.12.0 to 23.12.1 Bumps [black](https://github.com/psf/black) from 23.12.0 to 23.12.1. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.12.0...23.12.1) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/poetry.lock b/poetry.lock index cc9491c9d0..a35162a1af 100644 --- a/poetry.lock +++ b/poetry.lock @@ -73,33 +73,33 @@ files = [ [[package]] name = "black" -version = "23.12.0" +version = "23.12.1" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:67f19562d367468ab59bd6c36a72b2c84bc2f16b59788690e02bbcb140a77175"}, - {file = "black-23.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bbd75d9f28a7283b7426160ca21c5bd640ca7cd8ef6630b4754b6df9e2da8462"}, - {file = "black-23.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:593596f699ca2dcbbbdfa59fcda7d8ad6604370c10228223cd6cf6ce1ce7ed7e"}, - {file = "black-23.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:12d5f10cce8dc27202e9a252acd1c9a426c83f95496c959406c96b785a92bb7d"}, - {file = "black-23.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e73c5e3d37e5a3513d16b33305713237a234396ae56769b839d7c40759b8a41c"}, - {file = "black-23.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba09cae1657c4f8a8c9ff6cfd4a6baaf915bb4ef7d03acffe6a2f6585fa1bd01"}, - {file = "black-23.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace64c1a349c162d6da3cef91e3b0e78c4fc596ffde9413efa0525456148873d"}, - {file = "black-23.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:72db37a2266b16d256b3ea88b9affcdd5c41a74db551ec3dd4609a59c17d25bf"}, - {file = "black-23.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fdf6f23c83078a6c8da2442f4d4eeb19c28ac2a6416da7671b72f0295c4a697b"}, - {file = "black-23.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39dda060b9b395a6b7bf9c5db28ac87b3c3f48d4fdff470fa8a94ab8271da47e"}, - {file = "black-23.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7231670266ca5191a76cb838185d9be59cfa4f5dd401b7c1c70b993c58f6b1b5"}, - {file = "black-23.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:193946e634e80bfb3aec41830f5d7431f8dd5b20d11d89be14b84a97c6b8bc75"}, - {file = "black-23.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcf91b01ddd91a2fed9a8006d7baa94ccefe7e518556470cf40213bd3d44bbbc"}, - {file = "black-23.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:996650a89fe5892714ea4ea87bc45e41a59a1e01675c42c433a35b490e5aa3f0"}, - {file = "black-23.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdbff34c487239a63d86db0c9385b27cdd68b1bfa4e706aa74bb94a435403672"}, - {file = "black-23.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:97af22278043a6a1272daca10a6f4d36c04dfa77e61cbaaf4482e08f3640e9f0"}, - {file = "black-23.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ead25c273adfad1095a8ad32afdb8304933efba56e3c1d31b0fee4143a1e424a"}, - {file = "black-23.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c71048345bdbced456cddf1622832276d98a710196b842407840ae8055ade6ee"}, - {file = "black-23.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a832b6e00eef2c13b3239d514ea3b7d5cc3eaa03d0474eedcbbda59441ba5d"}, - {file = "black-23.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:6a82a711d13e61840fb11a6dfecc7287f2424f1ca34765e70c909a35ffa7fb95"}, - {file = "black-23.12.0-py3-none-any.whl", hash = "sha256:a7c07db8200b5315dc07e331dda4d889a56f6bf4db6a9c2a526fa3166a81614f"}, - {file = "black-23.12.0.tar.gz", hash = "sha256:330a327b422aca0634ecd115985c1c7fd7bdb5b5a2ef8aa9888a82e2ebe9437a"}, + {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, + {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, + {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, + {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, + {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, + {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, + {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, + {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, + {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, + {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, + {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, + {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, + {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, + {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, + {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, + {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, + {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, + {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, + {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, + {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, + {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, + {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, ] [package.dependencies] From 2bb880652cec80458d804af87bae8111411288e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Dec 2023 01:29:22 +0000 Subject: [PATCH 079/685] build(deps): bump importlib-metadata from 7.0.0 to 7.0.1 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 7.0.0 to 7.0.1. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v7.0.0...v7.0.1) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index a35162a1af..891239fc61 100644 --- a/poetry.lock +++ b/poetry.lock @@ -496,13 +496,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.0.0" +version = "7.0.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.0.0-py3-none-any.whl", hash = "sha256:d97503976bb81f40a193d41ee6570868479c69d5068651eb039c40d850c59d67"}, - {file = "importlib_metadata-7.0.0.tar.gz", hash = "sha256:7fc841f8b8332803464e5dc1c63a2e59121f46ca186c0e2e182e80bf8c1319f7"}, + {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, + {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, ] [package.dependencies] From 6c1b829c24a4de5eebcd7ee6509601ef46461cfc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jan 2024 01:45:24 +0000 Subject: [PATCH 080/685] build(deps-dev): bump pytest from 7.4.3 to 7.4.4 Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.3 to 7.4.4. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/7.4.3...7.4.4) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 891239fc61..d52a28355b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1048,13 +1048,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pytest" -version = "7.4.3" +version = "7.4.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, - {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, ] [package.dependencies] From 4605875c3ba466b7e2adb6b187d2396a600e7bec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Jan 2024 01:41:17 +0000 Subject: [PATCH 081/685] build(deps-dev): bump ruff from 0.1.9 to 0.1.11 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.9 to 0.1.11. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.1.9...v0.1.11) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index d52a28355b..57ad2e916c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1406,28 +1406,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.1.9" +version = "0.1.11" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.1.9-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:e6a212f436122ac73df851f0cf006e0c6612fe6f9c864ed17ebefce0eff6a5fd"}, - {file = "ruff-0.1.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:28d920e319783d5303333630dae46ecc80b7ba294aeffedf946a02ac0b7cc3db"}, - {file = "ruff-0.1.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:104aa9b5e12cb755d9dce698ab1b97726b83012487af415a4512fedd38b1459e"}, - {file = "ruff-0.1.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1e63bf5a4a91971082a4768a0aba9383c12392d0d6f1e2be2248c1f9054a20da"}, - {file = "ruff-0.1.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4d0738917c203246f3e275b37006faa3aa96c828b284ebfe3e99a8cb413c8c4b"}, - {file = "ruff-0.1.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:69dac82d63a50df2ab0906d97a01549f814b16bc806deeac4f064ff95c47ddf5"}, - {file = "ruff-0.1.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2aec598fb65084e41a9c5d4b95726173768a62055aafb07b4eff976bac72a592"}, - {file = "ruff-0.1.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:744dfe4b35470fa3820d5fe45758aace6269c578f7ddc43d447868cfe5078bcb"}, - {file = "ruff-0.1.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:479ca4250cab30f9218b2e563adc362bd6ae6343df7c7b5a7865300a5156d5a6"}, - {file = "ruff-0.1.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:aa8344310f1ae79af9ccd6e4b32749e93cddc078f9b5ccd0e45bd76a6d2e8bb6"}, - {file = "ruff-0.1.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:837c739729394df98f342319f5136f33c65286b28b6b70a87c28f59354ec939b"}, - {file = "ruff-0.1.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:e6837202c2859b9f22e43cb01992373c2dbfeae5c0c91ad691a4a2e725392464"}, - {file = "ruff-0.1.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:331aae2cd4a0554667ac683243b151c74bd60e78fb08c3c2a4ac05ee1e606a39"}, - {file = "ruff-0.1.9-py3-none-win32.whl", hash = "sha256:8151425a60878e66f23ad47da39265fc2fad42aed06fb0a01130e967a7a064f4"}, - {file = "ruff-0.1.9-py3-none-win_amd64.whl", hash = "sha256:c497d769164df522fdaf54c6eba93f397342fe4ca2123a2e014a5b8fc7df81c7"}, - {file = "ruff-0.1.9-py3-none-win_arm64.whl", hash = "sha256:0e17f53bcbb4fff8292dfd84cf72d767b5e146f009cccd40c2fad27641f8a7a9"}, - {file = "ruff-0.1.9.tar.gz", hash = "sha256:b041dee2734719ddbb4518f762c982f2e912e7f28b8ee4fe1dee0b15d1b6e800"}, + {file = "ruff-0.1.11-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:a7f772696b4cdc0a3b2e527fc3c7ccc41cdcb98f5c80fdd4f2b8c50eb1458196"}, + {file = "ruff-0.1.11-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:934832f6ed9b34a7d5feea58972635c2039c7a3b434fe5ba2ce015064cb6e955"}, + {file = "ruff-0.1.11-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea0d3e950e394c4b332bcdd112aa566010a9f9c95814844a7468325290aabfd9"}, + {file = "ruff-0.1.11-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9bd4025b9c5b429a48280785a2b71d479798a69f5c2919e7d274c5f4b32c3607"}, + {file = "ruff-0.1.11-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1ad00662305dcb1e987f5ec214d31f7d6a062cae3e74c1cbccef15afd96611d"}, + {file = "ruff-0.1.11-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4b077ce83f47dd6bea1991af08b140e8b8339f0ba8cb9b7a484c30ebab18a23f"}, + {file = "ruff-0.1.11-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4a88efecec23c37b11076fe676e15c6cdb1271a38f2b415e381e87fe4517f18"}, + {file = "ruff-0.1.11-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b25093dad3b055667730a9b491129c42d45e11cdb7043b702e97125bcec48a1"}, + {file = "ruff-0.1.11-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:231d8fb11b2cc7c0366a326a66dafc6ad449d7fcdbc268497ee47e1334f66f77"}, + {file = "ruff-0.1.11-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:09c415716884950080921dd6237767e52e227e397e2008e2bed410117679975b"}, + {file = "ruff-0.1.11-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0f58948c6d212a6b8d41cd59e349751018797ce1727f961c2fa755ad6208ba45"}, + {file = "ruff-0.1.11-py3-none-musllinux_1_2_i686.whl", hash = "sha256:190a566c8f766c37074d99640cd9ca3da11d8deae2deae7c9505e68a4a30f740"}, + {file = "ruff-0.1.11-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6464289bd67b2344d2a5d9158d5eb81025258f169e69a46b741b396ffb0cda95"}, + {file = "ruff-0.1.11-py3-none-win32.whl", hash = "sha256:9b8f397902f92bc2e70fb6bebfa2139008dc72ae5177e66c383fa5426cb0bf2c"}, + {file = "ruff-0.1.11-py3-none-win_amd64.whl", hash = "sha256:eb85ee287b11f901037a6683b2374bb0ec82928c5cbc984f575d0437979c521a"}, + {file = "ruff-0.1.11-py3-none-win_arm64.whl", hash = "sha256:97ce4d752f964ba559c7023a86e5f8e97f026d511e48013987623915431c7ea9"}, + {file = "ruff-0.1.11.tar.gz", hash = "sha256:f9d4d88cb6eeb4dfe20f9f0519bd2eaba8119bde87c3d5065c541dbae2b5a2cb"}, ] [[package]] From 233ab29e0cc70a25e4c2a6fd8344bec66c6ca848 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 01:46:26 +0000 Subject: [PATCH 082/685] build(deps-dev): bump types-deprecated from 1.2.9.3 to 1.2.9.20240106 Bumps [types-deprecated](https://github.com/python/typeshed) from 1.2.9.3 to 1.2.9.20240106. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-deprecated dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 57ad2e916c..6c52166fc6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1529,13 +1529,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "types-deprecated" -version = "1.2.9.3" +version = "1.2.9.20240106" description = "Typing stubs for Deprecated" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "types-Deprecated-1.2.9.3.tar.gz", hash = "sha256:ef87327adf3e3c4a4c7d8e06e58f6476710d3466ecfb53c49efb080804a70ef3"}, - {file = "types_Deprecated-1.2.9.3-py3-none-any.whl", hash = "sha256:24da9210763e5e1b3d0d4f6f8bba9ad3bb6af3fe7f6815fc37e3ede4681704f5"}, + {file = "types-Deprecated-1.2.9.20240106.tar.gz", hash = "sha256:afeb819e9a03d0a5795f18c88fe6207c48ed13c639e93281bd9d9b7bb6d34310"}, + {file = "types_Deprecated-1.2.9.20240106-py3-none-any.whl", hash = "sha256:9dcb258493b5be407574ee21e50ddac9e429072d39b576126bf1ac00764fb9a8"}, ] [[package]] From 70c8a29a1241ed904263282179dd18dd55f7bca3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 01:46:54 +0000 Subject: [PATCH 083/685] build(deps-dev): bump types-python-dateutil Bumps [types-python-dateutil](https://github.com/python/typeshed) from 2.8.19.14 to 2.8.19.20240106. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-python-dateutil dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6c52166fc6..06f3144546 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1540,13 +1540,13 @@ files = [ [[package]] name = "types-python-dateutil" -version = "2.8.19.14" +version = "2.8.19.20240106" description = "Typing stubs for python-dateutil" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, - {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, + {file = "types-python-dateutil-2.8.19.20240106.tar.gz", hash = "sha256:1f8db221c3b98e6ca02ea83a58371b22c374f42ae5bbdf186db9c9a76581459f"}, + {file = "types_python_dateutil-2.8.19.20240106-py3-none-any.whl", hash = "sha256:efbbdc54590d0f16152fa103c9879c7d4a00e82078f6e2cf01769042165acaa2"}, ] [[package]] From f1029e57f58f86391ada96e58a7838d681555ffe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 01:21:38 +0000 Subject: [PATCH 084/685] build(deps): bump jinja2 from 3.1.2 to 3.1.3 Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.2 to 3.1.3. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/jinja/compare/3.1.2...3.1.3) --- updated-dependencies: - dependency-name: jinja2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 06f3144546..9174528c47 100644 --- a/poetry.lock +++ b/poetry.lock @@ -584,13 +584,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.3" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] [package.dependencies] From 83808598d05d6a352d23fa150d018bd4c859137d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Jan 2024 01:12:10 +0000 Subject: [PATCH 085/685] build(deps-dev): bump ruff from 0.1.11 to 0.1.12 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.11 to 0.1.12. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.1.11...v0.1.12) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9174528c47..29409aa76b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1406,28 +1406,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.1.11" +version = "0.1.12" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.1.11-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:a7f772696b4cdc0a3b2e527fc3c7ccc41cdcb98f5c80fdd4f2b8c50eb1458196"}, - {file = "ruff-0.1.11-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:934832f6ed9b34a7d5feea58972635c2039c7a3b434fe5ba2ce015064cb6e955"}, - {file = "ruff-0.1.11-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea0d3e950e394c4b332bcdd112aa566010a9f9c95814844a7468325290aabfd9"}, - {file = "ruff-0.1.11-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9bd4025b9c5b429a48280785a2b71d479798a69f5c2919e7d274c5f4b32c3607"}, - {file = "ruff-0.1.11-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1ad00662305dcb1e987f5ec214d31f7d6a062cae3e74c1cbccef15afd96611d"}, - {file = "ruff-0.1.11-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4b077ce83f47dd6bea1991af08b140e8b8339f0ba8cb9b7a484c30ebab18a23f"}, - {file = "ruff-0.1.11-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4a88efecec23c37b11076fe676e15c6cdb1271a38f2b415e381e87fe4517f18"}, - {file = "ruff-0.1.11-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b25093dad3b055667730a9b491129c42d45e11cdb7043b702e97125bcec48a1"}, - {file = "ruff-0.1.11-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:231d8fb11b2cc7c0366a326a66dafc6ad449d7fcdbc268497ee47e1334f66f77"}, - {file = "ruff-0.1.11-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:09c415716884950080921dd6237767e52e227e397e2008e2bed410117679975b"}, - {file = "ruff-0.1.11-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0f58948c6d212a6b8d41cd59e349751018797ce1727f961c2fa755ad6208ba45"}, - {file = "ruff-0.1.11-py3-none-musllinux_1_2_i686.whl", hash = "sha256:190a566c8f766c37074d99640cd9ca3da11d8deae2deae7c9505e68a4a30f740"}, - {file = "ruff-0.1.11-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6464289bd67b2344d2a5d9158d5eb81025258f169e69a46b741b396ffb0cda95"}, - {file = "ruff-0.1.11-py3-none-win32.whl", hash = "sha256:9b8f397902f92bc2e70fb6bebfa2139008dc72ae5177e66c383fa5426cb0bf2c"}, - {file = "ruff-0.1.11-py3-none-win_amd64.whl", hash = "sha256:eb85ee287b11f901037a6683b2374bb0ec82928c5cbc984f575d0437979c521a"}, - {file = "ruff-0.1.11-py3-none-win_arm64.whl", hash = "sha256:97ce4d752f964ba559c7023a86e5f8e97f026d511e48013987623915431c7ea9"}, - {file = "ruff-0.1.11.tar.gz", hash = "sha256:f9d4d88cb6eeb4dfe20f9f0519bd2eaba8119bde87c3d5065c541dbae2b5a2cb"}, + {file = "ruff-0.1.12-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:544038693543c11edc56bb94a9875df2dc249e3616f90c15964c720dcccf0745"}, + {file = "ruff-0.1.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8a0e3ef6299c4eab75a7740730e4b4bd4a36e0bd8102ded01553403cad088fd4"}, + {file = "ruff-0.1.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47f6d939461e3273f10f4cd059fd0b83c249d73f1736032fffbac83a62939395"}, + {file = "ruff-0.1.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25be18abc1fc3f3d3fb55855c41ed5d52063316defde202f413493bb3888218c"}, + {file = "ruff-0.1.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d41e9f100b50526d80b076fc9c103c729387ff3f10f63606ed1038c30a372a40"}, + {file = "ruff-0.1.12-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:472a0548738d4711549c7874b43fab61aacafb1fede29c5232d4cfb8e2d13f69"}, + {file = "ruff-0.1.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46685ef2f106b827705df876d38617741ed4f858bbdbc0817f94476c45ab6669"}, + {file = "ruff-0.1.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf6073749c70b616d7929897b14824ec6713a6c3a8195dfd2ffdcc66594d880c"}, + {file = "ruff-0.1.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bdf26e5a2efab4c3aaf6b61648ea47a525dc12775810a85c285dc9ca03e5ac0"}, + {file = "ruff-0.1.12-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b631c6a95e4b6d5c4299e599067b5a89f5b18e2f2d9a6c22b879b3c4b077c96e"}, + {file = "ruff-0.1.12-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f193f460e231e63af5fc7516897cf5ab257cbda72ae83cf9a654f1c80c3b758a"}, + {file = "ruff-0.1.12-py3-none-musllinux_1_2_i686.whl", hash = "sha256:718523c3a0b787590511f212d30cc9b194228ef369c8bdd72acd1282cc27c468"}, + {file = "ruff-0.1.12-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1c49e826de55d81a6ef93808b760925e492bad7cc470aaa114a3be158b2c7f99"}, + {file = "ruff-0.1.12-py3-none-win32.whl", hash = "sha256:fbb1c002eeacb60161e51d77b2274c968656599477a1c8c65066953276e8ee2b"}, + {file = "ruff-0.1.12-py3-none-win_amd64.whl", hash = "sha256:7fe06ba77e5b7b78db1d058478c47176810f69bb5be7c1b0d06876af59198203"}, + {file = "ruff-0.1.12-py3-none-win_arm64.whl", hash = "sha256:bb29f8e3e6c95024902eaec5a9ce1fd5ac4e77f4594f4554e67fbb0f6d9a2f37"}, + {file = "ruff-0.1.12.tar.gz", hash = "sha256:97189f38c655e573f6bea0d12e9f18aad5539fd08ab50651449450999f45383a"}, ] [[package]] From a10ba848603c58caaba2a60216c36ab6981c5678 Mon Sep 17 00:00:00 2001 From: Brighten Tompkins <brightenqtompkins@gmail.com> Date: Fri, 12 Jan 2024 12:18:54 -0800 Subject: [PATCH 086/685] docs(version_scheme): fixed typo sever -> semver --- docs/bump.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bump.md b/docs/bump.md index d0ceb90ea0..00de9809fe 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -549,7 +549,7 @@ Choose version scheme | devrelease | `0.1.1.dev1` | `0.1.1-dev1` | | dev and pre | `1.0.0a3.dev1` | `1.0.0-a3-dev1` | -Options: `sever`, `pep440` +Options: `semver`, `pep440` Defaults to: `pep440` From 3e73157f366472f5065680ed5b72976d40a7b9ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 01:55:10 +0000 Subject: [PATCH 087/685] build(deps-dev): bump ruff from 0.1.12 to 0.1.13 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.12 to 0.1.13. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.1.12...v0.1.13) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 29409aa76b..a3a8f0fae0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1406,28 +1406,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.1.12" +version = "0.1.13" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.1.12-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:544038693543c11edc56bb94a9875df2dc249e3616f90c15964c720dcccf0745"}, - {file = "ruff-0.1.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8a0e3ef6299c4eab75a7740730e4b4bd4a36e0bd8102ded01553403cad088fd4"}, - {file = "ruff-0.1.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47f6d939461e3273f10f4cd059fd0b83c249d73f1736032fffbac83a62939395"}, - {file = "ruff-0.1.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25be18abc1fc3f3d3fb55855c41ed5d52063316defde202f413493bb3888218c"}, - {file = "ruff-0.1.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d41e9f100b50526d80b076fc9c103c729387ff3f10f63606ed1038c30a372a40"}, - {file = "ruff-0.1.12-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:472a0548738d4711549c7874b43fab61aacafb1fede29c5232d4cfb8e2d13f69"}, - {file = "ruff-0.1.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46685ef2f106b827705df876d38617741ed4f858bbdbc0817f94476c45ab6669"}, - {file = "ruff-0.1.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf6073749c70b616d7929897b14824ec6713a6c3a8195dfd2ffdcc66594d880c"}, - {file = "ruff-0.1.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bdf26e5a2efab4c3aaf6b61648ea47a525dc12775810a85c285dc9ca03e5ac0"}, - {file = "ruff-0.1.12-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b631c6a95e4b6d5c4299e599067b5a89f5b18e2f2d9a6c22b879b3c4b077c96e"}, - {file = "ruff-0.1.12-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f193f460e231e63af5fc7516897cf5ab257cbda72ae83cf9a654f1c80c3b758a"}, - {file = "ruff-0.1.12-py3-none-musllinux_1_2_i686.whl", hash = "sha256:718523c3a0b787590511f212d30cc9b194228ef369c8bdd72acd1282cc27c468"}, - {file = "ruff-0.1.12-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1c49e826de55d81a6ef93808b760925e492bad7cc470aaa114a3be158b2c7f99"}, - {file = "ruff-0.1.12-py3-none-win32.whl", hash = "sha256:fbb1c002eeacb60161e51d77b2274c968656599477a1c8c65066953276e8ee2b"}, - {file = "ruff-0.1.12-py3-none-win_amd64.whl", hash = "sha256:7fe06ba77e5b7b78db1d058478c47176810f69bb5be7c1b0d06876af59198203"}, - {file = "ruff-0.1.12-py3-none-win_arm64.whl", hash = "sha256:bb29f8e3e6c95024902eaec5a9ce1fd5ac4e77f4594f4554e67fbb0f6d9a2f37"}, - {file = "ruff-0.1.12.tar.gz", hash = "sha256:97189f38c655e573f6bea0d12e9f18aad5539fd08ab50651449450999f45383a"}, + {file = "ruff-0.1.13-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:e3fd36e0d48aeac672aa850045e784673449ce619afc12823ea7868fcc41d8ba"}, + {file = "ruff-0.1.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9fb6b3b86450d4ec6a6732f9f60c4406061b6851c4b29f944f8c9d91c3611c7a"}, + {file = "ruff-0.1.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b13ba5d7156daaf3fd08b6b993360a96060500aca7e307d95ecbc5bb47a69296"}, + {file = "ruff-0.1.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9ebb40442f7b531e136d334ef0851412410061e65d61ca8ce90d894a094feb22"}, + {file = "ruff-0.1.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226b517f42d59a543d6383cfe03cccf0091e3e0ed1b856c6824be03d2a75d3b6"}, + {file = "ruff-0.1.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5f0312ba1061e9b8c724e9a702d3c8621e3c6e6c2c9bd862550ab2951ac75c16"}, + {file = "ruff-0.1.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2f59bcf5217c661254bd6bc42d65a6fd1a8b80c48763cb5c2293295babd945dd"}, + {file = "ruff-0.1.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6894b00495e00c27b6ba61af1fc666f17de6140345e5ef27dd6e08fb987259d"}, + {file = "ruff-0.1.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a1600942485c6e66119da294c6294856b5c86fd6df591ce293e4a4cc8e72989"}, + {file = "ruff-0.1.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ee3febce7863e231a467f90e681d3d89210b900d49ce88723ce052c8761be8c7"}, + {file = "ruff-0.1.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:dcaab50e278ff497ee4d1fe69b29ca0a9a47cd954bb17963628fa417933c6eb1"}, + {file = "ruff-0.1.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f57de973de4edef3ad3044d6a50c02ad9fc2dff0d88587f25f1a48e3f72edf5e"}, + {file = "ruff-0.1.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7a36fa90eb12208272a858475ec43ac811ac37e91ef868759770b71bdabe27b6"}, + {file = "ruff-0.1.13-py3-none-win32.whl", hash = "sha256:a623349a505ff768dad6bd57087e2461be8db58305ebd5577bd0e98631f9ae69"}, + {file = "ruff-0.1.13-py3-none-win_amd64.whl", hash = "sha256:f988746e3c3982bea7f824c8fa318ce7f538c4dfefec99cd09c8770bd33e6539"}, + {file = "ruff-0.1.13-py3-none-win_arm64.whl", hash = "sha256:6bbbc3042075871ec17f28864808540a26f0f79a4478c357d3e3d2284e832998"}, + {file = "ruff-0.1.13.tar.gz", hash = "sha256:e261f1baed6291f434ffb1d5c6bd8051d1c2a26958072d38dfbec39b3dda7352"}, ] [[package]] From eb5f7374e8ab6fdacaeafff85ee956c85694d8c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jan 2024 01:57:48 +0000 Subject: [PATCH 088/685] build(deps-dev): bump mkdocs-material from 9.5.3 to 9.5.4 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.3 to 9.5.4. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.3...9.5.4) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index a3a8f0fae0..2ea4288d1c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.3" +version = "9.5.4" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.3-py3-none-any.whl", hash = "sha256:76c93a8525cceb0b395b9cedab3428bf518cf6439adef2b940f1c1574b775d89"}, - {file = "mkdocs_material-9.5.3.tar.gz", hash = "sha256:5899219f422f0a6de784232d9d40374416302ffae3c160cacc72969fcc1ee372"}, + {file = "mkdocs_material-9.5.4-py3-none-any.whl", hash = "sha256:efd7cc8ae03296d728da9bd38f4db8b07ab61f9738a0cbd0dfaf2a15a50e7343"}, + {file = "mkdocs_material-9.5.4.tar.gz", hash = "sha256:3d196ee67fad16b2df1a458d650a8ac1890294eaae368d26cee71bc24ad41c40"}, ] [package.dependencies] From 2ceeed3e574fb0ca17fca634ee3d5a3132532c98 Mon Sep 17 00:00:00 2001 From: Kartik Vashistha <kartikv.work@gmail.com> Date: Thu, 18 Jan 2024 08:53:42 +0000 Subject: [PATCH 089/685] docs(github_actions.md): fix typo crendetial -> credential --- docs/tutorials/github_actions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/github_actions.md b/docs/tutorials/github_actions.md index 3cb92725a5..7a98abe2be 100644 --- a/docs/tutorials/github_actions.md +++ b/docs/tutorials/github_actions.md @@ -72,7 +72,7 @@ newely created version. Once the new tag is created, triggering an automatic publish command would be desired. -In order to do so, the crendetial needs to be added with the information of our PyPI account. +In order to do so, the credential needs to be added with the information of our PyPI account. Instead of using username and password, we suggest using [api token](https://pypi.org/help/#apitoken) generated from PyPI. From 735dd4b2f4037fbff24be37f03677a209b6fd9e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 01:39:15 +0000 Subject: [PATCH 090/685] build(deps-dev): bump ruff from 0.1.13 to 0.1.14 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.13 to 0.1.14. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.1.13...v0.1.14) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2ea4288d1c..fb726689a8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1224,6 +1224,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -1406,28 +1407,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.1.13" +version = "0.1.14" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.1.13-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:e3fd36e0d48aeac672aa850045e784673449ce619afc12823ea7868fcc41d8ba"}, - {file = "ruff-0.1.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9fb6b3b86450d4ec6a6732f9f60c4406061b6851c4b29f944f8c9d91c3611c7a"}, - {file = "ruff-0.1.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b13ba5d7156daaf3fd08b6b993360a96060500aca7e307d95ecbc5bb47a69296"}, - {file = "ruff-0.1.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9ebb40442f7b531e136d334ef0851412410061e65d61ca8ce90d894a094feb22"}, - {file = "ruff-0.1.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226b517f42d59a543d6383cfe03cccf0091e3e0ed1b856c6824be03d2a75d3b6"}, - {file = "ruff-0.1.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5f0312ba1061e9b8c724e9a702d3c8621e3c6e6c2c9bd862550ab2951ac75c16"}, - {file = "ruff-0.1.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2f59bcf5217c661254bd6bc42d65a6fd1a8b80c48763cb5c2293295babd945dd"}, - {file = "ruff-0.1.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6894b00495e00c27b6ba61af1fc666f17de6140345e5ef27dd6e08fb987259d"}, - {file = "ruff-0.1.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a1600942485c6e66119da294c6294856b5c86fd6df591ce293e4a4cc8e72989"}, - {file = "ruff-0.1.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ee3febce7863e231a467f90e681d3d89210b900d49ce88723ce052c8761be8c7"}, - {file = "ruff-0.1.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:dcaab50e278ff497ee4d1fe69b29ca0a9a47cd954bb17963628fa417933c6eb1"}, - {file = "ruff-0.1.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f57de973de4edef3ad3044d6a50c02ad9fc2dff0d88587f25f1a48e3f72edf5e"}, - {file = "ruff-0.1.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7a36fa90eb12208272a858475ec43ac811ac37e91ef868759770b71bdabe27b6"}, - {file = "ruff-0.1.13-py3-none-win32.whl", hash = "sha256:a623349a505ff768dad6bd57087e2461be8db58305ebd5577bd0e98631f9ae69"}, - {file = "ruff-0.1.13-py3-none-win_amd64.whl", hash = "sha256:f988746e3c3982bea7f824c8fa318ce7f538c4dfefec99cd09c8770bd33e6539"}, - {file = "ruff-0.1.13-py3-none-win_arm64.whl", hash = "sha256:6bbbc3042075871ec17f28864808540a26f0f79a4478c357d3e3d2284e832998"}, - {file = "ruff-0.1.13.tar.gz", hash = "sha256:e261f1baed6291f434ffb1d5c6bd8051d1c2a26958072d38dfbec39b3dda7352"}, + {file = "ruff-0.1.14-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:96f76536df9b26622755c12ed8680f159817be2f725c17ed9305b472a757cdbb"}, + {file = "ruff-0.1.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ab3f71f64498c7241123bb5a768544cf42821d2a537f894b22457a543d3ca7a9"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7060156ecc572b8f984fd20fd8b0fcb692dd5d837b7606e968334ab7ff0090ab"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a53d8e35313d7b67eb3db15a66c08434809107659226a90dcd7acb2afa55faea"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bea9be712b8f5b4ebed40e1949379cfb2a7d907f42921cf9ab3aae07e6fba9eb"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2270504d629a0b064247983cbc495bed277f372fb9eaba41e5cf51f7ba705a6a"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80258bb3b8909b1700610dfabef7876423eed1bc930fe177c71c414921898efa"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:653230dd00aaf449eb5ff25d10a6e03bc3006813e2cb99799e568f55482e5cae"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b3acc6c4e6928459ba9eb7459dd4f0c4bf266a053c863d72a44c33246bfdbf"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6b3dadc9522d0eccc060699a9816e8127b27addbb4697fc0c08611e4e6aeb8b5"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1c8eca1a47b4150dc0fbec7fe68fc91c695aed798532a18dbb1424e61e9b721f"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:62ce2ae46303ee896fc6811f63d6dabf8d9c389da0f3e3f2bce8bc7f15ef5488"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b2027dde79d217b211d725fc833e8965dc90a16d0d3213f1298f97465956661b"}, + {file = "ruff-0.1.14-py3-none-win32.whl", hash = "sha256:722bafc299145575a63bbd6b5069cb643eaa62546a5b6398f82b3e4403329cab"}, + {file = "ruff-0.1.14-py3-none-win_amd64.whl", hash = "sha256:e3d241aa61f92b0805a7082bd89a9990826448e4d0398f0e2bc8f05c75c63d99"}, + {file = "ruff-0.1.14-py3-none-win_arm64.whl", hash = "sha256:269302b31ade4cde6cf6f9dd58ea593773a37ed3f7b97e793c8594b262466b67"}, + {file = "ruff-0.1.14.tar.gz", hash = "sha256:ad3f8088b2dfd884820289a06ab718cde7d38b94972212cc4ba90d5fbc9955f3"}, ] [[package]] From e1ace264837a70d6a1d7e5c3a169cad1f4f1b7f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Jan 2024 01:30:23 +0000 Subject: [PATCH 091/685] build(deps): bump argcomplete from 3.2.1 to 3.2.2 Bumps [argcomplete](https://github.com/kislyuk/argcomplete) from 3.2.1 to 3.2.2. - [Release notes](https://github.com/kislyuk/argcomplete/releases) - [Changelog](https://github.com/kislyuk/argcomplete/blob/develop/Changes.rst) - [Commits](https://github.com/kislyuk/argcomplete/compare/v3.2.1...v3.2.2) --- updated-dependencies: - dependency-name: argcomplete dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index fb726689a8..de3534b58e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "argcomplete" -version = "3.2.1" +version = "3.2.2" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.2.1-py3-none-any.whl", hash = "sha256:30891d87f3c1abe091f2142613c9d33cac84a5e15404489f033b20399b691fec"}, - {file = "argcomplete-3.2.1.tar.gz", hash = "sha256:437f67fb9b058da5a090df505ef9be0297c4883993f3f56cb186ff087778cfb4"}, + {file = "argcomplete-3.2.2-py3-none-any.whl", hash = "sha256:e44f4e7985883ab3e73a103ef0acd27299dbfe2dfed00142c35d4ddd3005901d"}, + {file = "argcomplete-3.2.2.tar.gz", hash = "sha256:f3e49e8ea59b4026ee29548e24488af46e30c9de57d48638e24f54a1ea1000a2"}, ] [package.extras] From 45586973170edfb100cfca7db226506b38811238 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jan 2024 01:16:11 +0000 Subject: [PATCH 092/685] build(deps-dev): bump mkdocs-material from 9.5.4 to 9.5.5 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.4 to 9.5.5. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.4...9.5.5) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index de3534b58e..b53a62304d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.4" +version = "9.5.5" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.4-py3-none-any.whl", hash = "sha256:efd7cc8ae03296d728da9bd38f4db8b07ab61f9738a0cbd0dfaf2a15a50e7343"}, - {file = "mkdocs_material-9.5.4.tar.gz", hash = "sha256:3d196ee67fad16b2df1a458d650a8ac1890294eaae368d26cee71bc24ad41c40"}, + {file = "mkdocs_material-9.5.5-py3-none-any.whl", hash = "sha256:ac50b2431a79a3b160fdefbba37c9132485f1a69166aba115ad49fafdbbbc5df"}, + {file = "mkdocs_material-9.5.5.tar.gz", hash = "sha256:4480d9580faf42fed0123d0465502bfc1c0c239ecc9c4d66159cf0459ea1b4ae"}, ] [package.dependencies] @@ -768,7 +768,7 @@ requests = ">=2.26,<3.0" [package.extras] git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2,<2.0)"] -imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=9.4,<10.0)"] +imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] [[package]] From 43b1654cc0df2be45f3a581b50c0d1056f0dc963 Mon Sep 17 00:00:00 2001 From: ljnsn <82611987+ljnsn@users.noreply.github.com> Date: Thu, 25 Jan 2024 01:30:52 +0100 Subject: [PATCH 093/685] docs: add cz-conventional-gitmoji to the third party docs --- docs/third-party-commitizen.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/third-party-commitizen.md b/docs/third-party-commitizen.md index 671cdc0fd1..dbbd879434 100644 --- a/docs/third-party-commitizen.md +++ b/docs/third-party-commitizen.md @@ -46,6 +46,24 @@ pip install cz-emoji cz --name cz_emoji commit ``` +### [cz-conventional-gitmoji](https://github.com/ljnsn/cz-conventional-gitmoji) + +*conventional commit*s, but with [gitmojis](https://gitmoji.dev). + +Includes a pre-commit hook that automatically adds the correct gitmoji to the commit message based on the conventional type. + +### Installation + +```bash +pip install cz-conventional-gitmoji +``` + +### Usage + +```bash +cz --name cz_gitmoji commit +``` + ### [Commitizen emoji](https://pypi.org/project/commitizen-emoji/) (Unmaintained) From bf1f818d02963e51e20dab1228455c56f22232d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 01:24:42 +0000 Subject: [PATCH 094/685] build(deps-dev): bump mkdocs-material from 9.5.5 to 9.5.6 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.5 to 9.5.6. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.5...9.5.6) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index b53a62304d..13c276540c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.5" +version = "9.5.6" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.5-py3-none-any.whl", hash = "sha256:ac50b2431a79a3b160fdefbba37c9132485f1a69166aba115ad49fafdbbbc5df"}, - {file = "mkdocs_material-9.5.5.tar.gz", hash = "sha256:4480d9580faf42fed0123d0465502bfc1c0c239ecc9c4d66159cf0459ea1b4ae"}, + {file = "mkdocs_material-9.5.6-py3-none-any.whl", hash = "sha256:e115b90fccf5cd7f5d15b0c2f8e6246b21041628b8f590630e7fca66ed7fcf6c"}, + {file = "mkdocs_material-9.5.6.tar.gz", hash = "sha256:5b24df36d8ac6cecd611241ce6f6423ccde3e1ad89f8360c3f76d5565fc2d82a"}, ] [package.dependencies] From 129ddca71512cea2a6f6b2b018f2658fa20dc5fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 00:22:47 +0000 Subject: [PATCH 095/685] build(deps-dev): bump pytest from 7.4.4 to 8.0.0 Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.4 to 8.0.0. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/7.4.4...8.0.0) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 12 ++++++------ pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/poetry.lock b/poetry.lock index 13c276540c..b5c8cde8a1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1048,13 +1048,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pytest" -version = "7.4.4" +version = "8.0.0" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, - {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, + {file = "pytest-8.0.0-py3-none-any.whl", hash = "sha256:50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6"}, + {file = "pytest-8.0.0.tar.gz", hash = "sha256:249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c"}, ] [package.dependencies] @@ -1062,7 +1062,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<2.0" +pluggy = ">=1.3.0,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] @@ -1766,4 +1766,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "a5c0fbba4345989709fd201b2755ec9445972072108b5962666f41d451c7e6e2" +content-hash = "48784ae66f8098a8edaf69c3a1c49c5bf564cf94eda4ca7a20914675674afd18" diff --git a/pyproject.toml b/pyproject.toml index b644753b1b..3cd0c7ab58 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,7 +52,7 @@ importlib_metadata = { version = ">=4.13,<8"} # dev tool ipython = "^8.0" # test -pytest = "^7.2.0" +pytest = ">=7.2,<9.0" pytest-cov = "^4.0" pytest-mock = "^3.10" pytest-regressions = "^2.4.0" From 657d9cfc03305a53af9d03c45cc2f0dd740f8b3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 01:53:13 +0000 Subject: [PATCH 096/685] build(deps-dev): bump ruff from 0.1.14 to 0.1.15 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.14 to 0.1.15. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.1.14...v0.1.15) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index b5c8cde8a1..4ff2455fbd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1407,28 +1407,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.1.14" +version = "0.1.15" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.1.14-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:96f76536df9b26622755c12ed8680f159817be2f725c17ed9305b472a757cdbb"}, - {file = "ruff-0.1.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ab3f71f64498c7241123bb5a768544cf42821d2a537f894b22457a543d3ca7a9"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7060156ecc572b8f984fd20fd8b0fcb692dd5d837b7606e968334ab7ff0090ab"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a53d8e35313d7b67eb3db15a66c08434809107659226a90dcd7acb2afa55faea"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bea9be712b8f5b4ebed40e1949379cfb2a7d907f42921cf9ab3aae07e6fba9eb"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2270504d629a0b064247983cbc495bed277f372fb9eaba41e5cf51f7ba705a6a"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80258bb3b8909b1700610dfabef7876423eed1bc930fe177c71c414921898efa"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:653230dd00aaf449eb5ff25d10a6e03bc3006813e2cb99799e568f55482e5cae"}, - {file = "ruff-0.1.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b3acc6c4e6928459ba9eb7459dd4f0c4bf266a053c863d72a44c33246bfdbf"}, - {file = "ruff-0.1.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6b3dadc9522d0eccc060699a9816e8127b27addbb4697fc0c08611e4e6aeb8b5"}, - {file = "ruff-0.1.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1c8eca1a47b4150dc0fbec7fe68fc91c695aed798532a18dbb1424e61e9b721f"}, - {file = "ruff-0.1.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:62ce2ae46303ee896fc6811f63d6dabf8d9c389da0f3e3f2bce8bc7f15ef5488"}, - {file = "ruff-0.1.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b2027dde79d217b211d725fc833e8965dc90a16d0d3213f1298f97465956661b"}, - {file = "ruff-0.1.14-py3-none-win32.whl", hash = "sha256:722bafc299145575a63bbd6b5069cb643eaa62546a5b6398f82b3e4403329cab"}, - {file = "ruff-0.1.14-py3-none-win_amd64.whl", hash = "sha256:e3d241aa61f92b0805a7082bd89a9990826448e4d0398f0e2bc8f05c75c63d99"}, - {file = "ruff-0.1.14-py3-none-win_arm64.whl", hash = "sha256:269302b31ade4cde6cf6f9dd58ea593773a37ed3f7b97e793c8594b262466b67"}, - {file = "ruff-0.1.14.tar.gz", hash = "sha256:ad3f8088b2dfd884820289a06ab718cde7d38b94972212cc4ba90d5fbc9955f3"}, + {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5fe8d54df166ecc24106db7dd6a68d44852d14eb0729ea4672bb4d96c320b7df"}, + {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6f0bfbb53c4b4de117ac4d6ddfd33aa5fc31beeaa21d23c45c6dd249faf9126f"}, + {file = "ruff-0.1.15-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0d432aec35bfc0d800d4f70eba26e23a352386be3a6cf157083d18f6f5881c8"}, + {file = "ruff-0.1.15-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9405fa9ac0e97f35aaddf185a1be194a589424b8713e3b97b762336ec79ff807"}, + {file = "ruff-0.1.15-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c66ec24fe36841636e814b8f90f572a8c0cb0e54d8b5c2d0e300d28a0d7bffec"}, + {file = "ruff-0.1.15-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:6f8ad828f01e8dd32cc58bc28375150171d198491fc901f6f98d2a39ba8e3ff5"}, + {file = "ruff-0.1.15-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86811954eec63e9ea162af0ffa9f8d09088bab51b7438e8b6488b9401863c25e"}, + {file = "ruff-0.1.15-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd4025ac5e87d9b80e1f300207eb2fd099ff8200fa2320d7dc066a3f4622dc6b"}, + {file = "ruff-0.1.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b17b93c02cdb6aeb696effecea1095ac93f3884a49a554a9afa76bb125c114c1"}, + {file = "ruff-0.1.15-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ddb87643be40f034e97e97f5bc2ef7ce39de20e34608f3f829db727a93fb82c5"}, + {file = "ruff-0.1.15-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:abf4822129ed3a5ce54383d5f0e964e7fef74a41e48eb1dfad404151efc130a2"}, + {file = "ruff-0.1.15-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6c629cf64bacfd136c07c78ac10a54578ec9d1bd2a9d395efbee0935868bf852"}, + {file = "ruff-0.1.15-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1bab866aafb53da39c2cadfb8e1c4550ac5340bb40300083eb8967ba25481447"}, + {file = "ruff-0.1.15-py3-none-win32.whl", hash = "sha256:2417e1cb6e2068389b07e6fa74c306b2810fe3ee3476d5b8a96616633f40d14f"}, + {file = "ruff-0.1.15-py3-none-win_amd64.whl", hash = "sha256:3837ac73d869efc4182d9036b1405ef4c73d9b1f88da2413875e34e0d6919587"}, + {file = "ruff-0.1.15-py3-none-win_arm64.whl", hash = "sha256:9a933dfb1c14ec7a33cceb1e49ec4a16b51ce3c20fd42663198746efc0427360"}, + {file = "ruff-0.1.15.tar.gz", hash = "sha256:f6dfa8c1b21c913c326919056c390966648b680966febcb796cc9d1aaab8564e"}, ] [[package]] From bb2433bcb1658058fe5435af63fe1a022f520d6c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Feb 2024 01:39:26 +0000 Subject: [PATCH 097/685] ci(deps): bump codecov/codecov-action from 3 to 4 Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 3 to 4. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v3...v4) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 00ab9a765d..f5967f3a93 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -31,7 +31,7 @@ jobs: shell: bash - name: Upload coverage to Codecov if: runner.os == 'Linux' - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 with: token: ${{secrets.CODECOV_TOKEN}} file: ./coverage.xml From db97a5ff08b0a2669103d1a7340601634c12fa91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez-Mondrag=C3=B3n?= <edgarrm358@gmail.com> Date: Tue, 30 Jan 2024 15:56:00 -0600 Subject: [PATCH 098/685] chore: Declare support for Python 3.12 in PyPI classifiers --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 3cd0c7ab58..d2d26e517c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,7 @@ classifiers = [ "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Programming Language :: Python :: Implementation :: CPython", ] From d2377dde4911c377a209531c07a29c89de4a0805 Mon Sep 17 00:00:00 2001 From: Eduardo Cardoso <eduardocardoso@users.noreply.github.com> Date: Thu, 1 Feb 2024 05:02:48 -0300 Subject: [PATCH 099/685] feat: properly bump versions between prereleases (#799) * fix: properly bump versions between prereleases * refactor: incorporate PR feedback * refactor: lower version bump into BaseVersion class and simplify callers of BaseVersion.bump() * feat: preserve prerelease linearity * docs: document the `--prerelease` option --------- Co-authored-by: Jens Troeger <jens.troeger@light-speed.de> --- commitizen/commands/bump.py | 41 +++++++-- commitizen/version_schemes.py | 60 ++++++++---- docs/bump.md | 28 ++++++ tests/commands/test_bump_command.py | 91 ++++++++++++++++++- ...rsion_to_prerelease_version_beta_alpha_.md | 2 +- ...version_to_prerelease_version_rc_alpha_.md | 2 +- ..._version_to_prerelease_version_rc_beta_.md | 2 +- tests/test_version_scheme_pep440.py | 77 +++++++++++++++- tests/test_version_scheme_semver.py | 11 ++- 9 files changed, 277 insertions(+), 37 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index af365ecd28..b2ecd3130f 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -24,7 +24,11 @@ ) from commitizen.changelog_formats import get_changelog_format from commitizen.providers import get_provider -from commitizen.version_schemes import InvalidVersion, get_version_scheme +from commitizen.version_schemes import ( + get_version_scheme, + InvalidVersion, + VersionProtocol, +) logger = getLogger("commitizen") @@ -226,11 +230,6 @@ def __call__(self): # noqa: C901 "To avoid this error, manually specify the type of increment with `--increment`" ) - # Increment is removed when current and next version - # are expected to be prereleases. - if prerelease and current_version.is_prerelease: - increment = None - new_version = current_version.bump( increment, prerelease=prerelease, @@ -398,3 +397,33 @@ def _get_commit_args(self): if self.no_verify: commit_args.append("--no-verify") return " ".join(commit_args) + + def find_previous_final_version( + self, current_version: VersionProtocol + ) -> VersionProtocol | None: + tag_format: str = self.bump_settings["tag_format"] + current = bump.normalize_tag( + current_version, + tag_format=tag_format, + scheme=self.scheme, + ) + + final_versions = [] + for tag in git.get_tag_names(): + assert tag + try: + version = self.scheme(tag) + if not version.is_prerelease or tag == current: + final_versions.append(version) + except InvalidVersion: + continue + + if not final_versions: + return None + + final_versions = sorted(final_versions) # type: ignore [type-var] + current_index = final_versions.index(current_version) + previous_index = current_index - 1 + if previous_index < 0: + return None + return final_versions[previous_index] diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index d7967ae928..c277d2efc4 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -100,6 +100,7 @@ def bump( prerelease_offset: int = 0, devrelease: int | None = None, is_local_version: bool = False, + force_bump: bool = False, ) -> Self: """ Based on the given increment, generate the next bumped version according to the version scheme @@ -146,6 +147,12 @@ def generate_prerelease( if not prerelease: return "" + # prevent down-bumping the pre-release phase, e.g. from 'b1' to 'a2' + # https://packaging.python.org/en/latest/specifications/version-specifiers/#pre-releases + # https://semver.org/#spec-item-11 + if self.is_prerelease and self.pre: + prerelease = max(prerelease, self.pre[0]) + # version.pre is needed for mypy check if self.is_prerelease and self.pre and prerelease.startswith(self.pre[0]): prev_prerelease: int = self.pre[1] @@ -171,20 +178,15 @@ def increment_base(self, increment: str | None = None) -> str: increments = [MAJOR, MINOR, PATCH] base = dict(zip_longest(increments, prev_release, fillvalue=0)) - # This flag means that current version - # must remove its prerelease tag, - # so it doesn't matter the increment. - # Example: 1.0.0a0 with PATCH/MINOR -> 1.0.0 - if not self.is_prerelease: - if increment == MAJOR: - base[MAJOR] += 1 - base[MINOR] = 0 - base[PATCH] = 0 - elif increment == MINOR: - base[MINOR] += 1 - base[PATCH] = 0 - elif increment == PATCH: - base[PATCH] += 1 + if increment == MAJOR: + base[MAJOR] += 1 + base[MINOR] = 0 + base[PATCH] = 0 + elif increment == MINOR: + base[MINOR] += 1 + base[PATCH] = 0 + elif increment == PATCH: + base[PATCH] += 1 return f"{base[MAJOR]}.{base[MINOR]}.{base[PATCH]}" @@ -195,6 +197,7 @@ def bump( prerelease_offset: int = 0, devrelease: int | None = None, is_local_version: bool = False, + force_bump: bool = False, ) -> Self: """Based on the given increment a proper semver will be generated. @@ -212,9 +215,34 @@ def bump( local_version = self.scheme(self.local).bump(increment) return self.scheme(f"{self.public}+{local_version}") # type: ignore else: - base = self.increment_base(increment) + if not self.is_prerelease: + base = self.increment_base(increment) + elif force_bump: + base = self.increment_base(increment) + else: + base = f"{self.major}.{self.minor}.{self.micro}" + if increment == PATCH: + pass + elif increment == MINOR: + if self.micro != 0: + base = self.increment_base(increment) + elif increment == MAJOR: + if self.minor != 0 or self.micro != 0: + base = self.increment_base(increment) dev_version = self.generate_devrelease(devrelease) - pre_version = self.generate_prerelease(prerelease, offset=prerelease_offset) + release = list(self.release) + if len(release) < 3: + release += [0] * (3 - len(release)) + current_base = ".".join(str(part) for part in release) + if base == current_base: + pre_version = self.generate_prerelease( + prerelease, offset=prerelease_offset + ) + else: + base_version = cast(BaseVersion, self.scheme(base)) + pre_version = base_version.generate_prerelease( + prerelease, offset=prerelease_offset + ) # TODO: post version return self.scheme(f"{base}{pre_version}{dev_version}") # type: ignore diff --git a/docs/bump.md b/docs/bump.md index 00de9809fe..7bf6689231 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -113,6 +113,34 @@ Generate a **changelog** along with the new version and tag when bumping. cz bump --changelog ``` +### `--prerelease` + +The bump is a pre-release bump, meaning that in addition to a possible version bump the new version receives a +pre-release segment compatible with the bump’s version scheme, where the segment consist of a _phase_ and a +non-negative number. Supported options for `--prerelease` are the following phase names `alpha`, `beta`, or +`rc` (release candidate). For more details, refer to the +[Python Packaging User Guide](https://packaging.python.org/en/latest/specifications/version-specifiers/#pre-releases). + +Note that as per [semantic versioning spec](https://semver.org/#spec-item-9) + +> Pre-release versions have a lower precedence than the associated normal version. A pre-release version +> indicates that the version is unstable and might not satisfy the intended compatibility requirements +> as denoted by its associated normal version. + +For example, the following versions (using the [PEP 440](https://peps.python.org/pep-0440/) scheme) are ordered +by their precedence and showcase how a release might flow through a development cycle: + +- `1.0.0` is the current published version +- `1.0.1a0` after committing a `fix:` for pre-release +- `1.1.0a1` after committing an additional `feat:` for pre-release +- `1.1.0b0` after bumping a beta release +- `1.1.0rc0` after bumping the release candidate +- `1.1.0` next feature release + +Also note that bumping pre-releases _maintains linearity_: bumping of a pre-release with lower precedence than +the current pre-release phase maintains the current phase of higher precedence. For example, if the current +version is `1.0.0b1` then bumping with `--prerelease alpha` will continue to bump the “beta” phase. + ### `--check-consistency` Check whether the versions defined in `version_files` and the version in commitizen diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 774ec0a95f..d05c8f3301 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -208,9 +208,9 @@ def test_bump_command_increment_option( @pytest.mark.usefixtures("tmp_commitizen_project") def test_bump_command_prelease(mocker: MockFixture): - # PRERELEASE create_file_and_commit("feat: location") + # Create an alpha pre-release. testargs = ["cz", "bump", "--prerelease", "alpha", "--yes"] mocker.patch.object(sys, "argv", testargs) cli.main() @@ -218,7 +218,58 @@ def test_bump_command_prelease(mocker: MockFixture): tag_exists = git.tag_exist("0.2.0a0") assert tag_exists is True - # PRERELEASE BUMP CREATES VERSION WITHOUT PRERELEASE + # Create a beta pre-release. + testargs = ["cz", "bump", "--prerelease", "beta", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + tag_exists = git.tag_exist("0.2.0b0") + assert tag_exists is True + + # With a current beta pre-release, bumping alpha must bump beta + # because we can't bump "backwards". + testargs = ["cz", "bump", "--prerelease", "alpha", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + tag_exists = git.tag_exist("0.2.0a1") + assert tag_exists is False + tag_exists = git.tag_exist("0.2.0b1") + assert tag_exists is True + + # Create a rc pre-release. + testargs = ["cz", "bump", "--prerelease", "rc", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + tag_exists = git.tag_exist("0.2.0rc0") + assert tag_exists is True + + # With a current rc pre-release, bumping alpha must bump rc. + testargs = ["cz", "bump", "--prerelease", "alpha", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + tag_exists = git.tag_exist("0.2.0a1") + assert tag_exists is False + tag_exists = git.tag_exist("0.2.0b2") + assert tag_exists is False + tag_exists = git.tag_exist("0.2.0rc1") + assert tag_exists is True + + # With a current rc pre-release, bumping beta must bump rc. + testargs = ["cz", "bump", "--prerelease", "beta", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + tag_exists = git.tag_exist("0.2.0a2") + assert tag_exists is False + tag_exists = git.tag_exist("0.2.0b2") + assert tag_exists is False + tag_exists = git.tag_exist("0.2.0rc2") + assert tag_exists is True + + # Create a final release from the current pre-release. testargs = ["cz", "bump"] mocker.patch.object(sys, "argv", testargs) cli.main() @@ -227,6 +278,42 @@ def test_bump_command_prelease(mocker: MockFixture): assert tag_exists is True +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_bump_command_prelease_increment(mocker: MockFixture): + # FINAL RELEASE + create_file_and_commit("fix: location") + + testargs = ["cz", "bump", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + assert git.tag_exist("0.1.1") + + # PRERELEASE + create_file_and_commit("fix: location") + + testargs = ["cz", "bump", "--prerelease", "alpha", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + assert git.tag_exist("0.1.2a0") + + create_file_and_commit("feat: location") + + testargs = ["cz", "bump", "--prerelease", "alpha", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + assert git.tag_exist("0.2.0a0") + + create_file_and_commit("feat!: breaking") + + testargs = ["cz", "bump", "--prerelease", "alpha", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + assert git.tag_exist("1.0.0a0") + + @pytest.mark.usefixtures("tmp_commitizen_project") def test_bump_on_git_with_hooks_no_verify_disabled(mocker: MockFixture): """Bump commit without --no-verify""" diff --git a/tests/commands/test_changelog_command/test_changelog_incremental_with_prerelease_version_to_prerelease_version_beta_alpha_.md b/tests/commands/test_changelog_command/test_changelog_incremental_with_prerelease_version_to_prerelease_version_beta_alpha_.md index 300ca95756..ec9ab11d7b 100644 --- a/tests/commands/test_changelog_command/test_changelog_incremental_with_prerelease_version_to_prerelease_version_beta_alpha_.md +++ b/tests/commands/test_changelog_command/test_changelog_incremental_with_prerelease_version_to_prerelease_version_beta_alpha_.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.2.0a0 (2021-06-11) +## 0.2.0b1 (2021-06-11) ## 0.2.0b0 (2021-06-11) diff --git a/tests/commands/test_changelog_command/test_changelog_incremental_with_prerelease_version_to_prerelease_version_rc_alpha_.md b/tests/commands/test_changelog_command/test_changelog_incremental_with_prerelease_version_to_prerelease_version_rc_alpha_.md index 9a7e9f161f..e1c20b7e0d 100644 --- a/tests/commands/test_changelog_command/test_changelog_incremental_with_prerelease_version_to_prerelease_version_rc_alpha_.md +++ b/tests/commands/test_changelog_command/test_changelog_incremental_with_prerelease_version_to_prerelease_version_rc_alpha_.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.2.0a0 (2021-06-11) +## 0.2.0rc1 (2021-06-11) ## 0.2.0rc0 (2021-06-11) diff --git a/tests/commands/test_changelog_command/test_changelog_incremental_with_prerelease_version_to_prerelease_version_rc_beta_.md b/tests/commands/test_changelog_command/test_changelog_incremental_with_prerelease_version_to_prerelease_version_rc_beta_.md index b3be6f3c1d..e1c20b7e0d 100644 --- a/tests/commands/test_changelog_command/test_changelog_incremental_with_prerelease_version_to_prerelease_version_rc_beta_.md +++ b/tests/commands/test_changelog_command/test_changelog_incremental_with_prerelease_version_to_prerelease_version_rc_beta_.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.2.0b0 (2021-06-11) +## 0.2.0rc1 (2021-06-11) ## 0.2.0rc0 (2021-06-11) diff --git a/tests/test_version_scheme_pep440.py b/tests/test_version_scheme_pep440.py index 89f5a137ad..aa2120fad4 100644 --- a/tests/test_version_scheme_pep440.py +++ b/tests/test_version_scheme_pep440.py @@ -43,10 +43,11 @@ (("4.5.0+0.2.0", "MAJOR", None, 0, None), "4.5.0+1.0.0"), ] -# this cases should be handled gracefully -unexpected_cases = [ - (("0.1.1rc0", None, "alpha", 0, None), "0.1.1a0"), - (("0.1.1b1", None, "alpha", 0, None), "0.1.1a0"), +# never bump backwards on pre-releases +linear_prerelease_cases = [ + (("0.1.1b1", None, "alpha", 0, None), "0.1.1b2"), + (("0.1.1rc0", None, "alpha", 0, None), "0.1.1rc1"), + (("0.1.1rc0", None, "beta", 0, None), "0.1.1rc1"), ] weird_cases = [ @@ -78,10 +79,76 @@ (("1.0.0rc1", None, "rc", 0, None), "1.0.0rc2"), ] +# additional pre-release tests run through various release scenarios +prerelease_cases = [ + # + (("3.3.3", "PATCH", "alpha", 0, None), "3.3.4a0"), + (("3.3.4a0", "PATCH", "alpha", 0, None), "3.3.4a1"), + (("3.3.4a1", "MINOR", "alpha", 0, None), "3.4.0a0"), + (("3.4.0a0", "PATCH", "alpha", 0, None), "3.4.0a1"), + (("3.4.0a1", "MINOR", "alpha", 0, None), "3.4.0a2"), + (("3.4.0a2", "MAJOR", "alpha", 0, None), "4.0.0a0"), + (("4.0.0a0", "PATCH", "alpha", 0, None), "4.0.0a1"), + (("4.0.0a1", "MINOR", "alpha", 0, None), "4.0.0a2"), + (("4.0.0a2", "MAJOR", "alpha", 0, None), "4.0.0a3"), + # + (("1.0.0", "PATCH", "alpha", 0, None), "1.0.1a0"), + (("1.0.1a0", "PATCH", "alpha", 0, None), "1.0.1a1"), + (("1.0.1a1", "MINOR", "alpha", 0, None), "1.1.0a0"), + (("1.1.0a0", "PATCH", "alpha", 0, None), "1.1.0a1"), + (("1.1.0a1", "MINOR", "alpha", 0, None), "1.1.0a2"), + (("1.1.0a2", "MAJOR", "alpha", 0, None), "2.0.0a0"), + # + (("1.0.0", "MINOR", "alpha", 0, None), "1.1.0a0"), + (("1.1.0a0", "PATCH", "alpha", 0, None), "1.1.0a1"), + (("1.1.0a1", "MINOR", "alpha", 0, None), "1.1.0a2"), + (("1.1.0a2", "PATCH", "alpha", 0, None), "1.1.0a3"), + (("1.1.0a3", "MAJOR", "alpha", 0, None), "2.0.0a0"), + # + (("1.0.0", "MAJOR", "alpha", 0, None), "2.0.0a0"), + (("2.0.0a0", "MINOR", "alpha", 0, None), "2.0.0a1"), + (("2.0.0a1", "PATCH", "alpha", 0, None), "2.0.0a2"), + (("2.0.0a2", "MAJOR", "alpha", 0, None), "2.0.0a3"), + (("2.0.0a3", "MINOR", "alpha", 0, None), "2.0.0a4"), + (("2.0.0a4", "PATCH", "alpha", 0, None), "2.0.0a5"), + (("2.0.0a5", "MAJOR", "alpha", 0, None), "2.0.0a6"), + # + (("1.0.1a0", "PATCH", None, 0, None), "1.0.1"), + (("1.0.1a0", "MINOR", None, 0, None), "1.1.0"), + (("1.0.1a0", "MAJOR", None, 0, None), "2.0.0"), + # + (("1.1.0a0", "PATCH", None, 0, None), "1.1.0"), + (("1.1.0a0", "MINOR", None, 0, None), "1.1.0"), + (("1.1.0a0", "MAJOR", None, 0, None), "2.0.0"), + # + (("2.0.0a0", "MINOR", None, 0, None), "2.0.0"), + (("2.0.0a0", "MAJOR", None, 0, None), "2.0.0"), + (("2.0.0a0", "PATCH", None, 0, None), "2.0.0"), + # + (("3.0.0a1", None, None, 0, None), "3.0.0"), + (("3.0.0b1", None, None, 0, None), "3.0.0"), + (("3.0.0rc1", None, None, 0, None), "3.0.0"), + # + (("3.1.4", None, "alpha", 0, None), "3.1.4a0"), + (("3.1.4", None, "beta", 0, None), "3.1.4b0"), + (("3.1.4", None, "rc", 0, None), "3.1.4rc0"), + # + (("3.1.4", None, "alpha", 0, None), "3.1.4a0"), + (("3.1.4a0", "PATCH", "alpha", 0, None), "3.1.4a1"), # UNEXPECTED! + (("3.1.4a0", "MINOR", "alpha", 0, None), "3.2.0a0"), + (("3.1.4a0", "MAJOR", "alpha", 0, None), "4.0.0a0"), +] + @pytest.mark.parametrize( "test_input,expected", - itertools.chain(tdd_cases, weird_cases, simple_flow, unexpected_cases), + itertools.chain( + tdd_cases, + weird_cases, + simple_flow, + linear_prerelease_cases, + prerelease_cases, + ), ) def test_bump_pep440_version(test_input, expected): current_version = test_input[0] diff --git a/tests/test_version_scheme_semver.py b/tests/test_version_scheme_semver.py index 82ed33c229..85cfcf5df1 100644 --- a/tests/test_version_scheme_semver.py +++ b/tests/test_version_scheme_semver.py @@ -44,10 +44,11 @@ (("4.5.0+0.2.0", "MAJOR", None, 0, None), "4.5.0+1.0.0"), ] -# this cases should be handled gracefully -unexpected_cases = [ - (("0.1.1rc0", None, "alpha", 0, None), "0.1.1-a0"), - (("0.1.1b1", None, "alpha", 0, None), "0.1.1-a0"), +# never bump backwards on pre-releases +linear_prerelease_cases = [ + (("0.1.1b1", None, "alpha", 0, None), "0.1.1-b2"), + (("0.1.1rc0", None, "alpha", 0, None), "0.1.1-rc1"), + (("0.1.1rc0", None, "beta", 0, None), "0.1.1-rc1"), ] weird_cases = [ @@ -84,7 +85,7 @@ @pytest.mark.parametrize( "test_input, expected", - itertools.chain(tdd_cases, weird_cases, simple_flow, unexpected_cases), + itertools.chain(tdd_cases, weird_cases, simple_flow, linear_prerelease_cases), ) def test_bump_semver_version(test_input, expected): current_version = test_input[0] From 05bdead2a5238cc77560bd192b72294e824f2ef5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Thu, 1 Feb 2024 08:03:12 +0000 Subject: [PATCH 100/685] =?UTF-8?q?bump:=20version=203.13.0=20=E2=86=92=20?= =?UTF-8?q?3.14.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index dbe313c5da..55836498a0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.13.0 # automatically updated by Commitizen + rev: v3.14.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index c071ba9075..4ad6367e31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ +## v3.14.0 (2024-02-01) + +### Feat + +- properly bump versions between prereleases (#799) + ## v3.13.0 (2023-12-03) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 62ee17b836..382c7be006 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.13.0" +__version__ = "3.14.0" diff --git a/pyproject.toml b/pyproject.toml index d2d26e517c..7c3266469c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.13.0" +version = "3.14.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.13.0" +version = "3.14.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 9c02ae2d35034e244002bde9b33d3f6297a6aad1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Feb 2024 02:05:05 +0000 Subject: [PATCH 101/685] build(deps-dev): bump ruff from 0.1.15 to 0.2.0 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.15 to 0.2.0. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.1.15...v0.2.0) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- pyproject.toml | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4ff2455fbd..fc4c115f03 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1407,28 +1407,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.1.15" +version = "0.2.0" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5fe8d54df166ecc24106db7dd6a68d44852d14eb0729ea4672bb4d96c320b7df"}, - {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6f0bfbb53c4b4de117ac4d6ddfd33aa5fc31beeaa21d23c45c6dd249faf9126f"}, - {file = "ruff-0.1.15-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0d432aec35bfc0d800d4f70eba26e23a352386be3a6cf157083d18f6f5881c8"}, - {file = "ruff-0.1.15-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9405fa9ac0e97f35aaddf185a1be194a589424b8713e3b97b762336ec79ff807"}, - {file = "ruff-0.1.15-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c66ec24fe36841636e814b8f90f572a8c0cb0e54d8b5c2d0e300d28a0d7bffec"}, - {file = "ruff-0.1.15-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:6f8ad828f01e8dd32cc58bc28375150171d198491fc901f6f98d2a39ba8e3ff5"}, - {file = "ruff-0.1.15-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86811954eec63e9ea162af0ffa9f8d09088bab51b7438e8b6488b9401863c25e"}, - {file = "ruff-0.1.15-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd4025ac5e87d9b80e1f300207eb2fd099ff8200fa2320d7dc066a3f4622dc6b"}, - {file = "ruff-0.1.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b17b93c02cdb6aeb696effecea1095ac93f3884a49a554a9afa76bb125c114c1"}, - {file = "ruff-0.1.15-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ddb87643be40f034e97e97f5bc2ef7ce39de20e34608f3f829db727a93fb82c5"}, - {file = "ruff-0.1.15-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:abf4822129ed3a5ce54383d5f0e964e7fef74a41e48eb1dfad404151efc130a2"}, - {file = "ruff-0.1.15-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6c629cf64bacfd136c07c78ac10a54578ec9d1bd2a9d395efbee0935868bf852"}, - {file = "ruff-0.1.15-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1bab866aafb53da39c2cadfb8e1c4550ac5340bb40300083eb8967ba25481447"}, - {file = "ruff-0.1.15-py3-none-win32.whl", hash = "sha256:2417e1cb6e2068389b07e6fa74c306b2810fe3ee3476d5b8a96616633f40d14f"}, - {file = "ruff-0.1.15-py3-none-win_amd64.whl", hash = "sha256:3837ac73d869efc4182d9036b1405ef4c73d9b1f88da2413875e34e0d6919587"}, - {file = "ruff-0.1.15-py3-none-win_arm64.whl", hash = "sha256:9a933dfb1c14ec7a33cceb1e49ec4a16b51ce3c20fd42663198746efc0427360"}, - {file = "ruff-0.1.15.tar.gz", hash = "sha256:f6dfa8c1b21c913c326919056c390966648b680966febcb796cc9d1aaab8564e"}, + {file = "ruff-0.2.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:638ea3294f800d18bae84a492cb5a245c8d29c90d19a91d8e338937a4c27fca0"}, + {file = "ruff-0.2.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3ff35433fcf4dff6d610738712152df6b7d92351a1bde8e00bd405b08b3d5759"}, + {file = "ruff-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf9faafbdcf4f53917019f2c230766da437d4fd5caecd12ddb68bb6a17d74399"}, + {file = "ruff-0.2.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8153a3e4128ed770871c47545f1ae7b055023e0c222ff72a759f5a341ee06483"}, + {file = "ruff-0.2.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8a75a98ae989a27090e9c51f763990ad5bbc92d20626d54e9701c7fe597f399"}, + {file = "ruff-0.2.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:87057dd2fdde297130ff99553be8549ca38a2965871462a97394c22ed2dfc19d"}, + {file = "ruff-0.2.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d232f99d3ab00094ebaf88e0fb7a8ccacaa54cc7fa3b8993d9627a11e6aed7a"}, + {file = "ruff-0.2.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d3c641f95f435fc6754b05591774a17df41648f0daf3de0d75ad3d9f099ab92"}, + {file = "ruff-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3826fb34c144ef1e171b323ed6ae9146ab76d109960addca730756dc19dc7b22"}, + {file = "ruff-0.2.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:eceab7d85d09321b4de18b62d38710cf296cb49e98979960a59c6b9307c18cfe"}, + {file = "ruff-0.2.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:30ad74687e1f4a9ff8e513b20b82ccadb6bd796fe5697f1e417189c5cde6be3e"}, + {file = "ruff-0.2.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a7e3818698f8460bd0f8d4322bbe99db8327e9bc2c93c789d3159f5b335f47da"}, + {file = "ruff-0.2.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:edf23041242c48b0d8295214783ef543847ef29e8226d9f69bf96592dba82a83"}, + {file = "ruff-0.2.0-py3-none-win32.whl", hash = "sha256:e155147199c2714ff52385b760fe242bb99ea64b240a9ffbd6a5918eb1268843"}, + {file = "ruff-0.2.0-py3-none-win_amd64.whl", hash = "sha256:ba918e01cdd21e81b07555564f40d307b0caafa9a7a65742e98ff244f5035c59"}, + {file = "ruff-0.2.0-py3-none-win_arm64.whl", hash = "sha256:3fbaff1ba9564a2c5943f8f38bc221f04bac687cc7485e45237579fee7ccda79"}, + {file = "ruff-0.2.0.tar.gz", hash = "sha256:63856b91837606c673537d2889989733d7dffde553828d3b0f0bacfa6def54be"}, ] [[package]] @@ -1766,4 +1766,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "48784ae66f8098a8edaf69c3a1c49c5bf564cf94eda4ca7a20914675674afd18" +content-hash = "c23e3f50c2653e7204507694115f192306fb54b4eeb90087daf088ab67016b94" diff --git a/pyproject.toml b/pyproject.toml index 7c3266469c..2b06cb9b38 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,7 +62,7 @@ pytest-xdist = "^3.1.0" # code formatter black = "~=23.11" # linter -ruff = "~=0.1.6" +ruff = ">=0.1.6,<0.3.0" pre-commit = ">=2.18,<4.0" mypy = "^1.4" types-PyYAML = ">=5.4.3,<7.0.0" From e3c6bc93e7e94c3efe7d40eac2c83596ca7d91b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Feb 2024 02:18:49 +0000 Subject: [PATCH 102/685] build(deps-dev): bump black from 23.12.1 to 24.1.1 Bumps [black](https://github.com/psf/black) from 23.12.1 to 24.1.1. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.12.1...24.1.1) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 48 ++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/poetry.lock b/poetry.lock index fc4c115f03..d0be3bc97b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -73,33 +73,33 @@ files = [ [[package]] name = "black" -version = "23.12.1" +version = "24.1.1" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, - {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, - {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, - {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, - {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, - {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, - {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, - {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, - {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, - {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, - {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, - {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, - {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, - {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, - {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, - {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, - {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, - {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, - {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, - {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, - {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, - {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, + {file = "black-24.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2588021038bd5ada078de606f2a804cadd0a3cc6a79cb3e9bb3a8bf581325a4c"}, + {file = "black-24.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a95915c98d6e32ca43809d46d932e2abc5f1f7d582ffbe65a5b4d1588af7445"}, + {file = "black-24.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa6a0e965779c8f2afb286f9ef798df770ba2b6cee063c650b96adec22c056a"}, + {file = "black-24.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5242ecd9e990aeb995b6d03dc3b2d112d4a78f2083e5a8e86d566340ae80fec4"}, + {file = "black-24.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fc1ec9aa6f4d98d022101e015261c056ddebe3da6a8ccfc2c792cbe0349d48b7"}, + {file = "black-24.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0269dfdea12442022e88043d2910429bed717b2d04523867a85dacce535916b8"}, + {file = "black-24.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3d64db762eae4a5ce04b6e3dd745dcca0fb9560eb931a5be97472e38652a161"}, + {file = "black-24.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5d7b06ea8816cbd4becfe5f70accae953c53c0e53aa98730ceccb0395520ee5d"}, + {file = "black-24.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e2c8dfa14677f90d976f68e0c923947ae68fa3961d61ee30976c388adc0b02c8"}, + {file = "black-24.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a21725862d0e855ae05da1dd25e3825ed712eaaccef6b03017fe0853a01aa45e"}, + {file = "black-24.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07204d078e25327aad9ed2c64790d681238686bce254c910de640c7cc4fc3aa6"}, + {file = "black-24.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:a83fe522d9698d8f9a101b860b1ee154c1d25f8a82ceb807d319f085b2627c5b"}, + {file = "black-24.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08b34e85170d368c37ca7bf81cf67ac863c9d1963b2c1780c39102187ec8dd62"}, + {file = "black-24.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7258c27115c1e3b5de9ac6c4f9957e3ee2c02c0b39222a24dc7aa03ba0e986f5"}, + {file = "black-24.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40657e1b78212d582a0edecafef133cf1dd02e6677f539b669db4746150d38f6"}, + {file = "black-24.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e298d588744efda02379521a19639ebcd314fba7a49be22136204d7ed1782717"}, + {file = "black-24.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:34afe9da5056aa123b8bfda1664bfe6fb4e9c6f311d8e4a6eb089da9a9173bf9"}, + {file = "black-24.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:854c06fb86fd854140f37fb24dbf10621f5dab9e3b0c29a690ba595e3d543024"}, + {file = "black-24.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3897ae5a21ca132efa219c029cce5e6bfc9c3d34ed7e892113d199c0b1b444a2"}, + {file = "black-24.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:ecba2a15dfb2d97105be74bbfe5128bc5e9fa8477d8c46766505c1dda5883aac"}, + {file = "black-24.1.1-py3-none-any.whl", hash = "sha256:5cdc2e2195212208fbcae579b931407c1fa9997584f0a415421748aeafff1168"}, + {file = "black-24.1.1.tar.gz", hash = "sha256:48b5760dcbfe5cf97fd4fba23946681f3a81514c6ab8a45b50da67ac8fbc6c7b"}, ] [package.dependencies] @@ -1766,4 +1766,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "c23e3f50c2653e7204507694115f192306fb54b4eeb90087daf088ab67016b94" +content-hash = "ae231a49c0c27985defdc7adba7a112eecc8c8abe1e9a8e5cf5358f7a71637c0" diff --git a/pyproject.toml b/pyproject.toml index 2b06cb9b38..c4b204e287 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,7 +60,7 @@ pytest-regressions = "^2.4.0" pytest-freezer = "^0.4.6" pytest-xdist = "^3.1.0" # code formatter -black = "~=23.11" +black = ">=23.11,<25.0" # linter ruff = ">=0.1.6,<0.3.0" pre-commit = ">=2.18,<4.0" From a8e970bfec0f08015aa340507cc1acf5722cac82 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 2 Feb 2024 12:13:23 +0800 Subject: [PATCH 103/685] style: format the code with the latest black and ruff --- commitizen/changelog.py | 1 + commitizen/cz/base.py | 6 +++--- commitizen/cz/exceptions.py | 6 ++---- tests/test_bump_find_increment.py | 1 + tests/test_changelog.py | 6 +++--- tests/test_cz_customize.py | 6 ++++-- 6 files changed, 14 insertions(+), 12 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index cd9e76a320..e4273db93a 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -24,6 +24,7 @@ - [x] hook after changelog is generated (api calls) - [x] add support for change_type maps """ + from __future__ import annotations import re diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index d9bf5ea4a0..14d9e5a522 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -37,9 +37,9 @@ class BaseCommitizen(metaclass=ABCMeta): change_type_order: list[str] | None = None # Executed per message parsed by the commitizen - changelog_message_builder_hook: None | ( - Callable[[dict, git.GitCommit], dict] - ) = None + changelog_message_builder_hook: None | (Callable[[dict, git.GitCommit], dict]) = ( + None + ) # Executed only at the end of the changelog generation changelog_hook: Callable[[str, str | None], str] | None = None diff --git a/commitizen/cz/exceptions.py b/commitizen/cz/exceptions.py index 2597b68813..d74f39aaaa 100644 --- a/commitizen/cz/exceptions.py +++ b/commitizen/cz/exceptions.py @@ -1,6 +1,4 @@ -class CzException(Exception): - ... +class CzException(Exception): ... -class AnswerRequiredError(CzException): - ... +class AnswerRequiredError(CzException): ... diff --git a/tests/test_bump_find_increment.py b/tests/test_bump_find_increment.py index 8e8fc2705e..ff24ff17a7 100644 --- a/tests/test_bump_find_increment.py +++ b/tests/test_bump_find_increment.py @@ -2,6 +2,7 @@ CC: Conventional commits SVE: Semantic version at the end """ + import pytest from commitizen import bump diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 8aef10a31f..879443f334 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1298,9 +1298,9 @@ def test_render_changelog_with_changelog_message_builder_hook( gitcommits, tags, any_changelog_format: ChangelogFormat ): 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}" + message["message"] = ( + f"{message['message']} [link](github.com/232323232) {commit.author} {commit.author_email}" + ) return message parser = ConventionalCommitsCz.commit_parser diff --git a/tests/test_cz_customize.py b/tests/test_cz_customize.py index 9f3556fce8..20a17b3d9c 100644 --- a/tests/test_cz_customize.py +++ b/tests/test_cz_customize.py @@ -498,7 +498,8 @@ def test_answer_unicode(config_with_unicode): } message = cz.message(answers) assert ( - message == "✨ feature: this feature enables customization through a config file" + message + == "✨ feature: this feature enables customization through a config file" ) cz = CustomizeCommitsCz(config_with_unicode) @@ -574,7 +575,8 @@ def test_commit_parser(config): def test_commit_parser_unicode(config_with_unicode): cz = CustomizeCommitsCz(config_with_unicode) assert ( - cz.commit_parser == "^(?P<change_type>✨ feature|🐛 bug fix):\\s(?P<message>.*)?" + cz.commit_parser + == "^(?P<change_type>✨ feature|🐛 bug fix):\\s(?P<message>.*)?" ) From 893cf8c538c70ccf80b4325b62d6ccef8bc65e3e Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 2 Feb 2024 12:13:54 +0800 Subject: [PATCH 104/685] style: update ruff config with the latest config format --- pyproject.toml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c4b204e287..37603738f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -141,6 +141,8 @@ addopts = "--strict-markers" [tool.ruff] line-length = 88 + +[tool.ruff.lint] select = ["E", "F", "UP"] ignore = [ "E501", @@ -148,10 +150,10 @@ ignore = [ "D415" ] -[tool.ruff.isort] +[tool.ruff.lint.isort] known-first-party = ["commitizen", "tests"] -[tool.ruff.pydocstyle] +[tool.ruff.lint.pydocstyle] convention = "google" [tool.mypy] From 1c022ddfd0afbd73ddc15a7533b949ce86d4dd9d Mon Sep 17 00:00:00 2001 From: Chad Dombrova <chadrik@gmail.com> Date: Mon, 29 Jan 2024 13:06:25 -0800 Subject: [PATCH 105/685] fix(scm): only search tags that are reachable by the current commit The scm provider requires tags to be the source of truth for the current version, instead of files. Therefore, the current version should be the highest tag version upstream from the current commit. --- commitizen/commands/bump.py | 2 +- commitizen/git.py | 10 ++++- commitizen/providers/scm_provider.py | 36 +++++++++++++----- commitizen/version_schemes.py | 20 +++++++++- tests/providers/test_scm_provider.py | 56 +++++++++++++++++++++++++++- tests/test_git.py | 31 ++++++++++++++- 6 files changed, 138 insertions(+), 17 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index b2ecd3130f..023d4f805b 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -421,7 +421,7 @@ def find_previous_final_version( if not final_versions: return None - final_versions = sorted(final_versions) # type: ignore [type-var] + final_versions = sorted(final_versions) current_index = final_versions.index(current_version) previous_index = current_index - 1 if previous_index < 0: diff --git a/commitizen/git.py b/commitizen/git.py index 4c4dfdb961..6cdc7e2752 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -164,7 +164,9 @@ def get_filenames_in_commit(git_reference: str = ""): raise GitCommandError(c.err) -def get_tags(dateformat: str = "%Y-%m-%d") -> list[GitTag]: +def get_tags( + dateformat: str = "%Y-%m-%d", reachable_only: bool = False +) -> list[GitTag]: inner_delimiter = "---inner_delimiter---" formatter = ( f'"%(refname:lstrip=2){inner_delimiter}' @@ -172,8 +174,12 @@ def get_tags(dateformat: str = "%Y-%m-%d") -> list[GitTag]: f"%(creatordate:format:{dateformat}){inner_delimiter}" f'%(object)"' ) - c = cmd.run(f"git tag --format={formatter} --sort=-creatordate") + extra = "--merged" if reachable_only else "" + c = cmd.run(f"git tag --format={formatter} --sort=-creatordate {extra}") if c.return_code != 0: + if reachable_only and c.err == "fatal: malformed object name HEAD\n": + # this can happen if there are no commits in the repo yet + return [] raise GitCommandError(c.err) if c.err: diff --git a/commitizen/providers/scm_provider.py b/commitizen/providers/scm_provider.py index bc9dda4b8a..37329d07a5 100644 --- a/commitizen/providers/scm_provider.py +++ b/commitizen/providers/scm_provider.py @@ -1,11 +1,16 @@ from __future__ import annotations import re -from typing import Callable, cast +from typing import Callable from commitizen.git import get_tags -from commitizen.version_schemes import get_version_scheme +from commitizen.version_schemes import ( + get_version_scheme, + InvalidVersion, + Version, + VersionProtocol, +) from commitizen.providers.base_provider import VersionProvider @@ -28,7 +33,7 @@ class ScmProvider(VersionProvider): "$devrelease": r"(?P<devrelease>\.dev\d+)?", } - def _tag_format_matcher(self) -> Callable[[str], str | None]: + def _tag_format_matcher(self) -> Callable[[str], VersionProtocol | None]: version_scheme = get_version_scheme(self.config) pattern = self.config.settings["tag_format"] if pattern == "$version": @@ -38,15 +43,15 @@ def _tag_format_matcher(self) -> Callable[[str], str | None]: regex = re.compile(f"^{pattern}$", re.VERBOSE) - def matcher(tag: str) -> str | None: + def matcher(tag: str) -> Version | None: match = regex.match(tag) if not match: return None groups = match.groupdict() if "version" in groups: - return groups["version"] + ver = groups["version"] elif "major" in groups: - return "".join( + ver = "".join( ( groups["major"], f".{groups['minor']}" if groups.get("minor") else "", @@ -56,16 +61,27 @@ def matcher(tag: str) -> str | None: ) ) elif pattern == version_scheme.parser.pattern: - return str(version_scheme(tag)) - return None + ver = tag + else: + return None + + try: + return version_scheme(ver) + except InvalidVersion: + return None return matcher def get_version(self) -> str: matcher = self._tag_format_matcher() - return next( - (cast(str, matcher(t.name)) for t in get_tags() if matcher(t.name)), "0.0.0" + matches = sorted( + version + for t in get_tags(reachable_only=True) + if (version := matcher(t.name)) ) + if not matches: + return "0.0.0" + return str(matches[-1]) def set_version(self, version: str): # Not necessary diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index c277d2efc4..8fcec9e74f 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -4,7 +4,7 @@ import sys import warnings from itertools import zip_longest -from typing import TYPE_CHECKING, ClassVar, Protocol, Type, cast, runtime_checkable +from typing import TYPE_CHECKING, Any, ClassVar, Protocol, Type, cast, runtime_checkable import importlib_metadata as metadata from packaging.version import InvalidVersion # noqa: F401: Rexpose the common exception @@ -93,6 +93,24 @@ def micro(self) -> int: """The third item of :attr:`release` or ``0`` if unavailable.""" raise NotImplementedError("must be implemented") + def __lt__(self, other: Any) -> bool: + raise NotImplementedError("must be implemented") + + def __le__(self, other: Any) -> bool: + raise NotImplementedError("must be implemented") + + def __eq__(self, other: object) -> bool: + raise NotImplementedError("must be implemented") + + def __ge__(self, other: Any) -> bool: + raise NotImplementedError("must be implemented") + + def __gt__(self, other: Any) -> bool: + raise NotImplementedError("must be implemented") + + def __ne__(self, other: object) -> bool: + raise NotImplementedError("must be implemented") + def bump( self, increment: str, diff --git a/tests/providers/test_scm_provider.py b/tests/providers/test_scm_provider.py index a0bfc46474..9611dd9ee0 100644 --- a/tests/providers/test_scm_provider.py +++ b/tests/providers/test_scm_provider.py @@ -6,7 +6,13 @@ from commitizen.config.base_config import BaseConfig from commitizen.providers import get_provider from commitizen.providers.scm_provider import ScmProvider -from tests.utils import create_file_and_commit, create_tag +from tests.utils import ( + create_branch, + create_file_and_commit, + create_tag, + merge_branch, + switch_branch, +) @pytest.mark.parametrize( @@ -22,7 +28,8 @@ # much more lenient but require a v prefix. ("v$version", "v0.1.0", "0.1.0"), ("v$version", "no-match-because-no-v-prefix", "0.0.0"), - ("v$version", "v-match-TAG_FORMAT_REGEXS", "-match-TAG_FORMAT_REGEXS"), + # no match because not a valid version + ("v$version", "v-match-TAG_FORMAT_REGEXS", "0.0.0"), ("version-$version", "version-0.1.0", "0.1.0"), ("version-$version", "version-0.1", "0.1"), ("version-$version", "version-0.1.0rc1", "0.1.0rc1"), @@ -62,3 +69,48 @@ def test_scm_provider_default_without_commits_and_tags(config: BaseConfig): provider = get_provider(config) assert isinstance(provider, ScmProvider) assert provider.get_version() == "0.0.0" + + +@pytest.mark.usefixtures("tmp_git_project") +def test_scm_provider_default_with_commits_and_tags(config: BaseConfig): + config.settings["version_provider"] = "scm" + + provider = get_provider(config) + assert isinstance(provider, ScmProvider) + assert provider.get_version() == "0.0.0" + + create_file_and_commit("Initial state") + create_tag("1.0.0") + # create develop + create_branch("develop") + switch_branch("develop") + + # add a feature to develop + create_file_and_commit("develop: add beta feature1") + assert provider.get_version() == "1.0.0" + create_tag("1.1.0b0") + + # create staging + create_branch("staging") + switch_branch("staging") + create_file_and_commit("staging: Starting release candidate") + assert provider.get_version() == "1.1.0b0" + create_tag("1.1.0rc0") + + # add another feature to develop + switch_branch("develop") + create_file_and_commit("develop: add beta feature2") + assert provider.get_version() == "1.1.0b0" + create_tag("1.2.0b0") + + # add a hotfix to master + switch_branch("master") + create_file_and_commit("master: add hotfix") + assert provider.get_version() == "1.0.0" + create_tag("1.0.1") + + # merge the hotfix to staging + switch_branch("staging") + merge_branch("master") + + assert provider.get_version() == "1.1.0rc0" diff --git a/tests/test_git.py b/tests/test_git.py index 4ae11a45dd..79eb49f10c 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -9,7 +9,13 @@ from commitizen import cmd, exceptions, git from pytest_mock import MockFixture -from tests.utils import FakeCommand, create_file_and_commit, create_tag +from tests.utils import ( + FakeCommand, + create_file_and_commit, + create_tag, + create_branch, + switch_branch, +) def test_git_object_eq(): @@ -42,6 +48,29 @@ def test_get_tags(mocker: MockFixture): assert git.get_tags() == [] +def test_get_reachable_tags(tmp_commitizen_project): + with tmp_commitizen_project.as_cwd(): + create_file_and_commit("Initial state") + create_tag("1.0.0") + # create develop + create_branch("develop") + switch_branch("develop") + + # add a feature to develop + create_file_and_commit("develop") + create_tag("1.1.0b0") + + # create staging + switch_branch("master") + create_file_and_commit("master") + create_tag("1.0.1") + + tags = git.get_tags(reachable_only=True) + tag_names = set([t.name for t in tags]) + # 1.1.0b0 is not present + assert tag_names == {"1.0.0", "1.0.1"} + + def test_get_tag_names(mocker: MockFixture): tag_str = "v1.0.0\n" "v0.5.0\n" "v0.0.1\n" mocker.patch("commitizen.cmd.run", return_value=FakeCommand(out=tag_str)) From 6b84f30716ceea85701b5a50649cf05b289fb102 Mon Sep 17 00:00:00 2001 From: Chad Dombrova <chadrik@gmail.com> Date: Sat, 3 Feb 2024 09:46:53 -0800 Subject: [PATCH 106/685] test(version_schemes): add tests for version sortability --- tests/test_version_scheme_pep440.py | 98 +++++++++++++++++++++++++++++ tests/test_version_scheme_semver.py | 74 ++++++++++++++++++++++ 2 files changed, 172 insertions(+) diff --git a/tests/test_version_scheme_pep440.py b/tests/test_version_scheme_pep440.py index aa2120fad4..ac99450652 100644 --- a/tests/test_version_scheme_pep440.py +++ b/tests/test_version_scheme_pep440.py @@ -1,6 +1,8 @@ import itertools +import random import pytest + from commitizen.version_schemes import Pep440, VersionProtocol simple_flow = [ @@ -140,6 +142,29 @@ ] +# test driven development +sortability = [ + "0.10.0a0", + "0.1.1", + "0.1.2", + "2.1.1", + "3.0.0", + "0.9.1a0", + "1.0.0a1", + "1.0.0b1", + "1.0.0a1", + "1.0.0a2.dev1", + "1.0.0rc2", + "1.0.0a3.dev0", + "1.0.0a2.dev0", + "1.0.0a3.dev1", + "1.0.0a2.dev0", + "1.0.0b0", + "1.0.0rc0", + "1.0.0rc1", +] + + @pytest.mark.parametrize( "test_input,expected", itertools.chain( @@ -198,3 +223,76 @@ def test_pep440_scheme_property(): def test_pep440_implement_version_protocol(): assert isinstance(Pep440("0.0.1"), VersionProtocol) + + +def test_pep440_sortable(): + test_input = [x[0][0] for x in simple_flow] + test_input.extend([x[1] for x in simple_flow]) + # randomize + random_input = [Pep440(x) for x in random.sample(test_input, len(test_input))] + assert len(random_input) == len(test_input) + sorted_result = [str(x) for x in sorted(random_input)] + assert sorted_result == [ + "0.1.0", + "0.1.0", + "0.1.1.dev1", + "0.1.1", + "0.1.1", + "0.2.0", + "0.2.0", + "0.2.0", + "0.3.0.dev1", + "0.3.0", + "0.3.0", + "0.3.0", + "0.3.0", + "0.3.1a0", + "0.3.1a0", + "0.3.1a0", + "0.3.1a0", + "0.3.1a1", + "0.3.1a1", + "0.3.1a1", + "0.3.1", + "0.3.1", + "0.3.1", + "0.3.2", + "0.4.2", + "1.0.0a0", + "1.0.0a0", + "1.0.0a1", + "1.0.0a1", + "1.0.0a1", + "1.0.0a1", + "1.0.0a2.dev0", + "1.0.0a2.dev0", + "1.0.0a2.dev1", + "1.0.0a2", + "1.0.0a3.dev0", + "1.0.0a3.dev0", + "1.0.0a3.dev1", + "1.0.0b0", + "1.0.0b0", + "1.0.0b0", + "1.0.0b1", + "1.0.0b1", + "1.0.0rc0", + "1.0.0rc0", + "1.0.0rc0", + "1.0.0rc0", + "1.0.0rc1.dev1", + "1.0.0rc1", + "1.0.0", + "1.0.0", + "1.0.1", + "1.0.1", + "1.0.2", + "1.0.2", + "1.1.0", + "1.1.0", + "1.2.0", + "1.2.0", + "1.2.1", + "1.2.1", + "2.0.0", + ] diff --git a/tests/test_version_scheme_semver.py b/tests/test_version_scheme_semver.py index 85cfcf5df1..a0d6e14b50 100644 --- a/tests/test_version_scheme_semver.py +++ b/tests/test_version_scheme_semver.py @@ -1,4 +1,5 @@ import itertools +import random import pytest @@ -135,3 +136,76 @@ def test_semver_scheme_property(): def test_semver_implement_version_protocol(): assert isinstance(SemVer("0.0.1"), VersionProtocol) + + +def test_semver_sortable(): + test_input = [x[0][0] for x in simple_flow] + test_input.extend([x[1] for x in simple_flow]) + # randomize + random_input = [SemVer(x) for x in random.sample(test_input, len(test_input))] + assert len(random_input) == len(test_input) + sorted_result = [str(x) for x in sorted(random_input)] + assert sorted_result == [ + "0.1.0", + "0.1.0", + "0.1.1-dev1", + "0.1.1", + "0.1.1", + "0.2.0", + "0.2.0", + "0.2.0", + "0.3.0-dev1", + "0.3.0", + "0.3.0", + "0.3.0", + "0.3.0", + "0.3.1-a0", + "0.3.1-a0", + "0.3.1-a0", + "0.3.1-a0", + "0.3.1-a1", + "0.3.1-a1", + "0.3.1-a1", + "0.3.1", + "0.3.1", + "0.3.1", + "0.3.2", + "0.4.2", + "1.0.0-a0", + "1.0.0-a0", + "1.0.0-a1", + "1.0.0-a1", + "1.0.0-a1", + "1.0.0-a1", + "1.0.0-a2-dev0", + "1.0.0-a2-dev0", + "1.0.0-a2-dev1", + "1.0.0-a2", + "1.0.0-a3-dev0", + "1.0.0-a3-dev0", + "1.0.0-a3-dev1", + "1.0.0-b0", + "1.0.0-b0", + "1.0.0-b0", + "1.0.0-b1", + "1.0.0-b1", + "1.0.0-rc0", + "1.0.0-rc0", + "1.0.0-rc0", + "1.0.0-rc0", + "1.0.0-rc1-dev1", + "1.0.0-rc1", + "1.0.0", + "1.0.0", + "1.0.1", + "1.0.1", + "1.0.2", + "1.0.2", + "1.1.0", + "1.1.0", + "1.2.0", + "1.2.0", + "1.2.1", + "1.2.1", + "2.0.0", + ] From c1b13865a0836bd3e439db481d4f820fcc32eb5e Mon Sep 17 00:00:00 2001 From: Chad Dombrova <chadrik@gmail.com> Date: Sat, 3 Feb 2024 16:58:49 -0800 Subject: [PATCH 107/685] fix(bump): remove unused method --- commitizen/commands/bump.py | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 023d4f805b..2b108b26c5 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -27,7 +27,6 @@ from commitizen.version_schemes import ( get_version_scheme, InvalidVersion, - VersionProtocol, ) logger = getLogger("commitizen") @@ -397,33 +396,3 @@ def _get_commit_args(self): if self.no_verify: commit_args.append("--no-verify") return " ".join(commit_args) - - def find_previous_final_version( - self, current_version: VersionProtocol - ) -> VersionProtocol | None: - tag_format: str = self.bump_settings["tag_format"] - current = bump.normalize_tag( - current_version, - tag_format=tag_format, - scheme=self.scheme, - ) - - final_versions = [] - for tag in git.get_tag_names(): - assert tag - try: - version = self.scheme(tag) - if not version.is_prerelease or tag == current: - final_versions.append(version) - except InvalidVersion: - continue - - if not final_versions: - return None - - final_versions = sorted(final_versions) - current_index = final_versions.index(current_version) - previous_index = current_index - 1 - if previous_index < 0: - return None - return final_versions[previous_index] From 4055bbb444ea66dca166828d6bc11bf7ba7fc157 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sun, 4 Feb 2024 08:20:31 +0000 Subject: [PATCH 108/685] =?UTF-8?q?bump:=20version=203.14.0=20=E2=86=92=20?= =?UTF-8?q?3.14.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 7 +++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 55836498a0..6556a068ba 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.14.0 # automatically updated by Commitizen + rev: v3.14.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ad6367e31..db06703c98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,11 @@ +## v3.14.1 (2024-02-04) + +### Fix + +- **bump**: remove unused method +- **scm**: only search tags that are reachable by the current commit + ## v3.14.0 (2024-02-01) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 382c7be006..237d3a709b 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.14.0" +__version__ = "3.14.1" diff --git a/pyproject.toml b/pyproject.toml index 37603738f7..455693e9b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.14.0" +version = "3.14.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.14.0" +version = "3.14.1" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 6b675292a3dcf300a50ca81ef7cf664e4e916a86 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 01:21:55 +0000 Subject: [PATCH 109/685] build(deps-dev): bump mkdocs-material from 9.5.6 to 9.5.7 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.6 to 9.5.7. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.6...9.5.7) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index d0be3bc97b..22ad17fa7f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.6" +version = "9.5.7" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.6-py3-none-any.whl", hash = "sha256:e115b90fccf5cd7f5d15b0c2f8e6246b21041628b8f590630e7fca66ed7fcf6c"}, - {file = "mkdocs_material-9.5.6.tar.gz", hash = "sha256:5b24df36d8ac6cecd611241ce6f6423ccde3e1ad89f8360c3f76d5565fc2d82a"}, + {file = "mkdocs_material-9.5.7-py3-none-any.whl", hash = "sha256:0be8ce8bcfebb52bae9b00cf9b851df45b8a92d629afcfd7f2c09b2dfa155ea3"}, + {file = "mkdocs_material-9.5.7.tar.gz", hash = "sha256:16110292575d88a338d2961f3cb665cf12943ff8829e551a9b364f24019e46af"}, ] [package.dependencies] From 56129248b32abd131aa866ed01a31193b77a2d54 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 01:26:50 +0000 Subject: [PATCH 110/685] build(deps-dev): bump ruff from 0.2.0 to 0.2.1 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.2.0 to 0.2.1. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.2.0...v0.2.1) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 22ad17fa7f..13711f36b3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1407,28 +1407,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.2.0" +version = "0.2.1" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.2.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:638ea3294f800d18bae84a492cb5a245c8d29c90d19a91d8e338937a4c27fca0"}, - {file = "ruff-0.2.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3ff35433fcf4dff6d610738712152df6b7d92351a1bde8e00bd405b08b3d5759"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf9faafbdcf4f53917019f2c230766da437d4fd5caecd12ddb68bb6a17d74399"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8153a3e4128ed770871c47545f1ae7b055023e0c222ff72a759f5a341ee06483"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8a75a98ae989a27090e9c51f763990ad5bbc92d20626d54e9701c7fe597f399"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:87057dd2fdde297130ff99553be8549ca38a2965871462a97394c22ed2dfc19d"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d232f99d3ab00094ebaf88e0fb7a8ccacaa54cc7fa3b8993d9627a11e6aed7a"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d3c641f95f435fc6754b05591774a17df41648f0daf3de0d75ad3d9f099ab92"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3826fb34c144ef1e171b323ed6ae9146ab76d109960addca730756dc19dc7b22"}, - {file = "ruff-0.2.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:eceab7d85d09321b4de18b62d38710cf296cb49e98979960a59c6b9307c18cfe"}, - {file = "ruff-0.2.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:30ad74687e1f4a9ff8e513b20b82ccadb6bd796fe5697f1e417189c5cde6be3e"}, - {file = "ruff-0.2.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a7e3818698f8460bd0f8d4322bbe99db8327e9bc2c93c789d3159f5b335f47da"}, - {file = "ruff-0.2.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:edf23041242c48b0d8295214783ef543847ef29e8226d9f69bf96592dba82a83"}, - {file = "ruff-0.2.0-py3-none-win32.whl", hash = "sha256:e155147199c2714ff52385b760fe242bb99ea64b240a9ffbd6a5918eb1268843"}, - {file = "ruff-0.2.0-py3-none-win_amd64.whl", hash = "sha256:ba918e01cdd21e81b07555564f40d307b0caafa9a7a65742e98ff244f5035c59"}, - {file = "ruff-0.2.0-py3-none-win_arm64.whl", hash = "sha256:3fbaff1ba9564a2c5943f8f38bc221f04bac687cc7485e45237579fee7ccda79"}, - {file = "ruff-0.2.0.tar.gz", hash = "sha256:63856b91837606c673537d2889989733d7dffde553828d3b0f0bacfa6def54be"}, + {file = "ruff-0.2.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:dd81b911d28925e7e8b323e8d06951554655021df8dd4ac3045d7212ac4ba080"}, + {file = "ruff-0.2.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:dc586724a95b7d980aa17f671e173df00f0a2eef23f8babbeee663229a938fec"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c92db7101ef5bfc18e96777ed7bc7c822d545fa5977e90a585accac43d22f18a"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:13471684694d41ae0f1e8e3a7497e14cd57ccb7dd72ae08d56a159d6c9c3e30e"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a11567e20ea39d1f51aebd778685582d4c56ccb082c1161ffc10f79bebe6df35"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:00a818e2db63659570403e44383ab03c529c2b9678ba4ba6c105af7854008105"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be60592f9d218b52f03384d1325efa9d3b41e4c4d55ea022cd548547cc42cd2b"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbd2288890b88e8aab4499e55148805b58ec711053588cc2f0196a44f6e3d855"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ef052283da7dec1987bba8d8733051c2325654641dfe5877a4022108098683"}, + {file = "ruff-0.2.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7022d66366d6fded4ba3889f73cd791c2d5621b2ccf34befc752cb0df70f5fad"}, + {file = "ruff-0.2.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0a725823cb2a3f08ee743a534cb6935727d9e47409e4ad72c10a3faf042ad5ba"}, + {file = "ruff-0.2.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0034d5b6323e6e8fe91b2a1e55b02d92d0b582d2953a2b37a67a2d7dedbb7acc"}, + {file = "ruff-0.2.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e5cb5526d69bb9143c2e4d2a115d08ffca3d8e0fddc84925a7b54931c96f5c02"}, + {file = "ruff-0.2.1-py3-none-win32.whl", hash = "sha256:6b95ac9ce49b4fb390634d46d6ece32ace3acdd52814671ccaf20b7f60adb232"}, + {file = "ruff-0.2.1-py3-none-win_amd64.whl", hash = "sha256:e3affdcbc2afb6f5bd0eb3130139ceedc5e3f28d206fe49f63073cb9e65988e0"}, + {file = "ruff-0.2.1-py3-none-win_arm64.whl", hash = "sha256:efababa8e12330aa94a53e90a81eb6e2d55f348bc2e71adbf17d9cad23c03ee6"}, + {file = "ruff-0.2.1.tar.gz", hash = "sha256:3b42b5d8677cd0c72b99fcaf068ffc62abb5a19e71b4a3b9cfa50658a0af02f1"}, ] [[package]] From 1d842b5d823a452109070f8af8857249e95f7713 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Feb 2024 02:02:39 +0000 Subject: [PATCH 111/685] build(deps-dev): bump mkdocs-material from 9.5.7 to 9.5.8 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.7 to 9.5.8. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.7...9.5.8) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 13711f36b3..a148ab8e83 100644 --- a/poetry.lock +++ b/poetry.lock @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.7" +version = "9.5.8" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.7-py3-none-any.whl", hash = "sha256:0be8ce8bcfebb52bae9b00cf9b851df45b8a92d629afcfd7f2c09b2dfa155ea3"}, - {file = "mkdocs_material-9.5.7.tar.gz", hash = "sha256:16110292575d88a338d2961f3cb665cf12943ff8829e551a9b364f24019e46af"}, + {file = "mkdocs_material-9.5.8-py3-none-any.whl", hash = "sha256:14563314bbf97da4bfafc69053772341babfaeb3329cde01d3e63cec03997af8"}, + {file = "mkdocs_material-9.5.8.tar.gz", hash = "sha256:2a429213e83f84eda7a588e2b186316d806aac602b7f93990042f7a1f3d3cf65"}, ] [package.dependencies] @@ -767,7 +767,7 @@ regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2,<2.0)"] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] From 730a28a8b1ae9529fd7b4324b4e0b931786928fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Feb 2024 01:36:16 +0000 Subject: [PATCH 112/685] build(deps-dev): bump mkdocs-material from 9.5.8 to 9.5.9 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.8 to 9.5.9. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.8...9.5.9) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index a148ab8e83..21e87431db 100644 --- a/poetry.lock +++ b/poetry.lock @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.8" +version = "9.5.9" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.8-py3-none-any.whl", hash = "sha256:14563314bbf97da4bfafc69053772341babfaeb3329cde01d3e63cec03997af8"}, - {file = "mkdocs_material-9.5.8.tar.gz", hash = "sha256:2a429213e83f84eda7a588e2b186316d806aac602b7f93990042f7a1f3d3cf65"}, + {file = "mkdocs_material-9.5.9-py3-none-any.whl", hash = "sha256:a5d62b73b3b74349e45472bfadc129c871dd2d4add68d84819580597b2f50d5d"}, + {file = "mkdocs_material-9.5.9.tar.gz", hash = "sha256:635df543c01c25c412d6c22991872267723737d5a2f062490f33b2da1c013c6d"}, ] [package.dependencies] From 3e51e8878cffc858fc992b8e33e07eb1cd1c2e26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Feb 2024 01:35:56 +0000 Subject: [PATCH 113/685] build(deps-dev): bump black from 24.1.1 to 24.2.0 Bumps [black](https://github.com/psf/black) from 24.1.1 to 24.2.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/24.1.1...24.2.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/poetry.lock b/poetry.lock index 21e87431db..b05a5ab1f5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -73,33 +73,33 @@ files = [ [[package]] name = "black" -version = "24.1.1" +version = "24.2.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-24.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2588021038bd5ada078de606f2a804cadd0a3cc6a79cb3e9bb3a8bf581325a4c"}, - {file = "black-24.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a95915c98d6e32ca43809d46d932e2abc5f1f7d582ffbe65a5b4d1588af7445"}, - {file = "black-24.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa6a0e965779c8f2afb286f9ef798df770ba2b6cee063c650b96adec22c056a"}, - {file = "black-24.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5242ecd9e990aeb995b6d03dc3b2d112d4a78f2083e5a8e86d566340ae80fec4"}, - {file = "black-24.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fc1ec9aa6f4d98d022101e015261c056ddebe3da6a8ccfc2c792cbe0349d48b7"}, - {file = "black-24.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0269dfdea12442022e88043d2910429bed717b2d04523867a85dacce535916b8"}, - {file = "black-24.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3d64db762eae4a5ce04b6e3dd745dcca0fb9560eb931a5be97472e38652a161"}, - {file = "black-24.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5d7b06ea8816cbd4becfe5f70accae953c53c0e53aa98730ceccb0395520ee5d"}, - {file = "black-24.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e2c8dfa14677f90d976f68e0c923947ae68fa3961d61ee30976c388adc0b02c8"}, - {file = "black-24.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a21725862d0e855ae05da1dd25e3825ed712eaaccef6b03017fe0853a01aa45e"}, - {file = "black-24.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07204d078e25327aad9ed2c64790d681238686bce254c910de640c7cc4fc3aa6"}, - {file = "black-24.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:a83fe522d9698d8f9a101b860b1ee154c1d25f8a82ceb807d319f085b2627c5b"}, - {file = "black-24.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08b34e85170d368c37ca7bf81cf67ac863c9d1963b2c1780c39102187ec8dd62"}, - {file = "black-24.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7258c27115c1e3b5de9ac6c4f9957e3ee2c02c0b39222a24dc7aa03ba0e986f5"}, - {file = "black-24.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40657e1b78212d582a0edecafef133cf1dd02e6677f539b669db4746150d38f6"}, - {file = "black-24.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e298d588744efda02379521a19639ebcd314fba7a49be22136204d7ed1782717"}, - {file = "black-24.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:34afe9da5056aa123b8bfda1664bfe6fb4e9c6f311d8e4a6eb089da9a9173bf9"}, - {file = "black-24.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:854c06fb86fd854140f37fb24dbf10621f5dab9e3b0c29a690ba595e3d543024"}, - {file = "black-24.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3897ae5a21ca132efa219c029cce5e6bfc9c3d34ed7e892113d199c0b1b444a2"}, - {file = "black-24.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:ecba2a15dfb2d97105be74bbfe5128bc5e9fa8477d8c46766505c1dda5883aac"}, - {file = "black-24.1.1-py3-none-any.whl", hash = "sha256:5cdc2e2195212208fbcae579b931407c1fa9997584f0a415421748aeafff1168"}, - {file = "black-24.1.1.tar.gz", hash = "sha256:48b5760dcbfe5cf97fd4fba23946681f3a81514c6ab8a45b50da67ac8fbc6c7b"}, + {file = "black-24.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6981eae48b3b33399c8757036c7f5d48a535b962a7c2310d19361edeef64ce29"}, + {file = "black-24.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d533d5e3259720fdbc1b37444491b024003e012c5173f7d06825a77508085430"}, + {file = "black-24.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61a0391772490ddfb8a693c067df1ef5227257e72b0e4108482b8d41b5aee13f"}, + {file = "black-24.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:992e451b04667116680cb88f63449267c13e1ad134f30087dec8527242e9862a"}, + {file = "black-24.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:163baf4ef40e6897a2a9b83890e59141cc8c2a98f2dda5080dc15c00ee1e62cd"}, + {file = "black-24.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e37c99f89929af50ffaf912454b3e3b47fd64109659026b678c091a4cd450fb2"}, + {file = "black-24.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9de21bafcba9683853f6c96c2d515e364aee631b178eaa5145fc1c61a3cc92"}, + {file = "black-24.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:9db528bccb9e8e20c08e716b3b09c6bdd64da0dd129b11e160bf082d4642ac23"}, + {file = "black-24.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d84f29eb3ee44859052073b7636533ec995bd0f64e2fb43aeceefc70090e752b"}, + {file = "black-24.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e08fb9a15c914b81dd734ddd7fb10513016e5ce7e6704bdd5e1251ceee51ac9"}, + {file = "black-24.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:810d445ae6069ce64030c78ff6127cd9cd178a9ac3361435708b907d8a04c693"}, + {file = "black-24.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:ba15742a13de85e9b8f3239c8f807723991fbfae24bad92d34a2b12e81904982"}, + {file = "black-24.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7e53a8c630f71db01b28cd9602a1ada68c937cbf2c333e6ed041390d6968faf4"}, + {file = "black-24.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:93601c2deb321b4bad8f95df408e3fb3943d85012dddb6121336b8e24a0d1218"}, + {file = "black-24.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0057f800de6acc4407fe75bb147b0c2b5cbb7c3ed110d3e5999cd01184d53b0"}, + {file = "black-24.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:faf2ee02e6612577ba0181f4347bcbcf591eb122f7841ae5ba233d12c39dcb4d"}, + {file = "black-24.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:057c3dc602eaa6fdc451069bd027a1b2635028b575a6c3acfd63193ced20d9c8"}, + {file = "black-24.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:08654d0797e65f2423f850fc8e16a0ce50925f9337fb4a4a176a7aa4026e63f8"}, + {file = "black-24.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca610d29415ee1a30a3f30fab7a8f4144e9d34c89a235d81292a1edb2b55f540"}, + {file = "black-24.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:4dd76e9468d5536abd40ffbc7a247f83b2324f0c050556d9c371c2b9a9a95e31"}, + {file = "black-24.2.0-py3-none-any.whl", hash = "sha256:e8a6ae970537e67830776488bca52000eaa37fa63b9988e8c487458d9cd5ace6"}, + {file = "black-24.2.0.tar.gz", hash = "sha256:bce4f25c27c3435e4dace4815bcb2008b87e167e3bf4ee47ccdc5ce906eb4894"}, ] [package.dependencies] From 981065ea129fb2b1eabe7a18e579dd28f0eccd32 Mon Sep 17 00:00:00 2001 From: Lars Solberg <lars.solberg@gmail.com> Date: Fri, 29 Dec 2023 00:41:20 +0100 Subject: [PATCH 114/685] feat(bump): functionality to add build-metadata to version string --- commitizen/cli.py | 5 +++ commitizen/commands/bump.py | 13 +++++++ commitizen/commands/changelog.py | 12 +++++- commitizen/cz/utils.py | 6 +++ commitizen/version_schemes.py | 17 ++++++++- docs/bump.md | 23 +++++++++++- tests/commands/test_bump_command.py | 2 + tests/test_bump_create_commit_message.py | 47 ++++++++++++++++++++++++ 8 files changed, 121 insertions(+), 4 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 511f745652..12e3aa6451 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -308,6 +308,11 @@ def __call__( "help": "bump to the given version (e.g: 1.5.3)", "metavar": "MANUAL_VERSION", }, + { + "name": ["--build-metadata"], + "help": "Add additional build-metadata to the version-number", + "default": None, + }, ], }, { diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 2b108b26c5..7eb9ead144 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -155,6 +155,7 @@ def __call__(self): # noqa: C901 is_files_only: bool | None = self.arguments["files_only"] is_local_version: bool | None = self.arguments["local_version"] manual_version = self.arguments["manual_version"] + build_metadata = self.arguments["build_metadata"] if manual_version: if increment: @@ -171,6 +172,11 @@ def __call__(self): # noqa: C901 "--local-version cannot be combined with MANUAL_VERSION" ) + if build_metadata: + raise NotAllowed( + "--build-metadata cannot be combined with MANUAL_VERSION" + ) + if major_version_zero: raise NotAllowed( "--major-version-zero cannot be combined with MANUAL_VERSION" @@ -187,6 +193,12 @@ def __call__(self): # noqa: C901 f"--major-version-zero is meaningless for current version {current_version}" ) + if build_metadata: + if is_local_version: + raise NotAllowed( + "--local-version cannot be combined with --build-metadata" + ) + current_tag_version: str = bump.normalize_tag( current_version, tag_format=tag_format, @@ -235,6 +247,7 @@ def __call__(self): # noqa: C901 prerelease_offset=prerelease_offset, devrelease=devrelease, is_local_version=is_local_version, + build_metadata=build_metadata, ) new_tag_version = bump.normalize_tag( diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 8b3c309636..f44f59bb7c 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -20,6 +20,7 @@ from commitizen.changelog_formats import get_changelog_format from commitizen.git import GitTag, smart_open from commitizen.version_schemes import get_version_scheme +from commitizen.cz.utils import strip_local_version class Changelog: @@ -98,7 +99,12 @@ def _find_incremental_rev(self, latest_version: str, tags: list[GitTag]) -> str: """ SIMILARITY_THRESHOLD = 0.89 tag_ratio = map( - lambda tag: (SequenceMatcher(None, latest_version, tag.name).ratio(), tag), + lambda tag: ( + SequenceMatcher( + None, latest_version, strip_local_version(tag.name) + ).ratio(), + tag, + ), tags, ) try: @@ -169,7 +175,9 @@ def __call__(self): tag_format=self.tag_format, scheme=self.scheme, ) - start_rev = self._find_incremental_rev(latest_tag_version, tags) + start_rev = self._find_incremental_rev( + strip_local_version(latest_tag_version), tags + ) if self.rev_range: start_rev, end_rev = changelog.get_oldest_and_newest_rev( diff --git a/commitizen/cz/utils.py b/commitizen/cz/utils.py index ea13be22c5..71dac105a7 100644 --- a/commitizen/cz/utils.py +++ b/commitizen/cz/utils.py @@ -1,3 +1,5 @@ +import re + from commitizen.cz import exceptions @@ -9,3 +11,7 @@ def required_validator(answer, msg=None): def multiple_line_breaker(answer, sep="|"): return "\n".join(line.strip() for line in answer.split(sep) if line) + + +def strip_local_version(version: str) -> str: + return re.sub(r"\+.+", "", version) diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index 8fcec9e74f..0b04c4bc36 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -118,6 +118,7 @@ def bump( prerelease_offset: int = 0, devrelease: int | None = None, is_local_version: bool = False, + build_metadata: str | None = None, force_bump: bool = False, ) -> Self: """ @@ -191,6 +192,17 @@ def generate_devrelease(self, devrelease: int | None) -> str: return f"dev{devrelease}" + def generate_build_metadata(self, build_metadata: str | None) -> str: + """Generate build-metadata + + Build-metadata (local version) is not used in version calculations + but added after + statically. + """ + if build_metadata is None: + return "" + + return f"+{build_metadata}" + def increment_base(self, increment: str | None = None) -> str: prev_release = list(self.release) increments = [MAJOR, MINOR, PATCH] @@ -215,6 +227,7 @@ def bump( prerelease_offset: int = 0, devrelease: int | None = None, is_local_version: bool = False, + build_metadata: str | None = None, force_bump: bool = False, ) -> Self: """Based on the given increment a proper semver will be generated. @@ -248,6 +261,7 @@ def bump( if self.minor != 0 or self.micro != 0: base = self.increment_base(increment) dev_version = self.generate_devrelease(devrelease) + release = list(self.release) if len(release) < 3: release += [0] * (3 - len(release)) @@ -261,8 +275,9 @@ def bump( pre_version = base_version.generate_prerelease( prerelease, offset=prerelease_offset ) + build_metadata = self.generate_build_metadata(build_metadata) # TODO: post version - return self.scheme(f"{base}{pre_version}{dev_version}") # type: ignore + return self.scheme(f"{base}{pre_version}{dev_version}{build_metadata}") # type: ignore class Pep440(BaseVersion): diff --git a/docs/bump.md b/docs/bump.md index 7bf6689231..6045024dd4 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -55,7 +55,7 @@ $ cz bump --help usage: cz bump [-h] [--dry-run] [--files-only] [--local-version] [--changelog] [--no-verify] [--yes] [--tag-format TAG_FORMAT] [--bump-message BUMP_MESSAGE] [--prerelease {alpha,beta,rc}] [--devrelease DEVRELEASE] [--increment {MAJOR,MINOR,PATCH}] [--check-consistency] [--annotated-tag] [--gpg-sign] [--changelog-to-stdout] [--git-output-to-stderr] [--retry] [--major-version-zero] - [--prerelease-offset PRERELEASE_OFFSET] [--version-scheme {semver,pep440}] [--version-type {semver,pep440}] + [--prerelease-offset PRERELEASE_OFFSET] [--version-scheme {semver,pep440}] [--version-type {semver,pep440}] [--build-metadata BUILD_METADATA] [MANUAL_VERSION] positional arguments: @@ -95,6 +95,8 @@ options: choose version scheme --version-type {semver,pep440} Deprecated, use --version-scheme + --build-metadata {BUILD_METADATA} + additional metadata in the version string ``` ### `--files-only` @@ -292,6 +294,25 @@ cz bump --changelog --extra key=value -e short="quoted value" See [the template customization section](customization.md#customizing-the-changelog-template). +### `--build-metadata` + +Provides a way to specify additional metadata in the version string. This parameter is not compatible with `--local-version` as it uses the same part of the version string. + +```bash +cz bump --build-metadata yourmetadata +``` + +Will create a version like `1.1.2+yourmetadata`. +This can be useful for multiple things +* Git hash in version +* Labeling the version with additional metadata. + +Note that Commitizen ignores everything after `+` when it bumps the version. It is therefore safe to write different build-metadata between versions. + +You should normally not use this functionality, but if you decide to do, keep in mind that +* Version `1.2.3+a`, and `1.2.3+b` are the same version! Tools should not use the string after `+` for version calculation. This is probably not a guarantee (example in helm) even tho it is in the spec. +* It might be problematic having the metadata in place when doing upgrades depending on what tool you use. + ## Avoid raising errors Some situations from commitizen raise an exit code different than 0. diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index d05c8f3301..9a877c9ac0 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -813,6 +813,8 @@ def test_bump_changelog_command_commits_untracked_changelog_and_version_files( ["cz", "bump", "--devrelease", "0", "1.2.3"], ["cz", "bump", "--devrelease", "1", "1.2.3"], ["cz", "bump", "--increment", "PATCH", "1.2.3"], + ["cz", "bump", "--build-metadata=a.b.c", "1.2.3"], + ["cz", "bump", "--local-version", "--build-metadata=a.b.c"], ], ) @pytest.mark.usefixtures("tmp_commitizen_project") diff --git a/tests/test_bump_create_commit_message.py b/tests/test_bump_create_commit_message.py index c096f23c39..517c7a0459 100644 --- a/tests/test_bump_create_commit_message.py +++ b/tests/test_bump_create_commit_message.py @@ -99,3 +99,50 @@ def test_bump_pre_commit_changelog_fails_always(mocker: MockFixture, freezer, re cmd.run("pre-commit install") with pytest.raises(exceptions.BumpCommitFailedError): cli.main() + + +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_bump_with_build_metadata(mocker: MockFixture, freezer): + def _add_entry(test_str: str, args: list): + Path(test_str).write_text("") + cmd.run("git add -A") + cmd.run(f'git commit -m "fix: test-{test_str}"') + cz_args = ["cz", "bump", "--changelog", "--yes"] + args + mocker.patch.object(sys, "argv", cz_args) + cli.main() + + freezer.move_to("2024-01-01") + + _add_entry("a", ["--build-metadata", "a.b.c"]) + _add_entry("b", []) + _add_entry("c", ["--build-metadata", "alongmetadatastring"]) + _add_entry("d", []) + + # Pre-commit fixed last line adding extra indent and "\" char + assert Path("CHANGELOG.md").read_text() == dedent( + """\ + ## 0.1.4 (2024-01-01) + + ### Fix + + - test-d + + ## 0.1.3+alongmetadatastring (2024-01-01) + + ### Fix + + - test-c + + ## 0.1.2 (2024-01-01) + + ### Fix + + - test-b + + ## 0.1.1+a.b.c (2024-01-01) + + ### Fix + + - test-a + """ + ) From 2ee371be1bb6f5da2811e50e307a3562165fcd47 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sat, 17 Feb 2024 03:21:49 +0000 Subject: [PATCH 115/685] =?UTF-8?q?bump:=20version=203.14.1=20=E2=86=92=20?= =?UTF-8?q?3.15.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6556a068ba..c1120176b9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.14.1 # automatically updated by Commitizen + rev: v3.15.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index db06703c98..c61279fe1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ +## v3.15.0 (2024-02-17) + +### Feat + +- **bump**: functionality to add build-metadata to version string + ## v3.14.1 (2024-02-04) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 237d3a709b..11d9fee7b3 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.14.1" +__version__ = "3.15.0" diff --git a/pyproject.toml b/pyproject.toml index 455693e9b6..a8ef9705cf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.14.1" +version = "3.15.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.14.1" +version = "3.15.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From ab8873b7245f77bf4aba06995e8a525366042739 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Feb 2024 01:29:27 +0000 Subject: [PATCH 116/685] build(deps-dev): bump ruff from 0.2.1 to 0.2.2 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.2.1 to 0.2.2. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.2.1...v0.2.2) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index b05a5ab1f5..7087b33be2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1407,28 +1407,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.2.1" +version = "0.2.2" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.2.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:dd81b911d28925e7e8b323e8d06951554655021df8dd4ac3045d7212ac4ba080"}, - {file = "ruff-0.2.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:dc586724a95b7d980aa17f671e173df00f0a2eef23f8babbeee663229a938fec"}, - {file = "ruff-0.2.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c92db7101ef5bfc18e96777ed7bc7c822d545fa5977e90a585accac43d22f18a"}, - {file = "ruff-0.2.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:13471684694d41ae0f1e8e3a7497e14cd57ccb7dd72ae08d56a159d6c9c3e30e"}, - {file = "ruff-0.2.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a11567e20ea39d1f51aebd778685582d4c56ccb082c1161ffc10f79bebe6df35"}, - {file = "ruff-0.2.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:00a818e2db63659570403e44383ab03c529c2b9678ba4ba6c105af7854008105"}, - {file = "ruff-0.2.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be60592f9d218b52f03384d1325efa9d3b41e4c4d55ea022cd548547cc42cd2b"}, - {file = "ruff-0.2.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbd2288890b88e8aab4499e55148805b58ec711053588cc2f0196a44f6e3d855"}, - {file = "ruff-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ef052283da7dec1987bba8d8733051c2325654641dfe5877a4022108098683"}, - {file = "ruff-0.2.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7022d66366d6fded4ba3889f73cd791c2d5621b2ccf34befc752cb0df70f5fad"}, - {file = "ruff-0.2.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0a725823cb2a3f08ee743a534cb6935727d9e47409e4ad72c10a3faf042ad5ba"}, - {file = "ruff-0.2.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0034d5b6323e6e8fe91b2a1e55b02d92d0b582d2953a2b37a67a2d7dedbb7acc"}, - {file = "ruff-0.2.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e5cb5526d69bb9143c2e4d2a115d08ffca3d8e0fddc84925a7b54931c96f5c02"}, - {file = "ruff-0.2.1-py3-none-win32.whl", hash = "sha256:6b95ac9ce49b4fb390634d46d6ece32ace3acdd52814671ccaf20b7f60adb232"}, - {file = "ruff-0.2.1-py3-none-win_amd64.whl", hash = "sha256:e3affdcbc2afb6f5bd0eb3130139ceedc5e3f28d206fe49f63073cb9e65988e0"}, - {file = "ruff-0.2.1-py3-none-win_arm64.whl", hash = "sha256:efababa8e12330aa94a53e90a81eb6e2d55f348bc2e71adbf17d9cad23c03ee6"}, - {file = "ruff-0.2.1.tar.gz", hash = "sha256:3b42b5d8677cd0c72b99fcaf068ffc62abb5a19e71b4a3b9cfa50658a0af02f1"}, + {file = "ruff-0.2.2-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0a9efb032855ffb3c21f6405751d5e147b0c6b631e3ca3f6b20f917572b97eb6"}, + {file = "ruff-0.2.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d450b7fbff85913f866a5384d8912710936e2b96da74541c82c1b458472ddb39"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecd46e3106850a5c26aee114e562c329f9a1fbe9e4821b008c4404f64ff9ce73"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e22676a5b875bd72acd3d11d5fa9075d3a5f53b877fe7b4793e4673499318ba"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1695700d1e25a99d28f7a1636d85bafcc5030bba9d0578c0781ba1790dbcf51c"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b0c232af3d0bd8f521806223723456ffebf8e323bd1e4e82b0befb20ba18388e"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f63d96494eeec2fc70d909393bcd76c69f35334cdbd9e20d089fb3f0640216ca"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a61ea0ff048e06de273b2e45bd72629f470f5da8f71daf09fe481278b175001"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e1439c8f407e4f356470e54cdecdca1bd5439a0673792dbe34a2b0a551a2fe3"}, + {file = "ruff-0.2.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:940de32dc8853eba0f67f7198b3e79bc6ba95c2edbfdfac2144c8235114d6726"}, + {file = "ruff-0.2.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0c126da55c38dd917621552ab430213bdb3273bb10ddb67bc4b761989210eb6e"}, + {file = "ruff-0.2.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3b65494f7e4bed2e74110dac1f0d17dc8e1f42faaa784e7c58a98e335ec83d7e"}, + {file = "ruff-0.2.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1ec49be4fe6ddac0503833f3ed8930528e26d1e60ad35c2446da372d16651ce9"}, + {file = "ruff-0.2.2-py3-none-win32.whl", hash = "sha256:d920499b576f6c68295bc04e7b17b6544d9d05f196bb3aac4358792ef6f34325"}, + {file = "ruff-0.2.2-py3-none-win_amd64.whl", hash = "sha256:cc9a91ae137d687f43a44c900e5d95e9617cb37d4c989e462980ba27039d239d"}, + {file = "ruff-0.2.2-py3-none-win_arm64.whl", hash = "sha256:c9d15fc41e6054bfc7200478720570078f0b41c9ae4f010bcc16bd6f4d1aacdd"}, + {file = "ruff-0.2.2.tar.gz", hash = "sha256:e62ed7f36b3068a30ba39193a14274cd706bc486fad521276458022f7bccb31d"}, ] [[package]] From 80ad200925ec6a54d25f67a404519201ede72d80 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Feb 2024 01:30:13 +0000 Subject: [PATCH 117/685] build(deps-dev): bump pytest from 8.0.0 to 8.0.1 Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.0.0 to 8.0.1. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.0.0...8.0.1) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7087b33be2..fe5bfbe014 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1048,13 +1048,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pytest" -version = "8.0.0" +version = "8.0.1" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.0.0-py3-none-any.whl", hash = "sha256:50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6"}, - {file = "pytest-8.0.0.tar.gz", hash = "sha256:249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c"}, + {file = "pytest-8.0.1-py3-none-any.whl", hash = "sha256:3e4f16fe1c0a9dc9d9389161c127c3edc5d810c38d6793042fb81d9f48a59fca"}, + {file = "pytest-8.0.1.tar.gz", hash = "sha256:267f6563751877d772019b13aacbe4e860d73fe8f651f28112e9ac37de7513ae"}, ] [package.dependencies] From e8362ccfcbf31e9633f3fba9c8d46a32bc7ca35d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Feb 2024 01:20:54 +0000 Subject: [PATCH 118/685] build(deps-dev): bump mkdocs-material from 9.5.9 to 9.5.10 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.9 to 9.5.10. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.9...9.5.10) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index fe5bfbe014..11ca81c1a7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.9" +version = "9.5.10" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.9-py3-none-any.whl", hash = "sha256:a5d62b73b3b74349e45472bfadc129c871dd2d4add68d84819580597b2f50d5d"}, - {file = "mkdocs_material-9.5.9.tar.gz", hash = "sha256:635df543c01c25c412d6c22991872267723737d5a2f062490f33b2da1c013c6d"}, + {file = "mkdocs_material-9.5.10-py3-none-any.whl", hash = "sha256:3c6c46b57d2ee3c8890e6e0406e68b6863cf65768f0f436990a742702d198442"}, + {file = "mkdocs_material-9.5.10.tar.gz", hash = "sha256:6ad626dbb31070ebbaedff813323a16a406629620e04b96458f16e6e9c7008fe"}, ] [package.dependencies] From 26329cf73e777efc88f70958379a408460b16e1a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 01:49:05 +0000 Subject: [PATCH 119/685] build(deps-dev): bump pytest from 8.0.1 to 8.0.2 Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.0.1 to 8.0.2. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.0.1...8.0.2) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 11ca81c1a7..c253b8faab 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1048,13 +1048,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pytest" -version = "8.0.1" +version = "8.0.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.0.1-py3-none-any.whl", hash = "sha256:3e4f16fe1c0a9dc9d9389161c127c3edc5d810c38d6793042fb81d9f48a59fca"}, - {file = "pytest-8.0.1.tar.gz", hash = "sha256:267f6563751877d772019b13aacbe4e860d73fe8f651f28112e9ac37de7513ae"}, + {file = "pytest-8.0.2-py3-none-any.whl", hash = "sha256:edfaaef32ce5172d5466b5127b42e0d6d35ebbe4453f0e3505d96afd93f6b096"}, + {file = "pytest-8.0.2.tar.gz", hash = "sha256:d4051d623a2e0b7e51960ba963193b09ce6daeb9759a451844a21e4ddedfc1bd"}, ] [package.dependencies] From c1467c83cd98e6a243458c7fe208a6f741f1c746 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 02:33:21 +0000 Subject: [PATCH 120/685] build(deps): bump typing-extensions from 4.9.0 to 4.10.0 Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.9.0 to 4.10.0. - [Release notes](https://github.com/python/typing_extensions/releases) - [Changelog](https://github.com/python/typing_extensions/blob/main/CHANGELOG.md) - [Commits](https://github.com/python/typing_extensions/commits) --- updated-dependencies: - dependency-name: typing-extensions dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index c253b8faab..a02c025e14 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1574,13 +1574,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.10.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, + {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, ] [[package]] From 74153b740e881df70e7680599217fa246489199b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 03:32:18 +0000 Subject: [PATCH 121/685] build(deps-dev): bump mkdocs-material from 9.5.10 to 9.5.11 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.10 to 9.5.11. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.10...9.5.11) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index a02c025e14..9f02b028b8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.10" +version = "9.5.11" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.10-py3-none-any.whl", hash = "sha256:3c6c46b57d2ee3c8890e6e0406e68b6863cf65768f0f436990a742702d198442"}, - {file = "mkdocs_material-9.5.10.tar.gz", hash = "sha256:6ad626dbb31070ebbaedff813323a16a406629620e04b96458f16e6e9c7008fe"}, + {file = "mkdocs_material-9.5.11-py3-none-any.whl", hash = "sha256:788ee0f3e036dca2dc20298d65e480297d348a44c9d7b2ee05c5262983e66072"}, + {file = "mkdocs_material-9.5.11.tar.gz", hash = "sha256:7af7f8af0dea16175558f3fb9245d26c83a17199baa5f157755e63d7437bf971"}, ] [package.dependencies] From ddab5463ded3f030fe7722f5a50a01bef89be9eb Mon Sep 17 00:00:00 2001 From: Chad Dombrova <chadrik@gmail.com> Date: Sun, 4 Feb 2024 21:18:35 -0800 Subject: [PATCH 122/685] fix: Improve type annotations --- commitizen/bump.py | 7 ++++--- commitizen/commands/bump.py | 14 ++++++++------ commitizen/version_schemes.py | 23 +++++++++++++++++------ 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/commitizen/bump.py b/commitizen/bump.py index 74d08381dc..f0e45e3432 100644 --- a/commitizen/bump.py +++ b/commitizen/bump.py @@ -4,18 +4,19 @@ import re from collections import OrderedDict from string import Template +from typing import cast from commitizen.defaults import MAJOR, MINOR, PATCH, bump_message, encoding from commitizen.exceptions import CurrentVersionNotFoundError from commitizen.git import GitCommit, smart_open -from commitizen.version_schemes import DEFAULT_SCHEME, Version, VersionScheme +from commitizen.version_schemes import DEFAULT_SCHEME, Increment, Version, VersionScheme VERSION_TYPES = [None, PATCH, MINOR, MAJOR] def find_increment( commits: list[GitCommit], regex: str, increments_map: dict | OrderedDict -) -> str | None: +) -> Increment | None: if isinstance(increments_map, dict): increments_map = OrderedDict(increments_map) @@ -42,7 +43,7 @@ def find_increment( if increment == MAJOR: break - return increment + return cast(Increment, increment) def update_version_in_files( diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 7eb9ead144..9464b0bab1 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -26,7 +26,9 @@ from commitizen.providers import get_provider from commitizen.version_schemes import ( get_version_scheme, + Increment, InvalidVersion, + Prerelease, ) logger = getLogger("commitizen") @@ -112,7 +114,7 @@ def is_initial_tag(self, current_tag_version: str, is_yes: bool = False) -> bool is_initial = questionary.confirm("Is this the first tag created?").ask() return is_initial - def find_increment(self, commits: list[git.GitCommit]) -> str | None: + def find_increment(self, commits: list[git.GitCommit]) -> Increment | None: # Update the bump map to ensure major version doesn't increment. is_major_version_zero: bool = self.bump_settings["major_version_zero"] # self.cz.bump_map = defaults.bump_map_major_version_zero @@ -132,7 +134,7 @@ def find_increment(self, commits: list[git.GitCommit]) -> str | None: ) return increment - def __call__(self): # noqa: C901 + def __call__(self) -> None: # noqa: C901 """Steps executed to bump.""" provider = get_provider(self.config) @@ -149,11 +151,11 @@ def __call__(self): # noqa: C901 dry_run: bool = self.arguments["dry_run"] is_yes: bool = self.arguments["yes"] - increment: str | None = self.arguments["increment"] - prerelease: str | None = self.arguments["prerelease"] + increment: Increment | None = self.arguments["increment"] + prerelease: Prerelease | None = self.arguments["prerelease"] devrelease: int | None = self.arguments["devrelease"] is_files_only: bool | None = self.arguments["files_only"] - is_local_version: bool | None = self.arguments["local_version"] + is_local_version: bool = self.arguments["local_version"] manual_version = self.arguments["manual_version"] build_metadata = self.arguments["build_metadata"] @@ -404,7 +406,7 @@ def __call__(self): # noqa: C901 else: out.success("Done!") - def _get_commit_args(self): + def _get_commit_args(self) -> str: commit_args = ["-a"] if self.no_verify: commit_args.append("--no-verify") diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index 0b04c4bc36..aeebe6cc35 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -4,7 +4,16 @@ import sys import warnings from itertools import zip_longest -from typing import TYPE_CHECKING, Any, ClassVar, Protocol, Type, cast, runtime_checkable +from typing import ( + TYPE_CHECKING, + Any, + ClassVar, + Literal, + Protocol, + Type, + cast, + runtime_checkable, +) import importlib_metadata as metadata from packaging.version import InvalidVersion # noqa: F401: Rexpose the common exception @@ -28,6 +37,8 @@ from typing import Self +Increment: TypeAlias = Literal["MAJOR", "MINOR", "PATCH"] +Prerelease: TypeAlias = Literal["alpha", "beta", "rc"] DEFAULT_VERSION_PARSER = r"v?(?P<version>([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?(\w+)?)" @@ -113,8 +124,8 @@ def __ne__(self, other: object) -> bool: def bump( self, - increment: str, - prerelease: str | None = None, + increment: Increment | None, + prerelease: Prerelease | None = None, prerelease_offset: int = 0, devrelease: int | None = None, is_local_version: bool = False, @@ -203,7 +214,7 @@ def generate_build_metadata(self, build_metadata: str | None) -> str: return f"+{build_metadata}" - def increment_base(self, increment: str | None = None) -> str: + def increment_base(self, increment: Increment | None = None) -> str: prev_release = list(self.release) increments = [MAJOR, MINOR, PATCH] base = dict(zip_longest(increments, prev_release, fillvalue=0)) @@ -222,8 +233,8 @@ def increment_base(self, increment: str | None = None) -> str: def bump( self, - increment: str, - prerelease: str | None = None, + increment: Increment | None, + prerelease: Prerelease | None = None, prerelease_offset: int = 0, devrelease: int | None = None, is_local_version: bool = False, From 1059556c52e57ebf9d2baec84966bfad371af8f2 Mon Sep 17 00:00:00 2001 From: Chad Dombrova <chadrik@gmail.com> Date: Tue, 30 Jan 2024 09:39:24 -0800 Subject: [PATCH 123/685] feat(commands): add bump --exact When bumping a prerelease to a new prerelease, honor the detected increment and preserve the prerelease suffix, rather than bumping to the next non-prerelease version --- commitizen/cli.py | 10 ++++ commitizen/commands/bump.py | 4 ++ commitizen/version_schemes.py | 13 +++-- docs/bump.md | 21 ++++++++ tests/commands/test_bump_command.py | 49 +++++++++++++++++ tests/test_version_scheme_pep440.py | 82 +++++++++++++++++++++-------- tests/test_version_scheme_semver.py | 58 ++++++++++++++++++++ 7 files changed, 213 insertions(+), 24 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 12e3aa6451..a6dcaabd2a 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -230,6 +230,16 @@ def __call__( "choices": ["MAJOR", "MINOR", "PATCH"], "type": str.upper, }, + { + "name": ["--exact-increment"], + "action": "store_true", + "help": ( + "apply the exact changes that have been specified (or " + "determined from the commit log), disabling logic that " + "guesses the next version based on typical version " + "progression when a prelease suffix is present." + ), + }, { "name": ["--check-consistency", "-cc"], "help": ( diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 9464b0bab1..435c0039f9 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -52,6 +52,7 @@ def __init__(self, config: BaseConfig, arguments: dict): "tag_format", "prerelease", "increment", + "exact_increment", "bump_message", "gpg_sign", "annotated_tag", @@ -158,6 +159,7 @@ def __call__(self) -> None: # noqa: C901 is_local_version: bool = self.arguments["local_version"] manual_version = self.arguments["manual_version"] build_metadata = self.arguments["build_metadata"] + exact_increment: bool = self.arguments["exact_increment"] if manual_version: if increment: @@ -250,6 +252,7 @@ def __call__(self) -> None: # noqa: C901 devrelease=devrelease, is_local_version=is_local_version, build_metadata=build_metadata, + exact_increment=exact_increment, ) new_tag_version = bump.normalize_tag( @@ -351,6 +354,7 @@ def __call__(self) -> None: # noqa: C901 if is_files_only: raise ExpectedExit() + # FIXME: check if any changes have been staged c = git.commit(message, args=self._get_commit_args()) if self.retry and c.return_code != 0 and self.changelog: # Maybe pre-commit reformatted some files? Retry once diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index aeebe6cc35..ec04fde1e7 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -130,10 +130,17 @@ def bump( devrelease: int | None = None, is_local_version: bool = False, build_metadata: str | None = None, - force_bump: bool = False, + exact_increment: bool = False, ) -> Self: """ Based on the given increment, generate the next bumped version according to the version scheme + + Args: + increment: The component to increase + prerelease: The type of prerelease, if Any + is_local_version: Whether to increment the local version instead + exact_increment: Treat the increment and prerelease arguments explicitly. Disables logic + that attempts to deduce the correct increment when a prelease suffix is present. """ @@ -239,7 +246,7 @@ def bump( devrelease: int | None = None, is_local_version: bool = False, build_metadata: str | None = None, - force_bump: bool = False, + exact_increment: bool = False, ) -> Self: """Based on the given increment a proper semver will be generated. @@ -259,7 +266,7 @@ def bump( else: if not self.is_prerelease: base = self.increment_base(increment) - elif force_bump: + elif exact_increment: base = self.increment_base(increment) else: base = f"{self.major}.{self.minor}.{self.micro}" diff --git a/docs/bump.md b/docs/bump.md index 6045024dd4..904fb7dfc3 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -79,6 +79,7 @@ options: specify non-negative integer for dev. release --increment {MAJOR,MINOR,PATCH} manually specify the desired increment + --exact-increment apply the exact changes that have been specified (or determined from the commit log), disabling logic that guesses the next version based on typical version progression when a prelease suffix is present. --check-consistency, -cc check consistency among versions defined in commitizen configuration and version_files --annotated-tag, -at create annotated tag instead of lightweight one @@ -142,6 +143,26 @@ by their precedence and showcase how a release might flow through a development Also note that bumping pre-releases _maintains linearity_: bumping of a pre-release with lower precedence than the current pre-release phase maintains the current phase of higher precedence. For example, if the current version is `1.0.0b1` then bumping with `--prerelease alpha` will continue to bump the “beta” phase. +This behavior can be overridden by passing `--exact-increment` (see below). + +### `--exact-increment` + +The `--exact-increment` flag bypasses the logic that creates a best guess for the next version based on the +principle of maintaining linearity when a pre-release is present (see above). Instead, `bump` will apply the +exact changes that have been specified with `--increment` or determined from the commit log. For example, +`--prerelease beta` will always result in a `b` tag, and `--increment PATCH` will always increase the patch component. + +Below are some examples that illustrate the difference in behavior: + + +| Increment | Pre-release | Start Version | Without `--exact-increment` | With `--exact-increment` | +|-----------|-------------|---------------|-----------------------------|--------------------------| +| `MAJOR` | | `2.0.0b0` | `2.0.0` | `3.0.0` | +| `MINOR` | | `2.0.0b0` | `2.0.0` | `2.1.0` | +| `PATCH` | | `2.0.0b0` | `2.0.0` | `2.0.1` | +| `MAJOR` | `alpha` | `2.0.0b0` | `3.0.0a0` | `3.0.0a0` | +| `MINOR` | `alpha` | `2.0.0b0` | `2.0.0b1` | `2.1.0a0` | +| `PATCH` | `alpha` | `2.0.0b0` | `2.0.0b1` | `2.0.1a0` | ### `--check-consistency` diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 9a877c9ac0..11137ed629 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -314,6 +314,55 @@ def test_bump_command_prelease_increment(mocker: MockFixture): assert git.tag_exist("1.0.0a0") +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_bump_command_prelease_exact_mode(mocker: MockFixture): + # PRERELEASE + create_file_and_commit("feat: location") + + testargs = ["cz", "bump", "--prerelease", "alpha", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + tag_exists = git.tag_exist("0.2.0a0") + assert tag_exists is True + + # PRERELEASE + PATCH BUMP + testargs = ["cz", "bump", "--prerelease", "alpha", "--yes", "--exact-increment"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + tag_exists = git.tag_exist("0.2.0a1") + assert tag_exists is True + + # PRERELEASE + MINOR BUMP + # --exact-increment allows the minor version to bump, and restart the prerelease + create_file_and_commit("feat: location") + + testargs = ["cz", "bump", "--prerelease", "alpha", "--yes", "--exact-increment"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + tag_exists = git.tag_exist("0.3.0a0") + assert tag_exists is True + + # PRERELEASE + MAJOR BUMP + # --exact-increment allows the major version to bump, and restart the prerelease + testargs = [ + "cz", + "bump", + "--prerelease", + "alpha", + "--yes", + "--increment=MAJOR", + "--exact-increment", + ] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + tag_exists = git.tag_exist("1.0.0a0") + assert tag_exists is True + + @pytest.mark.usefixtures("tmp_commitizen_project") def test_bump_on_git_with_hooks_no_verify_disabled(mocker: MockFixture): """Bump commit without --no-verify""" diff --git a/tests/test_version_scheme_pep440.py b/tests/test_version_scheme_pep440.py index ac99450652..6b1f621cb8 100644 --- a/tests/test_version_scheme_pep440.py +++ b/tests/test_version_scheme_pep440.py @@ -115,6 +115,9 @@ (("2.0.0a4", "PATCH", "alpha", 0, None), "2.0.0a5"), (("2.0.0a5", "MAJOR", "alpha", 0, None), "2.0.0a6"), # + (("2.0.0b0", "MINOR", "alpha", 0, None), "2.0.0b1"), + (("2.0.0b0", "PATCH", "alpha", 0, None), "2.0.0b1"), + # (("1.0.1a0", "PATCH", None, 0, None), "1.0.1"), (("1.0.1a0", "MINOR", None, 0, None), "1.1.0"), (("1.0.1a0", "MAJOR", None, 0, None), "2.0.0"), @@ -141,27 +144,43 @@ (("3.1.4a0", "MAJOR", "alpha", 0, None), "4.0.0a0"), ] - -# test driven development -sortability = [ - "0.10.0a0", - "0.1.1", - "0.1.2", - "2.1.1", - "3.0.0", - "0.9.1a0", - "1.0.0a1", - "1.0.0b1", - "1.0.0a1", - "1.0.0a2.dev1", - "1.0.0rc2", - "1.0.0a3.dev0", - "1.0.0a2.dev0", - "1.0.0a3.dev1", - "1.0.0a2.dev0", - "1.0.0b0", - "1.0.0rc0", - "1.0.0rc1", +excact_cases = [ + (("1.0.0", "PATCH", None, 0, None), "1.0.1"), + (("1.0.0", "MINOR", None, 0, None), "1.1.0"), + # with exact_increment=False: "1.0.0b0" + (("1.0.0a1", "PATCH", "beta", 0, None), "1.0.1b0"), + # with exact_increment=False: "1.0.0b1" + (("1.0.0b0", "PATCH", "beta", 0, None), "1.0.1b0"), + # with exact_increment=False: "1.0.0rc0" + (("1.0.0b1", "PATCH", "rc", 0, None), "1.0.1rc0"), + # with exact_increment=False: "1.0.0-rc1" + (("1.0.0rc0", "PATCH", "rc", 0, None), "1.0.1rc0"), + # with exact_increment=False: "1.0.0rc1-dev1" + (("1.0.0rc0", "PATCH", "rc", 0, 1), "1.0.1rc0.dev1"), + # with exact_increment=False: "1.0.0b0" + (("1.0.0a1", "MINOR", "beta", 0, None), "1.1.0b0"), + # with exact_increment=False: "1.0.0b1" + (("1.0.0b0", "MINOR", "beta", 0, None), "1.1.0b0"), + # with exact_increment=False: "1.0.0b1" + (("1.0.0b0", "MINOR", "alpha", 0, None), "1.1.0a0"), + # with exact_increment=False: "1.0.0rc0" + (("1.0.0b1", "MINOR", "rc", 0, None), "1.1.0rc0"), + # with exact_increment=False: "1.0.0rc1" + (("1.0.0rc0", "MINOR", "rc", 0, None), "1.1.0rc0"), + # with exact_increment=False: "1.0.0rc1-dev1" + (("1.0.0rc0", "MINOR", "rc", 0, 1), "1.1.0rc0.dev1"), + # with exact_increment=False: "2.0.0" + (("2.0.0b0", "MAJOR", None, 0, None), "3.0.0"), + # with exact_increment=False: "2.0.0" + (("2.0.0b0", "MINOR", None, 0, None), "2.1.0"), + # with exact_increment=False: "2.0.0" + (("2.0.0b0", "PATCH", None, 0, None), "2.0.1"), + # same with exact_increment=False + (("2.0.0b0", "MAJOR", "alpha", 0, None), "3.0.0a0"), + # with exact_increment=False: "2.0.0b1" + (("2.0.0b0", "MINOR", "alpha", 0, None), "2.1.0a0"), + # with exact_increment=False: "2.0.0b1" + (("2.0.0b0", "PATCH", "alpha", 0, None), "2.0.1a0"), ] @@ -194,6 +213,27 @@ def test_bump_pep440_version(test_input, expected): ) +@pytest.mark.parametrize("test_input, expected", excact_cases) +def test_bump_pep440_version_force(test_input, expected): + current_version = test_input[0] + increment = test_input[1] + prerelease = test_input[2] + prerelease_offset = test_input[3] + devrelease = test_input[4] + assert ( + str( + Pep440(current_version).bump( + increment=increment, + prerelease=prerelease, + prerelease_offset=prerelease_offset, + devrelease=devrelease, + exact_increment=True, + ) + ) + == expected + ) + + @pytest.mark.parametrize("test_input,expected", local_versions) def test_bump_pep440_version_local(test_input, expected): current_version = test_input[0] diff --git a/tests/test_version_scheme_semver.py b/tests/test_version_scheme_semver.py index a0d6e14b50..71d5e5876c 100644 --- a/tests/test_version_scheme_semver.py +++ b/tests/test_version_scheme_semver.py @@ -83,6 +83,43 @@ (("1.0.0-alpha1", None, "alpha", 0, None), "1.0.0-a2"), ] +excact_cases = [ + (("1.0.0", "PATCH", None, 0, None), "1.0.1"), + (("1.0.0", "MINOR", None, 0, None), "1.1.0"), + # with exact_increment=False: "1.0.0-b0" + (("1.0.0a1", "PATCH", "beta", 0, None), "1.0.1-b0"), + # with exact_increment=False: "1.0.0-b1" + (("1.0.0b0", "PATCH", "beta", 0, None), "1.0.1-b0"), + # with exact_increment=False: "1.0.0-rc0" + (("1.0.0b1", "PATCH", "rc", 0, None), "1.0.1-rc0"), + # with exact_increment=False: "1.0.0-rc1" + (("1.0.0rc0", "PATCH", "rc", 0, None), "1.0.1-rc0"), + # with exact_increment=False: "1.0.0-rc1-dev1" + (("1.0.0rc0", "PATCH", "rc", 0, 1), "1.0.1-rc0-dev1"), + # with exact_increment=False: "1.0.0-b0" + (("1.0.0a1", "MINOR", "beta", 0, None), "1.1.0-b0"), + # with exact_increment=False: "1.0.0-b1" + (("1.0.0b0", "MINOR", "beta", 0, None), "1.1.0-b0"), + # with exact_increment=False: "1.0.0-rc0" + (("1.0.0b1", "MINOR", "rc", 0, None), "1.1.0-rc0"), + # with exact_increment=False: "1.0.0-rc1" + (("1.0.0rc0", "MINOR", "rc", 0, None), "1.1.0-rc0"), + # with exact_increment=False: "1.0.0-rc1-dev1" + (("1.0.0rc0", "MINOR", "rc", 0, 1), "1.1.0-rc0-dev1"), + # with exact_increment=False: "2.0.0" + (("2.0.0b0", "MAJOR", None, 0, None), "3.0.0"), + # with exact_increment=False: "2.0.0" + (("2.0.0b0", "MINOR", None, 0, None), "2.1.0"), + # with exact_increment=False: "2.0.0" + (("2.0.0b0", "PATCH", None, 0, None), "2.0.1"), + # same with exact_increment=False + (("2.0.0b0", "MAJOR", "alpha", 0, None), "3.0.0-a0"), + # with exact_increment=False: "2.0.0b1" + (("2.0.0b0", "MINOR", "alpha", 0, None), "2.1.0-a0"), + # with exact_increment=False: "2.0.0b1" + (("2.0.0b0", "PATCH", "alpha", 0, None), "2.0.1-a0"), +] + @pytest.mark.parametrize( "test_input, expected", @@ -107,6 +144,27 @@ def test_bump_semver_version(test_input, expected): ) +@pytest.mark.parametrize("test_input, expected", excact_cases) +def test_bump_semver_version_force(test_input, expected): + current_version = test_input[0] + increment = test_input[1] + prerelease = test_input[2] + prerelease_offset = test_input[3] + devrelease = test_input[4] + assert ( + str( + SemVer(current_version).bump( + increment=increment, + prerelease=prerelease, + prerelease_offset=prerelease_offset, + devrelease=devrelease, + exact_increment=True, + ) + ) + == expected + ) + + @pytest.mark.parametrize("test_input,expected", local_versions) def test_bump_semver_version_local(test_input, expected): current_version = test_input[0] From c245b14c834818b0a434aac6e45fc298cbb93222 Mon Sep 17 00:00:00 2001 From: Chad Dombrova <chadrik@gmail.com> Date: Mon, 5 Feb 2024 14:29:32 -0800 Subject: [PATCH 124/685] fix(bump): only get and validate commits if increment is not provided This avoids calls to git and additional validations that are not necessary when using --increment --- commitizen/commands/bump.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 435c0039f9..f30f1c0e94 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -209,21 +209,10 @@ def __call__(self) -> None: # noqa: C901 scheme=self.scheme, ) - is_initial = self.is_initial_tag(current_tag_version, is_yes) - if is_initial: - commits = git.get_commits() - else: - commits = git.get_commits(current_tag_version) - # If user specified changelog_to_stdout, they probably want the # changelog to be generated as well, this is the most intuitive solution self.changelog = self.changelog or bool(self.changelog_to_stdout) - # No commits, there is no need to create an empty tag. - # Unless we previously had a prerelease. - if not commits and not current_version.is_prerelease: - raise NoCommitsFoundError("[NO_COMMITS_FOUND]\n" "No new commits found.") - if manual_version: try: new_version = self.scheme(manual_version) @@ -234,6 +223,19 @@ def __call__(self) -> None: # noqa: C901 ) from exc else: if increment is None: + is_initial = self.is_initial_tag(current_tag_version, is_yes) + if is_initial: + commits = git.get_commits() + else: + commits = git.get_commits(current_tag_version) + + # No commits, there is no need to create an empty tag. + # Unless we previously had a prerelease. + if not commits and not current_version.is_prerelease: + raise NoCommitsFoundError( + "[NO_COMMITS_FOUND]\n" "No new commits found." + ) + increment = self.find_increment(commits) # It may happen that there are commits, but they are not eligible From f9a0e2b405d2042f82f2172acb6cda3a50fa8960 Mon Sep 17 00:00:00 2001 From: Chad Dombrova <chadrik@gmail.com> Date: Mon, 19 Feb 2024 16:11:15 -0800 Subject: [PATCH 125/685] fix(bump): change --exact-increment to --increment-mode This provides some future proofing for implementing new version progression behaviors --- commitizen/cli.py | 15 +++++++----- commitizen/commands/bump.py | 6 ++--- docs/bump.md | 37 ++++++++++++++++------------- tests/commands/test_bump_command.py | 24 +++++++++++++++---- 4 files changed, 51 insertions(+), 31 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index a6dcaabd2a..c25bd4f713 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -231,13 +231,16 @@ def __call__( "type": str.upper, }, { - "name": ["--exact-increment"], - "action": "store_true", + "name": ["--increment-mode"], + "choices": ["linear", "exact"], + "default": "linear", "help": ( - "apply the exact changes that have been specified (or " - "determined from the commit log), disabling logic that " - "guesses the next version based on typical version " - "progression when a prelease suffix is present." + "set the method by which the new version is chosen. " + "'linear' (default) guesses the next version based on typical linear version progression, " + "such that bumping of a pre-release with lower precedence than the current pre-release " + "phase maintains the current phase of higher precedence. " + "'exact' applies the changes that have been specified (or determined from the commit log) " + "without interpretation, such that the increment and pre-release are always honored" ), }, { diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index f30f1c0e94..c29c4c35c5 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -52,7 +52,7 @@ def __init__(self, config: BaseConfig, arguments: dict): "tag_format", "prerelease", "increment", - "exact_increment", + "increment_mode", "bump_message", "gpg_sign", "annotated_tag", @@ -159,7 +159,7 @@ def __call__(self) -> None: # noqa: C901 is_local_version: bool = self.arguments["local_version"] manual_version = self.arguments["manual_version"] build_metadata = self.arguments["build_metadata"] - exact_increment: bool = self.arguments["exact_increment"] + increment_mode: str = self.arguments["increment_mode"] if manual_version: if increment: @@ -254,7 +254,7 @@ def __call__(self) -> None: # noqa: C901 devrelease=devrelease, is_local_version=is_local_version, build_metadata=build_metadata, - exact_increment=exact_increment, + exact_increment=increment_mode == "exact", ) new_tag_version = bump.normalize_tag( diff --git a/docs/bump.md b/docs/bump.md index 904fb7dfc3..9a968f7500 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -79,7 +79,12 @@ options: specify non-negative integer for dev. release --increment {MAJOR,MINOR,PATCH} manually specify the desired increment - --exact-increment apply the exact changes that have been specified (or determined from the commit log), disabling logic that guesses the next version based on typical version progression when a prelease suffix is present. + --increment-mode + set the method by which the new version is chosen. 'linear' (default) guesses the next version based + on typical linear version progression, such that bumping of a pre-release with lower precedence than + the current pre-release phase maintains the current phase of higher precedence. 'exact' applies the + changes that have been specified (or determined from the commit log) without interpretation, such that + the increment and pre-release are always honored --check-consistency, -cc check consistency among versions defined in commitizen configuration and version_files --annotated-tag, -at create annotated tag instead of lightweight one @@ -140,29 +145,27 @@ by their precedence and showcase how a release might flow through a development - `1.1.0rc0` after bumping the release candidate - `1.1.0` next feature release -Also note that bumping pre-releases _maintains linearity_: bumping of a pre-release with lower precedence than -the current pre-release phase maintains the current phase of higher precedence. For example, if the current -version is `1.0.0b1` then bumping with `--prerelease alpha` will continue to bump the “beta” phase. -This behavior can be overridden by passing `--exact-increment` (see below). +### `--increment-mode` -### `--exact-increment` +By default, `--increment-mode` is set to `linear`, which ensures taht bumping pre-releases _maintains linearity_: +bumping of a pre-release with lower precedence than the current pre-release phase maintains the current phase of +higher precedence. For example, if the current version is `1.0.0b1` then bumping with `--prerelease alpha` will +continue to bump the “beta” phase. -The `--exact-increment` flag bypasses the logic that creates a best guess for the next version based on the -principle of maintaining linearity when a pre-release is present (see above). Instead, `bump` will apply the +Setting `--increment-mode` to `exact` instructs `cz bump` to instead apply the exact changes that have been specified with `--increment` or determined from the commit log. For example, `--prerelease beta` will always result in a `b` tag, and `--increment PATCH` will always increase the patch component. Below are some examples that illustrate the difference in behavior: - -| Increment | Pre-release | Start Version | Without `--exact-increment` | With `--exact-increment` | -|-----------|-------------|---------------|-----------------------------|--------------------------| -| `MAJOR` | | `2.0.0b0` | `2.0.0` | `3.0.0` | -| `MINOR` | | `2.0.0b0` | `2.0.0` | `2.1.0` | -| `PATCH` | | `2.0.0b0` | `2.0.0` | `2.0.1` | -| `MAJOR` | `alpha` | `2.0.0b0` | `3.0.0a0` | `3.0.0a0` | -| `MINOR` | `alpha` | `2.0.0b0` | `2.0.0b1` | `2.1.0a0` | -| `PATCH` | `alpha` | `2.0.0b0` | `2.0.0b1` | `2.0.1a0` | +| Increment | Pre-release | Start Version | `--increment-mode=linear` | `--increment-mode=exact` | +|-----------|-------------|---------------|---------------------------|--------------------------| +| `MAJOR` | | `2.0.0b0` | `2.0.0` | `3.0.0` | +| `MINOR` | | `2.0.0b0` | `2.0.0` | `2.1.0` | +| `PATCH` | | `2.0.0b0` | `2.0.0` | `2.0.1` | +| `MAJOR` | `alpha` | `2.0.0b0` | `3.0.0a0` | `3.0.0a0` | +| `MINOR` | `alpha` | `2.0.0b0` | `2.0.0b1` | `2.1.0a0` | +| `PATCH` | `alpha` | `2.0.0b0` | `2.0.0b1` | `2.0.1a0` | ### `--check-consistency` diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 11137ed629..b39271f284 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -327,7 +327,14 @@ def test_bump_command_prelease_exact_mode(mocker: MockFixture): assert tag_exists is True # PRERELEASE + PATCH BUMP - testargs = ["cz", "bump", "--prerelease", "alpha", "--yes", "--exact-increment"] + testargs = [ + "cz", + "bump", + "--prerelease", + "alpha", + "--yes", + "--increment-mode=exact", + ] mocker.patch.object(sys, "argv", testargs) cli.main() @@ -335,10 +342,17 @@ def test_bump_command_prelease_exact_mode(mocker: MockFixture): assert tag_exists is True # PRERELEASE + MINOR BUMP - # --exact-increment allows the minor version to bump, and restart the prerelease + # --increment-mode allows the minor version to bump, and restart the prerelease create_file_and_commit("feat: location") - testargs = ["cz", "bump", "--prerelease", "alpha", "--yes", "--exact-increment"] + testargs = [ + "cz", + "bump", + "--prerelease", + "alpha", + "--yes", + "--increment-mode=exact", + ] mocker.patch.object(sys, "argv", testargs) cli.main() @@ -346,7 +360,7 @@ def test_bump_command_prelease_exact_mode(mocker: MockFixture): assert tag_exists is True # PRERELEASE + MAJOR BUMP - # --exact-increment allows the major version to bump, and restart the prerelease + # --increment-mode=exact allows the major version to bump, and restart the prerelease testargs = [ "cz", "bump", @@ -354,7 +368,7 @@ def test_bump_command_prelease_exact_mode(mocker: MockFixture): "alpha", "--yes", "--increment=MAJOR", - "--exact-increment", + "--increment-mode=exact", ] mocker.patch.object(sys, "argv", testargs) cli.main() From f75eddcc1e69195a6edf07bfe7f75dbe6838361a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 07:05:10 +0000 Subject: [PATCH 126/685] =?UTF-8?q?bump:=20version=203.15.0=20=E2=86=92=20?= =?UTF-8?q?3.16.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 12 ++++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c1120176b9..a40195711e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.15.0 # automatically updated by Commitizen + rev: v3.16.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index c61279fe1e..045d308e8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,16 @@ +## v3.16.0 (2024-02-26) + +### Feat + +- **commands**: add bump --exact + +### Fix + +- **bump**: change --exact-increment to --increment-mode +- **bump**: only get and validate commits if increment is not provided +- Improve type annotations + ## v3.15.0 (2024-02-17) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 11d9fee7b3..331093ae1a 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.15.0" +__version__ = "3.16.0" diff --git a/pyproject.toml b/pyproject.toml index a8ef9705cf..3a2d3bf79f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.15.0" +version = "3.16.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.15.0" +version = "3.16.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From fc54b519a96192553d4149dbd75f7db3d8e581da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Feb 2024 01:07:23 +0000 Subject: [PATCH 127/685] build(deps): bump tomlkit from 0.12.3 to 0.12.4 Bumps [tomlkit](https://github.com/sdispater/tomlkit) from 0.12.3 to 0.12.4. - [Release notes](https://github.com/sdispater/tomlkit/releases) - [Changelog](https://github.com/sdispater/tomlkit/blob/master/CHANGELOG.md) - [Commits](https://github.com/sdispater/tomlkit/compare/0.12.3...0.12.4) --- updated-dependencies: - dependency-name: tomlkit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9f02b028b8..091376ec3e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1504,13 +1504,13 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.3" +version = "0.12.4" description = "Style preserving TOML library" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"}, - {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, + {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, + {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, ] [[package]] From 71a594dbac9176bfd19130a48a8cffdf5638cd2e Mon Sep 17 00:00:00 2001 From: Axel H <noirbizarre@gmail.com> Date: Tue, 5 Mar 2024 13:13:15 +0100 Subject: [PATCH 128/685] feat(changelog): `changelog_message_build_hook` can remove message by returning a falsy value --- commitizen/changelog.py | 10 ++++++++-- commitizen/commands/changelog.py | 3 ++- commitizen/cz/base.py | 12 ++++++++---- docs/bump.md | 10 +++++----- docs/customization.md | 4 ++-- tests/test_changelog.py | 28 ++++++++++++++++++++++++++++ 6 files changed, 53 insertions(+), 14 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index e4273db93a..bf0f18576f 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -166,7 +166,8 @@ def generate_tree_from_commits( change_type = change_type_map.get(change_type, change_type) if changelog_message_builder_hook: parsed_message = changelog_message_builder_hook(parsed_message, commit) - changes[change_type].append(parsed_message) + if parsed_message: + changes[change_type].append(parsed_message) # Process body from commit message body_parts = commit.body.split("\n\n") @@ -179,7 +180,12 @@ def generate_tree_from_commits( change_type = parsed_message_body.pop("change_type", None) if change_type_map: change_type = change_type_map.get(change_type, change_type) - changes[change_type].append(parsed_message_body) + if changelog_message_builder_hook: + parsed_message_body = changelog_message_builder_hook( + parsed_message_body, commit + ) + if parsed_message_body: + changes[change_type].append(parsed_message_body) yield {"version": current_tag_name, "date": current_tag_date, "changes": changes} diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index f44f59bb7c..8b3d126fe3 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -9,6 +9,7 @@ from commitizen import bump, changelog, defaults, factory, git, out from commitizen.config import BaseConfig +from commitizen.cz.base import MessageBuilderHook from commitizen.exceptions import ( DryRunExit, NoCommitsFoundError, @@ -145,7 +146,7 @@ def __call__(self): unreleased_version = self.unreleased_version changelog_meta = changelog.Metadata() change_type_map: dict | None = self.change_type_map - changelog_message_builder_hook: Callable | None = ( + changelog_message_builder_hook: MessageBuilderHook | None = ( self.cz.changelog_message_builder_hook ) merge_prerelease = self.merge_prerelease diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index 14d9e5a522..766c252eee 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -1,7 +1,7 @@ from __future__ import annotations from abc import ABCMeta, abstractmethod -from typing import Any, Callable +from typing import Any, Callable, Protocol from jinja2 import BaseLoader, PackageLoader from prompt_toolkit.styles import Style, merge_styles @@ -11,6 +11,12 @@ from commitizen.defaults import Questions +class MessageBuilderHook(Protocol): + def __call__( + self, message: dict[str, Any], commit: git.GitCommit + ) -> dict[str, Any] | None: ... + + class BaseCommitizen(metaclass=ABCMeta): bump_pattern: str | None = None bump_map: dict[str, str] | None = None @@ -37,9 +43,7 @@ class BaseCommitizen(metaclass=ABCMeta): change_type_order: list[str] | None = None # Executed per message parsed by the commitizen - changelog_message_builder_hook: None | (Callable[[dict, git.GitCommit], dict]) = ( - None - ) + changelog_message_builder_hook: MessageBuilderHook | None = None # Executed only at the end of the changelog generation changelog_hook: Callable[[str, str | None], str] | None = None diff --git a/docs/bump.md b/docs/bump.md index 9a968f7500..0e35083b0a 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -147,13 +147,13 @@ by their precedence and showcase how a release might flow through a development ### `--increment-mode` -By default, `--increment-mode` is set to `linear`, which ensures taht bumping pre-releases _maintains linearity_: -bumping of a pre-release with lower precedence than the current pre-release phase maintains the current phase of -higher precedence. For example, if the current version is `1.0.0b1` then bumping with `--prerelease alpha` will +By default, `--increment-mode` is set to `linear`, which ensures that bumping pre-releases _maintains linearity_: +bumping of a pre-release with lower precedence than the current pre-release phase maintains the current phase of +higher precedence. For example, if the current version is `1.0.0b1` then bumping with `--prerelease alpha` will continue to bump the “beta” phase. -Setting `--increment-mode` to `exact` instructs `cz bump` to instead apply the -exact changes that have been specified with `--increment` or determined from the commit log. For example, +Setting `--increment-mode` to `exact` instructs `cz bump` to instead apply the +exact changes that have been specified with `--increment` or determined from the commit log. For example, `--prerelease beta` will always result in a `b` tag, and `--increment PATCH` will always increase the patch component. Below are some examples that illustrate the difference in behavior: diff --git a/docs/customization.md b/docs/customization.md index 0c86f60d20..bc51cd2179 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -318,7 +318,7 @@ You can customize it of course, and this are the variables you need to add to yo | `commit_parser` | `str` | NO | Regex which should provide the variables explained in the [changelog description][changelog-des] | | `changelog_pattern` | `str` | NO | Regex to validate the commits, this is useful to skip commits that don't meet your ruling standards like a Merge. Usually the same as bump_pattern | | `change_type_map` | `dict` | NO | Convert the title of the change type that will appear in the changelog, if a value is not found, the original will be provided | -| `changelog_message_builder_hook` | `method: (dict, git.GitCommit) -> dict` | NO | Customize with extra information your message output, like adding links, this function is executed per parsed commit. Each GitCommit contains the following attrs: `rev`, `title`, `body`, `author`, `author_email` | +| `changelog_message_builder_hook` | `method: (dict, git.GitCommit) -> dict | None` | NO | Customize with extra information your message output, like adding links, this function is executed per parsed commit. Each GitCommit contains the following attrs: `rev`, `title`, `body`, `author`, `author_email`. Returning a falsy value ignore the commit. | | `changelog_hook` | `method: (full_changelog: str, partial_changelog: Optional[str]) -> str` | NO | Receives the whole and partial (if used incremental) changelog. Useful to send slack messages or notify a compliance department. Must return the full_changelog | ```python @@ -339,7 +339,7 @@ class StrangeCommitizen(BaseCommitizen): def changelog_message_builder_hook( self, parsed_message: dict, commit: git.GitCommit - ) -> dict: + ) -> dict | None: rev = commit.rev m = parsed_message["message"] parsed_message[ diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 879443f334..0aff996ff5 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1,3 +1,5 @@ +import re + from pathlib import Path import pytest @@ -1319,6 +1321,32 @@ def changelog_message_builder_hook(message: dict, commit: git.GitCommit) -> dict assert "[link](github.com/232323232) Commitizen author@cz.dev" in result +def test_changelog_message_builder_hook_can_remove_commits( + gitcommits, tags, any_changelog_format: ChangelogFormat +): + def changelog_message_builder_hook(message: dict, commit: git.GitCommit): + return None + + parser = ConventionalCommitsCz.commit_parser + changelog_pattern = ConventionalCommitsCz.changelog_pattern + loader = ConventionalCommitsCz.template_loader + template = any_changelog_format.template + tree = changelog.generate_tree_from_commits( + gitcommits, + tags, + parser, + changelog_pattern, + changelog_message_builder_hook=changelog_message_builder_hook, + ) + result = changelog.render_changelog(tree, loader, template) + + RE_HEADER = re.compile(r"^## v?\d+\.\d+\.\d+(\w)* \(\d{4}-\d{2}-\d{2}\)$") + # Rendered changelog should be empty, only containing version headers + for no, line in enumerate(result.splitlines()): + if line := line.strip(): + assert RE_HEADER.match(line), f"Line {no} should not be there: {line}" + + def test_get_smart_tag_range_returns_an_extra_for_a_range(tags): start, end = ( tags[0], From c0b7229d05cf7aebb1acaf3b88e8cd5c8f958cc9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Mar 2024 07:12:39 +0000 Subject: [PATCH 129/685] =?UTF-8?q?bump:=20version=203.16.0=20=E2=86=92=20?= =?UTF-8?q?3.17.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a40195711e..7c76998942 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.16.0 # automatically updated by Commitizen + rev: v3.17.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 045d308e8b..ad2aa15e82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ +## v3.17.0 (2024-03-06) + +### Feat + +- **changelog**: `changelog_message_build_hook` can remove message by returning a falsy value + ## v3.16.0 (2024-02-26) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 331093ae1a..a3207ca50c 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.16.0" +__version__ = "3.17.0" diff --git a/pyproject.toml b/pyproject.toml index 3a2d3bf79f..eef6e327cd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.16.0" +version = "3.17.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.16.0" +version = "3.17.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From dd5dfed2df27699adfd14a5df75aa475c4c0d680 Mon Sep 17 00:00:00 2001 From: Axel H <noirbizarre@gmail.com> Date: Thu, 7 Mar 2024 14:42:31 +0100 Subject: [PATCH 130/685] fix(bump): pre and post bump hooks were failing when an increment was provided (fix #1004) --- commitizen/commands/bump.py | 3 ++- tests/commands/test_bump_command.py | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index c29c4c35c5..efbe1e0c3c 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -209,6 +209,8 @@ def __call__(self) -> None: # noqa: C901 scheme=self.scheme, ) + is_initial = self.is_initial_tag(current_tag_version, is_yes) + # If user specified changelog_to_stdout, they probably want the # changelog to be generated as well, this is the most intuitive solution self.changelog = self.changelog or bool(self.changelog_to_stdout) @@ -223,7 +225,6 @@ def __call__(self) -> None: # noqa: C901 ) from exc else: if increment is None: - is_initial = self.is_initial_tag(current_tag_version, is_yes) if is_initial: commits = git.get_commits() else: diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index b39271f284..c9e73649f4 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -1007,6 +1007,29 @@ def test_bump_with_pre_bump_hooks( ) +def test_bump_with_hooks_and_increment(mocker: MockFixture, tmp_commitizen_project): + pre_bump_hook = "scripts/pre_bump_hook.sh" + post_bump_hook = "scripts/post_bump_hook.sh" + + tmp_commitizen_cfg_file = tmp_commitizen_project.join("pyproject.toml") + tmp_commitizen_cfg_file.write( + f"{tmp_commitizen_cfg_file.read()}\n" + f'pre_bump_hooks = ["{pre_bump_hook}"]\n' + f'post_bump_hooks = ["{post_bump_hook}"]\n' + ) + + run_mock = mocker.Mock() + mocker.patch.object(hooks, "run", run_mock) + + create_file_and_commit("test: some test") + testargs = ["cz", "bump", "--yes", "--increment", "MINOR"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + tag_exists = git.tag_exist("0.2.0") + assert tag_exists is True + + @pytest.mark.usefixtures("tmp_commitizen_project") def test_bump_manual_version_disallows_prerelease_offset(mocker): create_file_and_commit("feat: new file") From 9a49892dc40e914d437033e44269815a9c25e826 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 14:31:00 +0000 Subject: [PATCH 131/685] =?UTF-8?q?bump:=20version=203.17.0=20=E2=86=92=20?= =?UTF-8?q?3.17.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7c76998942..7c8d5dae6a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.17.0 # automatically updated by Commitizen + rev: v3.17.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index ad2aa15e82..7b1b49e72c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ +## v3.17.1 (2024-03-07) + +### Fix + +- **bump**: pre and post bump hooks were failing when an increment was provided (fix #1004) + ## v3.17.0 (2024-03-06) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index a3207ca50c..7e84c71b24 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.17.0" +__version__ = "3.17.1" diff --git a/pyproject.toml b/pyproject.toml index eef6e327cd..80578d5731 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.17.0" +version = "3.17.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.17.0" +version = "3.17.1" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 15ea15d31c46ef49ae36ab1269d6a85e465262e4 Mon Sep 17 00:00:00 2001 From: Axel H <noirbizarre@users.noreply.github.com> Date: Thu, 7 Mar 2024 15:32:14 +0100 Subject: [PATCH 132/685] fix(changelog): ensure `changelog_message_builder_hook` can access and modify `change_type` (#1002) --- commitizen/changelog.py | 13 ++++++------- tests/test_changelog.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index bf0f18576f..28481a1dea 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -159,14 +159,13 @@ def generate_tree_from_commits( message = map_pat.match(commit.message) if message: parsed_message: dict = message.groupdict() - # change_type becomes optional by providing None - change_type = parsed_message.pop("change_type", None) - if change_type_map: - change_type = change_type_map.get(change_type, change_type) if changelog_message_builder_hook: parsed_message = changelog_message_builder_hook(parsed_message, commit) if parsed_message: + change_type = parsed_message.pop("change_type", None) + if change_type_map: + change_type = change_type_map.get(change_type, change_type) changes[change_type].append(parsed_message) # Process body from commit message @@ -177,14 +176,14 @@ def generate_tree_from_commits( continue parsed_message_body: dict = message_body.groupdict() - change_type = parsed_message_body.pop("change_type", None) - if change_type_map: - change_type = change_type_map.get(change_type, change_type) if changelog_message_builder_hook: parsed_message_body = changelog_message_builder_hook( parsed_message_body, commit ) if parsed_message_body: + change_type = parsed_message_body.pop("change_type", None) + if change_type_map: + change_type = change_type_map.get(change_type, change_type) changes[change_type].append(parsed_message_body) yield {"version": current_tag_name, "date": current_tag_date, "changes": changes} diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 0aff996ff5..af7846f6f0 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1347,6 +1347,37 @@ def changelog_message_builder_hook(message: dict, commit: git.GitCommit): assert RE_HEADER.match(line), f"Line {no} should not be there: {line}" +def test_changelog_message_builder_hook_can_access_and_modify_change_type( + gitcommits, tags, any_changelog_format: ChangelogFormat +): + def changelog_message_builder_hook(message: dict, commit: git.GitCommit): + assert "change_type" in message + message["change_type"] = "overridden" + return message + + parser = ConventionalCommitsCz.commit_parser + changelog_pattern = ConventionalCommitsCz.changelog_pattern + loader = ConventionalCommitsCz.template_loader + template = any_changelog_format.template + tree = changelog.generate_tree_from_commits( + gitcommits, + tags, + parser, + changelog_pattern, + changelog_message_builder_hook=changelog_message_builder_hook, + ) + result = changelog.render_changelog(tree, loader, template) + + RE_HEADER = re.compile(r"^### (?P<type>.+)$") + # There should be only "overridden" change type headers + for no, line in enumerate(result.splitlines()): + if (line := line.strip()) and (match := RE_HEADER.match(line)): + change_type = match.group("type") + assert ( + change_type == "overridden" + ), f"Line {no}: type {change_type} should have been overridden" + + def test_get_smart_tag_range_returns_an_extra_for_a_range(tags): start, end = ( tags[0], From a9c265277ba53fdbe0d87cee90e95cb77ebbe2bd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 14:32:41 +0000 Subject: [PATCH 133/685] =?UTF-8?q?bump:=20version=203.17.1=20=E2=86=92=20?= =?UTF-8?q?3.17.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7c8d5dae6a..d5362edf53 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.17.1 # automatically updated by Commitizen + rev: v3.17.2 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b1b49e72c..e94f04133f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ +## v3.17.2 (2024-03-07) + +### Fix + +- **changelog**: ensure `changelog_message_builder_hook` can access and modify `change_type` (#1002) + ## v3.17.1 (2024-03-07) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 7e84c71b24..4874dc2b76 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.17.1" +__version__ = "3.17.2" diff --git a/pyproject.toml b/pyproject.toml index 80578d5731..9e0356b686 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.17.1" +version = "3.17.2" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.17.1" +version = "3.17.2" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 41f9b820dabf7f1595ee95533c53d11dd904a0ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 15:35:02 +0100 Subject: [PATCH 134/685] build(deps-dev): bump mkdocs-material from 9.5.11 to 9.5.13 (#1006) Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.11 to 9.5.13. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.11...9.5.13) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 091376ec3e..f8463928f4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.11" +version = "9.5.13" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.11-py3-none-any.whl", hash = "sha256:788ee0f3e036dca2dc20298d65e480297d348a44c9d7b2ee05c5262983e66072"}, - {file = "mkdocs_material-9.5.11.tar.gz", hash = "sha256:7af7f8af0dea16175558f3fb9245d26c83a17199baa5f157755e63d7437bf971"}, + {file = "mkdocs_material-9.5.13-py3-none-any.whl", hash = "sha256:5cbe17fee4e3b4980c8420a04cc762d8dc052ef1e10532abd4fce88e5ea9ce6a"}, + {file = "mkdocs_material-9.5.13.tar.gz", hash = "sha256:d8e4caae576312a88fd2609b81cf43d233cdbe36860d67a68702b018b425bd87"}, ] [package.dependencies] From ec2da068723a0e1c12be4f40cf7ee1e7faab85d4 Mon Sep 17 00:00:00 2001 From: Axel H <noirbizarre@users.noreply.github.com> Date: Thu, 7 Mar 2024 15:41:32 +0100 Subject: [PATCH 135/685] feat(changelog): `changelog_message_build_hook` can now generate multiple changelog entries from a single commit (#1003) --- commitizen/changelog.py | 62 ++++++++++++++++++++++++----------------- commitizen/cz/base.py | 4 +-- docs/customization.md | 4 +-- tests/test_changelog.py | 26 +++++++++++++++++ 4 files changed, 66 insertions(+), 30 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index 28481a1dea..5c713af0e6 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -31,7 +31,7 @@ from collections import OrderedDict, defaultdict from dataclasses import dataclass from datetime import date -from typing import TYPE_CHECKING, Callable, Iterable +from typing import TYPE_CHECKING, Iterable from jinja2 import ( BaseLoader, @@ -52,6 +52,7 @@ ) if TYPE_CHECKING: + from commitizen.cz.base import MessageBuilderHook from commitizen.version_schemes import VersionScheme @@ -111,7 +112,7 @@ def generate_tree_from_commits( changelog_pattern: str, unreleased_version: str | None = None, change_type_map: dict[str, str] | None = None, - changelog_message_builder_hook: Callable | None = None, + changelog_message_builder_hook: MessageBuilderHook | None = None, merge_prerelease: bool = False, scheme: VersionScheme = DEFAULT_SCHEME, ) -> Iterable[dict]: @@ -156,39 +157,48 @@ def generate_tree_from_commits( continue # Process subject from commit message - message = map_pat.match(commit.message) - if message: - parsed_message: dict = message.groupdict() - - if changelog_message_builder_hook: - parsed_message = changelog_message_builder_hook(parsed_message, commit) - if parsed_message: - change_type = parsed_message.pop("change_type", None) - if change_type_map: - change_type = change_type_map.get(change_type, change_type) - changes[change_type].append(parsed_message) + if message := map_pat.match(commit.message): + process_commit_message( + changelog_message_builder_hook, + message, + commit, + changes, + change_type_map, + ) # Process body from commit message body_parts = commit.body.split("\n\n") for body_part in body_parts: - message_body = body_map_pat.match(body_part) - if not message_body: - continue - parsed_message_body: dict = message_body.groupdict() - - if changelog_message_builder_hook: - parsed_message_body = changelog_message_builder_hook( - parsed_message_body, commit + if message := body_map_pat.match(body_part): + process_commit_message( + changelog_message_builder_hook, + message, + commit, + changes, + change_type_map, ) - if parsed_message_body: - change_type = parsed_message_body.pop("change_type", None) - if change_type_map: - change_type = change_type_map.get(change_type, change_type) - changes[change_type].append(parsed_message_body) yield {"version": current_tag_name, "date": current_tag_date, "changes": changes} +def process_commit_message( + hook: MessageBuilderHook | None, + parsed: re.Match[str], + commit: GitCommit, + changes: dict[str | None, list], + change_type_map: dict[str, str] | None = None, +): + message: dict = parsed.groupdict() + + if processed := hook(message, commit) if hook else message: + messages = [processed] if isinstance(processed, dict) else processed + for msg in messages: + change_type = msg.pop("change_type", None) + if change_type_map: + change_type = change_type_map.get(change_type, change_type) + changes[change_type].append(msg) + + def order_changelog_tree(tree: Iterable, change_type_order: list[str]) -> Iterable: if len(set(change_type_order)) != len(change_type_order): raise InvalidConfigurationError( diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index 766c252eee..5a84d1f101 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -1,7 +1,7 @@ from __future__ import annotations from abc import ABCMeta, abstractmethod -from typing import Any, Callable, Protocol +from typing import Any, Callable, Iterable, Protocol from jinja2 import BaseLoader, PackageLoader from prompt_toolkit.styles import Style, merge_styles @@ -14,7 +14,7 @@ class MessageBuilderHook(Protocol): def __call__( self, message: dict[str, Any], commit: git.GitCommit - ) -> dict[str, Any] | None: ... + ) -> dict[str, Any] | Iterable[dict[str, Any]] | None: ... class BaseCommitizen(metaclass=ABCMeta): diff --git a/docs/customization.md b/docs/customization.md index bc51cd2179..7d352f0313 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -318,7 +318,7 @@ You can customize it of course, and this are the variables you need to add to yo | `commit_parser` | `str` | NO | Regex which should provide the variables explained in the [changelog description][changelog-des] | | `changelog_pattern` | `str` | NO | Regex to validate the commits, this is useful to skip commits that don't meet your ruling standards like a Merge. Usually the same as bump_pattern | | `change_type_map` | `dict` | NO | Convert the title of the change type that will appear in the changelog, if a value is not found, the original will be provided | -| `changelog_message_builder_hook` | `method: (dict, git.GitCommit) -> dict | None` | NO | Customize with extra information your message output, like adding links, this function is executed per parsed commit. Each GitCommit contains the following attrs: `rev`, `title`, `body`, `author`, `author_email`. Returning a falsy value ignore the commit. | +| `changelog_message_builder_hook` | `method: (dict, git.GitCommit) -> dict | list | None` | NO | Customize with extra information your message output, like adding links, this function is executed per parsed commit. Each GitCommit contains the following attrs: `rev`, `title`, `body`, `author`, `author_email`. Returning a falsy value ignore the commit. | | `changelog_hook` | `method: (full_changelog: str, partial_changelog: Optional[str]) -> str` | NO | Receives the whole and partial (if used incremental) changelog. Useful to send slack messages or notify a compliance department. Must return the full_changelog | ```python @@ -339,7 +339,7 @@ class StrangeCommitizen(BaseCommitizen): def changelog_message_builder_hook( self, parsed_message: dict, commit: git.GitCommit - ) -> dict | None: + ) -> dict | list | None: rev = commit.rev m = parsed_message["message"] parsed_message[ diff --git a/tests/test_changelog.py b/tests/test_changelog.py index af7846f6f0..7944f66dd8 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1347,6 +1347,32 @@ def changelog_message_builder_hook(message: dict, commit: git.GitCommit): assert RE_HEADER.match(line), f"Line {no} should not be there: {line}" +def test_render_changelog_with_changelog_message_builder_hook_multiple_entries( + gitcommits, tags, any_changelog_format: ChangelogFormat +): + def changelog_message_builder_hook(message: dict, commit: git.GitCommit): + messages = [message.copy(), message.copy(), message.copy()] + for idx, msg in enumerate(messages): + msg["message"] = "Message #{idx}" + return messages + + parser = ConventionalCommitsCz.commit_parser + changelog_pattern = ConventionalCommitsCz.changelog_pattern + loader = ConventionalCommitsCz.template_loader + template = any_changelog_format.template + tree = changelog.generate_tree_from_commits( + gitcommits, + tags, + parser, + changelog_pattern, + changelog_message_builder_hook=changelog_message_builder_hook, + ) + result = changelog.render_changelog(tree, loader, template) + + for idx in range(3): + assert "Message #{idx}" in result + + def test_changelog_message_builder_hook_can_access_and_modify_change_type( gitcommits, tags, any_changelog_format: ChangelogFormat ): From 99b6fba066fc409b6132d6de9a6afa1cdcdd100f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 14:42:00 +0000 Subject: [PATCH 136/685] =?UTF-8?q?bump:=20version=203.17.2=20=E2=86=92=20?= =?UTF-8?q?3.18.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d5362edf53..4df7b3f62b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.17.2 # automatically updated by Commitizen + rev: v3.18.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index e94f04133f..6bd7818283 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ +## v3.18.0 (2024-03-07) + +### Feat + +- **changelog**: `changelog_message_build_hook` can now generate multiple changelog entries from a single commit (#1003) + ## v3.17.2 (2024-03-07) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 4874dc2b76..1b052a2ba3 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.17.2" +__version__ = "3.18.0" diff --git a/pyproject.toml b/pyproject.toml index 9e0356b686..a81cf299ba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.17.2" +version = "3.18.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.17.2" +version = "3.18.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 33b75e3a93087c1b91e1151988a58af38bd808c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 Mar 2024 19:19:57 +0100 Subject: [PATCH 137/685] build(deps): bump importlib-metadata from 7.0.1 to 7.0.2 (#1010) --- poetry.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index f8463928f4..1018676276 100644 --- a/poetry.lock +++ b/poetry.lock @@ -496,22 +496,22 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.0.1" +version = "7.0.2" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, - {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, + {file = "importlib_metadata-7.0.2-py3-none-any.whl", hash = "sha256:f4bc4c0c070c490abf4ce96d715f68e95923320370efb66143df00199bb6c100"}, + {file = "importlib_metadata-7.0.2.tar.gz", hash = "sha256:198f568f3230878cb1b44fbd7975f87906c22336dba2e4a7f05278c281fbd792"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "iniconfig" From 3100fd51739b499d4daedf3586e5235ebc49804f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 Mar 2024 19:20:27 +0100 Subject: [PATCH 138/685] build(deps): bump argcomplete from 3.2.2 to 3.2.3 (#1009) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1018676276..ecdde80af8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "argcomplete" -version = "3.2.2" +version = "3.2.3" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.2.2-py3-none-any.whl", hash = "sha256:e44f4e7985883ab3e73a103ef0acd27299dbfe2dfed00142c35d4ddd3005901d"}, - {file = "argcomplete-3.2.2.tar.gz", hash = "sha256:f3e49e8ea59b4026ee29548e24488af46e30c9de57d48638e24f54a1ea1000a2"}, + {file = "argcomplete-3.2.3-py3-none-any.whl", hash = "sha256:c12355e0494c76a2a7b73e3a59b09024ca0ba1e279fb9ed6c1b82d5b74b6a70c"}, + {file = "argcomplete-3.2.3.tar.gz", hash = "sha256:bf7900329262e481be5a15f56f19736b376df6f82ed27576fa893652c5de6c23"}, ] [package.extras] From 267f374966ae1e6d64765a3721a64ad0fae1e9de Mon Sep 17 00:00:00 2001 From: Axel H <noirbizarre@gmail.com> Date: Sat, 9 Mar 2024 18:35:29 +0100 Subject: [PATCH 139/685] fix(changelog): changelog hook was not called on dry run --- commitizen/commands/changelog.py | 9 +++++---- tests/commands/test_changelog_command.py | 13 +++++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 8b3d126fe3..5d710ed5d0 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -132,6 +132,11 @@ def write_changelog( if changelog_hook: changelog_out = changelog_hook(changelog_out, partial_changelog) + + if self.dry_run: + out.write(changelog_out) + raise DryRunExit() + changelog_file.write(changelog_out) def export_template(self): @@ -216,10 +221,6 @@ def __call__(self): ) 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, encoding=self.encoding) as changelog_file: diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index a0183e1cd9..971d04cce5 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -12,6 +12,7 @@ from commitizen import __file__ as commitizen_init from commitizen import cli, git from commitizen.commands.changelog import Changelog +from commitizen.config.base_config import BaseConfig from commitizen.cz.base import BaseCommitizen from commitizen.exceptions import ( DryRunExit, @@ -275,7 +276,8 @@ def test_changelog_incremental_keep_a_changelog_sample( @pytest.mark.usefixtures("tmp_commitizen_project") -def test_changelog_hook(mocker: MockFixture, config): +@pytest.mark.parametrize("dry_run", [True, False]) +def test_changelog_hook(mocker: MockFixture, config: BaseConfig, dry_run: bool): changelog_hook_mock = mocker.Mock() changelog_hook_mock.return_value = "cool changelog hook" @@ -283,12 +285,15 @@ def test_changelog_hook(mocker: MockFixture, config): create_file_and_commit("refactor: is in changelog") create_file_and_commit("Merge into master") - config.settings["change_type_order"] = ["Refactor", "Feat"] + config.settings["change_type_order"] = ["Refactor", "Feat"] # type: ignore[typeddict-unknown-key] changelog = Changelog( - config, {"unreleased_version": None, "incremental": True, "dry_run": False} + config, {"unreleased_version": None, "incremental": True, "dry_run": dry_run} ) mocker.patch.object(changelog.cz, "changelog_hook", changelog_hook_mock) - changelog() + try: + changelog() + except DryRunExit: + pass full_changelog = ( "## Unreleased\n\n### Refactor\n\n- is in changelog\n\n### Feat\n\n- new file\n" ) From 0e93206748dfdbcd71514fa61d75557e7b816e2d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 07:13:27 +0000 Subject: [PATCH 140/685] =?UTF-8?q?bump:=20version=203.18.0=20=E2=86=92=20?= =?UTF-8?q?3.18.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4df7b3f62b..088e42daa6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.18.0 # automatically updated by Commitizen + rev: v3.18.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 6bd7818283..cfb874f5eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ +## v3.18.1 (2024-03-11) + +### Fix + +- **changelog**: changelog hook was not called on dry run + ## v3.18.0 (2024-03-07) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 1b052a2ba3..1e25597fcc 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.18.0" +__version__ = "3.18.1" diff --git a/pyproject.toml b/pyproject.toml index a81cf299ba..31c83527b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.18.0" +version = "3.18.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.18.0" +version = "3.18.1" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 6654ef1340c485455d672cafcbbbe03ab974a8a2 Mon Sep 17 00:00:00 2001 From: Axel H <noirbizarre@users.noreply.github.com> Date: Mon, 11 Mar 2024 11:29:07 +0100 Subject: [PATCH 141/685] fix(git): force the default git locale on methods relying on parsing the output (#1012) --- commitizen/cmd.py | 3 +++ commitizen/git.py | 4 +++- tests/test_git.py | 12 ++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/commitizen/cmd.py b/commitizen/cmd.py index 51ef4523ff..ba48ac7881 100644 --- a/commitizen/cmd.py +++ b/commitizen/cmd.py @@ -1,3 +1,4 @@ +import os import subprocess from typing import NamedTuple @@ -28,6 +29,8 @@ def _try_decode(bytes_: bytes) -> str: def run(cmd: str, env=None) -> Command: + if env is not None: + env = {**os.environ, **env} process = subprocess.Popen( cmd, shell=True, diff --git a/commitizen/git.py b/commitizen/git.py index 6cdc7e2752..900ca9298e 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -175,7 +175,9 @@ def get_tags( f'%(object)"' ) extra = "--merged" if reachable_only else "" - c = cmd.run(f"git tag --format={formatter} --sort=-creatordate {extra}") + # Force the default language for parsing + env = {"LC_ALL": "C", "LANG": "C", "LANGUAGE": "C"} + c = cmd.run(f"git tag --format={formatter} --sort=-creatordate {extra}", env=env) if c.return_code != 0: if reachable_only and c.err == "fatal: malformed object name HEAD\n": # this can happen if there are no commits in the repo yet diff --git a/tests/test_git.py b/tests/test_git.py index 79eb49f10c..3b7a08f94a 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -71,6 +71,18 @@ def test_get_reachable_tags(tmp_commitizen_project): assert tag_names == {"1.0.0", "1.0.1"} +@pytest.mark.parametrize("locale", ["en_US", "fr_FR"]) +def test_get_reachable_tags_with_commits( + tmp_commitizen_project, locale: str, monkeypatch: pytest.MonkeyPatch +): + monkeypatch.setenv("LANG", f"{locale}.UTF-8") + monkeypatch.setenv("LANGUAGE", f"{locale}.UTF-8") + monkeypatch.setenv("LC_ALL", f"{locale}.UTF-8") + with tmp_commitizen_project.as_cwd(): + tags = git.get_tags(reachable_only=True) + assert tags == [] + + def test_get_tag_names(mocker: MockFixture): tag_str = "v1.0.0\n" "v0.5.0\n" "v0.0.1\n" mocker.patch("commitizen.cmd.run", return_value=FakeCommand(out=tag_str)) From 66899a39a864ae21a9ff1560adfaf5bc4b6e4c57 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 10:29:32 +0000 Subject: [PATCH 142/685] =?UTF-8?q?bump:=20version=203.18.1=20=E2=86=92=20?= =?UTF-8?q?3.18.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 353 +++++++++++++++++++------------------- commitizen/__version__.py | 2 +- pyproject.toml | 4 +- 4 files changed, 184 insertions(+), 177 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 088e42daa6..d674bf0aa6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.18.1 # automatically updated by Commitizen + rev: v3.18.2 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index cfb874f5eb..8576467f2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## v3.18.2 (2024-03-11) + +### Fix + +- **git**: force the default git locale on methods relying on parsing the output (#1012) ## v3.18.1 (2024-03-11) @@ -86,17 +91,12 @@ - **formats**: expose some new customizable changelog formats on the `commitizen.changelog_format` endpoint (Textile, AsciiDoc and RestructuredText) - **template**: add `changelog --export-template` command - **template**: allow to override the template from cli, configuration and plugins +- **cli.py**: Added support for extra git CLI args after -- separator for `cz commit` command ### Fix - **filename**: ensure `file_name` can be passed to `changelog` from `bump` command -## v3.11.0 (2023-10-17) - -### Feat - -- **cli.py**: Added support for extra git CLI args after -- separator for `cz commit` command - ### Refactor - **git.py**: Removed 'extra_args' from git.commit @@ -304,6 +304,7 @@ ### BREAKING CHANGE - Plugins are now exposed as `commitizen.plugin` entrypoints +- Python 3.6 is not officially supported anymore. Please migrate from 3.6 to 3.7 or greater. ### Feat @@ -427,7 +428,7 @@ ### Fix -- **bump.py**: `CHANGELOG.md` gets git added and committed correctly +- **bump.py**: `CHANGELOG.md` gets git added and commited correctly ## v2.33.0 (2022-09-15) @@ -491,16 +492,16 @@ ## v2.31.0 (2022-08-14) +### Feat + +- new file + ### Fix - **pyproject.toml**: remove test added configurations - **changelog**: use defaults.change_type_order in conventional commit - capitalize types in default change_type_order -### Feat - -- new file - ## v2.30.0 (2022-08-14) ### Feat @@ -605,14 +606,14 @@ ## v2.24.0 (2022-04-15) -### Fix - -- change error code for NoneIncrementExit - ### Feat - add --no-raise to avoid raising error codes +### Fix + +- change error code for NoneIncrementExit + ## v2.23.0 (2022-03-29) ### Feat @@ -621,15 +622,15 @@ ## v2.22.0 (2022-03-29) +### Feat + +- **changelog**: add support for single version and version range + ### Refactor - speed up testing and wait for tags - **git**: use date as a function in GitTag to easily patch -### Feat - -- **changelog**: add support for single version and version range - ## v2.21.2 (2022-02-22) ### Fix @@ -648,26 +649,23 @@ ### Feat -- skip merge messages that start with Pull request - skip merge messages that start with Pull request ## v2.20.5 (2022-02-07) -### Refactor - -- iter_modules only accepts str - ### Fix -- Ignore packages that are not plugins - Ignore packages that are not plugins +### Refactor + +- iter_modules only accepts str + ## v2.20.4 (2022-01-17) ### Fix -- **bump**: raise non zero error code when there's no eligible commit to bump -- **bump**: raise non zero error code when there's no eligible commit to bump +- **bump**: raise non zero error code when there's no elegible commit to bump ## v2.20.3 (2021-12-20) @@ -683,6 +681,10 @@ ## v2.20.1 (2021-12-14) +### Fix + +- import TypedDict from type_extensions for backward compatibility + ### Refactor - **conventional_commits**: remove duplicate patterns and import from defaults @@ -690,10 +692,6 @@ - **defaults**: add Settings typeddict - **defaults**: move bump_map, bump_pattern, commit_parser from defaults to ConventionalCommitsCz -### Fix - -- import TypedDict from type_extensions for backward compatibility - ## v2.20.0 (2021-10-06) ### Feat @@ -717,18 +715,18 @@ ### Fix -- **commit**: correct the stage checker before committing +- **commit**: correct the stage checker before commiting ## v2.18.0 (2021-08-13) -### Refactor - -- **shortcuts**: move check for shortcut config setting to apply to any list select - ### Feat - **prompt**: add keyboard shortcuts with config option +### Refactor + +- **shortcuts**: move check for shortcut config setting to apply to any list select + ## v2.17.13 (2021-07-14) ## v2.17.12 (2021-07-06) @@ -792,7 +790,7 @@ ### Fix -- **bump**: replace all occurrences that match regex +- **bump**: replace all occurances that match regex - **wip**: add test for current breaking change ## v2.17.1 (2021-04-08) @@ -857,16 +855,16 @@ ## v2.13.0 (2021-01-01) +### Feat + +- **#319**: add optional change_type_order + ### Refactor - raise an InvalidConfigurationError - **#323**: address PR feedback - move expected COMMITS_TREE to global -### Feat - -- **#319**: add optional change_type_order - ## v2.12.1 (2020-12-30) ### Fix @@ -890,10 +888,12 @@ ### Feat - add yaml as a config option +- **config**: add support for the new class YAMLConfig at the root of the confi internal package +- **init**: add support for yaml config file at init -### feat +### Fix -- **config**: add support for the new class YAMLConfig at the root of the confi internal package +- **YAMLConfig**: add a TypeError exception to handle in _parse_settings method ## v2.10.0 (2020-12-02) @@ -903,15 +903,15 @@ ## v2.9.0 (2020-12-02) -### Fix - -- **json_config**: fix the emtpy_config_content method - ### Feat - **Init**: add the json config support as an option at Init - **commitizen/config/json_config**: add json support for configuration +### Fix + +- **json_config**: fix the emtpy_config_content method + ## v2.8.2 (2020-11-21) ### Fix @@ -979,15 +979,15 @@ ## v2.3.0 (2020-09-03) +### Feat + +- **cli**: rewrite cli instructions to be more succinct about what they require + ### Fix - **cli**: add guideline for subject input - **cli**: wrap the word enter with brackets -### Feat - -- **cli**: rewrite cli instructions to be more succinct about what they require - ## v2.2.0 (2020-08-31) ### Feat @@ -996,15 +996,15 @@ ## v2.1.0 (2020-08-06) -### Refactor - -- **cz_check**: Refactor _get_commits to return GitCommit instead of dict - ### Feat - **cz_check**: Add rev to all displayed ill-formatted commits - **cz_check**: Update to show all ill-formatted commits +### Refactor + +- **cz_check**: Refactor _get_commits to return GitCommit instead of dict + ## v2.0.2 (2020-08-03) ### Fix @@ -1020,27 +1020,28 @@ ## v2.0.0 (2020-07-26) -### Fix +### BREAKING CHANGE -- add missing `pyyaml` dependency -- **cli**: make command required for commitizen +- setup.cfg, .cz and .cz.cfg are no longer supported +- Use "cz verion" instead +- "cz --debug" will no longer work + #47 ### Feat - **init**: enable setting up pre-commit hook through "cz init" +### Fix + +- add missing `pyyaml` dependency +- **cli**: make command required for commitizen + ### Refactor - **config**: drop "files" configure support. Please use "version_files" instead - **config**: remove ini configuration support - **cli**: remove "--version" argument -### BREAKING CHANGE - -- setup.cfg, .cz and .cz.cfg are no longer supported -- Use "cz version" instead -- "cz --debug" will no longer work - ## v1.25.0 (2020-07-26) ### Feat @@ -1084,6 +1085,10 @@ ## v1.23.0 (2020-06-14) +### Feat + +- **cli**: enable displaying all traceback for CommitizenException when --debug flag is used + ### Refactor - **exception**: rename MissingConfigError as MissingCzCustomizeConfigError @@ -1096,10 +1101,6 @@ - use custom exception for error handling - **error_codes**: remove unused NO_COMMIT_MSG error code -### Feat - -- **cli**: enable displaying all traceback for CommitizenException when --debug flag is used - ## v1.22.3 (2020-06-10) ## v1.22.2 (2020-05-29) @@ -1116,16 +1117,16 @@ ## v1.22.0 (2020-05-13) -### Fix - -- **changelog**: rename `message_hook` -> `changelog_message_builder_hook` - ### Feat - **changelog**: add support for `changelog_hook` when changelog finishes the generation - **changelog**: add support for `message_hook` method - **changelog**: add support for modifying the change_type in the title of the changelog +### Fix + +- **changelog**: rename `message_hook` -> `changelog_message_builder_hook` + ## v1.21.0 (2020-05-09) ### Feat @@ -1163,27 +1164,31 @@ ## v1.19.0 (2020-05-02) -### Fix - -- **git**: missing dependency removed -- **changelog**: check get_metadata for existing changelog file - ### Feat - **changelog**: add support for any commit rule system - **changelog**: add incremental flag +- **commands/changelog**: make changelog_file an option in config +- **commands/changelog**: exit when there is no commit exists +- **commands/changlog**: add --start-rev argument to `cz changelog` +- **changelog**: generate changelog based on git log +- **commands/changelog**: generate changelog_tree from all past commits +- **cz/conventinal_commits**: add changelog_map, changelog_pattern and implement process_commit +- **cz/base**: add default process_commit for processing commit message +- **changelog**: changelog tree generation from markdown -## v1.18.3 (2020-04-22) - -### Refactor - -- **commands/init**: fix typo +### Fix -## v1.18.2 (2020-04-22) +- **git**: missing dependency removed +- **changelog**: check get_metadata for existing changelog file +- **cz/conventional_commits**: fix schema_pattern break due to rebase +- **changelog_template**: fix list format +- **commitizen/cz**: set changelog_map, changelog_pattern to none as default +- **commands/changelog**: remove --skip-merge argument +- **cli**: add changelog arguments ### Refactor -- **git**: replace GitCommit.message code with one-liner - **changelog**: use functions from changelog.py - **changelog**: rename category to change_type to fit 'keep a changelog' - **templates**: rename as "keep_a_changelog_template.j2" @@ -1194,25 +1199,21 @@ - **commands/changelog**: remove redundant if statement - **commands/changelog**: use jinja2 template instead of string concatenation to build changelog +## v1.18.3 (2020-04-22) + +### Refactor + +- **commands/init**: fix typo + +## v1.18.2 (2020-04-22) + ### Fix - **git**: fix returned value for GitCommit.message when body is empty -- **cz/conventional_commits**: fix schema_pattern break due to rebase -- **changelog_template**: fix list format -- **commitizen/cz**: set changelog_map, changelog_pattern to none as default -- **commands/changelog**: remove --skip-merge argument -- **cli**: add changelog arguments -### Feat +### Refactor -- **commands/changelog**: make changelog_file an option in config -- **commands/changelog**: exit when there is no commit exists -- **commands/changelog**: add --start-rev argument to `cz changelog` -- **changelog**: generate changelog based on git log -- **commands/changelog**: generate changelog_tree from all past commits -- **cz/conventinal_commits**: add changelog_map, changelog_pattern and implement process_commit -- **cz/base**: add default process_commit for processing commit message -- **changelog**: changelog tree generation from markdown +- **git**: replace GitCommit.message code with one-liner ## v1.18.1 (2020-04-16) @@ -1222,6 +1223,14 @@ ## v1.18.0 (2020-04-13) +### Feat + +- **bump**: support for ! as BREAKING change in commit message + +### Fix + +- **cz/customize**: add error handling when customize detail is not set + ### Refactor - **cz/customize**: remove unused mypy ignore @@ -1233,14 +1242,6 @@ - **cz**: add type annotation for each function in cz - **config**: fix mypy warning for _conf -### Fix - -- **cz/customize**: add error handling when customize detail is not set - -### Feat - -- **bump**: support for ! as BREAKING change in commit message - ## v1.17.1 (2020-03-24) ### Fix @@ -1253,19 +1254,19 @@ ## v1.17.0 (2020-03-15) -### Refactor +### Feat -- **tests/bump**: use parameterize to group similliar tests -- **cz/connventional_commit**: use \S to check scope -- **git**: remove unnecessary dot between git range +- **commands/check**: add --rev-range argument for checking commits within some range ### Fix - **bump**: fix bump find_increment error -### Feat +### Refactor -- **commands/check**: add --rev-range argument for checking commits within some range +- **cz/connventional_commit**: use \S to check scope +- **git**: remove unnecessary dot between git range +- **tests/bump**: use parameterize to group similliar tests ## v1.16.4 (2020-03-03) @@ -1301,6 +1302,10 @@ ## v1.16.0 (2020-01-21) +### Feat + +- **git**: get_commits default from first_commit + ### Refactor - **commands/bump**: rename parameter into bump_setting to distinguish bump_setting and argument @@ -1308,39 +1313,41 @@ - **cmd**: reimplement how cmd is run - **git**: Use GitCommit, GitTag object to store commit and git information - **git**: make arguments other then start and end in get_commit keyword arguments -- **git**: Change get_commits into returning commits instead of lines of messages - -### Feat - -- **git**: get_commits default from first_commit +- **git**: Change get_commits into returning commits instead of lines of messsages ## v1.15.1 (2020-01-20) -## v1.15.0 (2020-01-20) +### Fix + +- **cli**: fix --version not functional ### Refactor - **tests/commands/bump**: use tmp_dir to replace self implemented tmp dir behavior -- **git**: make find_git_project_root return None if it's not a git project -- **config/base_config**: make set_key not implemented -- **error_codes**: move all the error_codes to a module -- **config**: replace string type path with pathlib.Path - **test_bump_command**: rename camel case variables - **tests/commands/check**: use pytest fixture tmpdir replace self implemented contextmanager - **test/commands/other**: replace unit test style mock with mocker fixture - **tests/commands**: separate command unit tests into modules - **tests/commands**: make commands related tests a module -### Fix - -- **git**: remove breakline in the return value of find_git_project_root -- **cli**: fix --version not functional +## v1.15.0 (2020-01-20) ### Feat - **config**: look up configuration in git project root - **git**: add find_git_project_root +### Fix + +- **git**: remove breakline in the return value of find_git_project_root + +### Refactor + +- **git**: make find_git_project_root return None if it's not a git project +- **config/base_config**: make set_key not implemented +- **error_codes**: move all the error_codes to a module +- **config**: replace string type path with pathlib.Path + ## v1.14.2 (2020-01-14) ### Fix @@ -1349,20 +1356,20 @@ ## v1.14.1 (2020-01-11) -## v1.14.0 (2020-01-06) +### Fix -### Refactor +- **cli**: fix the way default handled for name argument +- **cli**: fix name cannot be overwritten through config in newly refactored config design -- **pre-commit-hooks**: add metadata for the check hook +## v1.14.0 (2020-01-06) ### Feat - **pre-commit-hooks**: add pre-commit hook -### Fix +### Refactor -- **cli**: fix the way default handled for name argument -- **cli**: fix name cannot be overwritten through config in newly refactored config design +- **pre-commit-hooks**: add metadata for the check hook ## v1.13.1 (2019-12-31) @@ -1392,6 +1399,12 @@ ## v1.10.2 (2019-12-27) +### Fix + +- **config**: handle empty config file +- **config**: fix load global_conf even if it doesn't exist +- **config/ini_config**: replase outdated _parse_ini_settings with _parse_settings + ### Refactor - new config system where each config type has its own class @@ -1404,12 +1417,6 @@ - **config**: move default settings back to defaults - **config**: Make config a class and each type of config (e.g., toml, ini) a child class -### Fix - -- **config**: handle empty config file -- **config**: fix load global_conf even if it doesn't exist -- **config/ini_config**: replace outdated _parse_ini_settings with _parse_settings - ## v1.10.1 (2019-12-10) ### Fix @@ -1444,28 +1451,34 @@ - **config**: add deprecation warning for loading config from ini files - **cz/customize**: add jinja support to enhance template flexibility - **cz/filters**: add required_validator and multiple_line_breaker +- **Commands/commit**: add ´--dry-run´ flag to the Commit command - **cz/cz_customize**: implement info to support info and info_path - **cz/cz_customize**: enable bump_pattern bump_map customization - **cz/cz_customize**: implement customizable cz -- **Commands/commit**: add ´--dry-run´ flag to the Commit command - new 'git-cz' entrypoint +### Fix + +- commit dry-run doesnt require staging to be clean +- **scripts**: add back the delelte poetry prefix +- correct typo to spell "convention" +- removing folder in windows throwing a PermissionError +- **test_cli**: testing the version command + ### Refactor - **config**: remove has_pyproject which is no longer used -- **cz/customize**: make jinja2 a custom requirement. if not installed use string.Template instead +- **cz/customize**: make jinja2 a custom requirement. if not installed use string.Tempalte instead - **cz/utils**: rename filters as utils - **cli**: add back --version and remove subcommand required constraint -### Fix +## v1.8.0 (2019-11-12) -- commit dry-run doesn't require staging to be clean -- correct typo to spell "convention" -- removing folder in windows throwing a PermissionError -- **scripts**: add back the delete poetry prefix -- **test_cli**: testing the version command +### Feat -## v1.8.0 (2019-11-12) +- **cz**: add a base exception for cz customization +- **commands/commit**: abort commit if there is nothing to commit +- **git**: add is_staging_clean to check if there is any file in git staging ### Fix @@ -1479,13 +1492,13 @@ - **command/version**: use out.write instead of out.line - **command**: make version a command instead of an argument -### Feat +## v1.7.0 (2019-11-08) -- **cz**: add a base exception for cz customization -- **commands/commit**: abort commit if there is nothing to commit -- **git**: add is_staging_clean to check if there is any file in git staging +### Feat -## v1.7.0 (2019-11-08) +- **config**: update style instead of overwrite +- **config**: parse style in config +- **commit**: make style configurable for commit command ### Fix @@ -1497,12 +1510,6 @@ - **cz**: change the color of default style -### Feat - -- **config**: update style instead of overwrite -- **config**: parse style in config -- **commit**: make style configurable for commit command - ## v1.6.0 (2019-11-05) ### Feat @@ -1523,14 +1530,14 @@ ## v1.4.0 (2019-04-26) -### Fix - -- **bump**: handle commit and create tag failure - ### Feat - added argument yes to bump in order to accept questions +### Fix + +- **bump**: handle commit and create tag failure + ## v1.3.0 (2019-04-24) ### Feat @@ -1551,6 +1558,11 @@ ## v1.1.1 (2019-04-18) +### Fix + +- **bump**: commit message now fits better with semver +- conventional commit 'breaking change' in body instead of title + ### Refactor - changed stdout statements @@ -1559,11 +1571,6 @@ - **example**: command logic removed from commitizen base - **commit**: moved most of the commit logic to the commit command -### Fix - -- **bump**: commit message now fits better with semver -- conventional commit 'breaking change' in body instead of title - ## v1.1.0 (2019-04-14) ### Feat @@ -1573,7 +1580,7 @@ - update given files with new version - **config**: new set key, used to set version to cfg - support for pyproject.toml -- first semantic version bump implementation +- first semantic version bump implementaiton ### Fix @@ -1630,13 +1637,13 @@ ## v0.9.6 (2018-09-19) -### Refactor +### Fix -- **conventionalCommit**: moved filters to questions instead of message +- **manifest**: inluded missing files -### Fix +### Refactor -- **manifest**: included missing files +- **conventionalCommit**: moved fitlers to questions instead of message ## v0.9.5 (2018-08-24) @@ -1654,7 +1661,7 @@ ### Feat -- **committer**: conventional commit is a bit more intelligent now +- **commiter**: conventional commit is a bit more intelligent now ## v0.9.2 (2017-11-11) diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 1e25597fcc..c98522b415 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.18.1" +__version__ = "3.18.2" diff --git a/pyproject.toml b/pyproject.toml index 31c83527b6..dfb5527052 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.18.1" +version = "3.18.2" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.18.1" +version = "3.18.2" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From a92c4341c4d55e6dfffc89dd8952620195449705 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 11:36:42 +0100 Subject: [PATCH 143/685] build(deps-dev): bump pytest from 8.0.2 to 8.1.1 (#1014) --- poetry.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/poetry.lock b/poetry.lock index ecdde80af8..652ec0a120 100644 --- a/poetry.lock +++ b/poetry.lock @@ -943,13 +943,13 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co [[package]] name = "pluggy" -version = "1.3.0" +version = "1.4.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, ] [package.extras] @@ -1048,13 +1048,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pytest" -version = "8.0.2" +version = "8.1.1" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.0.2-py3-none-any.whl", hash = "sha256:edfaaef32ce5172d5466b5127b42e0d6d35ebbe4453f0e3505d96afd93f6b096"}, - {file = "pytest-8.0.2.tar.gz", hash = "sha256:d4051d623a2e0b7e51960ba963193b09ce6daeb9759a451844a21e4ddedfc1bd"}, + {file = "pytest-8.1.1-py3-none-any.whl", hash = "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7"}, + {file = "pytest-8.1.1.tar.gz", hash = "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"}, ] [package.dependencies] @@ -1062,11 +1062,11 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=1.3.0,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} +pluggy = ">=1.4,<2.0" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" From 7bee8e7d697f3816cb0996c7e92a5d5714bd8b9e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 11:47:22 +0100 Subject: [PATCH 144/685] build(deps): bump packaging from 23.2 to 24.0 (#1015) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 652ec0a120..54be67d4c4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -856,13 +856,13 @@ setuptools = "*" [[package]] name = "packaging" -version = "23.2" +version = "24.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] [[package]] From 579205dbbc46120205550a69b84e065fa3d40bfe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 11:56:34 +0100 Subject: [PATCH 145/685] build(deps-dev): bump mypy from 1.8.0 to 1.9.0 (#1016) --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index 54be67d4c4..b67f1fa4b2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -784,38 +784,38 @@ files = [ [[package]] name = "mypy" -version = "1.8.0" +version = "1.9.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"}, - {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"}, - {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"}, - {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"}, - {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"}, - {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"}, - {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"}, - {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"}, - {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"}, - {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"}, - {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"}, - {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"}, - {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"}, - {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"}, - {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"}, - {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"}, - {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"}, - {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"}, - {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"}, - {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"}, - {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"}, - {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"}, - {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"}, - {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"}, - {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"}, - {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"}, - {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"}, + {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"}, + {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"}, + {file = "mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150"}, + {file = "mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374"}, + {file = "mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03"}, + {file = "mypy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3"}, + {file = "mypy-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc"}, + {file = "mypy-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129"}, + {file = "mypy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612"}, + {file = "mypy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3"}, + {file = "mypy-1.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd"}, + {file = "mypy-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6"}, + {file = "mypy-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185"}, + {file = "mypy-1.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913"}, + {file = "mypy-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"}, + {file = "mypy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b"}, + {file = "mypy-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2"}, + {file = "mypy-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e"}, + {file = "mypy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04"}, + {file = "mypy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89"}, + {file = "mypy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02"}, + {file = "mypy-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4"}, + {file = "mypy-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d"}, + {file = "mypy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf"}, + {file = "mypy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9"}, + {file = "mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e"}, + {file = "mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974"}, ] [package.dependencies] From 61b1570c7b8affc348223acb755664eb7c2b3cf4 Mon Sep 17 00:00:00 2001 From: Axel H <noirbizarre@gmail.com> Date: Mon, 11 Mar 2024 16:14:43 +0100 Subject: [PATCH 146/685] fix(warnings): all warnings should go to `stdout` --- commitizen/out.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/out.py b/commitizen/out.py index 3801ad4c15..40342e9de5 100644 --- a/commitizen/out.py +++ b/commitizen/out.py @@ -39,4 +39,4 @@ def diagnostic(value: str): def warn(value: str) -> None: message = colored(value, "magenta") - line(message) + line(message, file=sys.stderr) From 7eb6477b14a45f3f0b526a162594045ade174f3b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 17:59:04 +0000 Subject: [PATCH 147/685] =?UTF-8?q?bump:=20version=203.18.2=20=E2=86=92=20?= =?UTF-8?q?3.18.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d674bf0aa6..c47d83a992 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.18.2 # automatically updated by Commitizen + rev: v3.18.3 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 8576467f2c..e0c221824f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.18.3 (2024-03-11) + +### Fix + +- **warnings**: all warnings should go to `stdout` + ## v3.18.2 (2024-03-11) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index c98522b415..c3689ecdcd 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.18.2" +__version__ = "3.18.3" diff --git a/pyproject.toml b/pyproject.toml index dfb5527052..00107d2201 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.18.2" +version = "3.18.3" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.18.2" +version = "3.18.3" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 2155fb3189a73208a81584d1da1c2ce49e31d716 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 01:51:43 +0000 Subject: [PATCH 148/685] build(deps-dev): bump ruff from 0.2.2 to 0.3.2 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.2.2 to 0.3.2. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.2.2...v0.3.2) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- pyproject.toml | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/poetry.lock b/poetry.lock index b67f1fa4b2..c580fc260c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1407,28 +1407,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.2.2" +version = "0.3.2" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.2.2-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0a9efb032855ffb3c21f6405751d5e147b0c6b631e3ca3f6b20f917572b97eb6"}, - {file = "ruff-0.2.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d450b7fbff85913f866a5384d8912710936e2b96da74541c82c1b458472ddb39"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecd46e3106850a5c26aee114e562c329f9a1fbe9e4821b008c4404f64ff9ce73"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e22676a5b875bd72acd3d11d5fa9075d3a5f53b877fe7b4793e4673499318ba"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1695700d1e25a99d28f7a1636d85bafcc5030bba9d0578c0781ba1790dbcf51c"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b0c232af3d0bd8f521806223723456ffebf8e323bd1e4e82b0befb20ba18388e"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f63d96494eeec2fc70d909393bcd76c69f35334cdbd9e20d089fb3f0640216ca"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a61ea0ff048e06de273b2e45bd72629f470f5da8f71daf09fe481278b175001"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e1439c8f407e4f356470e54cdecdca1bd5439a0673792dbe34a2b0a551a2fe3"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:940de32dc8853eba0f67f7198b3e79bc6ba95c2edbfdfac2144c8235114d6726"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0c126da55c38dd917621552ab430213bdb3273bb10ddb67bc4b761989210eb6e"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3b65494f7e4bed2e74110dac1f0d17dc8e1f42faaa784e7c58a98e335ec83d7e"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1ec49be4fe6ddac0503833f3ed8930528e26d1e60ad35c2446da372d16651ce9"}, - {file = "ruff-0.2.2-py3-none-win32.whl", hash = "sha256:d920499b576f6c68295bc04e7b17b6544d9d05f196bb3aac4358792ef6f34325"}, - {file = "ruff-0.2.2-py3-none-win_amd64.whl", hash = "sha256:cc9a91ae137d687f43a44c900e5d95e9617cb37d4c989e462980ba27039d239d"}, - {file = "ruff-0.2.2-py3-none-win_arm64.whl", hash = "sha256:c9d15fc41e6054bfc7200478720570078f0b41c9ae4f010bcc16bd6f4d1aacdd"}, - {file = "ruff-0.2.2.tar.gz", hash = "sha256:e62ed7f36b3068a30ba39193a14274cd706bc486fad521276458022f7bccb31d"}, + {file = "ruff-0.3.2-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:77f2612752e25f730da7421ca5e3147b213dca4f9a0f7e0b534e9562c5441f01"}, + {file = "ruff-0.3.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9966b964b2dd1107797be9ca7195002b874424d1d5472097701ae8f43eadef5d"}, + {file = "ruff-0.3.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b83d17ff166aa0659d1e1deaf9f2f14cbe387293a906de09bc4860717eb2e2da"}, + {file = "ruff-0.3.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb875c6cc87b3703aeda85f01c9aebdce3d217aeaca3c2e52e38077383f7268a"}, + {file = "ruff-0.3.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be75e468a6a86426430373d81c041b7605137a28f7014a72d2fc749e47f572aa"}, + {file = "ruff-0.3.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:967978ac2d4506255e2f52afe70dda023fc602b283e97685c8447d036863a302"}, + {file = "ruff-0.3.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1231eacd4510f73222940727ac927bc5d07667a86b0cbe822024dd00343e77e9"}, + {file = "ruff-0.3.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c6d613b19e9a8021be2ee1d0e27710208d1603b56f47203d0abbde906929a9b"}, + {file = "ruff-0.3.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8439338a6303585d27b66b4626cbde89bb3e50fa3cae86ce52c1db7449330a7"}, + {file = "ruff-0.3.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:de8b480d8379620cbb5ea466a9e53bb467d2fb07c7eca54a4aa8576483c35d36"}, + {file = "ruff-0.3.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b74c3de9103bd35df2bb05d8b2899bf2dbe4efda6474ea9681280648ec4d237d"}, + {file = "ruff-0.3.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f380be9fc15a99765c9cf316b40b9da1f6ad2ab9639e551703e581a5e6da6745"}, + {file = "ruff-0.3.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:0ac06a3759c3ab9ef86bbeca665d31ad3aa9a4b1c17684aadb7e61c10baa0df4"}, + {file = "ruff-0.3.2-py3-none-win32.whl", hash = "sha256:9bd640a8f7dd07a0b6901fcebccedadeb1a705a50350fb86b4003b805c81385a"}, + {file = "ruff-0.3.2-py3-none-win_amd64.whl", hash = "sha256:0c1bdd9920cab5707c26c8b3bf33a064a4ca7842d91a99ec0634fec68f9f4037"}, + {file = "ruff-0.3.2-py3-none-win_arm64.whl", hash = "sha256:5f65103b1d76e0d600cabd577b04179ff592064eaa451a70a81085930e907d0b"}, + {file = "ruff-0.3.2.tar.gz", hash = "sha256:fa78ec9418eb1ca3db392811df3376b46471ae93792a81af2d1cbb0e5dcb5142"}, ] [[package]] @@ -1766,4 +1766,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "ae231a49c0c27985defdc7adba7a112eecc8c8abe1e9a8e5cf5358f7a71637c0" +content-hash = "e30411f9893b8c5788c5665a2a888596bcc1c170ac3681f868822e69a4ae1f46" diff --git a/pyproject.toml b/pyproject.toml index 00107d2201..58886b920e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,7 +62,7 @@ pytest-xdist = "^3.1.0" # code formatter black = ">=23.11,<25.0" # linter -ruff = ">=0.1.6,<0.3.0" +ruff = ">=0.1.6,<0.4.0" pre-commit = ">=2.18,<4.0" mypy = "^1.4" types-PyYAML = ">=5.4.3,<7.0.0" From a0003aef26a37b6e4dda43cb07058fc2e9c3feba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 13:58:14 +0100 Subject: [PATCH 149/685] build(deps-dev): bump types-deprecated from 1.2.9.20240106 to 1.2.9.20240311 (#1022) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index c580fc260c..db0f51c766 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1530,13 +1530,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "types-deprecated" -version = "1.2.9.20240106" +version = "1.2.9.20240311" description = "Typing stubs for Deprecated" optional = false python-versions = ">=3.8" files = [ - {file = "types-Deprecated-1.2.9.20240106.tar.gz", hash = "sha256:afeb819e9a03d0a5795f18c88fe6207c48ed13c639e93281bd9d9b7bb6d34310"}, - {file = "types_Deprecated-1.2.9.20240106-py3-none-any.whl", hash = "sha256:9dcb258493b5be407574ee21e50ddac9e429072d39b576126bf1ac00764fb9a8"}, + {file = "types-Deprecated-1.2.9.20240311.tar.gz", hash = "sha256:0680e89989a8142707de8103f15d182445a533c1047fd9b7e8c5459101e9b90a"}, + {file = "types_Deprecated-1.2.9.20240311-py3-none-any.whl", hash = "sha256:d7793aaf32ff8f7e49a8ac781de4872248e0694c4b75a7a8a186c51167463f9d"}, ] [[package]] From 602d668ef6f99d60a6322d78a8534a3b20a9424b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 13:58:39 +0100 Subject: [PATCH 150/685] build(deps-dev): bump types-python-dateutil from 2.8.19.20240106 to 2.8.19.20240311 (#1021) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index db0f51c766..7af6d53177 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1541,13 +1541,13 @@ files = [ [[package]] name = "types-python-dateutil" -version = "2.8.19.20240106" +version = "2.8.19.20240311" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.8.19.20240106.tar.gz", hash = "sha256:1f8db221c3b98e6ca02ea83a58371b22c374f42ae5bbdf186db9c9a76581459f"}, - {file = "types_python_dateutil-2.8.19.20240106-py3-none-any.whl", hash = "sha256:efbbdc54590d0f16152fa103c9879c7d4a00e82078f6e2cf01769042165acaa2"}, + {file = "types-python-dateutil-2.8.19.20240311.tar.gz", hash = "sha256:51178227bbd4cbec35dc9adffbf59d832f20e09842d7dcb8c73b169b8780b7cb"}, + {file = "types_python_dateutil-2.8.19.20240311-py3-none-any.whl", hash = "sha256:ef813da0809aca76472ca88807addbeea98b19339aebe56159ae2f4b4f70857a"}, ] [[package]] From cbcfa7f7332533c4be12820c64dcc3d663758150 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 13:59:06 +0100 Subject: [PATCH 151/685] build(deps-dev): bump types-pyyaml from 6.0.12.12 to 6.0.12.20240311 (#1020) --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7af6d53177..f40bf129ea 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1552,13 +1552,13 @@ files = [ [[package]] name = "types-pyyaml" -version = "6.0.12.12" +version = "6.0.12.20240311" description = "Typing stubs for PyYAML" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "types-PyYAML-6.0.12.12.tar.gz", hash = "sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062"}, - {file = "types_PyYAML-6.0.12.12-py3-none-any.whl", hash = "sha256:c05bc6c158facb0676674b7f11fe3960db4f389718e19e62bd2b84d6205cfd24"}, + {file = "types-PyYAML-6.0.12.20240311.tar.gz", hash = "sha256:a9e0f0f88dc835739b0c1ca51ee90d04ca2a897a71af79de9aec5f38cb0a5342"}, + {file = "types_PyYAML-6.0.12.20240311-py3-none-any.whl", hash = "sha256:b845b06a1c7e54b8e5b4c683043de0d9caf205e7434b3edc678ff2411979b8f6"}, ] [[package]] From 3c9988acebaa8664873004f259614a2690ebc4da Mon Sep 17 00:00:00 2001 From: Santiago Fraire <santiwilly@gmail.com> Date: Thu, 14 Mar 2024 11:11:35 +0100 Subject: [PATCH 152/685] fix(changelog): include latest change when dry run and incremental Closes #1024 --- commitizen/commands/changelog.py | 12 ++++++--- tests/commands/test_bump_command.py | 33 ++++++++++++++++++++++++ tests/commands/test_changelog_command.py | 6 ++++- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 5d710ed5d0..6b7a63ba9e 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -133,10 +133,6 @@ def write_changelog( if changelog_hook: changelog_out = changelog_hook(changelog_out, partial_changelog) - if self.dry_run: - out.write(changelog_out) - raise DryRunExit() - changelog_file.write(changelog_out) def export_template(self): @@ -221,6 +217,14 @@ def __call__(self): ) changelog_out = changelog_out.lstrip("\n") + # Dry_run is executed here to avoid checking and reading the files + if self.dry_run: + changelog_hook: Callable | None = self.cz.changelog_hook + if changelog_hook: + changelog_out = changelog_hook(changelog_out, "") + out.write(changelog_out) + raise DryRunExit() + lines = [] if self.incremental and os.path.isfile(self.file_name): with open(self.file_name, encoding=self.encoding) as changelog_file: diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index c9e73649f4..6cf8a8d00c 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -1406,3 +1406,36 @@ def test_bump_template_extra_quotes( changelog = project_root / any_changelog_format.default_changelog_file assert changelog.read_text() == "no-quote - single quotes - double quotes" + + +def test_bump_changelog_contains_increment_only(mocker, tmp_commitizen_project, capsys): + """Issue 1024""" + # Initialize commitizen up to v1.0.0 + project_root = Path(tmp_commitizen_project) + tmp_commitizen_cfg_file = project_root / "pyproject.toml" + tmp_commitizen_cfg_file.write_text( + "[tool.commitizen]\n" 'version="1.0.0"\n' "update_changelog_on_bump = true\n" + ) + tmp_changelog_file = project_root / "CHANGELOG.md" + tmp_changelog_file.write_text("## v1.0.0") + create_file_and_commit("feat(user): new file") + create_tag("v1.0.0") + + # Add a commit and bump to v2.0.0 + create_file_and_commit("feat(user)!: new file") + testargs = ["cz", "bump", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + _ = capsys.readouterr() + + # Add a commit and create the incremental changelog to v3.0.0 + # it should only include v3 changes + create_file_and_commit("feat(next)!: next version") + testargs = ["cz", "bump", "--yes", "--files-only", "--changelog-to-stdout"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(ExpectedExit): + cli.main() + out, _ = capsys.readouterr() + + assert "3.0.0" in out + assert "2.0.0" not in out diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index 971d04cce5..c8072831e8 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -294,11 +294,15 @@ def test_changelog_hook(mocker: MockFixture, config: BaseConfig, dry_run: bool): changelog() except DryRunExit: pass + full_changelog = ( "## Unreleased\n\n### Refactor\n\n- is in changelog\n\n### Feat\n\n- new file\n" ) + partial_changelog = full_changelog + if dry_run: + partial_changelog = "" - changelog_hook_mock.assert_called_with(full_changelog, full_changelog) + changelog_hook_mock.assert_called_with(full_changelog, partial_changelog) @pytest.mark.usefixtures("tmp_commitizen_project") From 94f07adcfbc8aac7b85438358e0444aad3660e09 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Thu, 14 Mar 2024 18:37:49 +0000 Subject: [PATCH 153/685] =?UTF-8?q?bump:=20version=203.18.3=20=E2=86=92=20?= =?UTF-8?q?3.18.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c47d83a992..74d6c53d56 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.18.3 # automatically updated by Commitizen + rev: v3.18.4 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index e0c221824f..2cfbeb556a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.18.4 (2024-03-14) + +### Fix + +- **changelog**: include latest change when dry run and incremental + ## v3.18.3 (2024-03-11) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index c3689ecdcd..e3c8f4ce80 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.18.3" +__version__ = "3.18.4" diff --git a/pyproject.toml b/pyproject.toml index 58886b920e..8f0995e1e1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.18.3" +version = "3.18.4" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.18.3" +version = "3.18.4" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 90d9dadf20e59d58c42f371442e30c57dc8517ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 01:20:53 +0000 Subject: [PATCH 154/685] build(deps-dev): bump ruff from 0.3.2 to 0.3.3 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.3.2 to 0.3.3. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.3.2...v0.3.3) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index f40bf129ea..82ebb56a61 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1407,28 +1407,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.3.2" +version = "0.3.3" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.3.2-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:77f2612752e25f730da7421ca5e3147b213dca4f9a0f7e0b534e9562c5441f01"}, - {file = "ruff-0.3.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9966b964b2dd1107797be9ca7195002b874424d1d5472097701ae8f43eadef5d"}, - {file = "ruff-0.3.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b83d17ff166aa0659d1e1deaf9f2f14cbe387293a906de09bc4860717eb2e2da"}, - {file = "ruff-0.3.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb875c6cc87b3703aeda85f01c9aebdce3d217aeaca3c2e52e38077383f7268a"}, - {file = "ruff-0.3.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be75e468a6a86426430373d81c041b7605137a28f7014a72d2fc749e47f572aa"}, - {file = "ruff-0.3.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:967978ac2d4506255e2f52afe70dda023fc602b283e97685c8447d036863a302"}, - {file = "ruff-0.3.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1231eacd4510f73222940727ac927bc5d07667a86b0cbe822024dd00343e77e9"}, - {file = "ruff-0.3.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c6d613b19e9a8021be2ee1d0e27710208d1603b56f47203d0abbde906929a9b"}, - {file = "ruff-0.3.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8439338a6303585d27b66b4626cbde89bb3e50fa3cae86ce52c1db7449330a7"}, - {file = "ruff-0.3.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:de8b480d8379620cbb5ea466a9e53bb467d2fb07c7eca54a4aa8576483c35d36"}, - {file = "ruff-0.3.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b74c3de9103bd35df2bb05d8b2899bf2dbe4efda6474ea9681280648ec4d237d"}, - {file = "ruff-0.3.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f380be9fc15a99765c9cf316b40b9da1f6ad2ab9639e551703e581a5e6da6745"}, - {file = "ruff-0.3.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:0ac06a3759c3ab9ef86bbeca665d31ad3aa9a4b1c17684aadb7e61c10baa0df4"}, - {file = "ruff-0.3.2-py3-none-win32.whl", hash = "sha256:9bd640a8f7dd07a0b6901fcebccedadeb1a705a50350fb86b4003b805c81385a"}, - {file = "ruff-0.3.2-py3-none-win_amd64.whl", hash = "sha256:0c1bdd9920cab5707c26c8b3bf33a064a4ca7842d91a99ec0634fec68f9f4037"}, - {file = "ruff-0.3.2-py3-none-win_arm64.whl", hash = "sha256:5f65103b1d76e0d600cabd577b04179ff592064eaa451a70a81085930e907d0b"}, - {file = "ruff-0.3.2.tar.gz", hash = "sha256:fa78ec9418eb1ca3db392811df3376b46471ae93792a81af2d1cbb0e5dcb5142"}, + {file = "ruff-0.3.3-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:973a0e388b7bc2e9148c7f9be8b8c6ae7471b9be37e1cc732f8f44a6f6d7720d"}, + {file = "ruff-0.3.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfa60d23269d6e2031129b053fdb4e5a7b0637fc6c9c0586737b962b2f834493"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eca7ff7a47043cf6ce5c7f45f603b09121a7cc047447744b029d1b719278eb5"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7d3f6762217c1da954de24b4a1a70515630d29f71e268ec5000afe81377642d"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b24c19e8598916d9c6f5a5437671f55ee93c212a2c4c569605dc3842b6820386"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5a6cbf216b69c7090f0fe4669501a27326c34e119068c1494f35aaf4cc683778"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352e95ead6964974b234e16ba8a66dad102ec7bf8ac064a23f95371d8b198aab"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d6ab88c81c4040a817aa432484e838aaddf8bfd7ca70e4e615482757acb64f8"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79bca3a03a759cc773fca69e0bdeac8abd1c13c31b798d5bb3c9da4a03144a9f"}, + {file = "ruff-0.3.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2700a804d5336bcffe063fd789ca2c7b02b552d2e323a336700abb8ae9e6a3f8"}, + {file = "ruff-0.3.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fd66469f1a18fdb9d32e22b79f486223052ddf057dc56dea0caaf1a47bdfaf4e"}, + {file = "ruff-0.3.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:45817af234605525cdf6317005923bf532514e1ea3d9270acf61ca2440691376"}, + {file = "ruff-0.3.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:0da458989ce0159555ef224d5b7c24d3d2e4bf4c300b85467b08c3261c6bc6a8"}, + {file = "ruff-0.3.3-py3-none-win32.whl", hash = "sha256:f2831ec6a580a97f1ea82ea1eda0401c3cdf512cf2045fa3c85e8ef109e87de0"}, + {file = "ruff-0.3.3-py3-none-win_amd64.whl", hash = "sha256:be90bcae57c24d9f9d023b12d627e958eb55f595428bafcb7fec0791ad25ddfc"}, + {file = "ruff-0.3.3-py3-none-win_arm64.whl", hash = "sha256:0171aab5fecdc54383993389710a3d1227f2da124d76a2784a7098e818f92d61"}, + {file = "ruff-0.3.3.tar.gz", hash = "sha256:38671be06f57a2f8aba957d9f701ea889aa5736be806f18c0cd03d6ff0cbca8d"}, ] [[package]] From 7d7fc3a18104880358871e11de0acfe31d28e7ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 11:40:46 +0100 Subject: [PATCH 155/685] build(deps-dev): bump mkdocs-material from 9.5.13 to 9.5.14 (#1031) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 82ebb56a61..e1348cd972 100644 --- a/poetry.lock +++ b/poetry.lock @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.13" +version = "9.5.14" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.13-py3-none-any.whl", hash = "sha256:5cbe17fee4e3b4980c8420a04cc762d8dc052ef1e10532abd4fce88e5ea9ce6a"}, - {file = "mkdocs_material-9.5.13.tar.gz", hash = "sha256:d8e4caae576312a88fd2609b81cf43d233cdbe36860d67a68702b018b425bd87"}, + {file = "mkdocs_material-9.5.14-py3-none-any.whl", hash = "sha256:a45244ac221fda46ecf8337f00ec0e5cb5348ab9ffb203ca2a0c313b0d4dbc27"}, + {file = "mkdocs_material-9.5.14.tar.gz", hash = "sha256:2a1f8e67cda2587ab93ecea9ba42d0ca61d1d7b5fad8cf690eeaeb39dcd4b9af"}, ] [package.dependencies] From e392672725ba6f74312c64dce563d39ccac71aec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 11:41:07 +0100 Subject: [PATCH 156/685] build(deps-dev): bump black from 24.2.0 to 24.3.0 (#1030) --- poetry.lock | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/poetry.lock b/poetry.lock index e1348cd972..704ef0dd63 100644 --- a/poetry.lock +++ b/poetry.lock @@ -73,33 +73,33 @@ files = [ [[package]] name = "black" -version = "24.2.0" +version = "24.3.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-24.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6981eae48b3b33399c8757036c7f5d48a535b962a7c2310d19361edeef64ce29"}, - {file = "black-24.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d533d5e3259720fdbc1b37444491b024003e012c5173f7d06825a77508085430"}, - {file = "black-24.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61a0391772490ddfb8a693c067df1ef5227257e72b0e4108482b8d41b5aee13f"}, - {file = "black-24.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:992e451b04667116680cb88f63449267c13e1ad134f30087dec8527242e9862a"}, - {file = "black-24.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:163baf4ef40e6897a2a9b83890e59141cc8c2a98f2dda5080dc15c00ee1e62cd"}, - {file = "black-24.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e37c99f89929af50ffaf912454b3e3b47fd64109659026b678c091a4cd450fb2"}, - {file = "black-24.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9de21bafcba9683853f6c96c2d515e364aee631b178eaa5145fc1c61a3cc92"}, - {file = "black-24.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:9db528bccb9e8e20c08e716b3b09c6bdd64da0dd129b11e160bf082d4642ac23"}, - {file = "black-24.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d84f29eb3ee44859052073b7636533ec995bd0f64e2fb43aeceefc70090e752b"}, - {file = "black-24.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e08fb9a15c914b81dd734ddd7fb10513016e5ce7e6704bdd5e1251ceee51ac9"}, - {file = "black-24.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:810d445ae6069ce64030c78ff6127cd9cd178a9ac3361435708b907d8a04c693"}, - {file = "black-24.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:ba15742a13de85e9b8f3239c8f807723991fbfae24bad92d34a2b12e81904982"}, - {file = "black-24.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7e53a8c630f71db01b28cd9602a1ada68c937cbf2c333e6ed041390d6968faf4"}, - {file = "black-24.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:93601c2deb321b4bad8f95df408e3fb3943d85012dddb6121336b8e24a0d1218"}, - {file = "black-24.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0057f800de6acc4407fe75bb147b0c2b5cbb7c3ed110d3e5999cd01184d53b0"}, - {file = "black-24.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:faf2ee02e6612577ba0181f4347bcbcf591eb122f7841ae5ba233d12c39dcb4d"}, - {file = "black-24.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:057c3dc602eaa6fdc451069bd027a1b2635028b575a6c3acfd63193ced20d9c8"}, - {file = "black-24.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:08654d0797e65f2423f850fc8e16a0ce50925f9337fb4a4a176a7aa4026e63f8"}, - {file = "black-24.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca610d29415ee1a30a3f30fab7a8f4144e9d34c89a235d81292a1edb2b55f540"}, - {file = "black-24.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:4dd76e9468d5536abd40ffbc7a247f83b2324f0c050556d9c371c2b9a9a95e31"}, - {file = "black-24.2.0-py3-none-any.whl", hash = "sha256:e8a6ae970537e67830776488bca52000eaa37fa63b9988e8c487458d9cd5ace6"}, - {file = "black-24.2.0.tar.gz", hash = "sha256:bce4f25c27c3435e4dace4815bcb2008b87e167e3bf4ee47ccdc5ce906eb4894"}, + {file = "black-24.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395"}, + {file = "black-24.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995"}, + {file = "black-24.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7"}, + {file = "black-24.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0"}, + {file = "black-24.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9"}, + {file = "black-24.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597"}, + {file = "black-24.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d"}, + {file = "black-24.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5"}, + {file = "black-24.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f"}, + {file = "black-24.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11"}, + {file = "black-24.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4"}, + {file = "black-24.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5"}, + {file = "black-24.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837"}, + {file = "black-24.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd"}, + {file = "black-24.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213"}, + {file = "black-24.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959"}, + {file = "black-24.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb"}, + {file = "black-24.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7"}, + {file = "black-24.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7"}, + {file = "black-24.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f"}, + {file = "black-24.3.0-py3-none-any.whl", hash = "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93"}, + {file = "black-24.3.0.tar.gz", hash = "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f"}, ] [package.dependencies] From 5d64224c2741970995aa960b0b9144ab3158591b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 11:41:27 +0100 Subject: [PATCH 157/685] build(deps-dev): bump types-python-dateutil from 2.8.19.20240311 to 2.9.0.20240316 (#1029) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 704ef0dd63..4f0fbb5deb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1541,13 +1541,13 @@ files = [ [[package]] name = "types-python-dateutil" -version = "2.8.19.20240311" +version = "2.9.0.20240316" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.8.19.20240311.tar.gz", hash = "sha256:51178227bbd4cbec35dc9adffbf59d832f20e09842d7dcb8c73b169b8780b7cb"}, - {file = "types_python_dateutil-2.8.19.20240311-py3-none-any.whl", hash = "sha256:ef813da0809aca76472ca88807addbeea98b19339aebe56159ae2f4b4f70857a"}, + {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, + {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, ] [[package]] From f72828a0a1451035ef5ffdb61bed47a081014763 Mon Sep 17 00:00:00 2001 From: Axel H <noirbizarre@users.noreply.github.com> Date: Tue, 19 Mar 2024 11:42:16 +0100 Subject: [PATCH 158/685] feat(changelog): adds a `changelog_release_hook` called for each release in the changelog (#1018) --- commitizen/changelog.py | 16 ++++++++++++++-- commitizen/commands/changelog.py | 6 +++++- commitizen/cz/base.py | 9 +++++++++ docs/customization.md | 5 +++++ tests/commands/test_changelog_command.py | 22 ++++++++++++++++++++++ tests/test_changelog.py | 21 +++++++++++++++++++++ 6 files changed, 76 insertions(+), 3 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index 5c713af0e6..7caa64c640 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -43,6 +43,7 @@ from commitizen import out from commitizen.bump import normalize_tag +from commitizen.cz.base import ChangelogReleaseHook from commitizen.exceptions import InvalidConfigurationError, NoCommitsFoundError from commitizen.git import GitCommit, GitTag from commitizen.version_schemes import ( @@ -113,6 +114,7 @@ def generate_tree_from_commits( unreleased_version: str | None = None, change_type_map: dict[str, str] | None = None, changelog_message_builder_hook: MessageBuilderHook | None = None, + changelog_release_hook: ChangelogReleaseHook | None = None, merge_prerelease: bool = False, scheme: VersionScheme = DEFAULT_SCHEME, ) -> Iterable[dict]: @@ -143,11 +145,14 @@ def generate_tree_from_commits( commit_tag, used_tags, merge_prerelease, scheme=scheme ): used_tags.append(commit_tag) - yield { + release = { "version": current_tag_name, "date": current_tag_date, "changes": changes, } + if changelog_release_hook: + release = changelog_release_hook(release, commit_tag) + yield release current_tag_name = commit_tag.name current_tag_date = commit_tag.date changes = defaultdict(list) @@ -178,7 +183,14 @@ def generate_tree_from_commits( change_type_map, ) - yield {"version": current_tag_name, "date": current_tag_date, "changes": changes} + release = { + "version": current_tag_name, + "date": current_tag_date, + "changes": changes, + } + if changelog_release_hook: + release = changelog_release_hook(release, commit_tag) + yield release def process_commit_message( diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 6b7a63ba9e..3fc204eba9 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -9,7 +9,7 @@ from commitizen import bump, changelog, defaults, factory, git, out from commitizen.config import BaseConfig -from commitizen.cz.base import MessageBuilderHook +from commitizen.cz.base import MessageBuilderHook, ChangelogReleaseHook from commitizen.exceptions import ( DryRunExit, NoCommitsFoundError, @@ -150,6 +150,9 @@ def __call__(self): changelog_message_builder_hook: MessageBuilderHook | None = ( self.cz.changelog_message_builder_hook ) + changelog_release_hook: ChangelogReleaseHook | None = ( + self.cz.changelog_release_hook + ) merge_prerelease = self.merge_prerelease if self.export_template_to: @@ -203,6 +206,7 @@ def __call__(self): unreleased_version, change_type_map=change_type_map, changelog_message_builder_hook=changelog_message_builder_hook, + changelog_release_hook=changelog_release_hook, merge_prerelease=merge_prerelease, scheme=self.scheme, ) diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index 5a84d1f101..bd116ceb02 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -17,6 +17,12 @@ def __call__( ) -> dict[str, Any] | Iterable[dict[str, Any]] | None: ... +class ChangelogReleaseHook(Protocol): + def __call__( + self, release: dict[str, Any], tag: git.GitTag | None + ) -> dict[str, Any]: ... + + class BaseCommitizen(metaclass=ABCMeta): bump_pattern: str | None = None bump_map: dict[str, str] | None = None @@ -48,6 +54,9 @@ class BaseCommitizen(metaclass=ABCMeta): # Executed only at the end of the changelog generation changelog_hook: Callable[[str, str | None], str] | None = None + # Executed for each release in the changelog + changelog_release_hook: ChangelogReleaseHook | None = None + # Plugins can override templates and provide extra template data template_loader: BaseLoader = PackageLoader("commitizen", "templates") template_extras: dict[str, Any] = {} diff --git a/docs/customization.md b/docs/customization.md index 7d352f0313..24f749a1eb 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -320,6 +320,7 @@ You can customize it of course, and this are the variables you need to add to yo | `change_type_map` | `dict` | NO | Convert the title of the change type that will appear in the changelog, if a value is not found, the original will be provided | | `changelog_message_builder_hook` | `method: (dict, git.GitCommit) -> dict | list | None` | NO | Customize with extra information your message output, like adding links, this function is executed per parsed commit. Each GitCommit contains the following attrs: `rev`, `title`, `body`, `author`, `author_email`. Returning a falsy value ignore the commit. | | `changelog_hook` | `method: (full_changelog: str, partial_changelog: Optional[str]) -> str` | NO | Receives the whole and partial (if used incremental) changelog. Useful to send slack messages or notify a compliance department. Must return the full_changelog | +| `changelog_release_hook` | `method: (release: dict, tag: git.GitTag) -> dict` | NO | Receives each generated changelog release and its associated tag. Useful to enrich a releases before they are rendered. Must return the update release ```python from commitizen.cz.base import BaseCommitizen @@ -347,6 +348,10 @@ class StrangeCommitizen(BaseCommitizen): ] = f"{m} {rev} [{commit.author}]({commit.author_email})" return parsed_message + def changelog_release_hook(self, release: dict, tag: git.GitTag) -> dict: + release["author"] = tag.author + return release + def changelog_hook( self, full_changelog: str, partial_changelog: Optional[str] ) -> str: diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index c8072831e8..4596724158 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -327,6 +327,28 @@ def test_changelog_hook_customize(mocker: MockFixture, config_customize): changelog_hook_mock.assert_called_with(full_changelog, full_changelog) +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_changelog_release_hook(mocker: MockFixture, config): + def changelog_release_hook(release: dict, tag: git.GitTag) -> dict: + return release + + for i in range(3): + create_file_and_commit("feat: new file") + create_file_and_commit("refactor: is in changelog") + create_file_and_commit("Merge into master") + git.tag(f"0.{i + 1}.0") + + # changelog = Changelog(config, {}) + changelog = Changelog( + config, {"unreleased_version": None, "incremental": True, "dry_run": False} + ) + mocker.patch.object(changelog.cz, "changelog_release_hook", changelog_release_hook) + spy = mocker.spy(changelog.cz, "changelog_release_hook") + changelog() + + assert spy.call_count == 3 + + @pytest.mark.usefixtures("tmp_commitizen_project") def test_changelog_with_non_linear_merges_commit_order( mocker: MockFixture, config_customize diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 7944f66dd8..831e013e3c 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1,6 +1,7 @@ import re from pathlib import Path +from typing import Optional import pytest from jinja2 import FileSystemLoader @@ -1404,6 +1405,26 @@ def changelog_message_builder_hook(message: dict, commit: git.GitCommit): ), f"Line {no}: type {change_type} should have been overridden" +def test_render_changelog_with_changelog_release_hook( + gitcommits, tags, any_changelog_format: ChangelogFormat +): + def changelog_release_hook(release: dict, tag: Optional[git.GitTag]) -> dict: + release["extra"] = "whatever" + return release + + parser = ConventionalCommitsCz.commit_parser + changelog_pattern = ConventionalCommitsCz.changelog_pattern + tree = changelog.generate_tree_from_commits( + gitcommits, + tags, + parser, + changelog_pattern, + changelog_release_hook=changelog_release_hook, + ) + for release in tree: + assert release["extra"] == "whatever" + + def test_get_smart_tag_range_returns_an_extra_for_a_range(tags): start, end = ( tags[0], From c8a9008df7540dd527b3a81787e4d7aa2cf1fdea Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 10:42:39 +0000 Subject: [PATCH 159/685] =?UTF-8?q?bump:=20version=203.18.4=20=E2=86=92=20?= =?UTF-8?q?3.19.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 74d6c53d56..6adebbedd0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.18.4 # automatically updated by Commitizen + rev: v3.19.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 2cfbeb556a..3e90176111 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.19.0 (2024-03-19) + +### Feat + +- **changelog**: adds a `changelog_release_hook` called for each release in the changelog (#1018) + ## v3.18.4 (2024-03-14) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index e3c8f4ce80..0e6cf3e2e7 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.18.4" +__version__ = "3.19.0" diff --git a/pyproject.toml b/pyproject.toml index 8f0995e1e1..4ac781df3f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.18.4" +version = "3.19.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.18.4" +version = "3.19.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From bbae8e0880f0aa6359e2781a54e0bb56248c3049 Mon Sep 17 00:00:00 2001 From: Axel H <noirbizarre@users.noreply.github.com> Date: Tue, 19 Mar 2024 11:49:41 +0100 Subject: [PATCH 160/685] feat(changelog): expose commits `sha1`, `author` and `author_email` in changelog tree (fix #987) (#1013) --- commitizen/changelog.py | 7 ++++++- docs/customization.md | 3 +++ tests/test_changelog.py | 22 ++++++++++++++++++---- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index 7caa64c640..12d52f7b08 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -200,7 +200,12 @@ def process_commit_message( changes: dict[str | None, list], change_type_map: dict[str, str] | None = None, ): - message: dict = parsed.groupdict() + message: dict = { + "sha1": commit.rev, + "author": commit.author, + "author_email": commit.author_email, + **parsed.groupdict(), + } if processed := hook(message, commit) if hook else message: messages = [processed] if isinstance(processed, dict) else processed diff --git a/docs/customization.md b/docs/customization.md index 24f749a1eb..1fd1826e03 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -505,6 +505,9 @@ Each `Change` has the following fields: | ---- | ---- | ----------- | | scope | `str | None` | An optional scope | | message | `str` | The commit message body | +| sha1 | `str` | The commit `sha1` | +| author | `str` | The commit author name | +| author_email | `str` | The commit author email | !!! Note The field values depend on the customization class and/or the settings you provide diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 831e013e3c..9ccc207936 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1084,10 +1084,24 @@ def test_generate_tree_from_commits(gitcommits, tags, merge_prereleases): tree = changelog.generate_tree_from_commits( gitcommits, tags, parser, changelog_pattern, merge_prerelease=merge_prereleases ) - if merge_prereleases: - assert tuple(tree) == COMMITS_TREE_AFTER_MERGED_PRERELEASES - else: - assert tuple(tree) == COMMITS_TREE + expected = ( + COMMITS_TREE_AFTER_MERGED_PRERELEASES if merge_prereleases else COMMITS_TREE + ) + + for release, expected_release in zip(tree, expected): + assert release["version"] == expected_release["version"] + assert release["date"] == expected_release["date"] + assert release["changes"].keys() == expected_release["changes"].keys() + for change_type in release["changes"]: + changes = release["changes"][change_type] + expected_changes = expected_release["changes"][change_type] + for change, expected_change in zip(changes, expected_changes): + assert change["scope"] == expected_change["scope"] + assert change["breaking"] == expected_change["breaking"] + assert change["message"] == expected_change["message"] + assert change["author"] == "Commitizen" + assert change["author_email"] in "author@cz.dev" + assert "sha1" in change def test_generate_tree_from_commits_with_no_commits(tags): From 91753282436eda42fe95b73eee0c2931b1858f43 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 10:50:09 +0000 Subject: [PATCH 161/685] =?UTF-8?q?bump:=20version=203.19.0=20=E2=86=92=20?= =?UTF-8?q?3.20.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6adebbedd0..fb3881cc7a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.19.0 # automatically updated by Commitizen + rev: v3.20.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e90176111..38f588354c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.20.0 (2024-03-19) + +### Feat + +- **changelog**: expose commits `sha1`, `author` and `author_email` in changelog tree (fix #987) (#1013) + ## v3.19.0 (2024-03-19) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 0e6cf3e2e7..10c5c0dd1b 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.19.0" +__version__ = "3.20.0" diff --git a/pyproject.toml b/pyproject.toml index 4ac781df3f..30d548890a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.19.0" +version = "3.20.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.19.0" +version = "3.20.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From f485108485ed61b49df02779f741000159ba32ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Mar 2024 01:09:08 +0000 Subject: [PATCH 162/685] build(deps): bump importlib-metadata from 7.0.2 to 7.1.0 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 7.0.2 to 7.1.0. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v7.0.2...v7.1.0) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4f0fbb5deb..923d0ba013 100644 --- a/poetry.lock +++ b/poetry.lock @@ -496,13 +496,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.0.2" +version = "7.1.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.0.2-py3-none-any.whl", hash = "sha256:f4bc4c0c070c490abf4ce96d715f68e95923320370efb66143df00199bb6c100"}, - {file = "importlib_metadata-7.0.2.tar.gz", hash = "sha256:198f568f3230878cb1b44fbd7975f87906c22336dba2e4a7f05278c281fbd792"}, + {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, + {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, ] [package.dependencies] @@ -511,7 +511,7 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "iniconfig" From 49dc1bec07019e7721652f9b17d9652ecd196956 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Mar 2024 01:32:38 +0000 Subject: [PATCH 163/685] build(deps-dev): bump pytest-mock from 3.12.0 to 3.14.0 Bumps [pytest-mock](https://github.com/pytest-dev/pytest-mock) from 3.12.0 to 3.14.0. - [Release notes](https://github.com/pytest-dev/pytest-mock/releases) - [Changelog](https://github.com/pytest-dev/pytest-mock/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-mock/compare/v3.12.0...v3.14.0) --- updated-dependencies: - dependency-name: pytest-mock dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 923d0ba013..d91e6a7d02 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1117,17 +1117,17 @@ pytest = ">=3.6" [[package]] name = "pytest-mock" -version = "3.12.0" +version = "3.14.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-mock-3.12.0.tar.gz", hash = "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9"}, - {file = "pytest_mock-3.12.0-py3-none-any.whl", hash = "sha256:0972719a7263072da3a21c7f4773069bcc7486027d7e8e1f81d98a47e701bc4f"}, + {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, + {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, ] [package.dependencies] -pytest = ">=5.0" +pytest = ">=6.2.5" [package.extras] dev = ["pre-commit", "pytest-asyncio", "tox"] From 00daf2ae360e3332b68e11783d2d08a53a547f90 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Mar 2024 01:33:20 +0000 Subject: [PATCH 164/685] build(deps-dev): bump ruff from 0.3.3 to 0.3.4 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.3.3 to 0.3.4. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.3.3...v0.3.4) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index d91e6a7d02..d208512744 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1407,28 +1407,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.3.3" +version = "0.3.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.3.3-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:973a0e388b7bc2e9148c7f9be8b8c6ae7471b9be37e1cc732f8f44a6f6d7720d"}, - {file = "ruff-0.3.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfa60d23269d6e2031129b053fdb4e5a7b0637fc6c9c0586737b962b2f834493"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eca7ff7a47043cf6ce5c7f45f603b09121a7cc047447744b029d1b719278eb5"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7d3f6762217c1da954de24b4a1a70515630d29f71e268ec5000afe81377642d"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b24c19e8598916d9c6f5a5437671f55ee93c212a2c4c569605dc3842b6820386"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5a6cbf216b69c7090f0fe4669501a27326c34e119068c1494f35aaf4cc683778"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352e95ead6964974b234e16ba8a66dad102ec7bf8ac064a23f95371d8b198aab"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d6ab88c81c4040a817aa432484e838aaddf8bfd7ca70e4e615482757acb64f8"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79bca3a03a759cc773fca69e0bdeac8abd1c13c31b798d5bb3c9da4a03144a9f"}, - {file = "ruff-0.3.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2700a804d5336bcffe063fd789ca2c7b02b552d2e323a336700abb8ae9e6a3f8"}, - {file = "ruff-0.3.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fd66469f1a18fdb9d32e22b79f486223052ddf057dc56dea0caaf1a47bdfaf4e"}, - {file = "ruff-0.3.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:45817af234605525cdf6317005923bf532514e1ea3d9270acf61ca2440691376"}, - {file = "ruff-0.3.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:0da458989ce0159555ef224d5b7c24d3d2e4bf4c300b85467b08c3261c6bc6a8"}, - {file = "ruff-0.3.3-py3-none-win32.whl", hash = "sha256:f2831ec6a580a97f1ea82ea1eda0401c3cdf512cf2045fa3c85e8ef109e87de0"}, - {file = "ruff-0.3.3-py3-none-win_amd64.whl", hash = "sha256:be90bcae57c24d9f9d023b12d627e958eb55f595428bafcb7fec0791ad25ddfc"}, - {file = "ruff-0.3.3-py3-none-win_arm64.whl", hash = "sha256:0171aab5fecdc54383993389710a3d1227f2da124d76a2784a7098e818f92d61"}, - {file = "ruff-0.3.3.tar.gz", hash = "sha256:38671be06f57a2f8aba957d9f701ea889aa5736be806f18c0cd03d6ff0cbca8d"}, + {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:60c870a7d46efcbc8385d27ec07fe534ac32f3b251e4fc44b3cbfd9e09609ef4"}, + {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6fc14fa742e1d8f24910e1fff0bd5e26d395b0e0e04cc1b15c7c5e5fe5b4af91"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3ee7880f653cc03749a3bfea720cf2a192e4f884925b0cf7eecce82f0ce5854"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf133dd744f2470b347f602452a88e70dadfbe0fcfb5fd46e093d55da65f82f7"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f3860057590e810c7ffea75669bdc6927bfd91e29b4baa9258fd48b540a4365"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:986f2377f7cf12efac1f515fc1a5b753c000ed1e0a6de96747cdf2da20a1b369"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fd98e85869603e65f554fdc5cddf0712e352fe6e61d29d5a6fe087ec82b76c"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64abeed785dad51801b423fa51840b1764b35d6c461ea8caef9cf9e5e5ab34d9"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df52972138318bc7546d92348a1ee58449bc3f9eaf0db278906eb511889c4b50"}, + {file = "ruff-0.3.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:98e98300056445ba2cc27d0b325fd044dc17fcc38e4e4d2c7711585bd0a958ed"}, + {file = "ruff-0.3.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:519cf6a0ebed244dce1dc8aecd3dc99add7a2ee15bb68cf19588bb5bf58e0488"}, + {file = "ruff-0.3.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:bb0acfb921030d00070539c038cd24bb1df73a2981e9f55942514af8b17be94e"}, + {file = "ruff-0.3.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:cf187a7e7098233d0d0c71175375c5162f880126c4c716fa28a8ac418dcf3378"}, + {file = "ruff-0.3.4-py3-none-win32.whl", hash = "sha256:af27ac187c0a331e8ef91d84bf1c3c6a5dea97e912a7560ac0cef25c526a4102"}, + {file = "ruff-0.3.4-py3-none-win_amd64.whl", hash = "sha256:de0d5069b165e5a32b3c6ffbb81c350b1e3d3483347196ffdf86dc0ef9e37dd6"}, + {file = "ruff-0.3.4-py3-none-win_arm64.whl", hash = "sha256:6810563cc08ad0096b57c717bd78aeac888a1bfd38654d9113cb3dc4d3f74232"}, + {file = "ruff-0.3.4.tar.gz", hash = "sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1"}, ] [[package]] From d34b94686815c74ed8df55b7f14f1566c3101101 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Mar 2024 01:48:47 +0000 Subject: [PATCH 165/685] build(deps-dev): bump mkdocs-material from 9.5.14 to 9.5.15 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.14 to 9.5.15. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.14...9.5.15) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index d208512744..961540443e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.14" +version = "9.5.15" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.14-py3-none-any.whl", hash = "sha256:a45244ac221fda46ecf8337f00ec0e5cb5348ab9ffb203ca2a0c313b0d4dbc27"}, - {file = "mkdocs_material-9.5.14.tar.gz", hash = "sha256:2a1f8e67cda2587ab93ecea9ba42d0ca61d1d7b5fad8cf690eeaeb39dcd4b9af"}, + {file = "mkdocs_material-9.5.15-py3-none-any.whl", hash = "sha256:e5c96dec3d19491de49ca643fc1dbb92b278e43cdb816c775bc47db77d9b62fb"}, + {file = "mkdocs_material-9.5.15.tar.gz", hash = "sha256:39f03cca45e82bf54eb7456b5a18bd252eabfdd67f237a229471484a0a4d4635"}, ] [package.dependencies] From 8daca3faf836e49ffd65da93e0b7c87e101f5071 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Mar 2024 01:46:39 +0000 Subject: [PATCH 166/685] build(deps-dev): bump pytest-cov from 4.1.0 to 5.0.0 Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 4.1.0 to 5.0.0. - [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-cov/compare/v4.1.0...v5.0.0) --- updated-dependencies: - dependency-name: pytest-cov dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 12 ++++++------ pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/poetry.lock b/poetry.lock index 961540443e..2d49e41b5a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1070,13 +1070,13 @@ testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygm [[package]] name = "pytest-cov" -version = "4.1.0" +version = "5.0.0" description = "Pytest plugin for measuring coverage." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, - {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, + {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, + {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, ] [package.dependencies] @@ -1084,7 +1084,7 @@ coverage = {version = ">=5.2.1", extras = ["toml"]} pytest = ">=4.6" [package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] [[package]] name = "pytest-datadir" @@ -1766,4 +1766,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "e30411f9893b8c5788c5665a2a888596bcc1c170ac3681f868822e69a4ae1f46" +content-hash = "614f9b1db867d5b7f954c318309b0e7b18951ed7be6d8016af79a08b8c2c7a89" diff --git a/pyproject.toml b/pyproject.toml index 30d548890a..82f415ff34 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,7 +54,7 @@ importlib_metadata = { version = ">=4.13,<8"} ipython = "^8.0" # test pytest = ">=7.2,<9.0" -pytest-cov = "^4.0" +pytest-cov = ">=4,<6" pytest-mock = "^3.10" pytest-regressions = "^2.4.0" pytest-freezer = "^0.4.6" From 3212eaa0621dcb7634a0f944eeb7663b136d570c Mon Sep 17 00:00:00 2001 From: crai0 <crai0@posteo.net> Date: Fri, 15 Mar 2024 18:02:26 +0100 Subject: [PATCH 167/685] feat(commit): add retry_after_failure config option and --no-retry flag --- commitizen/cli.py | 6 ++++++ commitizen/commands/commit.py | 19 +++++++++++++++---- commitizen/defaults.py | 2 ++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index c25bd4f713..a442803d7f 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -123,6 +123,12 @@ def __call__( "action": "store_true", "help": "retry last commit", }, + { + "name": ["--no-retry"], + "action": "store_true", + "default": False, + "help": "skip retry if retry_after_failure is set to true", + }, { "name": "--dry-run", "action": "store_true", diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index b8e5eed6d4..390741afc1 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -33,13 +33,16 @@ def __init__(self, config: BaseConfig, arguments: dict): self.arguments = arguments self.temp_file: str = os.path.join( tempfile.gettempdir(), - "cz.commit{user}.backup".format(user=os.environ.get("USER", "")), + "cz.commit%{user}%{project_root}.backup".format( + user=os.environ.get("USER", ""), + project_root=str(git.find_git_project_root()).replace("/", "%"), + ), ) - def read_backup_message(self) -> str: + def read_backup_message(self) -> str | None: # Check the commit backup file exists if not os.path.isfile(self.temp_file): - raise NoCommitBackupError() + return None # Read commit message from backup with open(self.temp_file, encoding=self.encoding) as f: @@ -65,7 +68,7 @@ def prompt_commit_questions(self) -> str: def __call__(self): dry_run: bool = self.arguments.get("dry_run") - write_message_to_file = self.arguments.get("write_message_to_file") + write_message_to_file: bool = self.arguments.get("write_message_to_file") is_all: bool = self.arguments.get("all") if is_all: @@ -78,9 +81,17 @@ def __call__(self): raise NotAllowed(f"{write_message_to_file} is a directory") retry: bool = self.arguments.get("retry") + no_retry: bool = self.arguments.get("no_retry") + retry_after_failure: bool = self.config.settings.get("retry_after_failure") if retry: m = self.read_backup_message() + if m is None: + raise NoCommitBackupError() + elif retry_after_failure and not no_retry: + m = self.read_backup_message() + if m is None: + m = self.prompt_commit_questions() else: m = self.prompt_commit_questions() diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 7aa2c793c5..071efd10b9 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -37,6 +37,7 @@ class Settings(TypedDict, total=False): version_type: str | None tag_format: str bump_message: str | None + retry_after_failure: bool allow_abort: bool allowed_prefixes: list[str] changelog_file: str @@ -77,6 +78,7 @@ class Settings(TypedDict, total=False): "version_scheme": None, "tag_format": "$version", # example v$version "bump_message": None, # bumped v$current_version to $new_version + "retry_after_failure": False, "allow_abort": False, "allowed_prefixes": [ "Merge", From 25320034fadf0bd30b67dedfbe3e07a1c6ef0bf5 Mon Sep 17 00:00:00 2001 From: crai0 <crai0@posteo.net> Date: Fri, 15 Mar 2024 18:50:41 +0100 Subject: [PATCH 168/685] test(commit): add tests for retry_after_failure config option and --no-retry flag --- tests/commands/test_commit_command.py | 63 +++++++++++++++++++++++++++ tests/test_conf.py | 2 + 2 files changed, 65 insertions(+) diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index e3f9989823..545defe0e4 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -94,6 +94,69 @@ def test_commit_retry_works(config, mocker: MockFixture): assert not os.path.isfile(temp_file) +@pytest.mark.usefixtures("staging_is_clean") +def test_commit_retry_after_failure_no_backup(config, mocker: MockFixture): + prompt_mock = mocker.patch("questionary.prompt") + prompt_mock.return_value = { + "prefix": "feat", + "subject": "user created", + "scope": "", + "is_breaking_change": False, + "body": "closes #21", + "footer": "", + } + + commit_mock = mocker.patch("commitizen.git.commit") + commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) + success_mock = mocker.patch("commitizen.out.success") + + config.settings["retry_after_failure"] = True + commands.Commit(config, {})() + + commit_mock.assert_called_with("feat: user created\n\ncloses #21", args="") + prompt_mock.assert_called_once() + success_mock.assert_called_once() + + +@pytest.mark.usefixtures("staging_is_clean") +def test_commit_retry_after_failure_works(config, mocker: MockFixture): + prompt_mock = mocker.patch("questionary.prompt") + prompt_mock.return_value = { + "prefix": "feat", + "subject": "user created", + "scope": "", + "is_breaking_change": False, + "body": "closes #21", + "footer": "", + } + + commit_mock = mocker.patch("commitizen.git.commit") + commit_mock.return_value = cmd.Command("", "error", b"", b"", 9) + error_mock = mocker.patch("commitizen.out.error") + + with pytest.raises(CommitError): + commit_cmd = commands.Commit(config, {}) + temp_file = commit_cmd.temp_file + commit_cmd() + + prompt_mock.assert_called_once() + error_mock.assert_called_once() + assert os.path.isfile(temp_file) + + # Previous commit failed, so retry should pick up the backup commit + # commit_mock = mocker.patch("commitizen.git.commit") + commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) + success_mock = mocker.patch("commitizen.out.success") + + config.settings["retry_after_failure"] = True + commands.Commit(config, {})() + + commit_mock.assert_called_with("feat: user created\n\ncloses #21", args="") + prompt_mock.assert_called_once() + success_mock.assert_called_once() + assert not os.path.isfile(temp_file) + + @pytest.mark.usefixtures("staging_is_clean") def test_commit_command_with_dry_run_option(config, mocker: MockFixture): prompt_mock = mocker = mocker.patch("questionary.prompt") diff --git a/tests/test_conf.py b/tests/test_conf.py index dcac8e015c..a12bcdd35d 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -52,6 +52,7 @@ "version_scheme": None, "tag_format": "$version", "bump_message": None, + "retry_after_failure": False, "allow_abort": False, "allowed_prefixes": ["Merge", "Revert", "Pull request", "fixup!", "squash!"], "version_files": ["commitizen/__version__.py", "pyproject.toml"], @@ -80,6 +81,7 @@ "version_scheme": None, "tag_format": "$version", "bump_message": None, + "retry_after_failure": False, "allow_abort": False, "allowed_prefixes": ["Merge", "Revert", "Pull request", "fixup!", "squash!"], "version_files": ["commitizen/__version__.py", "pyproject.toml"], From f1c1e576fab6b2ab52ce03ad64a0bdda8f14605a Mon Sep 17 00:00:00 2001 From: crai0 <crai0@posteo.net> Date: Fri, 15 Mar 2024 19:02:20 +0100 Subject: [PATCH 169/685] refactor(utils): move backup path creation to utils --- commitizen/commands/commit.py | 9 ++------- commitizen/cz/utils.py | 13 +++++++++++++ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 390741afc1..f2ccc6b1af 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -7,6 +7,7 @@ from commitizen import factory, git, out from commitizen.config import BaseConfig from commitizen.cz.exceptions import CzException +from commitizen.cz.utils import get_backup_file_path from commitizen.exceptions import ( CommitError, CustomError, @@ -31,13 +32,7 @@ def __init__(self, config: BaseConfig, arguments: dict): self.encoding = config.settings["encoding"] self.cz = factory.commiter_factory(self.config) self.arguments = arguments - self.temp_file: str = os.path.join( - tempfile.gettempdir(), - "cz.commit%{user}%{project_root}.backup".format( - user=os.environ.get("USER", ""), - project_root=str(git.find_git_project_root()).replace("/", "%"), - ), - ) + self.temp_file: str = get_backup_file_path() def read_backup_message(self) -> str | None: # Check the commit backup file exists diff --git a/commitizen/cz/utils.py b/commitizen/cz/utils.py index 71dac105a7..93c63a2213 100644 --- a/commitizen/cz/utils.py +++ b/commitizen/cz/utils.py @@ -1,6 +1,9 @@ import re +import os +import tempfile from commitizen.cz import exceptions +from commitizen import git def required_validator(answer, msg=None): @@ -15,3 +18,13 @@ def multiple_line_breaker(answer, sep="|"): def strip_local_version(version: str) -> str: return re.sub(r"\+.+", "", version) + + +def get_backup_file_path() -> str: + return os.path.join( + tempfile.gettempdir(), + "cz.commit%{user}%{project_root}.backup".format( + user=os.environ.get("USER", ""), + project_root=str(git.find_git_project_root()).replace("/", "%"), + ), + ) From e4b7e01fd181c06231f5975df303daff222fd5ec Mon Sep 17 00:00:00 2001 From: crai0 <crai0@posteo.net> Date: Fri, 15 Mar 2024 19:16:54 +0100 Subject: [PATCH 170/685] refactor(git-hooks): make git hooks use get_backup_file_path --- hooks/post-commit.py | 13 ++++++++----- hooks/prepare-commit-msg.py | 18 ++++++++---------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/hooks/post-commit.py b/hooks/post-commit.py index c2faebb738..a0ad5a7749 100755 --- a/hooks/post-commit.py +++ b/hooks/post-commit.py @@ -1,13 +1,16 @@ #!/usr/bin/env python -import os -import tempfile from pathlib import Path +try: + from commitizen.cz.utils import get_backup_file_path +except ImportError as error: + print("could not import commitizen:") + print(error) + exit(1) + def post_commit(): - backup_file = Path( - tempfile.gettempdir(), f"cz.commit{os.environ.get('USER', '')}.backup" - ) + backup_file = Path(get_backup_file_path()) # remove backup file if it exists if backup_file.is_file(): diff --git a/hooks/prepare-commit-msg.py b/hooks/prepare-commit-msg.py index 58beb3a0f8..d1ccf169cf 100755 --- a/hooks/prepare-commit-msg.py +++ b/hooks/prepare-commit-msg.py @@ -1,19 +1,19 @@ #!/usr/bin/env python -import os import shutil import subprocess import sys -import tempfile from pathlib import Path from subprocess import CalledProcessError +try: + from commitizen.cz.utils import get_backup_file_path +except ImportError as error: + print("could not import commitizen:") + print(error) + exit(1) -def prepare_commit_msg(commit_msg_file: Path) -> int: - # check that commitizen is installed - if shutil.which("cz") is None: - print("commitizen is not installed!") - return 0 +def prepare_commit_msg(commit_msg_file: Path) -> int: # check if the commit message needs to be generated using commitizen if ( subprocess.run( @@ -27,9 +27,7 @@ def prepare_commit_msg(commit_msg_file: Path) -> int: ).returncode != 0 ): - backup_file = Path( - tempfile.gettempdir(), f"cz.commit{os.environ.get('USER', '')}.backup" - ) + backup_file = Path(get_backup_file_path()) if backup_file.is_file(): # confirm if commit message from backup file should be reused From 0c95c160d715f5cad5bfc709d8ee4b0780c73641 Mon Sep 17 00:00:00 2001 From: crai0 <crai0@posteo.net> Date: Fri, 15 Mar 2024 19:27:59 +0100 Subject: [PATCH 171/685] refactor(commit): remove unused tempfile import --- commitizen/commands/commit.py | 1 - 1 file changed, 1 deletion(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index f2ccc6b1af..c9712a0fc7 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -1,6 +1,5 @@ import contextlib import os -import tempfile import questionary From e6b5e8bd882bdd0892877b9927bf1201af4f7113 Mon Sep 17 00:00:00 2001 From: crai0 <crai0@posteo.net> Date: Fri, 15 Mar 2024 20:26:36 +0100 Subject: [PATCH 172/685] test(commit): add test for --no-retry flag --- tests/commands/test_commit_command.py | 48 +++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index 545defe0e4..f2f4f174c6 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -157,6 +157,54 @@ def test_commit_retry_after_failure_works(config, mocker: MockFixture): assert not os.path.isfile(temp_file) +@pytest.mark.usefixtures("staging_is_clean") +def test_commit_retry_after_failure_with_no_retry_works(config, mocker: MockFixture): + prompt_mock = mocker.patch("questionary.prompt") + prompt_mock.return_value = { + "prefix": "feat", + "subject": "user created", + "scope": "", + "is_breaking_change": False, + "body": "closes #21", + "footer": "", + } + + commit_mock = mocker.patch("commitizen.git.commit") + commit_mock.return_value = cmd.Command("", "error", b"", b"", 9) + error_mock = mocker.patch("commitizen.out.error") + + with pytest.raises(CommitError): + commit_cmd = commands.Commit(config, {}) + temp_file = commit_cmd.temp_file + commit_cmd() + + prompt_mock.assert_called_once() + error_mock.assert_called_once() + assert os.path.isfile(temp_file) + + # provide different prompt to test that --no-retry ignore backup file + prompt_mock = mocker.patch("questionary.prompt") + prompt_mock.return_value = { + "prefix": "feat", + "subject": "user created", + "scope": "", + "is_breaking_change": False, + "body": "closes #22", + "footer": "", + } + + commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) + success_mock = mocker.patch("commitizen.out.success") + + config.settings["retry_after_failure"] = True + commands.Commit(config, {"no_retry": True})() + + commit_mock.assert_called_with("feat: user created\n\ncloses #22", args="") + prompt_mock.assert_called() + success_mock.assert_called_once() + assert not os.path.isfile(temp_file) + + @pytest.mark.usefixtures("staging_is_clean") def test_commit_command_with_dry_run_option(config, mocker: MockFixture): prompt_mock = mocker = mocker.patch("questionary.prompt") From d3f2b68fa012a4c9a9030f7da93c2f268803259e Mon Sep 17 00:00:00 2001 From: crai0 <crai0@posteo.net> Date: Fri, 15 Mar 2024 20:50:01 +0100 Subject: [PATCH 173/685] docs: add retry_after_failure config and retry options for commit command --- docs/commit.md | 7 +++++++ docs/config.md | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/docs/commit.md b/docs/commit.md index 2215e0d805..54c792f743 100644 --- a/docs/commit.md +++ b/docs/commit.md @@ -29,3 +29,10 @@ For example, using the `-S` option on `git commit` to sign a commit is now commi !!! note Deprecation warning: A commit can be signed off using `cz commit --signoff` or the shortcut `cz commit -s`. This syntax is now deprecated in favor of the new `cz commit -- -s` syntax. + +### Retry + +You can use `cz commit --retry` to reuse the last commit message when the previous commit attempt failed. +To automatically retry when running `cz commit`, you can set the `retry_after_failure` +configuration option to `true`. Running `cz commit --no-retry` makes commitizen ignore `retry_after_failure`, forcing +a new commit message to be prompted. diff --git a/docs/config.md b/docs/config.md index 391c20f0fc..d6ab12abcd 100644 --- a/docs/config.md +++ b/docs/config.md @@ -82,6 +82,14 @@ Default: `None` Create custom commit message, useful to skip ci. [Read more][bump_message] +### `retry_after_failure` + +Type: `bool` + +Default: `false` + +Automatically retry failed commit when running `cz commit`. [Read more][retry_after_failure] + ### `allow_abort` Type: `bool` @@ -380,6 +388,7 @@ setup( [bump_message]: bump.md#bump_message [major-version-zero]: bump.md#-major-version-zero [prerelease-offset]: bump.md#-prerelease_offset +[retry_after_failure]: commit.md#retry [allow_abort]: check.md#allow-abort [version-scheme]: bump.md#version-scheme [pre_bump_hooks]: bump.md#pre_bump_hooks From e2644c9f67cf17c8124f12ab7ab2352d48dbd5ce Mon Sep 17 00:00:00 2001 From: crai0 <crai0@posteo.net> Date: Fri, 15 Mar 2024 21:17:18 +0100 Subject: [PATCH 174/685] refactor(commit): use Optional[str] instead of str | None --- commitizen/commands/commit.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index c9712a0fc7..2489abaf29 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -1,6 +1,8 @@ import contextlib import os +from typing import Optional + import questionary from commitizen import factory, git, out @@ -33,7 +35,7 @@ def __init__(self, config: BaseConfig, arguments: dict): self.arguments = arguments self.temp_file: str = get_backup_file_path() - def read_backup_message(self) -> str | None: + def read_backup_message(self) -> Optional[str]: # Check the commit backup file exists if not os.path.isfile(self.temp_file): return None From 820ada2c005a53e64527b479a3181125c249bef9 Mon Sep 17 00:00:00 2001 From: crai0 <crai0@posteo.net> Date: Fri, 15 Mar 2024 21:34:22 +0100 Subject: [PATCH 175/685] refactor(utils): convert git project root to posix path for backup file name --- commitizen/cz/utils.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/commitizen/cz/utils.py b/commitizen/cz/utils.py index 93c63a2213..d5bd63c6fc 100644 --- a/commitizen/cz/utils.py +++ b/commitizen/cz/utils.py @@ -21,10 +21,17 @@ def strip_local_version(version: str) -> str: def get_backup_file_path() -> str: + project_root = git.find_git_project_root() + + if project_root is None: + project = "" + else: + project = project_root.as_posix().replace("/", "%") + return os.path.join( tempfile.gettempdir(), - "cz.commit%{user}%{project_root}.backup".format( + "cz.commit%{user}%{project}.backup".format( user=os.environ.get("USER", ""), - project_root=str(git.find_git_project_root()).replace("/", "%"), + project=project, ), ) From 4f3931a49985d584b246fdf9df5a741581a160b3 Mon Sep 17 00:00:00 2001 From: crai0 <crai0@posteo.net> Date: Fri, 15 Mar 2024 21:51:38 +0100 Subject: [PATCH 176/685] test(utils): add test for get_backup_file_path when git.find_project_root returns None --- tests/test_cz_utils.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/test_cz_utils.py b/tests/test_cz_utils.py index 94cc7f5b87..25c960c9a7 100644 --- a/tests/test_cz_utils.py +++ b/tests/test_cz_utils.py @@ -1,4 +1,5 @@ import pytest +from pytest_mock import MockFixture from commitizen.cz import exceptions, utils @@ -17,3 +18,9 @@ def test_multiple_line_breaker(): result = utils.multiple_line_breaker(message, "is") assert result == "th\n\nthe first line | and th\n\nthe second line" + + +def test_get_backup_file_path_no_project_root(mocker: MockFixture): + project_root_mock = mocker.patch("commitizen.git.find_git_project_root") + project_root_mock.return_value = None + assert utils.get_backup_file_path() From fc3c1e9975fbc4181a89932b01a8928886d74b31 Mon Sep 17 00:00:00 2001 From: crai0 <crai0@posteo.net> Date: Sat, 16 Mar 2024 19:48:54 +0100 Subject: [PATCH 177/685] test(commit): create new test for backup file creation and use fixture for other retry test cases --- tests/commands/test_commit_command.py | 112 ++++++++++---------------- 1 file changed, 42 insertions(+), 70 deletions(-) diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index f2f4f174c6..1930b2eaee 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -6,6 +6,7 @@ from commitizen import cmd, commands from commitizen.cz.exceptions import CzException +from commitizen.cz.utils import get_backup_file_path from commitizen.exceptions import ( CommitError, CustomError, @@ -25,6 +26,12 @@ def staging_is_clean(mocker: MockFixture, tmp_git_project): return tmp_git_project +@pytest.fixture +def backup_file(tmp_git_project): + with open(get_backup_file_path(), "w") as backup_file: + backup_file.write("backup commit") + + @pytest.mark.usefixtures("staging_is_clean") def test_commit(config, mocker: MockFixture): prompt_mock = mocker.patch("questionary.prompt") @@ -46,18 +53,7 @@ def test_commit(config, mocker: MockFixture): @pytest.mark.usefixtures("staging_is_clean") -def test_commit_retry_fails_no_backup(config, mocker: MockFixture): - commit_mock = mocker.patch("commitizen.git.commit") - commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) - - with pytest.raises(NoCommitBackupError) as excinfo: - commands.Commit(config, {"retry": True})() - - assert NoCommitBackupError.message in str(excinfo.value) - - -@pytest.mark.usefixtures("staging_is_clean") -def test_commit_retry_works(config, mocker: MockFixture): +def test_commit_backup_on_failure(config, mocker: MockFixture): prompt_mock = mocker.patch("questionary.prompt") prompt_mock.return_value = { "prefix": "feat", @@ -81,15 +77,32 @@ def test_commit_retry_works(config, mocker: MockFixture): error_mock.assert_called_once() assert os.path.isfile(temp_file) - # Previous commit failed, so retry should pick up the backup commit - # commit_mock = mocker.patch("commitizen.git.commit") + +@pytest.mark.usefixtures("staging_is_clean") +def test_commit_retry_fails_no_backup(config, mocker: MockFixture): + commit_mock = mocker.patch("commitizen.git.commit") + commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) + + with pytest.raises(NoCommitBackupError) as excinfo: + commands.Commit(config, {"retry": True})() + + assert NoCommitBackupError.message in str(excinfo.value) + + +@pytest.mark.usefixtures("staging_is_clean", "backup_file") +def test_commit_retry_works(config, mocker: MockFixture): + prompt_mock = mocker.patch("questionary.prompt") + + commit_mock = mocker.patch("commitizen.git.commit") commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) success_mock = mocker.patch("commitizen.out.success") - commands.Commit(config, {"retry": True})() + commit_cmd = commands.Commit(config, {"retry": True}) + temp_file = commit_cmd.temp_file + commit_cmd() - commit_mock.assert_called_with("feat: user created\n\ncloses #21", args="") - prompt_mock.assert_called_once() + commit_mock.assert_called_with("backup commit", args="") + prompt_mock.assert_not_called() success_mock.assert_called_once() assert not os.path.isfile(temp_file) @@ -118,46 +131,26 @@ def test_commit_retry_after_failure_no_backup(config, mocker: MockFixture): success_mock.assert_called_once() -@pytest.mark.usefixtures("staging_is_clean") +@pytest.mark.usefixtures("staging_is_clean", "backup_file") def test_commit_retry_after_failure_works(config, mocker: MockFixture): prompt_mock = mocker.patch("questionary.prompt") - prompt_mock.return_value = { - "prefix": "feat", - "subject": "user created", - "scope": "", - "is_breaking_change": False, - "body": "closes #21", - "footer": "", - } commit_mock = mocker.patch("commitizen.git.commit") - commit_mock.return_value = cmd.Command("", "error", b"", b"", 9) - error_mock = mocker.patch("commitizen.out.error") - - with pytest.raises(CommitError): - commit_cmd = commands.Commit(config, {}) - temp_file = commit_cmd.temp_file - commit_cmd() - - prompt_mock.assert_called_once() - error_mock.assert_called_once() - assert os.path.isfile(temp_file) - - # Previous commit failed, so retry should pick up the backup commit - # commit_mock = mocker.patch("commitizen.git.commit") commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) success_mock = mocker.patch("commitizen.out.success") config.settings["retry_after_failure"] = True - commands.Commit(config, {})() + commit_cmd = commands.Commit(config, {}) + temp_file = commit_cmd.temp_file + commit_cmd() - commit_mock.assert_called_with("feat: user created\n\ncloses #21", args="") - prompt_mock.assert_called_once() + commit_mock.assert_called_with("backup commit", args="") + prompt_mock.assert_not_called() success_mock.assert_called_once() assert not os.path.isfile(temp_file) -@pytest.mark.usefixtures("staging_is_clean") +@pytest.mark.usefixtures("staging_is_clean", "backup_file") def test_commit_retry_after_failure_with_no_retry_works(config, mocker: MockFixture): prompt_mock = mocker.patch("questionary.prompt") prompt_mock.return_value = { @@ -170,37 +163,16 @@ def test_commit_retry_after_failure_with_no_retry_works(config, mocker: MockFixt } commit_mock = mocker.patch("commitizen.git.commit") - commit_mock.return_value = cmd.Command("", "error", b"", b"", 9) - error_mock = mocker.patch("commitizen.out.error") - - with pytest.raises(CommitError): - commit_cmd = commands.Commit(config, {}) - temp_file = commit_cmd.temp_file - commit_cmd() - - prompt_mock.assert_called_once() - error_mock.assert_called_once() - assert os.path.isfile(temp_file) - - # provide different prompt to test that --no-retry ignore backup file - prompt_mock = mocker.patch("questionary.prompt") - prompt_mock.return_value = { - "prefix": "feat", - "subject": "user created", - "scope": "", - "is_breaking_change": False, - "body": "closes #22", - "footer": "", - } - commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) success_mock = mocker.patch("commitizen.out.success") config.settings["retry_after_failure"] = True - commands.Commit(config, {"no_retry": True})() + commit_cmd = commands.Commit(config, {"no_retry": True}) + temp_file = commit_cmd.temp_file + commit_cmd() - commit_mock.assert_called_with("feat: user created\n\ncloses #22", args="") - prompt_mock.assert_called() + commit_mock.assert_called_with("feat: user created\n\ncloses #21", args="") + prompt_mock.assert_called_once() success_mock.assert_called_once() assert not os.path.isfile(temp_file) From b42a676d1074f80bb8fab431d41f04a6b1e6317c Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sat, 30 Mar 2024 15:22:30 +0800 Subject: [PATCH 178/685] style: refine coding style based on reviews --- commitizen/commands/commit.py | 5 +++-- commitizen/cz/utils.py | 9 ++------- hooks/post-commit.py | 3 +-- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 2489abaf29..7591a28658 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -1,7 +1,8 @@ +from __future__ import annotations + import contextlib import os -from typing import Optional import questionary @@ -35,7 +36,7 @@ def __init__(self, config: BaseConfig, arguments: dict): self.arguments = arguments self.temp_file: str = get_backup_file_path() - def read_backup_message(self) -> Optional[str]: + def read_backup_message(self) -> str | None: # Check the commit backup file exists if not os.path.isfile(self.temp_file): return None diff --git a/commitizen/cz/utils.py b/commitizen/cz/utils.py index d5bd63c6fc..4df2edf39c 100644 --- a/commitizen/cz/utils.py +++ b/commitizen/cz/utils.py @@ -28,10 +28,5 @@ def get_backup_file_path() -> str: else: project = project_root.as_posix().replace("/", "%") - return os.path.join( - tempfile.gettempdir(), - "cz.commit%{user}%{project}.backup".format( - user=os.environ.get("USER", ""), - project=project, - ), - ) + user = os.environ.get("USER", "") + return os.path.join(tempfile.gettempdir(), f"cz.commit%{user}%{project}.backup") diff --git a/hooks/post-commit.py b/hooks/post-commit.py index a0ad5a7749..6444e5ca84 100755 --- a/hooks/post-commit.py +++ b/hooks/post-commit.py @@ -4,8 +4,7 @@ try: from commitizen.cz.utils import get_backup_file_path except ImportError as error: - print("could not import commitizen:") - print(error) + print(f"could not import commitizen:\n{error}") exit(1) From ffb6df72be3f93ebfecdd94b74c43ba429157f1a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sat, 30 Mar 2024 07:58:00 +0000 Subject: [PATCH 179/685] =?UTF-8?q?bump:=20version=203.20.0=20=E2=86=92=20?= =?UTF-8?q?3.21.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 14 ++++++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fb3881cc7a..d66d4eb558 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.20.0 # automatically updated by Commitizen + rev: v3.21.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 38f588354c..83cb977b2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +## v3.21.0 (2024-03-30) + +### Feat + +- **commit**: add retry_after_failure config option and --no-retry flag + +### Refactor + +- **utils**: convert git project root to posix path for backup file name +- **commit**: use Optional[str] instead of str | None +- **commit**: remove unused tempfile import +- **git-hooks**: make git hooks use get_backup_file_path +- **utils**: move backup path creation to utils + ## v3.20.0 (2024-03-19) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 10c5c0dd1b..f87b7d84cf 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.20.0" +__version__ = "3.21.0" diff --git a/pyproject.toml b/pyproject.toml index 82f415ff34..310c80eedc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.20.0" +version = "3.21.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.20.0" +version = "3.21.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 7c0e78093bdaa72e8f6be078a80ac315a2761049 Mon Sep 17 00:00:00 2001 From: ellie <bc70522@gmail.com> Date: Sat, 30 Mar 2024 15:33:01 +0800 Subject: [PATCH 180/685] fix(command-init): "cz init" should list exisitng tag in reverse order --- commitizen/commands/init.py | 4 +++- tests/commands/test_init_command.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/commitizen/commands/init.py b/commitizen/commands/init.py index 62b3aec971..9775ec7fc8 100644 --- a/commitizen/commands/init.py +++ b/commitizen/commands/init.py @@ -186,9 +186,11 @@ def _ask_tag(self) -> str: out.error("No Existing Tag. Set tag to v0.0.1") return "0.0.1" + # the latest tag is most likely with the largest number. Thus list the tags in reverse order makes more sense + sorted_tags = sorted(tags, reverse=True) latest_tag = questionary.select( "Please choose the latest tag: ", - choices=tags, + choices=sorted_tags, style=self.cz.style, ).unsafe_ask() diff --git a/tests/commands/test_init_command.py b/tests/commands/test_init_command.py index ba77a12e3c..1814acb135 100644 --- a/tests/commands/test_init_command.py +++ b/tests/commands/test_init_command.py @@ -93,7 +93,7 @@ def test_init_when_config_already_exists(config, capsys): def test_init_without_choosing_tag(config, mocker: MockFixture, tmpdir): mocker.patch( - "commitizen.commands.init.get_tag_names", return_value=["0.0.1", "0.0.2"] + "commitizen.commands.init.get_tag_names", return_value=["0.0.2", "0.0.1"] ) mocker.patch("commitizen.commands.init.get_latest_tag_name", return_value="0.0.2") mocker.patch( From 223532b2782519b968cfa534b6dff4b3a102ce3a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sat, 30 Mar 2024 08:03:21 +0000 Subject: [PATCH 181/685] =?UTF-8?q?bump:=20version=203.21.0=20=E2=86=92=20?= =?UTF-8?q?3.21.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d66d4eb558..63c283e1c1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.21.0 # automatically updated by Commitizen + rev: v3.21.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 83cb977b2c..ca27f0a2ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.21.1 (2024-03-30) + +### Fix + +- **command-init**: "cz init" should list exisitng tag in reverse order + ## v3.21.0 (2024-03-30) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index f87b7d84cf..ea92c23757 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.21.0" +__version__ = "3.21.1" diff --git a/pyproject.toml b/pyproject.toml index 310c80eedc..4697401b98 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.21.0" +version = "3.21.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.21.0" +version = "3.21.1" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 3519ae7d300fcb3095b9064272f025255adf4c2b Mon Sep 17 00:00:00 2001 From: TTW <peter86225@gmail.com> Date: Sat, 30 Mar 2024 15:50:22 +0800 Subject: [PATCH 182/685] fix(commitizen/git.py,-tests/test_git.py): Resolve tempfile path spaces issue in git commit function This test verifies parameter passing using markers to ensure that function arguments are correctly handled and propagated. #572 --- commitizen/git.py | 2 +- tests/test_git.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/commitizen/git.py b/commitizen/git.py index 900ca9298e..53e7335a3f 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -112,7 +112,7 @@ def commit( f.write(message.encode("utf-8")) f.close() - command = f"git commit {args} -F {f.name}" + command = f'git commit {args} -F "{f.name}"' if committer_date and os.name == "nt": # pragma: no cover # Using `cmd /v /c "{command}"` sets environment variables only for that command diff --git a/tests/test_git.py b/tests/test_git.py index 3b7a08f94a..60001d2e9b 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -293,3 +293,32 @@ def test_create_tag_with_message(tmp_commitizen_project): assert git.get_tag_message(tag_name) == ( tag_message if platform.system() != "Windows" else f"'{tag_message}'" ) + + +@pytest.mark.parametrize( + "file_path,expected_cmd", + [ + ( + "/tmp/temp file", + 'git commit --signoff -F "/tmp/temp file"', + ), # File contains spaces + ( + "/tmp dir/temp file", + 'git commit --signoff -F "/tmp dir/temp file"', + ), # Path contains spaces + ( + "/tmp/tempfile", + 'git commit --signoff -F "/tmp/tempfile"', + ), # Path does not contain spaces + ], +) +def test_commit_with_spaces_in_path(mocker, file_path, expected_cmd): + mock_run = mocker.patch("commitizen.cmd.run", return_value=FakeCommand()) + mock_unlink = mocker.patch("os.unlink") + mock_temp_file = mocker.patch("commitizen.git.NamedTemporaryFile") + mock_temp_file.return_value.name = file_path + + git.commit("feat: new feature", "--signoff") + + mock_run.assert_called_once_with(expected_cmd) + mock_unlink.assert_called_once_with(file_path) From 6148bf1d98d40d9ff344b5fc1095f721c646527c Mon Sep 17 00:00:00 2001 From: TTW <peter86225@gmail.com> Date: Sat, 30 Mar 2024 16:22:08 +0800 Subject: [PATCH 183/685] test(tests/test_git.py): use the IDs tool to clearly describe each test item --- tests/test_git.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/test_git.py b/tests/test_git.py index 60001d2e9b..8af332d214 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -301,15 +301,20 @@ def test_create_tag_with_message(tmp_commitizen_project): ( "/tmp/temp file", 'git commit --signoff -F "/tmp/temp file"', - ), # File contains spaces + ), ( "/tmp dir/temp file", 'git commit --signoff -F "/tmp dir/temp file"', - ), # Path contains spaces + ), ( "/tmp/tempfile", 'git commit --signoff -F "/tmp/tempfile"', - ), # Path does not contain spaces + ), + ], + ids=[ + "File contains spaces", + "Path contains spaces", + "Path does not contain spaces", ], ) def test_commit_with_spaces_in_path(mocker, file_path, expected_cmd): From 8d5f6303e7501317ea3e4a3569fa7111411a5ad5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sat, 30 Mar 2024 08:31:53 +0000 Subject: [PATCH 184/685] =?UTF-8?q?bump:=20version=203.21.1=20=E2=86=92=20?= =?UTF-8?q?3.21.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 63c283e1c1..a07b16ca20 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.21.1 # automatically updated by Commitizen + rev: v3.21.2 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index ca27f0a2ee..82e455c569 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.21.2 (2024-03-30) + +### Fix + +- **commitizen/git.py,-tests/test_git.py**: Resolve tempfile path spaces issue in git commit function + ## v3.21.1 (2024-03-30) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index ea92c23757..6a2d1c0215 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.21.1" +__version__ = "3.21.2" diff --git a/pyproject.toml b/pyproject.toml index 4697401b98..d250e274af 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.21.1" +version = "3.21.2" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.21.1" +version = "3.21.2" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 7b49f8ad524d48f8c9cf7ca815faa3dc692b577d Mon Sep 17 00:00:00 2001 From: itinghung <itinghung.tina@gmail.com> Date: Sat, 30 Mar 2024 16:10:15 +0800 Subject: [PATCH 185/685] refactor(defaults): move cz_conventional_commit defaults out of defaults.py --- .../cz/conventional_commits/conventional_commits.py | 2 +- commitizen/defaults.py | 2 -- tests/test_changelog.py | 10 +++++----- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index f927a94fdd..5f693963e7 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -31,7 +31,7 @@ class ConventionalCommitsCz(BaseCommitizen): bump_pattern = defaults.bump_pattern bump_map = defaults.bump_map bump_map_major_version_zero = defaults.bump_map_major_version_zero - commit_parser = defaults.commit_parser + commit_parser = r"^((?P<change_type>feat|fix|refactor|perf|BREAKING CHANGE)(?:\((?P<scope>[^()\r\n]*)\)|\()?(?P<breaking>!)?|\w+!):\s(?P<message>.*)?" # noqa change_type_map = { "feat": "Feat", "fix": "Fix", diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 071efd10b9..a1651ebe88 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -133,5 +133,3 @@ class Settings(TypedDict, total=False): ) change_type_order = ["BREAKING CHANGE", "Feat", "Fix", "Refactor", "Perf"] bump_message = "bump: version $current_version → $new_version" - -commit_parser = r"^((?P<change_type>feat|fix|refactor|perf|BREAKING CHANGE)(?:\((?P<scope>[^()\r\n]*)\)|\()?(?P<breaking>!)?|\w+!):\s(?P<message>.*)?" # noqa diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 9ccc207936..d382a67f30 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -6,7 +6,7 @@ import pytest from jinja2 import FileSystemLoader -from commitizen import changelog, defaults, git +from commitizen import changelog, git from commitizen.cz.conventional_commits.conventional_commits import ( ConventionalCommitsCz, ) @@ -1079,8 +1079,8 @@ def test_invalid_tag_included_in_changelog(): @pytest.mark.parametrize("merge_prereleases", (True, False)) def test_generate_tree_from_commits(gitcommits, tags, merge_prereleases): - parser = defaults.commit_parser - changelog_pattern = defaults.bump_pattern + parser = ConventionalCommitsCz.commit_parser + changelog_pattern = ConventionalCommitsCz.bump_pattern tree = changelog.generate_tree_from_commits( gitcommits, tags, parser, changelog_pattern, merge_prerelease=merge_prereleases ) @@ -1106,8 +1106,8 @@ def test_generate_tree_from_commits(gitcommits, tags, merge_prereleases): def test_generate_tree_from_commits_with_no_commits(tags): gitcommits = [] - parser = defaults.commit_parser - changelog_pattern = defaults.bump_pattern + parser = ConventionalCommitsCz.commit_parser + changelog_pattern = ConventionalCommitsCz.bump_pattern tree = changelog.generate_tree_from_commits( gitcommits, tags, parser, changelog_pattern ) From 669080c8c180a1f81bc3f0666b0d49fb71ab6dde Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sat, 30 Mar 2024 09:15:00 +0000 Subject: [PATCH 186/685] =?UTF-8?q?bump:=20version=203.21.2=20=E2=86=92=20?= =?UTF-8?q?3.21.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a07b16ca20..5c9623149e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.21.2 # automatically updated by Commitizen + rev: v3.21.3 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 82e455c569..a3daec51cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.21.3 (2024-03-30) + +### Refactor + +- **defaults**: move cz_conventional_commit defaults out of defaults.py + ## v3.21.2 (2024-03-30) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 6a2d1c0215..322a27ea54 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.21.2" +__version__ = "3.21.3" diff --git a/pyproject.toml b/pyproject.toml index d250e274af..d1e03c436e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.21.2" +version = "3.21.3" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.21.2" +version = "3.21.3" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From b4060a5d78ca85399202ebee9fa02aaeb2474662 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 01:41:56 +0000 Subject: [PATCH 187/685] build(deps-dev): bump mkdocs-material from 9.5.15 to 9.5.16 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.15 to 9.5.16. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.15...9.5.16) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2d49e41b5a..21dfdb2d79 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "appnope" @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.15" +version = "9.5.16" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.15-py3-none-any.whl", hash = "sha256:e5c96dec3d19491de49ca643fc1dbb92b278e43cdb816c775bc47db77d9b62fb"}, - {file = "mkdocs_material-9.5.15.tar.gz", hash = "sha256:39f03cca45e82bf54eb7456b5a18bd252eabfdd67f237a229471484a0a4d4635"}, + {file = "mkdocs_material-9.5.16-py3-none-any.whl", hash = "sha256:32fce3cd8ecbd5dca6e5887cc0cf5bc78707a36f7d0f6f1bbbe9edaf428b8055"}, + {file = "mkdocs_material-9.5.16.tar.gz", hash = "sha256:8b89b639592660f24657bb058de4aff0060cd0383148f8f51711201730f17503"}, ] [package.dependencies] From 90e2fd84b918153facf7a41d6ff40e2c75839c53 Mon Sep 17 00:00:00 2001 From: rockleona <34214497+rockleona@users.noreply.github.com> Date: Mon, 1 Apr 2024 23:26:37 +0800 Subject: [PATCH 188/685] docs(CHANGELOG): fix typo in the file --- CHANGELOG.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3daec51cd..a27d8610ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ ### Fix -- **command-init**: "cz init" should list exisitng tag in reverse order +- **command-init**: "cz init" should list existing tag in reverse order ## v3.21.0 (2024-03-30) @@ -484,7 +484,7 @@ ### Fix -- **bump.py**: `CHANGELOG.md` gets git added and commited correctly +- **bump.py**: `CHANGELOG.md` gets git added and committed correctly ## v2.33.0 (2022-09-15) @@ -721,7 +721,7 @@ ### Fix -- **bump**: raise non zero error code when there's no elegible commit to bump +- **bump**: raise non zero error code when there's no eligible commit to bump ## v2.20.3 (2021-12-20) @@ -771,7 +771,7 @@ ### Fix -- **commit**: correct the stage checker before commiting +- **commit**: correct the stage checker before committing ## v2.18.0 (2021-08-13) @@ -846,7 +846,7 @@ ### Fix -- **bump**: replace all occurances that match regex +- **bump**: replace all occurrences that match regex - **wip**: add test for current breaking change ## v2.17.1 (2021-04-08) @@ -1079,7 +1079,7 @@ ### BREAKING CHANGE - setup.cfg, .cz and .cz.cfg are no longer supported -- Use "cz verion" instead +- Use "cz version" instead - "cz --debug" will no longer work #47 @@ -1226,7 +1226,7 @@ - **changelog**: add incremental flag - **commands/changelog**: make changelog_file an option in config - **commands/changelog**: exit when there is no commit exists -- **commands/changlog**: add --start-rev argument to `cz changelog` +- **commands/changelog**: add --start-rev argument to `cz changelog` - **changelog**: generate changelog based on git log - **commands/changelog**: generate changelog_tree from all past commits - **cz/conventinal_commits**: add changelog_map, changelog_pattern and implement process_commit @@ -1369,7 +1369,7 @@ - **cmd**: reimplement how cmd is run - **git**: Use GitCommit, GitTag object to store commit and git information - **git**: make arguments other then start and end in get_commit keyword arguments -- **git**: Change get_commits into returning commits instead of lines of messsages +- **git**: Change get_commits into returning commits instead of lines of messages ## v1.15.1 (2020-01-20) @@ -1459,7 +1459,7 @@ - **config**: handle empty config file - **config**: fix load global_conf even if it doesn't exist -- **config/ini_config**: replase outdated _parse_ini_settings with _parse_settings +- **config/ini_config**: replace outdated _parse_ini_settings with _parse_settings ### Refactor @@ -1515,8 +1515,8 @@ ### Fix -- commit dry-run doesnt require staging to be clean -- **scripts**: add back the delelte poetry prefix +- commit dry-run doesn't require staging to be clean +- **scripts**: add back the delete poetry prefix - correct typo to spell "convention" - removing folder in windows throwing a PermissionError - **test_cli**: testing the version command @@ -1524,7 +1524,7 @@ ### Refactor - **config**: remove has_pyproject which is no longer used -- **cz/customize**: make jinja2 a custom requirement. if not installed use string.Tempalte instead +- **cz/customize**: make jinja2 a custom requirement. if not installed use string.Template instead - **cz/utils**: rename filters as utils - **cli**: add back --version and remove subcommand required constraint @@ -1636,7 +1636,7 @@ - update given files with new version - **config**: new set key, used to set version to cfg - support for pyproject.toml -- first semantic version bump implementaiton +- first semantic version bump implementation ### Fix @@ -1695,11 +1695,11 @@ ### Fix -- **manifest**: inluded missing files +- **manifest**: included missing files ### Refactor -- **conventionalCommit**: moved fitlers to questions instead of message +- **conventionalCommit**: moved filters to questions instead of message ## v0.9.5 (2018-08-24) @@ -1717,7 +1717,7 @@ ### Feat -- **commiter**: conventional commit is a bit more intelligent now +- **committer**: conventional commit is a bit more intelligent now ## v0.9.2 (2017-11-11) From 17ffe48f9660d935fc1e82a8ce47649f660c5567 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Apr 2024 01:17:51 +0000 Subject: [PATCH 189/685] build(deps-dev): bump ruff from 0.3.4 to 0.3.5 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.3.4 to 0.3.5. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.3.4...v0.3.5) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 21dfdb2d79..ff37d5da32 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1407,28 +1407,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.3.4" +version = "0.3.5" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:60c870a7d46efcbc8385d27ec07fe534ac32f3b251e4fc44b3cbfd9e09609ef4"}, - {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6fc14fa742e1d8f24910e1fff0bd5e26d395b0e0e04cc1b15c7c5e5fe5b4af91"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3ee7880f653cc03749a3bfea720cf2a192e4f884925b0cf7eecce82f0ce5854"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf133dd744f2470b347f602452a88e70dadfbe0fcfb5fd46e093d55da65f82f7"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f3860057590e810c7ffea75669bdc6927bfd91e29b4baa9258fd48b540a4365"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:986f2377f7cf12efac1f515fc1a5b753c000ed1e0a6de96747cdf2da20a1b369"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fd98e85869603e65f554fdc5cddf0712e352fe6e61d29d5a6fe087ec82b76c"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64abeed785dad51801b423fa51840b1764b35d6c461ea8caef9cf9e5e5ab34d9"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df52972138318bc7546d92348a1ee58449bc3f9eaf0db278906eb511889c4b50"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:98e98300056445ba2cc27d0b325fd044dc17fcc38e4e4d2c7711585bd0a958ed"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:519cf6a0ebed244dce1dc8aecd3dc99add7a2ee15bb68cf19588bb5bf58e0488"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:bb0acfb921030d00070539c038cd24bb1df73a2981e9f55942514af8b17be94e"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:cf187a7e7098233d0d0c71175375c5162f880126c4c716fa28a8ac418dcf3378"}, - {file = "ruff-0.3.4-py3-none-win32.whl", hash = "sha256:af27ac187c0a331e8ef91d84bf1c3c6a5dea97e912a7560ac0cef25c526a4102"}, - {file = "ruff-0.3.4-py3-none-win_amd64.whl", hash = "sha256:de0d5069b165e5a32b3c6ffbb81c350b1e3d3483347196ffdf86dc0ef9e37dd6"}, - {file = "ruff-0.3.4-py3-none-win_arm64.whl", hash = "sha256:6810563cc08ad0096b57c717bd78aeac888a1bfd38654d9113cb3dc4d3f74232"}, - {file = "ruff-0.3.4.tar.gz", hash = "sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1"}, + {file = "ruff-0.3.5-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:aef5bd3b89e657007e1be6b16553c8813b221ff6d92c7526b7e0227450981eac"}, + {file = "ruff-0.3.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:89b1e92b3bd9fca249153a97d23f29bed3992cff414b222fcd361d763fc53f12"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e55771559c89272c3ebab23326dc23e7f813e492052391fe7950c1a5a139d89"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dabc62195bf54b8a7876add6e789caae0268f34582333cda340497c886111c39"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a05f3793ba25f194f395578579c546ca5d83e0195f992edc32e5907d142bfa3"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:dfd3504e881082959b4160ab02f7a205f0fadc0a9619cc481982b6837b2fd4c0"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87258e0d4b04046cf1d6cc1c56fadbf7a880cc3de1f7294938e923234cf9e498"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:712e71283fc7d9f95047ed5f793bc019b0b0a29849b14664a60fd66c23b96da1"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a532a90b4a18d3f722c124c513ffb5e5eaff0cc4f6d3aa4bda38e691b8600c9f"}, + {file = "ruff-0.3.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:122de171a147c76ada00f76df533b54676f6e321e61bd8656ae54be326c10296"}, + {file = "ruff-0.3.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d80a6b18a6c3b6ed25b71b05eba183f37d9bc8b16ace9e3d700997f00b74660b"}, + {file = "ruff-0.3.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a7b6e63194c68bca8e71f81de30cfa6f58ff70393cf45aab4c20f158227d5936"}, + {file = "ruff-0.3.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a759d33a20c72f2dfa54dae6e85e1225b8e302e8ac655773aff22e542a300985"}, + {file = "ruff-0.3.5-py3-none-win32.whl", hash = "sha256:9d8605aa990045517c911726d21293ef4baa64f87265896e491a05461cae078d"}, + {file = "ruff-0.3.5-py3-none-win_amd64.whl", hash = "sha256:dc56bb16a63c1303bd47563c60482a1512721053d93231cf7e9e1c6954395a0e"}, + {file = "ruff-0.3.5-py3-none-win_arm64.whl", hash = "sha256:faeeae9905446b975dcf6d4499dc93439b131f1443ee264055c5716dd947af55"}, + {file = "ruff-0.3.5.tar.gz", hash = "sha256:a067daaeb1dc2baf9b82a32dae67d154d95212080c80435eb052d95da647763d"}, ] [[package]] From 947a715cd090d304a282516e8cccdc8d625bedbe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Apr 2024 01:30:34 +0000 Subject: [PATCH 190/685] build(deps-dev): bump mkdocs-material from 9.5.16 to 9.5.17 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.16 to 9.5.17. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.16...9.5.17) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index ff37d5da32..ca440f619f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -744,13 +744,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.16" +version = "9.5.17" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.16-py3-none-any.whl", hash = "sha256:32fce3cd8ecbd5dca6e5887cc0cf5bc78707a36f7d0f6f1bbbe9edaf428b8055"}, - {file = "mkdocs_material-9.5.16.tar.gz", hash = "sha256:8b89b639592660f24657bb058de4aff0060cd0383148f8f51711201730f17503"}, + {file = "mkdocs_material-9.5.17-py3-none-any.whl", hash = "sha256:14a2a60119a785e70e765dd033e6211367aca9fc70230e577c1cf6a326949571"}, + {file = "mkdocs_material-9.5.17.tar.gz", hash = "sha256:06ae1275a72db1989cf6209de9e9ecdfbcfdbc24c58353877b2bb927dbe413e4"}, ] [package.dependencies] From daef1d3e639f77a5fa23dbf806be7cd1b9ff8064 Mon Sep 17 00:00:00 2001 From: ellie <bc70522@gmail.com> Date: Thu, 4 Apr 2024 14:25:01 +0800 Subject: [PATCH 191/685] build(pyproject.toml): add `rich` in dev.dependencies --- poetry.lock | 56 +++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index ca440f619f..5b28bf5776 100644 --- a/poetry.lock +++ b/poetry.lock @@ -617,6 +617,30 @@ importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "markupsafe" version = "2.1.3" @@ -700,6 +724,17 @@ files = [ [package.dependencies] traitlets = "*" +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + [[package]] name = "mergedeep" version = "1.3.4" @@ -1405,6 +1440,25 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "rich" +version = "13.7.1" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, + {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + [[package]] name = "ruff" version = "0.3.5" @@ -1766,4 +1820,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "614f9b1db867d5b7f954c318309b0e7b18951ed7be6d8016af79a08b8c2c7a89" +content-hash = "5cd809db4e9dc8005ab2295ca7d182435021752953a7b1552bb81912b54df791" diff --git a/pyproject.toml b/pyproject.toml index d1e03c436e..3410a50aba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -73,6 +73,7 @@ mkdocs-material = "^9.1.6" deprecated = "^1.2.13" types-deprecated = "^1.2.9.2" types-python-dateutil = "^2.8.19.13" +rich = "^13.7.1" [tool.poetry.scripts] From 3593dfc78661603bd49533c9677ffc101cd83edd Mon Sep 17 00:00:00 2001 From: ellie <bc70522@gmail.com> Date: Fri, 5 Apr 2024 13:19:52 +0800 Subject: [PATCH 192/685] ci(scripts): a script to gen cli help screenshots --- scripts/gen_cli_help_screenshots.py | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 scripts/gen_cli_help_screenshots.py diff --git a/scripts/gen_cli_help_screenshots.py b/scripts/gen_cli_help_screenshots.py new file mode 100644 index 0000000000..0706612391 --- /dev/null +++ b/scripts/gen_cli_help_screenshots.py @@ -0,0 +1,42 @@ +import os +import subprocess +from pathlib import Path + +from rich.console import Console + +from commitizen.cli import data + +project_root = Path(__file__).parent.parent.absolute() +images_root = project_root / Path("docs") / Path("images") / Path("cli_help") + + +def gen_cli_help_screenshots() -> None: + """Generate the screenshot for help message on each cli command and save them as svg files.""" + if not os.path.exists(images_root): + os.makedirs(images_root) + print(f"Created {images_root}") + + help_cmds = _list_help_cmds() + for cmd in help_cmds: + file_name = f"{cmd.replace(' ', '_').replace('-', '_')}.svg" + _export_cmd_as_svg(cmd, f"{images_root}/{file_name}") + + +def _list_help_cmds() -> list[str]: + cmds = [f"{data['prog']} --help"] + [ + f"{data['prog']} {sub_c['name'] if isinstance(sub_c['name'], str) else sub_c['name'][0]} --help" + for sub_c in data["subcommands"]["commands"] + ] + + return cmds + + +def _export_cmd_as_svg(cmd: str, file_name: str) -> None: + stdout = subprocess.run(cmd, shell=True, capture_output=True).stdout.decode("utf-8") + console = Console(record=True, width=80) + console.print(f"$ {cmd}\n{stdout}") + console.save_svg(file_name, title="") + + +if __name__ == "__main__": + gen_cli_help_screenshots() From 9d6c0877a20e3aff7d24f653d9224cb2c9e26bdf Mon Sep 17 00:00:00 2001 From: ellie <bc70522@gmail.com> Date: Fri, 5 Apr 2024 13:20:44 +0800 Subject: [PATCH 193/685] docs(docs/images): add cli help screenshots (not used yet) --- docs/images/cli_help/cz___help.svg | 198 ++++++++++ docs/images/cli_help/cz_bump___help.svg | 373 +++++++++++++++++++ docs/images/cli_help/cz_changelog___help.svg | 217 +++++++++++ docs/images/cli_help/cz_check___help.svg | 149 ++++++++ docs/images/cli_help/cz_commit___help.svg | 123 ++++++ docs/images/cli_help/cz_example___help.svg | 79 ++++ docs/images/cli_help/cz_info___help.svg | 79 ++++ docs/images/cli_help/cz_init___help.svg | 79 ++++ docs/images/cli_help/cz_ls___help.svg | 79 ++++ docs/images/cli_help/cz_schema___help.svg | 79 ++++ docs/images/cli_help/cz_version___help.svg | 99 +++++ 11 files changed, 1554 insertions(+) create mode 100644 docs/images/cli_help/cz___help.svg create mode 100644 docs/images/cli_help/cz_bump___help.svg create mode 100644 docs/images/cli_help/cz_changelog___help.svg create mode 100644 docs/images/cli_help/cz_check___help.svg create mode 100644 docs/images/cli_help/cz_commit___help.svg create mode 100644 docs/images/cli_help/cz_example___help.svg create mode 100644 docs/images/cli_help/cz_info___help.svg create mode 100644 docs/images/cli_help/cz_init___help.svg create mode 100644 docs/images/cli_help/cz_ls___help.svg create mode 100644 docs/images/cli_help/cz_schema___help.svg create mode 100644 docs/images/cli_help/cz_version___help.svg diff --git a/docs/images/cli_help/cz___help.svg b/docs/images/cli_help/cz___help.svg new file mode 100644 index 0000000000..07b23d558f --- /dev/null +++ b/docs/images/cli_help/cz___help.svg @@ -0,0 +1,198 @@ +<svg class="rich-terminal" viewBox="0 0 994 904.0" xmlns="http://www.w3.org/2000/svg"> + <!-- Generated with Rich https://www.textualize.io --> + <style> + + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Regular"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff"); + font-style: normal; + font-weight: 400; + } + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Bold"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff"); + font-style: bold; + font-weight: 700; + } + + .terminal-911685263-matrix { + font-family: Fira Code, monospace; + font-size: 20px; + line-height: 24.4px; + font-variant-east-asian: full-width; + } + + .terminal-911685263-title { + font-size: 18px; + font-weight: bold; + font-family: arial; + } + + .terminal-911685263-r1 { fill: #c5c8c6 } +.terminal-911685263-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-911685263-r3 { fill: #d0b344 } +.terminal-911685263-r4 { fill: #1984e9;text-decoration: underline; } +.terminal-911685263-r5 { fill: #68a0b3;font-weight: bold } + </style> + + <defs> + <clipPath id="terminal-911685263-clip-terminal"> + <rect x="0" y="0" width="975.0" height="853.0" /> + </clipPath> + <clipPath id="terminal-911685263-line-0"> + <rect x="0" y="1.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-1"> + <rect x="0" y="25.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-2"> + <rect x="0" y="50.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-3"> + <rect x="0" y="74.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-4"> + <rect x="0" y="99.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-5"> + <rect x="0" y="123.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-6"> + <rect x="0" y="147.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-7"> + <rect x="0" y="172.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-8"> + <rect x="0" y="196.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-9"> + <rect x="0" y="221.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-10"> + <rect x="0" y="245.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-11"> + <rect x="0" y="269.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-12"> + <rect x="0" y="294.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-13"> + <rect x="0" y="318.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-14"> + <rect x="0" y="343.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-15"> + <rect x="0" y="367.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-16"> + <rect x="0" y="391.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-17"> + <rect x="0" y="416.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-18"> + <rect x="0" y="440.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-19"> + <rect x="0" y="465.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-20"> + <rect x="0" y="489.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-21"> + <rect x="0" y="513.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-22"> + <rect x="0" y="538.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-23"> + <rect x="0" y="562.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-24"> + <rect x="0" y="587.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-25"> + <rect x="0" y="611.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-26"> + <rect x="0" y="635.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-27"> + <rect x="0" y="660.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-28"> + <rect x="0" y="684.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-29"> + <rect x="0" y="709.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-30"> + <rect x="0" y="733.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-31"> + <rect x="0" y="757.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-32"> + <rect x="0" y="782.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-911685263-line-33"> + <rect x="0" y="806.7" width="976" height="24.65"/> + </clipPath> + </defs> + + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="902" rx="8"/> + <g transform="translate(26,22)"> + <circle cx="0" cy="0" r="7" fill="#ff5f57"/> + <circle cx="22" cy="0" r="7" fill="#febc2e"/> + <circle cx="44" cy="0" r="7" fill="#28c840"/> + </g> + + <g transform="translate(9, 41)" clip-path="url(#terminal-911685263-clip-terminal)"> + + <g class="terminal-911685263-matrix"> + <text class="terminal-911685263-r1" x="0" y="20" textLength="134.2" clip-path="url(#terminal-911685263-line-0)">$ cz --help</text><text class="terminal-911685263-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-911685263-line-0)"> +</text><text class="terminal-911685263-r1" x="0" y="44.4" textLength="122" clip-path="url(#terminal-911685263-line-1)">usage: cz </text><text class="terminal-911685263-r2" x="122" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">[</text><text class="terminal-911685263-r1" x="134.2" y="44.4" textLength="24.4" clip-path="url(#terminal-911685263-line-1)">-h</text><text class="terminal-911685263-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">]</text><text class="terminal-911685263-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">[</text><text class="terminal-911685263-r1" x="195.2" y="44.4" textLength="85.4" clip-path="url(#terminal-911685263-line-1)">--debug</text><text class="terminal-911685263-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">]</text><text class="terminal-911685263-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">[</text><text class="terminal-911685263-r1" x="317.2" y="44.4" textLength="85.4" clip-path="url(#terminal-911685263-line-1)">-n NAME</text><text class="terminal-911685263-r2" x="402.6" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">]</text><text class="terminal-911685263-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">[</text><text class="terminal-911685263-r1" x="439.2" y="44.4" textLength="146.4" clip-path="url(#terminal-911685263-line-1)">-nr NO_RAISE</text><text class="terminal-911685263-r2" x="585.6" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">]</text><text class="terminal-911685263-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)"> +</text><text class="terminal-911685263-r2" x="122" y="68.8" textLength="12.2" clip-path="url(#terminal-911685263-line-2)">{</text><text class="terminal-911685263-r1" x="134.2" y="68.8" textLength="829.6" clip-path="url(#terminal-911685263-line-2)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-911685263-r2" x="963.8" y="68.8" textLength="12.2" clip-path="url(#terminal-911685263-line-2)">}</text><text class="terminal-911685263-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-911685263-line-2)"> +</text><text class="terminal-911685263-r3" x="122" y="93.2" textLength="36.6" clip-path="url(#terminal-911685263-line-3)">...</text><text class="terminal-911685263-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-911685263-line-3)"> +</text><text class="terminal-911685263-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-911685263-line-4)"> +</text><text class="terminal-911685263-r1" x="0" y="142" textLength="707.6" clip-path="url(#terminal-911685263-line-5)">Commitizen is a cli tool to generate conventional commits.</text><text class="terminal-911685263-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-911685263-line-5)"> +</text><text class="terminal-911685263-r1" x="0" y="166.4" textLength="524.6" clip-path="url(#terminal-911685263-line-6)">For more information about the topic go to </text><text class="terminal-911685263-r4" x="524.6" y="166.4" textLength="390.4" clip-path="url(#terminal-911685263-line-6)">https://conventionalcommits.org/</text><text class="terminal-911685263-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-911685263-line-6)"> +</text><text class="terminal-911685263-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-911685263-line-7)"> +</text><text class="terminal-911685263-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-911685263-line-8)">options:</text><text class="terminal-911685263-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-911685263-line-8)"> +</text><text class="terminal-911685263-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-911685263-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-911685263-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-911685263-line-9)"> +</text><text class="terminal-911685263-r1" x="0" y="264" textLength="463.6" clip-path="url(#terminal-911685263-line-10)">  --debug               use debug mode</text><text class="terminal-911685263-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-911685263-line-10)"> +</text><text class="terminal-911685263-r1" x="0" y="288.4" textLength="597.8" clip-path="url(#terminal-911685263-line-11)">  -n NAME, --name NAME  use the given commitizen </text><text class="terminal-911685263-r2" x="597.8" y="288.4" textLength="12.2" clip-path="url(#terminal-911685263-line-11)">(</text><text class="terminal-911685263-r1" x="610" y="288.4" textLength="97.6" clip-path="url(#terminal-911685263-line-11)">default:</text><text class="terminal-911685263-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-911685263-line-11)"> +</text><text class="terminal-911685263-r1" x="0" y="312.8" textLength="573.4" clip-path="url(#terminal-911685263-line-12)">                        cz_conventional_commits</text><text class="terminal-911685263-r2" x="573.4" y="312.8" textLength="12.2" clip-path="url(#terminal-911685263-line-12)">)</text><text class="terminal-911685263-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-911685263-line-12)"> +</text><text class="terminal-911685263-r1" x="0" y="337.2" textLength="427" clip-path="url(#terminal-911685263-line-13)">  -nr NO_RAISE, --no-raise NO_RAISE</text><text class="terminal-911685263-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-911685263-line-13)"> +</text><text class="terminal-911685263-r1" x="0" y="361.6" textLength="902.8" clip-path="url(#terminal-911685263-line-14)">                        comma separated error codes that won't rise error,</text><text class="terminal-911685263-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-911685263-line-14)"> +</text><text class="terminal-911685263-r1" x="0" y="386" textLength="439.2" clip-path="url(#terminal-911685263-line-15)">                        e.g: cz -nr </text><text class="terminal-911685263-r5" x="439.2" y="386" textLength="12.2" clip-path="url(#terminal-911685263-line-15)">1</text><text class="terminal-911685263-r1" x="451.4" y="386" textLength="12.2" clip-path="url(#terminal-911685263-line-15)">,</text><text class="terminal-911685263-r5" x="463.6" y="386" textLength="12.2" clip-path="url(#terminal-911685263-line-15)">2</text><text class="terminal-911685263-r1" x="475.8" y="386" textLength="12.2" clip-path="url(#terminal-911685263-line-15)">,</text><text class="terminal-911685263-r5" x="488" y="386" textLength="12.2" clip-path="url(#terminal-911685263-line-15)">3</text><text class="terminal-911685263-r1" x="500.2" y="386" textLength="231.8" clip-path="url(#terminal-911685263-line-15)"> bump. See codes at</text><text class="terminal-911685263-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-911685263-line-15)"> +</text><text class="terminal-911685263-r4" x="292.8" y="410.4" textLength="231.8" clip-path="url(#terminal-911685263-line-16)">https://commitizen-</text><text class="terminal-911685263-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-911685263-line-16)"> +</text><text class="terminal-911685263-r1" x="0" y="434.8" textLength="756.4" clip-path="url(#terminal-911685263-line-17)">                        tools.github.io/commitizen/exit_codes/</text><text class="terminal-911685263-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-911685263-line-17)"> +</text><text class="terminal-911685263-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-911685263-line-18)"> +</text><text class="terminal-911685263-r1" x="0" y="483.6" textLength="109.8" clip-path="url(#terminal-911685263-line-19)">commands:</text><text class="terminal-911685263-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-911685263-line-19)"> +</text><text class="terminal-911685263-r2" x="24.4" y="508" textLength="12.2" clip-path="url(#terminal-911685263-line-20)">{</text><text class="terminal-911685263-r1" x="36.6" y="508" textLength="829.6" clip-path="url(#terminal-911685263-line-20)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-911685263-r2" x="866.2" y="508" textLength="12.2" clip-path="url(#terminal-911685263-line-20)">}</text><text class="terminal-911685263-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-911685263-line-20)"> +</text><text class="terminal-911685263-r1" x="0" y="532.4" textLength="646.6" clip-path="url(#terminal-911685263-line-21)">    init                init commitizen configuration</text><text class="terminal-911685263-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-911685263-line-21)"> +</text><text class="terminal-911685263-r1" x="0" y="556.8" textLength="134.2" clip-path="url(#terminal-911685263-line-22)">    commit </text><text class="terminal-911685263-r2" x="134.2" y="556.8" textLength="12.2" clip-path="url(#terminal-911685263-line-22)">(</text><text class="terminal-911685263-r1" x="146.4" y="556.8" textLength="12.2" clip-path="url(#terminal-911685263-line-22)">c</text><text class="terminal-911685263-r2" x="158.6" y="556.8" textLength="12.2" clip-path="url(#terminal-911685263-line-22)">)</text><text class="terminal-911685263-r1" x="170.8" y="556.8" textLength="329.4" clip-path="url(#terminal-911685263-line-22)">          create new commit</text><text class="terminal-911685263-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-911685263-line-22)"> +</text><text class="terminal-911685263-r1" x="0" y="581.2" textLength="610" clip-path="url(#terminal-911685263-line-23)">    ls                  show available commitizens</text><text class="terminal-911685263-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-911685263-line-23)"> +</text><text class="terminal-911685263-r1" x="0" y="605.6" textLength="524.6" clip-path="url(#terminal-911685263-line-24)">    example             show commit example</text><text class="terminal-911685263-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-911685263-line-24)"> +</text><text class="terminal-911685263-r1" x="0" y="630" textLength="646.6" clip-path="url(#terminal-911685263-line-25)">    info                show information about the cz</text><text class="terminal-911685263-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-911685263-line-25)"> +</text><text class="terminal-911685263-r1" x="0" y="654.4" textLength="512.4" clip-path="url(#terminal-911685263-line-26)">    schema              show commit schema</text><text class="terminal-911685263-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-911685263-line-26)"> +</text><text class="terminal-911685263-r1" x="0" y="678.8" textLength="805.2" clip-path="url(#terminal-911685263-line-27)">    bump                bump semantic version based on the git log</text><text class="terminal-911685263-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-911685263-line-27)"> +</text><text class="terminal-911685263-r1" x="0" y="703.2" textLength="170.8" clip-path="url(#terminal-911685263-line-28)">    changelog </text><text class="terminal-911685263-r2" x="170.8" y="703.2" textLength="12.2" clip-path="url(#terminal-911685263-line-28)">(</text><text class="terminal-911685263-r1" x="183" y="703.2" textLength="24.4" clip-path="url(#terminal-911685263-line-28)">ch</text><text class="terminal-911685263-r2" x="207.4" y="703.2" textLength="12.2" clip-path="url(#terminal-911685263-line-28)">)</text><text class="terminal-911685263-r1" x="219.6" y="703.2" textLength="305" clip-path="url(#terminal-911685263-line-28)">      generate changelog </text><text class="terminal-911685263-r2" x="524.6" y="703.2" textLength="12.2" clip-path="url(#terminal-911685263-line-28)">(</text><text class="terminal-911685263-r1" x="536.8" y="703.2" textLength="329.4" clip-path="url(#terminal-911685263-line-28)">note that it will overwrite</text><text class="terminal-911685263-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-911685263-line-28)"> +</text><text class="terminal-911685263-r1" x="0" y="727.6" textLength="451.4" clip-path="url(#terminal-911685263-line-29)">                        existing file</text><text class="terminal-911685263-r2" x="451.4" y="727.6" textLength="12.2" clip-path="url(#terminal-911685263-line-29)">)</text><text class="terminal-911685263-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-911685263-line-29)"> +</text><text class="terminal-911685263-r1" x="0" y="752" textLength="951.6" clip-path="url(#terminal-911685263-line-30)">    check               validates that a commit message matches the commitizen</text><text class="terminal-911685263-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-911685263-line-30)"> +</text><text class="terminal-911685263-r1" x="0" y="776.4" textLength="366" clip-path="url(#terminal-911685263-line-31)">                        schema</text><text class="terminal-911685263-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-911685263-line-31)"> +</text><text class="terminal-911685263-r1" x="0" y="800.8" textLength="902.8" clip-path="url(#terminal-911685263-line-32)">    version             get the version of the installed commitizen or the</text><text class="terminal-911685263-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-911685263-line-32)"> +</text><text class="terminal-911685263-r1" x="0" y="825.2" textLength="488" clip-path="url(#terminal-911685263-line-33)">                        current project </text><text class="terminal-911685263-r2" x="488" y="825.2" textLength="12.2" clip-path="url(#terminal-911685263-line-33)">(</text><text class="terminal-911685263-r1" x="500.2" y="825.2" textLength="353.8" clip-path="url(#terminal-911685263-line-33)">default: installed commitizen</text><text class="terminal-911685263-r2" x="854" y="825.2" textLength="12.2" clip-path="url(#terminal-911685263-line-33)">)</text><text class="terminal-911685263-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-911685263-line-33)"> +</text><text class="terminal-911685263-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-911685263-line-34)"> +</text> + </g> + </g> +</svg> diff --git a/docs/images/cli_help/cz_bump___help.svg b/docs/images/cli_help/cz_bump___help.svg new file mode 100644 index 0000000000..18d402f16e --- /dev/null +++ b/docs/images/cli_help/cz_bump___help.svg @@ -0,0 +1,373 @@ +<svg class="rich-terminal" viewBox="0 0 994 1977.6" xmlns="http://www.w3.org/2000/svg"> + <!-- Generated with Rich https://www.textualize.io --> + <style> + + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Regular"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff"); + font-style: normal; + font-weight: 400; + } + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Bold"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff"); + font-style: bold; + font-weight: 700; + } + + .terminal-2106414123-matrix { + font-family: Fira Code, monospace; + font-size: 20px; + line-height: 24.4px; + font-variant-east-asian: full-width; + } + + .terminal-2106414123-title { + font-size: 18px; + font-weight: bold; + font-family: arial; + } + + .terminal-2106414123-r1 { fill: #c5c8c6 } +.terminal-2106414123-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-2106414123-r3 { fill: #68a0b3;font-weight: bold } +.terminal-2106414123-r4 { fill: #98a84b } + </style> + + <defs> + <clipPath id="terminal-2106414123-clip-terminal"> + <rect x="0" y="0" width="975.0" height="1926.6" /> + </clipPath> + <clipPath id="terminal-2106414123-line-0"> + <rect x="0" y="1.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-1"> + <rect x="0" y="25.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-2"> + <rect x="0" y="50.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-3"> + <rect x="0" y="74.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-4"> + <rect x="0" y="99.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-5"> + <rect x="0" y="123.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-6"> + <rect x="0" y="147.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-7"> + <rect x="0" y="172.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-8"> + <rect x="0" y="196.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-9"> + <rect x="0" y="221.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-10"> + <rect x="0" y="245.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-11"> + <rect x="0" y="269.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-12"> + <rect x="0" y="294.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-13"> + <rect x="0" y="318.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-14"> + <rect x="0" y="343.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-15"> + <rect x="0" y="367.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-16"> + <rect x="0" y="391.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-17"> + <rect x="0" y="416.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-18"> + <rect x="0" y="440.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-19"> + <rect x="0" y="465.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-20"> + <rect x="0" y="489.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-21"> + <rect x="0" y="513.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-22"> + <rect x="0" y="538.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-23"> + <rect x="0" y="562.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-24"> + <rect x="0" y="587.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-25"> + <rect x="0" y="611.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-26"> + <rect x="0" y="635.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-27"> + <rect x="0" y="660.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-28"> + <rect x="0" y="684.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-29"> + <rect x="0" y="709.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-30"> + <rect x="0" y="733.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-31"> + <rect x="0" y="757.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-32"> + <rect x="0" y="782.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-33"> + <rect x="0" y="806.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-34"> + <rect x="0" y="831.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-35"> + <rect x="0" y="855.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-36"> + <rect x="0" y="879.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-37"> + <rect x="0" y="904.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-38"> + <rect x="0" y="928.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-39"> + <rect x="0" y="953.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-40"> + <rect x="0" y="977.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-41"> + <rect x="0" y="1001.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-42"> + <rect x="0" y="1026.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-43"> + <rect x="0" y="1050.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-44"> + <rect x="0" y="1075.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-45"> + <rect x="0" y="1099.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-46"> + <rect x="0" y="1123.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-47"> + <rect x="0" y="1148.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-48"> + <rect x="0" y="1172.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-49"> + <rect x="0" y="1197.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-50"> + <rect x="0" y="1221.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-51"> + <rect x="0" y="1245.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-52"> + <rect x="0" y="1270.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-53"> + <rect x="0" y="1294.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-54"> + <rect x="0" y="1319.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-55"> + <rect x="0" y="1343.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-56"> + <rect x="0" y="1367.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-57"> + <rect x="0" y="1392.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-58"> + <rect x="0" y="1416.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-59"> + <rect x="0" y="1441.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-60"> + <rect x="0" y="1465.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-61"> + <rect x="0" y="1489.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-62"> + <rect x="0" y="1514.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-63"> + <rect x="0" y="1538.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-64"> + <rect x="0" y="1563.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-65"> + <rect x="0" y="1587.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-66"> + <rect x="0" y="1611.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-67"> + <rect x="0" y="1636.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-68"> + <rect x="0" y="1660.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-69"> + <rect x="0" y="1685.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-70"> + <rect x="0" y="1709.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-71"> + <rect x="0" y="1733.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-72"> + <rect x="0" y="1758.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-73"> + <rect x="0" y="1782.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-74"> + <rect x="0" y="1807.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-75"> + <rect x="0" y="1831.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-76"> + <rect x="0" y="1855.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2106414123-line-77"> + <rect x="0" y="1880.3" width="976" height="24.65"/> + </clipPath> + </defs> + + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="1975.6" rx="8"/> + <g transform="translate(26,22)"> + <circle cx="0" cy="0" r="7" fill="#ff5f57"/> + <circle cx="22" cy="0" r="7" fill="#febc2e"/> + <circle cx="44" cy="0" r="7" fill="#28c840"/> + </g> + + <g transform="translate(9, 41)" clip-path="url(#terminal-2106414123-clip-terminal)"> + + <g class="terminal-2106414123-matrix"> + <text class="terminal-2106414123-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-2106414123-line-0)">$ cz bump --help</text><text class="terminal-2106414123-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2106414123-line-0)"> +</text><text class="terminal-2106414123-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-2106414123-line-1)">usage: cz bump </text><text class="terminal-2106414123-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">[</text><text class="terminal-2106414123-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2106414123-line-1)">-h</text><text class="terminal-2106414123-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">]</text><text class="terminal-2106414123-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">[</text><text class="terminal-2106414123-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-2106414123-line-1)">--dry-run</text><text class="terminal-2106414123-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">]</text><text class="terminal-2106414123-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">[</text><text class="terminal-2106414123-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-2106414123-line-1)">--files-only</text><text class="terminal-2106414123-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">]</text><text class="terminal-2106414123-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">[</text><text class="terminal-2106414123-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-2106414123-line-1)">--local-version</text><text class="terminal-2106414123-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">]</text><text class="terminal-2106414123-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">[</text><text class="terminal-2106414123-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-2106414123-line-1)">--changelog</text><text class="terminal-2106414123-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">]</text><text class="terminal-2106414123-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)"> +</text><text class="terminal-2106414123-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)">[</text><text class="terminal-2106414123-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-2106414123-line-2)">--no-verify</text><text class="terminal-2106414123-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)">]</text><text class="terminal-2106414123-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)">[</text><text class="terminal-2106414123-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-2106414123-line-2)">--yes</text><text class="terminal-2106414123-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)">]</text><text class="terminal-2106414123-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)">[</text><text class="terminal-2106414123-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-2106414123-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-2106414123-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)">]</text><text class="terminal-2106414123-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)"> +</text><text class="terminal-2106414123-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)">[</text><text class="terminal-2106414123-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-2106414123-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-2106414123-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)">]</text><text class="terminal-2106414123-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)">[</text><text class="terminal-2106414123-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-2106414123-line-3)">--prerelease </text><text class="terminal-2106414123-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)">{</text><text class="terminal-2106414123-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-2106414123-line-3)">alpha,beta,rc</text><text class="terminal-2106414123-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)">}</text><text class="terminal-2106414123-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)">]</text><text class="terminal-2106414123-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)"> +</text><text class="terminal-2106414123-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)">[</text><text class="terminal-2106414123-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-2106414123-line-4)">--devrelease DEVRELEASE</text><text class="terminal-2106414123-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)">]</text><text class="terminal-2106414123-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)">[</text><text class="terminal-2106414123-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-2106414123-line-4)">--increment </text><text class="terminal-2106414123-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)">{</text><text class="terminal-2106414123-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-2106414123-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-2106414123-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)">}</text><text class="terminal-2106414123-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)">]</text><text class="terminal-2106414123-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)"> +</text><text class="terminal-2106414123-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)">[</text><text class="terminal-2106414123-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-2106414123-line-5)">--increment-mode </text><text class="terminal-2106414123-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)">{</text><text class="terminal-2106414123-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-2106414123-line-5)">linear,exact</text><text class="terminal-2106414123-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)">}</text><text class="terminal-2106414123-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)">]</text><text class="terminal-2106414123-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)">[</text><text class="terminal-2106414123-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-2106414123-line-5)">--check-consistency</text><text class="terminal-2106414123-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)">]</text><text class="terminal-2106414123-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)"> +</text><text class="terminal-2106414123-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-6)">[</text><text class="terminal-2106414123-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-2106414123-line-6)">--annotated-tag</text><text class="terminal-2106414123-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-6)">]</text><text class="terminal-2106414123-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-6)"> +</text><text class="terminal-2106414123-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-7)">[</text><text class="terminal-2106414123-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-2106414123-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-2106414123-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-7)">]</text><text class="terminal-2106414123-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-7)">[</text><text class="terminal-2106414123-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-2106414123-line-7)">--gpg-sign</text><text class="terminal-2106414123-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-7)">]</text><text class="terminal-2106414123-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-7)"> +</text><text class="terminal-2106414123-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)">[</text><text class="terminal-2106414123-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-2106414123-line-8)">--changelog-to-stdout</text><text class="terminal-2106414123-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)">]</text><text class="terminal-2106414123-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)">[</text><text class="terminal-2106414123-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-2106414123-line-8)">--git-output-to-stderr</text><text class="terminal-2106414123-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)">]</text><text class="terminal-2106414123-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)">[</text><text class="terminal-2106414123-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-2106414123-line-8)">--retry</text><text class="terminal-2106414123-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)">]</text><text class="terminal-2106414123-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)"> +</text><text class="terminal-2106414123-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)">[</text><text class="terminal-2106414123-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-2106414123-line-9)">--major-version-zero</text><text class="terminal-2106414123-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)">]</text><text class="terminal-2106414123-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)">[</text><text class="terminal-2106414123-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-2106414123-line-9)">--template TEMPLATE</text><text class="terminal-2106414123-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)">]</text><text class="terminal-2106414123-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)">[</text><text class="terminal-2106414123-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-2106414123-line-9)">--extra EXTRA</text><text class="terminal-2106414123-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)">]</text><text class="terminal-2106414123-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)"> +</text><text class="terminal-2106414123-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-2106414123-line-10)">[</text><text class="terminal-2106414123-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-2106414123-line-10)">--file-name FILE_NAME</text><text class="terminal-2106414123-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-2106414123-line-10)">]</text><text class="terminal-2106414123-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-2106414123-line-10)">[</text><text class="terminal-2106414123-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-2106414123-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-2106414123-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-2106414123-line-10)">]</text><text class="terminal-2106414123-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2106414123-line-10)"> +</text><text class="terminal-2106414123-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-11)">[</text><text class="terminal-2106414123-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-2106414123-line-11)">--version-scheme </text><text class="terminal-2106414123-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-11)">{</text><text class="terminal-2106414123-r1" x="414.8" y="288.4" textLength="158.6" clip-path="url(#terminal-2106414123-line-11)">semver,pep440</text><text class="terminal-2106414123-r2" x="573.4" y="288.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-11)">}</text><text class="terminal-2106414123-r2" x="585.6" y="288.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-11)">]</text><text class="terminal-2106414123-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-11)"> +</text><text class="terminal-2106414123-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-12)">[</text><text class="terminal-2106414123-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-2106414123-line-12)">--version-type </text><text class="terminal-2106414123-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-12)">{</text><text class="terminal-2106414123-r1" x="390.4" y="312.8" textLength="158.6" clip-path="url(#terminal-2106414123-line-12)">semver,pep440</text><text class="terminal-2106414123-r2" x="549" y="312.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-12)">}</text><text class="terminal-2106414123-r2" x="561.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-12)">]</text><text class="terminal-2106414123-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-12)"> +</text><text class="terminal-2106414123-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-13)">[</text><text class="terminal-2106414123-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-2106414123-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-2106414123-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-13)">]</text><text class="terminal-2106414123-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-13)"> +</text><text class="terminal-2106414123-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-14)">[</text><text class="terminal-2106414123-r1" x="195.2" y="361.6" textLength="170.8" clip-path="url(#terminal-2106414123-line-14)">MANUAL_VERSION</text><text class="terminal-2106414123-r2" x="366" y="361.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-14)">]</text><text class="terminal-2106414123-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-14)"> +</text><text class="terminal-2106414123-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2106414123-line-15)"> +</text><text class="terminal-2106414123-r1" x="0" y="410.4" textLength="256.2" clip-path="url(#terminal-2106414123-line-16)">positional arguments:</text><text class="terminal-2106414123-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-16)"> +</text><text class="terminal-2106414123-r1" x="0" y="434.8" textLength="610" clip-path="url(#terminal-2106414123-line-17)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-2106414123-r2" x="610" y="434.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-17)">(</text><text class="terminal-2106414123-r1" x="622.2" y="434.8" textLength="61" clip-path="url(#terminal-2106414123-line-17)">e.g: </text><text class="terminal-2106414123-r3" x="683.2" y="434.8" textLength="36.6" clip-path="url(#terminal-2106414123-line-17)">1.5</text><text class="terminal-2106414123-r1" x="719.8" y="434.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-17)">.</text><text class="terminal-2106414123-r3" x="732" y="434.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-17)">3</text><text class="terminal-2106414123-r2" x="744.2" y="434.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-17)">)</text><text class="terminal-2106414123-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-17)"> +</text><text class="terminal-2106414123-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-18)"> +</text><text class="terminal-2106414123-r1" x="0" y="483.6" textLength="97.6" clip-path="url(#terminal-2106414123-line-19)">options:</text><text class="terminal-2106414123-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-19)"> +</text><text class="terminal-2106414123-r1" x="0" y="508" textLength="671" clip-path="url(#terminal-2106414123-line-20)">  -h, --help            show this help message and exit</text><text class="terminal-2106414123-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2106414123-line-20)"> +</text><text class="terminal-2106414123-r1" x="0" y="532.4" textLength="915" clip-path="url(#terminal-2106414123-line-21)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-2106414123-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-21)"> +</text><text class="terminal-2106414123-r1" x="0" y="556.8" textLength="793" clip-path="url(#terminal-2106414123-line-22)">  --files-only          bump version in the files from the config</text><text class="terminal-2106414123-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-22)"> +</text><text class="terminal-2106414123-r1" x="0" y="581.2" textLength="719.8" clip-path="url(#terminal-2106414123-line-23)">  --local-version       bump only the local version portion</text><text class="terminal-2106414123-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-23)"> +</text><text class="terminal-2106414123-r1" x="0" y="605.6" textLength="841.8" clip-path="url(#terminal-2106414123-line-24)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-2106414123-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-24)"> +</text><text class="terminal-2106414123-r1" x="0" y="630" textLength="902.8" clip-path="url(#terminal-2106414123-line-25)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-2106414123-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2106414123-line-25)"> +</text><text class="terminal-2106414123-r1" x="0" y="654.4" textLength="353.8" clip-path="url(#terminal-2106414123-line-26)">                        hooks</text><text class="terminal-2106414123-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-26)"> +</text><text class="terminal-2106414123-r1" x="0" y="678.8" textLength="719.8" clip-path="url(#terminal-2106414123-line-27)">  --yes                 accept automatically questions done</text><text class="terminal-2106414123-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-27)"> +</text><text class="terminal-2106414123-r1" x="0" y="703.2" textLength="305" clip-path="url(#terminal-2106414123-line-28)">  --tag-format TAG_FORMAT</text><text class="terminal-2106414123-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-28)"> +</text><text class="terminal-2106414123-r1" x="0" y="727.6" textLength="939.4" clip-path="url(#terminal-2106414123-line-29)">                        the format used to tag the commit and read it, use it</text><text class="terminal-2106414123-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-29)"> +</text><text class="terminal-2106414123-r1" x="0" y="752" textLength="866.2" clip-path="url(#terminal-2106414123-line-30)">                        in existing projects, wrap around simple quotes</text><text class="terminal-2106414123-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-2106414123-line-30)"> +</text><text class="terminal-2106414123-r1" x="0" y="776.4" textLength="353.8" clip-path="url(#terminal-2106414123-line-31)">  --bump-message BUMP_MESSAGE</text><text class="terminal-2106414123-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-31)"> +</text><text class="terminal-2106414123-r1" x="0" y="800.8" textLength="902.8" clip-path="url(#terminal-2106414123-line-32)">                        template used to create the release commit, useful</text><text class="terminal-2106414123-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-32)"> +</text><text class="terminal-2106414123-r1" x="0" y="825.2" textLength="536.8" clip-path="url(#terminal-2106414123-line-33)">                        when working with CI</text><text class="terminal-2106414123-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-33)"> +</text><text class="terminal-2106414123-r1" x="0" y="849.6" textLength="183" clip-path="url(#terminal-2106414123-line-34)">  --prerelease </text><text class="terminal-2106414123-r2" x="183" y="849.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-34)">{</text><text class="terminal-2106414123-r1" x="195.2" y="849.6" textLength="158.6" clip-path="url(#terminal-2106414123-line-34)">alpha,beta,rc</text><text class="terminal-2106414123-r2" x="353.8" y="849.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-34)">}</text><text class="terminal-2106414123-r1" x="366" y="849.6" textLength="73.2" clip-path="url(#terminal-2106414123-line-34)">, -pr </text><text class="terminal-2106414123-r2" x="439.2" y="849.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-34)">{</text><text class="terminal-2106414123-r1" x="451.4" y="849.6" textLength="158.6" clip-path="url(#terminal-2106414123-line-34)">alpha,beta,rc</text><text class="terminal-2106414123-r2" x="610" y="849.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-34)">}</text><text class="terminal-2106414123-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-34)"> +</text><text class="terminal-2106414123-r1" x="0" y="874" textLength="597.8" clip-path="url(#terminal-2106414123-line-35)">                        choose type of prerelease</text><text class="terminal-2106414123-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-2106414123-line-35)"> +</text><text class="terminal-2106414123-r1" x="0" y="898.4" textLength="488" clip-path="url(#terminal-2106414123-line-36)">  --devrelease DEVRELEASE, -d DEVRELEASE</text><text class="terminal-2106414123-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-36)"> +</text><text class="terminal-2106414123-r1" x="0" y="922.8" textLength="841.8" clip-path="url(#terminal-2106414123-line-37)">                        specify non-negative integer for dev. release</text><text class="terminal-2106414123-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-37)"> +</text><text class="terminal-2106414123-r1" x="0" y="947.2" textLength="170.8" clip-path="url(#terminal-2106414123-line-38)">  --increment </text><text class="terminal-2106414123-r2" x="170.8" y="947.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-38)">{</text><text class="terminal-2106414123-r1" x="183" y="947.2" textLength="207.4" clip-path="url(#terminal-2106414123-line-38)">MAJOR,MINOR,PATCH</text><text class="terminal-2106414123-r2" x="390.4" y="947.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-38)">}</text><text class="terminal-2106414123-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-38)"> +</text><text class="terminal-2106414123-r1" x="0" y="971.6" textLength="756.4" clip-path="url(#terminal-2106414123-line-39)">                        manually specify the desired increment</text><text class="terminal-2106414123-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-39)"> +</text><text class="terminal-2106414123-r1" x="0" y="996" textLength="231.8" clip-path="url(#terminal-2106414123-line-40)">  --increment-mode </text><text class="terminal-2106414123-r2" x="231.8" y="996" textLength="12.2" clip-path="url(#terminal-2106414123-line-40)">{</text><text class="terminal-2106414123-r1" x="244" y="996" textLength="146.4" clip-path="url(#terminal-2106414123-line-40)">linear,exact</text><text class="terminal-2106414123-r2" x="390.4" y="996" textLength="12.2" clip-path="url(#terminal-2106414123-line-40)">}</text><text class="terminal-2106414123-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-2106414123-line-40)"> +</text><text class="terminal-2106414123-r1" x="0" y="1020.4" textLength="902.8" clip-path="url(#terminal-2106414123-line-41)">                        set the method by which the new version is chosen.</text><text class="terminal-2106414123-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-41)"> +</text><text class="terminal-2106414123-r4" x="292.8" y="1044.8" textLength="97.6" clip-path="url(#terminal-2106414123-line-42)">'linear'</text><text class="terminal-2106414123-r2" x="402.6" y="1044.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-42)">(</text><text class="terminal-2106414123-r1" x="414.8" y="1044.8" textLength="85.4" clip-path="url(#terminal-2106414123-line-42)">default</text><text class="terminal-2106414123-r2" x="500.2" y="1044.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-42)">)</text><text class="terminal-2106414123-r1" x="512.4" y="1044.8" textLength="414.8" clip-path="url(#terminal-2106414123-line-42)"> guesses the next version based on</text><text class="terminal-2106414123-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-42)"> +</text><text class="terminal-2106414123-r1" x="0" y="1069.2" textLength="939.4" clip-path="url(#terminal-2106414123-line-43)">                        typical linear version progression, such that bumping</text><text class="terminal-2106414123-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-43)"> +</text><text class="terminal-2106414123-r1" x="0" y="1093.6" textLength="866.2" clip-path="url(#terminal-2106414123-line-44)">                        of a pre-release with lower precedence than the</text><text class="terminal-2106414123-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-44)"> +</text><text class="terminal-2106414123-r1" x="0" y="1118" textLength="939.4" clip-path="url(#terminal-2106414123-line-45)">                        current pre-release phase maintains the current phase</text><text class="terminal-2106414123-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-2106414123-line-45)"> +</text><text class="terminal-2106414123-r1" x="0" y="1142.4" textLength="561.2" clip-path="url(#terminal-2106414123-line-46)">                        of higher precedence. </text><text class="terminal-2106414123-r4" x="561.2" y="1142.4" textLength="85.4" clip-path="url(#terminal-2106414123-line-46)">'exact'</text><text class="terminal-2106414123-r1" x="646.6" y="1142.4" textLength="305" clip-path="url(#terminal-2106414123-line-46)"> applies the changes that</text><text class="terminal-2106414123-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-46)"> +</text><text class="terminal-2106414123-r1" x="0" y="1166.8" textLength="536.8" clip-path="url(#terminal-2106414123-line-47)">                        have been specified </text><text class="terminal-2106414123-r2" x="536.8" y="1166.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-47)">(</text><text class="terminal-2106414123-r1" x="549" y="1166.8" textLength="353.8" clip-path="url(#terminal-2106414123-line-47)">or determined from the commit</text><text class="terminal-2106414123-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-47)"> +</text><text class="terminal-2106414123-r1" x="0" y="1191.2" textLength="329.4" clip-path="url(#terminal-2106414123-line-48)">                        log</text><text class="terminal-2106414123-r2" x="329.4" y="1191.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-48)">)</text><text class="terminal-2106414123-r1" x="341.6" y="1191.2" textLength="585.6" clip-path="url(#terminal-2106414123-line-48)"> without interpretation, such that the increment</text><text class="terminal-2106414123-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-48)"> +</text><text class="terminal-2106414123-r1" x="0" y="1215.6" textLength="707.6" clip-path="url(#terminal-2106414123-line-49)">                        and pre-release are always honored</text><text class="terminal-2106414123-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-49)"> +</text><text class="terminal-2106414123-r1" x="0" y="1240" textLength="317.2" clip-path="url(#terminal-2106414123-line-50)">  --check-consistency, -cc</text><text class="terminal-2106414123-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-2106414123-line-50)"> +</text><text class="terminal-2106414123-r1" x="0" y="1264.4" textLength="951.6" clip-path="url(#terminal-2106414123-line-51)">                        check consistency among versions defined in commitizen</text><text class="terminal-2106414123-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-51)"> +</text><text class="terminal-2106414123-r1" x="0" y="1288.8" textLength="671" clip-path="url(#terminal-2106414123-line-52)">                        configuration and version_files</text><text class="terminal-2106414123-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-52)"> +</text><text class="terminal-2106414123-r1" x="0" y="1313.2" textLength="866.2" clip-path="url(#terminal-2106414123-line-53)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-2106414123-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-53)"> +</text><text class="terminal-2106414123-r1" x="0" y="1337.6" textLength="915" clip-path="url(#terminal-2106414123-line-54)">  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-2106414123-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-54)"> +</text><text class="terminal-2106414123-r1" x="0" y="1362" textLength="634.4" clip-path="url(#terminal-2106414123-line-55)">                        create annotated tag message</text><text class="terminal-2106414123-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-2106414123-line-55)"> +</text><text class="terminal-2106414123-r1" x="0" y="1386.4" textLength="719.8" clip-path="url(#terminal-2106414123-line-56)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-2106414123-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-56)"> +</text><text class="terminal-2106414123-r1" x="0" y="1410.8" textLength="280.6" clip-path="url(#terminal-2106414123-line-57)">  --changelog-to-stdout</text><text class="terminal-2106414123-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-57)"> +</text><text class="terminal-2106414123-r1" x="0" y="1435.2" textLength="658.8" clip-path="url(#terminal-2106414123-line-58)">                        Output changelog to the stdout</text><text class="terminal-2106414123-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-58)"> +</text><text class="terminal-2106414123-r1" x="0" y="1459.6" textLength="292.8" clip-path="url(#terminal-2106414123-line-59)">  --git-output-to-stderr</text><text class="terminal-2106414123-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-59)"> +</text><text class="terminal-2106414123-r1" x="0" y="1484" textLength="646.6" clip-path="url(#terminal-2106414123-line-60)">                        Redirect git output to stderr</text><text class="terminal-2106414123-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-2106414123-line-60)"> +</text><text class="terminal-2106414123-r1" x="0" y="1508.4" textLength="744.2" clip-path="url(#terminal-2106414123-line-61)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-2106414123-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-61)"> +</text><text class="terminal-2106414123-r1" x="0" y="1532.8" textLength="939.4" clip-path="url(#terminal-2106414123-line-62)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-2106414123-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-62)"> +</text><text class="terminal-2106414123-r1" x="0" y="1557.2" textLength="414.8" clip-path="url(#terminal-2106414123-line-63)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-2106414123-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-63)"> +</text><text class="terminal-2106414123-r1" x="0" y="1581.6" textLength="646.6" clip-path="url(#terminal-2106414123-line-64)">                        changelog template file name </text><text class="terminal-2106414123-r2" x="646.6" y="1581.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-64)">(</text><text class="terminal-2106414123-r1" x="658.8" y="1581.6" textLength="280.6" clip-path="url(#terminal-2106414123-line-64)">relative to the current</text><text class="terminal-2106414123-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-64)"> +</text><text class="terminal-2106414123-r1" x="0" y="1606" textLength="500.2" clip-path="url(#terminal-2106414123-line-65)">                        working directory</text><text class="terminal-2106414123-r2" x="500.2" y="1606" textLength="12.2" clip-path="url(#terminal-2106414123-line-65)">)</text><text class="terminal-2106414123-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-2106414123-line-65)"> +</text><text class="terminal-2106414123-r1" x="0" y="1630.4" textLength="305" clip-path="url(#terminal-2106414123-line-66)">  --extra EXTRA, -e EXTRA</text><text class="terminal-2106414123-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-66)"> +</text><text class="terminal-2106414123-r1" x="0" y="1654.8" textLength="622.2" clip-path="url(#terminal-2106414123-line-67)">                        a changelog extra variable </text><text class="terminal-2106414123-r2" x="622.2" y="1654.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-67)">(</text><text class="terminal-2106414123-r1" x="634.4" y="1654.8" textLength="146.4" clip-path="url(#terminal-2106414123-line-67)">in the form </text><text class="terminal-2106414123-r4" x="780.8" y="1654.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-67)">'</text><text class="terminal-2106414123-r4" x="793" y="1654.8" textLength="36.6" clip-path="url(#terminal-2106414123-line-67)">key</text><text class="terminal-2106414123-r4" x="829.6" y="1654.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-67)">=</text><text class="terminal-2106414123-r4" x="841.8" y="1654.8" textLength="61" clip-path="url(#terminal-2106414123-line-67)">value</text><text class="terminal-2106414123-r4" x="902.8" y="1654.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-67)">'</text><text class="terminal-2106414123-r2" x="915" y="1654.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-67)">)</text><text class="terminal-2106414123-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-67)"> +</text><text class="terminal-2106414123-r1" x="0" y="1679.2" textLength="280.6" clip-path="url(#terminal-2106414123-line-68)">  --file-name FILE_NAME</text><text class="terminal-2106414123-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-68)"> +</text><text class="terminal-2106414123-r1" x="0" y="1703.6" textLength="573.4" clip-path="url(#terminal-2106414123-line-69)">                        file name of changelog </text><text class="terminal-2106414123-r2" x="573.4" y="1703.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-69)">(</text><text class="terminal-2106414123-r1" x="585.6" y="1703.6" textLength="109.8" clip-path="url(#terminal-2106414123-line-69)">default: </text><text class="terminal-2106414123-r4" x="695.4" y="1703.6" textLength="170.8" clip-path="url(#terminal-2106414123-line-69)">'CHANGELOG.md'</text><text class="terminal-2106414123-r2" x="866.2" y="1703.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-69)">)</text><text class="terminal-2106414123-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-69)"> +</text><text class="terminal-2106414123-r1" x="0" y="1728" textLength="475.8" clip-path="url(#terminal-2106414123-line-70)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-2106414123-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-2106414123-line-70)"> +</text><text class="terminal-2106414123-r1" x="0" y="1752.4" textLength="719.8" clip-path="url(#terminal-2106414123-line-71)">                        start pre-releases with this offset</text><text class="terminal-2106414123-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-71)"> +</text><text class="terminal-2106414123-r1" x="0" y="1776.8" textLength="231.8" clip-path="url(#terminal-2106414123-line-72)">  --version-scheme </text><text class="terminal-2106414123-r2" x="231.8" y="1776.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-72)">{</text><text class="terminal-2106414123-r1" x="244" y="1776.8" textLength="158.6" clip-path="url(#terminal-2106414123-line-72)">semver,pep440</text><text class="terminal-2106414123-r2" x="402.6" y="1776.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-72)">}</text><text class="terminal-2106414123-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-72)"> +</text><text class="terminal-2106414123-r1" x="0" y="1801.2" textLength="549" clip-path="url(#terminal-2106414123-line-73)">                        choose version scheme</text><text class="terminal-2106414123-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-73)"> +</text><text class="terminal-2106414123-r1" x="0" y="1825.6" textLength="207.4" clip-path="url(#terminal-2106414123-line-74)">  --version-type </text><text class="terminal-2106414123-r2" x="207.4" y="1825.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-74)">{</text><text class="terminal-2106414123-r1" x="219.6" y="1825.6" textLength="158.6" clip-path="url(#terminal-2106414123-line-74)">semver,pep440</text><text class="terminal-2106414123-r2" x="378.2" y="1825.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-74)">}</text><text class="terminal-2106414123-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-74)"> +</text><text class="terminal-2106414123-r1" x="0" y="1850" textLength="683.2" clip-path="url(#terminal-2106414123-line-75)">                        Deprecated, use --version-scheme</text><text class="terminal-2106414123-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-2106414123-line-75)"> +</text><text class="terminal-2106414123-r1" x="0" y="1874.4" textLength="402.6" clip-path="url(#terminal-2106414123-line-76)">  --build-metadata BUILD_METADATA</text><text class="terminal-2106414123-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-76)"> +</text><text class="terminal-2106414123-r1" x="0" y="1898.8" textLength="915" clip-path="url(#terminal-2106414123-line-77)">                        Add additional build-metadata to the version-number</text><text class="terminal-2106414123-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-77)"> +</text><text class="terminal-2106414123-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-78)"> +</text> + </g> + </g> +</svg> diff --git a/docs/images/cli_help/cz_changelog___help.svg b/docs/images/cli_help/cz_changelog___help.svg new file mode 100644 index 0000000000..4f236ea467 --- /dev/null +++ b/docs/images/cli_help/cz_changelog___help.svg @@ -0,0 +1,217 @@ +<svg class="rich-terminal" viewBox="0 0 994 1026.0" xmlns="http://www.w3.org/2000/svg"> + <!-- Generated with Rich https://www.textualize.io --> + <style> + + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Regular"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff"); + font-style: normal; + font-weight: 400; + } + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Bold"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff"); + font-style: bold; + font-weight: 700; + } + + .terminal-3815852825-matrix { + font-family: Fira Code, monospace; + font-size: 20px; + line-height: 24.4px; + font-variant-east-asian: full-width; + } + + .terminal-3815852825-title { + font-size: 18px; + font-weight: bold; + font-family: arial; + } + + .terminal-3815852825-r1 { fill: #c5c8c6 } +.terminal-3815852825-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-3815852825-r3 { fill: #68a0b3;font-weight: bold } +.terminal-3815852825-r4 { fill: #98a84b } + </style> + + <defs> + <clipPath id="terminal-3815852825-clip-terminal"> + <rect x="0" y="0" width="975.0" height="975.0" /> + </clipPath> + <clipPath id="terminal-3815852825-line-0"> + <rect x="0" y="1.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-1"> + <rect x="0" y="25.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-2"> + <rect x="0" y="50.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-3"> + <rect x="0" y="74.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-4"> + <rect x="0" y="99.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-5"> + <rect x="0" y="123.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-6"> + <rect x="0" y="147.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-7"> + <rect x="0" y="172.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-8"> + <rect x="0" y="196.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-9"> + <rect x="0" y="221.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-10"> + <rect x="0" y="245.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-11"> + <rect x="0" y="269.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-12"> + <rect x="0" y="294.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-13"> + <rect x="0" y="318.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-14"> + <rect x="0" y="343.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-15"> + <rect x="0" y="367.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-16"> + <rect x="0" y="391.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-17"> + <rect x="0" y="416.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-18"> + <rect x="0" y="440.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-19"> + <rect x="0" y="465.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-20"> + <rect x="0" y="489.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-21"> + <rect x="0" y="513.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-22"> + <rect x="0" y="538.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-23"> + <rect x="0" y="562.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-24"> + <rect x="0" y="587.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-25"> + <rect x="0" y="611.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-26"> + <rect x="0" y="635.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-27"> + <rect x="0" y="660.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-28"> + <rect x="0" y="684.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-29"> + <rect x="0" y="709.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-30"> + <rect x="0" y="733.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-31"> + <rect x="0" y="757.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-32"> + <rect x="0" y="782.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-33"> + <rect x="0" y="806.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-34"> + <rect x="0" y="831.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-35"> + <rect x="0" y="855.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-36"> + <rect x="0" y="879.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-37"> + <rect x="0" y="904.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3815852825-line-38"> + <rect x="0" y="928.7" width="976" height="24.65"/> + </clipPath> + </defs> + + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="1024" rx="8"/> + <g transform="translate(26,22)"> + <circle cx="0" cy="0" r="7" fill="#ff5f57"/> + <circle cx="22" cy="0" r="7" fill="#febc2e"/> + <circle cx="44" cy="0" r="7" fill="#28c840"/> + </g> + + <g transform="translate(9, 41)" clip-path="url(#terminal-3815852825-clip-terminal)"> + + <g class="terminal-3815852825-matrix"> + <text class="terminal-3815852825-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-3815852825-line-0)">$ cz changelog --help</text><text class="terminal-3815852825-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3815852825-line-0)"> +</text><text class="terminal-3815852825-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-3815852825-line-1)">usage: cz changelog </text><text class="terminal-3815852825-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)">[</text><text class="terminal-3815852825-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-3815852825-line-1)">-h</text><text class="terminal-3815852825-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)">]</text><text class="terminal-3815852825-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)">[</text><text class="terminal-3815852825-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-3815852825-line-1)">--dry-run</text><text class="terminal-3815852825-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)">]</text><text class="terminal-3815852825-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)">[</text><text class="terminal-3815852825-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-3815852825-line-1)">--file-name FILE_NAME</text><text class="terminal-3815852825-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)">]</text><text class="terminal-3815852825-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)"> +</text><text class="terminal-3815852825-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-2)">[</text><text class="terminal-3815852825-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-3815852825-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-3815852825-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-2)">]</text><text class="terminal-3815852825-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-2)">[</text><text class="terminal-3815852825-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-3815852825-line-2)">--incremental</text><text class="terminal-3815852825-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-2)">]</text><text class="terminal-3815852825-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-2)"> +</text><text class="terminal-3815852825-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-3)">[</text><text class="terminal-3815852825-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-3815852825-line-3)">--start-rev START_REV</text><text class="terminal-3815852825-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-3)">]</text><text class="terminal-3815852825-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-3)">[</text><text class="terminal-3815852825-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-3815852825-line-3)">--merge-prerelease</text><text class="terminal-3815852825-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-3)">]</text><text class="terminal-3815852825-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-3)"> +</text><text class="terminal-3815852825-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-4)">[</text><text class="terminal-3815852825-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-3815852825-line-4)">--version-scheme </text><text class="terminal-3815852825-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-4)">{</text><text class="terminal-3815852825-r1" x="475.8" y="117.6" textLength="158.6" clip-path="url(#terminal-3815852825-line-4)">pep440,semver</text><text class="terminal-3815852825-r2" x="634.4" y="117.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-4)">}</text><text class="terminal-3815852825-r2" x="646.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-4)">]</text><text class="terminal-3815852825-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-4)"> +</text><text class="terminal-3815852825-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-3815852825-line-5)">[</text><text class="terminal-3815852825-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-3815852825-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-3815852825-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-3815852825-line-5)">]</text><text class="terminal-3815852825-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-3815852825-line-5)">[</text><text class="terminal-3815852825-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-3815852825-line-5)">--template TEMPLATE</text><text class="terminal-3815852825-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-3815852825-line-5)">]</text><text class="terminal-3815852825-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3815852825-line-5)"> +</text><text class="terminal-3815852825-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-6)">[</text><text class="terminal-3815852825-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-3815852825-line-6)">--extra EXTRA</text><text class="terminal-3815852825-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-6)">]</text><text class="terminal-3815852825-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-6)"> +</text><text class="terminal-3815852825-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-7)"> +</text><text class="terminal-3815852825-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-8)"> +</text><text class="terminal-3815852825-r1" x="0" y="239.6" textLength="256.2" clip-path="url(#terminal-3815852825-line-9)">positional arguments:</text><text class="terminal-3815852825-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-9)"> +</text><text class="terminal-3815852825-r1" x="0" y="264" textLength="805.2" clip-path="url(#terminal-3815852825-line-10)">  rev_range             generates changelog for the given version </text><text class="terminal-3815852825-r2" x="805.2" y="264" textLength="12.2" clip-path="url(#terminal-3815852825-line-10)">(</text><text class="terminal-3815852825-r1" x="817.4" y="264" textLength="61" clip-path="url(#terminal-3815852825-line-10)">e.g: </text><text class="terminal-3815852825-r3" x="878.4" y="264" textLength="36.6" clip-path="url(#terminal-3815852825-line-10)">1.5</text><text class="terminal-3815852825-r1" x="915" y="264" textLength="12.2" clip-path="url(#terminal-3815852825-line-10)">.</text><text class="terminal-3815852825-r3" x="927.2" y="264" textLength="12.2" clip-path="url(#terminal-3815852825-line-10)">3</text><text class="terminal-3815852825-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-3815852825-line-10)">)</text><text class="terminal-3815852825-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3815852825-line-10)"> +</text><text class="terminal-3815852825-r1" x="0" y="288.4" textLength="500.2" clip-path="url(#terminal-3815852825-line-11)">                        or version range </text><text class="terminal-3815852825-r2" x="500.2" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)">(</text><text class="terminal-3815852825-r1" x="512.4" y="288.4" textLength="61" clip-path="url(#terminal-3815852825-line-11)">e.g: </text><text class="terminal-3815852825-r3" x="573.4" y="288.4" textLength="36.6" clip-path="url(#terminal-3815852825-line-11)">1.5</text><text class="terminal-3815852825-r1" x="610" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)">.</text><text class="terminal-3815852825-r3" x="622.2" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)">3</text><text class="terminal-3815852825-r1" x="634.4" y="288.4" textLength="24.4" clip-path="url(#terminal-3815852825-line-11)">..</text><text class="terminal-3815852825-r3" x="658.8" y="288.4" textLength="36.6" clip-path="url(#terminal-3815852825-line-11)">1.7</text><text class="terminal-3815852825-r1" x="695.4" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)">.</text><text class="terminal-3815852825-r3" x="707.6" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)">9</text><text class="terminal-3815852825-r2" x="719.8" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)">)</text><text class="terminal-3815852825-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)"> +</text><text class="terminal-3815852825-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-12)"> +</text><text class="terminal-3815852825-r1" x="0" y="337.2" textLength="97.6" clip-path="url(#terminal-3815852825-line-13)">options:</text><text class="terminal-3815852825-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-13)"> +</text><text class="terminal-3815852825-r1" x="0" y="361.6" textLength="671" clip-path="url(#terminal-3815852825-line-14)">  -h, --help            show this help message and exit</text><text class="terminal-3815852825-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-14)"> +</text><text class="terminal-3815852825-r1" x="0" y="386" textLength="585.6" clip-path="url(#terminal-3815852825-line-15)">  --dry-run             show changelog to stdout</text><text class="terminal-3815852825-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3815852825-line-15)"> +</text><text class="terminal-3815852825-r1" x="0" y="410.4" textLength="280.6" clip-path="url(#terminal-3815852825-line-16)">  --file-name FILE_NAME</text><text class="terminal-3815852825-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-16)"> +</text><text class="terminal-3815852825-r1" x="0" y="434.8" textLength="573.4" clip-path="url(#terminal-3815852825-line-17)">                        file name of changelog </text><text class="terminal-3815852825-r2" x="573.4" y="434.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-17)">(</text><text class="terminal-3815852825-r1" x="585.6" y="434.8" textLength="109.8" clip-path="url(#terminal-3815852825-line-17)">default: </text><text class="terminal-3815852825-r4" x="695.4" y="434.8" textLength="170.8" clip-path="url(#terminal-3815852825-line-17)">'CHANGELOG.md'</text><text class="terminal-3815852825-r2" x="866.2" y="434.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-17)">)</text><text class="terminal-3815852825-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-17)"> +</text><text class="terminal-3815852825-r1" x="0" y="459.2" textLength="500.2" clip-path="url(#terminal-3815852825-line-18)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-3815852825-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-18)"> +</text><text class="terminal-3815852825-r1" x="0" y="483.6" textLength="707.6" clip-path="url(#terminal-3815852825-line-19)">                        set the value for the new version </text><text class="terminal-3815852825-r2" x="707.6" y="483.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-19)">(</text><text class="terminal-3815852825-r1" x="719.8" y="483.6" textLength="207.4" clip-path="url(#terminal-3815852825-line-19)">use the tag value</text><text class="terminal-3815852825-r2" x="927.2" y="483.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-19)">)</text><text class="terminal-3815852825-r1" x="939.4" y="483.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-19)">,</text><text class="terminal-3815852825-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-19)"> +</text><text class="terminal-3815852825-r1" x="0" y="508" textLength="622.2" clip-path="url(#terminal-3815852825-line-20)">                        instead of using unreleased</text><text class="terminal-3815852825-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3815852825-line-20)"> +</text><text class="terminal-3815852825-r1" x="0" y="532.4" textLength="939.4" clip-path="url(#terminal-3815852825-line-21)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-3815852825-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-21)"> +</text><text class="terminal-3815852825-r1" x="0" y="556.8" textLength="817.4" clip-path="url(#terminal-3815852825-line-22)">                        if the changelog has been manually modified</text><text class="terminal-3815852825-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-22)"> +</text><text class="terminal-3815852825-r1" x="0" y="581.2" textLength="280.6" clip-path="url(#terminal-3815852825-line-23)">  --start-rev START_REV</text><text class="terminal-3815852825-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-23)"> +</text><text class="terminal-3815852825-r1" x="0" y="605.6" textLength="866.2" clip-path="url(#terminal-3815852825-line-24)">                        start rev of the changelog. If not set, it will</text><text class="terminal-3815852825-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-24)"> +</text><text class="terminal-3815852825-r1" x="0" y="630" textLength="695.4" clip-path="url(#terminal-3815852825-line-25)">                        generate changelog from the start</text><text class="terminal-3815852825-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-3815852825-line-25)"> +</text><text class="terminal-3815852825-r1" x="0" y="654.4" textLength="915" clip-path="url(#terminal-3815852825-line-26)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-3815852825-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-26)"> +</text><text class="terminal-3815852825-r1" x="0" y="678.8" textLength="951.6" clip-path="url(#terminal-3815852825-line-27)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-3815852825-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-27)"> +</text><text class="terminal-3815852825-r1" x="0" y="703.2" textLength="451.4" clip-path="url(#terminal-3815852825-line-28)">                        the changelog</text><text class="terminal-3815852825-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-28)"> +</text><text class="terminal-3815852825-r1" x="0" y="727.6" textLength="231.8" clip-path="url(#terminal-3815852825-line-29)">  --version-scheme </text><text class="terminal-3815852825-r2" x="231.8" y="727.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-29)">{</text><text class="terminal-3815852825-r1" x="244" y="727.6" textLength="158.6" clip-path="url(#terminal-3815852825-line-29)">pep440,semver</text><text class="terminal-3815852825-r2" x="402.6" y="727.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-29)">}</text><text class="terminal-3815852825-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-29)"> +</text><text class="terminal-3815852825-r1" x="0" y="752" textLength="549" clip-path="url(#terminal-3815852825-line-30)">                        choose version scheme</text><text class="terminal-3815852825-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-3815852825-line-30)"> +</text><text class="terminal-3815852825-r1" x="0" y="776.4" textLength="427" clip-path="url(#terminal-3815852825-line-31)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-3815852825-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-31)"> +</text><text class="terminal-3815852825-r1" x="0" y="800.8" textLength="927.2" clip-path="url(#terminal-3815852825-line-32)">                        Export the changelog template into this file instead</text><text class="terminal-3815852825-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-32)"> +</text><text class="terminal-3815852825-r1" x="0" y="825.2" textLength="475.8" clip-path="url(#terminal-3815852825-line-33)">                        of rendering it</text><text class="terminal-3815852825-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-33)"> +</text><text class="terminal-3815852825-r1" x="0" y="849.6" textLength="414.8" clip-path="url(#terminal-3815852825-line-34)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-3815852825-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-34)"> +</text><text class="terminal-3815852825-r1" x="0" y="874" textLength="646.6" clip-path="url(#terminal-3815852825-line-35)">                        changelog template file name </text><text class="terminal-3815852825-r2" x="646.6" y="874" textLength="12.2" clip-path="url(#terminal-3815852825-line-35)">(</text><text class="terminal-3815852825-r1" x="658.8" y="874" textLength="280.6" clip-path="url(#terminal-3815852825-line-35)">relative to the current</text><text class="terminal-3815852825-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-3815852825-line-35)"> +</text><text class="terminal-3815852825-r1" x="0" y="898.4" textLength="500.2" clip-path="url(#terminal-3815852825-line-36)">                        working directory</text><text class="terminal-3815852825-r2" x="500.2" y="898.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-36)">)</text><text class="terminal-3815852825-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-36)"> +</text><text class="terminal-3815852825-r1" x="0" y="922.8" textLength="305" clip-path="url(#terminal-3815852825-line-37)">  --extra EXTRA, -e EXTRA</text><text class="terminal-3815852825-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-37)"> +</text><text class="terminal-3815852825-r1" x="0" y="947.2" textLength="622.2" clip-path="url(#terminal-3815852825-line-38)">                        a changelog extra variable </text><text class="terminal-3815852825-r2" x="622.2" y="947.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-38)">(</text><text class="terminal-3815852825-r1" x="634.4" y="947.2" textLength="146.4" clip-path="url(#terminal-3815852825-line-38)">in the form </text><text class="terminal-3815852825-r4" x="780.8" y="947.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-38)">'</text><text class="terminal-3815852825-r4" x="793" y="947.2" textLength="36.6" clip-path="url(#terminal-3815852825-line-38)">key</text><text class="terminal-3815852825-r4" x="829.6" y="947.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-38)">=</text><text class="terminal-3815852825-r4" x="841.8" y="947.2" textLength="61" clip-path="url(#terminal-3815852825-line-38)">value</text><text class="terminal-3815852825-r4" x="902.8" y="947.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-38)">'</text><text class="terminal-3815852825-r2" x="915" y="947.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-38)">)</text><text class="terminal-3815852825-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-38)"> +</text><text class="terminal-3815852825-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-39)"> +</text> + </g> + </g> +</svg> diff --git a/docs/images/cli_help/cz_check___help.svg b/docs/images/cli_help/cz_check___help.svg new file mode 100644 index 0000000000..82dab7282e --- /dev/null +++ b/docs/images/cli_help/cz_check___help.svg @@ -0,0 +1,149 @@ +<svg class="rich-terminal" viewBox="0 0 994 611.1999999999999" xmlns="http://www.w3.org/2000/svg"> + <!-- Generated with Rich https://www.textualize.io --> + <style> + + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Regular"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff"); + font-style: normal; + font-weight: 400; + } + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Bold"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff"); + font-style: bold; + font-weight: 700; + } + + .terminal-3217887475-matrix { + font-family: Fira Code, monospace; + font-size: 20px; + line-height: 24.4px; + font-variant-east-asian: full-width; + } + + .terminal-3217887475-title { + font-size: 18px; + font-weight: bold; + font-family: arial; + } + + .terminal-3217887475-r1 { fill: #c5c8c6 } +.terminal-3217887475-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-3217887475-r3 { fill: #d0b344 } +.terminal-3217887475-r4 { fill: #68a0b3;font-weight: bold } + </style> + + <defs> + <clipPath id="terminal-3217887475-clip-terminal"> + <rect x="0" y="0" width="975.0" height="560.1999999999999" /> + </clipPath> + <clipPath id="terminal-3217887475-line-0"> + <rect x="0" y="1.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-1"> + <rect x="0" y="25.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-2"> + <rect x="0" y="50.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-3"> + <rect x="0" y="74.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-4"> + <rect x="0" y="99.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-5"> + <rect x="0" y="123.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-6"> + <rect x="0" y="147.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-7"> + <rect x="0" y="172.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-8"> + <rect x="0" y="196.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-9"> + <rect x="0" y="221.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-10"> + <rect x="0" y="245.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-11"> + <rect x="0" y="269.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-12"> + <rect x="0" y="294.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-13"> + <rect x="0" y="318.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-14"> + <rect x="0" y="343.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-15"> + <rect x="0" y="367.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-16"> + <rect x="0" y="391.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-17"> + <rect x="0" y="416.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-18"> + <rect x="0" y="440.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-19"> + <rect x="0" y="465.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-20"> + <rect x="0" y="489.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3217887475-line-21"> + <rect x="0" y="513.9" width="976" height="24.65"/> + </clipPath> + </defs> + + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="609.2" rx="8"/> + <g transform="translate(26,22)"> + <circle cx="0" cy="0" r="7" fill="#ff5f57"/> + <circle cx="22" cy="0" r="7" fill="#febc2e"/> + <circle cx="44" cy="0" r="7" fill="#28c840"/> + </g> + + <g transform="translate(9, 41)" clip-path="url(#terminal-3217887475-clip-terminal)"> + + <g class="terminal-3217887475-matrix"> + <text class="terminal-3217887475-r1" x="0" y="20" textLength="207.4" clip-path="url(#terminal-3217887475-line-0)">$ cz check --help</text><text class="terminal-3217887475-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3217887475-line-0)"> +</text><text class="terminal-3217887475-r1" x="0" y="44.4" textLength="195.2" clip-path="url(#terminal-3217887475-line-1)">usage: cz check </text><text class="terminal-3217887475-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-1)">[</text><text class="terminal-3217887475-r1" x="207.4" y="44.4" textLength="24.4" clip-path="url(#terminal-3217887475-line-1)">-h</text><text class="terminal-3217887475-r2" x="231.8" y="44.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-1)">]</text><text class="terminal-3217887475-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-1)"> +</text><text class="terminal-3217887475-r2" x="195.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3217887475-line-2)">[</text><text class="terminal-3217887475-r1" x="207.4" y="68.8" textLength="768.6" clip-path="url(#terminal-3217887475-line-2)">--commit-msg-file COMMIT_MSG_FILE | --rev-range REV_RANGE | -m </text><text class="terminal-3217887475-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3217887475-line-2)"> +</text><text class="terminal-3217887475-r1" x="0" y="93.2" textLength="85.4" clip-path="url(#terminal-3217887475-line-3)">MESSAGE</text><text class="terminal-3217887475-r2" x="85.4" y="93.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-3)">]</text><text class="terminal-3217887475-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-3)"> +</text><text class="terminal-3217887475-r2" x="195.2" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)">[</text><text class="terminal-3217887475-r1" x="207.4" y="117.6" textLength="158.6" clip-path="url(#terminal-3217887475-line-4)">--allow-abort</text><text class="terminal-3217887475-r2" x="366" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)">]</text><text class="terminal-3217887475-r2" x="390.4" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)">[</text><text class="terminal-3217887475-r1" x="402.6" y="117.6" textLength="231.8" clip-path="url(#terminal-3217887475-line-4)">--allowed-prefixes </text><text class="terminal-3217887475-r2" x="634.4" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)">[</text><text class="terminal-3217887475-r1" x="646.6" y="117.6" textLength="207.4" clip-path="url(#terminal-3217887475-line-4)">ALLOWED_PREFIXES </text><text class="terminal-3217887475-r3" x="854" y="117.6" textLength="36.6" clip-path="url(#terminal-3217887475-line-4)">...</text><text class="terminal-3217887475-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)">]</text><text class="terminal-3217887475-r2" x="902.8" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)">]</text><text class="terminal-3217887475-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)"> +</text><text class="terminal-3217887475-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3217887475-line-5)"> +</text><text class="terminal-3217887475-r1" x="0" y="166.4" textLength="97.6" clip-path="url(#terminal-3217887475-line-6)">options:</text><text class="terminal-3217887475-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-6)"> +</text><text class="terminal-3217887475-r1" x="0" y="190.8" textLength="671" clip-path="url(#terminal-3217887475-line-7)">  -h, --help            show this help message and exit</text><text class="terminal-3217887475-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3217887475-line-7)"> +</text><text class="terminal-3217887475-r1" x="0" y="215.2" textLength="427" clip-path="url(#terminal-3217887475-line-8)">  --commit-msg-file COMMIT_MSG_FILE</text><text class="terminal-3217887475-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-8)"> +</text><text class="terminal-3217887475-r1" x="0" y="239.6" textLength="915" clip-path="url(#terminal-3217887475-line-9)">                        ask for the name of the temporal file that contains</text><text class="terminal-3217887475-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-9)"> +</text><text class="terminal-3217887475-r1" x="0" y="264" textLength="902.8" clip-path="url(#terminal-3217887475-line-10)">                        the commit message. Using it in a git hook script:</text><text class="terminal-3217887475-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3217887475-line-10)"> +</text><text class="terminal-3217887475-r3" x="292.8" y="288.4" textLength="97.6" clip-path="url(#terminal-3217887475-line-11)">MSG_FILE</text><text class="terminal-3217887475-r1" x="390.4" y="288.4" textLength="24.4" clip-path="url(#terminal-3217887475-line-11)">=$</text><text class="terminal-3217887475-r4" x="414.8" y="288.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-11)">1</text><text class="terminal-3217887475-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-11)"> +</text><text class="terminal-3217887475-r1" x="0" y="312.8" textLength="280.6" clip-path="url(#terminal-3217887475-line-12)">  --rev-range REV_RANGE</text><text class="terminal-3217887475-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3217887475-line-12)"> +</text><text class="terminal-3217887475-r1" x="0" y="337.2" textLength="854" clip-path="url(#terminal-3217887475-line-13)">                        a range of git rev to check. e.g, master..HEAD</text><text class="terminal-3217887475-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-13)"> +</text><text class="terminal-3217887475-r1" x="0" y="361.6" textLength="378.2" clip-path="url(#terminal-3217887475-line-14)">  -m MESSAGE, --message MESSAGE</text><text class="terminal-3217887475-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-14)"> +</text><text class="terminal-3217887475-r1" x="0" y="386" textLength="768.6" clip-path="url(#terminal-3217887475-line-15)">                        commit message that needs to be checked</text><text class="terminal-3217887475-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3217887475-line-15)"> +</text><text class="terminal-3217887475-r1" x="0" y="410.4" textLength="927.2" clip-path="url(#terminal-3217887475-line-16)">  --allow-abort         allow empty commit messages, which typically abort a</text><text class="terminal-3217887475-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-16)"> +</text><text class="terminal-3217887475-r1" x="0" y="434.8" textLength="366" clip-path="url(#terminal-3217887475-line-17)">                        commit</text><text class="terminal-3217887475-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3217887475-line-17)"> +</text><text class="terminal-3217887475-r1" x="0" y="459.2" textLength="256.2" clip-path="url(#terminal-3217887475-line-18)">  --allowed-prefixes </text><text class="terminal-3217887475-r2" x="256.2" y="459.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-18)">[</text><text class="terminal-3217887475-r1" x="268.4" y="459.2" textLength="207.4" clip-path="url(#terminal-3217887475-line-18)">ALLOWED_PREFIXES </text><text class="terminal-3217887475-r3" x="475.8" y="459.2" textLength="36.6" clip-path="url(#terminal-3217887475-line-18)">...</text><text class="terminal-3217887475-r2" x="512.4" y="459.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-18)">]</text><text class="terminal-3217887475-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-18)"> +</text><text class="terminal-3217887475-r1" x="0" y="483.6" textLength="951.6" clip-path="url(#terminal-3217887475-line-19)">                        allowed commit message prefixes. If the message starts</text><text class="terminal-3217887475-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-19)"> +</text><text class="terminal-3217887475-r1" x="0" y="508" textLength="951.6" clip-path="url(#terminal-3217887475-line-20)">                        by one of these prefixes, the message won't be checked</text><text class="terminal-3217887475-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3217887475-line-20)"> +</text><text class="terminal-3217887475-r1" x="0" y="532.4" textLength="500.2" clip-path="url(#terminal-3217887475-line-21)">                        against the regex</text><text class="terminal-3217887475-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-21)"> +</text><text class="terminal-3217887475-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-3217887475-line-22)"> +</text> + </g> + </g> +</svg> diff --git a/docs/images/cli_help/cz_commit___help.svg b/docs/images/cli_help/cz_commit___help.svg new file mode 100644 index 0000000000..e29f55607d --- /dev/null +++ b/docs/images/cli_help/cz_commit___help.svg @@ -0,0 +1,123 @@ +<svg class="rich-terminal" viewBox="0 0 994 464.79999999999995" xmlns="http://www.w3.org/2000/svg"> + <!-- Generated with Rich https://www.textualize.io --> + <style> + + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Regular"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff"); + font-style: normal; + font-weight: 400; + } + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Bold"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff"); + font-style: bold; + font-weight: 700; + } + + .terminal-3369302934-matrix { + font-family: Fira Code, monospace; + font-size: 20px; + line-height: 24.4px; + font-variant-east-asian: full-width; + } + + .terminal-3369302934-title { + font-size: 18px; + font-weight: bold; + font-family: arial; + } + + .terminal-3369302934-r1 { fill: #c5c8c6 } +.terminal-3369302934-r2 { fill: #c5c8c6;font-weight: bold } + </style> + + <defs> + <clipPath id="terminal-3369302934-clip-terminal"> + <rect x="0" y="0" width="975.0" height="413.79999999999995" /> + </clipPath> + <clipPath id="terminal-3369302934-line-0"> + <rect x="0" y="1.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-1"> + <rect x="0" y="25.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-2"> + <rect x="0" y="50.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-3"> + <rect x="0" y="74.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-4"> + <rect x="0" y="99.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-5"> + <rect x="0" y="123.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-6"> + <rect x="0" y="147.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-7"> + <rect x="0" y="172.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-8"> + <rect x="0" y="196.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-9"> + <rect x="0" y="221.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-10"> + <rect x="0" y="245.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-11"> + <rect x="0" y="269.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-12"> + <rect x="0" y="294.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-13"> + <rect x="0" y="318.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-14"> + <rect x="0" y="343.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3369302934-line-15"> + <rect x="0" y="367.5" width="976" height="24.65"/> + </clipPath> + </defs> + + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="462.8" rx="8"/> + <g transform="translate(26,22)"> + <circle cx="0" cy="0" r="7" fill="#ff5f57"/> + <circle cx="22" cy="0" r="7" fill="#febc2e"/> + <circle cx="44" cy="0" r="7" fill="#28c840"/> + </g> + + <g transform="translate(9, 41)" clip-path="url(#terminal-3369302934-clip-terminal)"> + + <g class="terminal-3369302934-matrix"> + <text class="terminal-3369302934-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-3369302934-line-0)">$ cz commit --help</text><text class="terminal-3369302934-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3369302934-line-0)"> +</text><text class="terminal-3369302934-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-3369302934-line-1)">usage: cz commit </text><text class="terminal-3369302934-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">[</text><text class="terminal-3369302934-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-3369302934-line-1)">-h</text><text class="terminal-3369302934-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">]</text><text class="terminal-3369302934-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">[</text><text class="terminal-3369302934-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-3369302934-line-1)">--retry</text><text class="terminal-3369302934-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">]</text><text class="terminal-3369302934-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">[</text><text class="terminal-3369302934-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-3369302934-line-1)">--no-retry</text><text class="terminal-3369302934-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">]</text><text class="terminal-3369302934-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">[</text><text class="terminal-3369302934-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-3369302934-line-1)">--dry-run</text><text class="terminal-3369302934-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">]</text><text class="terminal-3369302934-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)"> +</text><text class="terminal-3369302934-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)">[</text><text class="terminal-3369302934-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-3369302934-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-3369302934-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)">]</text><text class="terminal-3369302934-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)">[</text><text class="terminal-3369302934-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-3369302934-line-2)">-s</text><text class="terminal-3369302934-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)">]</text><text class="terminal-3369302934-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)">[</text><text class="terminal-3369302934-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-3369302934-line-2)">-a</text><text class="terminal-3369302934-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)">]</text><text class="terminal-3369302934-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)"> +</text><text class="terminal-3369302934-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3369302934-line-3)"> +</text><text class="terminal-3369302934-r1" x="0" y="117.6" textLength="97.6" clip-path="url(#terminal-3369302934-line-4)">options:</text><text class="terminal-3369302934-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3369302934-line-4)"> +</text><text class="terminal-3369302934-r1" x="0" y="142" textLength="671" clip-path="url(#terminal-3369302934-line-5)">  -h, --help            show this help message and exit</text><text class="terminal-3369302934-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3369302934-line-5)"> +</text><text class="terminal-3369302934-r1" x="0" y="166.4" textLength="500.2" clip-path="url(#terminal-3369302934-line-6)">  --retry               retry last commit</text><text class="terminal-3369302934-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-6)"> +</text><text class="terminal-3369302934-r1" x="0" y="190.8" textLength="878.4" clip-path="url(#terminal-3369302934-line-7)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-3369302934-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-7)"> +</text><text class="terminal-3369302934-r1" x="0" y="215.2" textLength="915" clip-path="url(#terminal-3369302934-line-8)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-3369302934-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3369302934-line-8)"> +</text><text class="terminal-3369302934-r1" x="0" y="239.6" textLength="427" clip-path="url(#terminal-3369302934-line-9)">  --write-message-to-file FILE_PATH</text><text class="terminal-3369302934-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3369302934-line-9)"> +</text><text class="terminal-3369302934-r1" x="0" y="264" textLength="780.8" clip-path="url(#terminal-3369302934-line-10)">                        write message to file before committing </text><text class="terminal-3369302934-r2" x="780.8" y="264" textLength="12.2" clip-path="url(#terminal-3369302934-line-10)">(</text><text class="terminal-3369302934-r1" x="793" y="264" textLength="73.2" clip-path="url(#terminal-3369302934-line-10)">can be</text><text class="terminal-3369302934-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3369302934-line-10)"> +</text><text class="terminal-3369302934-r1" x="0" y="288.4" textLength="573.4" clip-path="url(#terminal-3369302934-line-11)">                        combined with --dry-run</text><text class="terminal-3369302934-r2" x="573.4" y="288.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-11)">)</text><text class="terminal-3369302934-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-11)"> +</text><text class="terminal-3369302934-r1" x="0" y="312.8" textLength="524.6" clip-path="url(#terminal-3369302934-line-12)">  -s, --signoff         sign off the commit</text><text class="terminal-3369302934-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-12)"> +</text><text class="terminal-3369302934-r1" x="0" y="337.2" textLength="902.8" clip-path="url(#terminal-3369302934-line-13)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-3369302934-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3369302934-line-13)"> +</text><text class="terminal-3369302934-r1" x="0" y="361.6" textLength="951.6" clip-path="url(#terminal-3369302934-line-14)">                        have been modified and deleted, but new files you have</text><text class="terminal-3369302934-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3369302934-line-14)"> +</text><text class="terminal-3369302934-r1" x="0" y="386" textLength="732" clip-path="url(#terminal-3369302934-line-15)">                        not told Git about are not affected.</text><text class="terminal-3369302934-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3369302934-line-15)"> +</text><text class="terminal-3369302934-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-16)"> +</text> + </g> + </g> +</svg> diff --git a/docs/images/cli_help/cz_example___help.svg b/docs/images/cli_help/cz_example___help.svg new file mode 100644 index 0000000000..a3fee0064a --- /dev/null +++ b/docs/images/cli_help/cz_example___help.svg @@ -0,0 +1,79 @@ +<svg class="rich-terminal" viewBox="0 0 994 196.39999999999998" xmlns="http://www.w3.org/2000/svg"> + <!-- Generated with Rich https://www.textualize.io --> + <style> + + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Regular"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff"); + font-style: normal; + font-weight: 400; + } + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Bold"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff"); + font-style: bold; + font-weight: 700; + } + + .terminal-2958388120-matrix { + font-family: Fira Code, monospace; + font-size: 20px; + line-height: 24.4px; + font-variant-east-asian: full-width; + } + + .terminal-2958388120-title { + font-size: 18px; + font-weight: bold; + font-family: arial; + } + + .terminal-2958388120-r1 { fill: #c5c8c6 } +.terminal-2958388120-r2 { fill: #c5c8c6;font-weight: bold } + </style> + + <defs> + <clipPath id="terminal-2958388120-clip-terminal"> + <rect x="0" y="0" width="975.0" height="145.39999999999998" /> + </clipPath> + <clipPath id="terminal-2958388120-line-0"> + <rect x="0" y="1.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2958388120-line-1"> + <rect x="0" y="25.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2958388120-line-2"> + <rect x="0" y="50.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2958388120-line-3"> + <rect x="0" y="74.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2958388120-line-4"> + <rect x="0" y="99.1" width="976" height="24.65"/> + </clipPath> + </defs> + + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="194.4" rx="8"/> + <g transform="translate(26,22)"> + <circle cx="0" cy="0" r="7" fill="#ff5f57"/> + <circle cx="22" cy="0" r="7" fill="#febc2e"/> + <circle cx="44" cy="0" r="7" fill="#28c840"/> + </g> + + <g transform="translate(9, 41)" clip-path="url(#terminal-2958388120-clip-terminal)"> + + <g class="terminal-2958388120-matrix"> + <text class="terminal-2958388120-r1" x="0" y="20" textLength="231.8" clip-path="url(#terminal-2958388120-line-0)">$ cz example --help</text><text class="terminal-2958388120-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2958388120-line-0)"> +</text><text class="terminal-2958388120-r1" x="0" y="44.4" textLength="219.6" clip-path="url(#terminal-2958388120-line-1)">usage: cz example </text><text class="terminal-2958388120-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2958388120-line-1)">[</text><text class="terminal-2958388120-r1" x="231.8" y="44.4" textLength="24.4" clip-path="url(#terminal-2958388120-line-1)">-h</text><text class="terminal-2958388120-r2" x="256.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2958388120-line-1)">]</text><text class="terminal-2958388120-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2958388120-line-1)"> +</text><text class="terminal-2958388120-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2958388120-line-2)"> +</text><text class="terminal-2958388120-r1" x="0" y="93.2" textLength="97.6" clip-path="url(#terminal-2958388120-line-3)">options:</text><text class="terminal-2958388120-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2958388120-line-3)"> +</text><text class="terminal-2958388120-r1" x="0" y="117.6" textLength="549" clip-path="url(#terminal-2958388120-line-4)">  -h, --help  show this help message and exit</text><text class="terminal-2958388120-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2958388120-line-4)"> +</text><text class="terminal-2958388120-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2958388120-line-5)"> +</text> + </g> + </g> +</svg> diff --git a/docs/images/cli_help/cz_info___help.svg b/docs/images/cli_help/cz_info___help.svg new file mode 100644 index 0000000000..02c2f313df --- /dev/null +++ b/docs/images/cli_help/cz_info___help.svg @@ -0,0 +1,79 @@ +<svg class="rich-terminal" viewBox="0 0 994 196.39999999999998" xmlns="http://www.w3.org/2000/svg"> + <!-- Generated with Rich https://www.textualize.io --> + <style> + + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Regular"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff"); + font-style: normal; + font-weight: 400; + } + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Bold"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff"); + font-style: bold; + font-weight: 700; + } + + .terminal-2494261528-matrix { + font-family: Fira Code, monospace; + font-size: 20px; + line-height: 24.4px; + font-variant-east-asian: full-width; + } + + .terminal-2494261528-title { + font-size: 18px; + font-weight: bold; + font-family: arial; + } + + .terminal-2494261528-r1 { fill: #c5c8c6 } +.terminal-2494261528-r2 { fill: #c5c8c6;font-weight: bold } + </style> + + <defs> + <clipPath id="terminal-2494261528-clip-terminal"> + <rect x="0" y="0" width="975.0" height="145.39999999999998" /> + </clipPath> + <clipPath id="terminal-2494261528-line-0"> + <rect x="0" y="1.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2494261528-line-1"> + <rect x="0" y="25.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2494261528-line-2"> + <rect x="0" y="50.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2494261528-line-3"> + <rect x="0" y="74.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2494261528-line-4"> + <rect x="0" y="99.1" width="976" height="24.65"/> + </clipPath> + </defs> + + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="194.4" rx="8"/> + <g transform="translate(26,22)"> + <circle cx="0" cy="0" r="7" fill="#ff5f57"/> + <circle cx="22" cy="0" r="7" fill="#febc2e"/> + <circle cx="44" cy="0" r="7" fill="#28c840"/> + </g> + + <g transform="translate(9, 41)" clip-path="url(#terminal-2494261528-clip-terminal)"> + + <g class="terminal-2494261528-matrix"> + <text class="terminal-2494261528-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-2494261528-line-0)">$ cz info --help</text><text class="terminal-2494261528-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2494261528-line-0)"> +</text><text class="terminal-2494261528-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-2494261528-line-1)">usage: cz info </text><text class="terminal-2494261528-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2494261528-line-1)">[</text><text class="terminal-2494261528-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2494261528-line-1)">-h</text><text class="terminal-2494261528-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2494261528-line-1)">]</text><text class="terminal-2494261528-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2494261528-line-1)"> +</text><text class="terminal-2494261528-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2494261528-line-2)"> +</text><text class="terminal-2494261528-r1" x="0" y="93.2" textLength="97.6" clip-path="url(#terminal-2494261528-line-3)">options:</text><text class="terminal-2494261528-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2494261528-line-3)"> +</text><text class="terminal-2494261528-r1" x="0" y="117.6" textLength="549" clip-path="url(#terminal-2494261528-line-4)">  -h, --help  show this help message and exit</text><text class="terminal-2494261528-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2494261528-line-4)"> +</text><text class="terminal-2494261528-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2494261528-line-5)"> +</text> + </g> + </g> +</svg> diff --git a/docs/images/cli_help/cz_init___help.svg b/docs/images/cli_help/cz_init___help.svg new file mode 100644 index 0000000000..b296b79d76 --- /dev/null +++ b/docs/images/cli_help/cz_init___help.svg @@ -0,0 +1,79 @@ +<svg class="rich-terminal" viewBox="0 0 994 196.39999999999998" xmlns="http://www.w3.org/2000/svg"> + <!-- Generated with Rich https://www.textualize.io --> + <style> + + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Regular"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff"); + font-style: normal; + font-weight: 400; + } + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Bold"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff"); + font-style: bold; + font-weight: 700; + } + + .terminal-2788256040-matrix { + font-family: Fira Code, monospace; + font-size: 20px; + line-height: 24.4px; + font-variant-east-asian: full-width; + } + + .terminal-2788256040-title { + font-size: 18px; + font-weight: bold; + font-family: arial; + } + + .terminal-2788256040-r1 { fill: #c5c8c6 } +.terminal-2788256040-r2 { fill: #c5c8c6;font-weight: bold } + </style> + + <defs> + <clipPath id="terminal-2788256040-clip-terminal"> + <rect x="0" y="0" width="975.0" height="145.39999999999998" /> + </clipPath> + <clipPath id="terminal-2788256040-line-0"> + <rect x="0" y="1.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2788256040-line-1"> + <rect x="0" y="25.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2788256040-line-2"> + <rect x="0" y="50.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2788256040-line-3"> + <rect x="0" y="74.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2788256040-line-4"> + <rect x="0" y="99.1" width="976" height="24.65"/> + </clipPath> + </defs> + + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="194.4" rx="8"/> + <g transform="translate(26,22)"> + <circle cx="0" cy="0" r="7" fill="#ff5f57"/> + <circle cx="22" cy="0" r="7" fill="#febc2e"/> + <circle cx="44" cy="0" r="7" fill="#28c840"/> + </g> + + <g transform="translate(9, 41)" clip-path="url(#terminal-2788256040-clip-terminal)"> + + <g class="terminal-2788256040-matrix"> + <text class="terminal-2788256040-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-2788256040-line-0)">$ cz init --help</text><text class="terminal-2788256040-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2788256040-line-0)"> +</text><text class="terminal-2788256040-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-2788256040-line-1)">usage: cz init </text><text class="terminal-2788256040-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2788256040-line-1)">[</text><text class="terminal-2788256040-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2788256040-line-1)">-h</text><text class="terminal-2788256040-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2788256040-line-1)">]</text><text class="terminal-2788256040-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2788256040-line-1)"> +</text><text class="terminal-2788256040-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2788256040-line-2)"> +</text><text class="terminal-2788256040-r1" x="0" y="93.2" textLength="97.6" clip-path="url(#terminal-2788256040-line-3)">options:</text><text class="terminal-2788256040-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2788256040-line-3)"> +</text><text class="terminal-2788256040-r1" x="0" y="117.6" textLength="549" clip-path="url(#terminal-2788256040-line-4)">  -h, --help  show this help message and exit</text><text class="terminal-2788256040-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2788256040-line-4)"> +</text><text class="terminal-2788256040-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2788256040-line-5)"> +</text> + </g> + </g> +</svg> diff --git a/docs/images/cli_help/cz_ls___help.svg b/docs/images/cli_help/cz_ls___help.svg new file mode 100644 index 0000000000..7e95d4c8dc --- /dev/null +++ b/docs/images/cli_help/cz_ls___help.svg @@ -0,0 +1,79 @@ +<svg class="rich-terminal" viewBox="0 0 994 196.39999999999998" xmlns="http://www.w3.org/2000/svg"> + <!-- Generated with Rich https://www.textualize.io --> + <style> + + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Regular"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff"); + font-style: normal; + font-weight: 400; + } + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Bold"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff"); + font-style: bold; + font-weight: 700; + } + + .terminal-2631362430-matrix { + font-family: Fira Code, monospace; + font-size: 20px; + line-height: 24.4px; + font-variant-east-asian: full-width; + } + + .terminal-2631362430-title { + font-size: 18px; + font-weight: bold; + font-family: arial; + } + + .terminal-2631362430-r1 { fill: #c5c8c6 } +.terminal-2631362430-r2 { fill: #c5c8c6;font-weight: bold } + </style> + + <defs> + <clipPath id="terminal-2631362430-clip-terminal"> + <rect x="0" y="0" width="975.0" height="145.39999999999998" /> + </clipPath> + <clipPath id="terminal-2631362430-line-0"> + <rect x="0" y="1.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2631362430-line-1"> + <rect x="0" y="25.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2631362430-line-2"> + <rect x="0" y="50.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2631362430-line-3"> + <rect x="0" y="74.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2631362430-line-4"> + <rect x="0" y="99.1" width="976" height="24.65"/> + </clipPath> + </defs> + + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="194.4" rx="8"/> + <g transform="translate(26,22)"> + <circle cx="0" cy="0" r="7" fill="#ff5f57"/> + <circle cx="22" cy="0" r="7" fill="#febc2e"/> + <circle cx="44" cy="0" r="7" fill="#28c840"/> + </g> + + <g transform="translate(9, 41)" clip-path="url(#terminal-2631362430-clip-terminal)"> + + <g class="terminal-2631362430-matrix"> + <text class="terminal-2631362430-r1" x="0" y="20" textLength="170.8" clip-path="url(#terminal-2631362430-line-0)">$ cz ls --help</text><text class="terminal-2631362430-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2631362430-line-0)"> +</text><text class="terminal-2631362430-r1" x="0" y="44.4" textLength="158.6" clip-path="url(#terminal-2631362430-line-1)">usage: cz ls </text><text class="terminal-2631362430-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2631362430-line-1)">[</text><text class="terminal-2631362430-r1" x="170.8" y="44.4" textLength="24.4" clip-path="url(#terminal-2631362430-line-1)">-h</text><text class="terminal-2631362430-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2631362430-line-1)">]</text><text class="terminal-2631362430-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2631362430-line-1)"> +</text><text class="terminal-2631362430-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2631362430-line-2)"> +</text><text class="terminal-2631362430-r1" x="0" y="93.2" textLength="97.6" clip-path="url(#terminal-2631362430-line-3)">options:</text><text class="terminal-2631362430-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2631362430-line-3)"> +</text><text class="terminal-2631362430-r1" x="0" y="117.6" textLength="549" clip-path="url(#terminal-2631362430-line-4)">  -h, --help  show this help message and exit</text><text class="terminal-2631362430-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2631362430-line-4)"> +</text><text class="terminal-2631362430-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2631362430-line-5)"> +</text> + </g> + </g> +</svg> diff --git a/docs/images/cli_help/cz_schema___help.svg b/docs/images/cli_help/cz_schema___help.svg new file mode 100644 index 0000000000..201778bdfd --- /dev/null +++ b/docs/images/cli_help/cz_schema___help.svg @@ -0,0 +1,79 @@ +<svg class="rich-terminal" viewBox="0 0 994 196.39999999999998" xmlns="http://www.w3.org/2000/svg"> + <!-- Generated with Rich https://www.textualize.io --> + <style> + + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Regular"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff"); + font-style: normal; + font-weight: 400; + } + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Bold"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff"); + font-style: bold; + font-weight: 700; + } + + .terminal-2172349090-matrix { + font-family: Fira Code, monospace; + font-size: 20px; + line-height: 24.4px; + font-variant-east-asian: full-width; + } + + .terminal-2172349090-title { + font-size: 18px; + font-weight: bold; + font-family: arial; + } + + .terminal-2172349090-r1 { fill: #c5c8c6 } +.terminal-2172349090-r2 { fill: #c5c8c6;font-weight: bold } + </style> + + <defs> + <clipPath id="terminal-2172349090-clip-terminal"> + <rect x="0" y="0" width="975.0" height="145.39999999999998" /> + </clipPath> + <clipPath id="terminal-2172349090-line-0"> + <rect x="0" y="1.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2172349090-line-1"> + <rect x="0" y="25.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2172349090-line-2"> + <rect x="0" y="50.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2172349090-line-3"> + <rect x="0" y="74.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2172349090-line-4"> + <rect x="0" y="99.1" width="976" height="24.65"/> + </clipPath> + </defs> + + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="194.4" rx="8"/> + <g transform="translate(26,22)"> + <circle cx="0" cy="0" r="7" fill="#ff5f57"/> + <circle cx="22" cy="0" r="7" fill="#febc2e"/> + <circle cx="44" cy="0" r="7" fill="#28c840"/> + </g> + + <g transform="translate(9, 41)" clip-path="url(#terminal-2172349090-clip-terminal)"> + + <g class="terminal-2172349090-matrix"> + <text class="terminal-2172349090-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-2172349090-line-0)">$ cz schema --help</text><text class="terminal-2172349090-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2172349090-line-0)"> +</text><text class="terminal-2172349090-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-2172349090-line-1)">usage: cz schema </text><text class="terminal-2172349090-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2172349090-line-1)">[</text><text class="terminal-2172349090-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-2172349090-line-1)">-h</text><text class="terminal-2172349090-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-2172349090-line-1)">]</text><text class="terminal-2172349090-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2172349090-line-1)"> +</text><text class="terminal-2172349090-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2172349090-line-2)"> +</text><text class="terminal-2172349090-r1" x="0" y="93.2" textLength="97.6" clip-path="url(#terminal-2172349090-line-3)">options:</text><text class="terminal-2172349090-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2172349090-line-3)"> +</text><text class="terminal-2172349090-r1" x="0" y="117.6" textLength="549" clip-path="url(#terminal-2172349090-line-4)">  -h, --help  show this help message and exit</text><text class="terminal-2172349090-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2172349090-line-4)"> +</text><text class="terminal-2172349090-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2172349090-line-5)"> +</text> + </g> + </g> +</svg> diff --git a/docs/images/cli_help/cz_version___help.svg b/docs/images/cli_help/cz_version___help.svg new file mode 100644 index 0000000000..0a7dc85397 --- /dev/null +++ b/docs/images/cli_help/cz_version___help.svg @@ -0,0 +1,99 @@ +<svg class="rich-terminal" viewBox="0 0 994 318.4" xmlns="http://www.w3.org/2000/svg"> + <!-- Generated with Rich https://www.textualize.io --> + <style> + + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Regular"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff"); + font-style: normal; + font-weight: 400; + } + @font-face { + font-family: "Fira Code"; + src: local("FiraCode-Bold"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff"); + font-style: bold; + font-weight: 700; + } + + .terminal-1533814420-matrix { + font-family: Fira Code, monospace; + font-size: 20px; + line-height: 24.4px; + font-variant-east-asian: full-width; + } + + .terminal-1533814420-title { + font-size: 18px; + font-weight: bold; + font-family: arial; + } + + .terminal-1533814420-r1 { fill: #c5c8c6 } +.terminal-1533814420-r2 { fill: #c5c8c6;font-weight: bold } + </style> + + <defs> + <clipPath id="terminal-1533814420-clip-terminal"> + <rect x="0" y="0" width="975.0" height="267.4" /> + </clipPath> + <clipPath id="terminal-1533814420-line-0"> + <rect x="0" y="1.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1533814420-line-1"> + <rect x="0" y="25.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1533814420-line-2"> + <rect x="0" y="50.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1533814420-line-3"> + <rect x="0" y="74.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1533814420-line-4"> + <rect x="0" y="99.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1533814420-line-5"> + <rect x="0" y="123.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1533814420-line-6"> + <rect x="0" y="147.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1533814420-line-7"> + <rect x="0" y="172.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1533814420-line-8"> + <rect x="0" y="196.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1533814420-line-9"> + <rect x="0" y="221.1" width="976" height="24.65"/> + </clipPath> + </defs> + + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="316.4" rx="8"/> + <g transform="translate(26,22)"> + <circle cx="0" cy="0" r="7" fill="#ff5f57"/> + <circle cx="22" cy="0" r="7" fill="#febc2e"/> + <circle cx="44" cy="0" r="7" fill="#28c840"/> + </g> + + <g transform="translate(9, 41)" clip-path="url(#terminal-1533814420-clip-terminal)"> + + <g class="terminal-1533814420-matrix"> + <text class="terminal-1533814420-r1" x="0" y="20" textLength="231.8" clip-path="url(#terminal-1533814420-line-0)">$ cz version --help</text><text class="terminal-1533814420-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1533814420-line-0)"> +</text><text class="terminal-1533814420-r1" x="0" y="44.4" textLength="219.6" clip-path="url(#terminal-1533814420-line-1)">usage: cz version </text><text class="terminal-1533814420-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)">[</text><text class="terminal-1533814420-r1" x="231.8" y="44.4" textLength="24.4" clip-path="url(#terminal-1533814420-line-1)">-h</text><text class="terminal-1533814420-r2" x="256.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)">]</text><text class="terminal-1533814420-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)">[</text><text class="terminal-1533814420-r1" x="292.8" y="44.4" textLength="207.4" clip-path="url(#terminal-1533814420-line-1)">-r | -p | -c | -v</text><text class="terminal-1533814420-r2" x="500.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)">]</text><text class="terminal-1533814420-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)"> +</text><text class="terminal-1533814420-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1533814420-line-2)"> +</text><text class="terminal-1533814420-r1" x="0" y="93.2" textLength="97.6" clip-path="url(#terminal-1533814420-line-3)">options:</text><text class="terminal-1533814420-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1533814420-line-3)"> +</text><text class="terminal-1533814420-r1" x="0" y="117.6" textLength="622.2" clip-path="url(#terminal-1533814420-line-4)">  -h, --help        show this help message and exit</text><text class="terminal-1533814420-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1533814420-line-4)"> +</text><text class="terminal-1533814420-r1" x="0" y="142" textLength="744.2" clip-path="url(#terminal-1533814420-line-5)">  -r, --report      get system information for reporting bugs</text><text class="terminal-1533814420-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1533814420-line-5)"> +</text><text class="terminal-1533814420-r1" x="0" y="166.4" textLength="707.6" clip-path="url(#terminal-1533814420-line-6)">  -p, --project     get the version of the current project</text><text class="terminal-1533814420-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-6)"> +</text><text class="terminal-1533814420-r1" x="0" y="190.8" textLength="768.6" clip-path="url(#terminal-1533814420-line-7)">  -c, --commitizen  get the version of the installed commitizen</text><text class="terminal-1533814420-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1533814420-line-7)"> +</text><text class="terminal-1533814420-r1" x="0" y="215.2" textLength="927.2" clip-path="url(#terminal-1533814420-line-8)">  -v, --verbose     get the version of both the installed commitizen and the</text><text class="terminal-1533814420-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1533814420-line-8)"> +</text><text class="terminal-1533814420-r1" x="0" y="239.6" textLength="427" clip-path="url(#terminal-1533814420-line-9)">                    current project</text><text class="terminal-1533814420-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1533814420-line-9)"> +</text><text class="terminal-1533814420-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1533814420-line-10)"> +</text> + </g> + </g> +</svg> From b93e9b4b9229f652272a041808118c56b0b55d1c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Apr 2024 01:29:54 +0000 Subject: [PATCH 194/685] build(deps): bump typing-extensions from 4.10.0 to 4.11.0 Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.10.0 to 4.11.0. - [Release notes](https://github.com/python/typing_extensions/releases) - [Changelog](https://github.com/python/typing_extensions/blob/main/CHANGELOG.md) - [Commits](https://github.com/python/typing_extensions/compare/4.10.0...4.11.0) --- updated-dependencies: - dependency-name: typing-extensions dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5b28bf5776..4cc8f16674 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1628,13 +1628,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.10.0" +version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, - {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] From 57e8e685bb660db17d6a5d03d2b752d2fbb7a31c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Apr 2024 12:22:38 +0200 Subject: [PATCH 195/685] ci(deps): bump peaceiris/actions-gh-pages from 2 to 4 (#1057) --- .github/workflows/docspublish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml index 6aa1a75e2e..670864757b 100644 --- a/.github/workflows/docspublish.yml +++ b/.github/workflows/docspublish.yml @@ -31,7 +31,7 @@ jobs: token: ${{ secrets.PERSONAL_ACCESS_TOKEN_FOR_ORG }} file: 'docs/README.md' - name: Push doc to Github Page - uses: peaceiris/actions-gh-pages@v2 + uses: peaceiris/actions-gh-pages@v4 env: PERSONAL_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} PUBLISH_BRANCH: gh-pages From c0e41ca9397fa952cca2464213d8fdfb026be591 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Wed, 10 Apr 2024 02:03:42 +0800 Subject: [PATCH 196/685] ci(github-actions): update env var used in doc publish actions (#1058) it has been changed since peaceiris/actions-gh-pages@3 --- .github/workflows/docspublish.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml index 670864757b..1001be8d9b 100644 --- a/.github/workflows/docspublish.yml +++ b/.github/workflows/docspublish.yml @@ -33,6 +33,8 @@ jobs: - name: Push doc to Github Page uses: peaceiris/actions-gh-pages@v4 env: - PERSONAL_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - PUBLISH_BRANCH: gh-pages - PUBLISH_DIR: ./site + personal_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + publish_branch: gh-pages + publish_dir: ./site + user_name: "github-actions[bot]" + user_email: "github-actions[bot]@users.noreply.github.com" From fb5f05f3751292ff92817a63001bbc2652319e82 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 7 Apr 2024 11:54:32 +0800 Subject: [PATCH 197/685] docs(images): update outdated gifs --- docs/images/bump.gif | Bin 646444 -> 95853 bytes docs/images/demo.gif | Bin 699893 -> 132841 bytes docs/images/init.gif | Bin 0 -> 133852 bytes docs/init.md | 3 +++ 4 files changed, 3 insertions(+) create mode 100644 docs/images/init.gif diff --git a/docs/images/bump.gif b/docs/images/bump.gif index f9c9e0c8a3b49280623136dd37adbf310b6bd813..0e97550ade305b62d716f6ebfce5f8e3d1a297bf 100644 GIT binary patch literal 95853 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 literal 646444 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%0DmkKeM&96@aE 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 _uC<*qYGAB7IC5381IP>G0;l0xywqpf z>>fX5sn3=a4Lp^~cwPTtb!KM0{-eUz*|I#h*GnHo*2_58)nsPe#5ES%Bp2E$76bwo ztpmDt)jw?|!}0)_bL*B3d^7NXrGgRI3a&I`kgpv7E(;2G1~!(OzzivZS&1+m{8s^f z-Z>yMSYzLL-8r0%6yh}7RHP><uAw+2TgF5)<Expd@aGX`Y#Eapu0z4-;A<o)7&(xT zYs^0x6ViCyJC}i^>~Y0#j*}(kDDM($*Voq<pD)cxo5SXS(nVhgJ>=p_6F7wWPsZG7 zw8J)T7eEnK)W{$cE}=g3($!2l8QtID6ivpU`j&%D_cKhOa(Eu!K@L`9G-tWypO=lT zZH=yd-edFrzr}}tzt)T(0nkDqK}ozIpbrA20ABI&yg9dThUK_p0ljO&8Mxt+_T7FO zAUz7?n*;LB;l5;Sd>r+MPLp{z$h?!drj=FR-x_@30NxE8cOIGd8@a!M{^wntNGiQ$ z0VndeK_r7L?zj2kGGlz5!84SJWUuS|{tl64q9Ig3CgY2KBWDNW3yU1qffMflVD156 zzZrb?mT;lwad^!47+6rzDK4CST7(G_1wvm2APn&c7)7v-48t=2$(Yq;h2f1v9i|{| zOh6Zpjrhl6s-0xMP>UASrSLD+{p36>Xb9mN-C_xpCqvVk*~iJP%faVF+7oHyjDqqL z2H5RtyfXpo`au_azo%D{oI=Tx(bzxB4|ryPdW(2i(nCqwLs%hzk4zW&j_Z!4PiZss zsva6nkfqAEpHs1ao>SmULA)0l`H7m_wLq~XAmJ~-QcIJN3KT11@R{ilGVx+MI^f?7 zqw_m}#^^&<QDz5BLUhX^ohUOKu&qxF6b6#fiRMT3p{+=VY_Pi`eecmgY3>;GToA^J zj;St#T48y>N4TPKwy$)Wf9nvzAO~zK1__Fz;cURI7zpL3H3>@~>3rnnj|cDzQJ^gh zes8vnN#-Br=9V+&LIMTQEIj|rUCwYaryu!jH^TK09tnU#<$&C5>=lg{=wZNcA#r~; z2r~gva+^m(LXvMBe!A@MG!BsV_{u%W;1ycs9@pd>1zdcvt-DB(?8osSzWY>#Ts%yM zS2NaJ*REXuaVd@r-+3r8N=EEFgu8FE@mfTAqa*^v!&Wl;TlkR_3{FQ(x7pYaCvMgv zb2u>g*p89uu~my5zG|FFCa~nhe?pmHa|2^D8-m;r18MwSJD5Wd1%eEQ?mpK+EN%+Y z+l_W~MvROd_&@@q$1w2>qF)%-s1BDd1q16_;%N7wlc}N<#gEo9NGh8@rEvGT|I}d@ zIU-mnAR5)~@G3L}?Z_<zbeuOs_5hN?0Q~Hivor?RUf4wiw&;t4*Wn0RjGmeBXEX1R z9mz;ZX7NrKTa4t6#zj8_2r$T=+k##O{rYjF3kKJiJAPLLeakB}`Ibcf9Nm}f*V1qN zapf_Ys~T|7SNp3$McRG;!NmxHZlLBAP`U-6f5{Top@$jAqFX|Vn#>?e9lOf_!aatO zlLSmHG$a!U_1@ttXR!aH-Oi!NI_;ng&)O7S4_7ocyI>S}8DQ~n%_0lOCNf<GKSa~W zAimR9+(yuGtY8a3`k}sc;iahiI4tyV$j%NLZ36opiunCgP}jt!oniBApY_+88=<2M z9zBNEVG4LOVrYOUzP{z#0PY?J<h~*|tm!d%Pe+i+9}bWS0wB=9^WEWhoovo0lamF1 zz>>(P*wAP>;%sBsc}4t`u`ZZKc9ZS2QR^%uZ%FEBWu0t;-w9Ya=N=N%R`5eb-|0Qn zdtdjnDtPXP(91wEMaae6Z%{SEoCgmJUyunM5m!DkwJSB*N-lbG9|8qoV4!XNP$RV# zZnbuT+zv`N^i(dnOf}T_`)>><M@8<A&Wwnr)e|{FKXkMOgQf~blQ{v`jYf~D^0i|S zhk5P;9-L%0y*kEI2zhW_H)%ICiTvkIDlA#_CMI$$GM5)D#OgkC81V9XIQQr=r_@!5 zVg%8iEm5}mAb~b$JE$bHbZ6H!j=?X<<Tid~YPC%eV!9o>EwBem>rVKyV8Av=ITrue zui#+!gBXINGr^mZ<Bd|2WVm;PQ9Sv{B3{taP^__k!1BSDd+L930Dqb_p*s)x-&69r z`_K?PMy^j_rv*)C@H~#(w%8$z_l%_ir8V?Nt3=tYRN>%1T0FN_?P4&JK>kr3l0;ur zKN$n*d(+=yH%@}NAD`F>R3sQ!Dt8?GJp%sCwlW!iU0IOBq$a^W!st(|0pz_R1c%U; zgP1U>(j_S0KC&l)6N3=jnoILC;WT#Dxr%2+WB5f7W^(-La<T+o^Ap;8$VD>&jI8)I zvu3JH1{y<JC<@oEFyT~6K`Xxvs<uhg-56qq#6{ay*_58j*3b5Jc;M9JGu4&t=hS$f zd9=@XBwO8MxY|?VnC8cm?Sb=MW5)s|kNOUi-v*m-ow;8pf$|~GbMh4ngl}Ydbby0k z6*}VYm=~y&xTnHb=7L^rkQN5wP0<=P;2=bQme^$?*8ma0cL+s7Gbxk;Ee-JuvHM=5 zd6fw5m9{@o_<Sw2U6SqLnNm(3n>efO#qk$97@mmJg!vFSW?H65NPDM03W|?Cr>o<& z0t4e>japDIu%&zQHZO9cJ%_qkaq$>QBaF;|ok8mT*dO5N(w`!}m%+R_SYsqZX^Zbf zE%xOKE){3t1<4XO0`|x15-Bh_V-GWh0!ftxTw=I3SB&8Kyy{X!m630(!3G&vcZh<p z8^R>0y&RHFZ!uGA9{raHT}a%z*SXrI+SvPRBoQhJ%L4Kl=vRaJq^vv;ErT+JNf`Z& zY6=h;u&4fT4D}Lcr9IYv0a6jJL}_`I75pR$k=6{3!9y@e!`Q1&k}<PpSnFh7?4Bn= zTTTAC?o!snEX0g1sWj<hQer??Y;AW+>9@AKt6-39B(-e!-A&C$`>1eCnUP1Z%1KUV z-9UENO6bb*Ei6ly`uLof1znaExr2_!S>W(Jio`iUj0{Xj36`CRo>Gz&o36f}YP5w; z2oyt=R-|6`TX`ZRZXt6#?wpy?O!2Am%ctag>*C$3Lg{!&IqHJSaEw^M^n4s91vMo9 zOkcIW^<9R5hRRx>rRJmGeTmTil{|2h6bi@Hq#2<DJRK`XShG1g<&8f456jff=6`tq zqJ*PH-6xU$9)gu&fCoC>2o})?Hx}zvKlYJ0o{X4%x`%nSkYZ`g!*jJ;$S+7eF(ubr zp;X!7Tg!u5h!G4!$GFZ$*_?0@?VoaDL9`*r>G+Cx4kLu8ewnCPA~P^kK-(MH$77oW zGiJ%u_LM8gh(~WZ7R$VuxjTNE8imS;2Xe}J0i3^}?a{y(befXm7g<N8QVwC%3JoUf zjP{Jdyu3S6%5NRbJVm*yok-VodWv88T$+0B*O!_Xi3<vvv385?x@}vFYE5={sNPBk zfmcf3!vid}LW_dtZqny3a(X%1#_4_2Jp_r>b`$%#`~K&NifJ-2g!Y8jik$Z+pTQGK zCrF~7AVm!4gUB9E_bXp#30BYh`ZC5|AN|xi{d>;W+boJ(8&G_ujwIgU^1k-nsqAQU zsZ8j@saez(kh0US^ciD}fiR=JI8tO(X=n_9KPnN150u1F(J)NBB4bXkQ=jF9E*gKp zs|HNOM~|H`Y%d*Wmr$uG8*ytBA@VtBm<bLf5Q}afp+iz2TR21#86v{~;QIXHxsu*= zF711B24G$6X6%ofX#AV-m8UgaYEry-_2!u}%fSXnv#Es%#4sHH%aD<$do?(nYzh0Y zA*k0tV`Rm8fRsI5_{)dTIjt?9)Pugz&Gg|Hva_Da_r_JEeQL(Y;6|mE8Ta*P?&cxy z)51BKb-h6vsy4WOG);NX=bw7HvwY0F^Vv7s;G47CdD!lJpx6eESNG;2U9lh0N+<Az z$8{ilP0f(2ybEwO>gSU{aUz8`RCS@KTvOepBE&a?#uK)}B4EUA6RaoGIoB#Q$MVfL zY_sl5?XH;O#qCmD?Qdp}uKbKuw##nFs!$L6Vi~5FlepPj{t2>dbgV#_KW{D^yZgn4 zB5q&G$}C@+oHn26%y!|;t~njHdZtvosZ2(w1~HJxc^QW~HU~IjySwVd6nAWL^sYtq z)|@)yD$JwS7;z!&tJ}Qzo9vva@=GRH9LY!H(&qtC{;aR(ffCNlYncs49h6)j_MxQI z!syBW)JucjKIy3j^Ik5yRjjt_DS6H_(?%j?bJasBIV}}O)Lkwn_C^)#(ytFBUT|!C zTO~x{COA{LV;K#v*y?3(_E+x;`>7(=i;!o9QRi8=nyH#YuiMAM)<a6UW|ZK^>Yerl zrHd{J$zH|W8sBBBm+$SqJdNpc$0yneEep!KV|v!YzTcG9|B&qPy4GcaKQ(eGQzp{$ z&c^QdJHQ#M{ovF`Pbw^!ys>f7>0_7?DI+pQ(i5&3%y@jY{$hQz;V@dE``sVVs#n^3 zcxqn1yoOzjV50e(a}{ZESp=DT0$}AxNA?rj=0Ekame$c@F#rw;lk{e*mnw!Dq_Bh{ zZ+T5UwVLcDldm`Ce`)8l)yro4B(;m+^ZC!twgu-nBzbD4=8qb4hG47QeU3Ed_g{Ld zobgujlHTJtWAVk?#ha2J^c!_w-1@N{@ROyse3GwVJc=i@fV=pzN$T#n+qs?lnAyow zPxM}9x3yR*venB#*B<N28r!Iw-qxuFlTu@$HMYgR)DqXJ`fEo#j~}<LP5d?0+SaP> z!d5T8yQX(8?>16+w9Z2drw2|1)j3Ig!pgpz9=mqbDVD8X+T0u*if#7HUAycXSomHj z;aWR$Y%MUZaOQ>d_0EaY-$JSiXS>f`@1Fm&dVR3)Lv_jZ-p$@GH$NACO#g8GF|cIi z4zy_Qwsbg?|HS7g#iDuNbKy@gA3nvI7A@G9gb!#1`1rlaYIdy*eTu*R>26%nlDu@p zu&wlbW>wKA*4c<>o(-Rqqi%Gyr0kD{{AL9geeY@4|GfXg@@oi<?@yDF;;#v?Uue0e zRD;E(U$365hF04g?>c<1b+D!+4Chwd`j*x4n#t>26Ic8#Z@H^^qHe9Zv3TOr;I(&; zpI_@V4f__-eqj9d_Vr!^o$oh)-ozcSt~2i(-iSKZL!SK*)Oe_5Q&T;15p(Eyf1LQ& z^!DGThwem-ozdJb{P}xZ|8K;^V3xVfvhF9*lQ*WoIy(=pA5VAvd*kh2r5_L5kGCkE z-yZo`@{?Z2o*bXd{s_IdXDxPnGyVJ8Oy-;A;p>m=b5DMpJ$dgJkHPKTggdvsfzKbj z|9tCbZ{W?1xbr_26(4^cyK{T0>inOwOLq>A|GmxH^E=1dZjb!4#uxGX^S#Z3&yVN- zeE$p41aORhhtUDM>j3`ob#|Bcrv{)DX$_494F`afk>A)Wf)6#oM@Xw|_43|27*G1b z-V#i0fSe|+5ZQ0V0UR!*&+Z!>ff}3_k;|9qoG$B}LC8;`B&c}<^cHf7jD=|hz!K6H zk~Ux%4S06id>$RnzYZ@=n=2=A0UNmL(>~I%+?)Q~ooOF>Hn`{25d&$nLv+N%8e$@C zW|G9itml~}&XlDxDm8g8@$s&a-fdv{#{7BJ)pqyjzkg!~<}{GsNywX{$O%6FLK}Y5 zKt3t0X|$HW9e)AkiCI(=uVy++o5hbj7PPIlDd?vzWHK>j)+FSxCS*JDLB9#<w8?Va z96QG^V)^}5!*jt)n;Z68qPyxMYe}ME6QcVF6qJbKNJjk(5KW)>n3VoDCuluuQ%qD{ zyux;_z;>;+3Dl^y-fa7|x=G^iHwk9b3$}W>StmJWJKv@yb%?}PFF~`LQmsuQ7wf;e z+e$y-mD+3?WviEib%*}gE-YxFkCV`FZ3xd6+8m1!-hzlVV;nXxm}U<7U>Q%kjCwGq zmbR=vNmfrAdVEVZ0xM^-1vPJ$i`kH~ZH74n%cs-j&j!OiwH1m<3Rkqb{I?Wpu!><@ zToKKRts9DzX6~3^B^HyelpKsm*H#`QDd%hR6mKcN#i~?n@zgY{d`gqfTw5bq2+#!< z<>tkEw^Wri)LOUR32Cl9%}~QUSG!azJ+WTIHaHb1>aqd<49*Y1s;Mf6ge?9UoXgD` zYt8c;|7mbia<?eUL(eqV%ESPNMXV_r+^?|5=7j{#pbF-_#05*$l(m6p{`s4*ZEgO5 z|L`~QS_Xm=){Tq*?Qfo-2oMj?W9J3`+ut02N$+BcWl%&<_y}GToIgr2566fVQFJe4 zZgnv&K-)sPrBwxoKN^w+bq<SKz0eA?(FvJ9YL0o_mHE+wEOh%7>&U#o{bi6u%EP0( z3qo{{;|Dz4)}?CH5Pi?>!}!Cc4Tr@5+ec+fyLU1_=#m9KglN@J^oIp^t0_mb&#;wE zzK#(5#28oxFYJ0)_xwZM(}@;b_Nc7G{{YT99OtjQ1SSuJUAXpN04MODn5itJ2Ye-h z-4QZl1Drs?aZZ0ZjJbR%f8PI8FIz0?cPyH8EL%e@J6kM!cPyDYRs*3{!!1^0J601q zr>8<szil}^yK{Qb-duj(Oc5w}lp<(0FNB*E5jvy47=n`!%qw8xBIXUx;)SDk1mi;m z6NLmN|A%_1zH6t&I&$Vn*crXnGskz&;E&jwgxQ<7+MnLFw>{$E5a!_0>Tvcy)JvCa z+wVJqTlT{4o+7~*(@am}w^UPu0Lg|BqOFeTRZkJGd7|ySkQGzNZ2q5mSrO)1)9PBk z>)Le0tu@T8v(>G4*Nu6^eIU$zxYd1Z*L~v1*{T1jUQV4Y+!Z1Moi2Ea>}5F_Wa^p= z>3~}`8U*#?N}ZF#{t=uRQ^Ke=PpKcCn4@0u*SwV5ywrbqX&t?A<k|(jwhPC9T)-do zHo4|){{K=hT^v0x;?IY8I<X1P-z^dfaOY<U7PaL@nWY{qw!z8O>XSSrl6Le;_O&bd zZC8qaTq!;3TXD^|rp>qhhi}tSzt(I2OZ9T>_2ui?qU3p>o7v(ToEO5|jK3Ipe0eR# zdE|1;d>{ow;<!$Nx085&lK77W311HqYY+PWRxh1G|2hWToDy4cyfnxRfZCt<j0ya* ztzW|w+iMHV#9R-%em$c7`mO&X_43%w!ugy2Y)13C`t9AY8WrNj>({R2vI5?=-<thD zS1$*gE=^G*CAI^`+Nl?g1-gk!=>DIommP7p_TnfVQEu&FhdZcaKjW()QHPzQ;{G?( z%i)fs|A%@x+#a8dO8BCipt_gx*(>3HSG|1n-|D4a<|Zoj>t5!~w#@&fdKr;(r8CEW zKPN~pH!LDIqBHl_elA5X&r&Qap))UeKQCP`KRY5nzcashKfhG3pdzB6rn8`azo1F4 zur;Evv$L>wzmTa{G!RiV+*vfXUo@dtJQY#=wzGJ4zj$7+<Woe+m(G&4{gO?+d%F?$ z_B-$W*}n(Wr*Yh%!MkWYzi9mWrNTE##kxwRewAWw(Ef|ygs|1k|33&$MHOWwRaF%> z!KtaKfz{H|KCG>ybNI*+onyMk^bL=lJgIxqNbdw*|0Mn-o?v8bVq$#C)ZEP6%+k_~ zt#F>Uwj|nG**jP}I@&rrI=b1ropm^O-p=FP|Ha;Y1vT})eWOn!2@oLk4hc<=7U|t2 z^r8Y%1u+y6kS<CQGzkGh4^=?KP?RdYgBp;kh*9Z^1_VW#sHoWZz4<-=cklO^*)#iS zpX`}u&1B6w$jMsw!F}IrUDxM(!k^%9fp99s&n?35T-5o%i@_IzLc=dcghyQpi@oZf zNb$T*b4e+6Bh$TO@A_XUjfhFR8l8BJt#HO%BPNiOV<^;!3|e?jacJS~XnJFOQ(sa$ zgVZ&g*~Pfo-do??+Vn5A+06bmHZ?UgG}hME-MMp@&2iS$)YQ_e@8?%NNvn8qy>vc- zwh&EW2FE@Mith~}-U}zyBv8v!bBeQRMFoY$#YODCmRq+<s;hFFo8$U>f}akafA!FB zZruMFGk9_#V)RwS<Vx)HhpWtw|C{5S-nc&eF1LQZz4$pZ{{?#`_MvcTtN8Wqe+bSS zuXjscZPVx1TbT2V>F0Cv^K5pLeX#w_{~YY=<>lr7D4gu`e|I?Fy?ginqHz8X!TH|= z&cpv9IRA&>{QncdS@{1Q!C45hJ3LYz+HR{vglQbGD5Bv9E7T*+2di27y9e)R)*3(8 z3f;qhu9sYB{`tN<cK7E8dYZ<sjoZJU+8&`7Mn7KcXj<;R^~p|1``$OMuZ?PPH(pG> zEplA_t-v_7I<Yq*8u91z#F3UiU#9dw{rSqY*8ICa;~w$%+rovGzu#ZSe){`^m8N-k zuy!Nj!S|t4tHz2&|H1+djdD*WLt7BWuX%TDBeZ@j31l9<8wcjWGl(FGJtEwJ4icSU zK#lfD$SgYK2)q0C%pO^6iVoGE7~)OXOGY6o;np_8Y=V=b>`)0Z$0qBS;Dy^-Eg$Ev zbT60&T<HoK!^EW+Ta92-{vQPA#E6nn8|fH<@@HBXab=lLuH)71oj@Q%#N_k;Aviy0 z1v&V`&+ZM+wcSfS@S@V*uV+aw4GY&sCQJO77&rUHCO8o_D43yze)+JlmQ<>CT!48h zD>B^6#Zu*(&4k^VFZm@?HA?!ElYC=zp@zt6Vc(*MupK_JKI*87(F*Bg|CgfHtUGEK zZ0*_8wqPyQQiF(l6i#bLd&XF4#YK%fhgKC&unEo^lT(3y(Smo_1ZRHR#5toEg_qYj zL~*{H7ZTV6C!*G1+z@Y1lq(!`tkL}J@>pu=q)6R{h2jL8;9UAzad7AosAxpu@?67< zxdqh9f5i<1E}SeXr$ac*Bf;8*LkN8o9UKOr7&3i%v8_X3O9EIfZU!nhQEOvu_aeWz zP@sHb{kXNbY6>mo${+hXDteVnxE~98exm;5lSnW^jcsYtlO5CS(omrUk{Fz9ePi=E z>R_hEF}uN~R>IycbXcfAvHI4TGMcp#SS+?Y_=GH#U5cSwd&-mrr9O76lo2M05gNQr z%iJ24W~s&{9PIB|!&b^G&BV)hT~Cl~e4O89L?=4ldvIpT!9k8}V7hfOg2teC7uDhF zw!PQO78wb}KtlpV^KSx){~9sh&;STN`D*^*weMXW<%bqZRl(ek<mT>V+=2R^b>bSw zV<7pajTYQN$xpgntD!<efgdEC7o3GT-$f>KyAdg#-Yb+WCW-U!=Ih;l=kCs~d%6Q< zua>`mZ{y1fjl68<2?h=IhH?x8jr+at%FPcb{l#j}MKVOaNniwx6r|pk`l27r?XxhV za)nN@86iJJ?5WB-0y%|4(So;1fZ&72)a&eYuEfhYoFjuMfbkQnT>ud;(Kuyw@WNSu zJ?_Kj-e5gHo~)oTg&+nI`NzBq;fR+PYb9OZrt^0bMmWWMGpr~x-0r=RD#gUNM^*U; zQ|_#UO>&=Z{h}wBL!_I}H=fp(Vpi=*ZyrkVdc5sB(^q3gPlXC8gF;Yfuo`ys+%h0b zwi_+_=N3@!%p}#8!UAQLq@*rl0v>1)MVBt?K$VhGtPTqKBNiAiF%k#U=pB#6`;l{& z3@AXhmA`fZ2wR{b_zuJ-@PSz9VH5`<4j`6ipmSGz4|-vn2vpsG=Du|ZMH~5bdzx*> z@vpjS{?MD^Q|R#ID+%mw?|bT?-fgppaf3AbPH==iqAde<rT$d2TR79W#Tal?E#hmA zauP<bY2Mnp{|(1$oVLw2D8yuzV}U{J^O_{8Mv_R`8#-VeY_{}ZKe4UiGA|c93Q&l~ zlf}|aSPY8_yZVPR&f8Lacq54xs4ud_E7j5YG!(1je)TDI<VyGP@MpR)r%7JD;lMmX zX6#lXbOysRxHbWw_ZuW06NBC7hJU;xih;C8hVdc%$WjWAh-VyoK@p)0XXTX@oXnS| z`xD{tcO~=UnkbQ&lV7`&F>8}=v^t(_g<{Md?+1iO0N;9r8BNR+_eZ}cEo)565FX7y z_k*W-JkH)8H{RfoG8)LP_+Ddt|6@*I?2<SW?4y8zJ!16F2`<2oiXw$<09Qx;83JY8 zG<_Gb@JD#z<iXMf<ZhRAA2#aMdci+#ONP=K;EY#4hE(0(>vsRuH^d-fMI$-dkn9le zzq?rjD<5bVh-;aL*FHa1U4CBDqAw8b<j=1k3q}FLHn>YJQz9yf2={NtogJ}p&-%Ze z*JLfe#hl78KKBz~fa^WtGcbNW(=}H412*o6XTk++F~_-Em$7!Uf&5~`H*4UpEDp_9 zHW9@wA_{s+gov>~?L<h<H~@Pj#=<(@=10=E|AIIZFN20z;DYZi*^wM<h|_}>ML&{& zz=lxWvDpN!V>IAJ8uz95T-VQoicwdZJ|z5tU1daG(82I(5=dv@IB?z7D3|D%4_A>c zZUJuY9Gz~#-`!wB?qPwcUcC<53^*I&%qEaI3c)lMqL6iF{zu$VgZSln^2u@NQ-EK> z9mpX^<yoajzrjcj$bRzne6V(LA_Bl^NAu62`$~>+7CXk|p)NX=Tt~ECci;Qh;%xqw z+E9W$TNlb<5PSc}dCm>2{wOg#E|rh!83K0~obc@F&0vUGL}0HDd1T#FjwOg?KI{Ik z_>gZ{q4Q2+x^dhiPWBwmqb1oEI$294+2c0RP~YhGh3vHjhu0oCjR)B+C0Q`#)D1Sl zDVBSqCg+@3j;}$^7dFA!n;T@2J71G^WjvQna6(Eg4of@$hM62}f^(4;krvwbA>*3| za<w;$H~!zQKA{-e;C#+OT^>q2Uv4rFTIU5<&Q~tY=e5mm-N+NE&&P-#7W|yZ-ww*( zRW2|nEqDXZgBavNobrJ61$e{4Gd2a^OK29Qg?6@aR<?OR4)X2Ai=5NXo%mUBO1$uN zY0()@4_8AZww~rCUhJphd{zZ{&agPBwD^Zh@jsEpAwP>FKb{EvSRCbf<BFmErT8L3 z{EfuL8%2dTY(Cx~8<vnEB^v2Pl+u!nV5`*N0@=P2nt17{nUeP@CHe8CCAJoY@%g2T zr4{w~oACv=4a;gi;wpcZ+$k+<@Wj<}7B&7XYn{a23odQ*yvg1vUk$$5?^)K{ck{u| zGWLF%jc>BI%%_Dx3fRc8;8UYNE#**<nIOCo5vrhPp|}Tqcm<C>+=HA%TA`Vc#gCp? zCQPff{NiMR&p~cl=}qh!&>RCX_rT(quy_n!ngKq+g4klOBO;-Gm{9x(^d<Askr_xD z6XF{KNppk`82lH($pi|{fVal1g(Pqi1aLGH77c(X5GwX($}J(FBqmIjhQ$zJcobd< z#gRsXC%4jVnYaJ3wK&EOzYWBzI>O1Q#FH~1GV_+G5GXAY{+JUddK53+3OTUG+p<|t zBuvrh&UIMTszQ~8MU_$mUJ}KT!hl#aAx@4p#;n_b1Y7^d;4+IEEB2mW0&l-mBfnq6 z69Y~n!pxa4EX~Qy=%j}cPC63Ip5qR21n?tE5O%NP(?=i<1JS^OvJ=joNvPVrQ|B6j zr8d-=V<Y8gbr}-Q;zo7Hu~?HxxFfRKvL8Z5!UK&!FY99^iQph2)R1=VC=sep0|!Nd z*h>W?LWmOPmJtEO+X?lEY(n0>?!iWR8BlK~Skk4z`M>;43<G?U0YbC=%}B_pNC>R+ z)+xrn{^k)P$bkjHIAWy%l`;VE`Y#B&3uw%Ou&K>Q9F@NwLtrug0-X+w+uIrUe*FYl zkKVQZg^l@ziwePW4`AbuLf&~+ByHAisN`*aENM2xNwrp<UV`mh1}E&bB>_NeLh>r+ z4h{=4M;+ct!a_1017x05!WG&TZeG*Fw9DFqlzz9xwSpY6aE&FfZ6w?`0e+Yc^=s|) zqo0*!-F8rg9-)DqRH6Q@or2a~PF`T15%|l!uAAfGFKPbgjCm$Q{#7{BTEn>-y3<f_ zjRZQkT@yzqBn{KdUDJKa5pEgMiC_UOjqWDh1ffv9mPg?S<2^~L9MBnX##K0_wHZMJ zg}>@C22@%$wBR?fr#3;RNRTNLEW-lXVr^wmVCz;$gZ&j1Y^N;~oZkqPVbn-C4nSl2 z+0-DfJ65U{qK*O?(;)V!zVhF9d2}k`X|+OLZ7ch=`~l$D5b!Yqm^lf+96DB+v#-3` zWinw}fcx=Cu!2`r90Q=h0=-j#!D8+w(eA(E1}R|LqX=LvOuL%oeTjtH$lu)vI^CKH zwt3R|puba+-swjK>jJvYG=f2D(3$kEp8ig82KFcmWQXa7t#!Rba_X?a;3c}?2qX<v z!<9e}xe1s1198L*U#ROIxrq%|h1<6dQ;;Cy%|2Cnw+agq@dS*)+$BZ2sAEO|Q*2%l z#71eY0bmm~cza{FGXRW<gg65jNw0dy#F~iBJ`)<q76Ud$g0+``rfiXw08(QO;CdlO zk)WW#a3y+wbW?wW<=ELokVz!u$kKo|VGP|ma(D)TLlI%8A9qc?8WhdUvhJ%8gWQiJ zfX#a=%^k6_j#Z|aFnU@02h|5jNU#RxEYZ3HsxVm?IvIZyCO8F%XTmfv?Lv~EMzzi~ zB!>(VZlyZxXzwT4+Igh4^Qa>h)!GT20=hSXkFpqc#?S|k8GhIv#0*$06zg-7QxO~R z6vHz+h*e@jPGGM{7T;0<R6m{VmS$Bs?15r4r&H)>j3eP$S3$oTTDBUx$=K^?8axdE z)<<wy-|4m~e|Ac=S`z`@^~RoJO`l-ivs~(rxLSi^f;JN2nwXL3UsGOFHRZ7o8RWPW zYD{2uz^8DmZ~-WX9LJzQ%Ib%eY<%>t-oVz}fIT39=slow;w5aqb#|jYH*tcsHi+B@ zE~`Rhe*smzDvPG>qb_2<KLHe!VVR8&3cY9Uc(*quo^xG>C15UabXFz<ILH`ylqyFu zqrndo#nIVmfMr0}ZXed4b-xH24`sNjLLa`yGNrnGE~e$`@ywQDQI35l0U!w!+{qEE zifHDjq5s*eQXx*i>mOb&y=$E~TK^aj(s-AnrrS935q1oufn_2>u&PrnPz$D&cc1$o z5bS>6%9$EYuR-V<$U4%+)UhJ!HPD)#jsU!HxHW)bRr6eZX^VON=sx85%)k>>5Q+u5 zWHL@odx_Awt$3JFZ*t$kj0YzJfKak#^{^ntqfThTq-4T5`{fz<{!GcQ<x}oeZ<b-Q z{jcON)_x1dI!nOG3~;(5yx~{3I^iyq(q(@YYximn5!r=8&U+YxxSCm?OR=%HhF&5o z1{w3*5Jrprv-hF*cbihVjH)#xKsjv3^Yt_t#da@8ln)1r?|1K6!+$0|8n$L8M`B?o zmN){IIE1QAB0(n8?{*UCs%uN(60ew#<9&q2(XEh($FCf+`|TNEU6I$&LWmI(<QBeu zZ)B|}^M&{Hdi_-V*l+B|%vpKI<)<;ry!&qAD6nJ(Op)=1qp;TI#GBo}J)22ys=WOo zrvZo28X(0pl`qu6SDS&9MCPyZYmx+z_4?ZjC+6+F-nT1Fo$zA$MY4DuSkO)&Dhtb} z@svLtEBIy}J_1ROtU|LOiQF7AOrS<0R(cvBE3=Ad9X<$s7yo2c!e<k64Xff<gVkF| zb6nH+VYc$Fl|BH<NsVxJZVAlvS-t^VKY+aWaaV;t1|0#aVmk#C*ExjxxoXy-E-!VH zUi$80-<5W(1;3x7yyww@$eh8Fn_*I|kMZgsl2D*`_hv3PKTe`Mq4vPEoHu*cpMH2% z$zdnV0rjWtK#~$L85;0iJxmz`Cu4hReXv>6fZS_cK@6Z6V+yf7S0pok=J(+fDI(Y( z@bQ_{Q=uOp9jsT#4n0>gd!YN9ZP$7@gr28h(=k)4Sgy6HaID5J2;aF*3N6uKI-WMr ztfkDML<1#WY?dN|OtC#Tp3b<ow0iy7er`5UrVOgzvNTst0vQj&g}^VaVLiil+Lm8O z|9QRM%vKnk-j&uSFurc)+(<{{oD?q+v4E@%EEkwmoNj>04}gC9VC|m*@Yn}edG99> z*;02U<y=+jTbL@L_H+j9`xdCN3D#IXgQ3AGj9ZNvpLLfu<cXk5x4<r{Uy5^}l7KF! z#xKHVJcBG_pS3Ol-md}ypkxeux_lvxwUP!{H8_X$xBH5y=@vRXSK~~(hC7GVKvrYU z)C`+#TMYtL|8#3ygO7xax_ehbe|2-;`)2WG=lL{HyA`5^8q=adJnO*PtstdH(2%kB z&=Zgn;Bi3c7{Hgzkt>QYPzxTyR^s{Oq|9PUe0}*uxz&9FP_?IIO(lN=hQyrLZ1NRP zR9KWcuiF)?pM5|PKmFdJOxM!rvCDt2b7T{o0{^GZ(e-FS^$m6M#AG$>6p|022N_Df z0O!os*IDvd$fMwS30+WNB{Oy0O!#4{w3i;3){3_Y%^Hw9>1G%t+#e?wL=zI@dPc2m zbIdB?N1UXWCMreq9y1clI^+lAQ^a(jmmQSu;pHY}UV5KuoCsRVNg2Fb>G5-oDUfB& ztLTebcchA@RVYKy8;-;Ik72?BBMKT|zO+>TfV{Y<cbO)<IL|l?lU*QA2y%pjGyGIe zS}1QbERdDh7bl#(H>%QxWjIf$t<aOj^XbaTGJ&n3sWSOC<TOFGFN9Qi33hJ+CubJA zIl1IC=kbD2DmXWrtE1jR@RY?dOJVnbHcL_KVcR1Wi6FbW>hM2D{&yR<kM}VO+K)x- zNB^RMZ4^DTo`9Egv~Byi{Ou}jm3e*rY}I>Q;8e2!mX^b@afJ>CZLh4T+KOvjA<9zO zFY;7s>G_8l4ch0peC6*MJ(f>3{zoDBKAx9<?Y=UfElz0}BJM&{0jB6U+a9^o>1_Xe z%JziBt3<(*ch<JsrtR$?(^JuV%#bFhe-izWxbnEpzV(1JWG5V*;OlxecD>8}+;w(~ zrubrK+vys!^}K0W()n)B3%67B&IH$9c3aTB81r($py1o{lOYfPFM>1T-g2i$Sl+D; zuS;)J^nKz#-0AVT!Bo_Hb+RYSeWnDDs#LuSQ|kRMf^)$kZFFwIKXyCTvt$sW?fV~s zbA7bOH|-~n>uRx1D^A{!=%M;X>`h#x|BZ90hVKK7-|zchG5=ny$g@h{l8--k7%A^o znx@nrRQ;&Nb2%x(P47cd_=b5?E)laG)Yvj+bg{Z%?#Bt*&1)ZR(8_cDp=^TlDxq0= zIxjf(>=&(Ec~!mORK3nUzwC^q-l~X)s#Wzcb$sgthw4!TkW;hY!|yR~bIA%svAdV7 z2lXTPXR5zxP2_pVshOCqK8OYF>lU&@;Wd#C1DEH|X~u@#M34PcL|VMAOD#y87>0>> zFQ8#i2W(}W@ZjDsv(#c@I6CEI?R2)TPmnK<2K>5rl!V0|xm&Qwk<1|yxEC5Hbfp&* zli~w-%OU<IPQF=pF76RbkQpI<<?oLVZ`~K???^BB$bl*>?}f<u4hbL1$>$@K(cG$- zNvMLsP>KVMjBp&5)T1K>y({I6<IG{SYAn=bnrmuB3LF@j^5?7q^kXC8jffveb$k3$ z@l~m<Up?kB-}g@a<8=n`7FvLcgDA-3$RZZX0{b5$6_oe9-oB<Im93&O5H<vy7!jgx zGs5G^EPvn3N*2h8LLWhu!+V+c1qf>?o5@vz^9(4osgg(1#YW`u2XnLU&vP|ERr9ak zx1^)f<%{^!1s-7XMf0C4NGtm&NQ+Lcn%X5G07D{_aiY3%CFJ%Wh3_cQeB=R<+uZ{k zF7jpUPaIRuZVxYAMBrC9_>|i-a$e({fQ?jA7*+FgK9A8MUO(%A!S%8a&SjKtE%=<p zrNkT(F{9J${S?yV`Dv1!OskaE{ETYv390k8_FkJW%0F1tTE@l8pA*Pe#P{OhgE0!G z%6!IwgEnw>DiP_{1lVg2_gBd;#X?;{V}5W#KscJLdQg88<1zt#(3&bf7g^3-f8I#9 z|G9VbSLGd{MLV5ge)(bur@P}YB9H}Mi9ZQDMhr$!^aTCQE}>;2lSKpRWbvjUZFtgo zfh$YoNtI728dy^0LM=qJN$r}btBsYRk!!;)v${f{%Gezw_d2gGymV`L-#~oyLD3~8 z>6$uAfe$I_ot3apz)iddjiMjq%YBi>T>ta_&<4s5qKs2r{u-F>)ZsSUnl`)SnhA2Q z?V^NIQ$hn2jXP4#HU<J9MSvp%p3_(KyfczK0<VAcd{I2t*$)bP)h_YkW%pcHi{j}J zac-}rxw&p)Q)qwx+!I{;_wI)r;gPO#uiogn^^RMHN2d>*d8ahr_w3G2v}L2~hTDAq zog$5%x&Z;vxD_6ikGrv_hC$EscuVIkBNF(Em#Mlx6cioFBCk<z@)_<A_7&5)+FL1~ z<4HVIE)hfyDb4S5(~71Z!<?W50f?&DLwVmvk{KfaS>h#z=-A$cOE)#UpUx=?`n1|& z|FCF<EUw?aSk5IzYG>fWsAltAs%fg{;m)rsifAj&9P2M2_qjX{n+;G_ib;Tvut$gH z^ETUjseIwpK&TCUPZ;13aMb;0n%09*WbH-&BDGQlp9d3MCy*e0<ZjLB?&z}FK}Gr8 zZbgC!XSwL`J3+WB+7AAu?Azc4R9F0fzS8F#;3R%Qd0!rZMaJ2mgF#lR4pzmkWvEis z0>w*MSo~R=JDOqqdaaR3BH=N0mPwjw)@3~fSJL4bHz1lqn%7llhAHCo5TVwkS#DBS z)3+yY#ScWERzt6}MmTRSw|Devegt~9V8>Gud|UrG>2;{T+s>rL#@HCNw07MOOF1Zg z@){c3`)n=jN5-qyALa!5p5JE^oV7O>q|L4jtebuks=xW>$5@ZU_N|C(KO_}@e~;Y) z%snGU>@0V@itd|K0HLL5mPXj*qc>d0LhZ`zEjqad&!h|o?zC~}A5>rFj&RAG1e=SI zn?#*QOz8hgeq_OXN9MR%q-|(Ps`{B3in$KX`GLwv%c<3xBg%zC#CJt$4tTACO2nEa z*x&}XH80o)0*ylsr#qm^EfA~76u`-+JwjkR#FCOKG3OUxmh8SVX#{!5_riV#c-U<7 zQDM>ZS<XRBsb!M==}+dfUY$S{Au^|R5MHRM1Kf7q{<8_d9scGGy6+Wbx6k?cvNcGz z9!LsFlr4Mf`hp}0KlFv;T1mfb0Fc7!*I=9&ncD{Ny8-C4hai|f{_%h|+j9*L62$E~ z9m?dF9>OSJd4&eUZ=K<&dM{5r;5kYK>(J4#C?}vqI1Q{*4uBXjhbWclQ0b|Cxr+?^ zFE4LvHFh6MC<~O~yDF^`1c1I@AqjdQK}u>X@KXk$t^|-W=fBRTAQs48MeS}7f%^b4 z4C4qpIA;NPB$6!ecpEswP&2Gnj07nuD<4c8FTG0Q$saT)4&*Zj%X&=)8cp($H*>-F zOZZI-S;V|A@Q?mP$qjfv09ddH&V_>n#K<5y^4t@6u8lw@Yp5cf+jmo3-~iXpNERj@ zg7C;34nxR@F=d>AnAywXi$lyH+0-V2T_<=9S)pygvn<ZJ7|CPR3ST5p0^_p3`E&9) z=49;gtfPchHu_qw7Aj(L@*H!HhzV`M8Jh->(GFe<Akey#7snX1=;T!?f!ixUc5Q&i z6Gzz130q7?R_4H;4H9yLB(nz)wE?Al0f-xr6=|05ZActw<SrAy$I|3sjou`W$}a$! zi%9+jl7a_l*KtS`k=|Q+Qyg(Wxw`FpLV6zqEJ+1Q1{pw!B(@AGS(0g1GF+EO>f0!& zScIDp00NOfP0!(dmQ@4<A+SL;Xa$NpX3E!(<)=&Fki2YW^DVncLuLbyG2uD3K-3%| zNr*ktR-2ec@d%Y<NliSM^vI?;{ui=Idz3<aWJ3qaP8e1ib1E4?ocFUUPUl#lCXe(A zIKKw0W396G%yAxMRWt=juz2SIT(<!pK?%tafur0Mo)A)%kd4E3BVLRmPXyi;qIkRT zj<J*LXdqJJi1q%svq_c=izI|>kfs7z8$=lcvIr7RDd|#Vk_3^|i~~MT$`gnxy4ium zrc>oh?k3Y{B5>eclm3EU>D);33zSj`6V8xMV9`q|+L6i!Kx8w(tK9g@S)^<#TMh-n z^SKq;sH33{3<Ci}k8G2=OkZaz5_RHGE!2V!PEl8wJT{WeQ<5cEf)K{$OdjBQ0X))T z*_(pN#{dt>I>$4Eva?;_ixU*RC4lkTT^i<JUXynb_{5gftX*if4Ok(NSL4X5$`sfl z$(%7F$nGBwMXVz!7Mvst1Be*GLV1C1DkZcF2exF|iXl&>FnLshK>u{)oKX-WgGnOF zIp*{V5yoJ^RBpe#J>LNzFWlbO!d}D!boD5j|A0>{4$hy!zH`jkCTcS6$@Nf#kB*a| z;>q&}PLPpxn*3DOF^7T!V%~6n*8vd)ks61Lx7%czd2qjaMC}V2m%Nwx3}XGFNkU;A zzV8Un7NdOg$g)>B%pG4)fR-SnN)UkwS>t;MCWiDz!Cb5J#2j<NupFv<8vcsbn`x6{ z9Ror#0XQlsr8gho0)IOpuwnz;4ImZ=5XZL~8w1Rsj=U46;p+=PtI*Q7L(k}5RMi#6 z{=_M~u*+5)a2Yk4ST<PbXe7#xciseIe&(`yP3a}1gAwSi%YZ<G@oE6g{VeFXA-ta- zh>RrlX4!js;qsNMvKQ`)j+Th&a`LgbP1{HhH`wp!3Z!?E8=SZus`^puY+S<a{4zY? zggEa8ye_yeg;k10LS$?x_&Q;HFlnsAS+^XK$v|lQ&0+#h>q?R0Z@Cw7r?2Xq{@`>v z?+|GN!kyZgvHBdK^dEc^zdyYv1mXWetcqC>iOV&0f%Bj!-vcbV9zDag!k4KtL`%Dt zOEf{`qF@lCLjKMP%k-0$ZHHnNig1!5w*T~~f`>Oq#<4=Ald8ZZAz7XkJ6xsrRj5R2 z#_QQU!nireEt}shpHYpV0VmW*7hS3HzHS%3Ic+XbUC#s1XQ_4f&p_#C_!r=ekFMgh zGf*ag|2fZ(tV|vZi3dNwRF1HC40yer6)Vj1B66Nf!1hr2bWVBpQZG*)fs8A;i;N`W zNFcrqKuIT@%#*XidTC|~`M$kCqb(41UuSkvg<5lp(_fm?j_10<4_EdKA1F>%j=-na zU20zP9q#3Fr7Wh{06P)6!X8NG&|<pS@?PuNOoQiwC!C7lN-rIj2q{+TjmJ{t)6tPe zP>h!;3-Dr}yI}{+Z;&Z-LR?|AMi#5ke9L1~5ub|$@{4Esd~?dCg83G>bFe`7Qh|}n zhzT0vF@Q&h1wbfIyxee(Q_R-xJi*H#9mCe-G29um^Ftg{DrgJP;LEqv*U2gQAaw|L z(WH4Dyj$CI?ks#I4)py5o27zW9X?efG;u<$Qkn)5v?1XPvAkH4Oi4a|R6%_1@q;sq z3$vDU{3H(tc#$AU5kBM}Q^}QrOg>nC#BlAMaTUIQ2#?FJHKQNlHuFjLT*^a{FO5i# z?F-~GlXE;s+pg3L>;W+t@3_T%kCEK9;b#i;ulo#l`RpW$I$?@>YDO~?vw`3l1~@q7 zXIEce$^_;qaC+nIpk*?Tn7Ni3;o2>z4;^A>17EaZ>6&s1icxS#i3#0>$-gi0g~INA zBT8*Ku9tx=TSi+O%K|xds_4QDQwmqx<3@;7g?!;ZgDdmr0mVs7aSxC<++N&<OlFeA zJ%H@)azB^begQziiK#v{dlCw+FxHuhT%wl1kL)^_s?;BSP@*cr*~rM~*~l0`a<?=5 zj|Bp>!ns`*Gd>=SwSD7iHMnq}l__z^fq)_r!*voP1ioFW*W=bK%^3s~6EL`Q;w6?x z$C0g&^DGbmb|T*PdYsFw>`Yd`B*(hmsLqrr<zHlzMd*9MJI0`{eO>;nocq;=PdSXw zJU#bkU2f=r`~1_DVjdb$g$A}odc`2&eMt7mz)NW|6UdOj^s4*tW(j`LZ-J^OeQfP} z1NjByj^zgzl`6&O7tjPs>jXB5Gjn-EwN_%0cMH!i7np4bR`CnrD_6OBhi-TjT8W=* zf3Me3QRr+~<YHS|8C>LEzm@5jlM|SJhQ#aLcJa!it&zZOgxB_1>Neo&_Qc)Lt+MSz zu9C-dp|AQwGsU)^Lc<QXGd54(+`K_BQiy*e%wNY044ePBJy@N2&N6Q{d}m4T=JfkP z`OhY`di+b>J8vJ9P3H`0#`C|0?!Hqhn+~*EHRBu@lDzK=cz{+7YnDX<wDg&BONW4o zNs=B0sIS~1MLiC!+ufRzTeFIY{J71Sy0!fA)>}@Qug7H8;xDGefi=F=Yc?Qv-iLo= zGn(u-ts5kDRK%Y-;NO#<Ah(OBE4n}pWBE3yn~$i_1bTj4vKl*pWCNwO`bm6(<P?&u zfy`FjBXU36TNygS;U4u^z>wFxcfE*nzbGuzMy`5*s-%^!f6$Ub@8*35)KnJGL&*#G zl6jd?fmPkY?uTE_`R-{PQ!ou$%XCz*vWv>!+tDCu$wq)v2w(_0TK<D7l<`IJ$X7YZ zFn?7;LWtWt9!~$NV5p;#;>N2KdKiB%=ox)Sh_$PJfv9nTsM+$>So14RwrDzaHGY-) z>m(g>{ArRME{`6jumBqN1?zAC^%pK_{P-f5yKj4B|5R<^v`oFszIeVtec_q<;{LBC z`6{Yuiy}6lNG(Mn0!hz6h3~_q<FI}A+{;Hm-_AWOm<|k4SlPjVRokkh+BXe;@7^51 z8zD=i^h-!PW0z0-bLk|X{08)U7~gm8f9m2?75v(T-o5`GovR)(-tZz-G+O`1l?&Q2 z?Ci4ZqE`-Me<WPbQ|kGVSc{9}Qx}{6aXmKdn!EaC*a2BnGEx74lC~*w``CJsRZ7}H z^~cbJe~OEOE2-`WY{@tZSjNan-veoW!gF5KZV?2=7aII5u!+w)uAco&;&)lgkBpWQ z{q(b2Ez&KVCHlsh%=prWn#Hl|H^$4L1s&-&tyLeQIZso$zJ4n~{ko-}0P}CHPD`NY zs%7`=YB0iozgG?UwEKzo(`Su{d&fToU)2N4ln)z9K|NH*qNFDBq#n0PO+7Eq_*(wp z*!mYPHBY-+vnuKQ#+;0n7QxeSVgF+{k$)bZ`_-UN9qsv5EE>mmG5vRO1^5~H@9wX| z3K=%gc?hcg^XEaL_W)U~)jf+K<3*M!FRR$>tI&EOv-??Qk6-r73jHgo?pyHfAMp)8 z>u>-5tfT1v$DuJn23)Rt&}O2_U(*9$7d;%;zn4B9$)hhX`>)aYMIiT@&<9ofm+w<1 zP$rvnKCVjs41^#az2s4udG5}uw*c`~RAxW=0MM03xHhhtu5=o$+}LV(y@S>Bj}(}y zkAMoO1?{1RDO{pjp&NVX5vsru=cb^~a${K%`qA4PpXDdWIa)>0=ea$!LKeoJKKb!U zajHb~>r=_J>@!+~ZttSUYZI%IdXn%2r(sq$A6d3}YGNe?4A!%C_5O&A*<e%&d3whm z9z&+zL?B)VEc#t}QdA@TLcoNdOoD6pTq!gVd-wPiNx4MC`%&spnVyGu!1EPm8kS0x zobL6LqulJVX-2&7^@v(cyI~%^yZuvpgIQ%=pb_?~(<WcZsUhH_vr=f8UexB=N5LRx z@>!bH)2D>smwMpEDFSx3Ap$y}+VA-YFj6c9?on3pUH<i|Ym_f_Z)p9ogb>H4_vcxw z8JT3eL4cl}<CC06rR(~MQR^1@J9hop*GTiPi9BIevLPJooJlh0(Oy(C&t10{wkr2# z1VY<pV@{tm{<eSG(uQAQSU5G_z>&*g9p&vZDy=W)jdrt0_BRUsJcNCUuDOLjl%8Ux zid^QgkilII)2E%=5r)W;0D3ON!ZuClIjEOGtp{I`q7I!1)S}!;KAZ4UvBWpSP{~>z zH?c%%afKIzip_PS!y)LlQLoUw@8yz8RW{{Ou5AVv;-xm2!{#!fq>>0zk32jMg&|hs zq=jOJh5z|W6~##=9#aG>c|1?f`!srE9Y+>OK;F13GBTC~UesU1*(e`Vy>~HaWw!WC zLq<b$vfPMb=@6H(THC0EWPWL*?Z#5su`b)2sXdo_DctG`L!#g}l?=RO0f&Bh#x>`Q z>fK=7yBscQo-1NFnckIA#L=nNR9{-djoV!6%55od$nrXf>#x=x`B2!d7x_ps!k|C( zDi~c)gDcZ%6j6cOSZ3eHVZ~#kBL0aS{g8UvsDRoOE5(stWk`8M$~|j%^gX#LYDDm% zlr~uW`bPWs_^&_OOdPj*U^{=em2ZdkS@^v$Dd+t$VRxI-H(1p6))<0u3m$&k?N%3b zHZ1rXjguuV1QPHGeQw3~cgY^fZ97<*QdsLF(G{W5TA3nhvo^YySFJQ-K9h3p^E~!Q zmML;2RaWE5BXC>mm`IZG(rpHpZn(iJLRseL`;^$jcwD9R@=s=c;{&6ud;TsuWm8Ij zpLK}qC808#w;mXOy8rvoc(0`~Fs7{I<%7<hNQsiGdryu3IW*aSZvP3j{Y36o%ua-z z7wYTFtN)lDtYjX4fSZ-Q7ud0Ay`}SWXW$>RKcAo6ru`g!)_l10b?f2rfByb%N%$L( zX1W%foAi(Ie+bSDCE~ojEO36D!Rg#e78yk0rKk^dS5C!?{XxOam4`nEGvlORzk#y} zPT_XUWyQgBkgx9itjN?<LOVLxo5i87Vv%OzK;`pd6P!7FDd6%GUmOkirLIxZ&ql9a zu%koNdsot+d2+({JdkQ`c~qZ2ava%koPx-noa5SrxOkz}^ge;}2w)DkbYP_}V389E zk(c=jKYlD4lPXha1Jwh7?uOE7e!ke)H?8bs!b3VNVgf${iKStAqoFCU8R)a@7`dVg zXzd{ITgG?gyXAy)?qb4AgUl4g5+W+ydkvv%Yh%u<P}CTzxF+!etRC}%!wrM$-}Rso zUPPfrX5_UBewvxNZBU?;2`(v7T@ei9>|Va;IfK?zjST|Fu{be&mCA__fhmHP&BD6S zYO>k^kwasF6f>8vCqX4>%!W>LpJ|0^433t44w*uXd^8B@zsU3R^@Vte0*-7&3y3F8 zfd!Xy@UaZ2dOWCXl{D_ao##Xr`V8Qz>I0`&GQf+EK^jpt$*QecKrdPi4tvx&KY;-D zVHMV5?;x9*EY!ue;rcho+tP!$L+59G_*3(x&UYvF3w6!|oU)B3DkM(Be7&dwZ-_<h zXJ@N8J~voomOgLGpG|p`xeWfj;3V!$N!PpoQaSTo>css*w1bfIIY&`db+Ing#n0JZ zW6s4LHS6~vq(Z^TXpv3@n4I^Jum`Upvh}1}ldrmJp!Spg?8hUefokrVHQLCXCd=BF zq>s3gxQfPRSmU`~{-D~^x3&sV5R^ceH*D2nliA%p6~!A9>9v?~=1OmwsYZ0}sON>B zPU!-l0YOi!W=Y4+)5xbu!j6)snX5%8OXphQ7x4=VIVq<hc^Wt$UF61a!=NN7k2Aoc zx<y3a>)V~s=&z0E!0I<n96n77w9wjfd?=z8<-_6@y{iDS4Cz6Eifish{;E%jywldF zORYNdtDIM8;S%i4bn>ymIxGGFcb;QHRmveq!IwQQ51c<=^H=ld_~ssb@vppPAtOb+ z6$KkD&EiXptQ!t!v^Cxs=G}aZl>WLf4pv<lVouT~m3^VwdpMKHtyA&OGl5u<FGf7t zNTnaW23{36N-pVXKW*Z^A=%;iY(}b`G}Gjd`Mps7HuOUI)81#-cu!>K#`=G-Qz&vi zGsLdm<<MV4fg@NaV2Ml){Ru2%_yo0bo*49XJG+3l6e!uv<Vf~82o3h~dL?jw!|M1_ zQSDre`l+YgQ+YX|frpLNI@Ub~(30IKDD-UeKWf{)@>@-FuL#=zNJ>od)^MmP>UCDD z?;s?8Cn~w<1>qS`=~e=V(ZaXRN9wy~u%!<AB4co7E>#*6^LqE%kEkcvVR8QwoZ-|# z7!T{}*MYaY(>*s$HrWJc;u7G3L=JcJUds3Z%l5VYBYBO_ZAODxqBybJNwoo(u*6lF ze=d!3_~eQ94m}+{BX4e$gDgBwS?6;4X|8mMLsenH8LT2%8=!GQSm!Edh?hCH9z%p2 z3T&1=p70w#J;&-ZL1Xl7UhdevNi(^RzT`Z_70{a6j10Kr*(=56hq|JwhTA?C_r#88 zjx6mFz47wcq0x(Xyk>Wf{E2lsZZlh?bvga@GAjPuM7iCd$|wB2`xIMVt|l5JklWPI z@`mx+2cNLt(#Kf#xf65MbGE6K_qfjyXOEbd%Ip*hsMk5XQWuYu6YNE68M4SH!zS(I zR4TvTzCct{w|$bL^Ciz`BD~4f@b~L;Uuf<6@f#7Fpw&-@2WgiBM6PM}o;elI9e?kR za1bM9f`@X81BVwenk0^iu6@osetm!AWKer00ao&5SAymT`Y|4QYbWtS@dwXm2SWSw zKT|+6;adXx#Bbkjn|&4}jNIm%dYc3<TyZSG2MOxO3+9WV@P>pHq>!03!Dr#N@sJ?& z<V#a=A=sf75pw0FK4%WTOA-(9QJ2o>^8hY|l5B-3KloGPc`V+YbuMH`|N2X}I#B`0 z&Rd^7YXL})z4apKGsmf)GgBP1j>4|9C|BM+OUW1@+%W}aF)Q?aW-dG9iq5Q!tpktJ zh+UV<*{Bt#=R`5HB8ij2U>#pvCt4g|B-D%sm!qF^=Fq*1@KfoiHh^Rt&PSPasT|gf z9N{S=6i88+wgr5kN`?NMU%1!iD0Ch?RZapbuva7qn)6Z?@%3FiZNX00NKr21@PdpH zkc$!9%eX1mpQF}CwTi<>-PGGHk9>E<Da;Y-{hTLOWt=I~!6X5A7A%Mq6A2JyEFa26 zW920%Of=B8lKAt4oSt(P@~&(9M@cJ!U!8$NqVmv1!^)M<B4H_vxf+{!`n$`6mKN#n z)Fos>ON;GC(~SMbO@1wh-j@f{{PEjv$Nj8>pUNEzAL66}%onXWg#<=j#^kgZCk(4z z^|>en%3Fa>C|-N_`?(J*z&@_jU+q18bH}zfhL|m7VWP!&)Oy3*<HiKwoSh8CUS!1K znybwV1&w?K2VTe(U5{^Fbe*s>KNMjH>9Rlhmn{PoPK!LT^6|D#mA4<WPD!t!28+R) z<Znw^r{*o#nK@7mEy&NslRqy}`A60%=cR9*pB?eF6rh~Z;`K6vfwL673lGn`F7mKE zZ|htk@zG``6s#?j-mD5+I6pXhTIu~WlRK7w>=|)2b%~?GE{jFyOIL1*-w#^1^}Fkv zc!xzREvPTZLwlZ$Qo<4MmfnAI{Br4y6L*Vz7lU^_N|#^iR(j^4hw>Clxtcv4B_Qrp z*vcZo|IXR2)@9!_HGWF9r^Dsjqg?o#Wi4KFyusczDYLK3E^{BuZmjou6%;s+%5S<; zb|L&j<>!hTrzKOUY{U7Jcf-mmpGu5*AE~cD(nLBE+y6BFF*f0_%)FQ79uMreClo33 z2G>b^Hv2Tnr#f0g`8no8SG;_(RUL(k$Nywqice6hi*jnXa+)4B^@=j}Fm)q1v5s0? zmwpABUQw6P9As6aocTaG%Z!parkp*uk*u8AHH4%ru?fx%?3A+k1W*Q1&(1zdjE8Wt zNXP@_f;W;h4T{tRiF*QoR95K-v&h#7E(rfPU|Ns2P{B<AWEL3KS;YKkm9mVRH<TbH z0u-sBU><nAG@Qg342Hu=(i6baIcMa;P<cKUM*+w{aAhJPo%dAmogcAqk`#u>qg;<z zz!n-kzA2)@>7qiv#<;meM8JVE0ViQBAX4mTJ(pya45dm7P!Z0!DPWPG(?HAFtj<ya z14vS0Mf5jV9BYWLu%Tsop<cqGVf7;yv*D&*NMQ)z5Vv;}4F5<oQ?1l!Y(6~N_1?Wz zWTf>msbmg|!-RB%e8gfJ^Ya0H`4^8Y4pq1{_6N>&$*6ii2yVN3u|rO^SBqFTy@iJZ z5lyNOi(LnJDOF|-h}NUM4>o&tH|yL!x?UFGq`E&eQ`7ppHMqq7n%Yoo)_}CwtdZGn z&uO?@wZ-ic+QMs*uXl8$qDjWKsbdwF_uaL8b*OwU`2HJJxfPWspdmPN1m1a+O>m0Z zHa&yx^aAfOMRqEU>T=9#6(!VP4og1QQ=fUf@X|_sR%w35O?}R9ZZ<HijRN2-M9()* z&!tk>PkHcKDldJAm~X`ickMQ1PeitGokO6b1`@eXx|X^Vhz?svOU2}*!Vp8qRswP# zCquD-?O_ECa00DU;?$v-JgB5YvO3X9Pzo=YILXf@ygWE9;uwM^K+Vm3SuT6N!f<>L zvF1BT3IL>U-t)XQ*=AbzLJkh!$H_{m;24b3YZOkKA-2DUiVPRPFy2}128{p|XWT8D zuxL2>;Ft|J9RJ$Q0xmU-CaQmw3!jV|`)EXASAFf~v@{KCq<m55|F!cXb!_K-b5JNz z=s!rN1@QYW<MU?D-!H^n?}+bKBR|L%u$YJo5RCb2tSoDYU7Cml3@w(mJOhNmUK5cB z9C860@7=)SYK9#`hLF7g&bY|_?v`E95cEb%W7!^bo(`{TWqr@wblc+_<lvJ62_ZDU zYmiWo;m<kPrIT9+D*y>Pj@KZAi$27&29PKRz&D7zHTH>>B;FD!d=pT_yDi@HGj|<8 zlHp@D(<=0@k_klY5d~YZ|0<bMLu~Ytp4yCOE1Bg0E(}R<d#jq#3}X<bj^iGNGI$M0 z>_5a)n$g-rHEJY53@KHy8Fgfc8<Fx)h^Dz%t2Kh%Ny5J=GXmlsT7It%x!tn;KIpAk zxn(3#Dob<s<QC5c>F5t2yrx}hd*}cP<V27Tz61F~BRg_hCIu{1AGTL75LFwa4<FtA za<DqYg$1Gk5qt_mXyzxhiG~D~q?<|dO=P_D=@2W&@<w)uWs!94$Mr91_Z)@DJ0u%v z<8d|G@;b>zr@*#W6c~IMT{HfE=_}g}-1F1;(7z}kH7ux1F+Gk$6C!ln1-~z8;%fnL zjLvs15JW}?Z;z99+Glf_GPOiA`F&oB#&?P6Z*I{Gy;wd9mT#X3>%|IqWWXjE{AwhJ z+jd+gmjw0!G8fr#*;&y2m;uH<|2Ebqk|EGZgl}U7)PM*IK+%6eNpfWQ{SYWQTKS^F zuLjp0HwuqJE6)gaG+zb5+C@65?T%^fuHtGW!V!aCJhcIwy@%|%PYX=BESvSs?U5E| zZ?sfogX&u?_ZAJAy{~54jQ27)K8LTm#%;P0Slvt@?+iolMhCA#w^-edfoz-ZxnNu! zkz094r&SwQ^Hs+J#B%^xPtdTy453{<z4vQ2JwgsS4iswY=3Ua3k*An(4+~7`p)tDn z<3n5vm$(du%)SB;3lS)UCAZoSU$4%1HWw=eL?C-m8=a>1Km>!qZ!_d8uY>0%v&Y=_ zE4#pOoOcBKS?>jZCy}!i>-1<;V1vQg8Jkc-ba>n2aLz$K?+51|gP#d^dd5gdBgS~y zBXo4%nOv@B4INZma`pPAeA?$%S-aaMUGqC%kcS&?p0!_UwTMvW7q6DfvLi(9UVu}0 zm$!d!>Z329Cqw9UoNO;q^+On(5vMJS7mCB8EIL9WI^sf!y0?kCUteGHxa5C{Xs|`( za=D_LOA<WQE#?>{m2}1Ul)2K(D3sBWi=uGq-~<<*@@Cm_!CM$>mtX)*!9gOnF&^zb z#VbX&yiG()etEFefx_6q6^79aB8;FZgh(+RVBp?G!4aRrp6QnJjR-R01)Gk2pW8P} zR)=>I%VhCpU05YeN?dFNpA-qUpbw+}aD3Qv^}=*eIx*=H5#H2aGs57nd2+HA<}~me zYoiaQGqhz5@E%|ARIG;NR<iZpp=+$aTaU0-?p6d-Yc`RQ`U8mk@$C|;d6yTGp_<a( zV!*!b{*bG(8>Dtns4M~`1RqB2cL*Use3`&-Pi<Z`J)FtzJBd_-n~Z#YJ%dbO-bLP` zwC_3$VK$Drq-SSs41@;}Q5Hkkscy;nUucxp-d$oD-+t)$&S6<v><0{ZLHi$Gis>ip zZCU(OuOK3FmoTL#_bI&U!k<z9Puyz1Y+y&f%N?)^_xTZ)d>ge%u?&6$r;{KTT#6Kv zDXZk~At03W{KhR#4WM!+)@UWc{-S1!w#CY-1{ch@4R8<UqO!Y5;-LX{-&?|UuJ+@N zIb|)n3byCx1$Gk-lVk@qV7*!(Sq&UD0tE;0Dd5o?duBb@L*5YsuS+<WOM}`(gA2ar zbHBnBuB~>UQg?o1YdTnet}^DIqhEL4sy3{$A0mW?e+EUsE&ebfcW-i&YvLHuw;wn) zn#=|P(Az)9V_!`0;c;reCizAtjDPHXVQ_9A?#42zE@;G#m;i2cp8N)=T!@7`+Na<D zafz`num`9Uz~B@}ycFU$uZOnZ{@`mE{MhJ^$_KcS%RL{OW;HKR_|R^REtUjJ=ma3` z24jhD1oSBSXl~Lg_tQ&~Ba7OAKW~qNr;cN(8!yK>z)&3Yv6#&;9cq$PAw^yRLXvru z^e_hUhpDMJsNYB(z;KuVr3H;_5HMB<cwUfR!+tNi+WMx<RR{log6EymGHll}>ZN=E zPF9Q(>AZmy;**BhcE+zc3P7ECQ{tjF(s9aZ0@8l?{lFPAf*@tIx#H+{Q)Q_lNUSUE zX{R&7FU+q%slc2RvJ|jY9J(TNLA<x_3Ei3-s#Hw%ARCMdjLR4{ZR9CXhIs8gUT?P@ zD8Zhjh}SGgJxYH1sBRMU(ck=(taxkGhq?PVV<X-^B*8?@%Go8Q<9SD{ca%^6_uTo` z3-dXq|99@ZYrR7bg%3DPBjHV@zU=ek{U#V@a%)rHJ#Ho)CQ2f(2P6e(=!Q9Ot`0Tg z!7r%5N+sF`8&vscbq@tz+{gMNaSj+8m1Mom33{FfJ{gRN0jO9Oc|_YHbfN*a98d#> zZx+z$N$`=}gkO_%dg==v3a_{ax$$OQJD2LcoB%?jITt@rze6kt-EbeeHKo*4(TYho zhv&Vh9zbjY9mK@g(X}cLHl+F^C)xg`3^gkQ2KYF&qnj+G`tsO>iH9FF*}`B|hc`4| zjU%@h`|_@soM6`2ORBRv=NxrOP#+x*$94bON1pC;vQ?j*Iqh`9b=LL7`Dw$An(FEP zouI$91D}Q^TL!;U<o!@4GMoNzXh6rQ+$FceiBHFq543Hl=R~#Yu%^WGbql1N9sd-` z?JY3hp*QtZ?!hniBFo}m1(Tf>n<t-Zg$LHek4~ViM7$D$le0I3!PbxNuA~UqNp0~f zS0-xv(s0y$<;lkOr3TgHsvv>xI=xW)jEwfd$rKy|^b`34A@{PXg_oZ~>o(HqxOd}O zNY%YMUQZ$Y6TbttpD7xY_;QN-+2B(Zd<fVyaW~8gMcUviHCV(U(l<rtszDWppa-im z=%vP28_Mh%dHd4~U$&~dNkoF{PS;}itDT+|rP<jJRX3aaw?bxj-S$T0pPB5FFQVaw zU+8+&IXyVY1O9aYxA^xLAs0M)$kRe)gmc>^MhQqfL@xY<HUy;@aNY1<9H~GCAXTJz z_<gR68vqrLO>b<xDf*I>Hzst-8J&Eymh)N}8F9$J@<#3qxi0NS;Q|U-wJD*S#m!IQ zd}90{J!Qr{c1B62Y&bL>3*}tn6w^@_=bF6}iJ#&vaWtfDeX~&eFedY^k6q+!pq4BH zy-XGlRpK<EWm=nHlI4YHHk{rBK0inP=H&p6lE?h)a@b@8$dj0;uPhi&49}kvX>cjI zXgRQ`XM0=S{n|TWPLd!QJp%Y&?A-@UQ~%pA{4Poh1qv;Dwd}q3(3Y)iQ9+h~?7fGg zwost#vXrF)qHJUjL2VIaBM2e_Dj+H-C@Kh|)`#E!|J-lx`?>Qb@0%x2@+NPuG|kEP zoP3k>ZBBCaI_G>Ydy(3wM33UfW#I~9sIq5R0jY9y_?G;InN`jN@v<dMUb=Pk8me-G z6E$yrHr|0=+0_47+wG5HMlBrJ_3(L`!C*xu)>YI2g00Vd-l)UL2@yzkGSi*P%ZcfD zD;%Rf<n(GgV|mnzHI7L~-?sv4e83}uA(?j@dK%l1-|n(wAFL>>W+xGh{Lv*RtV8n) zZg`i8*!!Dux3z>3ch_a@OHQ6?&M#`Rl9Xv!FjrWsFLaGQA~;Jd-9G1Ee*j@u__<(y zD)ej0Lyh;Uc_mgpO5e#;t5xo_O(Q&uG(-X>sNPy)9dbl)_D0{8`OahQz-6BPO5=m> zOo>g5R=aNW(pz=&pTo{PC>?<o{FU{Vn=zjYZvEN)a6I|D^|_4MYkOJ7-G>w{f>L26 zTZ}(ln@P?pfh(%?;VO?9iiI?5_-}&Kp5NZz=5*<1o~<sv^j`$04LZOe;Dr6^h!n@( zIj>OPX{chnCmU11V{U@LX+&3Ht*Pcm`>=1%!t<lcsX%<op&j_u0fzOM2az?Fk~~~N zXpq}U;+-R(Zp|rbWIq$w1Uvck4SA*F^`gu<r*J0DJW24$k%76fQpX3MHE;OcIpZwP zA_SL2YgtSiG268#%Of)G{X=l(Zob$Cbm_E>=8Di`P?Cv2P1T+x4ve7lOwQS&{O5uW zta`IA=ic8n`AXzgh(n=+@o*w`J0zlPNvSk8rS?ovn9e&{&l1H(t#o;RdKg!dcE@Vz z{eK8fL8I4)s&^&XY+g>8EeyEh;p)Xij*k1O@*5cFyKI{H?K1bhW^LWs8+Uk`ScTXk zcbZcERZL9LM2E2A+3Ir_1U-NpJ=&k|DCmY5doU>%(;|aDz%R(oeAMcsad+*cob&N` z1Lb)v{9`8#eCQzujjBf3D3a~Vy|_`PkEQ6_8J<FKS-bfjqOTnhoK_wJ;BSMvKfdPP z>U*0I$v0xE_3c86!mPM*$!MZ=WMY|+k1X%rsMgJIMXeJva{D^tZa>tHcmH1dhu~a7 zsOOEB`)Ue)p9qTmUUvDVug=qwsm8*n8(+))tY4oyA~>V?e;#$S!gDyM5v6u3Ifb>2 zrAueB&pxjb77jQe&it&PYxmA&hXAXv(pm4B=o<Xwrfpj3T!BbTo&Ds7Lrv-PWcQc` z&!!KK!=>|4H)EP2n%=v7D1CAMb<92D<#+!OoK_;St$A$g7o^KxYP-j_S2nHrnU^h! z+>GsPbz2ScD_hdz`KnJ#pJ$6JTh@6U+dISd>K}r$$L)yV6khy?;IyH~$}sDFzW8Nn z>7Ib9!S#<`8b>O{{Tp#K&ezZWAviH^M+7H*`X7Q5aN~&JeE2leul((Y<@jNI^JMN3 z!8s=M55f82l6lXd=KIJo&#CEx;qv!Q<q4A!BJ^iP1$=jvc%!C>p;KkdH#XvhF3#i~ z8@?@lW7E#{;%sHkV2$~Wj}qk<pSRL!4SqL1g)UuuLA$wn1MIpC;`sG4=5tv1hovq5 zxL;C_=&`+`(x0Qc`@%mS5uCj7TdVYjhx;N2Qt#b%Qud?Yy!`x~D0uU0n0Vq_{=e}f zyzbu$I1=9}-iw>?d;PiWL;tej--Pa?hG>4$mp5rwF3v@{?KKQv{N!dEvoI|3vAxD{ zHstE1>JRSwCLfLnPWq*lx2^||YZAU@b40C6i@qE8J2rabZz9F~{Gm|Il|9ufm$w{T ze=ViO?>~4NzLO@p`d0clZSpGp@)5zg>wERr>YpQmv)zUM-8}Bkwr%JU!MXJ7!||>o zg0of;z=T{pA~;L70i4K}=x|_q6Hpkra71t>gd7o^FOCS#07bASa{h?mJhu(TBcC4; zoF|$f*2uXdg42}ktAy28CzWrmE$`yDK6oK_eOo>RhJOu3Zl7&owpL^YvqOpDU#_&k zgtuXNcF##ITjX%~2OD_h&h!z%>DC1Q+q~TvzS|Ps1_)!dzQ<~7$x2h%s&7H~SR*cF z9x0rAbCmlxTaFaY?VW9=I6HQSFKll<v40I`e^tjG5I%A^&4JDOkV@fTZv8l=!ucwg zli&Wu?haL?^@rG3R%z8up|4!S3Mftb%(zY~s(lNEw_lLUV>4I%VDc4xTY>w`%)&`k zc9+)oPO3cF!8`%>FWosg!&Kh~NAN~9@?M^K8EKD9w*Q%GKbq0{Glz35Uv-_(%6}(> zzX>6r{+YjybFlHNK$Eq=c^kn;xq>0nf+!`yp_ze^Rw2PHp_vHUT!iqiZH{v`%;_`2 zkMh{xeno!B6B*(VO0W}sn=AUKb#+k{^E~K?;JlCchDk<XxVirDwP9a;!D65Nk%$!g zJ0rq21CN;zTT;a8Ms^r{6MxqvX4<xF)FvVPNy7fwYnA-1HYAT@+g}ScDc}*o83~|8 zaE0bCOJSws+LkW1N&cB)b+eMDUsYR5;u2B+CJ7uxYZ19})RtsCQC4_ax5&0{#A_rh zuNO_WQcbQQM9vz^6N%^hAtRc4Dy)smpwv_T!YW#4Ri37{C__Zq5EW7?`M02oKJd(i zNO>P1w_YXJ`}{?@O4LzXsj*Yat*dhFErO+<eDR(<r-5jNN|oD+C>);Km&luXM9X=~ zjyDUIWBKE0VOl`-$`F)$3U5A*-)L4fy-hGOMc%d&Rcfi3JPFoYRf<}D^DJNHuNtpR zJ9@-IJ5v#QlBmv$LZ;N|w-7ZX3k+;%td#bJ{uT7i$LgN#sz2M5{nE7xJmqCkT*yy) zm$JbMMBT}J0WWpBPKlbD?GdI)<cvfadQO7*@Z9KGb$$np$D3yd9r$eig=xMfKszAE z?G+*ZD{TK0)2uXngF05yrqTV3XX88iWF<-qi<0y7kn!ZQisll+nx2U^J=bCCwrlFC zVdfKU7SLf9vTGKhVIC80p3q@_dDon%VUZGTk=|jEy=#%DaiS>tL<!o$Hk!+#gG<d5 zrB{izAs!E@R5(AYOG7FCt>u4Gz)POxK20;mSE6)0QAQf5g?|y8s~R@%qHQ)iY_@l8 zzG~R+Mce-Du>G@Z3)Hk@im`)t{!5O~wC9eo=kK%^-m~XEW35|>!qHBip>g}tvAl8` z{PbBpm5!|^L@in&E{ewEi{%+XbKB6+R+VVie-WHMF=qoh&xY)sjnH(AiE&KmbiBOh zNYr#niE&Erbjsdy%F{eo6mzbm^W2TSe+bU9qBFKYZY9m5sVue6C>x`2x70KJ+cnaN zr!D{GY1%#Kp8L-PXN>!1r~CGv`&Z5LdokyKcAo#UcOIza!4&HO@A6>#;lZip$sOy- z-{r~8<K}}s`X}me<Y{(w2-a^nfamnXQv|5du1B2aV6>Oza~`W7-u7BPXJUQMb@{mc z@bT30^@;Tj=<*Hu;Txgl7ZdB3(B*gehaXYPpPmxypWfx4{lh;`D<J)vx8{+jS?Q%) zB(U{9R3o-9^qszcfj~LXs=(7V<>*BuZ17NQ@Mu@?<d5JPt&pQG)Gxb2Ui}DJ)e3zV z8@kyQy8R>ct5(=vY}n7Pus=V-fZG2eI32?u@dWBV=db3uFiZ@jeRt8-(rcgR@46OL zuo|hV9i<r;rQ024xF3brjy8>pKG7X*y&r9_9dqVL%<PVF+mG?oj{Qf>?2ZlDkB!id zi`kDYtBjNV2lUi4*o$BuvlMrXY(E=V6qiuaop576p;G(eow$p2-4~noFScr5>WsV8 z+kNT5{w11r;!s@TXm{e|e&USw<>ztq%SQw!k@rHKar{hMplIBc535%MyCYgXum0@5 z`e*+tP=~-2Pk<l2?{h%l)FE=m6Zw0H!Usg`(G&RbNwPgjiU&!mI?0;x$-4g{IDcwi zO?lz4c|E@O@s%&US54zn&h@0Y9i({br253C2K1zc9Hd6*q{YOiCH$M<)FG$Dlhb?1 z*$3o2o%Evk^pfHfhl490x=Gf2^0##|ZXIN_>ST7tXZH4FJ~+sv>0}MXXZ?4Ab5$qj zU3|`FPtNv1&X=ByhWL!1J<59rxj<bCQvwCvOJVy-;ndCJPRQf$%@h8aht<uOOvsnb z{=W#$gaX~(0>cu@FP*~ww*+TOLh=7T!5O8C0RXT+Apj&p)MSX78=IS(AO97f{#$Hq zZ5=fmJBly=HNJlR`t85Q_y35!|A-&|H?hCJe{gW{^XLEa`FRw-e*OCW`}fiJzvG{w zp9hDBhyO9~&))wf{`{x-&phV8xBt`5|FZetk31S-h?)#hlObv{L`|}VRTbBDhN#I9 zH5sBNL)2u5nha5sA!;&2O@^q+5H%U1CPUO@h?)#hlObv{L`{aM$q+Req9#MsWQdv! zQIjERGDJ;=sL2pD8KNdb)MSX73{jIIYBEGkhN#I9H5sBNL)2u5nha5sA!;&2O@^q+ z5H%U1CPUO@h?)#hlObv{L`{aM$q+Req9#MsWQdv!QIjERGDJ;=sL2pD8KNdb)MSX7 z3{jIIYBEGkhN#I9H5sBNL)2u5nha5sA!;&2O@^q+5H%U1=Kt44O~n6EQBz(~QBhf0 zNkvsvO<hexLtRr-Lt95%&p`Y5ah>Bvy2tQ($MMJU#zrQlrY2_QCoE1_SXx?GS)Z`B zv9z<dI(^3G>{)xKvu9mSySSZkKYz-@-TH!um7j-gpx4<juk#T;zCi&&{=uO^VWAOG zA#s;3B$CcurJPPFIh$1B8h7_XY)M#j+NH?ED^ZD8qOTAxCM8Fc$YB|j(41?*g|{Lr z8WI|NFSjv7O@^rXKYdMxsL2pD8KNdb)MSX7;@|Ooz6%UdlObv{L`{aM$q+Req9#Ms z{QteEDd+)CJ_JJs!D#>{Rp)9;42<Y;S6t=B#hRm5C{TY2c(VrN9}d<fK&1g7y$bMM zU(jqFSZW0qL|__W@jOgpQmz06Q<)4~@OR~y1OQ-L0N7v!qJRWhwLr{wAm-t?rJoSQ z9K<#pBtwPR0KiOhK;%cDibu08pk99kViOK|%v5<e24Ri{S*}2=sJFIDn+|`1%!lrp zAL619@ezSWtbMoyImp{{H!pvz*^tfqxLMq+ix+CCbXa8GjsaiXX}t^p3Cb~FQn`c2 zfs8TqJC|{gj4^=7cqL4tO``0ImP(tbB}nR5YkUjH4hK_O1fK|pd0vFk)1h819sdtS z&9Okd2nLqc63SBFm4<;SU94brZe;3!q~V%btGjINV5Wf`h!voz-rdV(APlC*R1S79 z+<jS|2|5SPxCA3nn-LUH=u)>npwhJdp3z5~?MILy5@a|H7FhwEz?~4mfX!PV^_H=+ zxQ-Lk;QR)l2(?<kt`8c0-#i?`?uZj=fhb}?`V@#IrnmgpT{exI36vVNOY7=x4W~Ca zE)cAWsTW`ZOVafqT7U<VpIYNF;OR1ERa~271~UQ&Qc}4Y8IGG@VqR!?fWd*p1(~%l zVDa&`nTE<ZmhP}|0Lw*)A)&+SSA%5(@T5Fc#|~`Q(5Z){df{$3Wj0ur0TI<8r3%P} zOE`CZwmcm8m`Vkk9^NV(W>jCnT;G+B9Iyp2i6y26TK2=&yOLTUa#k=bpr@n{6j%nb z+37L>fG-HZ%%6jdem}|@2PoOWlEWb?Esv8heSz{!DgdxKhUxFp(UQR|4)5L^2g_0* z>MdYZmD|G8VDo8^6czMPkYrf_mJWaN$rn^FI9%W0d|_fpnhG`#uX>;l_7MV|EFYpH zA)t7bJFesXlb2dY;tM~e<EJy3wNyxgdJv{vpyXnEJo1zPrR}}o!^=ppl8PI_yd8=j zEpQ!8kYnbW03=K^E2*@h1wjo89cf4=5hTn^aKO&eOQ5Agx}`(T4u@&!V446rHh|@( zsVDWJkM18WP&Z-@%o~hzFM~_syeC!Ip7-OVrXkk2Six&IWC6D)pLYqbR9WqS;xeaF zDxCGhVOf_zhxPZi>bsI~SFsdW8UU<?U^2hcWnTW&miM+20{qz(XS*_Gz0zd5ct7k? zHD(&LkqA@93`QPKI8RiU$3a8@!$Qa>T+jR5NlywFfMS4Q6%0s5kzT194!Nt<_i4V* z65xH+wNJx(mU*}3`9@n#@W{$~|4}3OWqF9`AyC$(vatUFCJ47T4k#$aO_x0^aGks3 z+SZVG{>&@pixsJYdN4Z-EE(B-N(I&=2SqvJEHlC2U>tq()?!SjRQLpwYp2)FI2&Zr z^HXQ+f&Z-C4LAf;^a+Bg045=sn5qX>opCH<_moOO8&=J7%Qpf72hTRvBPzNAopFJE zM<?v9umXZiRzRx<eh1<pZi7WZL(1XPW%A9Yr7c52IHhoi`E&3)_^@y|q;v#;nVjoo z1s_{%(Y^s0P+Yd$F@Dh3F9rZ9VTL2K;&mo*-_KQDr;p8!ug@aafjE^Brx37&T@@EM zsHnekzjMwy8)utc_xew?<l?K#JC*kh+hUz>K_%`GF)#xPETyGBYzgEWh;!=eV6N^6 zo&-3ug2J;q#VIRrky~)@7kmb6tD~%!9^n4|y1yGdg|J%;tgTT0ScRQlKvYa^E5Nuu z0*w;a9=W^>V!cYDJk?T2gc!n@qo;4X;qJKMRL8*5EpPQdH#6TiYTCZrBHUE|!8BY5 zWVv&<Z*s1-4`N_<ff|B4Q31x<y*u;zq~(=9nFsG&ZjP1v^>dIOIvIlIURlj=<HCx7 zYAu!VcA!sgxP*+kx36AbEqnc5aZK{Zdj#?WUCgeETi}&i#RmbE5$2|+o83UE@Y8=n z=A#~Tcq;`BEO$VZpwQP;a44?J<;9Fu1TqxIHT42E2uc1=oTg$TPG|}s!oG&67&vf! zo6xt$e+71%zQ$Y#GG*~jx(qW3eap1{@pvdsumy-k48p5Fan1Fbyat;+ggo27D@%C- z9R$kbI=HysF`@6X6uv8VpVfNR<MA2ywxoUi-1~{>_iP#v5oa8+nOUf1%t-jdWejMo zX)d~X>~e)YW(S;m<@JvFmme-wVk#rXfI5ehAVC3U5eo2a9kYxIED6_r#~qhB1<1M5 z=}!gnQ72fJ=L^|iIRB!L3lYE<b~c{&Z+Z!?qC`fbgSz8`a82}&aV|JcH(24pfINHk z@u@B7dX??Yj;SSVH12IVbMKa1@+l9HEVcW?7*J*!93Ax1%6gBbVd$yIc6&p*80EgZ z2I-k}%i~O(DrTFR^lqMgX+n5-%I!0Y1cX!bW<ou){=Luf=_4x}g~R~7iOR!8#nHFA zcP^^5$y2^Cb<80!khcvVrW=^!3CyB;2a?VQms>!wdUxXO9x1hqU2GXU!3Ivp!Inqs z`Oe?YItG%#ywJsUik;u|uK?N!cFNhV&Qe()zBP6K^sRy&FQo!YUYQ_Yh6!JRiC+26 zq;XgMDK60Rt0`TMX_I-EX&t1>a@$m3YruU_uwo!=X)VpJ@l5a#cVI<W-}JfT>#sz% zg;c<n7_g@T_yi?IPX#RR0g^`cKj!XN@Bmd9Jn>0<0-(KR0<&8>tKi7f$*@#5eqW1) z$EHRZ-25Y(v*xx>j^PxpK=@CsTjWbx-!v&X_3q>~MYo3}euwu~lpM99NFP=wwZMfZ zljHlg8+KJj-zNprvYpjDx?GFK)@yw-F_GUkXsAJOG8=wph2IGDmMu$*D^!9=Np@_+ z<1ihx)~AEb=O5=x0@fRlT>NjE$x&x=&XJUE!UQCkpabe&{t{?$Uq~{_U+h*wxp5Xd z^ui#4Zij`k;f3=|8wfIO!y5CmQfj4L;@EouGN+E|b_}lN8K2;@&_%BeRZ7F~Fumw- ziEsE6h-$((^>O72&p9ER{vNShV>>P$goeyCicbJJKuB`RKykwKRX9y#kkR>EsQVkl zmSH@~QYX3?3r|<u@Pv-}ZeY_T;&q5(9KJeUcoaIxj>`91&O*0vOMEm{XJ^D;rPNHK z)dXd0qH4<R=&dSI7XB<<`W8X1{>jyxlYw=2Z)VgFp^f>(pzPIxRUEpBCZ~qF4X8~z z`INGqJLqeqHKbJjpqeF#uwe{Ud<0RqQXQ6v8sd#wtgE?|)RreBROB@#TU#whZ@+_7 z8wk8@;8ojhoA*q99f@DO^o@e{7_g?`n9`rwnv14roH`+WXKtcwx-eo=>y-)1l<<ef z=xRhDABdxIfTi=PG?a5N-R!z0`&~&iH-v@f)R3m5Tim-&N7U0Sdusu0&3XsncUv=# zKG%J^&iUO+(Q@`BT1S~_rC<K;B(ho9<r4OYN!vAIc>CI-Roc+}f=;(&w_Dts6m9o} z4?d%=p7&m9EXCk2%R;!is<b_b%u+ob$yXm}I0dCEY7Jj5h)K6p=D6GAm8txM&;1gw zuhSb_tosSDph`ZN-0?blH5;n#+v{`vynE~gYyGqP7edcG!?5@2CG9h5yVFy2{VUU? z4lPS&CcAyT!)!KFk5NCuU;`O<?*}&AlRETIT-uG_yq1AB@@gEG>I-fM&zG(W7WrP6 zRQfIx>6P#6Z_KJZUtF6l|Kt57v673^Vvr2i7Ow#$Wv41rvTAE3gWtx^D^uS40tTwp zwXnuE_F~0lhxTG&fK|faym9*DzJmd3yQANOy@=VnFFng#K)}JQK$+1rg+vcpig2U{ z6@pH6q_HZ)vQLl{WXx-$H<z8>rtr+K80|datieN+z4d7<l1?6;(5WPI&op@h^9`mi zZj{w*?bps1vb7UcXupfxhL2zUlaONQ_VPh!IxPA}M;(#G<QR{zpsQ7o6dDN<f&>o; ziVF`{!@<KA07h2fDd}4)Y{Dw+ApU6`c^UI4L@|x~vtu4#d00}MB^lmG5uLJcj;LQc z&mPnB_}HFuz~7)U%OomiE(rp624F2F(jHSP2w|6^z((Z<gEDF>1h6N7YZ<_)?G217 z?n~k@<9k9X$Aycn4E#9hk;hZ@G~LP-EXdcAs^yKup5qhc*y}Mr);5yndO`4!n6E^( z6;$Hnfsuu?j9GrPM|`gLvUu7HnGIC{#04M%?y4YhMYk2qM=hHht$>wWJ=wZWSO|W3 zjL(pvu|}N+nRZb7kIg^3)*U=58Zy_3=^|NbEs&QL=xbnklNvFZg=*mwCdu-}IA)gv zfRS84o?t2j7dky4z*%)tHdPH9LAs+5kZu`yZMGae<C7gPYf%JSg<@Au<?Rv-K2ci5 zu<^!%fU{y8!8GRYnPhJEB1-q^cCiyCBk*QwO~`#DR`6gzz)R<GxRm#`4}<<@VI@;l zjVNzf8rh7j!zJPR@8;QrVO`-t>K#>pvlaQ}1Sy`%=3Y!>@oj-l@pTlP7ztn%OY7&k z4`3ply2a&6Y1==8#_~S*KYgdvI46>Yyk(W17A#%W>(<OVGrNx3*P1F0wyQ$xmh*N^ zr;2n8*T6mTT(2uq6dUozMQ;Vg`B&&5t%Z>2$;>;Zqk3lsczA-&2xpj=baA!v&$s5L z1W$0CZ7TWs)B%tc?5o-LG7Q`0d3{^b&s5*}+1glpP~S&$%RcA%uCrD(XBvZi^j#JY zBicSJE-HcR78ifacRw<P2gmg}t?<0)8RiZROuyv%Udyp-lu7aI4SlzdIXw3l^FvR% zuB2#}d-uIkgtOwL^)8%!(f>hlAx5-oIlmAGcMb=~o3FVaj5$ikjSO%Nd|=X&K|T1( zw9_}IuYYaV11^2wcLI^+@hg?Y7RJW~PFy+4zZM2=JlK9P$K!I%M29BvH9YzFsU-RJ zG@ztESa9m1Cr@|0GynTypVsjudST*%gckcKtCOxd52lh;2^vX>(e#+;f(%ROeltJi zU&fEY4><1JqueogCo<5}c05Zd+dkhrFT7VwRs#=P#`NTym5lkBMO`BcEf&S|ON82x zb8G>pNiwU$0Z*cCUha6mHSaX&MvpSJ$RcUtyumTgqpG;GRru_A0tly-tnw#-!poZ2 zf@TfVg^Gb)`}mn#(3l5}zx`jCl}d{7xpVca^#8hJ$I9sosJE{OJS#o;yyeNgD}L1T z>S>EF9yO2FMm0>Wc2zTbJxCHleN3T#WPUkz7tt;+_Iesy*-w2E+r>HHrx>)f^hOEQ z{gO2_^17hqnpWKX=a)l0>0vz!pHk!cZAqaCFP2`bRPI06dk|KzUiPNp`-@|LZ*;~E zD~-S9DS(meaNL^!wpy!GaGTmHqyY_1VZo!ImpY%Ym#<_$Y3j3Plj1;l!dh%bkl#J3 z*mo-6HWmXo!2+s8tEWJhlRb)k24eB`F7kmAyx=Cmj_H@RqmWqoh=s3OF302>XAs`3 z>KrHE3LYk@1`Ov?B^#p$wAG)ULdbCXmo`#$H@-WtI{Qd}g!LaY6SZgFEfcHGl<?D+ z_nP(mv8!PEfWzVZ47Az~CM8q}x38FDr@mGk{7!Yj`u|E@u|f5|VKI&2NT02MLh3dR z{S(bkFo$ADSO}d4-4F*NtwJL?Af7NK4DnOV`#7pPZcpmzC8JZ14zU0$NVj&vB`pu| zv%k3TWg_TBoq7XqA`!y=2ydi80BclWnZxXX0-+SJMmYeYH;pIVNQVj!c8CR0jSd|R z%oX}^Ou;Kj>23qUvi<<*`YI9Sgak<`tio({KphuB(m%;k@kuD$QL+u%-XH*X0emV{ zY2-uUaFDbPXqTUg=+9Sk21$D)5hHVdC-?G>U`F&I-GcCmvh=areWPG_%cjoLOZ?O7 zaCVq%4*3|ghnP)aMPf<}SI8I)5zB`Wb9#`uLKd$i3on;+1Mc3y0!0g14V-{77&>Id zf?}-FZ|sj4S7DnvAUsiFQ`G@Z@)<uxf>%_HXQ?+R1h#n(NCtt;%s+MB>3Go&V7(aj z8pn<Y=G^#n-|QS{4F+G2Pr_B^0LpWWaRwh%&`5uik4VV4vB^hD61mpIXgUYIVQjuk z1XkxD`g^+jaz$W7kqsb6I8nkwhJ!*BcS>?PorAVO0%zFSb^w2#5!@Q<91W6$cghi* zL}800$)g#fX}R%bJ$baJ@;dx3_pXsy4O)nNm}Bh(Viq4rkeqppGEkF8>{%$dF$y#A z0C0r^mFx$;Pn(7AvT`kuby|S@xJ<FiCwU11cmO-z1MpfWNrb*Kpsc{AIt@@BBnlvn z)rCeTk!)ykme9z<5sU0xJ0P!JQULieDgLoV1yHm{w?ZB+r9-k`&%R-tV}cx&uFbb! z2CVCtWo{Vbos#6RB&3tcniFu{0w|3{ix7Z=tRzGru@W+3x!hpHM-nFhZ=xZtChS85 zqBsRah&C}_H$SD2C9*<91L}pzz&9HN5uGF+6(Ela*~tYYtV3)oC)3GCIb93qvoW*| z@My2U91IpfMB0s2$)_)_lC^@(u2<6Xi_HXax<?B^IsiPP!VLU5*Z@Y+S;Q<dkT)F2 zoWv?#2^;dZdL+Z8YmseGoatdiMq(!E^4=yKFo+`hglY#H8#xO_MsTa-jO-Y(?;wO> z*&k8Ks(?pCjpG?k*;yvAg%OhGB0+ENZmtSZ${)n`5;%5(*d&fVwgp)6NLr0gT9qL| zUlNUb22mqagezhlNiv2LO>`i9P9`!V7()bl8wPB?bb=3QOQN#L`h))7W_L!TiC`iR zUyd>5CQpljcYkg#%93M)gZ*I4!@#n=x`vaBNGA|e0hN3@NwD#ubQyBb*6`565SOC; zn$?qBWJRQR53Rp=Kq8$3Cfi_{$pJ8W6kru5l-a(K+)-heNzRPvnCU&R3X_<u(>;}K zCzZuV+O<GfqH~{&&?TT`gb*3=-2<WOkC@s)pf)B|g^ZU@vt<=N4hUBxRj`p8$Zx|< zqya!SBuNHGmV@I+E7|hE9Q29})aeA&zyCq~*t-jW^>70cE=SmDuxL~G_wQa(Z9bbp z?r)(v+?^a=YPNlU&4@m{I*KShQX#UFPv0PjQ!5dz)#7$1I|M6x#ch}(o=dJ2BvAx8 z0YF}YWe-V{8=a0FBQHnUXA<r6cK{ElD8Y@)V>{*gGc(7E1v*+J>cFR_Ovo3k=d*O? z3swo);iW~Eu%j9ZeuZcvLpsM<$m3)nXZ?7j0ye(zZ0aCO+4?aj#WBIOH&<p#&F7{D z6P!RtBX{R)pj2B~JE_+@Y%551qur?;Gz9sLP#L|z<IiDe0%OCFez=-+JbsF=fGrbF z6N*kZU!b6nFH!!~8z@O@O}LF_>mS%nNf=R5MbDwL+R+sxf)nAXCQD2ckt^qJzG5k9 zl1&RIr_Vj7*bN&Up2>or&1<=hpb&=@fI+5Yv2*jj+xD9yurodcj5WFTfitwinR5j8 zX!Q&~#ThycK+@Ru6EoRVhzPwGi&+TcF~IUNB94h|#@})C@iR(~V|G^d%UU*yM-rZV z7a5*}BZ4?K0N1NwNq@3e795TlLVj#5<Wih+HJ3B*kkJ)6MZ{TS%JE#ylk}C9Uicy) z4{<VcW!YL&@AotZ-3i1=cuBG#w*SuIwm?3my(II!`a*TfP_aju+7}*3&RRKpTsBiE zQzfC&u^xI*6&J%5z_WGM`fV_$46BG?iFjwVsES1M4X01SMmb0z63*(rZJ$L3bBwTN z<A7(=xdtasm6o|Y#evzW1fl|)(q+dP72~CKfDj+p_?wFw({iHl@}sPLyaY~vJA1^? zNm_Q=sMfC7fRt{hUl8(&1jvyNe<Ps-F{-E`JkRBH&thKy%Bm32utM-U0KGw!!Jf7( z^=w>jC@Om8dRmy1FqDkbU1Y*v@UDCrgG_?G9_V@AJ@FjfM2E#C)f}VLu-dpMom-?} zk|H~946SqJOebeM5w}fYem(%K%y4@)Ya=zeW5de;c%fz$=CEnci?KGuOdca2<FkMm zwdmksq{9@%Xt;&SBye))O}{Ca4f$AAW99M<sCxzEqz-Js&O=iXj^ZQX0RsPsntKjL zB<{1VgOZi(XJUZOOL`v<+)(c`<Twj63`y|HvHD%X8>qs+gPsdMfNPhh`JF)g2PgS0 zl8DnpekUMG2k2!Y>g5eYjac;xjklp;5?viB$i*}=O!~8x0e_ubbFn-WUf+_@wUBWi zz}iZ^py~@yb7yrJ&Dhv@()y0&o{nGtG^+r8j};0)(24~f+i`4@T}CSq%7X}~ig*9E z^)nSV4O})lnC*oJ;3SW$r4)R5Iy+;<dz8sXt5ajbkn}!2XJf;oXMlaE1-1@;y~CIL zO@~9;jl(D*_n<g8sQtx@=d0KL<O299AYF>HH<GyyDMHR?PN#_UAOp{)S2e+!Sn_!G zeC6HUE%bYQfLvHCS3pXMWI%pCfvdQfYcqcCc{;5|i!b~d+Gn!h*aE5&h{jiXA)vHt z7KNt#Hf{4-?Ky?^vPBNMB^Bq2&ena(z~$teO+OdG?$R0*^Z3)C?-r}e)|1q&zZbVg z?goD>-MVymeQZ8>@qTay-=|4v2>nyW$5Uk=ui5E|r@ux6Yo~of<~O(c3Rur;<~<MH zUX&`En(r4|HK>u|T<qF@(_A{0N>d8pd;|UbmZx;e-E2(>e!o?)-xKhFQ$FOTC~`+t zn<}<Q2MmuAwN!xGeC<Ny<IvjApPq=Vn}vmK22=ZQEWf<*`ls+WtjODhAW}S7ajj0N z6uJFAbR&VNhyzJ(5EU_DzvqE}Y`#EpuTAB20;`_n>0nCR$xMM2dGW~#I1qUOqq_Em ze}rfkn5+cImfs<;KHXVqm1c5`7zOFFsrS53f$tTCWax-hHIOC6(zQ44ktkj4Pl3vO zTv|wR?w%y}=?I_vE^bHqH+Rn+MXZFO|9S>a!t`WB-p;mCxSD7fnB)NlV<W|1$U~{$ zB&EM&1w*_9b<ca9UH=2~stSPOq$B|+GAcqidq7ha+vt_gihcwoKZ5eT@A}H$@f<}{ zscZ4i$cM)&RE|$38sRAwArcE9nrE^)6Ht30N@@R_SnlpWqUQC&DRx<rb^bh=x`LB+ zMfbm7Pm+~Sd&y$~3KNq=dl0o`WH~-W9cSKk%#D!(?VZ0@Fy$L4zPhdaU9KfxsC7~2 z*Xy$TYI;brkajU~`$>%T-zb~EVjIvOAsj!{ztqMFN_bYG-@gA5c~vp2yZ%`$Z>08q ztfP9gtwMMhZ!A4-|6*94RQG=3Eqwf61-=*iSK~sim@CFGA0&wiCTbs$(mwL!s=m)Q zOG!JZ+6=z<<yzsnO0wfYx?gno*AnWL^e^9(KC8h4#qV(e6AE;G=369WDJy0_5;)Ab z_v7NdV(E0(rF+7+;KkDV8Pf?R_mr>sDPHd`WlC;8O2n!@M8b^8@b7!qF^4y_FG3w! zZl_(WxT=ud{aJ|``fFZ3@XO~f>|eerg*6@j;vb~-h^?F^D+INWAMz9$CJK#K3XRjs z)8CdqP<{9HP~J)J#vFe-QXWpdb&ty!hIUXbMgD$t{;*#9C~Z2t#v9M>lKw08CirR6 zpU;Q%91#F-I2}~;`}e~{m%b#0TE|Q~5$8yevW%OXbvIQ9M7CE&z5qqP&QyGhsNFqx z>qkKSLCLMdRSk&?zbzXs3V$!t+-TJo<gBiNz2l`1OE;wthqFnGi!w)WN`K?Zy@Gxr ze{%LcsRyIKSiyc+fxL*|Qp3KqsLZszv-AeQ_Y9L!kKNztpd5*sqUn;xSn0ABUBC3h z>n$tHFeoCipVNN_GeBbDRSVwO!48tSq)#>ae-(R@C7>O-weeMagd)bNH+FigNYP`o z)>BYh`OTwZHNPhl+F?Rkfun?%k!R!z#IwQ{f>kz5;mO*^5LbHC#M5}$5eo`uBJMn% zt^(ycd($J{rQjq&)l|X@d{`G19k0bY1?`x?pkh7oFYU!Vv*aU~s=_aZvk5|j7X5uF zrpzWuC~p1oh#?c0c0``5>{ecc$wWG9&eqmX^^NH&^8%%iLyf?EDf@cwO)ja)1+9pW z>zk<B={wLq%!&Fk{A^7Kq^*QTm79Nqh(90Qo(d!@>Ow;8Ppuv9^@L<gBUY2gi!^1} z-@h8C4sr7`7sYdC%~f0zF5`^~Jy;t{msl=}&g;RN`R+|h=lRz0$77P<ay^)2HoXzt zQAM)jl%?{J)RMLC_S~#3-mSV2FXl?*BZKa&oMwM)?IRQ^Ii|U0s$p>VF^?#0z1)bt zq&i1Kg!)HZ$Gzj9<BbCW-@nFxW#d~hmUJZ!3V4UK3`IeHc)T=X(yR6{c0G0=S?rmi zD^=nXiN*$@AI4&>+XMVv(t7zxgFF$fGlJ2f6}4Uw!*1`yZoH4EFlOaUXko%X+Ve1F zVJ1=uIk1@UX}BYRui70NvSV6=DE2Vruo#ejW9-cC>~D1Uh}9H4fJdLtgJUZpO`Xk^ zOinH=GShV|bs2I-?xng4twREr6xy(rx|KmZZL$Sroe|`vG|Qf8Bd#lKgG?+69r%*) z!PbMC&V@jE$^~bOqGIk`{&k|D`$WY6A_&8?dGWArI*H4L>|y7wRI#H>2P->Ol2}#y zzdpGg)GtlRN2C)#EGOdeU*XU@ea)_Dm#o$&j<rD)mU9ZU0fakJGmk6#<kr_A8Skv- z5g}XGhzWJ|mI$&+a=F4Zp4Cue##?F0Ii<z$mu-jO>-UwWVXhHOMIYf1qer0=NY{+D z!}K%GK~8^o963vnB1Txu>JU%J?vC<9Xe(t<(Af^I08X&}Q^p$XzskgQNw-|0j&)B( zbIlPVH4XP+jgDW-DEQNYQ)p~uTFE^$S23nYKhyzdJABq%tH`{9+;m8G*Z9=bN7vgD z5N^8LZmG>C-3h(Vr~l=_FS`EDQNi?A;DpqJXlwqHzciBiIR4TNc4sV)8}4yTy>5K= z^z|{txjNnRh6k&e$B+Gd*C2&`79{q_@ca9|zsG)m9Y226_=V`Bhu>_5PaOaI=hxrk z02jaGdoPu)_Iz>&plYd1YAwXu{2tpKez?!NElE867^r$J66Tw0y|r`;YAiFrnctEq zWFj&vweXOuttCY%u@aDZ{UPk4T?(edB3!S)SarKaLuqHAS>W4ajG8xD#XyY9GT!L- zjM>%R$E&?Y&x}>9RW&5-l6aPJgCtkgOcxUi-p=Ad)%=+xO9c-UM{%Cq6;d{P<ZZu; zEhH3-H72U@Hh$e=SovCO?iJD-e#v4p7H0{tAb{wgRbkPlLZ|A7`CsqSn@-mD_6$t1 zBx5;s!KR^vJf$9?m5Esjf5&Q=S8}0)&GbEa%E=J-jR7tz52U$KB(%h8U5sh%q|;br zB*!L^$7B;EU+m!)zg~pP83kPU_BD4Z(RUAY?lHcZA|_8>o^zrC;zu*xudGr9?pGvp z4`RGndZn~F15`+(9-gHa$Q*4eV4fZi=GlPpMSo1v{oq+$Wq+DL50W=@YFt$v=eOPg zzo+?Iz2bd@6^~9AlGA%NKUtlurn)%c5rQri`Lpq*I-!!|ScI4ej;0xhQ$@#nV9ssa z$%zhUx~}TMdfjB?gv0$)9Klr98;7TB`PR4vB&z9(XK~L3*V~h|tyuINF@Xl29}COd zB5M#%fexG}PP=b<1hd%>2zEqj-SgEb5q>UXF<XCjH63j{*Y9b1cfrA+@|jL(MY*-G znyJ_ypP061Mh+a$uDzk&QSdu4?)*NGVsU0hA;3N}Qev&hH9aNI_YQ~ei~5(7_nVtS z+B{Fls+n?Hn`4#&EbZ!|W=U3@hVDL39UoC{%bXh4Tad-WEc%>6&a~=v4~0bCMBR8+ zRfO|<px{@~u<V@>D<xryF*QIAwTE<i*x<caPkW?1U(?7))EvoM2}p_itaVoVV<Ema z2<Zejx&MBM)7;w|B=B+r<0Cv0@wIRH&$n(X`eX`^f2DpN;`Hej<_qP#zXwv}(pU19 z4Piv(-nv^!^;q}xU^i5oOsP=~n3>%zsTbu*3SO{>ZgQKj7uB9-;v5pPCTDJ!y`ewr zc~bc^?AvPr=L{JltGWlCJ<FJ1^Z;O=#y?UJJDnoD{v2yakD#!|wvc*fv4!>n2;Y_D zOV7G)y=vt3N_Ab27c;}yLfax>CzUUy1bc5qUdM(0P%Y_v>3i(9`sDJmYWbguCs*j- z!9Es!>^T}#fe6W>vj8E9a2lKL2vzXnEKoF>#-@f*iQrG#(3CkexWX!F;!90cj3!p{ zf1Wz3J$IREAI{|6^r_cv8b95a9aTeD7hL>Cww~3^0oD}=C7E{z;ZS`G;<N~s7zK|! zr?VKv;=0z`irWEUcGC;St5K#Xkk$r)Nq!oCuTJrE#4rArFWD!dABVcMws2MJSG4;J zf<ldl`(FQesBQATDLC<a-<#j_`(?1rFGN)NBH+A;D{J#k%Iv|4jjPsUaiy;vdal|0 z_Qg|4FT7Pl64ykSqlcKT<ni`YULQ(&YpmCdEVLxOW3x{%k%?lGS2#EY(silv&avj! zxdab(F=o|T;YkiAHj5s=|I5gIa<#V{t72|3E6Np<V(<qWeTv57-I98b&*bj8X(1Lb zOsu>DeoK{{X~j98Bpe*MF{et`d-hi8*d1wucn4dH=OxeH^?Vi<O9+GAu$hqEIXT&% zYR}HnNFn*My6Ku;*I)k-y8WwCb;a`5$b5~|$+WsA*7Ia;S?ju++qI_@n_LBz`6*(k z9=w|FijiF$zoocr<@Z~DR7LHQ@l=caeD{UVjpucLEl1_&wQ2vHI=Sh<i@dr&e11!! zedpJ}tHm*wjRvJA99YTD2J_7T#?^*73Duxua&rw1Ys~kB%h;IoN6_&vD$uC@tG-{$ z{S14{pI#pGt7PN$XFqV5k;QYk-ueqXx;v2i`zPSfDzlMfj+QD!Cmp3LI||gB1B>Mt z{X~I25B-@bF!b@z+Cv%BV^-8sW_5}jR&j-WvL-8=TvZjB+_jTD9dr1^TlN*#aT+4h z*6`&!qDauwL%gdA3?AQ_AMkU?j{Erpw&;}V^XCR<*bhtvqk%A|6lRYzXs+k;d1JA5 zMJMgE*px_CGpF4HDjjA3e9qhgf!tt)ReWP5pF21DE*4yfo#CFUi03w*9>ul-1mkJ$ zGPI})^JYE>yV7id1ZmoHmII2Fcrt|yBykGBJuzOzKpqs=Syvq%uaI-6txV6jrbt(% zxFF0th4{mF-HeutevX>U8ePL_%zKusox%{M+IT{Ss$6=!M4U-e0Yolj7PCJsIvl`D zbrXxEiiwfv(^%TcO6pHjG0l@}>zowKIrmrACXyK}gCl8NBRnX9n_;ic!lEZL60LQ; z%w1jQw5P=6S?0N`&svWT>-jPpl)f+oIqE2xguUd^ubP(!z2zw<z%1r27ZSwIW%)>m zfe+B)_uZ@wy)@5OPg|`G(L}d7r*K&>bh@h8>qTy5Su#_3je5kvCRvy8kk~xLPKkHi z14oNkiG&B^N~zwKETmY&;=NvsR!r%>tocFq`JbG^rp^+lL|DzdOth=2^IaFr^Z9P; zu;~4OM-~?2H4yJiCdl}~q@j}JpNpq`@8F_+M6%yK@2@lwAe}qL?rg*iPQ2qvl5||P z7ImlJQjaBaG@c%nNi&vuy(Vm8|IqCekMFd?J5$I6HF&+2G{o&uaxJ1{wT{2|jO2+^ zQf0b6tL5hkX%6{{=iEJgOH=`VchB{s(PgUCBA=Jn_)P*X@&}5gawJL>G<i%q3A>As z9J82LUwL@ndDYqS%EPAGlc(mCyEq&7;zOVH*DCMztHx`K1e^xh8k?4uoZi3C;A(0r z^*!rX^;P7~IcG!Yt@?<myD<V)&r6?})YRqGGzQef3|PmHQRAV4CjAwc6Y%Y$=r9p? zqYlE;SCip3w<CCJXE4&0y+vAWw}@J`$s*E+2!XDdrR1}<DO{{x?zO3*waMNxX;);( z^s3afRGIW^wSHN(>33^0LLnK=wV4n7O*&+<rev~3NLlkTIS)6owMarM#N07Fa*o%6 z0uX`Wb3_6jZOa&s5QTaO2mn4$%f%d7mnT+NG+&ml1St?8Ay$ZNq(K;ZvnXe?&!^5P zxDG#pFPg{YE)tQ*tkP5ha)Bt6Sf|896z-9Q3z@)H@JNbmg@90!%|@g%q?Cn(907tC zaCu_{HkHlWwX&3aK;h?2=Gr>85dv}r_#qk~0>D?K*0+`f7zxRNCpMwAb$Fy~?GKq+ zqm1in0OSbXVQ-U72qN;EQ2Y7gtvorS;*aIcxW>D6RcZmA>vG`TT6(V1r&|ILk!87i zW<ghfe#8SBgrWo3giNZWf{IumZ9KAYQczDuzVJd_$IXU*HaV1{45!{;r7xkBrJ+|U zs5Mp|oGAA|i-e>C?*I7YYcJm_0J%MetB;j$h?H+mk}JGeB$J1;K9nCkhN7}S3Kj`$ z!GT3;^++ALYO%)lq>p#5ePVTOY-WMv$psGHZ5*r*dWRKCK1OO=15%(oWoyK;fw~84 zLE@8j6CfIlZxB{nKgJ#+YOOFM64KAF_)Mv(M^<t6*miAOu-5(HKBK1R`DL^2P4hMl zb2g~HP{jqQkQZ_vUZghdk^u0m%9jsq=C7o}V6^_ERQ3uw{^~U|xWpNM5*4L`FDBto zJKkU*UUd4y;(*OkD2W+CLw0x|ckv=wCd@myqhq*wCiuztm?Eg4Rk9+<3?*cQB8_qi z8DTxrP2#C21H1>`gkuNW+7W8vPrdzvC<LJ0<OxNXZge)uKbL~RcJZRHIy{w7oJxXQ z(6AB%7)mIY3iX|@QotZUa-!I@5r>5h9B5jw!a#4_O<+O;*xGI7-ca*s>S!W#>lo?i zA+VjUFAZy<GeXT~ze9I&o<J?|SQQ$l1|CiL!fv4aWmlPFXKFw7i%E5uMR6D;77EfH zWZMObAn>99AaYRgx5)biIsY$SCd~9@0uq5oE)Wvz>eu9&nISY}4**`#();Y*4hRo_ z^re0v9KKWmn{HX7k3(IzkiT)RJ5(%=_ATiP7t9D_@C7!Z*r7&%t^foo@azT|EEP1i zb$~!Q0JcG3ZyZmoB(h^}88rfVvQ#goe`T!&2vT300b0@i0E7V$u|q($;9x2=E+HC9 z2zcwRlCcI2RSsZLA)<EVtE-!tsRYsEMD{NPln#xv*!-iJ8p>{rO9zMwcUsqq<m$)S zqgxL2Ou$!3pxeqnrAQD~;tJPirr|K?)w7jnA<QHAUm)d<*94J?NKpboVVow?5r(8t zku71ONIYCRi2kdp5x=0ObUcG?`I~}%qe8c`NFxA^1bzE~;}RO6iwwN0BJw4+^I@Ja zyDI5q(%|bj-Ao!^;`iu^C|y5!W0e7o33YKHl7YIB`owpQiS<pEqn~Sd<M2Bc2Ktty zv{|}*G!IIJbo@9TOSq>MhC2A6Y*GV&*=ZcG7(tF{m{{UPB6hJz5VnSZGu~ydRyr_? z+)w(p(1YV3;W%~)%sn_R*9_(nDyIU`=JrVzk0`EP05*ugT%H9*@Aa+ha&A%G!>L>y z1lSgiO96-=QKbu<WW`A<?}?CxZ*m;jGm8Mo5)R?Ib$tM^!%iFm-BSW9i|Ew9eL@E) zwQGVY1Xh@mnmXa!KF~QiMyY_RIE=shT1_QwZ)**R=g<IWedgQ+XeYPxTy2NOxAU#w z*eLD#p9mK+fv?)Wqp!9XijY`(2wYaihJqvmTVsi70!MiB=1IuWrLmu*v~d_E*8k(^ zCT{STisPs@BUlGU0T_w`oiW};H4={35KssW4l3?1)X2UA5Ut*2e#;z-7~rJhB3YB{ zezl{i0E7?`t)gXO+<|EcwcH1AR1>aj;Sd`4B!uy-#Q;`~PFDpYdpRMoAq~EvarIO5 z6N^(9Zvi-jh}kN82x=V6Rl92tcjoxi8GRO!4rPP5PRH)HD0_cXI-&FW$wCDVnnHc2 zLX;e8U(M}tjOZYNwFh9AwC5IgkoKVsG7c1fhZpUkDxyMR(><D^M(B7P#{YXz!S{H7 zs`f3a_IIJ^#CGo}s@^98i+`7PE|KR#7ayTDHLuIi)>vwJ2)eFLks-k~@F>7IJLM#c zj4}-p&5Th-^%IQx60qJA>__?bEu4h8+M~mEjK)cr!~m8`U?wP|(J9CKsK%&Bn1XWH zTg@A+gQ)2Q)UxWqk6m1YBCLZ@COUAulM2#?fcmIEe^5E&saK+Kmy|UxKh^$Fd=0jx zjUWRWZBHVEX!jAF7ghFz;Da&h02UARWO)-A%PhJIhkVL~md~eN&m9vobCq*pCEoeb z_B;_l-luV~YDEL??XW;H)tNdT=^UMTZ_*{v4ZP>bHw=!5K^WmJX&9kaKI9ASw*YU! z!FTRTUXAT=gI@2Nql+csgGX<GE!gerfW}<Y?ZOTefdGXWp<$5FPp!?O0}|q4EImJs z-fF#J*-6OK=2Ryf=V-wld}oIoVkZ!WG{7bgG}QLnj@JF*D1(EC)Z6zoZY6~!3))zU z;_Y_<mp{ib3*qxrVk!w#PS^c|Y_*RP#AouCUn<UW)waR<9qzs8IDlR<KB^v!g|`~} zmu`iQ%juiN0}4U+L>2&Wz!!HCwWEyQ(AgJm6x=sj^*{;u<>fwYJCdq+eCMqI<QFsv zvx5^u8*y?(vjSRhE#I|8N!m;L;KuLVfm-^xgmud+toeLYR+0fPJ54ZAM0mjVlWv*% zeKh*XhL-ZTRKgH1Vsok&W0k>-)85kG8+XZuA_s02^vhKK#t04GZturc{Ek*u<|qez zMO|e!xVRCUHYvK3aNMSHD-Px~o<5@;y|T--gR8mu1usElClU59UA2T?Hm;^}2CIEE zh&Ni;>-oDiFP=FQXbK&{k*@<@v63Jk+7#L!yb3E=7KbdW18{{KvuO}8)EJt<w=v*B zA*w-nyeojVx1`fN;sG?eM{+tFVv1bpNg?v7%30;86w@RGRQ33>IKd#vQi{rnz-e5* z^iz>pzOUXIA<QS-XYF<+M!lz*q1bY?9%RUv8PAs>qFYEJ78+ySg)Vv_$0|+Iie<JF zim+h5w9<<@yG4E(z0!!lp2g%3F0#-ETC2UD-~wafu^)w&jv;SFLil@D#w*NOp;Fh# zP9WVOu5k(7#*I7)5{=!`X?IJtSDN{0Hh(pr@Z)6Lk(LC|<^^M0QT`qxGw-qT_=vZ| zdD4y#%M+qLJgqcO+m>;Vb?hQY-cAi!?oa$nP2=S__NG5#p;i*?JAS6lDyNVGD8^YO z!k%yl!xB|0>E*8^E)~Fz3-SS0ng0iS_Z8IS`~MA|R1zQ%dWX=YYd|`P2~9cyk={Y2 z6A&;oP3Ryc^p1cuQ8XaE_zk^l6cJQVKoC&Spn_n*&G+|zcIVldo!Nsu*@IsunH=OK znLBgex!(D_UssU;rItfGV%X;V$xmc$orEb~PV(<M9R*tXj`2ofEzvNABm<$TnnFK= zBoJF9`mS-QU!577S_Ik*0@b2=vw^*T$;;)ZDooeh$>(BEMhZF^+^_CfpH`$4`=Ra| zvTy>lx&-{!6o&W|vt=Jv)6f})u(o{Zf7m{fECmF%y_n@KO|dPq)~ie@V&s9$G~hnl zXO(<ui+R;qJtrS%l9ATBIy>RH5+uLatDs3h_5EFqMg31^UDEy+KR#Ve?vVhmAfJy| z?%=F0EnIRASy*uNb}!QTM48Xg{W3mtaQo{Mi?G4Nw-<BLN%ZFCTnT{_T1bul_w5kK zUznO4CMg-EA(_PU;?7cHp=k3feTN?JSNe1q4f6Xt^<l2?vUxIDwh}3g<T93&m*KIT zcFYn9Ob%}>SA&^(st_WBg*@bHN83@^2Gd&HP(iR+e);aldz5iixlFn6{*NQQ^-Ik& z)ouc#N(CI=b0{@!g-=K<tW42JeXFIn_0)&HkK_xaUux}B3jM)w_A5>XsRH?Ai41-L zns+L%rIt7IbJOy22)CP4?VMPS{}7mu;3YI)ZB*K-(HTEJcm7HVMDk_#T8``I-kk@! z3(gN`Li;~Ip1-8$@$6#mxgV<*4^mJYlZJ0lfp1XhKJwqcK>beu(vv85G0*rr;EBtV z;ge?M_z|B2VgEb4>o~U@f2lYFGPa)FVH5|yvI;I4)$*;s;rsKtiHK{kSqfWh_4rYM zfDgem?N+}(yg}gxmv0iLN8#d<-f1J`DGl*nSw6Qkce`prDNBb8P*9pI>$NncEay=& z3_q*u1^j^N`N7?ekr$5KX1_vCp75(-PSY7;GbsRzt)@tel@4+8q)Rg!P?%MgCYK29 ziPi_(8k9DyNLHs#e>OQ;Mr{pl+aoft5E$0;)s?`sb#Dlwm@)|;Li$kUI8e!0_3z#` zM$vg$?mI~Ci`Fbg4#ge6$r+>1=EBMajODHKGA~J=OtBn9-+MfWcl-cfeh9m2yp&9J z-TY`M=7Tcf9=1_P)Veeg{j%~FtS;Nc{=Mja>4kHj^KyrW>ROM+jlU9XQ>hBeVrOwl z5{0ZBJRjdLSJNeAmpJ3ndORYEF&D5H3H99X8?snIbKCK~T;=6;R$n<S!<_u0*2qmo zZ$S&^zV<>F9zXuLhH3PZ{F1@%n`cOZmfn(0#Uvg-g(1@s@6!ckbCDm;)=rK3^pS5( zR<21DaRa$3mCIMYf6yEfwDz?AR(Rvl2Zge4M&S<%s`etcbQ_$j1_1fx&C>O!i!wwI zOVslbr5t(yAsmUlux3hPOZjQ9MZ&nZTLRwo1S=tAn_+EV$$aj^xq=L<_v!cY*df4A zazb`_IfeDD9scSnv2#Zo7pi2Ub}YPw=H;tjRQJv{M?@AdCu3B!&iW_u4N#z|9cwJc z>VeFc%k3LZ7v0sXy{mmO(|UtQbxLR^;p52=aSD|Y)eK$6Asu)LL#$!JADy3-zs%6T z<OrYJ3OAzSB1rbiN<E1gFY*C0e%K(Y#H=Ux9fu+IV#<(T(1Ya`+YP75+8%5opAJ)n zsM{KjiY3|J`j|Q#TKuR=bklpHVClp5`1x2lC!0b#WNCDjMIUL+JS^mD9$Vbi*%`u( z{ng#9z|+*fgRm)L4Dtp)kd<3X<T?Syxo(~=>GhdaX1o6D<$7|U{e(}kbBvGU;-NG+ z%pas#A?&fAvzYu;wBG7cd1dFp6%<Dbg6ly|vfwP0+0%W5Hxdc@Gw#*3aq#6PfKBw< z`qx`K#!r|HO&7;!i3r#2VWHA4$SmI_Q$QCzMa8WWa7&}=@f1A`E3)1{Rgls(AQ#)9 z;KTc{bgb<)K9cv1kKohNai~l<Uv`Ea&$q7ebBFu6MPJuNE%+ymHB@h<xUKStmrYqc z!RND1`O4aqO|Pe@>ifD~Ru1cZ<oH;=WJu)0aO^9pkH)vMBJ&S2cgp5M*zcA%>|W7+ zs$GLWrCP;E$?&hWXJQY(-7Yzqx{Bc_r;YGL)^b*DJBhhG%Z~moEBMFX%*G`<ukm|> z${$0EtL5`mU2huCi3ZyK!}8*e#=%`kyl-srqgJ%Z!9DN2O1p{jmz|-r_d}|JT;IDa z4&G3Im>?Q#3vyi=d!p8sT@`F5<@##QT8(j>LNJD|uNTJ8cD7dSY52OnS>Zd|Jt!Kg zoaDN^8LHYlR~3r7<GQlfsM5b8`h|DI_3gn4dT_7m3)6eocYnmr{PRbYz6o?&g)}J- zA*$&r_g)vmqB@5qPW)0UoF>e3u8pdMZf0!tH1hp(Z5;c+Ejg`n<FshZl<mof>_zSt z!_U{Iy&t?Rn5g^!tcsZn|9tYKVykj%Z8_#CNo?*mbJg~&NbIvb_SrkKRXdN|V&`kE zXNn#PwQ=PBTmbxxydU-_&t>c9;<xQ6O72RgkL<5kcl@I}9uB4kUj6mPVmrF$X;o-M z)323xSFR6y8N3v`_3NGO=5;EE$IFY?duHIb3FlZm_Oll$Yc{+4CA!sL<^19|RUQ`4 zT&?~FeHFiT_HPW$(c}A_>+w5Q4+$@ts_FNxo?CVQ8~b>|<B-slu(xv~Zh6H0NB`Bh zFA2HPtIW4|M`ZPvvTw#eko7!vx_aZ=os;-&P4}PkHn9h-o{_s(&u_oky76@I@1M#v z&)@2@H;;X9-1y$)_UF@?m|rX65hq6z=ih&8x;eUc^JdDH=U?d7&A*V(f0=0Sz<8#E zRwe}PEfNjb3;_tzRz&E41!bTNZCQ>29NPn`(B7!wL7lCjbF|kOG`JxIY({%!Ne34x zLoU&loG6f#J%~4L(GL%eYK4a27f}z_>vrEqp!e}~W?yAk3Vkt}@;(;-H4}fBL)nxL zgPT2syCU{$=-=xpADbyGm%gwV&V1~k9Q5G2+v%*#xv(k9{4AX<SDCFgh;0G?<vAT8 zugt!Qf3-v(sHU*5(b?fj@B=(Y0A#``l;s<p<616<_AGKMhn<)6nLrySe2-Hi{5A3! ztL*-+^gh>t61V!v{%eJ22;KcpS}Hu7!8~T+Z}i)cHsQy1&o~@yd0aVXJUID4;S20G zyjN9z`s~j{?0>Xu;~(1PCxy=>hYQ@hFOVHRO;!<n8p1!5C72N^So>_UK3r&VPH=Hn zXo5rdjJ0sU1EImTajJ^Q)nJjSwz1iLk*#du1f1w*u4oZWROPhjCg<pOo0!Z4KH<|} z-8jWxaftol{P0-?^#g%|fBnPu74^<mT%H|%*;ax-qWUn8S)5Dq(-{e6uD@tisUKld z+Ry*$eU$>CrH%8M%-W?n=+d@!fJ+fF!W0>IE}*ySDOvoffak!FucywUWux*zG3~PF z$)d6Vxo;s{C&~G8dvkJv`R^+!%xPTmn^y8N?GhDsMV8*&asY+RY%Yx<p2mFnHwxkr zW&#lsd=FF=JD;!gJm>L|;7<mSzmh&0SSUTaBRHwbXHDX!sVXmIb7`&dytWf4_YPbC zTHM!sddiLuSIezHI`gKLO9#N~H>AwWEevhj?5h<_CGlUu@?scq$Hf&@0FS*lAHiFo zyjGaXb+$@Ekl>BikWiZs;r37A&mR)B|EAhR5sq(AvZ>{!T4;36fph@qYgpta7c1vk zew{}=&rP)km7(UfYVy}4bMNX=YK1Gk&%S!kGr*)XILB(eren>msr(3y;4UGY6`X88 zD<N^xPMv?PMdfP#rhHdIv!DQZ7kk$8BA-2pGx4l`!5l~c%X{jZn&LHe+YHB-7X>`d z^4SmZyd^>hj4(;cVE<KwC6?D`h>tL&zkl}p!6Wsl=X}4v@tD_gYe;Y_NO;S6b9qH_ ziFlg?beM#EHwjm}5EXeLrsG1w_X{L7)09Zlj1JT6@1}WbW<`-^WgTW!-_2^(%o`%j z?{=8C+MD@Ca=CSIsd{tk)bdylVM2zK!{&A7&z^?g6<jLdFP-PL2N+{(xwX8x9n`pY zzgzFC*&IaL9Cz6K`ECPH$3dcS@J<}!0LQ6r`+td=66$s`QFij3cFG5KDktg}<%_Jf zYZ+OD<)tCsD-!(rYJyxZbd5ST$4QzCFR<5!_^wFsE%WeN5Aj&m^5E4SqoN#RIvo=Z z97*a<DN#-tole;YPI>CiMN!UWoz7JU&b8_;4N)$4J6&22T-wxKJEL45E;!f#cn#F~ zu6SEoM4>NT#B#FW36Ip%hAw$V@%c&c`7Q8ncY5p{c<ift9z=N_cY6Lg@C0ahL886j zU0#SoFHQ|_-e_;ZE^pC8ZwU<_nP?yRE+6GXA9)9l%ieC+NcJh-0@EGB9deiWU+BeN zK3`DlP9pIyb@+NN@Of!mxg32ZpzHrl)GUe)DC-KSIt-}Q2yBQBta^Fbtcahu=4(|X zbeI}u+Eq^2)FTuKRbs6!ItbAC1YSgkyy^;BISg6T2;Gbh-RTP5I}F{|2s?-lJMIem za~KBD#6zy*;oW$|4?L%4IPdjv!R~N={*ca>_En@H<7klqjdKsLiCJpsPP`Ok%-a=6 zL>ga@H0zGE`VncX8FlG;lyi5K`;RDZ&FIV5qXW95Lw-buYhI7Kem$o9dcu$EBuzrf zbwY+Fp<<12t|UUSTNlTBZN5`aqvYB|anRlF*w!DhZJKeN*W-G-;|71k4gEignkzpN z)--QyUca%^ePi#(jUq?C-lUlKUxTW;Z>lf)Df0`%dWeW4BBvIKmq21HHARm|5?YBe zghctCMCGGI6|E$7LXvh*(z&A~tX8ryA=#`a+3G0Swuh*^7y;_JS@k33I)n&vB0Bb@ zh8(4aYo$dI(qekj5{}YHTInf-^o*YL?4$HNt&Ac<Mp;ir)lo*RR%Qbs^KMUO>rrM| zcZ$0}YOhx6uOGK+ucwX?vZi{n=8m$SX=N`EvS0ONuN-BsY2|DZa&~%h_KtG)wQ>&# zxyL=Ze~xki+GL0zc}O6u|A@@rLFSFg`@e~r<-PgJ$N4JS1?n*c+Pwwmjtj8bg~l<3 zX1#@0$Az}qMZ$u4&b>wM$3@=S#g}7>1A2=?j*G*!OQK>*VtPvwj!Q_|r71C`8NH?1 z$EA7NWkoS%WxZup$7QwJ<qa|AcYDiQkIUP%D>`E;dV4Ddk1K|>E5~9gr+O>rjw_#O zS1rU;z3Q!6Ij&mMuHKBP-s!F0JFec3sR99+B#yz1ScZv7iSb|(0dWD-7|(DxT<ZVx zO-}Zdyu6&EqJol=(rJdUdHS@93i^M9O*IWQbxjRTZEam0ZC!mGeXJe^t7l+%-q6Uv z$i&#>f{EFGgiTXx8#A1(mEA?0gM)+PC0CbA?yh#8PS)OD7MFdk0(~6uUY>a0tASVi zuLcAJh6V=XgCYn%@hOfs$#yBFj-+aj=sTCM72&U?#zw@&UyF;6Ot|?UUNa4!k^5g> zb8~a^!+&mDTU*=P|K&CR%WK}BY|joq@%=Ba`Cnf1|M$G6A-fTc2o$0dVU{&O{z)oS zhfYFf)qrJ9hge+bi2}1VP|e99_E>rnimeuQ!E~6boSrOaSqn5KCux=%@U~Hmr}Njk zmd^P_cLt852`RcJlbDnf3|k#C&2&^!X#aobHC4Tme?L)Yi(cW7eDvn_-W33bUvK}G z7uy|y3Da@a^8GA-OJA5fefVWtYwD3}I{Cw9mgwtY-X?sK(2vOp{h#}}M7DYqv$m0D z<uI?RNa|UFpJD1MKGfCTSpJ6Tq`Ax2{L<O_Q<_s#9Md&CE%-aU-bMc~?{Nt9rjN<% z?31kfz7|ok{+;KukhoF9-IQ*8nur|<CAUjBN1CV-!YAy4>xw5W8&ylDX0P}}a5rG2 z&*ZmFdg?qcjM{+kW4+;5W4~3bvNdT<Xd74%B?|{|^=J0&r$t^{^EGc9$xNC(jeY&C z`sl>|ii{44#d*U(z`?KSf9ExgaiFt>Lu~4(8c+~ZvNp||9n(AnvhV^)5?(-MCYwwz zm_N@iF6645+&q6lP%(v^68+nvL0+Sl2J@+bUY@*bJ%a<WDUm_gnj~DBc^V4uMG}N1 zUMTta4CP0y$7Q$JHz`<{2M_b~#owuNDJNez1roSk8DJ%zPO2(bZ_+nLF{e*E)Qa(v z1if0^&i%A+dCi-lR|)}s(-}6ATYEr^YP@7cGWD=~pBWL4Ykll8YiTK&sCDj>wR$GC zrmLtKYg%KsHT_~1diV&j1dt-^EV5=H!G+6M79ry6$0xiUl&X_WX;n@uR{_4Z)0dRg z1wLikY4IgWl6ReDT&O~BU9E-6UT`hlMe=xYi>W}Guoo35J-f~#>o>}7xxKg*yIAz7 zbuXm#)uolMFS~OSy!=w`&2MNh!6q&%BH5R0Kd3H1-(@Sn%G**w!>cT!{!})TpbYiW zmk4M2@G0vdkc^Qe-=7eoryz;N^u8Bs*)|v<M0GUzJtFA1dXJT*E)iNt<Q&l&;{y&P zSsvAJws;v4z3CiWC<<qgm(kf%c}dXpRq=ZvL@uFcM8xm+V_jZGECSw{Cdn^Y9jSQv zV)8o$MU{b+28qxa){B%w4elIbjp3_%7te~&>h?uHo`|sfzw34Btv9Vnh4PpJ15pwn zWz3l83e$gh%|BHD4VS5Ovn(c1R_Pd<5EUx<trIY?^!bhoW=BzNxG9S;0>w~aN@^(P zCj>)~7B%Cad?Es%?<HlOm&8tyU`%3$lhc-oY`@>L2pln?B~=nx{rUi5cqoSuH8J%2 z(cC0oos@sY=14xjgvUX9*vM~;YQ+ID;EH0!o7oqBw+a!y#;Zc<Zd48AE5yc=q4O>o zq??31&e&k4K2}qZH{R(XxmfKn>txcE`-hMh&5CRk5+JI(9pJbM1PQP0K>dkAdgLfT zK**;(4I-zf97<RKu>0LZ@BLf$WB5slvWN2dU#MrHN}ZxwSAr^D5&fSWmLn$jLT@cs z2W>Y3yNN46$sxY4pO4v^y{X~9$(#>Y2!PAzoH%~;bL%rTFu#2lae+~=wrMJ$lZJ<^ zFA*DXiK8i&ey-g$#H@6D4ry*5=u^9;nX3ykd%LS__-5ca^elMM;>wR<%{P&y4*{QM zLVizIRq9hsS`gb8tA%NO*fXoNTQ|PfcUSG$rv1Eg=ItT$h{zA09YS}#JpgMYPD8*D zu5s)Ao0Wgo1GkQZb#6j>#7_<d>-$5jPScj7oj0kS(bgGnnBD{54$idpUJK`V!p<i3 z7UG9hGNphcW-8u?B6Xgzp7?*i<$7bs>So7>{p@77r5>VG^k=96edifJ`4j6q1AzGB zB=+CF5J+YBt7l?yUQfCAXcO^3Eo`5r$Kb@}TSeCuHEmyh@PPO^?{7LYcQ_x)kU-m3 zrf3ci6iA5-?jnav(%7y;LG46vo~+lKMW&UsNTKU7YiVIEHDEESqa2FO6cZ4z0CS`R zM2Qd)+1UC;rlu|e<OQq|1rnq{d(l@P&>c^C!7p#c{&vI!{eV*OSGCdXXgtXchJ{SV zg(pW4nB$T54t~WB%pDE^hYrj<jv)???%S52E36|l*eNHBHWT~_2L7-pA-^P1@hAa7 zjL98`&LMqHVjIAaHuqCRp8-4s3{L*C6`&S<0}6&))cEF5{6)s$#l*-wT#y|s&R#Cg zkq+s_vpnQYyI+d&+zw_YT>t0CW!7zsri}BsgNw*?=U|v4&yq8KDRbD#D9kHvgpl>n z|GJOXt@*D1<RlFq|C5s>Guus+W*gaOy)Mn3B1Ay*B083`H<m1yopM@_vfFyH;HIhD zM>&i#UrBwAw?K}sR?gSb+@C$U{zkcrqgk;Nxr{O&xXkFJ)QQRY7NnQV_KJLMBDkOV z)`1gpeJP7QCQqO&k0+A+croXwIS(b6FFBP5>tU2R^5x3%+0F9XxAXY!=A#8q3XUi9 zcm4A}%N1yq6}*MzLACP0wt0+^WCQI&H`9W{QnFE5p?M6!#4PW}QND#>kzJXm)p3E1 zVBy8GA{V&RC2b_;F4<ME*hk*ZT^{MFUF=_0{KLNZFTObNxEQ}<6}(d%?pzYBZE-E8 z$SbBK{#8j)VTtKZNuqXXBDnN)Mp1HEX=Z>)YCwT_Zz)-@%;rVuR!V7pOj)U!QDIDe z*{ibZy9O081-G@!>vyoV$E6Kr<t@(GCV0`k<8sOrrZu3f&AEcH3XTh?=yNXb>8*Ht zT+Ubv51W-Umctj-fpU2Kc!15=v9UA?oLXX_Lxf^a8OhM0BhdzuCk(a`X(B}fzdClt z(3qd~R(^j`Y5W~vhz1)S5fjMFQff(7t6&S94+0PMStTlrLg$$xWnX~PXkhO`a2gJ_ zCyy1UgKbs;+#8@Xv<vJ)SO!EHL1T_!0?T<-Z%q|=9p$E#RbZrn2{dLD8KXjEHb5Di zLP65Vuq0fK8UFUMnGu7ysk>sJgkykU@zxu_L|PTUG%yVhn}%aK6%52E;D;9sE_}oY zBblXy8WNjo*ORM_r0b+x3`9|o6e=SW2iv0S^@z8BnwfgP29-<K8@;aK$gDRHG_ZP& z(WEgG(BK3nFa}p`|I^Ar2P=jL8KA)ic+iQI7e<x|{HeEEoY<^H1Y*(PXBiDLftd8Z z>WhKRMJ>(KMRyI6cHBbE=P?*PJPb##GwcH=B4K{!!1*#aVIs(%2-U{bsS}~<WY7!v zzpy6TYbIHAl@7TU(E)YB-RCq(aiWqKu%<o*dq)8xj0D*r|AjS`=~b3^2BrySRs-5F z)w3{QO)>*6V;m0<WCOtR6QF{6V1sKG#kDeE&CyLTOG}L<9wScyTT{V@&KPmjLo<f6 z*wASF6BGUuYt~mURY+m=YcfDr$M!YFPuFto)aLAzbH4!a3N<9)L6AsL>}nfBXX9n? zny3ajG#K~#ggHY8jG(pgWnv^P+QEJxsZVWkNT8}klQILeq1NeRYA!I<95HN7GQ-vc z-A}pAz$E3#AR9%fFS+B~sZJZ$M(8MPp4M4)J$$~#*IgGe5r`FM*qZd33wW6SOqY^S z4I~f<W!Rc@FkAA!wx(e$Z22d^P^dBP9*{vw8Y;jZHg(4_Y|RZ&I>Xi^K0r`_A^qKY zH8qB@4_99^rZ|E6XrTToNSqEdW9k)0{cCGBe=;7`=rF^B$@c)_HT6R1eyDxl1u{e4 zYevuj7OOxRD#(liCV#@P-(yI1%+We+JfAERgs>WzCQT%WnCYp4t|OoP9FTd_M(_e% zD`!^4v`b|&BZxqy|Ja%fpV~EugObF5ZOu=*?TV~}JmyV_)Vf3(Q&1dO9}lzc@6aK4 z2opPeh#>XV4kux%nK0GA2Iw#Y1dC+BI)LaJuy-8BjlpY@LHe}Y!o+`hO-x@GAoKs^ zHQg|x#IBJFOo$@PqGmW54ZIQ8t3>QlSOo{qfK-r;B&64A^k~q%9t0hjf`&bq8A+r7 zuExRakRS#OX-E4fuD|>E79}KhRG$h`B!hKVM^run^zq=+UO;79|EVr;OUk&bKd@PN zqPgG2ZyBUO22x$?26RDJlz<O{>Q7vkF_J`P+m?Zu8Ou3V?6tnZL8n^ujEhuYdt{)m zFu7fp3Vip5S%nHzqSQZ)dko!}gn)s0!A%i3M~1D5Mz;%p@VzVYudOMLgvARFTlc#N zlRM<e9ZKkFGYhIHu2Y8s^g-UU@4x4yc%SXXkmpQi+3H<}syS2gA62uaPo%g?VYRNW zzbkPSpfn9e<GSCw!R{U0N05O(VjqsAb|vC`BpIqE5~RscHB-7w^`6@Os5>J9!ZB1$ zrZFoD7#s^zSe-K#0-j!dn#Ke&oTbbRjGdu38vX*{mjS9|aNkV7N8xyJ=>r+22^Abr zdamYTWnkN{lbV5kF!pfb(XZ!c5-?-;Ffz3EH*u4zg_9g$;A=&&EY(H+%?!D6P&^1D z^=m%A9CJGugF?QzBQkYYr0T9-Q!IT5VqcrY1W820!W1D%H7!2)U<A2C3q^${-#(h^ zxO59RYDvAQ2t8`*<sayr$ET4s5DOU?33RVD5-5y<+2Sw?v#pShuH)%C1@x2Xd&4V& zjU$IZ$M_Zmv1`rjm8OWFG97pl{4cC|9Edpy9xaF)LnCQrK^W*vBlJ7)0@6#LZiwFn zT%cz3-y4^p^{LeKLpvz2(LOW!8wRX7U}1(p10~SUB19%`Y0k6qfbBBpBLdo{PY8wL z<=9*1lL<A<nnYlp8%7E_#Vb^GVb51e=k9m)N08AKnNKTHu|O$>`y%M}l{gGe2$o0% zW#C}V(_N=AjZnW%vp9@t#Y+UP6GeOJ5C>#=usYZ`do4S9-Yfk2pNFs)pfoaAfAz`Q zGE?m!AxQX+k^(SuZVjT-l1MWbM~^Ce2Bu^_g>(Rt(N8rk<4^Qp%sjN)?wDG4%$aG> z#?SX~p&CWCdS;6Ou9f@M3}jOeXh9hhamPrIpIJ~rGZSx^!Q+zTP3O1fHa9ThnCD*X zAMlgQ<3Y8r&dt%PEOq{aY^vdE30}ZGcTBYTi}e-e^M3#<*_aaxcT7aiR-}HNG`h}p ziRp<|^)(N_WD(l;*&CubMho>FWOT;t*L>&UjD_o}4}NvbauwPEaM)X&6Ip|fvd&}H zm>JY2u1;zd9Low3r;ncby@o)pOTA@MP<pEU7<1Zs{ht1N=6ax^kl)P&nCXM}f89PA zgknT!00|M;AdF%-eaGbSYtzpl^T%Kr+6J@(7#NHZr2-A_^*cQ7@h``?-@u>|^Qxkg z9MWy~D?g+wt^5y4X~+aFJ{gFm0q*Y3N4;g1M!q#cY$MPM2qf@4svAMuGCuqwi=<0q zCJpgG17w37t~Q(w5M*2zYJf>77~8v#5b2X0UuCE)uG4=NAXq~M+<#f|_NCK3ThV{b z&1Wp5vjUbMZLWXh<N>nTbVtWwIzm51-P(m@en3}tAy)4gu<tUD*4a?^!7d})6}x|a z^&pTG2D_<H)BXN6Kpqcfvv~!-2{yltsfgQqCDzZU32gdgY&5xHu);LVkT+}gJUrek zxnU-&mMtjDpC4nAbb#*znqtX^Ur$>Ey~Su`ub_3SZCjY7-T=X#nD;A8{5DNeLW{q1 z80_ZF{PT5%@0gX*O}3fL7v_L>?=#<BW<F0{W3Zd=%3Ea4-zmuX+OOBCjp{@{-SMXY z{@&}*dU*IRyLm0zO>wO;=Of37A210GV++F=--Jot_zvM|G<=8g7yfFf0NG_efNlWK ze5^BMU=5+8qBX<8!tc{i-45|%AuKh)y7l3$y%#(%OK+L@&w++SK}>l@CR_rD=v^;w zNl31=q>!H9((ouNA3{$=dwtmGmKa1=DSRKdk;WxsRXmG&KEax&?5;tcZ^{)bOCS!6 zmR;Pku0EG=0v57o@S4WiV#ek6J9drQqL&pmr}-#;FDTg+C12h-JaF&+P@%~#-04RR z?o}w7%CqG&*w}cMB%7WF6-itjI_qaVE36WdULUjWoz@?ol1%WwbLDns^!~@q3INPQ zLe5Vzl#}^E<v$$mdMBJ}rqelTS4UqU<xR3ydHn5fW2+3aa{i?^og|=EN$fiIpC05z zH01`2HSzkXWq&vHn74-|MEFn5NTubgkt0mOS%x-ZsmMq<>8JE07PwDh&rq7-YtJqw zWu0*gv9y}>-va))8d(($y(~Z`tsd`_oTlexfHVLG7!0mC#co5y#lA{Na~E$@lLYgf z<ddYX_@h!pb4(>O#O(Zck_1h6hmzCmrJtn<i2U>)sB!rEufRz*%MmUIs+vlqNw=Fy z<r=A)RaIvOwzNE$o>r9q3$RdXpEa;hmdO_JP8ZN|3QO1DSZbe@;{1iu`4Y?W)VSUr z!<}hZjy`#0tt$?!%YE{B<B`qzzhE_-R9RuB!ad6K!087qBKPh;dhTL@yJJF@KVAN{ z)W*&#ii<)v1gnte466+lbg+87qjOe{mpd;xdZws5NW-JP(&TtIGoLAnFW9}TQl)sq z^wyuxI9gQ+7$IftWo!oOi?uEx<y_ERE<q2+G+aZ{>KAZw++#)46rnM$=OIsxHQl2Y zFEe<}g}p;Fqme&>%kGb|zPl&<*zERX%!)X@BZNTs9o<F8G`&*zuk?7QiKq57lm2ON zbW`Ni;J?d>J3{&7o`-7t<y|-xu^zK?u4maJclw%5zGtfTm9ncIOB=2uR%MIv8Lz3S zr5h(qz?9U>1dwrgu8B@S!?Vs_FXL<0J<W)9r`g8Z6|d-k*6t5|LHZRB1U_bE^ws7L z1OtaJKU}=hAJW|o6}}v&;t?aKlHz|HGWg>|e^~DO@tDw}>wF4N^+xSon*?9ehHt5} z1iojPl0D-uFW!MSl@_><w*^Z--u8hHDfK0$@)R$vXNrmCld_e&2)+l<m!*34c^*!_ ztY`9JQ3x5mFYByAzfV0Tyaz#-y@sMR%)w%p%|&FT+v&9sfq2v&n78Zd8tWNTugqj6 zf`35vjz0eVJ_Fwzmf(1R8NMZAdgOD!b01fi!gs~#37D7Alei~@0{!mwf`$=5J|{0J zshX%Y@VTDEXE~Z!76-KJRNU*Ybq<AGxVhkGL1wHE$e=1e4BWYyVZu>{c~7<^l!Dg` z3+Yh)>Qxqr{UPD)=R{-{IntrV0pznt6f{E1s={hawdg78>7!tWQskcBkH>4yv`oj* z^+vRoOxr@M9JYDNDl!qQyo;1Yf;nyM(b`kJYZ5_zcZ7ve!_yK&2>EbBK93)Lik906 zrbsguHY4C^LM^il0nQcDJ+7wjhX^ip7j|1BDk;g{DjD@VRnTE9AC-qUn!0HDoj6%3 zx5lc2T~Cf(C+&4cMBWc>U@=)Fe&5Hl&b&(GvbF>MC}NkD!T|XnoKT>4ZKpG;dx6P* z1oL;DMywn2ergTcR`vMjiq)3pGyZnQJI+H`Wn1iNS$MsO+YnfH2?!Ijn<>HB$_hm! z@tJB<eKm-An@N6WjlWt39?swX8_8nNBJ;39{)<o2*-T_8I#DkppiqaiR>4&@QM04g z*YGEmk4(c9Ie9~rv01wAKI2GtEL76Ao~vxzNbZR>{7LdD%w?T<f0t{vLLzT)KB@)i zuVA<%j?q&l4!&~tX8b;HVY@QLBki=t^2q2mzdscybf2Uq8Ir-3k7hL2F>qI=+bW(l zi4-mz{4~l1=+1JnylbJ=u_NFC{^MB9_I8Z^S2)6L@g!wJ9TgR9?@qQvTb2->u)6vu zaZuAP<#nLoVYFesmq;UDbL+Y@UWV_<wEmLMXB)#HA^yjFi?O1GF{V=${+AfMrm9s< zXI<&CW&hC2moK}zSNH>zO&-jzGk8tN=g!DmbN}Hri(cTjewuA)EcQO#d>J$t)lQw$ zXrhgUMtAD+Y`T;@cmoL|jJ<Jx``lq*%lJ&>RNTW)jf;a{{_Mr>j4#*pP+7y6G86Vc z6&&oa!`~%`F@ho0W68oKb6TSC;Y<M+%4ta78_QQr0}2sH2oV8%s`_sV@JF<qzLNn< z#5Onb7GX%&dqkM}f=T=+V&qI}_&++qZ%=CO6GqRq?PpxGOVrn|2ZwkWa{KD}Nsd_b zfun@@ODYP5|JF}657bJz5|dB!yqb38`<w^o>ynY$oH}=`YVGeeD#+A6CNLgRzA)P& z*!^Qf=Yv_Pr|K2%bSi@VSiXF5;Hv(QyL0b&Gb^Jcw~J9K5Z8oBu9oGiCYrGpHygiX zuj*Br^(Rl5IvJX4p`0&Ve?9*!<as1(IrfW*kev5tD!bepF8h0ZGQnucbG^p_E{iTc zE;%7lGoL=(CVR!1(T5L{56LP)-eU-QCks(IIFIMo5@$7?P3itsSI0N6^++AIE^JPw z`qB`OZKV{ZxRlT|*z)O}hx{jTA<-w@zhquTUmw`~qd<82=Isxt{owv!*p2f-i!ao- z9{^Uu68Yohe`*khc|&=U&n&NTOdS4mp>@N~@HauYzj<u%CEhF#14D`Av(r#Rszs}a z+cNpE%GG3t>>9Y-qHCb~TlJiZ9gv~GaGNo3T#s!Er01W=U5rtfuW7UnE=^S?zev{Z zRDh?+B|k~ZZ<HnT%uaXk<-|XKbQ==#!R=m5nGuRRs!tk9Kqitc$yG*dz>kaaeT=hF zhPh@6WNT`<#jWQ4hfdk|(&Mog_0Zl@0adaW@0APu^SFZ&7O<Njr<<>XN-;o7z^&2^ z;t0s=370*hzi^S>h4By?*-maO7^wcXo{rW))rai61pQVBW2l>QFQOScf;<U7AuT^* zf?x%PtHs2Rp&Mdbnf&n2QRkCy6;qG2F8Dq5{|icc!ORjG#?b+^jpRyS-bO4jvD1jD zBF&GW{>@l+6Lz5JwpW@gvX?!zwLsl#=)@pen$M34)WBowOzv{XFA)W{ImGaZe0c3s zT8Xk+i5aoL;+YHvxXEM605=mY_ldHEM2>U-JRS(zVFE=aN=@p@(l7|W#9}Q`hPmnE z!oevGV`CjOJnFyqO?y}||HXVpe_rq6#qy;$8SG1U%a8J)J%Dm2HqN86b1*3$hKB8; zU)l^;4aktXe<GAd0Z8A6^T0?FY88A$pur@&IH6C<OJ^RR{jLUqL}$N4Ch?FFnjHug zRIS$U>@Oo38*=O>{uvuy$yd<qzojxcU>wEGIrO8#-BRx6i$yZq>{YN_S$g52Kju&? zc{V8577nls=D@=0%z`=Oad4b;vZXV?Xx2!KMm=QsY*}Y7=aV_<0C7f^ZJKC#%p}N| z^;sR;_X4O|GCnO2V-g5HPxKXmyITUqU`0amfK;bM%NXO^Xpzx<>{3CG^r!mMQY>TC zB;j<@t6#SS$Qi2_v-EKWWmJ%`T!kK))M7gU#Q^wV4aKMlee{JgB!H(TLyJOEI@txu zs#OTn1s`!H?;?|-%{fwZlA-^|D>_1DiKxafH~mMnvL;{A5WKi-5igP&4|}B(K!9Ox zt{UdiMocFG>y(smE|ybTVA%Z}ZFsH`aY~lV4cjHs$>Sv$BP^p(BazHW8U5@<qT>Lv zM?7Nbq*+!lI-JyepWQZ?$S;?SMVd75BqLCxhU7$nbOyVbm^wRZX=y5)g%n>U@tP)z zdQE?#Gl@^8XES9$<w!D1B%Y=8#2%!__Zj3PnD{n;*C|~Z*OcqT$&UnhgY|CXtIL^s zgOUYNFESP$0RnGjNDyF1+C(W8M1RF}N)NzCn9xrL@Oc4FrtR1i;?rlBEfaXSwUIe` z+aQ6Z#xx}0HP48}Zz4vE0fJ6x808^w**uIp5U^l6!cIYmPG;{j<W2v7v?~9pMCBC3 zr*BLqZ-Yi-V&UBWiKi%>V#HIt{{1*@BaTV-Q>!_$t2qXkJSMh0MlJU%oC8Z>=QK?= zOb1vb1KAXfY^HcP@%`0VfQRwv+vLPkPKiyzMTWook$4j599STIdj65MleC`dZzAgs zk>o$#7fh0YDdy3MTs>p~G`tTs!>edgd<3J~PabQH3$@xhNDYd9tBER{t*@P}WFl1= z=ngRfP8mIUvYR9sOr-h~*Wxl3crqj}pJXi>U3k6B{aQ)*Txor&02siTja%lJN7bg` z5F)s2GgZWV4dM-kv=wQn`MY@yJ*8g>#rWg|ptQ*b#<DQdzvd<ZrX4^{YtG@BW#{#O z3Z0ySPU?M)A+^swhQe}7%k3@H%J~Q+P_|AUxqyc!1Jqz{uVf*R&h8kTA$Wf%Ad4); z#4WCMm$f(Dq=i$AWn2J>x<$n@%G&Pki3LB?3u4nbVI=;enSb;&L^t5*eE7zvXQju_ zDpv=$o+SxW*do~+q*u64McI`QpQkmyoUJX?*8-FYXt390L<hrL{uj6j_CMy~UmbvM zn=bgn7jg5idk~r@4I|ui$D5sfB|X+Uo%J8^L&e*GPju2Rx2I611>bu)pC)tm2u4<| z9N6trj`Zp5C;&))G>ze|ui9A5>ZYAb#`<S$)9snCG$>wItcF@@RnQm*w-+6JW81(I zKx7pp$>18DH)}~wK(SKU`D+<nJfwQ7*ExXKc}p?{Ff+fE3|u+<OYqB*n3pA(M{G5K zr)rG1E~<jP@DCGPxI0He{BxCXNlF5&O$JcbEOPnW#IsjSVi`FnMp^7~0Cd^nd;9EX zQ%swch=ei3%A{l75>pA!lD4tgCK8@B2R|jixPSv>={#~r#0R@m>0|7BruN3?lK;59 zsyuQ!DX4PGhcq3ch0dQ#{tH@2n`GCqtz#!nVQRYg19J0?XIf^RS)CL6?HhTUEq)&v zzttwYHISbMWi;}_g*$CU5G)}dlbriq@~2!%1b`?3(J@*QdySQZ7NBhp#D#j3=Jgy( zwG;aZ(A;sL|9VSrg>$XuF<zBe8ZJ#w;vi?0;Yfbr1=Gse^QPGg6oeX`$d+#U&S^ej zAzRBRo1IEhk+c2ex4av<tb5L>3I@;&A64gsKdD-J+CVd)xZKtQ7cccU8m<&i<{)N? zO~U4J!LL%4#`p_?fA<UFyF?x>pk|r9m`)-WpOe$>N|k$}k6RAs(ioZ6TWxhx3r#n9 z^lOD@EqiUS%I9FlckWpUWiYkn^~b1}!5i(FikYGbVso<v<up*aKk2Kx-J=kuU+ThT z=@&nb-O4q8Z|?oR{ceUgrz2mD)w!BE{Ubn{71)4)VSt-VCy)P8f1)`Dc;&P@Y@CE3 zOuj4iszkB>3vSjFZ^$`qAzA(fHz$RVhszfjC!lX$rh3jsg+R3__YypyJE;Hg=zKxL zG&{M#hVzvnp0i!a0_NRk6OgNwfUImlzS|=TZZ8NRVT_nD83#+9>`yOE&+JL>-GJp% z*7;*x3UL|A(HT|G4X!|Z^LpPF``_wLzt!7(tAFy=psAgvzUT0X0AI(&+-rpy<K(N8 zrgl>`S%G70b2QKsWX4kg^5*uN1z4V1ayFFgH=JPocGC1as~L+1`$o?yl(<}zp0k68 z+cz$$130b*@O{H@95}5ZGjku-bNr&_$}pH#ItSCf9T3h7wnah#Xsc7}mo?TIf5)*O zlaYdXT-td&&Yaxg+yZN4!MhB-Q9U9Q-v5zP#_H-PUf)+-S{J_+oj%S-+q$-5xz+bG zG|X7EoH?}fRvzyRwThKRc@*J03-zgmtviJ_y_cSg7S*G9?Wcr#t2O)H@_2Fb`CvaZ zVEHZ!2LIFev5r{$t(0&0gXT!r?(9qS?91IJsb`)X?w-)}&(K1dvbgu=Z=8Of6ZGQB z-qFWEci)GkH+_lV@{iK_nv<I^U+z7N-6P%#p}d8Uy0S&`aV@{yd;eK@*5jN?z~H1G z%X^d0+tI?aAF$_axweZx?>6?nJ=OV8BQvlg^tMyw_|Cma!2Rhd_%b^{;abx4TJzih z@FW1ljZe}wY=YZ{9h!vgeF!71g=T*HTt~3n-p^nVho7dZ9X?ind6fY*zb!f`HAMIV zWg;D=($&c%WmBLGourJE)NOBpefh$9o&U*aR8(Xrr_jYpv;@z3hUO$t+B9QmI83(z z&-$Z5V>=P)MN&Ls5-8cP+Ed|@{Te9|a=EiyMd3uM3UjBLki^QJajk;RvL$|oiCcrI zp0@|cL5Mh~+bzj_EyQ+D<#^prr$I{SEC1hrPBYcZchfZpFbx4Q<*l#k-TUZ?YrcZl zi1mzbSIg}#+3>IM-BW-&Kk<3Ah~u1Z+V3I^G{5VmMLG}do*ti2oybU!g=e-m-=>B# zz)jH5*Dv@aP0#Ppns3&BzneNn#s2ydBJEp;-l~3`ahs*3Rub`AyQSWxrGx+?<CXYX z85dNN#*w^n7?ZZ<fys{pX?)wI>(R=A2SMxOwbYL)&jPDx_mo%fB_1hi*m-!Ah)fxL zK^`e+)&LaV0kqCXn{0hO_wnA<v>zLphZQHW2VdC3Jcm9L7JpzQLV~A$BrqR6EW6&@ z@`HH%gLvUcb>~O&RYJY<QEJ)|nq6I5_&rnZ(XDqCX%k1;e=A65ly7Yvk(qUK-?hHe z$V}SeubaA<_l_`Ya-5I{xG%x=XZqo<pBa&^-Kg5*+e<OGw_}PqPM16lc@RJW-|H`y z`^o$X?th085R_SeJ~odSd%HBY=FI8Z>lIv5Y7VSzt^650kJ_#{vb5&Lvh4h9zuNYw z`{zB`n03j_-=7l?Z@@H5!hUvrQKp88JALVS_l4&u5ihJZ8;~)#Q~4BL<)~0KZzlRG zplVUDt}egQbxd?c#iIl$wzifb@(n(Bm2x8Sw+$7<^5khe3pVbVXWYAp7-Sk<iHsM% z@Z<Xw9r1<EaTCue+od=Oyc-AKKUVtYoco<bItUPdo^kv5?rr3d_@A}gX>@TWF4QAc z6xa?0jX=R%VysN!isa&?g>t9rRA0>8cwW*m&wRQhcVF;}O5Zz@$h&>9zx&_#BQnf8 zCr`@=#lnP#B}9L+i^qzi%6}~Y(ghvu)a3jrHCc*MY!OH8<27(aeWClk&+pWvDXOtY z=xx8Znjk~ZXX=^ydNI;Kp`)JRTItzRY2R3|*|qw)3Z3g;cXz(Y(rOISxRe9G%RR3* zFHsHYo40MWdk_q;FhRWOi8($A-#htO6!bXeJ;l}nI$M0tu1o}yF!JFt_KdmEfU`4l zv`A2QAkv?DWiwMzY<V~Y_2cR-MKp_KctI_xLdo@1Sg)$eofW7&U;gTP!-b3-I6t3# z-j7uw4W2i_=+es*b7eZ0OY{N^l7%@D<Q{wTiVtCB+ErX<LVs(0-Iy*p8}>O~&i<}_ ztIxvEgP;FUd}pey`n&dwlH46$s;4`KRU`&$K*dBJuM%oP#Zs4m{X={*GKXIltHOOR zNTG(tc!QepG=FF>evFk_ejj3dO|Txq(S~4NPLYr)G~hbR(_zG~8;%+Y798eT&N!vt zEqP11??^IBWqQ&r^5UhaOAaTl-djb{eq|}eF2R6<@i=KWfNKl{l3E?R3pc69n!Me* z$nIE58R0|msCk<HE!z0k;^Y)EU=j2yPlGn_tzmgwCb=_3itrGwAieP+K90SOB#x9K zo+eXbs`PeNicqXvU4}wmGfv$)?M{?#^n%oN%ni+rIMd)ZnkOV>)x<-$eygP5vtYe^ z03woN$f}b-fpD3%`;D<Mr_hKcA~ARzizC_TN(*A=6~>6WRl*w^>a+B$r8Szz?GbYu z$qobu2yk(k`}gk&xhS0yd32w>+`Hpx%cNZ2PD}sk{yl}w?d*jexqxV&<0W@;i1L~N ztC|0(0KY;94SEu0ng1FS7q<K6%RkVndSg#b3GXppS%L2ik&{LRB7&&J_mV{0R~aHF z*$ZcIrWqg6=^(e3$QCvb{;4g*!HEm5&`eI|*SWJw=S5z)d-kb5NI4R#<kx1zdX})y zXJh^%^X#*8_vqKK92b@`Pjp?gqd+bkd!5fdmnUev4!GAUH}GQ9^o-M?!^bM}`N8lp z-k2M2Fff^Z>_|+VMh3m0u(j<vR$ipB01k<e26A}>KTGA1O$x^S6Xu`S^yu>XpSS;G zan>*Bt<90v2Y>Rm$UG)smD}F-VKb#%ajZeX*q^PE?Z3BnJN~)Rzk9#`f#9wZ<mT_! zbGrZGH4XWTvO_PJpJ_P%d``0PdEDRs#cLXOB6bGyujGDdcpByTA71nPp9A68#{>Aq z{;I>{2S<<pFt+&wa8Za*Hu%X~X!n70ODJ<Z3M?fz1h>OU!w0H=ZoK^G@De3S>^BN# z*we+@7<Peexf*t{d6<{MYtBg2o>*_6=YP)FK4?IKT^l$82_z@5&q^SZ<VGd9@M%k* zyg?bwqcW;(8ML!L(Bmz`+R7&ROGYnvi{1mzRNj+v-IcuXc$>j%=B4A*B)Dv0g-Qx3 z*(nje;pR19<sLv5Bu`3oZ;46oWn0#b-@b^a>7s%WG+Dgfw1jWrWaH6^7hE1?zbgVa zD>k*uB@RfRLdZ>iLViutonm4(sNrNMe^o&cmxbkCqB-KFSqc5=rWkp1A#y&bF`o2! zfShbU<OdBASXsk2<nbugs#21d`THo~TfE?+mU@!X1?TB2k`iSz8w>oQ{Bp|M<0v#G z5iY4=7XC4>vP@4_N2+J)VI-HF66`InOG?|BU`v$n4#VH1fcPdctQ58>-K0eY!Jb*j zS+esN^TcGOqZ$aBJ~Xktks?A~W#u1QT8o%~tjs>D7J_f@ZfJ`O_;*xz_Z#qao#Nv1 zlZfJRHn3ti=u2~IRT_hLf4rQ!qxOU%D~=n|jjK7!8&5ouaYh47PCAnmEfMGc?oQey z>Ac{8u}X50%zPqfd09?F&S5>17ox|y75x{OFIXuc>H_obwr?POcpDs8+ZFhijo@Ma zRv>FUq;K7*@y3|E7f4sX$~v<tWfv~2jnPRWOd-(flYG@eTpD$7_1RA_t`5}8B(KJ3 z)(p1G3iC~4bqA-Lv|;}8zJjB2sVX@cJJo?YW<$@rx;{w;FV~lj)=+HCvldKE-oAfP zN(sjzR40?X@|RmRc2UP`HaFv4UqgHLdui$cHa+&Y<)3|jDATS?7zxr?{`|$GA2Q8s z?MfaW>vR#~+>CSZf=n4)8bmbTFF!q#mm%}L`(#lSR-!fRQK+so7yzVGQtcWPFK0+S z+6xUHQ(S|e$sE{YGl#a*?KygOqyDZZR-2N|OH!prY+66YK6J?+g<bCxt1W8PQj!=` zpB-gSZNqZ8oGu?wa46eRyb#UyCJ81u$)m5D@9F0~65B3oz6wORP(U2}P`EyEA*k@` z=4rYYt2Fym!5zKL;z6Y=XK%s73eib|82i${%CK>@ah2S?RBK0%?ZRQD%N%1dzM>WR zOVTDPS0Y*iFYC%bXR+$KCmIsut|)Y;KxxNJ_UcsMB`KT{^^sm1v9CPBkX;og#=+Pj zDYO)u`o@*Z$|4j|6^hw5aqO$0F&gnF+Xm<}SCNxuIT5m;p(aCRMTcwU<%190_VW1) z#$|d4_jIfG^x6mfxWir-KGx_e@d^0m^IE=fROI3#2CrElOnMP#e?lPaRO=XngS~iJ z55F!&%=f=7e0#XOw8Fz4d4Ew4cXtqU8c$!3OR^Hv8s>h0zh)up!J@a`$I(yExX37w z-}V_h`yf2l^Y?)8U#-c4<^9mKfsIp5dy@w%1*M$z@p+eC%-Ed17Tn~vu9rs=Cigus z9+&<gv({@(^x(SvEm_l%Vo-gf(_=yfTD=yEVJ)Tw^5eZa$$$1|AKjpqi|fT3@WY?U z2E9|yNs#qk%xH9=CJNdc?O4p67<{ouCH1;`!>^T)LW^6H`Fm=Z&o=kry&DdO!u~9? zPoRXP-bT?A&PiY0GJWsO6_cY^eX3m5lv$*%v0rpa{k#K-H=n)-WqRA|B&+vvXX2p7 z9vn8H$G6dkd75;@ReI}~LnYhHD#*ps{uJIYl)@wCr%+HvIdiak$808GIJqcnGLip7 z|F3mT%yFlh%>Kgw^6R)Y{L8C14&i(8+ZN};UllI#DZQ~&+#s^P4#x1^7{Kl3zx@c| zjQ{xUVeE+O!{j8t2wW+Vg-$GMo)UU72LH~~sbp_>&fdtF-PqY4<i%swI%Kj(ji03Q zNt3wTUV(G$&1^>jl33sgJJ__%dMg>Mzr%h0c%J!6AtaLue~@E3v}&RPHPq%YnnS&P z;RSiS%JTW*`9Je!^@W=ao@dv@5l$pxFxFPo=(niRk0|i!0#|iq^~q)Lqx;o3>GX0Z zqkzl2*P<?A<1e`m@;WOom~>$Ilc~B17^fH(XIrp9UzrQM=!ssfsnVs3gKi=@m)Msj zT>nV8VOK=Nl2ISl1gC2q_9guO%)8Zk%5^dc#{&YCh71QVL0IoAkxW%M2|e#xz8s(L zcyAoR8+#uR)B_FndwJ!L!<AsDpJ{3!mdEo5;srAav>Fe*E9o)xE<vr@S9{TTx6Z%J zVQbFEzqME~)BQwM=zSpKz0^taGe|ZUWtQ0=5FE*L5+n8@LGpsVI~Q9KOQe*1wXghF z@t>nerf6?K<N99DRK$+?HEi(>w~|#6%Qz?go7>|%(lc}M?s!hA8_T}uC8ah6{cfuL zAFSPXP*YLcDEc�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â^IgIk=HI_(hT50XeOc4}*$f%iu#rLhv~1iDP?c?lf}V>m$xG zZ(+BLx#ae(Yc9r#RuF|IjFNPH?!&_R1x;$W=}K9km`~G^yl+kNDWT+&M?50{PmJYG z{S0P1fXcH=h;P!lURAOgY+$W+P&Q-T*e^iN!JW#qkf?=vf{N#-E5T|YKZIHqEnchg zAWZ7ynW%p6x4IE9OFWIur6n_T9U<Q%MkiaMDXKz#%y=b`pO03Os(&!!$!=$^$HAHg z3t|Bdw-hPkQXU*?jLZqX*3o<>%GcrAxyMEs)lg-(FIdopc)sc}4F9D$>~^^ce6v~h z{AlBGGeQwPB+yU9B$JFfjE_^SExO#BK~7)rq#gUhC~;^C<Q2xp&MC@YAkH2?KBm!$ zBHcK9Ni!@+_<7Z|hhkj`I@I`7zIu5lLxiZ<V*Uxp`NNr(Rm=>^eJJ}iF^=ewL=3w3 zzWy~bs_^;9i<q$&N1xT^HMjoJiau-jN+d6*SczCuQ&#OQhOI@!oeIjdHLQJ$Tyn<u zUTtiEE2<uFfU%|RwIeO7CRMhc-*Y&6@cPsKXLB(|cla)|L@uTdtKI0hqoV1+-O!ac zF`yY8JCP2!&2s-jDGbZ=eCO1*WH)d9=-CYfHS)Ll5-yF6aHWPjIYu?OpH3g#mrTe? z(5PG6H#rokh=fm09_dq^)u7S~5e&lnbcJ3QjQ?sN@H%S)uga9)5Mjc`z)B)4JrAvk zd+;fR*j}{!?t9Nm!p>RgqhSvvo#>~Mnm$|1Bu`kp`jq74r!2-GBdq#nap{cPB@HK$ zq`LaE+PceDJoj&%ANIZ~9wBS`h>38xwDx?+&~Q}d=p$>N*=pWD?i%F0u$y|N_Fc~m zXyqB<x7n9VmO;-=ym?4X9nTED{L)zUeKj_NS9mUeXdOKG?F^UmQHV^78x&0j8%Wr{ z6bi@+;5!lU;z?C}yH20w#-)I;D<G1)#YP~_JU8Z9?D>vcKBt#;#9y!Gm-W99zW3?d z;>8DH3nZi*u#Ka<<8FFKNo{5&wU5kqHeWl>6(MDycjvuuchB&(uwsn+;&C<n5JX#R zJ)6hu19jiJvp$fZ>O6z8?vc3fueHItA@O3c#N^?*mUHP(e+PYfV=|ktZ=*~b_tDDI z^l_@orj^p&FRt3XiGd=v*DUXTJ$!-n`1-Y+exZj6*}_ks-_|<6FX+!FrR+f=g_vgl zlM1U`zU+Sch0D0^b4yl9#O|TZ$2GKhN!pF#uif6|w69jG-Ts#5xGDBI%;a6!$V_b~ zvD;bW{t7;SInmlI1`YNM^M}KUTD?nAN<0o1LTLzaI8kfNz|<9j`FsEU)}!1p@j3eu zAB#5MZ+vIV_deg0UV^j=`uk$^?CH|);~;%DcedgZ?ygq-WA#$JRQ|?{B<P8t1wi%< z`1MrTa{T@NoyboWxIijz6A-WN7L1@$&H}QIvtUi%y*EKrs}SZaz2C9)GGZim^xe+K zckDOCzw6)lEeQnnfWTwdK@X*acBDaC^ua(<A9h6W4hFGF<OM;FD%zJQ(rknhH`vX{ zO$TXIGIpy5hAaWdfzm?GgPtXh{)iDbp}7N>ULG{a^8@BQJ@R;u4GK;Gxdbo{b`#_3 z;SrLImICwMU>@$=Uz{!D@<PyctK3tSV<5@yMS8f0RPgfW9gr0g`II5TUg(>4cX^YW zvvc$#*G+)R9N0W6O=a@`2A{x@)^V^v1=5O+ds_(^#a9VyE_a+yI|+K)2pqP;Ci}`H z`)wu#e<SkdCS{c;9c3gb_#KuzZyWSxE(q)@Wk@3P9)1^A`F)NW^f6B*Sy)+Dj@Tp@ zT=70Q&u=vAnO*giQ7a$>vl=E4Iaee`a6}3<0$&|O@<~CEa<Yb1>=nG9ql}!8#00S9 z-iP<3&W&GU&d0hH+zR2o5X~L!ED|>|sxOCt=H@M}J&O&OKj%>p8Rc(se$+sXWIo{U z$@rjogY@nXSYS47!2CX3CROU$xQ@~XDGl23Qs#<Dm9-UC|BU2twDWCjzTbkU`~aS| z^_;s}`YHCl?Lmj6)d%|wkH>cU+aJCk6?eo@3~#G6LR~AcFI(D|PwFeAA`&0Iq65ar zhaUy2A_@5cSSeqf57tsOVK${Qe{vpZN;%m3+ide*4P5G5#1o?x*08A_2LsIZdHlHh zCM9q(_jI7fSCJzx$<hHgo)-o-Qfu;4@u@x|TuLL4p6>6Vu@_#X%Mf$Pi?TH*(h3gl z9+Wo-{B{lI-X&jfAkeD1h)E9262$l?bM1Ono2eeLH7^24FLG^^$nKx&D4%X9p0p|{ zVkQ*@_$fhyKgG`;c{8|p95RGk7D8b?i2Nh#n#2uUpfy|Z?4&cPY{a?;cs+Z<^Nbj8 z<jY&l-gT+GFN{y#p)eydUIy$QZfGvHRamO3aKyB6Vyj0lfgu(3M<Ziyh0A>g+&?#T z-tf~udVV)we6r@$$r-7*RA7R9njiMHUTWn_?SbvuEBupZ%Ov*}5DvBbZ(qao)o^bE zm;sMWgmKW?$cX`$&+*aT?Y<+OHpOLvhx<)b?q2flVMi_ZOD^};i1*KV(+!vV1B1H` z)Iu)FuoOpdFsl(R;Y*M}WrM-)R?rFIk5||#4`C+_J?8I&>$9a)$;Y20y7*+v)nDHi zlBin$l$YQ4uypQm)%?r$)RU?O=f9i@t1n2dFMI|o%&0Fa`{J0ZdZR_P_;TWnF4dB; zFTkDpl4oCTJpN+Cpoy=Bh_6zQ_9dcvz?gZ}3b<sMAxxaXF-HNu9<Vs;gi|iHTv)B< z)9VT~QsrNBloo$?1i|q^-5cu0Ue_p*YWYawXf^0lY8fhYm;uJbfiOKp@deQ4Dj;qg zip0VY)US2yucLXP#F7Sp#R(1FEFWXCc{_;W?)H`2A;@K_I4qsJ11vrdpqEua;Z*Tu z5aaU75K^6pRfn!p#e=Dxe2LXDjb$+_<Q`h{SI#Gj^X->k0Zs)bwQ<0zG*{~*dH0xa z1g!UAX!%=aPa7Djpl161)X?|(;oYxyU#<+eYGkFZ0B8;IFtu*cQ$r060HLWopE{8i zmQ>y_$WcH2O0y0Y9y{>H0jmzL4jq&V8|Q}&*RI%b3Vf<HW-b?uqF}9Wsp2D`KDj2K z>C}U_rv@BPh3GJC@|ZWbo1PwiGNTkGJ`duXZfJN3v}v7cSNb;o=~QRmAnzR}FM~Lc zTv+9*`6|tQu1l@?J2kwO{k3eJ*%+e%B{VHhH&lIRBG4m<>d;qw-}OB-7o}RJMYY~* zonf?STtBS(!M5dzYRl4LtrsR*d61^OqgtQ+BtGfZd^+E<%=hLq`_!XrEj*Vv;+)*q zF20WslM$Q1t;cX|B>2)N+uYF_Cn`t~7%ZnU1(sVxzECA7-YfZTUqS_zF57b}G`ONh z_$G)FvoLP-pa4MQ59Sle9bEec{|k{m9pm7W0%#OJ2O?!2^V!lej2OYqigew%Z6CmV zF$or5X0}LauWvV!)y^(op5UIKNibRfCI^RQI;R8wQAnZkU})IcpI?*F!H^3Tq`wO3 zG51t9havr?<@lE&<={O+zlUJlgh8LjiN7OAa0U%D&glPoHs|eZZv6Kz5C*7#;t~v! zRfrdm85BSdA%>|iODt}fv#dfuUMKNPkx;i;&gMF{3si|aVDt|r-?SF5vf@8{AybB` zjua5zCV*jq_&{#RRRE))CLYP;Q)xgl*6!y#;S(T9D2LVwkBD`LSAMEMEK{Z1iC1QC zi+*PI34-O(@z6{LKZhf=XCOdCtTP2Z4PXNzlBNNXX%MF;iyH>U;?c;bXRwi_R>$7G zt??SF2DyYBaYTdVu^f&R#NkMBz#xiB70?Is17MiE>yP6jTlq{j(s)qw+~FVRLFi-J zf}~_Pn)pMGX0g>`U`9J_2o^M^-G~CTpc_0(Tml;`8#f(PBP*=%ob@JEViU9`c2?wx z^V}Jx*a!pkN}VIiT1*XcKiv?UC8B?TPznv8ejUg#g(yPW_v2jBJRq^!j*JE@##!QZ zAbA0Zyu{#+)Zni(XF1@keE|_`KDV75DOw0%3-v{_!1kG&=tBLUelRI#sLKa1aavzW zAL_E-+Pjj(jUSTBy^rH?r0E2OOx7=@p?4?_j%_7)EK$}tN-mus4^X(%3AjTBsA%A@ zcqa-m;(o|L7CnMXG?14WdZ-JaNCqBy@%nb`L4+O6;1utrUM4P)iId=Xq*VSUXO2h8 zuL2ezfCs9nI29Vd1o3DPfNBTe=3UQ0=lRjZ;V_WzRVEf;h)x8VT;D<(!PbVr=;3qb zdnecVzpR%f@=ky`^kUnj7L-W^O??mD*dX;2d0$gE$C&$g2om#lJlNZhgjr#)fYXiN ztxufdHSa(&HpE|3d6^7x&TyAwk)orH>sdKmjdUy^!mIT~qu1@O6EARsovucT&Yy9* z1&X!~t?dB`I48JZMx6IU6`oRYRBh86i2?)&0%NcvY=GS}!X+@^q^P6nFmLI2eyolh zmFY3QbyN?60>JWkD;%4%HYN@^#h|8Ow!Hjv<z(XhynAE=nESPL(M%9O7DDYdIPhc( zn2*AhQ~4*DSdP(#PPT1lBAP(Hw`w^T0+~fUpu;&bx^ghvEyumD6*I94v<9y(v;v1A z1@SXMJeyHLjqO%(oD+)>Qqa}q-h5`5#(RtpEzdfHq*$H^=QNihJ3wcrz~~NuC$1A% z-liyrnH3Zkx9f=?qXOm~Jj)xCRFK33QI5PRQ~e9KdBLIB7EbLzQX}bIk)m0H@MxNS z6%cc!Lxir2rRqb}V7Q5&F8iS>f^Dw-E>`JOjw(5ZCI*#I;YQPL;t+0fhrk``A!saH zZdDCEz25BAZtx?_UD}FCWx5Xoi5RQnq$nQqSP4@~{CHQZ9_W}rynxE!4o4qdHC>4T z@qo<a?@&`#dXY2HS<*!QNFawpkE##@xlOWy-jV4*&M+wNH`mo57nEIMpgNI#a;I71 zJetKQP)|h2Y@WMr!c}@6e{1_<lF6wJW=jkRcy7bpbJ4<S)%r&$2t%=AUG$1HFW=ax zRG+u@UXv)7N6Qb%NI>Ms`tpJhIZ~TF24;V+;{s;H?#iZptSOQjBT{1IeCV}bgXyLH z35(x`^k26y8C!Ay?XN$Ijt8*egcC;cWIfxPAckcWO%LGL19+HhWBJu+ckPK+cE1WZ z0I6WCoH-9}&$~4x`at_19xr2r$cV97xQ{aU6rLEPV8X3He0yZuHyYqq0HY}sL6H%h zjNvCeVvN`JB;ECDDbsft*fWf?W&wcH9g$azd%I`(_BuLHl)nZkg0+(fnwX+ZO@Z&f z3n!MF|DN5~jHDnDgo$A0l+%x%Nt!Hv2+Q$DRfz5!e^jCs_-$@4Ffv;J#uBKvu7Do@ z6G!Vj`(&mYnBI)Hx0u5u%E=Gn1h<~0-0cz>YDXKu{PhvJ7EnZNtMt%`NNUPImH-1W z$i!9&qwxX22*Q@zHXV>5Arf$Mspv{VL<BoqPBt+GFQlpy5s;F;U&|4;#;|rQP|fVg zT7HkPlGnhellkLQofE|i7XlV!ZTXcr^#DuE02@a|Yk+j^C4b#)0oqOB!1{Z?=|<0} zi6ins59zmq9@TpE=b!fOKD#)UXI5~=r~ks*r~g;}GzF);ujGH^Pa_Ou?qCzHNf^s7 zO{mfscFP$5)As4|H;5^-xI=HVhHd47pP?P6aJZMBGiD8}GF_K#GX#?*%?YzIa(bN9 zsY1SLyH(6VIDR7c%YUa%XW14LqiE4t{-Wg1a%Cab3V%!ILj_3piGagMup2vtkIQ#C z4X1#YfmMp&Qy~>Z{EM?y?I=?^IPLp6MCDc2X!{;Cs==W$1FMTwOx2xbB5hGbZABhm z?<w`f;5MXkDT!=l)fC?s3>C_7gLKt2SuNA$jyHT&7fg49!1?;tLz)?3h1MDP^@hij z>aEiUr!;$4A5Rr*e_grFgsVHZ>V5N_)|pVKn%3=&nI{@Ayq_m`N;yur7(I3G=jAgw zgID8j$7fwLOw{eso0*N2&$z}PO@5kacyeVSp7H*#Pm16LqY_IJ_$s~*tZ;l%YL?dA z_W_>${i4+gXA(pw7~j>m=C4m!{KDpB?&~y{aZiQ$iZPhbRCXX}5Ptfunibqj1)(T> zNSBbtM*u1-Y5M|3<lz~0Dga-yN&rl7JE1a>*VQ=QEo)(8fqwFKOg0TK+M}whWa<_V zPqZSSZt-fpSLI60bw<J!Zv;NJFUWGwaVRV?Z{(KPhiL3DS^o3*Lne{$$WpdLm%8&k zkU%<Nc-GnZ!MI#;Q`^-0uhZ>DRx32{JNz|kN1<P&V1vboy+eG0*c?qhqt|Y}LAD=R zNBD#ysA7DoP88ox<MfBVLnLe}B+VKH-s)YR#4f_V%xlThWqLOF%-8xR$o*YUT+iO{ z(SHQH<@2F<rWuDNCc32#Db4~|tUHBhyU(UkhQtQe4NXF|Lw#i#((8;@XAQ_%+1A2- zBTe$c7ww~vH=~!co?>jLj>m1yg+N6M>9TOe^PfWzV($3GMA^7pdbF@Tr9zc21Bg$; zd8x!VrYQ2u-p4DQzyG#9?6_u!q$A&n-)r}^-^KO1N*xN+^R`_LGz`3~rzIR649%#y zNInRaTA)^O3#ud~l<Sa#Enm>YSp_9l#BVZtEARe+MAsYrnt@d~WT56L_YA7xvYK?r z7X(fQo`^c_pfmX94oI@6HT29&UnZQIC8-<f3&+pC(x<2hFt;2jr|;AGJA#@<4ftfG zKn__Y9@!-P5E3==+QywlBqh!&+AOd$NrvT#Rx(3aH!3ZSOh7yqf}mc%2L#ZqBTBV_ z=cO7X1q_*BQ59Jwym34l?*<Xuv`5PI+H(h#=gDP(WT~Wh{&Z{t<_^J5<OmUcbUp9e zrBQeovq<74wr=Be&h^sGCFR!Kf!w^*z;8~6{K?O1i)ay=(qt$a@r?GkiI!J#M?x@1 z(d5Y-7gvG*Y(l8$^wq=~_>lf5o$R9NtkfK5b-j;%Zb(a`N6tn3NMi6O7F>0d<~XNN zg#YP}IP--+B$75H$Jct(TH;~xw|~{o8M5xVOEqEd_WTSVT;O=5VZefT%!2;K7&Piw zBE(E~1feiwgA6ezu?1nKZmIvOpDI4f4wFG;5iUE&KH3n)4rXWMR&&%(WxcP{LGKUc zt($#u@)bK&^f0$p+eLNH`TpZy2ij{bwm2oPV(t}M*R@qnDY^a-b;;~=*ODd>6;i}J z>Rt01JW7{czP->b{d!$%q~ojSpxEKojJyD^H_L}D#R|}`%k{!$X_N^u&)$c5Em2Xa zM?4#z=C4216lI83MUp)S`SKY_TdK#;H9Rk!<l>HqwhlVafbxmux8-%N2EI$3uRb4n zo04OVxs!I}QAU18jpoghoef?sLy8)dWoMl^s{}PpS=OPfRH5xG?>C3jwMZ=MtKa9i z+v8-AG!RLEjkpiuTcyF3$V1ZGO!X(O1$}e8s-ce(57+j6gpTZ7JDRbOQrtsD)XNSc zXN%(jSfzgijwW3_MO7kH7<iU*s-|XP04bo?2|?l|Vd=k)7BIOCDY~t(O5fJ!H02mC z#PxTCgjc~`+Jhj0-`GdDgQ>$3hqEJ0o4`UkU>-HOK`A~fn1=H-RPgY3sa+XC4fHRj zLD$-~`vv4tjUKJ+-M2?_SShQ$0f=drDP&~vD|H#zeTU<^9ow@H6v%_go~&VM2HHpd z&ipwgymH2%#7UhC4&z#fP9OcqpWmAMQC)$ZhTdj;?4W?|M!9O0uEfPJ=`NsL@RQQU z>|ZI0bn0y4@ui4=3{Ki;-*^<G+OVsC!}Fn5S7QYIajwD(Zm!zDG3B9@MovsQi;TG9 zR(|P3{Ic!s8*|Nvor>OE`1Gyoqo3%W#*vp-vyf9eax$C=PkCq!-|t0)7fS-S>-JD? z!1z(i`R(>2yr+U)V>-`%k*Z>HFIi~N;Q9os&^oM-Xu3B%c5Di_O9)Mk1o6<yiKt+J z>sOuF%dM^pg*6WzxgQkM%DWSw<nNSZ33@+(rk=^EI#naEw<9;gJ0jgc6+HQ__`Q%e zW#HnmFDP%0`uWqifS`2>ex+nd(WrOA%JsDV&61Cr7kcv!4*UqcSMtfAd*`U17W+Zo zyOPfq_bxsxFpap0DP30JjtRP27Fl!Q_ww)KyH6^<f32M{|LW0gT6k+<qw#F%%G`t9 zrhcjOttYlutfco|JaT>BcB}N;>6<GrIqGMxr_lFv-Ft5^d&>tJ^jp=q&EA5gqqCp+ zu#$}8Y>-!?N3{n^Q-gkgkUilvZdbORXW9HV^Tyn2+UxbwpLc#K{d4hA=02wi<v(8z zWFDA)zR^^&|IdnV=D?g?-w)mAF{|M>_xc}}{V4AI^Das{?sf6;U!!&wYu9f6o{>MX z^Wc{GMyd3lQR@@Cb0X$j%{MRg`=8i*bJpzVU1@e}!inD>-<j?_xOus*ilcsNo9?}l zzQQgWKEd9)V)EzP%`4YGocQNYkm-+Xwa(uUSAX9I{lI_>_75JL0g29j`gI#DOL&Q8 zY{3bfUC)nF9H|4lqU84Yawf=#0IO+%p4$JJx*v9cGN()6ke?lg8C<^D_TvP2$SmU| z10Fuxa)!Wtk<fCU!A-+9T_zw>DGkXCL^h!=gMchz)aEmg71-J`0;)c%x|V@zWmUEi zczWF`yBIu!gm(McpUzm=Fbf^>mFE$K_nHIm3l=Z&KJOxh&&YxA3yW`joNtYSv9rZ+ zQlJ)N7;reYn}kKKVSUe_xmZwKEAGvGtfUTq;C|<AEs)V|h@y@_5|ZD5-74@To}+#W z4w7)%**KduLG4U_y-bJ;PROS<09X^U))5YD6$oh+)>{(}*Wr%}7ZGn2xwM9*>EOA; zIpini+8X{RK{RiTuc%e@GfT8$jkhLT>^VcMc@5pFBR)tG@6G19yC&XBkQmKI-EWns zU`ag6M$UyxW-}z;WFr=Jq-YeWFWKDR)}+D-(p%Z^omOdImNYnriz`Cr07HgX7lzZ7 zHK53fK88rH%gPeu6m!6;ZE`#;Ii0qD^dsaqZp&M=u>oC$4`&q|+Wt7ND?HIw^l1C- z)uuT7L(#WwFCapx{kGESwq1&@a@ASoi)}k`>&l#?I;rg!o8G39@IxhA_h)W|s{d`( z()F!!PWe-&pb%D|K1ZZEVqBP@ekEM}0b2boKkin9Mgc~{-$mm=8~#zm%cJ3%FAfSF znSoAWwUSyjw>a>puGY0sEhobAc8<1e^H1Re+R*Emsda+1wvN!bU6$?#u_vO^?dtLZ ze4_2TJU?`G^jP}m^wwJREY9sI9n!ScLlfKeKYZ6eu(4;mq3PMq<FR4zNXszr-0!1L z2&eRTLiCLK&lp|Y_<crzaOIptg20#LClXhme934>UOH#;T-&7np~+Q-NzI`zb?v6_ zFs5fQW@`t`_Gg)$Vwn!Me;zq!e&wOrgIRMVzr~y$Vyc~OfpOCc$wVg!>^sM@_$B~- zp=bFs+;ZoM^q&n&s4l=2Y4Pzo!3k%?qtCT=j`+_HKyyva=Lu0L2T+ZKif>w}YFQgR zeQVrdUGdGD`1A!SlH}b?a&hO<)VJZq+8l{|bZpaRT*Ed{@ZI4KTg!FZaCe2MNIR!C zyGw$KG<|!|$7Xso`#o)ebU}x${SLDF;NHhSGIAZh%{c5u?Bmh9$)Qbaa~(fw|D{b^ z1c^c#(x#}tv}sp|)7__knC}15rWHl&U`L-ZXX#<lS$7v3qQFacw!W<M2SI!ZG4N|- zm8<Ih|H4gu1=#v*!~fu>G&e4`yp=ZYf9s~kvIpN_1pl{gN^>@v6V34z39uEk@BBj| zI&*YWuQ`v~{NnQpE*#x7zWMOo+Z^50^=t+IH+@GTArW9pkVW?z-4AyKduVsMwQiQ- zKZqO89a6Ryf)J06YGX&93cKfd+^Znu8#rDv5EbUYoxT$zox6rqfu<<estON-PJ)@o zVUBLfB71%A+%a9i{nbqukNx34u+pLPQV1X5A?!sIVwA&$L&(>DKtn-1?lhr*!DDM4 zCon<>p6Kp>BP0^Gc*0{*kOQ0oz5@EP0s-ewDp&kZ^>aIjW*E#)Iv<?c6?|<wINLBJ z?|ev6S4io0NQGf&&H2#!uF&S~(ANBrpz|jUd<6iapzWfd>3QL>#e-3t`EHl*bJ$_o z?Z3LI(zc*uMWD@KAaU`()z7Z8f40wpjVN3fD9COK?@tQOC|u}5xM+8{<j-(fqX@+d z5vtu0n*UKhyCYVF!<>j=e|1w?-_L^Ho+o{{vc%)^PG0~Aa&*&$^Fr>v=l56qm--oX z;ljo43zvRgpczFcU5HNYj=uIYI@{=C-i3=r-4{!L{!jI@ASTFD=&)=g2REHOFXCu) zqL=3B`8Dvck!T{A?H9f%97Yp9NfaiF2rqYE{`T|on$eZ53s-i!ul)IW1#C>^issZv zQU5>GPgSqWLEyNvV383|{6k@Jdt_8+r_M74F>=(UE50H}e+nO)7bY7g2Sz7{^dz7D zmHdCNe%_o<GAm5t=%zrAo5!a}hpxn_0`DqtlCQ@l+G6?@*=uwEKh)17*)v{OuM<6c zy%ML`o<8@CZ{dd%d*?jw&x=kP=ltKRpBH-zF6|W1ObU}k3oUvJ$MNDSMFfqV937ME z!_n7GE~ft<)X$xgM<%6n7fU(p#Q#(M%oHuU=S#@#b#*8#+A)y?^~K#Zxryv6=iM#G znN|qJREYLfNbXkr->9D(N6Pb#`0N!Gz4?3-Y+CLSQybD(dwRDv-1Jsd%&m)kx7hz@ z_47upzgYQBZ;el%bGvEd?cK&f)27jwru%(OoEM-+rp<FP%`f_z-|RLonznq5Y5CIE z@@=<e&GhzG%<Y}N+kbX%|I^plAJd53i{sj3;LKWuVp~P~TP62eWzE_YW7|~w+cfvu zbj;cfV%tsn+b#CmiDn%(u^kTm9WLIjJZ7C9v7JZyJAL*#ea*T8W4l87yH4+Qg`0Ip z#dcrp@4mFxO*89BitS15@42?ulWo?U7u#FZ-&?xZTVd8$6Wdqc-`Bj?*ZRNMyYHZ; z`fhRbX^;>Cgbva|M-YsFN|hw^9ucIfp-B}`5h<1=1PDm43aFt<Q4E4~G!&(ZG?gZT zf)pD9Dk$dpZG7J6ocDLnxp(H=x&Pcdcg>zmvL}D+oju89ukTu)rQiB6rnR}Xwf$FX zhko0Wn6|#wwr9U2+D7!-U&ORewzj|i)jqHPXffu|O6#Lf1ug$y(M|0Vt{qECa*vB8 zQKEdVo(UlPoFRLkx$JW$G$7bNDA+&vOhD+_;B(=@7a~I=V?txDgj|gcr6q<XrH98S zU8TjxCD7xqCDYS0(z3EMvvUC7^ahZH&B?o+o?A-Kx*MHR7nax<lF)vJ`XuPmP{75P z0pZhUVrDK}n~uqwCg1v7H|?p8>TB?8Y4v{a$gAuzsjSEA!Qg4ui-0Fn=lkX^K3j|# zUcNNEvbzn;#kN1aUEgqzS$iLFO{=S`D=RC@%kLDIl-@2b$uBNVDZdwA(;U~(No(ni zfBY<|=Vj{iH~-R2XFlh>{sL?_W<C~AzHb_z>KPe*J~}%7Vtis^VruHYu})vVe*HIa z3W%nE$KTTF;=jfFe`0BAX=P<)b#?W_e~Hh3;>$m={$FC_Pi$^(e)|S&yYc=1GPbt1 zw*NDL=l{NK|NQy$*Pqz=C;oo<ACG_U{{4Rv|5YvpIMe?_{MYvYdk}2UCoV|~CZi)3 zA*kxn%Pi_jK+9VdTGSRlxhAF+IMZ8O(vyZUPLi~IP}-NJa;(au??Kr>9@e|R(6X-l zS%J>^)tSD!JI`<9Vv$l-^%Wx}7Fnt%`s*vl?hs3?ZdyI8dQt6C7x=pWVfCx~q^{9H z^M<>Vb^c>jCk7hsO*e+U>%VE;So69ya%1)NK;!*4kI7JOX`3eId{><B1KXaa+IKza z^47O(njb6<T-OSk9c->!dd@JuCT-hNzcN;Ftor1$mWLl+RZia0{&l_J({$7M53|o& z8^63^#d6EowKaWx*PEqwYN)MwV`=#R*G(%*lYS~=J5|K}wEthIn`){4Kc<@^RZElQ z`q{JpH+0i<>VL1BRxI-%l?yg&`o83Q$o&s=)4bb;Yx$dxxRe>`SM=2CCaBk@R$GQN zO``hsH#8c0y?)3X+yX&4|A)G1{u&LjgX3Y7^;{>Y7lLD68+-XFczy(G&#uu>#Q#n= zEfx?}iM3#bUg)ei)w=cr^Lr#!BqFFo;NNvqi>I1bm>d-)Pj)i-yM7%svG{r}p63jh z+sUIN`9E~iuW96+d10WWThuJWT+;`^bMvg}afVj{<zKp~+j{2pj|>#C19=c)oD^}c zcY5>3HTPbEaLF=G>5p!@p2JKo<I~3?oqFGjJSNE>D&Kml+Mj%tiHlS5+0{)quJ_s~ zDVkD}2%qInw4!|Xdn)yuAY}*@694F?A<-KJvJ0@idd=62*Bvre(xpC~u1z}XBUreW ze8*tP^10VJFQIDo^(Q;4%Fp7`IYN@P%T!Hjxwx*dI8PzEM1wIn0B?f_&?|U@hgtj| zN$@jG%ZSy!k<{qT5}DUDmEfpr_GYnmpRIb0{0?eS1ca!f6?n1JR%6)lISAJ{h)=G6 zjJ}S8a&?2urg7uNpFvQ}AKi4^IVrm|P=D`Xha~hKKsODS^v6p@Qu3oOl<OR1a7J6b zq(fc+O>V|VUs*XG!aS@DQ}p8Z_hdE469tI$>XSL!<AnDPRlglqVqKD6kf;PfzU&p} zAh%fP=lZ*biyh#E{+ACwlkQ)aBJpD~1}t$M5ZO(T!Zi|vlm5LX>e<~u&q^+$_L#`k zhin<W`3NVy;<rrR9hTSQsbTOG=z(vU3P90Jz6}X~XnO*3xMmI_3^apAt9U9T;RtPV zKU%7TKLvTm*maCHFdI#Sp=X%x_mLOLXpRv33q)MM$g7G8rz&_MJ`VB}#3w<*3102s z+Drb9j9%-qxCY{|>Xk!6lTCy$wMmu?G9N>XgGY?yY%$R#9>omeMxFzX62#X@<d9i+ zhY>NJ0(V*ap<X0DeleoJF;=XW_J|95qNE;0rYeY~gJZ;G1sYhfT$rLHi>3*_=;hcT ze#tjVqDNb=_?86!)}8Plf62@XBM}Cy$My>m+kMY`iJ6RcRgMwj8tDbGA;xGPMG~2# zy7z<dm0Dx9xne*!jaQW~+SN@3>aT|hM+5`9DfN$Tx`E~@G<(aptD6?PL;ZFrU_duL zX^M;65g`if>ZVnIZaN{>qqnP@QvT?s*??}k|2N!^2<WE%cW+$$)MedtsGoeH<RVv) zJJF|^;_-bouVZEmlG^;B?Y)X{Lo`dphDtt8he2x?XE?`M(p7C_!+Nnq{g7W%C<Yj- zV&iNq-|{;Dg4sX1=>d)(psc$%OB3f8BPyMh@awBi$MV2w(j?(E7TJiN2TpGauU9@v zI2G#L|N35F&izZ%-dbS;ecv^~>>ICxAuSgNeaj;a?yL<#zf<O+j#Tvqo(*x6Sn|w- zr-FkuhXo4IO-Vm?byF~)n^qeBt(&6L`TjCvD3s!GjyTUb-C004#o{c8H^Il&wq-~| zAj9+%i~e62Pbh}IaW2AbPa`l<SyJ&Enwa*%)A##s^Sr5#%|g6c(*~dYc@CmVsd28@ zeg?mOp0+Ww^phvLDDk8}=Nxz)h3VAbb%A;s7_P#zVOiq1Bt=sD-1j-X?#I&K<FgF; zqSjhJ9&C!3@G@ZT`75N>@Dc9yXnP}SOTF)toyVib`KG$1_nb7(&)^!Ih#d0}xY>3C zJSDlLcXj8vBKu89e`5?+BLWOQ{LxD~hBbXl1~dNabpqH6Gbh1>BRL~E?%jFx;jU=R zfb7W5!Y?E0!=4jO7tx`OF^M_BEyr<bWhXOzamvoFdw*P=%7(4X!8I8WB8fYX6Eehr ziOxaln6MW;pjSPSlZSDJjh9V(kVF<Z0&q>qyRK;ldDk_Ko;wfR*-O6+*#E~hJx1oX z;NXrjg%pymRxMqCjz?cz`-e8gP>wI-z>zVXxiQ`GzI@|O9wNs%w2zY_j&o!m_kMre zxye==#0Ai%nG6`r5t=oJDoA%r^t*hm2b9uyUIhV|rr}O=s7R7Ck%(rGn?f)R+>scZ ze#MoMCti!@xGW}VD2z+c%(Ixq6-gvjMO>|ZMe|C4UnO%_VWWetCvj%SbsTa(F>w}K z=5lg(rVKg5H{SmnS^V4as)=g^?TANW$sFBDXATD+=e*dK=Z+{Nq7I&nJbYC6!cp;u z&|c-_mvjOvGUbs)vbZ@}A|ZK7EVU;)<!w{^j1HOeDEXvI>PJ8~6|-1sikq#7`LLDx z9nej;OusHC_4t#ww{~??e0`duSsGI%9RcX3D|pyS#GB<bZt)C2H{}^mf7*NYta-+s z<_w{L43CMlZ@n3Ex|x41XKZXGiCbo>HfMhH&s^C`m+fO`YU*ZHEoX8RrNS+<^qRBS zepxU|*51A>f^PQ6`z$CpyU!xqsyVyLHyc99wh_;9sC2dq;3MkhxZKE*cFJ+C%sIK8 z^QJoodn1eFntM9H#w#ElAC((CnOmKmt8ybdL^m&-%OZ>`)5kS0x;ZZ@JWp(I-X-zt z)IQTIT&b~9*Xfleaa<XRlYnk&d`&znP4`B&I3eRkUe1jh`HA?v=G=nq8;ot-O|I)j zuKDG<xRR*+s^)xDdj8$*e8x&XQ@0>zZ$W)jK}tYD6PJSw2~t&G@U^tSN&#X>x~QlC zJ2mWSqyV`Z7N!7$*v-LCz-|sTJL}=#T!=zX_I6Oit0WHbJkxP-FpHCFjx)f)&!Pz$ zVmEEDS5d<pzE~*Ekz)*dUJ(!)F*iNBVaW_clNeqKji9i={4|&b!<_TyAKeu9M>l2M zoQ^s>yOJJgnQyQO4#&YCyW+5GoQ5F6f9R$*Yq!2~nP@V(1P=d8H$4I9ri|M{f9s~J zI4&eXat)@2BN+AL{?<*Sm5XK+3XK5WH0fWusm<K3ZfXiZsjik(faWAw>h+g!L^E)z zr6z&pC>k^z1m~%O>W4vXrfltycu6wUa2RSphQ2+FQ)EI7vA2SU!EAjNrv?dPFbqAX zw`-in>D}UAzC%{6c)S;)hpu?H;>DeR2l&LzSO{uZv3@@+fr#)>g%B{X6aC&==~c!U zoYoqL)^L^58o1Jm0T`#1sxX~$oC5>S`guX60<M`3aT<o3q~lFl2wFNAi$-8cFgqq> zcoJrXMx3+2$)XWD(KtIa0x(W(=U`YYATcteK+q9!#M?VyQ}j(MTnTjZ9;E*she8d& zqJGxJNn!3C{|N~^RBkwhGhN*^PURh$$Z=@+F!a@po9C-+F91cVe~eQdEKUat7qy1V zkZOZiwGu5*73?hu)e709Qr<wE#5B7W;sZT5T&pw(7AYtVV?c_m5XtGVog1(%uG?#_ zoCLL9;}ow}4;ZJ$<a%Emrw^vy7)P~fEk?q)#=;(6ho1!q&u3u|$B3sy#=-F{1Uw&> z9EQ+$tI|)pok+g4BaT37H&D|5(>T2V7^jTJfNBWTr163~0u~OV0>&w^29*x+c5h53 z!XPar-=^*%9ZNOHFj+Fp5-?6#FejJ#0}PnW8qA&%y*CVyPGOdeCUNwxamuvDNugV; ziLlEp;4(FcDYhkP0EaBVy%LA>AZz&xYy|aBo{8S2O`rUsO`ilnC4SaQta2V?he4Oc zp;E0yVJwi+FyvJqr!=zt5T;!^2y)<$Zh9aHg8D}{O<?Tmrl$*Fr(^0XRqMquFkAiV zHA_yw@+7R)b9!+0aXs7%V)?MH!D$c;G>5x8?zlcrHW6w;yd8KPzg2nrbir+Z_p<Hn zvY(Y;@99?fcvAukb_&o<$&Hx>5dUkCtpJ262<jS$z&(K+2?nyEAPokB&TKhc2=*F4 z#Dbt$CX9yeOpR$cQdO>z4l^S|Y%oyW!eYr?{uLt6gp_^ov?0P2agcps40&8juuThp zKlpeuM2QHq4!hE%2DJusQwB`cqd9OYW>+`uc5mwmZ$r`A0sOTI&`sUy$AW4@8I_WN zZpvs6|D&6d^>Gtwk6_)sJ9_OXKsObJhtEMIe>G!B{fUe^YI?WjFkso%OXY$IK@h?< zrVO^;wiWC_VyO^0PtI`wAXBSqy#fnoLhOL~JY+B`Pv|GYwIL&w(Lxcsy6NRWfXD>v z0lFy*K|v2CqKgKs5U4Q7H@EwXdJPHKs{sFs#dJ{_r@f~k>%rm5Rh?KC0xyXe%)h_W zhfpRpBn<xpoX&L>d~9_zcxu6fNilbUQ=70>?|n}%TkQg;K>%=y9fcvGR&xRPDz<6U z0F1vMbZO9=DKS=SjeA@G*zu)_HoXD^Hz6u%`=g3P0ONF~eAhT-)w(V8N(a@7>*Eec z6s1JtZrb3?ZQ+)$!DB)FOTPWVdT^;f#wisrP8oIVWJEmZ_ECKtK_AMt#^Hikfcgm- zrzgp*W3BhO>IYqe9!>`Ok1-123t<1&2I+Kg0tNxyEW3K9VYG4=I1K}U)ATYk7Dyfa zBw_&M{h{!tdRKolM1A;qA}RjV6ij;cIn;6D=ne#A+iccY0_7foEkLY6j^@O;ph2)T z$Pz_v^;iO1GhtZFed&~Pj_$h3f);yXT+^>+6dEGUo`am3c}jI2Lx$h7sv3JbFy_{q zb~Oqw#ejw~i_V2Xm6%2Admw2x@TG6#DD(?X?HADO*>L6`<}}HB54tW`70xlvhz~=U zrX!MuVctQAeXKIr_)CI2t{ZjR<kx@<>D3v-QL)r&WcMo(1D>H~ZpuxZIjPZ{+>nr7 zR`L3I94Y>EL9re;B=Z?)q3v!0jv+PIr85M1d+|9m8~kfu*V9jJba&kSn^XAY1~VeW zs%8P4e;c8|^mUuIz~anV7lI@q_Kb3t;jVFNy#_PICc=Yoz9`7)koQ&fiyY%%v01=4 zy*9zq7EY=?PfVFnw~lYyHBQ-oBd6PjI8^KSXItD_%8MWBFVysLWIMRJ;j$dF=ycWV zgTV0U<Fg>c=Sz3Mav(?4&`Vz?gy4QfY^}cAVBVKF-??v|LwihOXz;|+JPh`hdS=%+ zU4q{X|J84Kw^Mxxv|sui;M9g+o8s<%M@apEyK-NDYE&HCU`bklW|zIr2k*fQ#IL=0 z&{~4GV>%ivqKJzq=2N*fnB_B&3ic_i9;`}+*<kM11mP^v<?zz?_cX>1oWPw;#k~rE zR$f~2UwJJYoe^)j%bcp8SUJZ8m(M^IvCH8Yh{&(m)FZg^eRrhOp*^N=3|_AB0n90J z7GO@NY}s%nQf+KB_|@J&%xRd1EaUd=Ay5f>;3Nwy3Sx03uU38L2x%{t0E|=2Ger0N zvwa_oMc?u+fO`}N!U|>zq&~hiz;WM1m;k^j!}QSV!oW$Ko&-XQ4BkmZNU1O2gBuco zA21h$JQ))H0j9_Vb6ocDw>|;5yUtf}x!j-MK6)xed<qqUoEo~Yn7FtXhqD<5NI=-A z4deR}-1v#tr7^FswlQ_qz_0q4=hJ_H-dIJ|;B<K4!vi4wu-bF1T2<`V_>*5z*yUn- z_~*p-b8DQTpr*3hrFZOibyHDpc-BWq`965L4P1AwO{xE$h7nH7XjK{e@GHBy-XQdq zcv!u~z&5OYuyt79!|$O?%_dqKLMJ04*dHAJ+RQQhhSF}J6DMe4S56pR*>z3#e5y<t zy8gY)PpwLV<H?1B@vW!^PzU`el9Pi+dLO+z4linfl-`~54xpyDy6GJX@3=WllK|AT z7$Jz}H2)WBYMBe5rf(5FJoa+Z0BX8qcT)_dY9dyTk<bfY5Gt!PUUn$Ay?G>VkJIY^ zrkk3z!;r%NhMJyv{piepqNd!!71l1UYhi-s|Bjl5EYG<Z_r!OUC?Z29zMjVN@o|J= z*kxmH!`?ngkvTP7)Rd4|eA9`^-*)<3hX`dCH7y|l<)x@Us43TeR_m6ugBb#<v5T6% z15i_005#p#?D9J%H`ZqFjtFq$j|EUu#vVF<7Q^zT7N#4~&22_OM(cDhpFU=sj8@d_ zP8<?j#xXL{4jqR~I7fJj<iz;989djqundrAF9Rb6Yrcn8CaBP3l~7<JYxnP0QG#4P zFv8r2B*!I+wb(UHRphvouIqGa#_FYea!FgNAS`4v=<~5F!Bt4pJHaGqYVpgac{R2B z-I~_wjSCN~_doVgy<6L_r*`k*9AQkldHDhN{`M_M)&SoGne7RM#4x;5bbfq%P{%u7 z_ob3;Hi6_Y;_&R|IwI;@kC9rgC^~AXTvqR3z5kno&4WRLwR*$orJ!dmpZkOEKf*py zr4_%A^ybxjO9wl-7QDssoAH8=63vJcR_(^YhO}YV1jPmy?=;gxllu=U){SZ5FIbNs zvW`18S*}q*;dwT@jOPgQz0gTeroFgebT@zN8yesCyWzyeH*tqgM%DV{9@8?4JN~TM z?84Z1)L$GrBnn)qi4@CG(`aMAkrMPK;ElmIQlfHslh?KVPhH;9Zaxup3$TpS@y;+; zYWB&pH`}gC`Qqzx>Ja|Bb2XpMGRC(c^r^1j&5JM3Eyjtn*-dW(>!P(CZl#&&1(fA! zOfLCt@Z?X?@Ac1d7EcU!^kn#Mb-~IXbLt1zLL*wdi6y+-RVX^dHX+luiP~GcRNflW zs;1uRTkqX~gzL>=tP-TE+FHZ9_{?`cw^1U*-WOGO)+H1R-f25Gu)i_tY=wkqbYPWq zN~}uB?P7qk+)4M6Rof)Be~W9;^h$#s8;>34%iiirQ(1VA<J)6HFXl7s^~S}kZq2<z zzAf`NbdImkxts{CB)^R?Vl%+!KQ%5L@qT9b-Xrktk+8cJBL!Aod~^>i)j+_GY!o*W z_rZ#0NZ)Ufq=IPkN)mHHoV1K?gc*(FU{^6|T<lE{hX|9**&TC=e{-(wtvZv#qm|%S zfr(R7puhw+-F}$p5Cr-^#Q1TanyQh5G;~nHY&<E_LkVaU&XezBU=n9|MHfogC&6GJ zLWn(VEU=8%HrtBz6a%302eb=^@ffH-BLU56$|<N#=VW6zVueN!C`RWRVWCwZcO=<Q z@+H?;ePhpwIJm`GiDTI;xFXV&I(fdI%dMwHO~@oI=A%5+OH7SZWgdB?xl{Tl(_&t? z^r9t}&V^H;9@#2FZ0h$4-@IdPAVNbrfl7p<d&$3wMzZgi_!f@Sl@3J@siq|jO7;p1 z$!abp@kSxxbB)%sp9HR)^JWP*v6m@F(D(U>bBT!T@m4!&1(*f;me8;_+ICMVM|9)~ z^j{z|6-gT3mbI_W6J5KzcLg-=&GeT9lSid@lRXo4LpK_z+A>fmq}{1=v?M#QTO z`XJ$_(=BX{kEQu&_bNB9*oI|}74gL_;|Im7gw}b^>1?q|*0kX^oQm;H1_%V36qoN? z3B7F5DT8rE%P&)$Iag3Peutj<<qk8B1IwNb6Q+ijGNMr_{=_)Fp+vLl;xmQF=~M@y zGHp{X?ou#MI_?%$1kdT51ID(m4_#s}Bd`2jOt{{=i6N3ZQ4Yfpm9-+qgaP<>4I+-4 zEgQ>yu=j963)}foer*L$jO!8;qPTZ)CC;{}<LeGC&V?&9&8yylzc~{9;admN44vxA z(+N@WpzvL0P@8LdTjUM)M~{6teNtk|`DH`yxvLk%A9vr$>1%%3(D+21MY=XL^ZjMx z<9ib!X{%OqBCncy9_EGtv!50Yy=s2`B>S9iHDUSqtCm-bnc*_0kA94J)%xaMQiPPb z$6D^Iw)evKNzYqPe!p_Keeg`^rNwJAKOA1EsyE$oTx+$hV1lBr5D5lL`XtDQyN_mW zCLw|&IoNup9Wf-VqXRQRMQ51LX&6U2*fyUfC06NhfFNW;rg0ut?3UL!aI9(#u73c; zg;)$r_O&^{=F1XQRag3&BADq_M91-&sL&C2iE({H6TRk21ulomn0F|l&EFqdrIyJp zmU|r425!r^v*+Ln7bge4RDC^Ofyz0s-#2Nws6#+33})!FH4qxFRoi(tM^nFS2!CUj zH04k<eDUloXE;Oo;L_ch8++r26oiY&Jt|?Y!)fvLsyQ?Jau0m&Lxc#V6;S<Sw<5V5 z))F~?5*IA;rpAxUX&+y0qsU$VplopZVRIGEw6Jq)yz%M7ex)<_Z=d-*DwAr3n1gc| zvF;}wn*p*Vn2&<!=?PAJ!vkdx&pjSn&zqk{G~CP#tg7FvW$dGKg#&52FZ?rI;y>^^ zF)bi=(DdssyvW9R!%(2V_La?{={*VVfNrYa^5gyW+3%l1siKAU>xUvch1tTi{WJ4? zeEV5ypFXU3?RhKO6M0=>Hb~i7azgyh%%BzW+><kHeJVQ-Q`8ly(u41<30s}o+u^Ji zUR*FcqEKzf$@ASWau*_kwr=UMI1i~zV?vXSb9IQYLaq6-wy)2MtFS!ok$qf=sv?47 zMf4#1MSBWkCGo+EhO%y1p!2}g^A94MI+qzL@`n+qrns_ybkj-b1+zYqV1C1{Zc3kg zmc#+>L?U32i?wRMxzr{dCT~1AG(0Su8Ym+%-LVj%hrMF`M>l1`lu>K~#&oW=8|~zl zxT~AK*_?O`=%(i_*R8)w%<VJM8GLTLVK)!rjUEPS^;uDh6L>!QP(1HPGLHs8enzhm zhPqyFn}n|7)9+s@&U1w6%^i`T9eX&x#85CJ6K6R(X~sg3RXH>jT|7ia4Pw~F#8K1( z@2i5BFl;LY%9bEi)eZUHQ_6u`UfhDBx(vmPCBbC@)RclFgXP1h!cEOeL@JI5@dFw> z1d+-Jnt%>PDU8ZFPX@pVUNX3l8-^YMm7j+wUYFu`?BFw?3xrdZA}i%;StBtN)LFv` zeeKB&B%lYXHyakwC2xN)tlc&&pCI>wcqCQW2+1(v;Vp8nOYA-yq!6a1*yWKl3Di&o zJ%mH-yKA6WODQ8D1=m2T`;a<BFrLL@Hq39(rZ+psGe_iwtQZ?<Qx?{YHJPcJVi15f zHG-vX3nIU+@mlC0zLIIDw|K91Ch;z(#f7EqGzqs_XSd3W-s2W3T28|;bH2%=DOf|w zgfO4KDMbesVQETHfyL@j-ArhlmK1iFshJ8ySconG>zMFHC`6Vk0J`ZgT`m!<NTMo} z1UM}y@)H>f{^=-&p-3+|WGBPVgDTgXlTQNkizO=iqxH22MIfn>D8d`9=1bmXlscru zR)GYaBH^#gNv0J0>&CE4W7YQ|4_8p0lXLnDy5{{U=J>9r4RZ-l?+x8QuBi@Ekd<|~ z39M2CJ*-39!ooPi(iFndaLGn<y&&19RPpQJSqzkLmv@fXcO9B4YXQzti2Z~{3WZTr zu5(&yBP>d3dvK7dI_0XSmcsLCCVhM()<PzIx;)Ei;V2|Pn=0XUX;X;!Q=wiyp(Z_J z6^Izt(72b$=>`7L^tWyb3q}o~hE2>!XfYQE!KMFHo3Q49lBfkl9tT!Rr_}oJ@!}wg z<V0bT06z(69s>)IC~?;j0i}b=%;a2<ji3ruaXC33u?w6kGWz9c$aQ>@c(ggYJh8KE z3nkies2F1m*^2~5{eC^4Bj8UFQ$dRPQ$$!r&;5Ig7_k!{$&=lJ0B}mBL-oSI5vmBZ z%a9434**UT{2^w`#+$vMIV^aN+{TyQ_hEwk9t~MuqrRO3hW7B@6G-|D>ZhXlh+;<8 zA5~~#;KFIXw6&6s0pTBjZc67<W~AX5X(mh*!iOx_)FCmR!q$PE1cTiv;2I$sY9&o1 zeRye5zlsJnbFu!0p-GMFndwmMX!?94@J|v=)E^_M`BcbLK*5E|>z|P<X0CM92I<Ac ze;pw<!PP|uEBYUp5=_Y_L1g%Ce|~tX`0eR!mmcY$qAn};vocrPqBZh51uD%%@rC86 zsSS~nQEL0>{Uq`#H*$_vsiB@Z>0y`WZuj^`>`^(S$y~brCXstS#bh7d%)~NwuFEKx zR{;Cm*r!`_xuY!Xxn*HI?>@vvx-N~y=PZ<tBIZ$XLT192cdw-hiV-=<R-D-O{ej^2 zOKEJD%(2D(05^)r^03L4mPr6Lc6s>Wrb+uH@HZ8+Sh3E^Fac2)DoUT~as$EZLM?F1 zq_2?`U3PWT+=}+t;S8zCjB75L5lAp!7^VNNjjubQJhG&?sco-QzN&B%0Gu9HLFzVv zUov8$M}@IDsD1`?0DFvv8w*oIUQ|yKV5=mdN695?61qBwVl2&Ag=#{i@q5CINq?AA z_1IVy-dUH__mQc~{@p&vR))nmLoyAJ8_RU4-*l)uI<T>8FI<0X{UGg*S^G&MLoTNq zW0QGt*7dLqZgo0pf>^V!jn|YG%W`u4Hcaj1lUJdX+D;jDv@j-K?EPTvK}94+Qqhsr zV7Z=ObP6z3-C7f&U_yTiqtr@G=l8i4T9n@$?h84AbSZ|q3OK8#m{Y8E?}pWJ)4|2$ zSpJDuRF+`m1zpYGqo;kzF*)={zU0Tkl;X&nq4&Vu&p_c$X<VOBJZK8)yvr9D@6Qg< z2bI*M3%nbp6S4jd?DA!ot(^%o9@ip&h{<wtL7nhwp>>sy>sET2-M8^pZ<@;@pIMV8 z;~VJqGdyK21GSu%Gn!t^@uK{-D^HW1u};5JHs8sVDd8eF{z$4CV4PlmIzR*~U=q<Q zvs4SnOJjPS;t8b_qp>9Sh-}nS@^q=JGi{k7wU*J76U*Z=B&|YuTn6Q*C$nxkFP6rt zekDtyMY^7me}6hviUx-K#R_a4*TYhJNk_)9f0$ErF1ojQkSF#18icnAl;g;Y<9WU8 z(mi`URU8xhb7A7PqvOum@rpH&XY-JQ!kZsqt}{*}CS*_A@MKq)-n=1w%LR`b)-z!+ zTwk;2PxvIt{Q*wh&jP?HSwJ{<2gAo_LB*KSPv*FZL;+u?K`H`VlY%IzbEB#tl*DX- z;RUIhsLi;eXL8I!E<5~uqLLErj!k`2aN`Z-W>=?NmlTLcH%wR<L5lj8@mT$C-cOWn zWbENJ5fd|{X*pE57d%XkoerlgX2$|2EIDW1_KU?c%Of&7Hm5@&d`ejWy}tI1ib9we z!4{~?sV63Awsgc-#{7$%Kg{X%GMh7#({YnjtfAD&BsLCauK+VTfTsCV+Pd^9xY-3o zm<%D?{iqS4&)T`|L3OJzCG4H3@4$ibsiY=)@&x^F?{rc(F`Mm@m>UUzr-|OC^g;`F zewS%OC7%*p(noHeTjC4PAgB%ustbpDf#vC?zd9f_x6+&ZOf3C54mm<!9t}eQTI&mv zGvJ--rt<_jq|dl4Zcoq5tE6h`@N%a6zPIq)^?_NupTd%WfrM)oCpatSD~WvHarCKA z^S-H$&RV8_sbqi;yp6R;pC+X<BGVDgC?vlqY9w9nTe=57zW^5+?2bIpFe?(3A$DVT z)lPCUL%JgoBc3Uj5u|WbKtDC<`$0r!zQA5ve`tZb^@dJPU9N6rmVTdL3qYPylJI-8 zjXh5eob7x(dn4{v&P88gXNqu3WsdvEh~I1u`((2)N%wSr&EbJu;ouPwtIxSDTzR0q zXNFI&R^jqG+(pMUbjAVQ^yMGjH205gdSw5+2%wvO{vhzV5712yX}mtts%6uvu?<ZJ zbknDj<K=A)Uo%&qe*W@Ea(t+rHE+1u5VB_Wr4#>2i6(^o`gt?{OQwY2NqybR)zj7f zJ>TP#Ms;tFdy-#7?W5L&@J&2W!zkoX_rBQ+*`-bA>g1MVNB68jLho!fgr#r=Cr#I+ z#URJDWhyLge+!V|jJ&;d<97KL)HstWXQ3d6U;9N2^UMSvae=5{AxB7LAyFlfH_-2G zYclo^wx1quk@|R-RHVBZM5D81$F=EuT4e8R#TpVJw}DKG`AMZ{jOI^OJ`1qnGFj#J zIe}Nu4UToqzeMM6&4uwK=}x(1F&~y~K~Y)=qvdkZQ*s<Xp!$^%3j)}1j;!;SmfqnF z{O!EOp{&M~GiM$s8tR1VG=>-vwe)+|Irh_4dv6{2Ys1`Gi?9@a@xbPV;#j0nV5C4& zRF!f?WGLs_f%Rof?D7Wu0oCepxRL!gr!SlC_BE(4O+3mU%YoZd=^>+dS+k2%8FHNr zi*Jg{v6&TA+aF{#;+l&e$okDmH~3y(We<;65w7?%WqSU1BCAZZRIBz#-|bfwN~4O* z?W0*yj{v%96ZH=Df-C#}cOyVI4J`+BQ%C%nM~CkIKECg%7pP}S{+1fuh$J=Kuf*qH zt;V2O=0ybdY#J@cJ}-t)XMZI72^ssH^R~Q@0^hdg4~g8~N<SQBDZYJi?{=2owxQ)V zK%3r=+P;1#s`SQoe$RGc^LF7<RQBZdE%?t2{HL5dVl}cX#+U7)(9PmB3H8bSzx(gA zf8LL1&AgL_tWH4QHIM!|dLdhFy&4nU62(NsB-O$VXx9&MXPv)~jj8be_23k<?#<6x zhv;tI19n>U*1VWlmjjY9=kE>2R3LWli0w2RX_P648DZCAAFum|uEEpRB+aSar*<rU z#*S+qnAAmxR@`K3K9PDoFZBj2JufT$4lljfcl$jaA-c7H<!kBcq~^!7NXhA60~56m z{;I`DXgW+Ir(PWpt^U2zbh*oDr>61C{YIqJsjni>zdpT+5x;X*qUY@5(pgf{A-I}i z?63^`s|?63LRk(2O_JmA!oaDR43=Er0}N^u!@G__%hk<YeRzlYU}r?ryiTBv&wE?u z%G>=lMR2;I6&8yrT0+DcS&Csd83|??38<Q_ujvH)1S1I79+TcM;|vj$IWUoQ(VjD& z({#^vS5eU|fFNBS>7vfxmP7e3A2@oh6lExD7PuwvTZ)%QRV<I_9(()zwgubdUO%bo zMTUX>M-O)A99^2nwa4v=RYd7zopWW?nGfI9XPV9}jou6Tp)uPQ{bT*phaX>Ntr^6Q z2jA3O>qBQo7weX`4*2wJkDmP{0$ewDCXv#j{li|k7WErv*@RXyF#?=YS2}?YK3puG zo;pCVN5xy!pxYkY;afWroo-<GjMYu#zq}*F|5a<57_ZFGEOqd$%*jUm(2*+m{_#hZ zf%&DTbqXbud8sSLuR7OoZfkvM?0)E9N7y?*e+&rQOkll|4v2_TzS|t1^u2NB<)mMC z%0hxOGGzg6avbZ(!GmfODTpnJ5`HCY9yOeB>@rRklB9CW{8+qE9GMp85XO;Blz+%b z;ASfwH8l;8|2lHw_*%~5Ehqd9km<FfTO+xgnr-F^u7u-?idUW7q7-vo1Dh4|er!8W zcqXd9bfKh6`HP><Kl}cM$JKBZ!ZAVdA8v7?r<;lj<U6=Z-48C~3H+BMS;NAPCQpi; zBnRgT&ZF>$N5j>RUzAEy_>GXx{*=M7B;bH9#mksKjHB__@vMmCIQUK}R^My+xto|x zdX)!C(k0zUyLp3=k7}5l7r0DjO(jTsd?oUWJcv*Zj?xtR$dnO2JLW32nL(qW#Eala z1)d~-%l#=nRB1asH+f^zM7MNlE2mZY+s95L1s*Ean(w!C+6=ELHBtw2u)xP^&DkOO zxwQLLMzX<Qs_OK1u-*LD24_z_jNgm7(Y(h(JRe!J?JA_s1aUZ8Zk~m3JC`~yJ=k+d zV!e0#Q)!QM_01d;TZQCtu&H(_4l1li2@(*}DjkLhUDEEy5j6^j{fWeSOqYx^>ZgWr zo||wdmojeN{MC^I-N&BEpZ#=jLYZ!OeiBv2G#A=8JZJ77f*<+x^2AlChU41PgRIGz z>em;i$scZhpAu4gr1LICpI!9?oLX7yBe~InDLDK4=rI|`g$d%Q^DxfyK}3tByUe9< z_IA@1laXBf2hB~2z?DtUIQ}6X!_i*n3Omzwn^)n(78=A3IBmr18TqBt8GZI8+gAsC zs2>yz`Pw&ooa_a-dwvylGi=QKUVQ8F1Da0db7U@mSP9}b{FOFfWc2&n^i}7D#?yr# zY684M%IZEVv%msCrqlof`IKptd^E%xvHqr~N{9t>U{XceFq~SwRUCGy=YDTozrUr0 z=gDN!lni8%$F>A{-&%Rgd~|y62<WDx%=klXo=z@Jk2TxZuId17+Pk{xkbMHrM^9K{ zMYp0Rpqp-vl2{7OBJ0o3p;7aK|I$qr4iv-hAv(pP|JF_I5oV%E{P6*o{^+JZ@6{&p zNy?v4*%UQ=l$7=(fFiR;L>Px$SEd!p%L(3is<+N&rX0z>CbKPIdED0Fh#a|7x`t?B z=;@H<*X*NoxU%<XrY1dkA6lRmk!STjF30`c;wfMzt6-^>d)-|{sE?)f(cA}lj~wUs za%Ed-HgG`qFw!|QEzz8pK<-^Z{P0vpMt*mY!c&uSO>r-S1$9|B?;?tDx^kRkZ7=L7 zI`x?U5BRH<;E18STs$?~={|v^8>>FbmNsh%(!Ng+F>6Xt4@Lt21S*eXaS?yDayV`j zdp$$E+`|#{IDdxbcXdtNUb7UeiZ$oZoJ)05&>JZ*ITPr_ecLIMnIO+(ahRd=rE}*J z_RulPsJTfYz%D({J5VfknQk%fJfgM`&c4$rH}j@S4w9Z~g8b~xT@{%qQmI*AbzF*J z{A{6D;ZYe>Io+SXC4$Q9;mh~Q#L;B!DM-NeNi|702tFQ{9pSrpNRvy{^lWifE`2~& z6Hj#&@04pi#8J~6&SmqtACyj~?Nc5Zva+BKRGNLO%5C2VsjI5KSGBI5F%F`cQ7hC8 za_+e%`jlFD-Mp(p;d?8`Wt$vZn7E^)(*^#NaBH;K@~4tc=SsSJ$T8;YeOa<u2Q{3E zk|q~5^RDFIn~{30lV|bSvYxLf(Ok^St=eSW?5;P<@`1qY?T>b?%2pYOBg7LO1m8?0 zLTL1&fE;Hs-M+`^b5?%!o8PLRo7ub{uZJ&=f^UeM)Z)dZPKdAP2WI-Pep`LAI9}jj z$QW<=Etg$n<v`l=u(v~Tuh7XIm<s;D-3KLB8ds0q^<r;{7N73`9h;n%U$s<lL{$b9 zK7e>*`kWNGYWmNR2WGjKGTmp3`;vcya-{Nn+yl$LScn`F3Gy7!$u^v*FFtpFpK|b% zlk5k%ZiB8~j}{BHNqBzEdYGZYJmM8(uS+fo_CENP>S?p{@m5v`t5XyWEsB9uhLz8) zZEy+Ro0UJk^ZxUU?z6+6CZF>f9(r8K;dfPYdVcHBN+$>JS&JvyQ`$W5k7l(T@k;$H zzqk&*u}(p%F+!QUV5vuknk3tTDpP}jimAO+t^RIYeM*Y><-*23?Fz_xMS8*dP)$VR zfYjYzm>{>M@2@&S8a{<JYHxPf@jY<AEj`rO{-eWw#-8KicdL7!FTj<O8oWqiN1r*d zfDzq|QJSqA_r6?CTNnq~9V8tg#syR|5bxd}?i92Oym~5R_UZ_Tr!@VO+;yvYk;hF} z#IKlYdbhok{wvZ^JJmcrt8D=z8b!9PS<m?*u?X_h9rXU}o2T#b{?KFH(*d)SjYRdc zoOjPxlT$Z}(%hCLL$9G~hVAGb=k^iyTaLXDxKM3yb6?PVN#Vi8cNb1vE{>e8{8TXv z;Xx%RT<%pL8PhN>ITg0*RLTBH^Wn5?Zshpv>I#t|G9ls?MIQ2rz0#c*A>!zhd`B^D zs3E}&l_my9fRcXL^P2B{(6QH|A21S&?dPE_hN=;F_P=%(|5<nGk!nZMgQIe7&Eh*g ze8+F`3a#=))s@^_Z+MQGUL5_ApB%cE$T)%d#bI|gb3^vMiC^6-agLjc*I>?AdxpWe z=ZnruKOVNKKo=~b(Jy}yM`vO)$0}iqA8dZj*dICaP{7V8d2DCW=l#~0QP!7)s~*1$ z2387G4bk1*CifcG1$K^E4$fLw%zl!>a4w$oNM~`Gn0z@(5%RzbfchU{$yT-5)*ab4 zBiXj|*>+zY`Dt|2TE}Cy7+A)@?daEW2a`FN8I21jya{`5AM9v;IomFhag+i=@jfS( z%^h`}vwApg{fTsPo`D=C@kcr)XV^O2I4P41L#%ZKticd-Qmz@a4;ipu&*sjIWP#-{ zVoK?d{wF0SE~&CfCo-H*Dt4cg6<K}(&=?3)7ns?alb8Av@gp$LIHy-0o=&As;0DiA zPr9Y|<Vrn~g_e58UUu^QHt)$(Yy&EexB&N_KP4k6$nDr6V`45O8HW=dwD6fXU#19z z&6~V9DOO$#O7Zl__PpR@uCi(p)Si2x?<H|F_Y6mVATvG)sNI8@PaXyD3rRQ@E*)^= zrrpll(4waaFGSc_0iY$DBUJaDrnEQasp+e)9f?>IxJN(drTGZ49?o<*Q4NaAO%PXA zv7T4XqU{K8(dhLTacVzrl`VHi&I@O>i$-6@t<(?3FMB5y_N@D-OnZuI*1U+~P|(Uh zL8wAR9!!oo=o2lzaIlkO_68ZD;6$Y3G%u%A(%<^`+O=e#02ja2yXEtaDd#cx4z~&$ za-2y24Ws9n7<u)s4Ek8sD;!Rh9{)W-wKa+VO-smt*=2THn>`_>njGz<IjFd#wwtnZ zOkVM%G2`SdVHn&25I8W;vbfaQF4<~bvc>U~p^}_sr^svF8;#=%bzx*TJA`2;w=q_H zB@vnWiJg<t;rso`#4m$MV1BmaaM{lVU*o$uCqj4?&rQ0RC?4Iy3($p;AHiW11t{y* z$D5087Z#mE%DZS~?%L1B(#t%G6Qp-s87sL&!k%Fvu=_3EBJq5?Wd&pHJsBA$h0k0W zGmJp1J<#FzCBkl{x^cHhK#T)!GKDuv+E0gFF}0b0A90}Qg`ubA%+q8nO$g29tBEtg z;olibpQg(D#ryd+l&~d_8jP9}$7$xh@9i)JGAa^*Y}lG%0iynWJnK{gULwY=pxXDz zy~X^j>n|?_PFt+qVe+Wdr=-MmE`4OWU45&3c?edsGUavw-e|gHKj+qNYI5PUGPItY z$qwh`4)#5rbSE)&>8gjc@WIUYQm+#qsU({v`#n`jd8x9HuH5E3`}jp+%J+)2(|yV8 zigez}%dowGZko9sm!Y&b>rlYeIhFU5BdH;`vW{2gR6WT&S(zKM7wWS&?@B;cbbuqX zLn0f%OF=eo<B)A&K5}J2ZsB$IKX_>ySR(w*iEL28qsrUS9)-Exg{dYyZ4{ohCy2HV z-krTAZXS%xZbqt!MEzdqIOs+Tn9l?*vBrY0ktLeIyh6*omsI((L6&54@u8}!_34sS zlTu9>Up*K)0V;UP+T}|NdkSv>d?`yJ{2F|)lBXLa(bTaO#sXMOc9n)&>qAxJHdSbH z6(``RCc|!PsNPWhVAF=LSS3r)xvSz=E!yzB*y?5t$?O^xgN9`fT=kur6&_sR!=cIu zET~x%bR)O&k;ZCM(uZbtb&{^yqvIbe)<6<Mf%l_SA33NR&!`pTg1QMGqmpS7-D<3p zAFptIto8zxcUHG)?6aH+l0XML0e&fIU%zJF)69=NZFrQ8THi^v-qfJx&nyXT5o3@e zS7|{1_q&9EKX~aH?)FgNz1hH;q2R9EYIr^V$)jDov{_Z`*3Y{yG_#+sez@@{x9kzP zJW#c3>ce<E`Oe!F-ei_VGN}Bd`t;9CR)hM?$(iY=Z1vX<0$U!HU~l@p{;WRmO#Kb} z%*g9|Q4iGSL_YUy-<wwodCC>iW?OkpRRavjrCYKKqx|ny{kx9t%>`COB?B)bIz%0p zE{_Yve&RsrPz0O$S8{6vS3pvmZi^x#i&g>ek7!&DXB8fjg|305x+$l^aQqAn!8uz1 zwfwMXzKfR*CJ15)s|`p&055g)a1X~}U=Ve)zKeL2K=6GhAKdsT;FppspVoXVuh8eM zd3Ul8J`9#3Y8bOv5}UYF|M;bBO)ymG%h$IFs9;Fa6VqM4)Mqgl;7bicJ^t{eJJAV0 z-g3YV@J>HXf7~(!_|jkO2xde6mv@+&6ZKzyy-eUl6XbNjf;t@-gE0QB`yeieypQv5 z9W1P*ANIzS<5buwAFS&fNQwo911UV0eF*)b>2v?ErOEcYZ0X?MUAA<%l4}jeCw74A z*k|GAdmm?-2-$xvJXwTT28q{E&Xe~GF0q(mV0i?UeFQ5Au%%n~5kNKPPAKOfS(>jS zYLF#5NR|QE(&gHwbh0!z<@xXK&rt<|Io3!=ybPLh0w7O!*-{*aMdsJ(Ko*7ws^Br% z#gi}y^e>tqi~tzjz*+PSb$<ikQbq^{6~_s?FQ`H}d~f|*v8H9y13~SMtP3o*a`hT_ zDUHWGEPa7_;$zsQtu>cT;L?#lbbjX7N@W3ZX*ly&(ym;3c&q~+zOjd1_v<qVIavA2 z;lS^6VfuL{I%ykG6J*KcUAgq|MXY26SrU*-74Vx%_zjWJuRxhAcZaQ%HX)C~g~A)> zfdRRczz2p7;!Gq$kK;PE!?hLCVdlmJt?*54n6F1T8Ng^$6~OY6ozUs8(8Hl}40U6Z zP>hSI6`UYvfR$ehg&Tx%Z)gK@De-YV65DOJ5iXnD&94B+rG$NVa8?@t0@?BH$lCrp z=Ukbo+?bAQ3V>P)5)=Z|QnCQHL(l;Hu$0A*1q&*$@%#L68~|H7{%z>`Hvu7hcre-R zm9kqG4uP%n(bckS3Xu%M9`ZYX^_j-Cn)@CTIP@Fxy@*}2^jCz2Pu9kfU9%MT<ta<2 zb-$#fId_vr-|_Fh)40>tpAG9MJmW0G0?@(79Xt~tcx#6&s9x5Egsamw{&0ZcM@Cy{ z%Zlz7$Aya{z^2L<#c3g?cUWOrlv}AVWD`!vrpr7HW^NBv90#b?(DqK#jU)T5_3vBX zVQ%!VZ3N=1dd@l8e3QjeQ1TGOj`s08Wa|>##vTGc3&$-%bzzdpb(;=wfGmZ0e7VTU z(3VF*P%M@Jnh<sDf^{t1S((DmW`G2HaaT9?!!Z;ACSaD5-L%LEES^6b#8oc@O~$!B zj&v(nz31D+CDb7RtVj;91nNNu6)=j)a^e2&gpQ!J;Ni**Ua^Ya_p7~o;{3Wgc&;Pi zV_$5WLv_bGB<|Mg<l(r<hopdGs%IV5qWRtao_)R~=NKTDf{eStQcYwXQ52#nN)A+y z!A1&b1D9Rf*#|@@01;&T3D%pOVfb?;IPpjd@M9smPm{3!gcBMZ5xc2P?%b2MIl9x0 zV1%?Y%frRO!kP85VIZ7-2RD|0DU6o8uBs$R@MW*>za4BPLue$k?7GO8xd~RK;oLLP zL#y{=oDZ?(g(5LN>sa&s@`WI48OS0amlo;)aw$2j8769<DBmFvPQC`nrPz*>c{+(d zW^L%?YhAdcHW*5U^30KGv35`}`+l19Y4;wGmi2}U9b{k}m3e0&b4h*vX&hWE3Z18V zIq|&r1#-^Cy2rD1l@VX<v$ttt2KiZa1u+`XCSCM%eET`99HLVe1Htj>%ZU-bx@j9@ zw9WGH?R&z{X_1SvK*cc~=lrxE{ic=r9X1ZD->b#au!&uczGmH1zl)b5AjZ9GLv`V+ zkWH?_pSIP9q4i9MdQjXCZD?uuMN<3a=e@{!5NhsAaBrAkdiN{Q$l+sK+(NC#m)IYn z+|9XXzX{Nv@Grz)JI@mEmpb)^2H)2qzyeVHx}z-*=Zx?nYX?>0K~^_G0$4E0=YD$@ z$Cs8b@Gq^IC81G=LOzX}!ndk^^#hlk{L9Q5p<p28V$h|P^~(&~ZEwG<)xA81=W4n? z;m<OJ)=J`3rNlaAh46AJ1i{jJStbZ|yX~u-w&lL)ud4M$S8;<S2A6#AKeKO%us6QA zx$|7>g1rpIT86-#c6stSr}f5uTr7D^i(KWsF56}TN9g>jV-eT%jD0}N>BG3ohH~k& zsjS~jEt<6izMHTQ7mn!e<$}h-#mS`Z3Me6gPaJdh>@bHwthozT>?>QLJ1dd%ut8rh z%Q#ulK8dc=JKu*)ut_4P@2&If%|MGYTsjvx2#GppSAk}Rp+bIKhLTfDcEGVa_C;nn zdO3kk)y}o2Uqo{Wsk$^=QM~p&#l7Xy_u+D<Yllwhg}f<N{N>9nqDssw55z{wa!Tlh znGF{m>m>1Y$k3;BRQ#~9yi~kF8$RJ#2P;KftX!V3W-d()LMRPlx+L_Vp5bdOTr8sf zME{_UOZgyjN>!YMIrh|ATo%=oy-lVb{`dy2<zr#xvqyoJUM{TL6g0(EXp6qbIj_Jk zkC)OD^MXM=1<Y*3&|a{&93?nTjsvT+3YA+ToSxYJSx-;)LaegL9(Cx~Oq|MN0%{Kp zL(?2)aG9Zw4#~1#o?lgtRc%ozNim6hdnA^K<|^WG#8J8aa%t&fD5R2ml^8@FDwmkf z+KPNR?SUt+p4V`Hj|>In&?}p`Z?sol_HDl!vs-T9?n6fXoqLUM^Q&uG%U3-UMhIEn zu{z7kMX+awtb-2>vf3!6lBrmPpikj;TUp$_dsR$De$LAqB-EH^Fl9nBaOphcsK zk!=sfhHwvY^J<`}hb*shhv>|nX4p3HoW?*8Gp?Wij9D(#qU(LgU1vOlzft?rw)ryX z{)_Jmzl4;3iIMPaRF%yym~W635L9WCy8~y2X8W)VOnToj=maxdk-oCk#2igw%7Dhd zVqnpEyimgjW6X&iT~6dBX{yk&G^apCsSY~+W(g!x=gU2(E+IGs11_m}lt#1Wp+%^I zckT-Ob}sXA;vp0B)!93LSJGNNET>s(w0!KeR(;H-8Z)KECh*vfg^8maT0CCC+RseN zp&YSFS?^K~JF0B^=sA=d$4N%Sd-n)<fR6EES9*bQwE}nrv@+tL#mM9?Vmif4J%e~d z7EIOIuSr(_P?cA3I?wh{AANkKDkczSf)3cgYz!YuGyK8pz;r6@Ha2lLL%7~^PH@AS z9O)9@yXHawmKlzi@#1$>HrOInJI2Z)KlNuzJEa<DQVylhCyIHIiZ^d1sSx7$?Nr`& z$9nitV4@yxF^P&UVw5=f=>8uVew*YXGdi0C>GKpeJwLyABXo9qspz(<m(t!V>u>8d zYcjp}m3dL%hu@}m@kj@bli@mZ%V3Vf%Pfj7(DM_JaJYNP^Wfo&kDg!JeBmbp$8GyT zI_{cr1S8(;5%NwKfytetVeE^&j1T5qXB_rjrUo}0-+TXSJXiwV8PdBJCr)Ank74Ic zUY@RM(DlVEpGCYTU1&TWg>zSJ$+;rniBO&i4dXouhVmbv!{tg5v%0;U*GUMIWi+P% zm4cCTMktG2155g|sj}yqjLX7@<QAre|2U>tSuPD0PQVB7yM<)AY)GB_X5Q(%y(DFG z3`KIK7pBlX2bB`yCmct|#)HZtb!x#9UJaZFP17<`!WZOa#Y<Og2Q5WfZ)MLEA5gon zFVkilBte?1;T1d0b2GSfj`P9cM+XQY$MBT7x3Mb6h6H2@m0<O=H>^*5KIfSg?C?aR zFV`mUi<R`dMLYp>UAN8C{Ot0`0V&QWpCzeD-#ohqt2EP%ZR&D{H{T!b5Vt#<KbrTV zZsFU5##%4x2IL?K`g?XbwlGD|)6S(>u!T$L>jYNScH+G(?0|hVZ#IJiSc9l`7_#CN z%yM*4W-IgWIr_J5x@;<2NhEP<-TYtd-DgmfecLYjG|~tVdg#3uLvNy2Aaq1P5R_t2 zP?`#ef;1Bdy@e)CARr*1Vo<uE0YL#9Dk>l<AS!|d5D`@3y6}GPcR$bj?042)d#w+9 z&%Bw*WRl6JB$G_e|9Sk5@;PbizjaftM(fK_!#T$umMEY6hi=+h?2|XXZBNDnza6XR z_iRuxNV`4NyhROG2I?f2m<O4cBP-ln-nvx(rJM3Ps9Tm|T^jwTkqLfDytAI}pl*68 zz~G`~^T?x$nAW=8!;m4T`lM@Hx@p^@!;_}RZC4}Jjn^{|M6!~sUKO#D4L<tym3mZ| z7GB<meX@sNV&AaS*{cute02RjIo5zy;!Ws!>l#Sm+ObZ;3brIlJC{#N?Asa>7j>?N z74oUh@Fk@6OI>V0iI>P?<3}wU{hhgXEX`o+nm&ee^2)tqd=2gQefqFx2Ybh;rV=KW zoyMIdD<yD_dR?vIQ(wJ&qB)@$>YA2#sF|2dU@<%LW~hHnkEi(_>(Hc`Y?#O>wP)np zmordFyLT4DT}R_H&;T;EZ<fv#v#v=dLXyqVLaO2{R<hDS8FvU^;k=$iw`HdOB+T&L z`bteYaWOS-tQe|4nuLK#9uj*ve$}w<mBrH$&l`KKc1JQaoD12hGo)H{xBCdjHFHvf zu%(+uG_Ni>DtXiB9^;lWtdCxqJs#mWBCUlyirQIAza3!swKP?Kx=m<Y-9j$Ig*xlU z90K@!9I>d*@*`8TCJ$BETJUCY#X5hr+AW@%h{k8n@3>Kn#ABcWaT;81)uoS%+V%I0 zWwqQ3KB;ap`AAPLA7MWAP)=pqQb_mXdGUD~!fO83W;4K*Mif_-ETI+k#RmC&`EjrG z_N)4;#X>5NrlZxcLE)!3JpNZ7mbB@D`oW;@jGREnu<J>CEkjaq6L({56|VG29TWe# zzr^&Jrdv*w?prx4%z7QTrYtL^{%bGt+u6RVYx2Q+WoqFbOK=`n0IqIp^8!tS2_0r6 ziU2geJ0jn2$>n%P7`YXg<&4M)c2St4KxYEeA~&vl?lnhsAklg#baND?K_Dq{?L>1k z!?<>=(y+g>*6)WWaGs}Mn`n%T4tqe8j;vM)ea|*r8qEWB(`{Gg-@RLXTrGXF@xsLI z!l?$|3h9rHpl<3DW&cDY;n<bjijM(C=<)Q8$ZJ<BJ~`N!?aqC5s_UWo?D6B8FPAH$ z!e6|cjrsobb*#_HbLwqf)~H`I{4$4bWP%uJRL=m{ai>e-oaLg9o(BrKhc2c1d@BC_ z>wR7K`h%p()w-(2`L<&*Pp>4@HsqQu`pLwmcl)ljb;Of{&cwd_vg2IW`^_)3T!+`F zs`bGmb4%G(ac_-q8+W5PU(?6p=66^9z~BA#RP^q~m`Bymmv>gboyeHDbo15Ew?;cH zYR@EmE8n@f7<J~`i{A;H4YQq`uN`NW7tfs8{JP`!&+lhG{rvJ95%vuh2I0Z4VwWJo ztQCPUs1$x#d<m-L{6#(trse!u9n?)(A9cgv=8Q$tCAbxS!6FQ?D{S6=3E_@^4<4cV zgneP>E}^qld|Ai~&0I%`C^a6`Nfzpk7E<N-uedODQVuG830-g(ofn2taln)=VR-Ih zs>860_SnWH?A;M;OBi>fJ$Kg<ckT#xUl=ag9yh#%^Bci|x~ZN0mTsyuvZb4<*l+2k zJR@7W=^eW*-L!XjOE*1fx22m7W6&oYe-82SOD)&nmid+VW8}jHwDLX(g@1i~?58%U zo93wtUOO%*@kr24rv-5NMQ9OnZ(*v33;Xcf?q3!T;MX`9E^^c*#;IkAz67q=oDFUf zrMajj=n&F%>>|REQ7wd`N2gQ5#fn<QD)I=`I^wi&@y0yS%gf?NbtKwcM7mlee3m8p zT!aV1CGA=y@3#noU*uZhQWGu$FPEjHbfn)d<3F@Wqn4$Ym-)Vh%Y0|aY%cRcb!Fd& z$zoP`cvfVe6Xk?gaAH^G?kvg4t#B(v$ak>hwN|h?x(XM<6iiky<|_)tL`AC=wB1$3 z)Fnlit0?yfr4uYApQ}heU1gsz<setCqbth0h$<&t5vQ-Jm@lc&T;a(PsvIqrYPKsZ zPghMUOs&)vTCt+WLsYMGg*0AO-~6K9;`+NaLgUjFjb2v{TUYbtam``Z&3h}F6JH3= zvye}(iauG<y1q^OtpI1-^+|q<cE_^z8Le&K9!qRoopN2?_C3PxlJ>92a3V&K$a7*T z(OE}SPZC}*OV-g9`&zGfoL}RKuF^Ffy*+|6IeKP-dIsBsEcfUShwGl^HF)S^@G{?E zTb{O`;JW__!;Oaqn~x1;S`1HqU5mbE1jQT42^#Y+8>I`bWqmcqI2#-7G5M5dvipe% zM#rSCU=`F&cYZN#`MT12!b}Wr`sIPyZ~pB+owk2qncdf09@R7FJ8nMlmGfoltGOCu zyV&j>Qu#Y<9`5KP?)Y}%^ZK=&FFx;tMt(v>0w(yKCXWC!0g{aisgwmswJyr)TXY<= zP;*<*T(z)ckPKGkO<FAtRxC-8B=c+fE-fZDLW)-URx*)R`-Cuht5!5^>wrQopH}O5 zhIP2mY-FU3AB)`bg?#>r&At`ubT{SfRof6<yCNZ#(pI~u6}##&mAXj#q^tIq3sqb6 z9daWay4=)yR~^cA9S4Qf`P~FZRuKj>j!(uA&xLIH1;yI<cD-;zye`yF($`716DIo! zF1R6#NJ4JV-ESiAuk=+@XGHvIyEj*Nn-iVgNg~IfgakDi|54{g&VZP}Ntd5vE;8=U zO2UM5w1b*O)kKW8zOd+FKVfT{;P#VnlfNuflG~jc=e+-*P{9L~Z|>XhLbf#FKtEA> zpBPJS_uy`i0zXk>Ya#kKn3bO$NTC)M?K{aY(L{CuDb#aE_Y1S&)^e`LXNcR}ozBa- z#|sPJ*ySzijCAhv3_0nxOQ>RURwA;<<Aa4T2jVNW#D{z;!f@YrvrqG}fyWydA*>Ia zQM`bx{RS!2`6Acze*41RcSi~D2PsrpId6qEj;XA`7KK_(+4;mx>#0_!ffyCKKY%9u zs}1=>)&DI>p#qeBBoXwpgF5YQyV|yKT%HDm_lcP96?XO$B7@aE(4&SVLFQgTZNI;D zQ^Sz9Qz2dLA-!uMeTJcfr$UF@L+`JJJ~BM|^wiOb_M<P?j?Ne!dwc5GhxTKi_8vXI zSMc1~KNKod*sa?CX!YI}gMg${0eVjZqGq-zRDTg+TT+mfUl6JKZ{0NNgh|H<^Y14} zMv+!gk#-%CyS_)d7@c&FI=Qdoq|f)0enzJPqD}>M{LxLLPN_UUZU+t9qEKi2)t>rl zDEo<KN_0LI6Y2;ADOAZQ(2I?6@r!Bfh`Ibdro||>Eh@IFBewT@Y@bowU{u_2N8J7I zagU7RpGI-wCpzL^evh9qN_ZQU@B!3KJrd4?7V1nCXrUsbL{q*W>>_!!s2|D)E!3HS z|DaIMiHayjC#rQOYON>g7$+G-Cz*66nXf02jOkX<bh}Rau64SLak6`K^1jYwpY>$F zzjf09LgJCWGa!Wu@g!hHCDezb-Gl8L{C)Tdgakj)Q+~ALG}_Ub^lIaby6B9?&Wy|J z87;<{ZPA%soteGsnSI7tgV9;TomuzSvmP1$t8UtvT^^lUv@S~ROSLIFm|+yS{8Z~z zqStfx)42o!V_g()k|%sRPpm6XY9mk1Bwy)tz8a@1U+a%YYH+&1q^rPuqu}3lQ<n+G zS7R~O$y{1AmH%08s<9Mg-vO=(vFK8U-(R}v>5}xWlI)F=Jd@I*)1{?dr4<{c)h1>C zm2P?y6iiISwNIVBTXXj4>9iN}#V7YM?weG;Jze>stMb!E<+4fDx6@S{T~(VKTPi6i za{QON>EyYVnVOq4&Bqh2$<Y;c{sG~q!T(q1?Ye7s{it;@t#gm5+t*#^^P|qsv_9Z} zs+&6OuYDrsXEu4hCG~u`NmEfwQ)742<sVHgrWe~{E_QWa?ERnXrcLL?i%q&4E6Ug_ z-B-T+xB@j}amBJQ*I7LO&vetB*RTAHxnd`A!0KnK%m0#Y>ec4(zowho{};OH&l}5T zH^0T++_-*o^XE<Ib~aZW8w2*h{bKWP?-P#e6YJ@d`qd}5y<aJ=U#+K~f4eLMBDaBn za6uptP4EhlgbTn@!CMRlqwv3RQBqP;QBl^=P}kJd)YjG}5{bIHy88Nh1_t`ZMux^F z#-?Uw+jpAnB$)%2J4lv0EUidZ)>hUwHnw(lHVzJUj=OA~oa|lq*t@wqxVt;M@A25X z$IH#lXa8Pb-#rwH<H19A0l~IG$L%9dI>gf)&!p{6%X0f~4E4V;)PHtS{~bF0PZBD4 z_urrM-xz8*=ZwVe8$BCe=bv0W@bE_O&+kib?pE!-d1LeE`q#zR4{zT5{TqT*ou(p0 z0;g$nGtWHtNz;mRj=u3z@Y5IC8#t3pINUIkB6(_lCRH{?bv8}$Y~XCVYJJ0OhGzTx zY$oxx>YFV6XMu0BjrXd`8NQjgO-K^Y8zj&Lt>4@OL+t10@*NF7%oR9WtGz9B+Z*(@ z$n$XH+q2%MKD;faq^P|s@jn~%t~9W|@m*PHdzW&)jjQU6(T;k{z19{2c7FN8X!yOV zn+WxJCS4?WzB*00X}%`QaAE#D!&?1AZQ<VF4|OGnn?BT^JGJoP0y9N@;lDA|$8p?R zELP3`uP{{ob;$oa3>ET!i=mSLOAM9pZy4&Kf5%W6|3@%X%KtYpR9UVq4Au3YF;swm znu<C)4do>}KitAlWw|~mll|^`#p!|veI6DZlZ&O8LMFb4it7iSl%<f6qP9$AH2zVg zbs<XJRu*|`G^IwojmL})*cOkB)ti1RQqXFgbROX;lBcH(uX9PE_B*3|+4YpVASa#% zXjPd(4aq<jIUY9FewEa?J6nT46X1qFHlXKI6TQDT-D?ohEq43#-d<+R^)gaWs4RNg z@mBC2F-gXSBj42ccx}hp+fSn6?tg>?LDIdQU|12fA4=8^E=Z)bMnAoH*n`_)7qzCe z9m2V^Ig07H^q5~b?c_9yAn`1PcNCdtu3?2yh20e|K7T2GL7+37i%?6!w2oS06kHGj z?+m)eed<E|G+vzGZEsH*JbF+f5dJFhWG9>+7#81@1e;}do*g8eDxHKLajvEk*|(4c zVv_BzL_t^dC*jp;RK5rlTgb2yLK4zdfrG*Ywon;BCqs-l-OOO6>aB!%hzQLgaCoRR zy&AjYV+WcE^ecK+A3(C%(sD$mVm%dgBrp+)Tc?^k-i4^zCPKwnsr>SO+}lea0!?WM zn@wiwj-FF}U$Z0lJAQf?K6q9|&rUhY7mGnDkM$UAT0o!2K7$<;x?xjsiBq^UgC59! zN|j4X5g@V>-RHkyZ;n?BhlRfui?b}s8%3ZsA(;K1o!Ff>G~lOPe5?*kKRTU8c2ZbQ z#YIB+z#e%$uw;}c&Ekq2vp<1b72`fifxFuxQIYo!$>>4gYwTNGrc2!RIB|h<oFu)b za#-ke^nLc)jFPX{TXy&I_2gbH)$S>Pm~`@<|5_0AQRoCEsu1gAP7zWj0UG2)sK>e? zJdnc2OPq$SjUH6|j6Qbkt0+OVd9g-9>kCw*PfRw2q<<Tm1TM);HTeSt!m5}LH%!H? zDBmDHJc|pu)W`5kFloY4>as56`LhR|nAH0|8nNG-_Px?Q#woqe-e%@?50Ta0iitiP ze8la|*K_@5eB-I<e9oA5NXPvncpg~9q0~HQEn!(5HX%&m72IF{F>0N*uVD?16oc~Q zlYkurNm@Pw26cgQC4XPP!}9He$W@<2I@0FPu)5e!dB3(tG2RT`xN5-?e-&WH>UqEm zj}c?O3hXGRemQwsVs7zNn81w0d1Z=Ih!dbR_6=+HWdm}C6ILx)0kuBR{aE-uWV?4I zlsrBN4U)}jI<QI2r|QCOTM$?Drlb$vjGlPt6yEk;jxYIPFLFlOE0<ejZra^&ShVv+ z&(E_^w)@7bOpWNdh01aXJn}lK0k)4$d4a%nJV0@VPE^5Pu2}8tt})v7MQKX@Hhh&B zp*KwnFHWHDRf(2CrqKe=O-id0riIzOKU*G3f6_x?o_vo(5J)}GeQrkKBUR!u-iGD` z0E{-@;JrXm^5GJ9>eL?<^#K=GJ3B~b8fPB{B@($ESn<D<PUC>nBqP95G{FH>QCZL^ z_bnAQ*KkWkl>}8(AhPyI3=SWhZUoeczzIaIPNo}+>7l^J{1T1zHv(F}qi(Vg1OPq- zffL4)c_XPeqC(llq26o20j|S`+<^eA!$IyqNb=$1Z<Al>!x<Frep!q?0O%7j4_KHc zuG3Q&5;f5YB`OIkd$~9dsHi9|E-n`z1>(W$R1{2zzNF%_EhPb=kKuiXE2j8~Dr3)4 zQRubcO_f-;v{TVbs7@xfNhP&85TFExwpyhqi0;Yc+G||5hhKHy(T2Uk(QbC%GWu=F zK}K1(J%JY0sG<6RlSXmf0dUMWus|*jv+8Va@E45ga%Vhyhg;Sw<E-KJa4aF>J|Sm5 z+HtxhC&D-f6Nu;bO!;V>yXu)so69-qnbW6|yEdN7S<gK{&%HL3g+nutrx|E5GAupd zr)MT+gMk;zlWt|4IFiGq_9s?30SI+v$sdW50ArQl9Kj?7F`TPVny((jP-@I=MdxdX zaSC)za<wqIBI)^hr3I!N83z0C%kvB~u|f+ws<|D0C#Jx%w9r22sFexc=0lbPh@p1v z-=&7%{RcyhbuU^AE84$NMA>lh{!ruxVyGLt4xKIl{$QxL3(xYT|G`kZ?87$lo&R8{ z)W~9$uCrShYN<`aM&4<YlC;tiZ?}^74IqYEVn0wKiYYDJSGrTN)HtZLtgBRxUP>J< zWr~#%=1L>f%IZ&-@sZ0?)5|VRl)-Dun#Ibm4nsf>wf%Hi+v)P|;nJ?I@*8%gy&L6n zTrg$Iv3{}LeT`(fQFyF}g~bw=?3$(g5{lQxLS`D_G-@TwnMOPv-jY!b!p;rZh4!js z;?j$)2DV^SE8~B_sQPIYj`#{6XC&Xer8|+w!~^7T&=bQ}j%?7t%j6$`((vd{!+`B5 zEM|<!R|qv?BO}>JQ)k$0`q{a3>PBEecvso>xh)tKntI^)C|p(%mdr+{Q_-3u2wYgz z#)PE~3k0Su)EVehAlnXvQSnTnRcIC)eR~7I|AA4}0SlWEKn$o>Fs(ULTs>8IZl_|6 zVupn{fKH!AY{96+S}WP}XBE*|VTiMewPbP9t_2b}R#6zM$Nqs)g+Lf}^qgCn<6bOD z;tz}}&IRKj$S|`}_~I~9k_8WC!<54si~zuMe+`b^uy~rr<=>FjU3nXXQCW?lY!?CX z29wbQYY;}AuCe?Bqw0!p!KfRhP+j~*%h3egB`#g(iy(~JVj8S~zi2_N=2qm23A+^V zJ~3w6`=3?RZFuxHP(@|JUi?u}PybO-fj=s$;vW@t8xfFTFeR5@<6>x?dZ-n(!hYK8 zZ5ea6tntGn;*kj;Nxkg503+4aTP*+)Bc$UawY-ynIe;=>s+j4z@N(<|Z!0teU#DOn z4SJ~J4k&3xOUQJKLN|yURw|S=sAB7cgE;_LTl47%JYuOu8Glur8>Pl*qO;L<M5f(R z)%Vj?0mN2|u>BTh|Ae6uTP@iTU3Tkw7r-F$c>X*sYQ)1B#d(_Xd=DT=QqWn`OglC@ zl~{Y(wDxx?S^)sy;%F>+%R{vsK@&%ymg4nMu`p?NM=<w=Q?VV%0ANGx%%Y+fM<A*| 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 J9n}K@06QTpdEEd2 diff --git a/docs/images/demo.gif b/docs/images/demo.gif index 0f2b9f248746eb06f3ee6eb312a18980f24198bd..39dcdc9e915b6c909b27a8b2c9b5568a537f0495 100644 GIT binary patch literal 132841 zcmeFZS6q|Z+CBQFhY%q2B4Q}gL7ISw8hQ~i6af)5AR<jg1O#j79YRr&X6T@Zp-55G z&^ty!L`9^jbVCtEU5hha?7hDI-}^h~cdqu$IoyGIVdi+oc*dAxVrF5gyT|P;LKjYj z{_!Qb$!Tq3Z)apcHqlU3L%_g~CI7^n_V!f0;Oh-ZZXl77;77{8|Mu^H7cQ@;{r&rj zoWgDeMNLH|EqMja-+u%_h)wLH(LdFCEbcwgo$r6VNs&+X@XqtPTj@9d)L;2|;F%90 zm0zxW*<{lF&6UMcx{3n2{q*jz$^tF#J3kny2<~0H^lY3FVx^k>e5UqN|JlbM*bP^# zAH4hWz3JNXFF!Y_Vc`*xQPDB6aq$U>e6SQ6EGa$X#?4!XskF?T+`Kz<iL8|T;v{%k zIlN@w-SP_8!Zb#0ROP*gy7i6D)lJW?S2B0Ev^qTP=)QQjN4>8HVb|3^bpF9BmDkUZ zvZMSjILCJmj(qej`=m58dw6=`%gF}z&XrZmrS**;KYu~r|9}v<E4IvtdNk_duWen7 z{MLh<J1qTnzc73fuPfy~s(W&CyBStObf>YG=~QR>oMC|r{mdy{G{zz`&_c7VCJQ<{ z>7st2^f_m{Kl+c*0=XB3Ji&|h@%Ep}O2|s1k7fdV?0HQe_`L6Vc<=QCN^AV~gLM^e zYP<&Ty7t!He^>86)suU$zViL!kkz^Oz4Z@1Jfk8wC9E146RolQO2_*es-`+=(g*Xb z8mm9{W@`G5^)=Rfeoi+^kT~?Hc6PAL?%whKM-S&;GfwvA9eP~1_^#o?{8<0v`Y#`t z5u7`$n;Mp<y3&<S3^X;aer6ROykq_3(bxHr8s85CPac2!GTxf7<M7j_jn$dKdncYh zee&}gd#d-&;b%|(`1yTx{=@TU&o(zVA+-EB6)EI39)^`I8xO~8&x}V9Oywsc1suF4 zqC`B)CZffIXC`8Z(ejhAGB>>@<K#=qCgYXsW+oHVI^?GkwT8W>l5{_nO(pBE&rGF| z&<fKuV<GS9RCC$#=`<_t+39q$slvw$dk622H=I1nKi+f+p8a@>60Ptl)8nT1r`uj7 z<)5<r>SjM>`*$dO&Iug${+t`~sr+-^mG#-rcc^H^8G59U&rE)-?A@7yMD4kmLYk@K zY*B`T&unp~=iS+ooZz|HQhK!FTv^dgpSkj~lDl(vE9&Ov?lC$P=PPQ5edg~se7ZYd z*|a`4|A2{BT41yZ`7Ts-$=+M2-t5z!U#MZ3DlOIyIruI<9PzxjST`CxzgRyWt+doI zebaZTai-+n(xZjC`K8C~4y7+mYs0=@o_zmw@5|F)>+@fpK^SE=6DjP+ZpO-0uv_pt z3+z^cneuX*fTQ1XyU6K^<qq+S3(K9v80D2NnOlA<-SVXsD?Q5f3oE^9oyx0yTCe?9 z`*lB8tPbdZTUdQg!l<mVjD^pvy)c)%zxL8fXK`(iY^L&c$lmeH*H=!b?|&V3xw!cC zH6=!6eZ=F|ne{hbrT5q0`qeM4zw_@@`8FE(`pmcYA)oJm8@uvt@!JO~M)mu6r107A z6R~oY-zO7wmcCEX%v3j~GaS!ueB8`DUAgfo=i<`FXL^k4kC~!dXMfC=l~(?ktEgZ4 zG0*5!{kc&4`s~lehR>BhmzusU{rtkj?E1xS6F&EAxl8WBua!QXFTYk<X1o4a8*)7N z$Jde55B^vmz4+yiZ{sn${`@|D>)f9kGo=sy{IO8~<<Fn&&Rv_o)?T06{NwxQ2b+KX z`t}7N5Ko6N=1jO4n~Jrf!-cz;XgziqA(4)hGjGN@v%^LD=xCj;X6{Su2qHcoYi8cU zm&J~hx5~#kcC`pSVn?YZ=HpMBw~D=GN9*?Gb6@OgmH5GqA>j)MG3ISjV#~4SRt0>w zy4qy*mgC5Y1p=k!?TXIJ@lJgOLfh)Q+Ep(tCs6Q(BAw<P8d=MUURH%-uN!V60i|vr zQSN{xm3bf>bOIp&#ei>~q;D+$NZcaS&Cm|^M#B0!`_GW}g@px4DP^Lh5(a~5D_DPe zYyENRx7QuZeO0Spz9%%LeS4ht?McSBj*_**wxp@4sXoTq%=F^3%=LqZ_A|5AJBq)~ z&n<kOTpWD5@}BkOZO`(@v8D0hFLSdCcS=0Rd@Cz!{bpBU4ry4*$f$gLzcl&g%Zo>= z(~Hq&7W<Y1nnwHC<1-QKLC@}1`Lx_w@4mbCZF-KGvlbTZ*w%Nkckt5K%P&Rt(Npi1 zQZkOmr?|LM%szdZ92<KxaH_DYd@Z-Y<I}`a3w_OdpX;ku_Q1oHmhPb857*zl8+JNo z>g{KBHOzrZjd=Oy+S0dptHY$~#<MLs>kD7w(lRN>-OW9H4!WPRh_MJbq35Wpr)_I* zI5|0H?`SmaRo-8-5^j2~+BubEwC8*vxxMJ?ynh3$e&yA(RSivDT|I+SUI%^s{7uaC zKb@@|VzT>tJ0G`PaMZCG9Apg-zkJpaXt&$?-BehIdtT@@dsf5p{O6_9r+q&RvDa3= zWahauZ?8ACU1+7R8yWB0N75}UKfSax^W=DDYHIph?~3k<)rM#O>tESX@y_F8Q;YLU zCnz2dAD`QQ!0gIZs_(fξ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�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 Y-?r?^S^CG}yZI%j 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 WvlU0OO-6D&NAluEd?0C(@&5ry&tEkF literal 699893 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%0D~(K z_lI3pcd`J$EUEN2sPs@1FdPGhdXgpm>6q-v5f&gx3OND?`l}0i2w^rLqeTJCtz3fL zp%^(b4EG@|(f_GYIn1CGlDG?^)q%wNv(lBHis!=MyO4--*xbEhmBg%sk+cL{hA^%; zkpz<g&?S&yANtY(kPO8UkO>JQu?vx%&bx}Bvn1aTCPTRUN+!zDw$l(%9<ag)$Q(h( zHHk)1AQlveLq-0~4Z>Uk#+w4YNCC<?fq2PKFOtV5L!pin$dd}C%^Mf^kkM*n=u#ix z;dChvwE#|qCguX4N|t%=0+0Kk#<?&-a*2gMJv5O{ltgE50fI~e#W7@-a5}m~NCXu` zmkWBCNC$KQ^Y$09J*AhxFd(mEF6`b{QGRNaTdYWeO@zSOThOS)bQz~taMaTT1Q<tx z8S=m`l0m~Q=uZ`BBBI1F$1#Xpy!tXvy#iKn9%J4Dkp$2w172{)L68*SkA8r$|BVZn zybd0^x4$6W&AEK27n$e5S8xy^9K_=X`U)<~5>k3UJf;;EeWN$|M;Hc6D!91@;w(o; zX_Tpmmh(PLJ4-7|N~{U(D-a_?p<?A6&1E`d8Z>dC5a(ZPVnSBQpu6D&j_|+Fl1LY^ z3siXqion&WdVy7LRyOtn_<uMH9J~J&2AlieN1-yL6Q2o7fD-&+C`que1lTYqz5PL+ z1r>zyq(9}TyMTJi_#I;54@vYV2^;6RdObHxfLZ=X7yE%8RsZ*H9%dBKO%0GG0QBSK z4P`RKx(|K(6le)(G{I%ak3hIqLGc@Cx+Lec0f5C9ih^1xeF-o&5iC`SjtDOZ{aynf z$rP+CJLPDBQ%e(gpFA;n;z^;Lt1RhFED3h1FmS75w0~NiNOyw@xZzKS(FAjvkPTXk zjF_0`<6!vS;ztP$`Qg<cJ)fJ<a^DD(VbQw{a0`0%L<lOE0$(WnSON2Y_&kw95ms-W znFe86$}jvIx46c>=@PkLCGZi50Of@=@+}<oIz=MSuG}~68OV|XfqCaPKOlkXLGtPO z@XBV%-ezk$OCHj{LDT|AJz34Esi{N<SD>{;Yl#(5w!RKIQcXfdnSgY;1-X6|n!{I) zR+;(N<K)f(`d5-|-2?QhRQmb~G@c35P|?Oe-G&d#6Qn@qrgJx1(MJ7%$(aT{+meId z=*0nmq58YoO2<V1FgOC1h<Z4~2udWmp6cd_F*G{Hz7mqgm{0qdjR4Q2-r{aPJ?jA_ zRiZyOqmc+Y8vh8|MFWGvJuw@3X`0*2{_lg|6mx+L^#MT6NkP_{p+1;`5~fbif6K`Q z2o_MAAPK>sKp7Ez3p}6&kA6=w@TAXzQyr85fGOZ0MbLDmJUU)79baFa5v8k(sa}Rs zX9Q?7*r2z<fD8w#4vn&n`p}kIJ*#hCnNFiojIgej=c}#gcZunXx#`o>&xJkcfsEn$ zjC4U3KAntoBXQNoQXhg|L2#`gi4n+E3W#R`gun1_scTY3fq52ylh?ug6rcnpn4pEZ zG6IxFJj>S1PvXO;42GW@DD|NPt5FNE{(X4+mS=+i5&u3fCx59|P(<*k;G@2aBwE?l z_nJ$9F|3od6r#>Vva9t%+jCFybqet9Y?llLXk<ZF^{Qv<1ods+AK+`Od5QiAr@Jvw zl|YF+t9vCDZshO^ErI-0)rZDg__+Ok9`6*S?Ei0i(|aUO_|Fdi`aKNyfAYf~Y-t1b z+<-KxS6>~0SbqU3kG$x9FalHprC$TDRiYEmMv&a2=onB-53tP31odOcPP!VN4kS{B zW6Y-Fwsec&kf$wWB|&+{8r_eFo-()$g^^+JZhXo7L*a$RSB2?|A|WTu&^$8}!fx%q zrTE4x%pGPriG*qPh%ayXXK$5Hi*U#Fh|l)U#ZYB1I)K`~KeKy{vjEySNb+VnW*p?g zJU2abWo!!_ThU^p1cLv8(znj7RwZ<sCF0x@nY#;y%s`)g^p_ufJxux9{65K8yk;j1 zv)Kn7HtP=9r4JYZiR{utY4maaGqk&4p!R~jDcu7A{oH$q(k|473<||TIDHqnQz3#* z3jrhO1BZE$RHL~$wA3K9eGaXHqPM;Q%95h90Zjb<v?Nym;`gUlq5!3L=|!oKfCW$# zl1>Ffhml>@qxr}nmQHoSQAiklWV5LDif_=;AH~85M%<Y$z3dOPkw5(}Fy_`U8bw`( zBk4@2kofELmcOB%U)z0H^6r@jub8cb4C~u|MN=-9(f+0ZW05Oizv#m@(UFnO%DX;- zVsxfXj=>0!#KLOw_PR-2Rv?RSaO7Hcr2d29+udJgUv8j7oWOr{K@X@SWZ56TtyfvH zR+CvkkKeA(ZTv`kyDapUk`uX+Tkus)Ed{Ow@*J66kbnSez+oex)B=zIfZlWjIB5PY z``YG*ZJ<U0@Nxl&;z(Z`xm7E>_UHNf1te%MWn<~B?z3UwL)wPaTQm<sCmKaBLk7hm zcJ_v;w|lm?X$ub!^c-J*ydK`EbA&|!-k+G$Giq-`U+X@L^#1#37cOVXFu#lVYt4Fb zkMp7>$L&4tD08mDJwCMA1;2Dd#Qx&f$A<p2@7DD|IUGa*u?ijsiu&0KpukR97<u#o zR|!yk1gwGDzaMj;@$n$Z1#}s8nC_t~Kmn`lp!r9@bnCi?g@?(9d!TfX5)OhQjh}r2 zMJ>?BIqid#z-6?b&S+4aKLidrQmhBsIKl8vum)L-i{Fu}E13B`+THKi`87I-HJ76V z=!k*d#X!yEFq#xFQwdN*PB)VE1RsToy{fDJ4s1`us3W0wMowb<PPpsAE+gQxgOgKT zP(B)?{u+2Hd?<!GtSAJFj(}S-4zwr1TK-N*@~IXHN9+1kP>8ui1)Dzp30nUBn*(Hu z)@5J?JN-VAc7%ER!2)SpXw=A0#zSbDEM{Epnd?W)q@1pt6HJ)`6hTZq%Kzi~6R1Sp zU$FgSQ%Zw7(blhG)iF>lGEmgw5WGz1NWtt~gua}|?xFtzEQ=vvJRP&Z;nK>2P8>5o z@7Y4^Ah&{(fMZZL!8A3AK|a#^B-#*05MX$U{PgWkRtn@HX_U=iP*2`LNz#R?4+jgl zM8v6E;$L1(6*R<4H+6~i6m#D$K$blhwW?qib7g#!cpl|4(tqD8bZ6eK*7d_zuMbsx zN-k9QD#i>Ct7`-)qn9|Hr;GU-!YU<5tObObH=3anHQu?f&`GCC#oW1zB&hnKY-QCt zN1kvhJ95%oyqg5?;pIu*$f-qGvapm!9l*>^N%x$Qd$M>~H-eb-SU78B@JnC^LWRUv zRMevH#zlwjRddv(Y{tE`RJ0f-ANfFq>^bt}yPWsFDRI}UjV;o#f1fMYJe0{<2$_}j zEF*UazGwP<^7Gy90t{%4BG%*KaDVD}s$F&5DlA-9qr!11rHMZ*J2@H=vR*_l08=O@ z!$aIFin3nXmk|U4P|o^H^8b2=%UJ12G9$w@!hlcx5TTc+v<Z}ihD=3A^M$W37-cB6 zp}HP785x7wgOKYGRxwS5K9&?ct3Li<C3gKwnrEbF#Jj;=h=A=TPLM}ksHRK6RGjwR zFnu-XiC|`v69$ZO5+Wwc!p6!(^R*G*k`Mu9#^M>~+;>MfS4ucq&)t;XL!ziiEP*_t z^psv%eMFExC38~;&XPSYe?{(lEu&Ob(>|kg&0yy_nKx4bOtQ^RmyPJemE4JPY;Y^V z$2yQc0tSk(_SSaI5k*1N;0)a)Ezj0(EFvUaw2DZ}pYzb6WkfeZmo(x#eXmE9YnBI| z5RJUBt_(@lflHKpb;){^Rm2N7K4v|qfWapQKMC^}^s1RSnhl!t$y$gIwY}cLxl5T! z4FQH6ksoZhE;yct%G$+p!aY7xoen76EYNh69!v0LTGn)&z_1D{)Pknc?R1IO`*~HT z1le*g()#2Zt8V9n?=8QMl@L#E9rsfYJnCLfbc!Zaf*>IBgY=xEGg}<4@v(rIEca@* z-dm>+Axwx@F)J5Le@hnkYxrQHS%jFq2S^rWW`E|*_1E@U^t-vZncXXW;-8*pz1{5- zdN0)j8@=e@d7+GZZa5-nP%41WhblEuR{mjrTX4JQnqOO~eD)n9|4!yCkBZ)budO>> z%y*2FMIIGD1!C7iG{N~Ll8pTv`?Ai-iwPU;Webm5-jdCJRy;jA-;@14h@<la)S7E` z_1W;i75b2(%G&9Q%GaHp%9Hh<JvXYFRuc;+$%xw6ZZhHlxg(giG$PG@*1-^OY>GV( z<EB@jGQ`3rVcr%53}-PS8WzI|`P{)8XQ3G94r16u)-kB;Ml&sv>9OK;EX&w?aB?S~ z?LDGs36eF)3Bx4SgkXo@8Toe?FQ_1hLD3Wj=4L0TkAEj;H3}Ti+r_8=pjWf7jI|*T zUbH6xCBsaKa#}{re%W0@0`dt`UOBGk1A3%=E$=A}=rWZ!89-U?3tGD1pfkj7t+r@} zI497Dpu2Q>k_vd4k?D^{YF*r!7BOoHC0tv8_o~Dv$pXKL&~6Od{@!;cPbn;S6Diud z0GDxlp~G~&K^vM5fIs!@J-p+_7DtYO-=e(GF{gRpZ33d1oW#>D6edb7hsV;(Y(%A^ z_xtTmV<H?-z?BH47SuAC={(Opd2E0rA)S1QU#(Ebacsyh;M22(m`jD7Hk=+U`%IMd z6=fcT`L$dLIR9>X8e_nqOG8O8q<mGnb>WH=Uhol<GlMA^BEDk$;}ZM1t}Bv1pFTTW zNCzqRVtJ?|PAYnm&I`brBc6|0hX5ZwS7Qbx9nr{rkNh3@0(MnZ>h~APsC%R5{)Yd2 z2S^1lHa+NN<b=|*r&AGr+0pQIBt6Vvpxh!u^4eeI2hjZqLFgF#oP{o(#x3Ov>pvCO zgFk^vg`8cp>hZ|I+-q^YNIYCk#5mK5M%++xsf03Y*nOvf5-ndQ#UZ3vRw%Wih?3+$ zeJS0~)3&V!8>E;NVO`jOY}fE0VyL`>9eL$i+}RsshG?%~{z5$Kcr>F_CCJO6RiOvN z?g_ci<Jy*JTt;VGlN>B9j@@U^xc7-kb0k_fn4vhnz@y2<osB0Z2$3EZZRc=;zyD-o zB+GyC#YmOq{XYNM<+n0^_dK^B*WOSMZg4T1mf2DJcp;;_O$5TXl3=p?`|F<XagmUN zY<QzF;zT1TC=NW2ZTan>kq|@`=HCf^@BpzH*TJM*w7%b&eham}ESmN`!QfQIA&ywz zGWkec*BtpoE}cxhy&lc24S>?*Tt3-IEOv71>@JPocQI2}?ls@IE_L=NT^hTR@i+3^ zJKkP^hyns~&IVDhWz)=ZEuS@`Di4UYa~5oNh1scoo6<1-#d>YHE5q>H1RJ*{1D+em z$M1!bDZSwoX9vW(tB~4{f>Rx!o7wm6=vyP>fB|ZoY`vQx-6>?#J%hSjuCaTPZ4V&e zfjT$AF9PbDnaJ2nu;R-Pg^h0J2;Mphz@n<$bT^*>gV&1$D;DJKK4msKTsHFcX;sEr z7qKLVD6z!;W?QmN@O8$haFY#554E`^Zug3(x6nJ=L_3Gy!Gv&=`Yz`rJ74n^BAC3+ z_i?@Y;>$g&*DA+fzFwfEXnsNVz0|^riKJNdB9By58s;xwJw3lND;Ut&z=IMR46f^* z6<Dd@OWwxMCLp(B%D65`W-NO&1)CJjSYtvZQx^6YrZwfd`HKniVS)>Bb;L#QO`v>O zM`x<$QR^P_GIGGP_qa9V$=~Q@+Al^NmA4~>yEfX-`Vy-EOz=Ks5Kwa4N*9jnx|pi$ zKl^pW_jygYfA4J2i@W*A>!J9DHt97X`{)g|JH0RYH|WO?e+gO^hC}PM*SWYmwUnCd zUT;uAiGnX#+@dr%ds6$3EIL?yTmkF_{iK%p%eSA)!WKBZ5lvAJTWW`34tM^I8}Bqe zze#bKcqbcPF;CMVg|BJ0o@p2PbHuDP-AY%<7@LiEybRVr?qOpTp!;m8L_zwljfAwJ z6pTkFlZ47Ak8;732=}AGKP}G<K5X~O-Ii<o*#5H9DI2czck#{$b<i+Wc=37uymP?Y zopy`g`(EPUpdYjWE}b(z?kHbT`@fU?!+<9oADL8h3KHweQbquSY=o6NqNv_W8BPhV zk}wXicH9WAII#Js^>zBQv`k_dYYlbpxq5!Bx_yUwzGl)NV}(K{GB+_Z4iT+I0*N${ z>8C5X>Oo^V@JnUU)NHIsS%;fEMAHc*hOD|I9wTb^Zyy3Cq@*L6t$F({j(@X5M7mR0 zgvftNOU@{-*MvdNg>~9~!;WbXWlq7OuvQTytT7PQ4bTzv?tHro=9<lVJEF<jOF)zG zLCp%{kgixtXLOQ=f>Mmg6b}6_s5ZrQm8nEkNl&*)A(u_#vNuc_uA`37#h8MI4z#AG zwQdqb#L9r}7CMqHI19Z_^RsT15?#%1-OtwLqu=oYR9SXv199m^ChxQ6@@Kqk?Ba`g zaY@vyF#XLXKq3rSzN<#(b$Nv0y&S0rMb;nrj@V!)+}vmQAq8`a>G@mytWv5*p2R2T z^um4M!k(}pw(ouOcM`k%dpEv(_n;o{ah%b2k~~S3z-^!)Zjki*g}?~Y%|rYj+QvKl zI>;ZM2)M=3c;g9SjF`U*+Hg(~AZc@O6Xe``2qQ4r1w)*c_GX8Xc#TA0clDG+9z2Gl zFdOdOEz5dF#Um8h4kg%^n~UrfoSYxWuLHzJbTsYoDqjGiR05g|dWwYyd!!be^^vvU zYOom1FhMp7Ue#Ord_=$2zsFnv&mksHonfUh{dgQf6O)nwEK((&f2G&&m?%@x#-e1Z z`@+SfGA3G++^;DDY}b6OK_v+H7F8bhy^7GJXeHF&0*w=aT2ulr4y+e(zWEkja}!{w z1gjhGkHrBSBarNfL1t>VecBtd2$5iUh})t`1!r=3vWbyZ7LAkAf1Y}!Jr8UvP22^8 znVvu8%Qmy)Bd7>Q+b|GBYhK)yPCzwj1Qb`p(#@u&^A36PJiz(3TIO<PLo=KBSw4xc zHViBW;$9-eHPeFmHX>gWs;gXdLnJeRQ)Amjfbi7($E=yRHN!UN1^2-BeFp+7TCa70 zuYUwxO&L$S$UuF&$M7sWk?F$K<8i=uuMct5s~ig-In`f!=snd=;GgC+&hScTPZ(l| zHP5(Z40Z1-kW|P|G8X;a%%VKXae0(e95QU5)2BDeb&UtV0MNqdkSr{R!$<ihMjsO` zq1mInbEC*}V}hb%Lds*p`eP!lL{`z-JjGfzeXM8(ZH!e9FG3+`?&2i9>m}$ixeyRB z3|<x1o>Vp_HDo2LZ(Xr#g*x|X#^jS~>?gI1PwFqMIbFxtVvIR9)r%`WY3J8XN)j{V zS<$XUHg}NbE?CWfG@cA1iy(C#S?lWC=*NzmycxgJGj95#S@V%G+k|zFw58d(2}{ul zE9D7m{Rx|E6D%v^h(}{rMMtk?Ox$=eVgF|0X3xZ}7fH6kV}*Dt?TKp@MnIrC{);$~ z+x;<NH`VmY*rpncH5+)EXXT#X#%#yRlid<a{>&+Adw0&#OCRL@2j-SB=EIB(kQqbZ zqV-p-TpT`g@!JCBlfz^_kC#QC->q}%v2mn{cH|Q##3x2M$w2>K08t;{44^#DJsQ1B zXw`s8aW`PLa)t7vois1&YZ4!Jj4Dk`_1a_yd1NQcykc>figV~d&fy;ac@<YSHHc7> z*qXw-->ArL6{-T30>_kM?bLNgpSDXCreq@ArxZS2H(Qz1n#;JHZ`^_diu+HKhNd1F zbE%4sv08i~w!_?=Vb{NPC5T$dci9oi(cWgCSh;T!%367+0PL8GSk%qhEsHAtv3iG@ zh9TwZiW{PjZr*zSC5wOT0nkQ$PPpKaWwS#|Wkhsg#CWmj`17CRC3F)fHB7*#w$KHp zcK|q^__&Y!c-uW?l9=)ylSt8IrZMNT&QMcAU2(f=x1dClD%JkAGtWpq%jg`>Hw?>) z6AP4*N@oeDY$bm*LJaTD&BY?t)$lG3uybWVk+5hMJKO1C)|t84MN#Bj8R=_Js<1!s zPVo7;V8j~6afL4BV-;}9-C-ZYG87B{mF?)Ke|~%@Wv&Ufz@IuDd;5d??ct1hTJPgO zyYqi3j&C0khnQ0rL|JCdSfKKbll-^Of{AP=U^RD+k3&kICsJ1*Il{CbAKE=Wa&la& zaw3H}XySyw_Yl`F&*Rr;KP%5lDhaXG01sVnX#~$+kDav}l5j3JBB0I_7I=Jq@g&J- zXN+=1?s0|Qm?gnt=0LPup#r-x)a+~HtSRNCN8hs^kMd08a)Q*QgZi?c)MOc?<pwPB zicon=zgOkvaHlM0OZvjvI3T3<J0hQ#LK&8{jJ_G^aL4{S&xQE*^w+CbH}0agc_nGs zxUz53M;+%(GqXoYUf**x9hU^nbF>|~%P!A_$#bdLa)tEe;O=u9pI;KQjV_Yljl|~K z$U<IPelu&x%@<tJQu~&;cc=RPT?)gBiEZ1t<r{;fyQCK`A8T{;SXMLMjH=Q)^zU8Q zALf#-=CTfPj+Y^}2b?$f4fcJtsMhX$`_FYJy7O&iE?+N`Awn<=yNIw*iRx65z-bZk zhp<u$>@CyG6RR~<TH+mbg;{gn=L!M$1oj1y8qck}gk+Y4%!)zE0k71{N_fUfE=<4q zq+2A%_&hSz;rRxR*#gM!zJ`l)V+=<Iu{01Ji!U+8T(WTI3pe|uyPilZi3)K;dM>|~ za@VXy!Wl&jFSrY}tm#O4c&mSBdn(9bl_hznC@fAW&)iK_vP9RUWC#T@2><a$p*_xA zBM$LB{-rQM`&GhMk*uS&d`FmMFWC3Ybs&tO)w`ZTbLZNBr4{g|-f`oMS@Ejm^VG<- z$5by3?h=vQ)ihDqTQ64jGH~h4Jzo|qVr$~;*Tjn#OwVg?4%t^wQB_x4D+fH4@x;ne zP{Kf+_dsVIEy7V_fnCKdPO3S)qHekiKlQ5OKt_^W(I+V_e?_`hh)9gw>RBpU@Fcbu zgOxJpKCN!{%Myv&x^HuDH%Lm)8oa6*+bTO;tG?{h`ef$ww)E2KW-LagO##xbvmH<N z>FD2%MQ(4|%6tizxuNT4&S#C%ge^sGb>wb!Rcx)XRPSlSG@1luhNS1AzQZqhMm(ke zR^M`q^W_-!h7zTGLWqrH-dNPmcENXi*kan$R@c!d-+P;WA)6KMwPHyMHj2b+2hs*o zS{j;))}Op|Np9?=IRhK@FTg5ax2HMelr=y3>Y|kN>P$@Plx90`wz_z<KieDAR=z;t zkzb;HF=*e@K<p7v+p?Qd7vt+@hDC(tt%T7;(Z7Tj;5WJig4oAe&JTM8|NFWNbvx!# zSv_{Qz4ooaO4qs+Z3C5uH?@W#msNxP*b)LAy#jSU?O9x@*B{td2oH?Ifpb=OEb5Zs zn0>NGv}(L5k9hz!gedfGBf-b!!o(q3?I1dAkuhs7{Qa)_g#VvDXIyLsS!$v9idR{h z#=xf_G_n<gYOQ2xgOh;wTwxj~;F5mafTC8nwbrAzmE#9ksqNg_G_Ch_now#h_F{dY zfYw-=rl8w4+VE)NnJ|bU#Lyw+rr%M&RJ*v_6{d<K!O5eyclF#dQ)_RwyeAxepa~zt z-H&1sAq{E!r$a63-9P)Qjw9wxhYtp|<Peo!#Be{|2ak_bW<w0xj?t1a4OLe{B#z*_ zN3k#P_X-cA2g1nXw|Eyi<HEuqQK2_ke?18eeb|7HFif#1U6qgHby)jpW%$XOUXq1% zqQash-o1k>xx=Nf+eBJd+6E-EtYg$&;{7%VTLu<!!mA=rF?`)RT6(ZfEW1&Urs;C^ zP^ZkM4)3k4D$8!QdXq2AL3m_OooWvP)1$E*Zk%L_4eL-11U)xArTo<?;?j{i)@xTg z);|1gou}J$TmLmWoO0ap>SA=QU#Ris!xyYwXz8wR!;`Ug4_njE2)GEENy!<8FU)MP z`{UWeH-(*fFLp2Hb*p$ssJV1EUhfH+k09VgME&79xAa7dABs>Ow(oSL&g15G9${$& zyeqNl^_{lsXAdQ4aTYYfuL#9kXMEk^KmN9qX<8fI34eCgI!`X?{nrN-WybMMeR;Ee zCAazq22E?cmufc$>O`V7%kW9=(FQ%>OWfsy%MM+7rgz2qTOlwl!?G!7r(Gn0GY(D{ z{;6{TDjG(!NQg!VCTl*(G-A{19AP8a{NRfTbnC*h*`9gx0j)%gp)%)rO%@eI2u~C? zU?mD`#U1b~%an8>9cOYJE012D-6#^S7QL+|uNLUcNVozo(xbW8R+{Fj++G#=f?uN+ zVxCA|h7n#eL3va|Hj&pQuf1fKu!r>H^v-2oY4N4o$ci@UP<8$hJU!_*UVaV8^p#rT zlrPFy>GauqeQ_ce%HgLKaeaTOHb6Px(8zY}O9A@XzOtFV#VvyT?m{_mEybevL9$A9 z)xSMdLPt^}s%+`;dRGnov}NzeV#nI(q=NTv)!p~ieq5^pe&V6fOL3ljBKJ!Zzn|={ zeR}QpSDSWr_<!v8_F}AARJUdiSn&*!#D&XS{?;r?y#U<-$s!kpgh-yRr6YHF!%qZ> z`!6hD?1GLZI<|0s9R0bU_uZGAg)`kRCPJ&GghFZjolU}zFQ10pPLZq)yT}mCDMSZH zgL=9zhD7(4q^ZaC0@?k!g<_peJex(c4))eA;y~=~3wT%Brv(C=x!q!{!)hss*|(oZ zh~0SVemwo<w@4y~QJb^T)5DHmck@G6J?0A@(RkMN3B$j{OCDePAx1t)Ajj~j`QFeK z)VSAMUP`Zi>I{3(=B%6fq@u+$@-~fY0Y@j`{u1x5BQ6+w{!XuFa@+`2iV|swwM^7X z9f{$Oq_TOwes`)SeXi$osCVsv$_43$FVluqwS)IAh!7V}Uy$mib05kQtK)d2a_TR+ zSLQZ1B*?b^oPH?x_ScVAxp#j~pB1%GQq?PIt!^4&8@VmCR#X?W<{7G+?TXgkV_=em zR|i~xPwrW()tP*+V3L+XpXjrQ!k$g`P1&}lkO+lA`2j7(A?2CPyZvA{Z~t6bsR+dp zEYoGBQT@Nq6yNhS=Iyo_X#P<ex4d#$Int={=I+>jxT*4_!^1zyQ$jb}6{>E$<5QXT zsBBl6X-jRd`+{z~tU4Dw^C<LRa%+3dN3(B#R2QO|Sl)cKI~Y3rOpto3_AMpqmfAqP z*OuB!#?8nF?W8Q3Uth8x{x^&GxU4zn{%;wLALW&APq8Ig9^p%`2DCM|5?kLQH{Wc$ z)!Yf3ca&NSIM&wM>(Tu4yS1axSL<L%^EORkpZ7RfjUvQX)9Ea={Qfn)VhrUjd~<K= z&+*BV*UL~jq@Zr#L9l<f)y20L-;J&vWOuUtO2Y)6Xuo_H8MwJte8%q_b@=`EO7RE9 z7&G515@aB|({A+rsx?%AxL(DQB0=qYDV-4+%b@K7)*bBC`<Gnx*ubu{%X?Qy@@y1Z z<^;p$#mDlwU_7<cySxRXafVLmnf62y*M1pY)NYrXdq}51kAIx9$el;YM7`4<w*(bP z9w;zNkQ-B!Gy_g#W?a-mCRX4hojaIz58_mp*T4!Tf{e<CK;HU~dR9c?<W;*5U9a|p z!p}yTKGy-+lW~u|m3mo}(|eu%(105F69Q+;xM9rMsG(ocQr~u&7?%AhFr)3G=*Dwn z-8(ht*DX^MLaOc1A8vH>SAd-T^y!-8&X5a6K!#WGm!X4BP{wjBqbC(qiLi(u76F;z zy`0?04yd3DRb=NIgx%K(!e`S#&!qm&$=44&81#}JCN6Vs9Kayw{}e_lH+>g@fkx^$ zYoz7m2NZA!&BL9UQb&M4Cy;r+t~`+?sGAb>J{1~ryQ%O{hIk{`#HUKIg3JMs<zBH| zRfc=KhR=sj!s>EFo7|Zd`f-RUa=en=`qA_k-Mt>`oMk1q^dEQs{kwG2{mb!WRzncD zAU4?&U&>4m`>qm5<FpdUWf3quR|qB`lE>;H5vh}t9}|}jguCLHmp~KbZ4QR_5EH|E z<MF2g9XI5v*5p?_a*H$1y`Z=JeqlEZ(WoI-^fJdi;HjiJVI;W3B{<W@41AqaTd8<N z&(p#iHS)&Q@<GkOV@5JLx@)91^_^CQ&I0nixjcX&g%jd@U;)D}3rY!6tdQ_0^xj_= zS&WEIkF-ZfN#oRnD2wPT%a|_4f=s~*W~{K3D}r~B6nEb;+TB=6CZ+_yYAy{6FuZ9G zMO;U`=a=xjHh}xq>ns=okPQN5d>ML=dsCf)42$);Hna2@(c;j1oz3bd?^hMD5oyuu zg8k&@x96d><~g5);>y{sLzOoVPIh!adGunPz>ag?+krgDh3~e<Eyp?K*zEM_?eljo z<tjtm#PZH<hhOhxdMU^^I5U3;{h=nwT`g#fykl``6nUWB?K6*wMR0;x;Qm|5#@?`I zffDMpzAT~q<}B~<l$?=44dDyeS?yG`f8)hYQuLkMXF?rx(gr0DLk9}PE_8kfD8HYa zcV*?myloG~702YC2W(Id$;cl-NM|LHxH*Mbl`ws-tX}*>%h4<_K_Yg^!k+!CNYY$f z@9C=>{}r1sP7rxyhdECmArUs~7)H|-c3q`tNQnFBbK#+m9Mliy2kTU*4F#?Lt#&km zcBadufOEH3Y>}*vd-IBi<jME`yV?Wy4)Gg4By4;xOIr2eiz=a6^C*pRKknf2t6N;2 zglU@#FbH$n804MS%vdxD)L^!C*KuZAuB+i*%N8IW-Ydu|)eGR`Z6kR%t}{1%4#rMx zZCw8lo`2YZ0*`k=*35%q;*j-4bZ;Fdgl1R{8&uyeT5P+=i&}_?>s{kU#H$e_Mz^XT z+cf+5h|LO;Voy$(M0__BFRsq1G@Y~`Fq`4&Z!XzahYtTV^RzzxJx_$1w3U+stbeV{ zEV6VrX|k*q74oj}#53mpS=zb9;qu*Y>ZDoSf!<W{bNa^Em#>@BZD+{<#<(F`0elgI z$Go-_%x=IVSEZlg|F6ga^bA;I*z?i!tt5fB(ooO_!*C9IJB%!TQ!0)OW`8?*{Ej|y zclJi-S5?-q4n-%aY`OVmwt&2*aloO~)!qy^{#f16dOF(v%!=2K_+hR4fUDzC9P?iL zzraYj?BeBf>&VmLi<f>n8EEs{Vs!97F8m6xAZ{?!MvOhvKKO-I<2c)m*3cWcUgHM% z+K4`xxEahaRycZL@Ye6iwPjW$NgMV@JAD3=VFmT7nh~cC2j+wAAY|={!0$JX2ZEn} zTi*WeP;gvccv}gnbnW7@!+h74L&nxuI$B|P@0dPf9&7V;kLG}+dw=n>vlWkPA%7To zm)}+*I)N&ZvRF2^KWoU`i+R+GL#7v=^mbf;OjG!HgBI-s_?-D&aLAEy{lWPNalPIz zcF8<3N$m#gvVtq+*P&CG(8XLvZb9}_{k;1KY{cS4K4$?^_xTX#YUiRKmYg~^1qfQl zVo#C(#An%Sg68Z0G86^R@#?@5$R2j-=W+#k-*@Ya3v%GU2z>5Xa!u!3zbTx$_?73* zzd4p#?i7K$?M6!CVNMc#x!ApO4y;v-)w{!=N)D&9Vpi+87=aNNy7PA;`=UAD{d1k{ z3&1Ahd7ik%`=sLA;zByvLSVAcrEo#+L?H{rU6GgXX+{=z%n>{+H=JbzJ}CZ6^mtpK zs8KA4DbArgZ-EiU+6W^%7v{%#z;iq^Kw-Q4RBY3<VLFWcWX?5sTFBt8RV=@yJb>>E z`+J?AQ33bW6$jrOa~|oqsAmHeDKI+eFjNvkpWd~Ya<p*i(Xoo5U;k#5KYG|6%kLuc zB^Cp<D`9(Mgr<EHcZ}h)C0*7aW2{{4h^*(-O3t0q>8{3HB<rbo=I6LlRq!rP_}?2t zdsLufuMt@yoiQ&ndT)*cE!ZcF7+s8^`q*K5F$K)MFrkN2->iL?<pg3ZC3DVxikK?U z$zUC{<3#jEFqt`VHgn6S_VG-nY1W?0#}PEw2>1(3oT!z-ioO;0Iv#0vnrP?y&8i?r z$yfN+>aw$oFoV6|?aUjDx$m9Bm+utoVOU(Qjpck9a+35(W!BDo)Q!88`raSe@m#$F zdKS%Z6wOVyxGmAa57D_<@g8gfWVh>Bcp$=|7QLnnl$8ah4t8H$&*x^;;YR{F0ETGE z4kghJ6`^~6;a^SFu*@-3C=BE)2`rqw=evK~dIczA`NekOrSHA9kPtDy(|ab<MZs~n zZ+(}1cp?6>(f%eg50_>xs+9_2+{`?01ZtPAxFU4MOZ^Sp9z?D=zbfVP{s!ZW<(_zY zE*uvY5+g{`!xxl>2mwRm`0n$%U8H@^<U@_SI=yg1aGmR2OLAR5?GR+auE&nK`LmP? zww3BR$FAg*uBD7fz5j3%g=Hq;BKO_c{c%W69auL`kV>D_P<oT)OOW=uzn*w_fP1Kl z#8^jJjEYcf>Ke(%NtmS^r*i3f(^{}bS>_#n5^o+hs65vG7VfAtd0H&xyqH@*Qu2w} zceTv;uxk-PfB`x@zjU<2rh(sCTyWS2tjI;Z%^vGK14rb0ll1qu+u|eYsgwmEM}(oP zo>)nEnVs|pe<gY!Ey<N4y5bB^I8pL`L`9m(1zQSTNb>uV7Dsm%I@g%^QjmT%%X?fu zy@xb5sG{QLQY?qw+O7KcG+l-FK_`0mZ6K8mj~`OwJvKk<*kKdyz4#^C^NL-{QHRcJ zJhp@p`pSTw0S2;StBk?M7dS(1`Fn<;0Q{sp*uqkseRt#eN|#qq2N<3nP8T@4fsd>7 z!no93x@UGI8Ldrro|UX+f8~%JA9;hW;(Sc!m}Il9<eN<Xf(rQTu1C8IfZx4;p$#?- z=}W;R_7yOtYhB$U3x9a!&|ufWW)#gMF<gclDv?g?=j~+nU@B|c90<8r5b5nc#>7v` zd@ak;T*BOFcjaSdQUft*q?TpyD8=2j>a(xRWbVL()z!)WW)W9aM94@zk(qv3HJwZR zQt@s2t<3EEE$4b#)nI?s+*hCJu`T8$nfW81i61_nPpcMKe0Kn{ivqGs=VeF3y{BK? zox3EvY_Pq?UA=5uz2eBS;#j@vTfN{SyA~<C-jK2uC;L6qcQU#9`^)Md=b3+0S8u%C z9;}z$9G2aROWyn}yS?h$HCw%XRK2srv_q@jWsz%u$n6Qp?GGpHU6MOc*;$vCot_|n z+papWef=}8ci-{#k?-pW7rEm|xf2E4ah%*Q`<;_axzkHKzh27yX52Y#kULx5{{3F= zPv`d8XF1x-?LVt>fAQP2BRRnB?Y~eIP<I=^g#xi|1I19_Z(AT$6r^hlY>1+Jz6H6C zf`)F<xuNK3Ok2=U6io3WeLRXm%J+l8Ye_S|g-jGv(iW@{1%Exv^Z~^jKMbElvD}qC z9CKp)ApLU{h2Z$eOfS#II*j0wXa6?DCMM7Edzd9^wLrj!<Lcg~wEVf-dy{tZ=l%A^ z-Q~HW_V%=D3f{8x;%j&`Q@ILjcxOy`U)NmtV0z(Q4PTlm-^Ut$bSn3SD#m&Fi-DUG z^3{i@yNt*3f@m{-E(M|E0YNbZVX&WoYBf@|RwRCp;Q-~ny(i*UJ0e|sDYSM*D*$=7 zO6+mKCO&{QNkO8tw$Hy-vavRkQY-aA;W4#VdNQCTdtcPBR%S<`YeYfrZ|$QK1r%%G z*M$HY=UoMPF~xRRoq}rJ39lm0l^VsXiWHQhGHadk?E^WtI+Yy-)zCnhC`GjowQ7$8 zrLyYOOBFOq55!+9YKGQoz6-qcp-$_H!sSUt;dw=E;acq-MZx1b^npBvzMh{|2|G~p zZx`x<SiMfAysm0J4_Zktsz&eX;rZ+J`nTl`+zvVYlnfPX45O6T<Liw$<c+hG5QR!6 z-zX-pm6#jruXLeIKPWMMR5DAWn9VD}*6PgzQCE+ZpnsJttSJ_($`GzMmWn7VF=ddP zvNZ?A8m$a4d}DJUckQ||%~9F*(`#El<+G4C*X!i$;+0QRm2afIzEP-r^74&+pxn(y z+MA=d%D0}$DSb2N`S??1QhC=%(ea@6*0J&dP1#BKwG*q#-uVXS*4K_=thdD)q=Xyp z9?QBIHk`>e93mB6EB9U8RJMFo+-6?8%8_KFR3sj%c)YImC~Tm`HJmS3(W*OgXgv}s zZSanl^_e_c`>NvWSM9sg0O$(2`#VJNxWWI5?0v3AAXxRDaOlO0s(}})1JR8jsblvm z$NYwk!N)QoZjE4TRms3(K0np4fvT{_jgW_`Q@O`F&yT-U9P?x~K3tP|*y<AzC?7F- zJoQyIGQKKuM|JY3G0IB@N8d#M@%S5i7(1&PUh^?tt_gPGgjF-lME3-FC5&0MDVD~{ z8t10A<E<9Iks2SRwiVMv9AHVvYJyv<B|fW9e0>sgU4hf^AfPo2UZ|Eb<DWEta^;_F zGNAPMILz#?8tGd-iS?H`SM!tKN>9ZeSjefTalA=G|FSe}PM1>7xc<QUwtA-Sn@qo7 zHlfW~H<h#FAJ{%t&k1~!Q~2w8X>)Fp^0USVH{Pk|J%5w;@t6H%bAGFG!P<jcJL-j> zl#?IVIM5##W<4Np+z;jor%g8%S290W)tJ`OC?TYjTy2@OX?YRI{L(F)>$iHT)KQV{ zerQz7v-oiFQq}U(otLE=qJQNX*Y?ZmH1eOFN<43Q6~9w4e>$?<QcchN`uKF{OoK+5 zOs23tl=!6aYNn+I+){aSUta9A_PSq<;qN|E%{RJ_OK-P+w{LAoGHVEJ^@-AKT5D)} ztm&84+Wc3g7X9#5sb-n#!(`Ue<kr@m0L^yY<o5a2uI1LZ#|kaSnoIkd)Za-|R;_oO zZ5<m-onmdmuUnIKHM`zzcN#{lo@w@kHg*kYcHchpbUSnWsQJOKwI@De)?BO4Evc_C zf>P4fA65H7QKh$0Ypu3zFl(!KQtQi@)-XEpt5xT4nye_M>EmCmb?Bdg+YPL&mq!Du zN4r|dQCc5JotMP_jCsk5dV?g?F3-;DeuNQZ>ha^&k0x$zPo(KcP2o|u1}|&T{<QjE zj^QRuHtI<D>xd@*S+xa;rFVW|BFK05Pwymmv^|>r_-JnC&&pE!*XNJsvvk`G1C_b| zH}>u`sEIJ(7kxUR_uhMl&=G+o^ezY}AiYS3h=pPcp@j|tQiafaQBaDaH0dDHtAwJ` zn<yX{kLP{oy!YHWckaFKcm9)^?Cj>t&g|sb-RGI#A1t>4lFHK(wZW}81&G}167Rst z&_&2uMKng-R+0kCZ)nx|b$z|HCxVTY;p>*iK3Ss;Q>qx4`Sb@;s=59I^`)TQ^OeSA zce}L76R{A=y&wKmkzL;;HTfh>BhtG!^fjZ>LEJ3JRT5hKLjU^*&9%Q8#2>>uf)O*< zG{xzVKl`MqQ?!oCH55DE@B6B+=RT3l0|{Wg&X#w{6uZRp9)Fj8ve8JD^9YH8Pv}-p ziC=%<gLiI7anX*U<=0DBO?B0cXO+7>*+NQn(@*9_M>Ab{=5ClKYEfp@`pm;PQ(Skl zL3_(e(ylF%KjKE>t+x+PNKj_Abg!|8yDb?JZ>X{nw;<OtC_Z{ymKkM;c}%Ir`rfQ} z>WpT-`rOa9(erbe_1owEx0(Z2dNZzO1~|M8KKwTIHZ#!a!_yI;sW7Dp5wk+0sS*## z@A6(>!$8t%p&Qpqj1rZmJSeBDDhk!^6xk_RdQX&Fl;3F2x$iqu@6z{NBlm&-Li3&P z)9tyzfy*Dl$yhb>Lhh{fr7nDN&$1NlDZkPADvB}tWnZeW<@A$u&Ssx6dCEr=)fwNf zml~u}yv~38@MM3bFB4ht<nj5*;rE#j1y4y&|NaG1nRfumrN%nI^d{z=P<FquPSW^Q z+O`|cwh3z6A#o;essFx|s@%^K(0g}iCw?b`(Za;yBeSjF=Z~x|2^PKV-Zh_lIqwWx z^l^voeD327r@G$HA1gK9FPLibZ%wIj3FhTyBtMM3uPS`Fd`C5JxVwY^q-CcM|Lmb~ ztH0#qu)=2(%MqnHzljl*l?2PtE1NYFqgM}yEk9|T?M!?^0;#RW(B#sSW7_nlOxNTG zm>9Ffs<#>BcV4YyhJxPTl4z8T+GNVQhNiZjv@n#OnzXbqwVtxJ^`Dx$>5^zYZR=e- zHGS*Oi1my^=<d{vQ#kdFS=*~oO=^7)NIA!YMvYBWm9z>Dx7pp4b$jQ1Uyj^Z@NeCn zUI^@@zPWg3Kze5J?q}1ROZVseXO@Cj5^sJ9-K?GY^6+p(#la^r_05n^)lS_Dk8J<x zxxK+oCZY^`!0bv4f0E5=ta#n*YP{U2&06A>z1g*7G>z?gs-eu>dYXlq?bi(3fH{ve zVBPgO$(K^I*F6h#Raahw?#+EK2&b{zD2$bv-zZKsv)e4q4w&C8FHExAs;sP=->QB& zYPVh6x|g%H2jMv_&+)Ijw^Iz`VcU5<7qGC~ypnWluXVF-VejqX=&k+sv%Q7=4?tS` zgHCeU#e;78Yxaj9*+td;U-rq|IvVUBt-ClJlKW);W8}*I;*U>gT8HD$hO$e?6BgGT zeoom2F8!QwNp|=(=Uu<_Yr(qy-O)hk2iue7a9YRHl~~y?r)#O#9M8UH2YxyGUYP9o zd$Y3s%kS-%pB&G3Tlb%wf9a%kx;Pw=UB3A7`I^(8pL2oBe@<4Cok(Y!^~<F5!%t3s z|D5eF|GNU&P(Yd#EL4#Qq|ZV@Wm3Ya?-9ZLY-n<`6dZFC5h|C3rVdDn;65gjq1m+P zlTspu6<5eDvb31%Qlj{%-~j$J2*BY|rn!`9{wGlL52U%2X)a}&OPS_Urn!`9E@hfa zndVZaxs+)xWtvNw=2E7)lxZ$ynoF7HQl`0-X)a}&OPS_Urn!`9E@hfandVZaxs+)x zWtvNw=2E7)lxZ$ynoF7HQl`0-X)a}&OPS_Urn!`9E@hfandVZaxs+)xWtvNw=2E7) zlxZ$ynoF7HQl`0-X)a}&OPS_Urn!`9E@hfandVZaxs+)xWtvNw=2E7)lxZ$ynoF7H zQl`0-X)a}&OPS_Uruk2qrvJY!(+CL)iU<pdiU^B|iinAch>MF#NQg;Fic3jJ$Vf}c z%E}-R2zhyV1qB5~MMWhgMP(%=6=fw=6=gLQxvQ#*8dsGyHB`_jRb4G*ZLO<lG*U-L zTSre<S5Hshz`)SZ(Ae16)XdD>+}zUA(#p!}#=qFu+SuK?<>2Vx=;Y|+?C4<Ue9PS3 z7VT>zkGUm#-%&QqRrZM|;)$Q~{d>BYNDEAYt$&uYcch1Ru&0-=mzR%^r;o3vpTC!X zU|_(VpnLa&?gu{z2@MW=6#DpSC>HlLJR%}8Iw~3;8yBCDn3R;1{OsAYw6wI0=g%^; z(z3GCv$L~vb93|Z@?N}nk)K~s_%FpJgyPcT(z24Wiqi7R(u%6`%Id1B>YAFG+W*ME zum8DOQ`=ln)*GETa4%>iz_#bE+1tm+_t95+la)VZDlZi(uazo)uTb8pR^F{q-K|sK zZPedtv)cG@Yo*tH`tzNUdF;qS@~6e(&kL<%Gku?C#s_8>-_I<)o?5D$T<)G(oSk2o z|Ig3D|CPnX#pUJYmH(%#t*w3i`t{rYJ^!_5b93{*aGHNm&HtXg|H%ITk%NPSqyHm6 z{#SneM^67&PEJn#bI-qx|2_YX|Ni~^{Qor<7Z-p2n<4%G&fovYzn}k;Y5tIN88i?& zBjAh@_Wcco-7$26MtKG=i$2D)Dfle*zbx)c=F^VjGJI7skS1nXWk2w$bSM+yHkfDF zST>TYdUtDapt1Z@0V;xm+o-AHbFo31gu`G{<wUu8vC#{o*Hu&1HjO?@gRiS+>YbD4 zIgQ`c%r$yVR5=X2sa<HstPQ>}ZmwH;8}egoX{fn=`2!YA$z#&eu<}-ZCjZuO%geRC z6hY&Blh#*Xhq4rWzYMoFe*Z+!j^{CLYucQsu&j0*X?wjr;(P7+{hiu3y9+IMx4(?M zZQft*h@j*(d)IQf)}JQnH2SXf$M>;f;{vnxwx8RxxmRT*pGmDP%yp6C|9djc(v{ay zDkBkedSWY)OgFq%qS$U%tVDA?*jS0-ixykO3qAK*jTI}aSdEi<v#}bF=oMRwUzvJi zgX2hiZ4*Jyb9Yz)B_p_=qQm07o@yXcx&F*Vd2>C@Tu=OKy44NuuNgMCE5AOsf3W#A z(>YrFTbBECZ{d_rr))0D%J~X6^wf?{iOE_l+QTop*DJs0Kl-)#y#Nc7*dRo*_-qv7 zMXEN65|p<#ic|C?HcQfP_-vMD-LBd!%To>$mHP<K7K!u=TPxFG{kUnWOsm<L@PgER zaYQNmb~0}0U(0OOcHO&QTif*=Fv*>U9v0u7m;EBuJFkY7w|5%H^dxtiCU5xezMj2Z z?f>faURQigH@0n9f%bWrkM5mUY9n&>3<}#aEo1WWQm@{*?zf+QtKNTq@oRhk1At8G zpaa6{chCtJtvTqTQrS7^rqh=?>|wg;cleRbvj)-LIEIUF{(ygI(pvWZN~#7`*u<9n z-VsA!dv!&Tkwj&d>yHuD?=?S0)lYVQd_s{)ACKv<`X7Hb5Uo8PH&NL=o-o&!{yAxN z)Bop`jc20bh<yD~oD|Pf<KY(Cd3=@5rrBE6+qYv!M#E)!3>0Gb?z)~Vg?z6)A$@st zvU{?O{r`|@l2n%nkwJ0dRUxKBGW=;H-&*Ml-)*%?y;Y}Nyn7c%E|NJJa8<bFd)@io zyOX{1{SGqOi-R84z>C9v(fW&{VU_)hA7lEme~u?_2LAau>skNjSJy(o`A*(Fn%@$Q z#IB)P!Gb5hwC`y4AIY}#zcP|=o*nB1o_??YOS(AO|N9p}MF5Z)bbvSxuy7Lsh_$~1 zrgjicmq37s8gx?F9pKo82{09}PMTQ&Ri#ao6vm?MRpBUqmD`j;++n=KJ2QGYB7w@& zpqpd<AX;^}kS4glo9FjI3<<^MOvQxO9A}QO--^I*E$UM_j=4UOh8HoF8+??oJB+g# zE@El!|481(7ulq`EN{}H8NGqG?sMjsaV(^ey?2<1Nhs#}ZqTPTf0(3jjFWIgce$4A zM^YLV&gY!!SoQ;w@g^k#tONc3uH01G^l<ST^m?v*FWtr5Q_iDbQrcDsFtKAx#PkgZ zujd@4S1dZiv<fL~cU;-r@?avIuXG-C?lYGGbR~iZh8%w%Wp=z16f^1UbCPm%Z&WN6 znK+FX%@<(oOej+<HyrV?W5i{vLWQ5M=-al5r%Cv&N@>Q%`sVz|+b}6tGmRy`F}nK5 z;G&Fu_hp+WU2$3!37~t0+5pEj8BTM*A4m?V0AF24(}gxf&_Kj+d{iriXu3`{QKQds zc1$m_0J@UFE(6{T1MU>;Lt8e}16J5o2I!*><YveC^XU~Jsk(z3f}Y5sSfyb;aDqf0 zjOA-u!RcEn%wvoui`0%72nJD-ecvnsv5NdS`(DJf*Y$Lo1EBPX&kdKh4-}BDGG}TX zvlCWeLC()Yv{IE_s~5y>r@q!Var;VY4uxjdtI8uP@dz8?DWx17;|*q_(d(QkwS&Mi zXXrNfY2QTSZ!36Eq7;ao4{D(9#u|(0f-2E<gJ+2lGGdLpKIe!r2A9>+;>!STo$)?q z&ct$)_{ibL3*q0ck;RVeYW)xe_2pX^l~C9Hoo}ENZ|HzJ^hYx)X2Ch(C#~&@(mvL? zCKYdfy?#n91-Og4)%6Ya^g+MB>n;Hq^Lx4+jjapwCnmFRT%!n3@1SCmOE9qt2a+9h zaSReH1P%BZUR87f#fZs5Vjxz3RkXnMLU?SK5<N*(kCV8C!x4x80RtU5t8f@)$a6+x zY>&h|(dB23P5k)lZMK`$GpT0GZ_?R_&TogVcYoU_tiJZ<IS&5Pm~YeKV-WdQ3y~<Q zgN0UQbphKD3EDp4tT$5vmF4MxPn%YN>}+~M>K#~}$Q1xaqeC{2^EO#lD|H;Eg9K!v zhf#R((fb|j$i24*nv0$Fg_H>hn^n8Mdrr@9@%YfmO$x=qc;o36GpXc<I}_^3%JjDn zoS6Aik<wzW1DU^SkcfYUMW@|R>j!%|AF&^#nt;Or%nI3-i5~>j!A&w*Fv!6P&QBHF zUZ{@Z93*Zy{>6NnaJX|H_}Bq`7dHmXlS}kZKyrz46vp2^)_yEKqeJL?>Zz(k%EQJB z`#ywC^cSeOntv7J;iCs>b}&bBeUmFzd&-j)#dOdNiOA}J4fQ*5teWgTS)-eMeEa2n zhn*QW+LX7^w>N`-uzvBR#JxLHkS(6r4lK^$pZINg_sx&*kmd&~3oE_LEu`vU&_yBV z)9okCRn~RB{1fM_7maAS<B|Qig}eyBwc3UsYMA#NoO6IY|E^8vTNf+SD{ntK1(s4T z=2B+BNOVdh0>)dyoa3ou%W>Z!S-_pN1zurfaGT|qJ?pi7^0#m_NrK9r0@Kl`(6{{l zg;_Awx4brWQRPk-6O;$z^SLu^za-YTAA0jyU)^V|;=rS$)*iTU7^z~(@>d}67H1ao z1LYa*C)m`8rFA#Y;HsN)QIs81kRE4T_SCy?%FZ1iKe|`L-ub8V#s_;>|NcOO954hh zU3K)gD$=_gx0grtH5z8syOO^lx=i54n4SV^zB^PV!?%7MeSP=6oAe~;emu`pn~>hf zCABD=>I{T~q|3Rd^00O0(b>T@zP&#+!|k+crBBEz4&F+H<gQwkN1xaXvOa~_U}5;X zkIL>I_u2jO#9XXj0|=W#Jj~&x=2XIW=<j1WTEe;5&_6^mVc+kz&x8xv;6!Znc~$-1 z-t-d;!O5KB5URT3S;3OC*!Qdvs#y_g6=;Quhp^6vkD4R2R3mjZP#QK*1=u2WTOv(n zBmdluq{@ms`5tLy6Qu)>k`{@g@rtsajgrAfX?(XsevfjuiROey^NU4Gdqw-rM#siP zD^*0PY((F)i3x?pAp3DfUNMhmW5%LlpukAWjhILqd=L~*g7D*SdEpag@hnkza3TKg z20q;;b`lZ`;*Wja5}PMxnzccjGaFl^8dq@~TWAnhkrkKd9v7yHuR4uuFwn2@ig;-g z|7KRVQ7oppCH`H7CpkV?lMP?nf^WA;=nc_st%!aYk}y1*z@DBktD7*YnmBoi8dHs) z%1WHCK+Uv7FPtV4PmxP42`e^9E2>F#UP)Umi5p^x+owsRvq@?2<m1`+Bb(&Y{)CgP z<ct3J^A>GR0E8EXE^7v{O#;mb59lL-7DPvtb&%p%GQ(#0hpdMN6$zXDXcPc)4u(Xb z?oh9Tu8l!po4_D~E$cdD90g@yf+hj%RMtuGBy(3t3B(YAGVSobnV!aI81+|GI}!yy zXG{Ulp=|lm<k_JjvCml6f#!r1T6a)VN`T5S=(;{CfCy8qOrtJ=AU09#m^6hH&{=ny z##|&a79~vwL8pLQe*sY)&rvBre_N1$HWHnUyf^S%HyD5s&pc&J@iV;hfE>by0T^J@ z4X%JiLjzS)kfP3D6~Y7Q16vhmpxi+gSqD%BkxeQF-k{5Yg#tL8p$Y_$Wk)(}9r~|& zNpTD!O@OdqA<9^Y1>y!f9rSZKl7|i|odPmF0G$egEmDBW0H`SzDSZGjA_BYFp<~&3 zr)xkX0z@PQ$%4r<BmvTFTQg|aGw3EkgkFfE_jAwINN;Zxk1c%X%t5##f5#BcXAX}9 z6rejmXu5R2Y%njNfHD}cPhOy92s$t<Aftmo?LYy1X`)2fO%&`V9~py0;iw0gQG!gg z0m3R#D2M^EhP}981U(X>783`J6CaK9QP12&$r9nI!O%GIG;<={0E;vv!n<0L5=1zq zM4FNjR4xo)M#!>IEH<dji!*%AGgd4=2hyW}nqx99+@34a<r?yV%=q%=$f0AQE|cV? z*U9o{y}^RyY4QlL)ELBq?!h@2Y(fV$B|@(8-TxMvf72$FGAoL0GYO&yk4gbDnS%sS zK+;cgAM}-iC<H_R1&?URKez%pO#??YU?T0{(GuxTa=`R_ut+{o6d#NoMTo$ra}nYH zYD(St3Qg!h41-m7F+dT%LXN6JQE@U!zCw|Xs-dq)1yqqyW|6BiD3cfj(E-{T0=I5g z8E(QAI*Lyl34a=klg2{iLjkBQxI7A$#Fycn0u&|I{Qd?%6-*Q7%W!CLPr^W+WkQVT ziroPyt3ik;U8xi%?R6!PnE+vZ4w170j&7EWk(Z8ogY}((0sv^92-pM*;l@Dx29c>V zpl{L0`#$AbS@}>Q$T2$vJO|>9MaI~{Bd|4j6tA=@k<Z#NJjQp>h9m;Muac(~qiqgX z--3IZH(Kx&UQr?o!hnP59&ijof>MA%2(p)3jT-Sye<!MiC8%SGE?(b|@?#JeGVn}j zF#;P@J5YR84J;!LUd{>aBQG^4fUZ)&PK#@q044Nu5bKmI8uH>%@!-|pwE@m)QxtW- zCtiSbN=K(4;;0wxmB7>D`h1TU=YnNqDY<v6A?{aR^Gt*I29ez6#mb0QGV_-#)e&sB zYEb3{X&j9rR|}YKz9LJ>6uVk^D%e(T41YG5N``<(VhP{MUMA5&Z8x7ec2tQCG_p{n z>GP49@sW}7kr~rfD>fAN3{}66a~XGro=(8-h7`+h!cZhNaOv+lyN7@zXQ;zAFewEl zvzb>Dn{LohoEi)mqbRwX+nPiKovuA|%7(4ZgXFg0Ohown+h)7DW;H{waAw+ME65}T z8SM*196<ivj>9f81n8h9be(4AL7oyQ35>z3N@UL4R@K>75ED=s1EA-tj5uf`Bc>jm zy(DvPdlirL&Ulq-2j`0Ik~w(!Y^zN|3KoTd2AI2!wx*wUH%jr5Dbe-x8o%r1tX4H| zI@4|$UT7Mt_Pxsn{fC1aH4to3K<kFuGjQ?ZcKdJ`z>Y8N9ZRiD7~uL@-A*oYMB>Hq z)f;4}4~1XhPRcK~w&8c<Yql0XfK^NXa(0l|5FO)lxvbGh<_3_FZHrSS&;kQIx9kK! zz~)4V&miR9U<TK4YX}AIPD}X@HWYJ81)A_u8(X1ZTu>5^EW6sM#RrL?>(=ggS;kes z*^ysv0?!z<<RyRa!3Q=VWS|}a)UN^=!XVubAslw^`pz3U)X4NY8jU5XZ}UNUoQo`^ z+98pk=4zzlV!Ojbz_>)|S!40)LdkSo-<exY^8$2%tM0V%qca_Je#=%q7FuKLV`&Ke zvyHT(=*MwFzs^Ih5kT}rP~;HM9AK}E0@GuGJDy-Rb6{&2AcYELgaJy7*?PndWG{B+ z*5E=7;>nvV30EQDZ1B%Y(h$V1O_UN;o)GeEFdrN>9z_^pM@^u|y4pYHYo%C9U}5qD z&pN3__&XYVZvhALdXTq(osxwdBgpogB1z|w&*uZb?>4r+Y5&628%))w7MC7C_t-ZN zDPj(jw}m=N_mP<cWd@3swrn+WpcCHHmgMzM^IF5XLS+EZBOmaAFW3~DccrbaKlBAF zChzW69`i1ehft?H_MU0zGdFbv50#Fv^DWkc%F6VAgH9-^u{cm;JnZURiNhRHsPbiA zWqD7j{ASPXM`>^!*wGGr+;G11&u2xp@ix3}yLCZbyis6BvHKZvBNt_03sv-9;P#&% zTv{~iUmWFL3MO&*g>poH_L>4ILP|uI7Hh-D{vd_<-bUN%N)w<<kH2&rFa24os4~{& zIhZ8FLK)+~98()^jUbOJm-sMQw}h5|{#j1Gw|s6{;M%bCR~zhL4s#d-@tebF^8KlH zknlR9g*(U^0kfskH8BU@G>3}O!SotdxJfH|9Y7BZ>{~68L`{^cGXT{gRXg${i2V#- zpflp2EK2AN;?(a5qDlaWl@6wa0!o_01UeuNM9_o@_y%^}NCs+>gp^8IB{K(mG{8KG zM5nn`dl`M%I;0eF;c+F>5i$GQ4eWwJk}SXd27|w=-8brh4E==OcnA%80=O3dvUmU> zS-wX~e))>s``W^t5UZLn%Z<`DFQ|X?C;;0!7z(>(b|dl0H!1JpN4t)W9l)?rNLJnE z!!O?@G?&9Qw{9JO_0>q3-z_JBVKmuDegy1b1X=UtTi_GG@WAF-DKIx_vyHTAl@xSf zywz2wTlS?OHeiV426i0-abZ9rSfDKt!iLyY&qof9?u;e@wRnJ%&M*<|w&U0~@yqsg z(l!|%)C2|O24r-9*+aW;v0?^ejn?{3(B2J1u`$^1y8T+S8^7KYz5JkV1SrSo_S^jJ zFqy9b=CHRM2OdNy{oWqKzIItYa$e(*?V1&H!68@uVZ@WvnWaO4r>>kx(ve8Lnefvi ziKnLG`zR3%1o3H)H4;cut;>7>(nElKcu<Oe8+4+8iU$wKAjeuxXeI(!vjMCdYoK3n zY>YG#B7(2W{!okrsvjJmM*uYu-!$BR+I%pO=0%B^gZ1dZwzWuU49sf`rinx;(xn2A ze;rK2wsKHGvf6fwFyAp)Cl87Tb>gc8W}IHb6d;2?^+p692NTI26UhukQR)p~avh-N z!6~~A@L#jZb6QmDHEoMeVEa!fwGOgJM6$wq<cmP`RU(-t_V=@7ByY!WVB~Qa*G~)C zpV#Zb{0%?#W`2_$oPjHWEz98YWMuXJ`9%*n<LR%w<O^Ps`I&;%AvqWH+Stj3HaLKA z;-B)G1P1#hqih<!1DHs6olc0dB+g@yzcZML4wUi-`81HEn*mg6_;Hv>I{AP+4*bhd z0)8?E2B7(SV!%*p9vwUxtyVNOZOTD$3{E?aS$gYWLYogA4`Y4+VVCdbMn1k+C(k|t z=rOP$tE{ra$@*}zw2uzfx{J7xY81Z@8r^6Mo;})eerGvGQvlYuP+!s(&@oKY5FadI z59+f_(?o;(L!GN{W_eIwUv=MNu5%eG^Z4;#G#}Y^e|P+K@aU~K-b2wVVIFae!i`XC zjH)w^Vl~?3eFy;~pwmgC<YOWOFQ$%<$dKhE)d0Htspz3E?KeZ_2{Fq0CbJ<fV+yxp zswf9luNU$~3nG$ALfW<7c+68@W2;>0B&I5JNJaBV<6isD!mf;|29>}9S?V3wh7p2q zsRw(wSEnCi&%@USXz!gmq`;`-W*TQy$5!Fdta|+)RFVZY3?wTwzS=jeL~=;sSD+AP z_XFscR|+e93sh|wt(gZ`i>`9MmlS(<XayR)5}`>9C!5!t?Ihz3sqik05SZncio?FD z;-`AV7Y^a=*RuFn_GqiKoV#DEq9+1p|MDZNn|f*=?z;T|8P&am!WdkZRjeqlnDa|M zUQY@5kYr=ck%@GmQL6Iu=l2+T!G80kSEdmL8!P%$91=kWFB|TC?!DsiPF$2XRUI#S zm4<*yCQuv+R%YZMc~?@McC3LJPFvh0UKng>Uypo1bx(zdw$vb5U6X*SQj3}_Bx4Av zK#|?LE3rYNDdlY0ulUlw5fM3dJzlz*_-tFo<IjL^{d*FHAHs!N3m8Yv6;u-uVb0c_ zsMK3=02on~#NP_+)WAka&6^h|%9$es5)cUpP;@jgBh!)1X4^GUc^<I}xch;cmH*NA z+RSKWS23?>Wp^(@N|kwxHZ1(D@GL*){6TX9qX43d0-Fd(<-b37Khx<c@OB_olHiRq zry~=(H4lW0W-~E@>Gmlg#+o$Svc_oQwT6^xz-&M=|BS2xgy+XrmvhPVnhVnwxYw|R zg@deEg>h_-tJr&*g+#_d)ne+0&?HtDHk#>7aMP5G*ta6a>bd1ybX*77GyCIMi2nIl zv2dsH5tx?u=NR}v{tr<Q7k7mD_o$2+ES8X_70rXF?{#<=_OfrC@AL9<yu(b=-&`c? z1;%)dBx48H#M4!8a+gs3<~tVcDOSTiScpJ+hb(r7Sq^tHI=wrbNJe7Gs)9`5$33)O zk1Duw$+&)0N$KN7HR~SvkQoSn6gz}J=P(vW@{MmsXm&VVe^~$Ssf10W)yP%|?<t?r z?w976D0{4B^)}Zb34(v-%^hju>pgU9RX)>WuGIF?A*C}!JIgzpNUo-BK(&a7<|xsp z^gy8D!v~SWe!YC6CMy)Q2M`s+Fj%1h&9O*~RxCkNP!FuoJQRaYH+7Qp1GFccE3{bT zh4AXfh0xxyCa_H*rH*emL;ANUu#`nK6*-!t0t;kJSfOAti1-k;0f`wKi&hX@rB7oE zmq|cF>HD=<R`EKLTto^_XEdY&qadqH&wst7h`C#}SKcw)OHZ3)b1S4zU2VicDh0%E z(chyyeE?9g7h)gjk5on!-X6}@62G>o#WH5<s}@<rl&{)@YYOsz2+`*K%hr#Mjs!hI zkOS_Ma4{8;&a@BkfUgF0z^G%aSjtr*P%DMZLJ9ID{Vv=r=m_XDTA9_?6u~pD!mJ}l zku}EkO(nI`<o0T3_B9}p+m%e1z_dpr#$RTY#LjTaEd<Hy!V+1oUt?HI3;ESkuExvy z+?}QF#eU@N>qp+hx+`c}HZSWNR1Bkc?4Sbw&P4t7COF_%Kymu&KrsznWnZcenK3Ya zKV=m>=zYw`yEJZTFh3IQtV64wg;)9MO-5*u5!F~Rgd<$v$L^&OVE#ngaZsn5X#<XB zk`h+<y3;$9NIqC;K%w(IiVjbpzDek$dN&ru@@%Na%Ubf*2%RBiVXpwIYa+9V76~f* zPN~+nv_FcbBabC(3a%5Og)VD=edvA7PveV58^p3*FYDvKt6|`HvIS*s*a6s#xp5wc z0VM2SrbF4?-GB>pT^ua0p80E2?ESKB<0)wbp8HMY|KjG9LcjL&hu@|?ng^$hlY8}J zS*uWr5_~sXb>eHJx8vyk4R~z@OuLSzLy*ZmX(1H3gw8=n1ot{W?H?|tbZ5}>EP04% za8|#@M`OnyEca>knJ3X5l4U)gPu{f{1!8%h(TCXyU;7~~3%-h@|NS~Sgcm@OdXHhH z?4aTUxue)q=@W)rzS(yaLY3M(@ykHL0g?U0dK{y!i9>47BS~GSYr~Y5B&2h%I9sLB z6MEc)R_6)8{I!VT0Ue0;`^r;x!Z&@naq!h+v?VJE5%q(~x{^f_*Iz`m&d!+f^ftHa zdeup#B_E+=wF2>1?Pi<2h<d{UAMxSoW)*0N7Dtq{QFr?Knr}xbl!uOlzxG|~$%<48 zA*MnraeZGdJVkro@ELk(drKInUYQA13KOYi<zmSN`|&sF&o)xdqY5N&g`Y6D?`o?f zHnakzpveK+l(!e6=4qO#^L{l6oA%`E_O<e7XyU6~sH1X2!^wxGf4y|`cet4&GB&E$ zf4`h@%YwCs;>({n-Y&{3y_JKVp(*q)v~Xmarya(b;D$%7BQ5Hrl27*^Z-DDLUM&NE z6fT6GK4>9V`UJ-2hP;i&x6h4SLrM+unUPaI{L`@gblH2UYOuj3Xgv@}cJYObV6pql zeAMu(4(-7==H#hcVne{tkE-*7@wRH>+<wp?_zCv~!W9#9z$Pku^N#idI*Itk+_FD! z8fXw$aSfr;?{qgAGPqT(-3$@7c3)mK%Ckw+u=IkdJmJvwKXY=<9Wm41jbZN{>3ZA? zsph*v&~+%?fh+F2(AbV9h25XL&t3=wUONZob-Y&NRZIBy7&FT*u>Du@rb=2Fe(p0* zu*r{~Q2&l=)Xvi(vNc$boHH%r?p{iJX5nb0zBI?MQGVhSsf{l=`BBe3f4Y(KA^y0S zs~d*#FcBfnIWmOuz3g`7*NyEbnEF!5ucJ4I$f$k@jsFTr2ogx>FbMk%)9m%tNv%8v zVnxv^qcLVbL<O181<c-uJ^xVpO@BWOn1n6ItBgf8KDkf{KR*_K7Nda?0vV4o^NOY1 zTiy*j7maH<dZ_s`4*PfE8Qd%Od?CUoNOj+hFID?P?odXaCB;V<o(#Jy31dKt3U1Af z^5`wm%p!QMu?mHIdTpZ^_+4y)f_$C;Imi-?BO*($V#$2eq$1iXCM0C5)f!X6`-|{2 zVqh@@h{Lr|*b6MCiW3LOj5vchv#5luv_zOPl>sEMC>BHv0;$;Ggf|37*R*80G-aN3 z2}A0lXS-xBw4{F1d^5r!%p(|8vGOHa;{!MabDXFbSO_aU<O3gR>5}5orbR`_rQl*i zsRp~Ta$;cd16JkYZUuL^^1njo;ckr@tO6iH+YdZ(UZS<Gqx_H~I$kFRpd+;dQt#5% z(80}jYj|vzF5Y@`BMijpoS=Bzh3ohzTcUf5t6SHvM_=bXL4c>It(>-@nbn<8bd=i{ z%N2ud1ry1+(>i#y$q9&F^$I}RDWIe!^*~bZgKdU87tiV)`qR}2bp!EVZmNDv`ksDo z^S8i)KY;4aWkFY)*(dvO5Bm%Uo`sY6`u5#=OE7&8i?HT*QZ)&!5wm*8joyq1_|*+y z5?jBIVr$|n{YosJdjnYBA0hC$!_b97J*(h@1=4%~?7H|8munEO*h#A@a#yki^G=k7 zN-efpZh4?Ly0{b9&?(s{QSp`_Q{3i_#{I?MDX}0qb1=dNr%?$Iru#Q;g5oQ?o}MLD z<PBC0CrBB9<(!L8vT$1VI6kf+IUAguI-s`1sM-%tqdN3T3NJ+mUgFD9GzUxZvA$U! zjE0AQ(;7NPsmEb~^$_FNk>LoGu|5@Wa41=pE<&)O=ym$wn;LkVN%99F<0U*$jt<P( z54y(0`q3Vw--ESq?<WoJ3?UUwl*flV?&;bl=z7H0J@t;jgd4vqNob*Z|5Oh6+7H;D zZeq9t4|8Lhu|@s(96r+;p*fpIJC^Y|wXCQZe|0S4jT_=bqH}FBVtuDMs-ia(-1ldD z^s2epw|k?xc(WHaqrKTLeks6@jz>4$QPE@JKhw*8=HVZ^tDY%->MKmoKz;h&bM5b9 z`1=9y!$xqf1pH~W9zG<l0c-Y9uyWTOes#8)P!U(&5|NU}Se7-`OAiM~R^>d5JGnCu z-GasB=u57Qt~VLxQM@?S8U34wE<GQp3R9Ej9IRZc%7={eF^~6Pz>5Mo`RwCD+&Q=g zfE)pofe05cC5?-hjwjiSgT2N@YsaO(j?4TUmxWFsm@VZ-EXs#oRd0Q+{ryVL!%{*4 zBm{^+%%=5tf#rNH8$-gCLO_BoxZ90*mBfiF?GtFzSoNg|&953-)|0v(lX~|j^_j=z zKcWlQ<#`<}4L(jvs78F1hZl9yn%sxeVn7H~gcNE#Y0SzDYOT*~eO+nFI%>)$W6HL4 z%D_X7uxO!JYo)Z?Y4>x=2|De}JnbSp?W%M`CS#JY{@LMcr`!E$&!}myjA`%EX`j+g z_mL?Iqlw$Er(Yq$cT{n!2s|5Va1@^`=a6hs2<$btqO!ReS%D>G0h`?5!5%j`E~a<r zZc306XFd~V;tXyozn+0n*vNhbu&G*W3Ew;oQQ{w&!ARp{J|<8$gtM3r1k_slX;}Ju zOc#}0XRH7U;=`%fELj@DImD<_yuuYwU{+VWc*h&F7qv1kl8wPikr=kc>yvpJaEc0C zrZ{`v&zgMux#z-}(m!np_whNkoF;CT`AYCIQ}Wgy*Etap%46fYQFGdi<3;yv>xEfq zyliDrz=S{6i6fo<KW!SZ;i7n)DBLcR5FUG&sk1vyb!yvg5qrlQZ{h>5+Z|VbI~UQ9 z<v5)|OD{fstj<XXZ*ax;a9@A_b^N3M;yhfjircdPV~Qu3e0b@4)JxD6zey92J&8YK zvEkMbD;=0gej%aVntN&1!(xF~DZbkv;bX`1K0MVhTS~f8%E`aE7`CKO2C?l5IEt1+ z5Sr$zv&|Xb>j@3)0Rkk2pTkRYtVq+Y-iM!$(d->0fl;(HD^#726KBU#Fo$1gfwYIJ zxF97qP6UYD#byUex4XOaLj(Q|k$PaAEQkSObeCz)zR<Zios=dJUjtWAOZPfycE#{t zM!r1Oz%NU~|Fl;R`6nK6JCehwKl9Q3viSlINr8H&&?nJdEG;H&ENzZCzw#yS(mDSW zCel|r(U3~y`*D=2#ApvYCae>AED<+GOFBpnI&(o!y<pFBM1%<a-X-DBOr0YLL<w~} z2|YNYL4*VX56=QZ0~`!=Zy9B%IVM*5v_9`W#XW832>zUtdB|3j$`<#MtqNFJZ4Mq? z%2CO$Ek--!yv+WPm=#;emN&q*W|K3p&6>TE9nJpw&1crPa-dej+*>{oI`27=(+kll z@01Q$S+Q>De76L2rV<a>@PTj&J$u-laNS?oHo2TeZ`QL1I3*$LsyyzJGAY^t9M?tG ztGpEp(O*+z7lQ7rhlQ^@*15g9#aiR-R(QzK5X+&$#_3g-)tK$>I+__a_r=33+sH8+ zYmt*lUTf2vi!5`CLEt<Z9Szj5rhD%0Z%Qf(J%R%wT*}}kq&HpHp0A~heMgVFeU5V6 zh^ob;zE;5Z$p%a!9H-^J-EcW1xXZxl1qzQb#n*De&3%NV#*5^LMOqZ(L!9>B41yLx zB^pU36HCJADo3@EBI&In)87J-1i`Ca#bfdUnp#4>+c?`Je)}Q;?{n5G<HD%x-p$)> zOH*E%zc%8`zAQ<?6|Wa7VsLqN0z}YO?x-+QV9PP5=joi6OxM@!e=7-HeB^$3AviYm za9heYf_%7A{-e#zBz|oz{Hxv#i|eJ+UJ+LE!tLJ@wpTaX-0-h{dB3dlw&(D194~2o zfR|v42wAt&e2*)BPSyIYq?{dW(w05YTQNuzo6b{0D*5L1<kyyTo9|l+uS^a2(0MZ5 zDX3F#Bl3xZg6Tq1sYBy|MBjb*%ebroIvG8f*7dEL9yRR8-?b?z8pLSnIag165sp29 z+6+CZkFGV1za>`{sXl?EM+Btb_(<>e5<jn26N}vsztrso!G(@-24$A3$^qLCYL=Dp z+gsgV@k-qS`(;Y|-}UzE9_%Zna1FFePk3>hX$C~|)eT70DIaL7Q|^zbVWLy^Au0mj z?PO|RW0s2dKdsu6*Gunxs|J3OrbF&;Bw->CKoWMI6DW?KxA)h+NY{!RvwpZ4Pu$<g z-&=)YQu+@+7GZh}b|nJrS`+-ut-TyPHeM@{;t`yU@?hl%x;J2~;+%1lrCU=HUrvJ* zUaa8A_NsR#v(ojq$|zE@#Qtk5MmziSCXI8U8(_&!kGti)b-7=w5zTKhdRy2xaLR}X z7NVWPNu%n+qlnpqPJ1N@KE(!*kJ<_7s;rW{ev>@>t*IpZ8s|Mn%6p2m%KB+X2Dc7i z%?ebv?@690jTbhW2HF@1zPb5M!?tEbr@fK=%Kh9W1*82YrB90bAC#}p97ptn8XOP7 zgxBiJKQzDpoLX?z_<omf2kzjxI%lLfF7rd47<7&HsE%e+;OV5`_gSG2yRTZ>;>Ogd z1~_KBRp)%`6a<q$_-gbLU70K3vIuYkDGqRtwf(JldxPYAiS)g<E+;SVYDA;jALOg+ z&FH>YfWLE7kI4KXw|KH9_=2J`xa#<=B0wE0`?fLuy_V-e#D==DZ^+=oQ{|1H%zxiD zaE1){a@>_gB?Q7BBHty|!=wJ{W(LBaH=oQ#>MrE!BCStnCPET8yVGS)H8{_P8_zl) zfcyMS#<zRmDW@!i!3X*e65_+E9uYajZpE;jc{&BhfBIb;bNnG9)ZWoq&oMW6=E2+> z`Po|kzz>tJPCMi1v;-8jp6KgZzta)IXsf1oUmvDbyy_L{6|QuO6LiK&jy=3F++&)T zCHu6C4xp!B^0iLy-iLy2Aw_L#ur5i*%J{iVw!_7R<2u&KU1w1C?6o~u903v@n|Pnx zJzSvmM(v{%)q6YlgigqxvjFg-${%N;P}KX2+4`=2(SPfcb>1~U?#T2ucK`Uh4*ogV z<eNTz{+jOhW$hP%_vhV}7iT^qF0`T>Na&qM&;CB1{P#lX>6x+tXlzW!tOrM7^JjWy z;<#LE@)7YY_>V|XmI9wGHxMu9QBva#?$zOxFzl+ha);QFpzJBHUSmUFs1+?L;C`ie z-H=m=)}_hCRj{Z3nW$utRK$u4Wh}kac#ZcDk<mQ0;G><*AEM?)c_!^$N`7-qeqToC zetbU`w<`ZN8akxxKZmfdH@Q<pf~1Qua9)u`(HFyppJkFcyBiAj4usQLjV0J#2fA=5 z+1RMp5OfmQCFOad;o7>Ql#-r3h}f&m0a0MN9{kHxsPUk(zde`Nq3&?1gtMQ3UvcI> z@B<dQ97$g$(@E!_q+YUG>dGRQ%KIQoD>yc0?sXuqb75;@EU}4pcJJa0pCO|xDD_$E zrV-h@@^cckddR=FVA@1q<--)i+@+TLH-(bz&oJK!#c2U)!GXHZa<06MZvQ5HE1<J9 zCs<|R=R&|nWw2%7ht9r5f5@w8yATXFoSm^av=gGo5j3ku`H|c63y^v`$`Tu>F>C+S zxJQI5@(3;ZB64}o>LUj!PeakxBh$ijiEXxYn%mc?sSs#9<uKE!Et>v0T3aO)mg80G zKl88pcDjW7NfLk7+->JAHei@5{q5PC-c_w4x&CdTSaTirsPyY5y7$YGme%*JZ``{7 zQ-r|6&!kO=;;1Sk4`92qK`vy+*XyEA9acezBTa5-C+ital%$9K7Ox<<hGEN)QN$?D z>m77Hx+YnLH*)K`2E92W+q}c+ZJYR^(3;=BB^y{i+WtpRFjKzyrZ@8qyE|X48#MS8 zwVS5OydezEk#dp**_y*h`kPHJt4jRMjm6*02UVvv6XT3!YQNiEm2FRd!@1Xjx=+wy zwLbNU;C%Cjyn)nlE9YE<%*|d-yZ)!z1>#!wsCUha0nOJ^1*0T#xmqR6#Uao-&jK17 z9rkZV#>?HJ!3-X1QrRyAz8^Fwxx6mle`VXAaYUlAMu9@Onf;!b>i#3eaipQW--~{` zJW=c6UuS;f*0&xjP22jmE6q4Oto<>5kLSF}%EEI;w8^QuU3tO(?H}dEJ3}ulXPK`0 z%k_>FX{aneKL4Xa45!o#Su#zd{+S<UsiC@-c$K8Oo@zXLd&Mp7#mOY+wf9%Pzj#Qx zvSEGG@o*x`H}AnlW%YZt?b^3V6C1&zzQ4cJFFd)r*SgIUyc09={&cUC5~+Upk!<1o z>ut%p*29sje@W`cpKnG!+8p#uYCE3u{h)F3!ZNw}XL&GE^XzNxr*re3I8(LLSf{6& z|N4fJ$o}O|JWqCyw?82N{`ugI%zx6S{+GT13zOml><giGxEsQ09yy;duw_8C{=Is8 zM>rI!kh%cUM(|wl!L`df<L_Xw{ObG^mhcw(=Od3-@7j<hrQmWaQ2KV=0BTk93bw3D zbJa<H^Czd36z@9V3eMwZ2n=Mh$uQOg@`8@q11D%sFPyZ-UyAqA5z)1<vr@+~2jg^4 zU((&V{*b@o-z=hF4^{xS&2QR9jE3$;!W7LJDgDgB^iARd@f4FxdTwIKt)3)BexXt^ z^C)E|Qctv^+`2Z;q=?~@op`GY_EJ7udL5Q3s3%IBGhej@#bcD3K*cB;x@u@1#~@nr zE>@)QrXEEVIqVv~i;?ThKqZgC5$6Nul759_1wbipo*KbeZ0XQ-;$S6|0HLH~7<Gj) zM@3G=v}&`G6_5tvKj=_OW;bLreU`^7+0D)t3KKh}$YuE~Qfe?h*kSm?e6cB9rIY+q zL4Tv@Pb$w}w{5jxzjdH$ia=(pO&a1+CzweU4R=-jw^);&Um5YQ5gU;&`>O%0RDoub z1b_vP4gq@?v5fQ1krW|Bdr^cIb;qVo!n}EjkhK7FR5XZ_Z3XIcC}wc?SvWfzkVJ`t z_^<`fTfUyX2Yck#Nslns;Upfzg`SD&Dg91KyJ77mo45(Q?E`igU#})U>ZeaCNlTL; zEACkz(eL(3D~lu4Du-+XRZ(DxX;h6emjv@j<Yb)KR5{AKn~7%?#F<BcvEVx?8*)C! zQN2;Hc(J8@JUCMur%>Z0WbyBxpoh+STJ%p1-j)_~b1LXIEU!|^s?;aa*)Fm!duf~A z@y2XHuaaoaNUf8k{A7_?qd=!WgUP3`v?hUp#w(Be@BD~c$b7*f+N~rJ)H!IIqvH&- z<IYDpWPMO71W+)xkZTuuf39@}^4k(iIbm**^64(rIGs+m#fE6PtQat<?YcH+FBT*i z$xo$+z{y5cMUQIsz{;h%$#D}=IDkU^Uup!|SayBPBsMis9q{Dm&~k3<N_sK*;ggYx z6{SbBAIiuNfC(kg5iEcArcma?70C!7>uCp~;V|0zoCt4r>B=eekBH#{3fiDc_4p+5 z<bKW&<E*ZDtwX&3sw*J5a4^SqlDro)C>7G$B_ehxkIq|W;&uMWOCopubT?YD$)z^{ zKk#sY&PgeLR$adA5ZI-Do9EhDABV^c!#oy5(~O4Nu*{oPZ4+^*QwnP$mh%+`07k0y z-iI|kmsO8O#kcb1Jh+>s=Ff=EZ5wvI(irQ%>cekoXUsyf4N9Zk0r92zPS*rPl+7>< z78TC%H3fhp$#>nd`XfVDG}b~U+;O6)c>y_0H=7S#_RpNA_8eQStXNA<v`-<G2t1rU zAA=Qz>;R-+|JS64hHdy2?G%`Va|eWi(u^~Y4ur6AS=tTQ48c8$l5-{&iiw}JPCQPN z%nOIo6S}<kk^=6_zFVPFQZ1wlD3NO*7W8%=Hg{78hE6Pe5fI3Hf3~|X39u(Znhl4~ zYY`MBg?z`+#-=wk_rqo$5p$+ndi=ZgQa%wjocpyPZ3q}MCUQ9EWoV~(z?}qMz$TYx zOE+!qESL~OE^OwjGY{C4TkPG=7a_GO7Hj^jqHO<49@EN+t%FM6TUzA&{=H%CRp1M! zPI4Dw8K)L8nziNey0C13?(@Ap_Wl=Jwqy7Dy7zwNSiRpe`xN$3mL@dV=`ry}|JksA z*WH40;D#u#XNT$X*-*KAKJ(|c4U77QwwYXn6Xr_Dgo<3Z@U?f`7jb0ygvHzv!hkIt z*!+^{|A5Dt!Z&N6g_aMeY#$C&IKbT-#<J(+HHpfFyXk1@JXmk)q-ZbFI_(Qgok0qH zc0}N4nwS6V8}~UUy3nv~6r6-F17~?j8j+`;BU3Ta)KZ;G8W1h>f}bNgXYGsHCCi}= z1?O`5f4Ld(?gSd~e!KfOFeE>MKb-IHk`CyG4*B~6)(WhVf5ud{Gb>-uUl%S41_Dqb z{aO$ETp=130vu>U#~2bh)(Q8d2tLw4DiS>l<Q8<C_ikP|tb@pNXBqH-?^+%UtZtcp z{RMjkH{RKWLc#@HMY!NbF%CKd-*o=@%FE8+Y+6%jI6^$1ayE45{nWI~{eVC0fS`+a ze&}aI8N|n}>9V^LNu89-`zD;mn(#w?VUCN}d=~p|qlc=dlP<@QH6%CN3e9c<nR$WL zNeCBzf`-&|&e}qR-k5aQMn;%gF^F*_%<4(ht@3pl2j53?W}zulR@t*w*&c<PwxBo{ zKLc%mY=B|}!x~BEmn-FB5vXeF!k?`<eD#5~U~A8+_OJlOWKm0}D`&qe=RqppD&$tU zphEuYy^12;8a%5`&n^G(Dd`x0HbHrbH8q+wpn9=v+)`)=e#pwEA7vx{syJ1VRi~*_ zU5h`$mZ-fr!D!N>$x!SK<x%13kb02CDHU#8gQnmTLW;PX8LWx?8+*pwkfQ+E->$mz zk?Ljc8Z=~@nvwE@9ICh1rJh@v<_YR_xtZ`_jVN+=xlyJff@~Y^S8^t`^@<MU62Dp{ zA7+nT3&Cnt<wLC?ED7O$_^61`BI1g`j0<YtV;bm=X6K{-<$!K*aSE<PnT3S2=UGGY zocswSpnATCohIbhXD3LOz5@(q3*zO|guIugFvNB`-++)^cp%@PoHt7C!se~D*26Xz zW?u?BX*zq-t=q4An9d5{C7|6;OH93PBfHjIb4pDKrFLC{DxoGZBSMi}WetxzeZFP5 z!ESff3fXT((%$X|`t_sYptrx3(WJWTFu3Fb7qkhtonY+H$Z*ysN1F@}$Dg{?Qg&u} z&%H)<y;}eVA;6&PWo9iRPQAD9YH>Sjl`*G#npS-G>nipa5iy%DW_={;{U!3+IIo}l zcR!I;)5&u5hNnA9)M>OM5LS?f5<Xx2WW|tvtsnba&VU^iPT#P=Xw|`v4QD!d)=cuy z(Z(0)if}M-but;~yQ%@1jtdy?tuq|oHpv72n$w}I>15>sGTH<6Lm&oxXvaFQc#%cM zSpb<;2Zup8y;x^+(@Jbvg{d<ZMHl%pTP*GY@R@{oT2*d}2)`1IYibZcPpSvc(-AL& zPGG1^{k5SV3GoWLsozv-P{YeT)sx-p<!C3KKChG6RZM12Cac7xYP5-Bg2-)&KNs12 zrtIxGE@n21jqvWYAs4;F;G&gMsm)gvs>eWh6R!KkJCH*^t0?2PPHdUXy3W0Fqewt5 zsRCLP&WS-$2}PzkZk83{(G6a#7v3olpXV}FZ7(ED54K{$s(j46b9VVjPu}<#5Otou zL1+E;F1Hgh%!;&UXMM#1X&e==kk2iaulPNixKG8D8~M>D{iAJ3l)HJfM@X*sJwsh9 z;GM~S11osoX>V)~G-qAMRZ7pz9`As?9oO;&f6@PpYQSd}Zfauam7tf%=9j|vx#NpZ zR|Z)oA~jZ(fKQLfMD^y5LpnqZ!ZvhzzX`Wr$73OzzAgP6{jev4@W<*k&vbUO{o+i` zvu>LJOP?6TERp$)RR<;Y3^Mc>yZe0<&=;yjd%mbiL&a9@>G#cl#2h)0-4p6!F&Hbt zx4(gZ9<52q^E1Wx58;Xv@V$?F_50Pf`)OQ5D{7ts`tP7@=aNWz^UvY$ef(Tz{SFLP zj|{~6bg-<)w@>cH?Ijph>QJtHOQ@-!gB<Rj?+i0>g)`Bu6M2UB7Kh$i4K?jhbs_@R zG{64tHv^<@kA`$Ukw$l0?G0_1eVR@9CNDZ>mHS<QZX?e35X~t(TDP|+v%i<HR%Edc zt3RL#e0>qnL@)bqWz|tz?BTZnLd`RxR{dxbV0jM0Y`<!1A1D$P&Yr;ivn}?+3WS+Y zaLube2SV021~>@|{3%m^KCScPdTC(?mYAgTCn$l;nc=Q;{m-NNTmqIY3k9*UAmR2a zmLe$++^;#Kql(<XoD|^3*fSYSRMCDnpaH<xKzd()MCz?yhEe<(*MWPEK;rBFzKNv= zykO!+5OfagG%$rN4LRutX8jG&t0ok88)&-C{s(*a71dM}?u$N+9-6cuElBSHlnzM< zARxUXMXDm8gx*902@slsbZMa|AjQz6Ymi=41f>W{69p0JQp9*YW1KtA+2ibe&)CnG zf9BI1d0Qnj-&*tcZJsN!S*}0*x9C+v^KMT#rD5;Bf5u?b1M@-?y?PiNQ0FO+x!+g6 zj0Z^i)}BN3Kyf`ivVk0lM2;#flUHn7i$XP`2S(~SZ^1;X1)N(a(o`w(l_2y((YzsO zBCdfWQ;@s7hr?~*oG8$<jN|;<9T;aH!`_Zyus1id@6Lzm_O3vFdkFJlgJ1v`beaGa z0*I_Y#G-*W@=*OZujPaWNd_BWPXpnVJLg+>ULyj9{FIoU_XuHnOe%IU{((GB^`_22 zf?Ex;i9^!%Kq{O`N%%&NuoL8hOb|)VnYU_=CAyxDCz;bCmd*yn&A;>K!VV1q&1^wo z%!;K)p`odJ>=uCY*9g4+dyEypYuij*1PbREMKy6xEd{{XHG(k#Dm4PmYxZyvP&78c z78LO1QZ5U_MKs?<*$<>&`4sIGWpz3_?!JFJ@&stIV$W9qV;tF0P7n-F^Ix+NodT5R zONu5k<M_fwTFHHZf<*c%%a|fy%<NVD_bAhaW~0nK)3%Ey(>PcJfSVX^_AJ&EGXn%1 zz_2)d&;9rL>!{3T)BR?8{!lB9S^XQ$28y9UVLe*YdzjH?J-o91v@M^1i$QSn<y@d4 z9d+MEGlYvD{cmr|4>M(YTV)avcfOE|8{0(BBo7UNb4vE`$n~IBmh~ZmT(ZgM(kp%I zC~o$8?gd$c1l*O>%fG`Y>{A2m?Z6~wv{&da>SqGa;)knj&(A^V+HHXC2((h`;Pp%u z<_82{5s2@_=aN=eJ|w6p7O6-CC>`6bc_H<@r}YAm-<(W)U>4}K5p0kU&Zp@YrcLEW zuFb7V6>k}!+yiUBK~zXeSStFL*DM74Ez#FHe5fnT-%rK+-7oaDp75m>#`S}OJ`^3b z<qvI`{tV@bXso(OGhG%M>LXi8Cf^QFl%=X_zQa8c>-o!d`FA5A?k#|^4b4OKYJ-gf z;_daqE(3fNBJ=@A%+|4W6ctm#euPb%>Cqt(gFc!X5Q<bGy0;}v0*Llb64$KbJ0euA zgiM_y62f~DWVlx!*~Bv*r{zXKL)6mf1n}Xi>yZ&qN%f3{jJRAc;-M;D`8cw<mC#C; zat+5$MDvKkV!r)*UBmk~V22J&a~DH84|uK*4-9-(aIO%yZ+nd^{TYdWySy)$;CG18 z0)~5{c&ku=(dT&_3A`6S-5Xl~md`QZd&EAsmqx44#<nN(3|1gDO2SB`gAt^y=bic; z`VLX1&av}XAvNXUUjkL%k~#uofE<PB;jXBOH;kE@>W>qnYLS&xX2o{8@e_I06Vob< zTAmZ%R$%tM$Yk@Q%F!z{{~j96hdy#jkHK#(H{f`Pz;^h~T?~)fWeQ_nEQ1^6JVl?m zt>@0QK9~c5P7C;8V20$0YA?}D@-qAr)<IVl8+RS8C5Yoh#nReP81-P38XTpB%uGZx zVNvCa(ad?89ex_gZ?FBPMpL3=U!AvqQQrA-ShIWD=O#y2k4P6r>rUT;WKIN-CWO** zwQqFr4!uQJ|3YYw(4AM$_%!9v++Jcmy<KDFT5macvxBvIS?`!GcD+FAy&mn#-Rc^d z`)x+<>Z^<%l1OZt9!Ls48Bpk=jG`bj0JV4=&igmREox`M3`(#Q$C<|ftwr-5jT(-3 ze=5LnrN(ksU4uafe#tH9xApMm#il!SlYYc3D1`NpaeP_8@ppiQCfqL%0B2S#%rG|6 z@CCO8l_6IfR)H4Z&|csOo>m^5t~^?~O#M=D^jeZCxRJl)#1VWaan<w1*TZsV!d>y` zMy{+LCh6rZI^?<n)pY*u*8&O?4yf;d;yx|;3`RO%c=<J2{aZA3BbTZVeaRT1e(;;O z(R}b{3RSR|niZ|x{C43xvhScE0zxw3h2?#G_U93DZOve9y07iq{@nsEbj_ALD&%G$ z&JB&HV;8q+OLxa4vI-kysbzTRr|>9Vf8R#UD98NAa%k&A@6qi4P!4^cA)&|N8AZ#L zOpa%Ua{Ch-aEf{mZf`YcwnnzEZJ9xabW2CJpZ&9IJqfEPieLVfUadQ9HdvpSJW>h# z&RMhb&AF2XW5TPPkerly?aiIQz+CJSDe~~wrLMd{&%p;h54nscM2)lkoSqjs?p=RV zl#Wj1)_xRnbF$L1Qblgof3-Q!(f970W4-TOYv8x3?t<`u1s+FhgJ@orxx9j<C~9|M zWbn7QrI&MGAdVbI`>zR>2psN(Y%TO8@*s<~u<4m~FXiP6ln-~emIiZ?CDgU=^+~<g zOS;0SF@OI8q5rl;@OA{K{YVY2(O#wZAMc?PP90YTKkL1X{MeCc(aWs<W4yQFjo&7U zsl|!>lGW10vY*RQmZ*EMFO%^S>Qwt~fG;q0tN#?yIo{153$+>&j-F#j3-O9t4U6Ub zHzGugY_J9r)wL5NGMaHg+PsQ=6Qc?}&`h|TXIA4C#djvwula|6WQ+<;r&_;J7xNF6 z6E&}}eye><cx%?OUD5Cs%^;W6j&xysKd#Sv>%EGea<sD1WvRON6A~EC`d4zV340Uf zXy#C9L(j~M=9ZSGwzf%zuj?m`?9*(g99exXp})MTu$^{6x7b>`#xmzvUNhygneoh^ zx@6ASo10F}-e_><wl^=Wo4P9g_!G;NU;E~-0e{nrQ*(jCn{4w^qo(#Q%x_<ZehOcr zA-njl)J?nYe*N_8bIftP{KEC$%npm6s9fQTcy?F0$^D3~rWu0p{kG;fvHF?i0m&B* zD`~wWc`Falf}!rG_wT6vD;$3vTFG*}tzMSxa^LYQ-mQ4{damCK$8VXzpJ%_NMN=Jp zlJJ5b*YGJiS8v|Ubp5y<QE>O__mJ}9kKb?CytwM;)Aae{hG!@B>JOJ*!MPs}qdHEv zEGJ#(Ze5wX>-5w8vS7yK&4VJREsK@Ua{=1FsZLn$jnB;{T|hzSKwa>)`5hmo#CN9G zsmyohch&e_ItPm>FU$wSHUB#ApT`J&+ULB2bO~j#zV<1U-szspFQ8}1r?9`iFI~a~ zL;_$Inc=Li{qyk(RL$iy^Un*PuRL)+{wAU)c(NXuS$wh)&?NYK(|oe{_m=*i;OUM4 zN6G1)qTChhVSzBgKZoVYLe%5#hb7eCHH|`l|HMy}{QYY?&?PBc9|X9#=y@8BqA?SV zWeOo(hD4~|68jm;#d!rRmxt!j-^Oytl4#L}T+jq^oQP;C*fc_y=7~i-t(QB~-$Py4 zPxA!ju4~M<)R6pNw_`NFEFIrD>fNESBrb?}u(yWmiMpC6T`6?sC_2)TG*FDRuAqAC z)JF6#dRwM+ta$L;I@Cvun5BA#xbVKN(zy8KU5KAo`P%%E!P|bz`;W>!1?0jnYiXE0 zh_-PS`Xi}^qMZo9i&lJwMjEz@S!LYz^b+~-%h2$V>BCG;Co#G8OD5N?{0hEQe9$^J zs*bnHG86HZ$__KOId7U>!+BN4WnI}}!0JX*#pBohkyr9pt#Z{?7QfKXjB-&MV|qBB zFeM#p9ttQY44ZIn=NVyc82IMD>l0F_V^H$Hp6NOF<;g(Tv1v-Yb)jCt_3EdNX7J)k z+W{Milc8fXLcet}xcr7TIL!QxQd&{#?xIfO%-d_gtmqR_pKfTBMTD45>4t|76;my4 z;iGGle9lxtzsAQh+`}f4byafe;>p_wVHYcw&Py467$kqawO`>RE7fsTTI<2UzN7Nv zn~nZa*5vN@E*eEHW-*Na4oSAZ)?*&a4?gd^ghN9x-cM@_Pu|<=+di!>^R=CQV#DZh z>A}@MaC@F`Te7Qht!JH$<LmE|%}=s#ONq?_^hfM8qipL7ocvsPFWYy8eW(lDAQ>H= zv~|*knd8M|i=fdC>SA^cgpHad9Pji1x7D-E$3Hx0D@}5)hGk^0{+NgTc0|P6HM?H8 zb@N%s)%SKrEj6K5el96;ZwJEs$&ckS{G*+OSM6F!1-Ak;kDV6dtlD}7yaTCee#T$K zRkKIE<z<R~&)XZ=cQjVq4)u$4`LS%(IrqssynExy*vZd)9_FpL5z($wvG(1PR|29p z`dp8EtzYbIUXR&iGCTbmUif?UnfhR-)iCw26PO_5#-P=7D6WQLy1spn|8((0&*9Zx zDK<Xxh8x49wR5oBvtrF3-B~N4ednn%_w=-uGqYjZ0iO`gR={M=8kkq^Kd#~Gk7>bK z47zV7Ue-g)^L+5wKy`Y*JkebsI$c#+t9V%Xjx3Wc4#a_B;T1=fCW~;a@Mb$I#ij0f zd2D-dKc&~tt~*sUA?R{7Ez;zgKAin!y29IkL?dSxm~2vU>{+PRFYQC!N%08bZS;OL zpqR6h@&*_8mLII|c()<d)1-VnvtYpKuK!o)#S;%+x4n$%!7sbX`8*LS@ldr}ioAKC z@qnL=_Yc6C`TV_aR4w~?ty~(Et8_)<ibGVaE_~m0jpFqj2$r@e+8}&@bJdycK9>2^ zqahQ;U1JD=WW|u7k{(=5Gx4Nr0-FMZgqc2zW?8!oM#KyWJp00)&L5C)eH6s=GD77s zp82}(n~s?-ihhf&d$I*Cjw6rKC&pHcHI^-0Vh%s*6&4IkGA~@_YCY;#EDlTyC|nUZ zJQ_p`24y@b{351$JZxDUl>Mx5RW3ZTpQ9Ly4+e3TBI2bx(x@q_S3dTiTu<>Yw)}DJ zM;!Mv2YrgUBG!Vfki#_mWU^E+wA#GryKU>qhlb+Nx`3h$m&23k9>K7N2Sq=;Re#UE zD-LUUR<wC5{P*0_&x6O)r<|(S`el4}HboOP7j!OHs>%z51phAJZbWoQ+hio$<i+iz zg`chn3q=l_7w=}bo~|mEM7|Cv-YYsh{e~8bdiS7s|FP<yb<2{d56_AZ>canQXg`bS zTX5lS9&hi?edleQGN;?9zOR(5c;vDe$K8}3zjQ6*&Z<Jm@#}EvUa3&bx_QaThgRxA zLrKhLK*{e<ht$I!p}RW|N={c*{~o_9xqI-e<j*{kD(nA}iRwDj3DX*UK%SoDZXM@6 z>Vpj^+>PZ4a|Z;L0+_b}><Azi7RXBm3Ty*~|2_7`f~3eGxowal0(=PzRwskCx4~!x zL>~(=B125KA(q=9ItwZQ3nP|NL$*X^!GEI^#D8s#$JPHO_WVsKrHk37i$&1KW9gH~ z^l97l83=}KEJHq-p=g_-6v6ly%UDfjtlMU6KrppnncB%r-P=q(Y>eUCG`Yfu;+qp* z<gL@6W^S)&Z!Ax+Y{H6#=|;&co7*fq2-X8E>oJ-2&o=A7*B5C5*%%twn0MIN71_B0 z*?Ak-1$Nkl70-zUo|9@gC%1EsJ&>hj3HFA{#@r1Qdyi$FB{L%x`98C;SSoVa268zz zaJlSoxhrye2XfzR;J&rP9jM3?8pspbz!S5>6RQY|4}>K(z|wYL8H&6Q-f<##_~X)O zr?JBy$7!#;<E+~`-=N6X63Exyz}LOQ*Q3baAILx4!2f!O|DB@1hd_bZ27ymI0!xa5 ztAT>+4T76Hf;&3`$Ohgb%k%p0wkiV87X=D2G{Tv8;p|GnTtULTjlu%E!oo@y#DXqJ zHC~Y0y`ZQhaw$key-`GaR|Ksjsvjh3)F`Ss!E31m{~IU<ZWN<AC+4ms?j0n4vr+uk zu6Ur5L}-viWTQmPu0*VoWPFfhQln&l+OA}Vl2mq(RDPpW(XLdfl63Thm~D_)UC>~a zl1xjGOnakD_pVHjl5BsF>~N#(>s{G*N^&29<YpV?KJCgaDao$}$*(ucZ|=(f*^xd7 zQaEl@__M13R7TJQBN&<x%zFrSWks%FMcyVwfjvcGWhJp-C8;JQxjiLCW#vo3%IZzZ z+Iz}q<%{~k7mb=On(ke+RK8>ze95utlFQyDcV!jtV3nIqD!2Aj0+m%mgH<D&RAcs3 zW0lq7gVmCn)Y5|GKp=qdF$4fS<LJ&fy8j8(opE$$9Nig5cgE43adc-K-5E!B#?hT| zbY~ph8Ao@<(VcO0XB^!bM|Z~2opE$$9Nig5cgE43adc-K-5E!B#?hT|bY~ph8Ao@< z(VcO0XB^!bM|Z~2opE$$9Nig5cgE43adc-K-5E!B#?hT|bY~ph8Ao@<(VcO0XB^!b zM|Z~2opE$$9Nig5cgE43adc-K-5E!B#?hT|bY~ph8Ao@<(VcO0XB^!bM|Z~2opE$$ z9Nig5cgE43adc-K-5E!B#?hT|bY~ph8Atd3D~=BI-{$B<{%;W%7n78dl#-H?k&%{_ zm64a1Lm&`}ii%1~O3ME%y-OGW4HcD3s;VmLsuwlX)wDHLQ95cEw3;qjTTc(Ir>}2t z`Ldyrk%_69g^i_!<^PC{m6@vz`lkIQtdnAh3nJ28$@iMRyNj)}i;J_1tLrs4cTX?x z8$LIDeQ)~u2Kf001l$e^xfvAh8BDkqmhBQ;>VYk|c{4NEhY)l9Uc66a+^wj%;HZ0% z(RZSw@7%c)bMM~0*w|PCfsl}pKqL}VQj*hBQwkFjn<Bzr1l?#4wQh~UyhzX(dZ03y zr?Ob8`mIW3qek^do%%)t`g^<O+6$+pR~{e!H8JXsX>3cVtWAAXkd>XCm6Ma5larI5 zpI=Z=P*_-4R8&MNA(fNL9+#F^k}95-J*j$JS^4DOr>dgrX<2n`admCk)4Insbyc-> zwRQh1wY9Z1HMP}s^>t0nJ+J#GrpG5|XU1ng4$ppiG4r`?dZBJ=v1{h@;OwWFk8>aY zjk*7oPoF+5E-o(p$E>dYPlE32|CWD~-@bkO{{8#L|B;_Re{TI}+5azcaB%SJ*RP}h zEXT)3$Nz7B|9^)1U*yk!mjB|r|Gnvd9Nk|AenT>;2T#u-?L0&-?M-A8F)lQ0DC<vw zDf`Y3HIxrNfMb&RjT$S4GbOE`IuAEK9?eB~juaX-J$YTA7W{pFxT*4O2@20BVBB2w zuG}zF+GV7<da}}@+_=cN<>`kShbG@oBP})4&)goo;=A&^cDBi9@~O+{^SZfK?8->d zmDc)Coe_KAKaI9NTX=~BGYOisk(WA^rgNOe+8R~{(?zZno3uBsj^-)*eI9FX`u3KD zNf9*dXkMSJvaWG`-O;k~+Rr>ERJQ*4=3HCw#^=|aty>EeJd==FSKH3YP^QeaH(l*} z-^R<Yl$dpQ9Bj-KXv)hxlwFzo@QRx9-{a_9)LY`|UgO{BNiGpM?R=KvVb`mc68OW` zmJ;C!lFLNV9G~SR$tP9I$+FMamQxS|k}Ihf>yO|Ump(jqh&!Lw;(%w<z(bY#IgQ3L z48^OzJTy^R|B`88AhnuhV|Q~k+u?fkYL0W*`f9FQg4EYMubi7-^L?IFf6dY7R`w#W z+Le2%dwPEnNoPM7`33QEzkRd>M=QNXB5?bzl@i6Du9c;#d|xY1H;`Vh$g=ZYf1G#y z>H3qxu<z@Yqy*{j6){w$v5ecVq$<@yUIo7^qAuHTxGVN;GgQg9eGeL~@A~z9;~9lk z<_Ect+wVuika*3H#xa$RA5G&1GMmls?ff=dX0F$4KA#WUxYgAD9aL4_$H}quw9YQ% z#-(w3#|?$f#i&u)rlAW=vPWNQwqBh6+Sqytpp)IEKzRJOd*~%<w_ib3e{A=%U6$SH z<FxnR>4)8@-5G$+UD=Xr`>89h^k#9$w}_*sm!!5i!T7BH;MFTenVR>hBd^uI)$YB~ zI{dNs7DXqwKd#4fYyX|0MBV;`iR$M5q{U^qgZDP}w+=oy+^7qkxb#d(S+;Qu)Ht-7 zQ(Inhu5KfBbmz^5J?W|{r4h+8B534O#J9Rb>gPL$n}-Xy{|iS~AGsX*wvJKSwO1*n z?PZqSjSlu|{+iC06cc6X5c~v#MDz5UB=NRy^}m019sc~iMWItT-R|QFINceNcy_uw zrn+^yH-1^+&;EP+fIkN_H=h0Z^=i&FT7pDWVqB{w)?HZ_ExG>-6aM@Pw5xSUH&{SB zl|uP*^zGSS>gnOu-@gDT2|#B^0iECe*NcS&;u)gQYHY`{rIH{LhCPf|x8q=ABw87@ zIKlTlevNH3vttPwiB)EH{V;<$hj;Wa|Lu50YAN)FVek2m+X-r8r7Yn?y@HHvwA3`o zlC}hQ`2)0G=uf{-vOd2+LK-_s7O7>Nm4^M&S9g*fvfQ9uDjgFU*cj*zduMv-D<_Hv zSMX5T`RSnnm5!Y>Y-%~byIP_xMVHWvqP=h2md;UcnpBJGXZdP4q<elhooG^VfoGi} zK++|?lw2M*8G;}7U*WES(a^(&hs~mPGfB|Ll9%Y?ENgYSmoE(PNDV7_v3c@b*Nc}l zFdDu3aW|)J>@mN7Y_jIhI9ODn7be|sz(v-Qt7!bOQtt5Bb&b7z)*l4vk=7I~T}+<4 zEFB|IJ=sfluV4{csWx~#Y?caos9!OOSZe6-XlBVQUnBs{)A91yQYLk(8XDlY7>^(c zLtU%T0CNCX6vjz=B3h}-GcukKm&x%&&s(%eSRzZxOSUGuL>?i<7|Fs0{`Do!@bX6* z=>7w+D++IHpG>QOCEbIm#i4Kbj*H~IFI9V8Z5IB>(2Tg8_08H_zlX?%d@+$)v$l5m z@`%lo&lm6UyH(rRo>={H$31blv}PSSVk<*+<39QAYd?50UUFhpHDf}wbZ20)!M!R6 zLT_5<e~kb0IOM79!7HlQBil!Uv9&mD5>3@2(PJ%+9Z7bhcOC)=)#89D%(Y(G!weSt zRs<j08~=Jc)RaFzr~_&BIA1Op|NQ~*%$iG*YBoMyn-kVZ{zP545Q3)R8A7pq!0FQR zF5zcRrgE~oe<(;jnkoyL;w=u9asHc&fA{7R-EpUkul-Z|Q?BNgi{3v1Vm9#ipy%${ zr1$;_8z;JifS9=5aQtksi6vAVV{Ups7mOTxkG_<>)vb>a){tzlW?h?lM5n|eJO$$< z&_LCIA_)!2Iw7P65-d){p@&EpaQMm&`qMF~W;R7owVgCh0IYs@&Y0r5M=ktm+?$U4 zah<ET!4x8LaszY&B@9+@)8~5MnSy?S=5chRusj9EK~Fu|VSpZad3O*KqKpN~CIb$8 z=OlG)aU{{Fj|MhQujvnmq$2b@Gl1SKsUCv}Gi560CHGlozQ874?;0n4e#*JGm+ndD z_@=m+SYNu5!+vLNfr~%(rP@W^?!?<akUA6q^i+h_;HO;f7WSp;n8S$8eI<t-9)bs4 zjrL7jHS}p<?9bZ|fr&Ht68qN}6(-dtJ?){Zp1jNKbNLm=R|1P2Q;|A{`5!#J^@L6a z6ZIEa8Cxx$HN^jbo+g254Q^im!(!uqdoN8CylKwjMa4N<EZxN*=o#;zpr;4uF^X9@ zv&-h!<&l%#p!!fiLA0Mdis#;hZD8nDxQmXT{U?o8Oxa%Rs)rC?ZIHt+mPau!Z(RO; z_x*E~=UbJVrsmNDi=X?ccM#Cva=u0Q0=$!|IJ)G(=QUOGSQ()2v^8C<^47;<^N+*E z#&kkgspe5)#g;@ohV}ftpnty<gQHklwNs&q`)c6&x|_-Nk&~9=@eJEH774dekhIOC zKW}38>aStH^u{zLu9)~`gVX!UwF5);y8hh)xjOG1Xqa*Aq{wu^X@jr>Y;7)3NjDU2 zQ+ixu(ocUM5rO3ot|xuGq!kvTEzL{#tL)aXRsB08a6+Eqptk(so6BrJ$Zy1FtzXz^ z1{~bAv<<Y~3%BJd`MmcfRaYb-aAr$o>fF#`Un||)AFq&iJ|^Ah$Xc*S)hD(v(yZ4p za(AWZ&jjo_{Z;!>`2aPZ>%3o-);bHM(oZzM6g)V7^7DJ$N!ZJ~B`0g<FHc^6zWy-9 zrEXjPx7J4F+dDs-O8!FEP`}g04}Sl<3)7>g4(|?JiVEh&(dXe9=`VxVZcFgot7yfY zQ;X$1(qo=+-@bv{wTtDSi4{E3<?#uki4CGViWQHDlbk^b6Jv%R$4DK;Az*lFQyezu zANP${%fm|=;yrKR*{kp<7~$Lyo_7r|CP^^NBWzqI(D)Gest6Xac-KL~)|1#diFk*+ z_`3%2tUmEqkK)~k?#^m)Y!L+ahy))sJ5NJ4(IdjmqXg`bg`XPRt%&%*h{T9BlVC}< z(7eREM~S1&iGRlvaSp@;Nn>i9Au+Lyn3`vp<dATChWJn|>DE5c)i5b9FUi3x$;>D5 z(NPkq3R5@}rwU7c5|ONOF&X|fscI&<-VptCE$*3GO0y)o!6CUNFQp>_)p~^QJW8Rc z;Wv50SPT<#VW~rTsnGG1>s6_5@>0fNNpIEC>R@TLhG{cZNmF@g^AX8&Gii%eX}z$h zONPlWd@vW%!D0xsARHo(MT-Dvtm)7~6v%T4j3NcR)b@a7KTR<Ue3*b#C({}%q7=vf zf%f;sNp!kcv;_rf$A&gRFwh%dQV<L)JSY?Z0(uWgRnZq5exS7W0MSS5PeNX>fNTt* zj1dg->I^1iYC7{xv?!crZw)05$W(!VwcSuDWPbqXL*|Q+2dgMJB|~!@bR?2>;W+MJ z&v*q3h(S8I(hj8V2C-%U8KA&Y<m@BQhezev4*8&C&uoXtfOTTFJ{BpD$o_lqP+=Gh ztp;hs!ADIX9WvNj6|7ALX;Oe1Zn;nkkOmnnIgS)gr%67(4~2sq$zXXDO;RZ8AImO6 z0h?}vOcx{m+5ILKwr~pMZx~XX0#O(TnNl1O6bO7AY%&fxEYCMZJg6ClJWE1~A|R$D z&`~c?hXO%aWFTiVgoaUi$EfgJpeZ@ZWHw7v?f$g={hBJ2KACo^o%SLHAWy{>O+|v{ z+iCT;K?ZI`HylCJyy<hpMbLE6!Z2VZvPd34FFy=Qp+IoyG*RS#qon%-_;-GZ3>@;W zDeFl!og@WB(?QeKjugjU9%F+j4?>#;p=0D|2q!p`lEJb5kcS~N6OoTXFes9datH>2 zN2O3ihQtWK6p(A$Tq@67fUV9F#g=7mgZO+4GzXEo!(at+hWH{xWCW<a2r=J=&|e2( zwjpNYnTvK=hm%14j}R^faQZC7oRW6}20MI&m@PsyrwiZQj5Bvc`IBkkWS~42#OGFY zF&+5nX3^!vB7cjb`6S382JD9oxRqRl?VyEXp9FlQrTQ%v-2#Aq4AUw|fe<%KAif|c z3XNoXi2w=YM5fWDq@Uzh%Ts6=lR>%Pk(%2i_7P|V2~>y+1UCbb?LevTrGg`1@hIf( zFj9;$Q=YB-U&q4TYEUMC9!>!@B_mr#06epx7t*dl+oe!95Nf;(%Rv8kvfPI8i997k z2LORnfEb(`YEhRT5vt%;aqT<A`WqNI4iw*pqz*hrAwWpd<KIo;3h-NpB2PTO$9fy1 zE~AP!sw!!CtKvIo{TH7SqL6O+$f&3QKnmH9QXF`>3Y=dA9e?&Rs)1)1a=iXD_bE6E z0Y1#Ec1ov%W2<FIbb_5U8YFP(M=G+Mv6Nu|n!0V3ioiNON<UQz6&`WmPzSxdTBe1_ zK)`Fs>yMrfL*y;WECv9(?Ldy|2d03+OwxmA#-Kh81}MBXg`A<NQG2Xh2z+0zJqwW| zRfujwDyQnwXdq0<$iYY?d>gW-1~DFftZ)FjRf80vWN2gat~eGRpTz#|cnV&B!V!%O zJWr<MtCFZDM@JzOM*+7_+CWZ4oPG_z97{40bV`xP-0vk^QjJa&Kwea1P(EGm$HvpW zM)vbw1HOsEBc<k}RTEK2j$r_Tp;?`Qo<lt}`}iT!qKrJ;?4X%p7yaylZzpGD3v?TV zU4O{8UDHUDHF=VuMcuwHSY08H=z@}-^8>(UsOPtt9&aS4yPn*)JCBlE)Wx{DA2PPZ z&c)*SP`s!dUQ(q$B7NMp?Q?Y-PMUm}35+yuKN$tY&yne%#fO+G6EeN+rO=`)9Zm>v z6sko;22$?SAz4sz!~rTZeyX_9k>Zy4Tnc20%`jeU&K!T<TF_}d3XqfPey+hlUay(( z?K)}#Uo@$K4R^s23}Lu}0S$(|wWk9e{-7U7?c{DjQg?4>J=ZXRe-RWEjqKsgF<%5a zMLjqLgH66aHf4LV&G(W^?IoZO=!b(Cj6XA6EV_B8=uao*@7%M?SV&q;<z)+q$l`z@ zw&;Re5jDoYC`Q^E(%y*xKnA#bavuSm)9GMi=`fQHU2LN=yb-3=AwLSegQ5|~g2v#l zrt^@mMj*$NuS@{VP;8BvaoNj`QUwi$!7JBzJ8LV(x}II7%b#<QuZCdgdeg3U{%Puy z{n&@WJ|Fu2SS}r?NH)4)(Vx~2=G_Lq{RS4K0HqP3>r5!jB2XUj=*W10!)M@cCh!mA z(1t@BVXT-MjTB=W3aqT0GRj$-AA|$m8epGn7*+XUAqpQryVaS=S{<b14qY-Zqqaxc zZM?b$EM!vZcQSma{0b~uQu(B-EqX*jtB*Gc+3H)S#WZ?c4*GkVe{5aLPcFq#s2OP= zN{vyEL|nQLgS&fcE1+!PrBRR$qD&hw@Nu<vDLPNkqQWitwR0CzG~Gc5o4LjG=7g~b z;t*ftpf8WgfsO<H#%arK%38E~Gm}uf@LrSG@0YtUQBMbMoKG+IDv)=4S6e$l+t;}} z-0f~U;8}-}uy~WjWW38jZ@i8a>j<aYe<-Rwz34nmh?$Y{nIU%1nEvs7H;ex|lS&r? zad<tGQ+GG{HBufsC3CE&uuYpQ@Ub;(_QbkvDrrhb4^)0k`%C&`eVt)N5fV2~E9Mq# z-S_cX(cJyD_x(c&>9CQ%o<+ATX3M1MqTzH3SWq;1J_bu4)7>$UHV>teKn^&%HdBaJ zI*kJb6t)eXsrxkl2Yi7{7sEz(f}iUs`b^-Q1Klk0UwrYq2^@sYlSps1N~ht|cHJv- zlO6|#QNX?(bP^~?5F7Xof<`l)26B6m{%420+vmecaCAC-40+z->1WsrgCA)~1#FQ` zH!=wE=x_xb>W2Kov3v{$FZTyyP>>FNIs^&CNL^O^xyW`OxmL8KQNPrc7HbNdop3;{ z&bOUp0txA@4YPEXT}XrCRvpAOVHp}dgkdloq@=S7wOCbplcVZ-v#xu^%~hZ84e%Fc z_Gk<lO6ixt(OsxV-Yj00c>}N<U$zkh*}HyosxNYR5keI?|Mjk!KA#Tg=A9?M=aD*C zIt4gLh6EDYrnOiErWY@y#jhp5S^HZAl&8>1;#Py*zA@harc#fzK|%P)gZJ)!H)~!J zU>o`kT{zAJivFY<dJRgn*l2Nm59HsNkXxDhq*wTJ{blhtc@%v#$?33nBWQcR>ctPW z=B3-0=f?y$gJxDPtj!HdZqD3we^b0U|H5MK^X8(U*@EEDFZGG<-^5KuVkFrhKW@)) zegUH4&#d;lkz}wq3u;?_OZ@<-i3_Fe+oGDG`7FR{Zr~#A%iwF<bZ?C$abT9Mp9=dx zRr2=n3Q!Hzpe?$?8DO{~h?1s&kpQs&>!p}+>imfyN)xwnlDXR!Nsov|$^O;l!_g$B z(<hF91L%R|7i=|AZpR#Z>SO)d3m?uk1Fu=odRfpa@t{<(VESetjl$mlaOqf4rb3vD zII!wsE2|#Z6G7{Z+xZiGz~u$@#(|G9zwnX20D9X7^V?F3+d<dB5;(Ap>GmPVAqT5t zP{83|&tE<PC`l|>%>pd4g(N&cieYyUUw*U<L)3&82o`&Z<6lq1=p|TD0gD}fn~vrF z?$UlaRuBazE`s^6AmdG>2J49i4M+>S1%;oey*bAIKH;(f-?(?ew}5m5(9-LHz2US5 zh3K{i;0|+C_g`H&;=r5Y$4({u_IQgNzJ`XA508}p_z4|RS7?myA=NBsRp7L4=Cq!R zG?c$IhbuIm6u`gkaYhQXQdp2-$-bAx!Ljw9&Id>P3x7a;e{6330$AdEP;oTOf_iym zlDI{c+ozBEV~&>sR~P^E=2?muM6CAN1{?TK%Q;k`Zd&C9xiPUr9S}E@$SeZq`0NV* z6$|KC3&HOEL6#O0=5hRPr!(*NOu4h6Ip;(JC5eneO7tw7`P=`>CTKP2KHI<5C$|m$ z>wG?!aEg$Y2^%y>l3-kJXs%auHJe1NM@JAs(U)k^Y%wt;v1IawJ+1q-HvivY5XX8= z&Ryo^+@2J;pw}r?Z4BTy(qTl`7&;11VCB|IedX}!<REd(n(4L}u^{X^mm41POEJQ2 zX{@w>rO)!Ze9t-6+g`Wsg9p=M-6*gzH+;g#7w_jH`#3x;BR_~v<=z`oS5&OZn2^bf z)2`q()e7qyZbj<%Il)EBBp@BDZ~E;Q`}g^VQk1YWBnTg^v3tikT1G4dBqPd32X1=W z(-~J*P~WkkQ}KXAKe`7fJ(vnM*Pt>^Y<1BLN56&Bbi28M6-Oe{W0hWz$WYd97?_|) zk&I1He4*x!rnQ2Dhw!g5>t7D^m0Ok~UP-#+Iiqx0B|z3~vH0`8q#h&M7qFEYgcK(N z19{*{9TFyrmJOAq{W`5If1rE5x+3$d&6*hVxkmhbc18~%tM0j;a#h;98lz&Dg*QzJ zsw_rd*tBLE%kK-_#ktoB=?ZWqRDD_7PZyGnxoBl=DHfWDG4`g|IW54yu<6SBU9>Y| z-Hn~Z{BjV+3pHX7=$2R}-aBa7{VPctq{ZMrVp!Bo;x$w2z;-5Fo!K&^<V{XTE|zt7 zlImx}wU1^?0?X-Y&zV(c0@;(FTWi5khcjHnwO-cfnC!AeJcFbA1D%ohRJ(sXY_<(M ze}aS4ZQgBeXNWRoDTQYG3L2_3#8&?D;V8TuinuUurLi}`FM`i{HDie(7)y$z<`hw7 zkH2K~9F;+o>X|U#;!xa<UnNWp99IRL?(!z)jbhNIe;$G{Lx^JTk0Vb|Y9C2ou9`V& z=XTq5ZWQ<2k0P<WjDF;u>u&bQt7`H^>}rmmDAA`pV*s71ID%je$dCNxX!w}P3JYbO z_!3AG!iT7XFWf?Dp_Qz#6KjL{%3Z;<u)mQZanB3K`?^K=SGMbiQRvhS4Tp0-o7=A! zjAwnnBUzRt-9a=@JB1jDJ~YuC4#%6gE!Pp;;1Jg7`LunAPT9XQ^?c((ajYc0R5n2% zY8%g{d%BHhB#hga#7LKEKo~i`;|`g(+mZCtgSjn$;9@^ccF5f&5%!9ax(%nR{J|<L zvE9q1g#&4Mxr6VnasDQyr|)D3(Cs$~QI+6yTFr3q7HH{D-otpEE;!hpK9_1k(x&o? z;=r<Sh?rrIY;BE;881A{(C1aSBFQx(0?6gDh9ZQd1HVo#L1YXG7`7#+z-nEtXA#7~ zHh>2;QwTPv%BHX^9Uto8&U6h{zvAx(l}i!0Pl3~N7P>)QhX8M^(t#U`i)miOqAW8u zS}8F|h~4jxZwO!F(V(06L%Yg(UX2SY72=?{(RX~KY=fuc@9syu7ZK`N9L%Iq^3#~R z%G-y+E8N-4DABWcBzR*`!DKwl*U4KZaM;*BYWIH79vgU<nx|y>@LYO(^s2(QHK0Ou zJp5rrg&564@jaMwx|R%Bq!)34kD;2D@oC|MiY)Prm|*BI8W_ZOC{mNulTTCnB(-sN zi0~fZtvZ7Wy|W(wh4VK0v*kF0#y-hwSyH{-q+*W^)TPO6Zay$dzYA#TLQ93fMSbG- zIVV8ZyO$smYI@vZWUx8{YxUU^V5o0wMY}6ZY<EvK#&U2mDJ?PvS*#mgdCE4AfXgcY z)>)@6#mCwRv#WbcwF~wFq@P!~rWz5iFzHU-`P@uXA7uYr_o}Tr2@ng86}AdbPA{ST zV0Y#5vh6*GKD_gRE$ZU3FzqB>nE0WBE<+mqMuW;Gty{_p&jWK$dB?w`4RdiJ<aK&5 zTH~{J%A8tm+Q0O*R=FUle(Z&sqF}*%{_E)%Ky_Q=`TPwrYnPAxA75AJQ&wVIFL^9C z<V{!h@lC=~(=o4Qs!~nMhUjJZMCoRZNA;6f>`%>M_Sk?A<-)6=Y3~}-FZ1xex$&Q2 zO)a)g6Iba<rUdUd1C(4sBY)An7v~HL_R1WJ3Q^yl$}t>XPYU>BM>}&~w761p^U;`J zIwuhdm7u>pk*sGp{*HuE+XnF(v$?hWu?yw)24LcIE0@vD=7L79q&zxz+I<`y{YUf# zG9?bP4`h{if;oJn>%md322QGag^qffP3>Q%sSS49N!m&GIB$L_PS=pYa7T?z_J{DG zq=8|>RRo(bKS;vdb|}RY%2ho-V`t}%;%`1r;2T_I%Mo@HxZkxxNM9U8+bLzX57oyG zEj^CXhUB#H+aIUq56;8}q9?|1;#Y*7gJG}S{_^|CD^VI!yI*?@=QT*rg|N8N26IbC z^Uvzs%=Dmyz|?LO-?9rgb5pB~6C6`6YB?9;Noj_O4>!Ilf<C=21HNuv<ZD_`KiMWW zBt<u|ew4R1k#E4ZhSf{odYYy+k|ftynd0lFjOu{S?AHg6zIFs_YP!#eeqz)ew#!_S zIpliwC?t|i0S7EBblOs5A8a?Ja%-wL{un271YNUY^_pjFKxaLz^Q}>Y-=v{ZGWq}& zG56}G`CWZ5afuSkj(H-m;wsXk8<yvAa526$%Aw98T^Wn0c-Hx$0nInKoGy3PlyhHE zjR;hMnAa+J7?&m>x7#iGWmW11fK!WWMHoY7ym+Xl>q@y^@M}rN;_LdbyZoNa*ph_M z*B;^LcRUqde3u9TXbf|e1#9(1tRcH}g-}s>9^LKH7P%Tl3=a?Th8)&kooYDzMiJ0V zkAOIx+ER`ysGORvtteH`@&ea`%+L7~4J^kB+Mk8L@89}}NNi{RekEO8pvj-Ey7ewt zK7ieeIgs&VK%-*kaW{fm47|^Ji}q2Ub8fY%P6cZRLhN3XVzWHBvH1|Dg2jfuaNW5Y z9)>V|5arCo@k{hAN+Y186CXh>2mlA9d1S?oE&T4f8Re)pd*wB=TQsy}RYagjRO!~- zbjSzRnEND+!4-)^zrVlIhYH`{ofgqr3VVd@6_B@FH7e{yI6Ni5fLiHsLNKA9)wxpi zangwD5;#aGq7h?(qSdO_z=5O?Qj&0jFbt%xOwas<BJ0+nPOM?*s=)(#Son$H#^lg; zkT4mq=Ma0&nZhAT<oN#Y%8oO@bgZjGnEEK}qCk%FIM-5!o&r281+PttGc#&{)S~0v z(C$%q{&_0;*&1F$@>R1YQMeB;cSpBfl3ua`ML1%BXMy?OqpL}sogx=ysycP|E=X?2 z<{9?nb@b|&W7uJ6F)v*S(JW(YzPrAU&!JireDd{-5$hJMkBo>O*6ATi^!t2$=?q{N zHD30`LftslK5GfxFAp&$dT-tJR2lIQKkd&oeSziqIT-r$aC{dKtiyOo!m{6KO#BK& zd|eHQ;cv6_!s$cvZJ~H(;<<GnIRZsbX}oW9v_Fq+pp3nBU#1m$bZ)!>xQ@-=C04TV z;!olDbjS1$qqPowwRl60yXSz$eOii(l@R4BXaC1{@h>;m3Y3Tnkr&mxn_k9Sv?Wl> z5Q&{+<oZiyJXz?dl&}VnBKBy&;y9OZ!fjw3w(6g=IX%Roq}m~)NHCI&XFiuEjc5?I zAhNR=X~E*yy>O`&h6oIOCjam}8UM_I2O5Qc>@l3CMdX0XW_hIw78c(>HOwXeHBrOj z5GncK=GP>=CVd>}s!@{va8?99pP#;%fA|?LR<jK(<W_^194R+}uvYOL6OGeCjL4iL z%&&|~{4rgc5VerruD!Bb8Ju}~!-Z-_58rEc+6?pfj8rzGe{T2jOBISmrk|(erwijb zrGP5z;G)t>!VyT(rybneb@QT0?{OU6`o(va^yqo*Hzs5KdU}Hd6Do5x(4;rkMrrh& z-dK&OXttY}&15=<;p;oE`lq$V-ay0yf>b8`$0m(lzt%HJ2VM%Fm&YHCVfzY|()$LR zO~abmeOEF{*dHpiDOg;oo)^8`5{cM8caD?vCT<O&fXJ^fVxRe867_|Zm6t!x?Jb>U z|J_vby|I^xjR@)_Il1xeU&uJXl%5MtXuZng%svj0BXXr@v9#f3;GCcs8JfrAjM^-; z0`zq87EG(-EC=JPH1F8B-m!~W#-}3^Ce4Y<=E;xR&V^e3{v8Xi!fPDixK0~+S|oW5 z36c&u-B*%eMeok{zY`YY6j-&qj<&d9J0a#hAs#v*VLHwcO08nFwj|0J{v}Mv_Q&b4 z$;LV4vW`v=5J1T)yiNpO)HX?Oa{>`Mp(r=0>^-TLJ*ob9QX|dkRL@fSQZd&7QuAOE zN%J1X^&TzuUiZ>_w(JSqJW^)!Ew}dj%kl3Gv)>y%esA1jL%3q|XU^Qf``r~=NzSUY z@JF00Y>Xq4mJ~H2>rCu(5i48o57}DD0;qNy7h53BhcPx=M!7UcQwEzDOM88_Ys{AH zIN(JAE7*4IutOuH`vZI}>H208%UUdt+GX>DNfXm|+N<w%>MXbxfmRJ_=VE|DhN({? zVs#?&jHQUuc^4JLI#>myq^(Ed$k_~H6H#(RW(vrY8p(~POarv1L;hIAtWFb%(}Rzu z&;6Mm*%rtLzY|=<V`j$1yr+e)jN|mBQni`bBVhbZQ^<Zh?Ntt)ONQ}rKylRU-Ggb@ zbxzMs3$~eQvzzwWfOdRdT>ffa_`!I-Z*v>~D7g4R_>ZG&Ht_Z=j$>RB54%cJH_IY- zRY>h)h3Un}{&$b{o7DpySX;7X^LoU)9aFroW?40q&5UTnavl^-rgIrS?6+EQXUN4R z5%Q8AwI#($rWK=@hv7_3ZOP4W&Z6Hy7DUM;5&91C0e|Z%tz@cD1i0`(_=SF|^FiB- zqm%`<ROcPWg$QWzYo?kR<~bkeC^O3|L@HHx2WYhe@Q!zWx9!xK_JQMQz9}tb)d9Ld zjQyC-Nokv3lKh0Xa1pA?>g$KT#@Tif=d*^K+So8pYZa?WjIy4ef@}w-#pd4=nWrVE zHj0?%i>`J=xO7E)?j|{Z5^(t}cYj5$Njn0csyy$l?ZB<(0yE55+hlmN4INiYJ1V*c zahxBBab7IST&T<XBH$Ef=zKqk#5WHN)pwGxozoW^GH5|!(46{G#JfA3I7RNzj1Jdh zuE31!6+o=sHU+n|*m9oqWD}OJPYhk+x(3X-!mxx-=c%5A36Z&+-(_1@!)(<dcC$G` zZFz|dTJX<#T+|){u|sby3x=h-v)*@i7j8G*$rVn3dAsLWCdKlr<nmDRF5J$(eay|R zLzGBZ0zK#S&-b_qTx$Bz#B7!$_+i;`-94>=n>TEwo3sp7S&FsHixwsj6k({_unXeO zNk;V0;vAv+oQuV|d|&ev%{*fA-SJ1Ux=ogx*KuOEmsRf9L>qaS<<zL7mo*S8tUC9t zpQq{=tYmsDwmr-$-2mJBFN()3nx-w9ts>SkKE{y*H{78Tab@%m%LG5>K(3N#AC+#a zvnUwPNG=Pfc-K7f7Uqd7<<_}Q;{oR_6DGh)&uIwPJr&~W5YEm7D?Tc@#ZU^=XjV2B z@f&aiy#inN01A(O^`d_Ly3Kwaq1ntd0!QNFg2dsOzBfYcgh5v2e)22Pw^3Oq*Du87 z#@Kzm{n^OltMEM?2y;}){&7i&;EmIKpX)lrn1ruV6Bnx02(pbAvJ7OM(KlEwlt`Sw z@!X}tj5op!d?HxZ&nwZ(Qo#0E*CU4GB0uAzKCidwUJ!eDBkHGj!4)6t>pl>5xYvMG zN<GO=$E}+wje`U}tX`GqUX_0BecM(t)%SbcqGWY%QrCBn7aD|`?`q|ZG7w%3t4}gd zqWsDVu4nB^zp(Ma!=9FDJWZdd?(qV&jz~XEmMvK>BU#Bx*Hjl=ZKkC75ASY7)bpsb zEf=P3^te_RdH7M|)S6@0dKzCzQ=)4}e)^GvoEbR%3#uLa5^BbaH}Gv6Pm*iwG4#cC zKRyoB<aTVHNXhmjk1jnK?Jj6oD3%^-d^%|${Pns2)UR83Y*QTl_qK^2Ie8mV`7#g3 ze!MnF|L~-iave}!<}DSnxobvPyq(nd+Lt4*_8H40d1|Ub-Z6d`!N#E|6}{qptFg@! zccDqSy1s;Jrwn*@+g^~~(7Jt!DhyOm6j0Vu%WSH4GFFc6fk*ojx*LYSVlR7cBd!pk z@M_E=o`>u}AJ8DMvNiCrQ?L&U&n%9!8+pPMXw>_aZUGN^(HJ}4$c;>+zpUgD>31mw z^(m*}YaKO^pCd>~lO8_p_E!gjEEsJ|?alf5nf<Nu)6izYw@OT{JABMdz=chY=9%x} zf$E4I9@uuH^P_XfKuCLF)l?v8dPmz&sSq2`5IRlB4j>OqO1aG4>JIo;-In6HKpT|Y zItl==c5=BXmw0OC&Bc0~(yK3m*KdZDF?BXfE^-=3z0&OEH<v;lso$?rCu>2P!NKRo z+KWVp1u5#H``Z$_x|T=+Lt^`9pOEAq>eeM8nV9w*zRh`g`uYN;_s<W+218xm&W7!@ zgYI^inrXTxwi_YoFRN;Jnlm_VVQd~~xAKMEx;LuY736)WIW%|6K&a>DgATiZFn^(& zx>PuDWG=696ySOfm|Pg5x)9n{ZrHgB<hG!9uH3UKQDT8b>?ed-Plwfg*{l8P;r?_V z*}96dw{d=haCt5XFi8UbJFROeOeVe3&b`&?4zMird0C93&Q@GRtR4vuhsViU^vZm} z$<FIq+(XT{yb?EAj=$RjD?}?@^jCmjvd3oCM2MO;C+fAmI;W8+EqWG1i1bmc@Qfvo z&2d>SMN$j%aJpARbQ2TNBE=uAqo<36MBVrnRkl@Jd^t*lKN9K{+4~|=@M3f}HtMQs zl#pI;SLLx<)|EEBT5W!!*2P{S(MVxYU6HI4<k&%{IkA)@u5A3+H4<Di7)7nSOnFv` zx_523=Ix2VrQDas^v`o=Tdy5EOEqA*PU?A1+Y(V9-zIZ>1Pg~ord+c+5p>iIa9ThQ zWjPEb+%YV17|r@VEWC(&WI`xtcB-Bq;vj=%ERuNKN;To2)wd%?OUBP22Pt00m3?tj zUpd#1qtzEN<@}(EiqP-|<8J=p%7q+^MeIwcN!6Wy|MbBe1##>EdalG%(Wt#RAeaU7 zb9=ZEES#!(_Xi5Sw#;V0MW4vOjN4w}(-f5R(5i^*D}~cP8*|@|ds75={BoyODxK8x z0AW1f2Iyre7PdJTxh<99@hYBKXzDcL-vW{(qJH21YOr2*6~^MJ7nPzUg-Nsv6|6h5 zk)gW~3LE3SFh26}If&JDjL23q)xb6y<TAT^W4u(t>LirGTHG|=J^z0H!zzhB&G0*2 zk(us>g;mxDIF}KeC-Fh9^2%%~w!au7vw!}6(&PIS3=M0sS$EWr*R%9*jpK(VRSkxC ziTt}u@9%R>jpQl^{5)0PUz;fK1I05=)w%Q)+H%;le15sTJeZhhZ{~dIMqk*cxOm2_ zC+oYVOa#ThI@HrQwrnS*FV`8*D~|UF*#8J8#{6BH5()uc&?Cj#eW--Tb6t%ny~D!d z01pu#L(_9HcsOvd-{H)@mLy?JB;6G_-5wCO_D5VuyY!LXC6qet-Rcs)ka4(z{90Nm z82z&+ygUS?m>`;Y_=inTAoPw~DKtrM2g5C^QYo5XZlJyzZ0nl;n5ZJq=#_c%X;MX= zgYWS?J!UAjKTU_t>g%1b<(uM<c9U?480C6($<o7BVo}(9B%NUT3Pb+qsLgJkYo$>P zeVE7jDpPdaAUhurXXyUUKyj^0vM_gH)OY@>vWLFw!g;<LGIg~H8ot#njpXk!ozmgH zbv=wV3#FRU-#yEhwT&w(F0=fWZGLC0DcADhYP8(**%5pHGHs<t{^{S)SHDzzd=xF; zvHrAEzH_r9MYvT<p7D0%vXY<Z<E`(V3NQbh{8pd<S9}DhWxE%cel}(-%OHB0HBS+J z>{sr%cMaYx@PGA1LsM~3Ao^5sNce_RL+gHmX2q-3<SwOAxz1Civ55>Vg>GKef`Bpg zjV|T4+J~BZJ+Qfg-2olGn2QreGNzK_{||fj9n?hNJqSFNgdzl`*94FzNa&p;G^x@A z>C!;~4IQK<bPy@h5ip1-V4+Kg&=jzNhyscR1Q7%by@&JryFYGj?r!d%yZ?CeGMU-U z>`XG7-JQ2@KaW%S#%7<fv8LjLwL_QVxTwzajR~j7W5vmf-cFmNJU{uArmsKkdfDwR z?6~vJ?~SJNOo+~(m!snM{gr=2A08`rLU<kIrf$DJqcWFzp}W;O9CIe@Q@XL1>VmI2 z^ZaMMtKF)LrNYtsnMDs)RhKI73&{PRPmNLg^SomXznr1{Ua?#lG8X47jSXFesi$C3 zOs}jb5C4v_VuWDmqdKtn+Xw_Lf$>07Q1i{}t0~%usRw`nDyL|VhWBUn<gT6fA(*h0 zk@qk56D6rsFcXpzYQS=P7-wMpZguoYkjx&re`l>RUT5zT&f3;Ek<J$Td8Jl@VPKT5 z4tZZ^<vlTd$v6gW`*bA$eU)B!9DHFbPHSrx@hNB$D9zSOzax@xEL=`snxoyNQ0Ke! zv|v_9jGqf#p3EMMM2Xr;5<lINx=1BCf6sz05wLNoDiF{j7$l(Z7h{$3Fz&JKpvc8~ zQTu@`rnE-lxkADn!7)nosLE5#Tr_KRVc*@{$y^y{A2Bh%N%m?HeK|Qo#%O&-(1wpb zFT)E5g-8eH>zt(=N3;y6iFldyG8T5$&jl)0$G^r^hY_kF!#)K8VTrE^tW*F&aQ{0q zNc{D0ERn#61X|fr!2-Dfw@bhAOPW!E%rDZQT7(~|2G@-~6I@_2+9Wi12yhK_4%HTH zh|oaB3+}lTOr1lBsz>x$%aMz5zZax@>AM^xFXcBK86cQhc^2?F7fN$`FWsvyacm!l zQFT+`p;?*&lOJIn7rb^7#LN=V=jbE@-=k^>SzLPrsD^<6Q^V45c)lD#CgqnxV!?-K zp@jS2*$^zcZExb4wp0m6DXMRL%;@&4ax}Sr>s1<>e%8nV@}7x%#=!G7O>*(^5udj) ztL0nwj7r*r4&&;;k8STWg$Akw*Q;->spOY;1BnK!KAd`u;A)=LBr)DEv$qE!XMPVd z2UiKPsvpo1J5ebK;X^Dtb;-K6>?{ce5CH`t5SJz^OGA?me+&S#NI<gM>7}rUwkETa zbeYYhGEDbx!!=R}cW=!R{mLfKaZIw;b{?cKtf70G@jEXfJON(k%BO}dBUm1&>hhs2 zlSlH=IKPlT%rqX`y|EqB)aW@k-a}gprG=JcTR*yQB9nq=w_pTzDW-%wtS7mj8*fkf z`c@i~J?C8GZjHVO&{nr!E4C4?c9IT0n}!hD>Sd|ZgrJ=9DKGnWQ4^Zdm)scj)^1;I zp^dKk$Eoyz61FG^>DIsAc|n%>lA%yLavU7KPDcmf=&hZQ;qZ-{>E75)J*OoD9rm56 z$A9jicoM=N6uKsqOt#+PHx6uUas)K)Au<M20*qE>t7t||l3r;1RmzXv_IX6~5aDBI zd;4J_f!^~IBNLpMocypb=EmK32pa;dIBK2&9;M@KMotz-BN@Wn08)_@m^Px1C599i zbn#=}%-$@602W9x4}^;sl9-JZ8lznd&$4;~Sp+5lj3aO__LQQx?!(%G&RIYid6%)f zUf6P$(%*6q>_+)|`x&bU<U5lb!gk*qil<h*ROAVtf?vv)HIlrw4kM(*XjPk~z~+Db zumddY^+q*ckAB(hM)c(iG&%$B{^Cb;Fz0831?;nkBMOnJS@{Z;nWn!?gb#*4Sjd1= zbRc7og9yngil$A+_U3ogz@z!0o^f5vxW7q=o);#S{po%=ud;wGNs1)x=5yL5l*`Ms z;Hs<X2+#hHGh<~t32j~1LmUQYskDpwKK`o)X7;law6GT}huKb;v3EV8ipBEZ7o}|Z z<}|$CHLEjk*uFV@*HI3Bn)7&m`!2KEzq<u3K?Rk{CCKM_&c5jg%S2sd#Cc!tbe&Kn zteEQBXFBV3f;`LyeoRsU4fmzLz=k~i0$Hfd>t~69Z6BLPONpz{TE@Rz3@OG#RtKNn zwo>_+Bfv!bZk;3y&d>08)?#n$c&*lu85mlNpCTszK0w7>%3El%T6Zmo|Mpdjqw~So zM*6MZ(9Dc`gLjTsqj!z?<;=o(pE#*eyky|NMyqYlYf@9qk9~KwAfud!A9);YQ?;YX z2!a41%{%hv{h*Ki$?E5Ke)YEr#vZjTmI0%_FfOw8MK+gpZMU|J?CAa7|JcvJ?aqC? zP-Mnu@T*JM^UK)-jNt7bGLw>z!`csoPa<nqHL_RYFS86W1g&6&-a4}m13$8}a;)G? z&3PEPxCL~P{2o{#@lO+}d_nMmT2wv}m4M*u1BXJ5%}G#N_k$D<!Y6)^U?&-@p9sm& zV=AH7_Q3Hsxj^QC{Ad8f2$8|a9{Tc!S~O&Ydj{lYZAEf)^ZW=)a&fiQJA0dg^7}Af zZ)M|(FrK6^+I(XPErY-B1<Y9Sxj1sZLRyU?Ip#>rk0}iLum21tI*gWq)_S>rA$|O2 zP=xXc*0QNpT^3!OAc4$Bv*^)8fuoRKtbN*59KYL;JfBg%SuUngDD4DSo(&2E-9u{w zA#g%D`+Fewd(vyxq^oa%s2Gx5^EDdDQS64$`2*daUJ{d=J%6qn+nOM1DFp?6_jB*s z2Td6L5R0!L7Dj*wFeL?u*nkf13+9scqX{%YK$)raw19%yxF>N!k)Ofq-Z8Z|$CD7n zo=q(xh{p`_nh0wv@Q-*B^uyhCRD=~89w2Uhxoj{jua&2^Okq?=P_X>z3oZXqIq}?% zq*zw*Bl@S&7EvX1)|Tth)h*&B6VzKLcd_=LR_C)-mtDlxAdg-0xef;P_Fi8e1?tU> zYc{xZdI|?Mp&U9<UK3{63=ajhhZk<nN4=vc9`J+x2>fq}wINoTb2;+sWP*fkkL)Ar zpgxmsFX}DO#HdWo;=7&~LI2_Bs5}oXFPv4z;FUlRv6x2}lH53XDs`5jx*X1N9v;uk zD<>v?u#O0`rB+^Idc<7zliBCzA{*^qugaNU)Nj#bfdB77IEBb|L@3e&!nSby<~Rgu zh8<4i7wPkVrpw&@nGJ$tA05!pCbHqV*^qOH;Or=VZr@I<&?pXp0KVzM2{I8a>2P8( zm0p2UdRQV$3IHYoVm~4yZ0SAiy*8o;V3b|~roos1T~Fs<{=a_Ryl3Zi(+l(Rynh-2 ztMJSHyS_JbulGIO;LBfcy!_>BQ*xu>v3UN1t>dD1_v3&A(OjH`U#JkhZlaq&pU7Qd zD+aNEkFM!^UV+P^w>XM?mi1UfZ20za?4Qk7@_|CMy>2=G3Tohrq8sxl_U3%&<u9bG zR{ctUUM&8`y=>sm+h>U^v=TsAnm6K`C@O_~S>)1fxhj(v-uz9A@gs{d7Z>AbkK^ZX zQSZGu=@#*{LhInUl$WBux#ttp2$8RTd#piH%7pOKPtu^(;zr`y30~tf=P&-M{7hYl zI>NFp>A?(o-9Pst*q}@Xbe_mkzj<A7V3AvRl7-1Y?W~^p3SFSoYewueKZ4kUOS}^0 ztxJ|L^ce8*q4RF4ww0Q9?bP>H86f5BZyrflHu=nY>fWqc689V|xm;toB4Ho(#G3jF zVUl<#kz8^U8hugnWCdE%E$RXvTrFKT9vCno-KZ!|>Y0%6)!@*-f+LPVS7#yqT+2F5 zK2MqTEOKv<Zc5U?g#_2qdzO5XH(bPhS9J0C8@G@Yag<PvQdL}Dq8T9ZX$-&%vHbGJ z`BnzHXQGm}9CTH`SR}iz>DMi{olU%8bKzn8tMT>gRo|hH%f8c7YTnOQ4thw)=-=sZ zC4DhT8S{ZBRHgPY7^ih!Uf2?}T{3@u1&1&vel9;#z-4+rE4BZXTix%}fy>XxXPJep zp9zhnxkD34ct3j{)2Eb?Vt{eop3$%+^WgV4Bfp+~ph=A~zj=SwREF;Pn1J-h??a<& zrXQ7_k84RMO8MJ54Z*i@HrCR8HY1E#PF9Y%8YRjX26KKY5qi@<ri$RZl=wyK?eqxD z=<Nt|y8l!lP5RSke^Z0!gP*g9da<8580hDXzDi!ANWvMv5g9zNfaBGv$E&tOfE>Bx z$_D*;o1uCA*A(rwYu)~j+16%7FP@$9AD{F8U<3c5q_<@MW+6jw`PXX}KV%|FI`PU2 z>!G#S(HB9_Ud(%~p?r+~#J%|2ko24OBPt5OHaWqsJ@8#1pTPwvFh9Wi3=7)>u5}VS z9@@%Yq%665e;c7}DE-A@d+BaU`w!wwA3+7Sa6%dhFt%DTwR5Z`w+`g8_*RH~e7d{8 zAVwtwsvd6q3=yHh&YS&LqU-Ou%H`wfzuRlQOM?@RvV#Y6xI>|YPh&FvlNSw+&Zo)N zu4>^AX*JkK`(LkH^Uww1&F25ogo^eb)&hO0*X(QPcZqCBZu(mT2*1ByF5{2A>UJNO z&~|_)HwRAUtN;Zvz&E6LJ<=cAi$9QCW0zs<jzoGqnfKfH(z32i2!WqUrfVe&ln~g+ z1V#!D;Rl!zN?^Fc&vn>~8yaRW!LqLaIDBO}9{?B&Q$ETjGQ!c?SR6+Q0Or!GV?tyP z2Y4Sd3m(cM$FulIgq~_F->m@73P^Pcw#lFDxKDJ1nhSgxK%K~*Xl(F3kp0(V%M&lH z4VOb%<%>!O3h$B~w~3B=UZ$-Lyn}M$VfD_WKvYFOe<7Kd3ntyaac4=+(@>7aWG=TB z94O>4DE$D7e%&Bz6}W|HoFB&V_S6f>2aYKQDO}w+@7<vHTNW(7spEn}c>Ft_6`sA% zeD1;!y$Fatn2lYm_Oe158xs%~{h0Ryi@zf=mI-KO|ATcZ=tmduvH3=---gq-??z}A z6x@JAmrW;9uVw^SL<Zn0bmLrb1ZX{Cc^z)Dwd}Ta>D#8`vjLDr@JsEcXxpt7H~iV- z^M=9$nwf)ejV&fo19nO;`<3d-?+V7g3flN!1K6m+x!_AnYx<YiF1r^;1GaLv09R27 z#$SRA?=M?|*IDD53}AsACfjNcE~}rsHn}>jasQ^xJ~n}Ej?);(_Ll}^Dsi?VU(~kk z#k^58e%_2QAc~q6B7R?2i5*}>zxdJsK$(>CP4+S~g%+%v(J3gpEj6?Gyto>?Wy7fC zx|wMoJK#L72%c<~;8k+Fu;U(^4;9<K<o6P`(QKWv^GRYy+y5E7;*)ESQse5H(VnMQ zX5x)T#T#F23wjB@Vmoznis`se=b#;rpP`<<AyZ4T?#f$)BQpP$5ZjjbwtrrmJjDu? zgqU6lu)BoIpLJlD+H`y(O?)QnoE-Kef-KNVn2k~J`b#H>b`T;A=RSU3Sb2kAiaye6 zhuwB3=tE1-M2n45S@?L!?fY`{-@>f6TC6>QL3(>@b-Vkj;ij}G0DoP<6N5c&R~7tX zXz<@%Vr)YA2g({CJea6*Mjn>nu-#X51Fzl^wWu5|PX|Mg)UGKndW6N0$fd0WzHhj= zE3z9PZw_w)BNfOHjupBBVL|j=sqlxTVA<-vc~iDwBK!B`16wET?^f6yyd?7u_5Lev zu_XXttpNAC5k*gGSibc#reFzvsx0EFIZsvY!j$f`wH0M1mi|;_FmKCqk8l@;6hBqH z-<Vr6-bOG7vigzX8f%xZ?T`MPEs$?>7C9)cP4bF)#mgiNwmo>1dAm5QJxw{>sauug z-CmG$K>u6yiHusP+@+Ea5v3jNWwA+@Hrono+l#yjG?v_K`aSl{#*ECxWEMX=CUYW{ zj1^h|mST0A%sLp@ii`VpTm~8w5ZZ!NAiILu^RJMXCky>Ac~C38wW|Pu0V3nG)qiI= zfp0)|A4o@s`Wizd{~nI{+9C7b_7efu_S(pfp2!z_k(c2R6ycDgI#_vFy{oo@WhIii z!nS;v==6Sj@F#O$e{hmcR98Qif5;5h*}Jr_{t9!{`K6=m$6*IAzAgUqt3MH)wVnFu z9f7~qd%oU!3y!L-=x8^__rk*I5=I0dpX-GWhXpLZS3RRz-tmq#8T|R0*Cc%Oa`Z=; z^^bq%oH?Gg=|&IieSqN!|86Q)y-7~#CJT^h6(7<xr|w68Huh_{#yF{y&U=Z%zS0^r ziW3~|)#P5C*=+j$I(qS~=B%LBoN&ghnAT6_?r&1vbtakCDIdn~nIX*8a?E3_47%%l zx_|EOeg5P5+h-{SZ@v@t0vg~dn&h15!BTM3430Nv`9{Z5sI~2fMTiVt#OX6Rb}uc` z=%dbQo8-8hu>3NsUWdhsO0Z~CV&Wh@1O#T|zU69=`BpH2iL0mdMo-+8)e9fZC+CtG zuYZK5&Nb!#z6t5Qp%QC41b_jBEeB(E-gXD3pTu;U9jUxN)UZZ`N5zE8Vm}4+5?pZc z5Kl){1M>v_3(_3=xhmOidUrTwy*{<lvfVFb3gVJJK^WMdIdr6`J{5hz*BLA0`YMXP zwxspO`;^soC?mVLsh}&GmB)RqOe^{9cG1Ii)BHFQW~d!J?sZDm*>j$npB4w`AEh$0 z#`RLplxum%BBBD|EHFA@W}Iu?!w-2(`q`3Be{ykb7$&R>?siqi06G58vsD~*<Qkpt zS1ql9FETE@E{p}5U&Z|MdsCgcx=r?$wYie%EdA`K@z(KA>9zBWvPV!4nUeUXQL1t{ z@n~|f%V<0T_3}dJ4R-bH8tc32>GAxLtRv;@kg!QFCp@$aB_tJ?RWYY0I2%14N~!lg z2;KcV`?>)0K<icZd9%lkQ<h$|lUN1+K0~pxsDmmf)z$^nnaW(<hvbOb1JbdG#@z)@ zU7_OW=(ON{I_v`J_`X!#$zC0Sx<IOeU?-2;3thgbin{nfbrFSD62LV>jl+Y4Yi6#m zukEQhB!XF$(yI)Z4JL82ulSzIHZ><a^D`6~F0MxkTp7Y9wu;y{7{=M|5tBEa;eBB4 z80xI7;#Baav_QB@IceO|eP{q_E^?<fPM<V>Sx)Z}9(9JBO042{p`zgk#s-9ru5gVh z1D#T<j`FuSrgumoW?5i@)_1PnM6G8&>v}NGWvWh`2D~qk>DHYpW;KIJfNC7*c@B{) z%7qAHcKO$nI#oscT@kMu9Ub&eNq!EQ(RA^E2p^u;t|f8qsML1f>OFJyTfjoc2a((> zZo}tK+(6X-E&*hn{X}>uNIy4wVU<I2JVPxe3n8gWR-1>hQg4`DdwxSR1*$<8DXcf_ zVm^_e>zEsWQd8*SxFmVjwHFyx9VHCz!5Yk)^<Po?ZAix>obprWh4j7$#?o2UI5p6C zgH*z@;aaEp;*E3$l2M-LI-P*12&)Eiu#uE3yu;~2U-YW~dKI@V*Rv$X5fCFQJi9dm zc~*2YIToDcN{Or1ta_=XK?-assy$ZtwDLG7E=$I#b8;{dp>?CZB|bL@rT!bAVe<Te z4Kd|k;ap|jN85Z-XO8)RB=qMw?n<#jx=WUOd|ZsVfpn_-&-Hq>9e`|FD|ewAJ}}^e z)9y@wvT{%GzB{LA7&N^Fn`PqC=a5SEL^5h<OcD|o7?*o9=l;`ES~VwE&ivU)<x$sS z#RIK}O!MT5M5ga9(dD{xa8Ra-3RUus;7882Ga4WoDxr<ZCb^FcbxRY54~q(G^(2@{ zqW5~;IQp;!isCMTdv6#(wuN2dqbz5GDQ-JodQMp9VHVjb5XL|d#<3SHPL8(<j8En? zM_u<Ta`hsGg0ysrNK1FX!Kc^V%C;<#)56BgVZSwg8)n|_uI|4M4~SbxxTU5mLet%O z$tfZp{vn#K`tIH%#G`-v77U~TuQEX-=wNFSWDA*S)X{-Bb6F+(t+MxPx^NAqJIF&T zB69^mQpm^Xu1sMc>M}Ckbe}b=<R0pbymsOg`Vq?)R{|RwClua|WY(d6TVXm2mR`@u ztyEZ$P@Gc_UiEhBJ2W%>u852vCO}NHe&UJ?cvbmK6l3FzI4*}lRS^jpkg@YJ!XH8L z+x2(o3=;yFEo$buU_u_Mx;sZMVu}xu%2I?o0S8wQkUolyCAHuF+ZCvGdZ0rxnqq%8 zyX%6S%l#QgM%5*k%fWKk(xNu69l8bmX?~9f(BX_H*z<AU5S6ft_P=TPB$pok6)bbV z2Z1He@cGX6y4l&v-{{P#iufY}!kp5N3IsoN3*3^(p?|Em@Dd~SNl$rOBVmXk?$tLY zBcCS`zfd(1+Upanh3NPtZF@?Qa<He|x#z#<gA)>Ex?J?k4HDoQ_7<0Aw?a8mbt0qs zbr37AIBC)Y`#A!dgCLifY|9}z%X78uo@L&FMZpDc(3?3{A7_CjoXX$98bQk~L=^Rk zu8600;X7iX&UphmxbI|&hnQi2j~C8mfVhG!*Lz|&^4__>NL&|s@d}dbU*V@F(rdB! z+DQH@j=5=iZM4@dg#Q&AUJ=YtsCS(rob8ChkxI=+YCnC9pdpIxv+`^r-gx%fP!UdQ zTL{HTRb5Xz@AAbRRC{>gMUMsZ$$lQ)>;$ep{)UEUc?Z>%jcp)zPVGdgE0>hp>sMLy z)eY%LW36w`{6J_JXS<Cg$x=&)n9mXuS3?V!b;aNEC7~x+_GTk&U3h{k-&8Mn=`y=` z5*UtLKmt)pU^^8lF>WeYsxA-d9P!7|mCv2K|H%uoZzVMaCe!`#EQGVSpde-sq(zbS zd-euE<or6h1W*NQi*8&ue^mSCEJPnO&~ItMAdlM52M%X@^Wh)GX-yI#b61}4DIvc1 zyzSK>Ii>LJ;mbq?<6chbjuiYY`sFJ}cz5uINqvzvH>>=5zh0(8TTq4M7%yIoJV%oP zbIj|Ahe;PhhU2pNoe-?(sbSXrd;a>2Ken9@>J4IURW=~Hl{K#Vtam!|VY7g7=0pU) z`Qtlsh-CGuWd`lD%d>2e%ZYxJ!NWHSI(%;z;f%u!IQzHtsOPR327xFWuDH~C;mOwn zM4&)xf0H)-Z|=<d-xgjN+_g*na+S{Dbt7aXT=*lnd=O{BX8>W3K_}=^(I&sTURLYz za|))Azwdok?qSget$jQ|jNgSHMVa4E@v?(bf0B83(2%?Rq@IFKiNeb{Q0AepfobiF zdb@n_x|6Q(lY2vqXK~3$MDIXwlI83EA)0dTiQa-#nCdG<W*6g=yF%y!)pt{0l2P+l zr=hM2K~E3~lD1n4x-Qv$>tuYgPVW!2hVG{)&eW*C>OwoB3GmDAiLbO>DcwtIWQ$TD zM+v1Z`I#42G!k}KOgqGmY}*)1s!4mGC^YNd0jG3lu~Kjhd*>l6LEunT5#By4Pk=9s zJ)%0ksg1Av_mbo1WVNAba4?qmrd6}VlOut_Npbg&>#du?KiF$k^B2}NHpppgQU=yT zWW*eKMndKCx;14DaaOP!8A89;C)SN~ae@6Myfudb8BuG1MCPhAE3I&ytfs<5^&y^x z8*goHrjQTmN=u|NB5)iDm~7ha?kuw|S|RbZ+03%Z;+eH%j6nX}Az8+OL}tEu-GNd| zYk$j-@j<%m#S&a-Y|UjT6uc0ZApY>y!C9iVK6$S*9w?Fpij~;|Q1=<MnMJ%HZ=crZ zXI|An?8m($cm6gjGiKgkSxBNVPyyEO`ypJT>Pm#ez<vUg_Woz_b>@fQM`Y%+<;+P0 zZEZATC}AUiRe$6$@*!SX03kf!PU1qwqz`YKGeMS+H{A%MZZc;k(678?!X1Zq(x23R z#xpO~F|SgYYagn2S0J$zW@dAtPw^~}Gc5l&I=hN9x6+*`_}5JJto-Y&DAre(kqj$j zs2URTh`cTJ5cPtFG!t4shYLU<EM_>yX0+GYEM(cO>xIiM9onq3yIQar&N;4(oCz?g zoj$Yc7Qh)%&l$bWNo3v8uiwG1@64mQvSqpR0=SFnx#iuse$;XO9ObUA=Xt))Q@?($ ze4S(J9arNzZ?7!hU;v--bzXK09`0<ui2(kodj6Sgp|@igBMZ(S^#ZHw0_(EeKkG5S z*10y<1%Yx%Xai!`Li8X2$ts6p4@6DjIby|TQtEl1WTPY+grqlwepVpALitTug*7*X zadIMOw1tzCg_kTuEac8xZwMO7)r!dRUzHQ}3=|!#KmSEKU-X`6NT67Rr67M`o{tRA zwFcqH265Wm4RPF<D9c%iq6Uf52IjnvBFF0z)eVx*&*nW06gS(DY-_mC)u7dIR?Kzd z!f=DsyA9#Kz}l1zsi_9(nLv@)299$U0+k!ms~Z<T$VmqUNUk@?9G{ig{>Xb0h^B88 z2g{2w%FD9LpJxe@;@p%)<p}WxNeeg1N#~sZ`SF!O{Y9BZdChSFv7if>AO*v7ygE5D z#`22R<6`SzasPF`=Cg`dgOskH<1lMf3XoU!mzPIbiVxnC3z1hz%t1!Ti?^*S>jkOg z1*wixm5Mf1%dNQXY$`6vDOGH$)i<IXtS%~#t2J(__vXBK9CUF%TfTo&W9*z`iM-}i zqvnh|O>;(GYavIN5~Q`dsdfIL)_M?T-3qh6iTOE>0S05otg!T3*v4@zYcTGC6^?rg zmpG0?1#A0SX-jNrTa9bW2J2{A>8Nh$2#@RFf_2YX=^Ae79)Hxe2-f>ysb{yP_wJ*f zYp{NYrT+CT{pyeU0l}AmK^h(BR6TS4b$v>P1RLB97QM4&ke4ePtsq1UHY``TbpMm` zgq&){meF-N!}?%jPD|sqEo10M<KAGCbqkZ>Et8osld)jaVGGl#Ez_Pc)7jw5Pc1Gl zZCx%HySyH3Mzk>7-!cmuGXsX0TU(gZZ=2@?8f7*b#j{!PE1I#hD?Qk<keJ{((`+eA zW0w?eRufaS(q!kB*|yTN-cf4S=nA@Gp~#`5Xl-Zx!lv2Ubt2bU(dN2!m{+q+fVJaI z#j6o{TA|HXiQAeningiSl1a_B+0DWkigra4T1FGdca3(HiZAj*?4NHVYqss16&?O{ zAhb0*RBk);=GhH~IA%9HzRR;6Q*<JRI8EhUo!NE@P;_3%vsr3(cHMSf&$HeRxn|LP z?b!MXP{~Cz#D$*2>dcOdgrY0^XAAC^t}NTGs8I9sp>8KlZqlJ<vP$lMgWXj_FKh0& z|4{JI3pF)->G5I9!y?qgI@GhL$<ry+*j34^HrVSrhmrq|SDu1*$Y+Cym)?n6-ZWz9 zrNmI5TTMQ9L-n(ju3rnjUKFZVx^vx3;YMYsZuQF>n5`T2p*qc>zA{a|U7^~&N`8XD ze#4=-cRPM83jPzJ*r}KPC!7AWp_qlxn|~W`u7+x@E8PNb*(q;a*|%{zeklS}#(xdL zJ2hCH*~Pb5$(QC@a9+jpwkUIk$OtRj?(PKk%Lgg$s;jmH)o%vjl-2aYf_d2jZk-J@ z{o-s9CUI5ynuD_aHDzn#uux%zP{uEzP>wM6t6^bbfp@Jet-pj_Y7R|p(T)fU&unqY z`4U*LYjt-w!dm`zWs5>}%k4{>x9eMU?q5Z>>{>MMMoP;^4Jzw)aLT?ZaQpCuCOckW zHrx`;z8O8+f?f!Vfi=dgD(ijWRM`yk*!^O3$Z5K+Ojr#h&`(OA*&|HJ5!qGrPg*Q^ zZM_6l;%0M+5|bCC_u|^*;uQ-G#9HI6cH(h`o_gU4*Ip)=+QtzJ)J&VhtXjP+_7W>{ z<30DpueT<hkxvTPGq@F=9M+H=tzsOak`lp|lByzlcQ3_SE;Wzqd{Jwv&PHnao^WM& znruVb^GTt4l{@EyQrfumTK4X+%cT!;p@#o;;C;F?rs6vhez)!A-I+b#S(S{z(2S*4 zztz2rF{RAyaR2?*%$c1`pz2L%MAp*FtTX#JSyi*QL$kTtZe1<ZC|3*<q(x*3?_bJm zxyQYguGl8Z-<HF;6{`x&70f-STa?TFDOYAcASfW$f*WUD#KB)+6ynFO+naZ-2&;-? zv%%#{TxFdl&cxt2J$my4R11K?1y^w#!Lytz3<4r;PI3F9X|9ELBG@vxi}rKQ>AM!) zZ{zw1EuL7-tBNS}CbH|7pKFT1s=Kn;x^i^eowsdOD=+6ta^-w)$Nnjz^yD1dmD$oT zSFSW5Ph0_SIgoqWlx=SxqvxugO(ZQ&T`9+5QzHIt<Tb~E7LIhkXiBjn;@%rO&iCBx zlIV)XAei}V>CgRwfOOHCS<>GKF&iR_$+Xr!sld#QOQ4;{ey)Nh7V$8(x5Uns-KhQX zR1VArS6Mp6jhudho914z6MJ98iY8Z0orCb;D#1J@b_ZvGkg8amn1^fC9}>)Dw5BKs z^6y#3d-fcc-Ky_TS3lq>Pu}NvAHi<!%BBlsQzM=`I;d5}or6Ty(Rb9HIjmz<uV;^} z=kBQIKdeWoH=K`bkmzWTK5URxZ&ZwIRPAWgJZ!|NH|a$-8Fn;r^VXfTpTpwV^nvX6 zZgbo$FG>Y+dqtFZ$Azb%s={!OTwSXyaP0cH+Fc&Dl#bTBhppM_ZF!MxMICLWhi&ER z?Uj-3)gA5658Lb2JDMXq+B!PA4m*0)I|m~>hdVmo9nw0VI<VPBvR&zIwgYldA~;Km zo=)h!Ftz3rRcq<D=UlPpxE)z_6<BNGN~Z55pE)A4YV@*4^>TOi@*nl0H2Tg*^+|O0 zNgwseYV<2c^{aOFYaaFEGzRpd1`Im~OiTK}8r44>I9wb!=kIfoi%5*qFUz^}MgRRw zu08va99}q%BVG=I#!zC^P-^GU-J_vwjp4kg;iAsr(xc&WjgiWzk?PKo=SL&;8gH7T z-n4bT={kDTtMPU)>g|(nuOl>GIvsH)xxOqa&RcO10E%Eq#aw|=oGXr;)RLZCt{?V0 zKO7%@0BVjxqetnxM$a6NvTBa8M~`uLjqx9kp=g>P&qsfh==vyq{83hOTrqlFwQF3n zbZqn6;Hu+0*Kgb(E4%$WDt-GzMW?y5P%TSGoE|gpuXla+KmHt``6VR!OGMX~=;JR$ z&B?^*$<(gNyT_B+np1hvQ$<}<rN>j{n$wlh)74$m&-tf3OFy}my!`6OXRbM69X)Za zeIk2y!nKrZRC8t`dS<F?X6ATiR`dHp^!KH%@2kh(*EN4^NB`LG`f+^x1E@uT#!%?H zDQ9RDR;^j~nAzPfF23$>ru;l4*YmaypY(R^+;IH%x@*F;>!&8|Cr)c#FJ|7bd)|~b zZ=tnd9kXE9z2HP!aMk+d8T0FU_b-3iuK=w@T1d=dME7DeZPC|xPONP1P5F}_8WZJ3 zqG{j1c6ITT(3Z-zmMdeHtGkz<)0XSC{xrw@Y3u&eMf=mMwK5p9GTgoLj<zzUwK@^A zI@P^8LtCBIS{o}{y72wC3~esQdFf8f#8UU)W7=OJh6;_P()Uo$oKRUY>+G@X+&%03 zC+jH8#`)L{iJpyr59P~ZHWgzxReLt2WB=aK`ujI#>z4Z8O@S>7%(ivxwq4J*)5*3g zX2&yj=X%eM|H)1OW;Y~uH=<`Z`ec`g*-MPwOYPaad$N}uyKDMm%dltP;r4zx=Abh6 zpt|Sa`N=^&=CC>Tu&w8?>*TN(b2J#6e>B{4^zP(n40AjYdpy;1JoDhV6hm8xr7iW) zR!?Z_n3L_;ll`8P<C7EM+ygQZ!pNhMf-e78LE}}6g3CS}NM*ZV-<cv?@#-$0`t2jQ z+@qmv5#wTwRJqELJSm6vD0=zFZ;KRsr#n;SpS&;Ch&(u=SEw2-*S*7|nWj+vvC`ze zS~P=V&8O-sPwl(X6rX;6t_KDIQ2P)-Apii7`u75`fZqd?|God;%;5j~`cqZ-R24o| zg-=!CQ&sp>6+TskPgUVlRrpjDK2?QJRpC=r_*4}>RfSJg;Zs%kR24o|g-=!CQ&sp> z6+TskPgUVlRrpjDK2?QJRpC=r_*4}>RfSJg;Zs%kR24o|g-=!CQ&sp>6+TskPgUVl zRrpjDK2?QJRpC=r_*4}>RfSJg;Zs%kR24o|g-=!CQ&sp>6+TskPgUVlRrpjDK2?QJ zRpC=r_*4}>RfSJg;Zs%kR24o|g-=!CQ&sp>6+TskPgUVlRrpjDK2?QJRpC=r_*4}> zRfSJg;Zs%kR24o|g-=!CQ&sp>6+Tsk|G%ihp#S%(@IQB0OjJ}{TwFpz;=%<9DX9z6 z(o!-PrO{{^Sy@>*IXQWGc?AV|MMVWAB}HXrC1qtrRTV`IRaq@{MXaVG7ORHEYH4e0 z>FZ(j^|UYP>s&H0Ff=kUHZd_XGq<#|`meOGwlsFK)bz5JziEdKa+C>oLC1K=hI*>` z`xv;pSvfj7IygExIXk<!x_NkddHY=VzH#HapYQeX>o=0zZxy=Z?|S2jHv>Y0Z-s{6 z437<oh>Ex!6%`d7OCZL@CnhE(r=+B&rKJ@mCf0`pbp?92g<7>l>-8k54`nKk<|%)F zpuF%{X{knO<(bOrbG4NwgXQ+CKYOlC4*0zr3hfynw00-f)TKUrl3rYrT~LspmzS6O zUy+}mUsP07Qc_Y{T3S|CR{ntWgjDgARQdGb<0q9*9{(qvJbF@9QT^;e&GU+9FRGru zc=j)!J^xQW|4%+`Y-)Y=x_$K1$mglysc-#LKgiRRj_J99Y0BH_?~~JCr~l>G{}D4Y zGZYGC_J59rg@s@LOZ;27xVX5yy!_{XiM6%0zyG_~`ai^}DtxL6pQ^&As__2{RaihT zmrOq1TdX~y9qs--IRP+{05AhGh=)pmn~*@9Lu5KNDiM)Rf`}RPGT2k&xZaZJF4)Ei z&G-5?v_hxeCaEP?UA7tI(*J6^p2F)#O+=@cGkF{I^Gs8dRNj^|hYj@$Fi`1enc@#x zlUy%u<8(vTd}pM5Y`}tQ>#64H580j=3`*Lsr`hJZoat0*|Co)BW?E<M$SUu1AiJ@L z4?X1hGW1HRef=&zy@Jm*CE1#+ozRb^%P?xqI``jIVZ<+kA#I+GtQ3<+LYzxv6iGX! zM|^JBWC*!CXw31HD-q5$Jbd}~Mh=OoQe06y&f=Li$DGhBPKjYT4}?3Xmu{lCzTq4D z>5cr>x0QT)#5DD_IIi0z9y(bDubiYT*h@z%<qC%1dZ}#|v8*IWj<np-(AFt*m4Yz< zRnt7QH}6xJo~XRuAHJLpx~KPO96ej#?$*SdQ$a}ph9Dp^!M%()+9(bXMuo~g!ZBT& z!~yKc38GxN^is$t+MFY!Nl7{99_xCFl%m9PB|M~_Mn1TRmSBirMuT@&;tVb=Co*l- zg0C6G8(l3<k_jfoa-*wEyl+@0Pj5X|d3Rk%6_sXHW|qee71lo5Gm?MtutJc(+A`06 z{3wJ_X>Pq_yv;dYWZz70I#F%&JSD;IckNS$GZ$1MZd_sovEQdhNlLjA8O*~K2q>o- z%dWbfT>ZStYm+~$cO^e}3s6B<>vUy<$5MoC@sNui1XdR^VBlc8eq<gZe*3yj+QX14 zrhC>FQ_D8MW$X*mgcvOp|D}q7EmmsskM%i*sn0u^tnGEQJ|;Xq`Gz?vJ`?@SH_X9! z*m9>J-`ZPH{!jY5m)p-z7(qS@JPAir%}p2HU7#`4Oc%)!TP79zFm$Py3*TmAbixNN zs+A`)qAAQN09~_emqg<sAx0(&8Iwy*aZu=k-nAVRzCs4nDa{EEsX%Of%@MC&l34p~ z6OmdZTXSsh*=IhG_<Cd43kRPIyxG_EQhgoGeY6PyPA?3W(lD{wVU=z}*FtLTUB3v; zu^#IX<*P_Qp1L`P#hF3mB8gEA?E;@b5b0>WaHbR&&H`*N^xsSs+U-1G2U^OOn?RHl zoMYv3Aq(%2iL46RtZ91sIqGNzzLveW=AQ;=9<qFn<pR3T>$mCvdQxAGO1Wwzo!3pq zjwba14`c1>AhZ?0Pj#|w{RteHcVZEb;+>6g=)T6!Gdq8%*Y<HwM_ZQ50qp&W4K_h0 zgengcbdHKXRDCZmj=k@y%nNy6a*TFdGWmE^wD(@()q}F#lI1!jZNxDnM3{Oh(V?W^ zBPNuNHV_bx8mGkE9ql`A!Y)Z%yFJ2$?v;9m$DHSS1l32<(ICKI&i6Z#o_aO1Cf^@x zerf#~aOL9jj#0-W&E0{IU4kLoQ8Ph**bvF@ujMD2`qh31PU)EM92c(o`54~^etNal z{NOD?A9){WG&x91N2doAeEos^;nGgK(6M%=Mg2XM_QQKodipSX=lyk+)nm&J-_J?k z9_#ES-~4+O$_3+zP0~^dXMYb!I{7)p9veRJTzWz5Dvnc}EJ)nvy>?do<<DK=-FGc9 zz1iTF`RfaH9Sclu_BoSnVeeaBguUCoFEqz#N5Y+1qcENK=-{#%0x)}7K+DA<r`~C` z_dju375lLVb_wZ~A(<~o`4+LF_6S1a?*cMgjyG7hZa-~|*svALdvDkE!^%u!;>fzW zz5KO?YNQrZU*OgHd@P+<>*{U-xO>)6OylvAdAdGfn*l1jLbM)&A6jeu5xm;9!CJMi z6y)6KZl(&rF-+ep+xk8xt!ZsR>p5DBJUNv0)0&k1x*ztTv26G4qSoR52Lf~O4>+{v zXwfVdo_5l3i$i_n&xaG*p<u@D6Ia)(F&?|Ibm0W}Z(ZQ;8&II{uL1&si+C2U!?+hU z$R2&JkjT?YWWGXNp^H9zO%zgz6Pd&a_yi(<N1ShslWHZ3sSqUg2+}I?3O)oGgBV#` zf?{jD#$L2?VJt*ET2m!KH#`WlcjMqmoL*~!$)xY4NrItxys1j!l_3W+0|awbymf1$ zW2^O56@;C5f|E*;N0s?CafGXF(v8-nx!|OetRz3K<iIMEoABhI@Z@kVqY$n{`@-ay zz2u~(WE?yt!8RpOB!#9bo|M#@k}j^75>7--rrc9WWoY#hNscv8Ny%+ZEeY4joODf_ zOns=5#<rEpWsp`?n0D49ExRi1#a<e0Ak7GVr^)sXP56$b&z<(FJFSz+9ea0POx`Jn zrw>e~_SvQn6{fu|On>W>p1&7T2v01YO#dXF`X)t37y%JO<B)iWDjs(p3$=jZP)Mk* zxsD<}W1=;KCHO9y4YHkt!IA0AC|E@#)DjJz`V3RQgfk~I*&=Y3X!>+Lox5my0duU8 zOBj$1nx>@3Je+aicZSS7-Axik1Obs4#fJR*fGWME3+N~uCu$D;`5P;Zrl(r#C{cZ& z1MvROv@DiktPusoA_58x1IrOGtP<HG2HA_d5N$MQHwc6yLrf45VKPLG0$L8kaHL{{ z2)QOy(7t=Ff!!_cqP*QrkQoAUVf31yDm}~)as<C=8jO*3f#|q^n6kin2(S(XsGXHB zj{dhK=s+H1KU#1w1P~!Xb&%kzqnVHdScW-B7Xej3KvTRS21uyYd5~q6?Y=w6(j5G6 z;-eBCql|<KnM3x%F$zei#VDvOHM1fDBT9liNyP}bKrGF3cELHIPdN(Lb9N?uEV8n8 z<L_$?6S0Qa%^|v1)n+m-C9kIFBuOQ&xFHHu$g6$GwFuA%cjj<)i9d}Dn5r&eGB0_x z4@#h9UnIkWvGCwgnBypHW#31iT(-gu{xe+WL@tv;fT>fksy2)`{?gkl$nH4ktqXlW zndvPy65;{QaS02iX2a<3<q#k<O7x}G7&&adAUz4ZPs$(z!28)BcFJ=`%bBoX!6mr* zbr6f%!^$Oi1|jp}6h_k!qCkQej)F>t0fNY48$2{U5o83Y*weYcw+U?EhPFq5bw&%X zQVR}(z!omW+6VXLxl1nYrQhErW~tnvo2T<bgZQYR3uNHyYM?*)-?xQaAk*Cfl)a*d z?N)&O%x`&&(5bmR{<>5dc0lJ>_xKhPbdgMV6aA2O7YoY3!tAl|m0_qP8R|p^E$;)R zDOG=lp?^{#(OKZ_eNfg2lqL^3;U>{Bz%P>NImNJiWcXb&kZF`;Pk|$hAQ=R|1boe2 zP`RWkxN*5$_%=9!0+%p^3jx3xh@9Qcr=v>ra#{C&gurrKY@c&O-Bsxms2F)3C>jaX zH?LsALk!U%ei9@-4|4Gn&>}3;hE!|;E4n8MO{1$cGzVRxJUToFJzt!E<wm8DN(p!# zGTxRQIDP9T;qfhUO%y{OXAvgQ{uYoi&mU1`ipNB$Wj>sM_+g)Oy@AWrl*xEj>tt2$ zT2)6QLHP%uXllI^p&<XDx_pEN08PW`r{Hm~Fy;pZ%7kJgG=1s>>HH`>0bj0*&Qhj; zki&q7)x~o7@(BF195N6bkzqlC8lvf!CrLLWp79$srMpycyawdBJlk`>FBgH)HHR=E zpmKmmqApO~)PQtPh*8}GotpbhNRSP_*{CkZe8fc&*>Ye70@y=h7)uV+h(~EP6hkvV zBxJXr&S&}-><z%8x-RH8W^<^OiPFk=p+4xwlii=ScahKpGTf2^4<~_yhXMHqWwLlo zVS9rk0V3)E*{?2>VkBLB!^H9h?pD|+FbucDHYeFX-_?Qf^Y~+ZL7&vJs#0O@sSwT^ zwM^);&fCqMwBmfQVaw2shr-JbGswVC?HD&ktb9!-GyNlZWY^876%SHh2Hn9(yFe|_ zJ(g5IBOa_AMcWANx^Lgg6W$7V1XQX9s*)dTo40N5wU%6{|2hodK|INO1Au*Vr2keo z*w)5Gei965eAbrP?pdum3iEo}zPwaj@7tj5(y{9vaty9%y+G=?khEt2vLMw5lY#bV z`as`KLs%1&3rxVU^YC2PMc!`k^)6jB{YUk(%H(IlXnNDny|9SpXCr``+ZdJ=%tGW# zB%%A`9gvNA7SkwD-Ua&8;L%-AD3bc9_6z2LM5P6yBH>RD0!}^|2l@eECX`y!(UOQ~ zCA4?+ZGLzR#~;XLDjnh*Wcv4OJgG#O`gmmc-@l0NviXoS<=>6~Hbnag?e{v8fZM5% z0)~!;`_;9Pkc^QAg3Bv3lYf6925sK7*WW*6+{{FHDy%W^hVdy%jsEi+AWQ=KUJ|+= z{|uo_AAxMoRel(Z#}BI0+h;*t9BNq%A-}#38r8jg!&50o0xDv2MUc?L2#78Th;qSP za)BU6fzpVOT}G@q0JQ%U6J+ul?(>>f0lbVJ_8W!p+Lc@$9g-r`#YJJnM~8BmdS~}b zUvZE6Awhvgqp&xiD5GJS^WdL$O{IJdWh0=?R0uzIMD#wGA33s|+I9q{)zGPdpF0NB zrek`HZu}boXiw>9UxZH=U|J8FQ$q&!$3Z`r;C7_wX35)?hs~|N5ZDqth+K?2#>?5i z`@-~y37<K68)A9|Vo_W{$N#979@HQKy+q0XyMhr#mS4i(JNEs+n({$y3uIGW;iqQA zY4r9usQhd(mWR^lH}hrh=V#SmvMCkf%#&G`ka=<X<xx;M({*eDvb|yDi{F_^l_n6! zpVp*R!=L+&CprVLrcd^i`}h1m<Z4boKJKwyj<RP+donYvU^{&@4oO*=Zd#46){Max zrZ8@S&KZZ8>4Ht2zV`VW*Og*!7Eft<fb#7+4V1sV?=l#?i^-r}_$rCWzp4v+cl>Rd zKc$8LuI*5=%qr&9K3(H+br=91h6PIk;49Mb<hmT`sP9Xw4fX(d2-VNr9FoESj>JR$ zGmOs^L_oqrNtns58Mw2-n19==CAy;yj1C@FRSk-9fZAt`@12`H_Z=iy2h$@1<pFSM z05r@TOmu<jkf0(r=fr7vd2`CH6@);5$C1AW->0Z_>oZ<1ep6kr9|U8s!CWH2cE&N- zGK@0SN#hB`9Pbd0ZwwxtXQIwaQ{0)Tb97}hs@)5AO+OPfz8_Tp(<m*EB;anH7`L?+ zeMHub4b&WM5RL^|(|%c9T(rqp*bkyOb}!Own<)HscN_TI4s&4sZvlV0z8&fOHh3}5 zWDYf9UKB<zW;rkH#xFLe*G82sWlYY1QsNzo??60CO(~Vf-!S@hFa<2=;wT7Z4qIme z{qb9_da?X$ZI%ZOCZgwZ1Qt4+m(bsx%*nv>l&{6kD;iA{LHyM55oNyusGkLk&-#wW z!#`bKP0YZ&XI|Z$0c~r-_PYKAXTY*!7SjOm7IxBhG>q!MvQnnw{2tISv$k>5>aW({ zo$uz`F@F!VF7J2$r7@fS8zu<qF#*<MrL!P#vlR{q$Pim=`3b0mhv=Bk0|uzfu~sN^ zh?FDt--N+)13+~uSfegG5klJ#GTSI?0%7Vl7zA}tqhNtr43Y|#eyt-TxS4!~dOQx& z!$Xvj<NG?`ILdcUL98Br^)P5_&mELZ=zu-il1b=KCcu*kOI|Zu4vLWE(M<D9j1!Bq z!!;ZqfX>^T&Kns7`~=n{VEK?67G^tMnLB_-JF<_!m{IWO<9}stI<IS+M>@OgpTOQ! z@IH8tDGL<Of<;{$l&syj(6gaV0%2TcP(Si86fmzUDDy8k;$%1V7WTp@7*hwvo?x`F zdlyVL*@l*w_GZSzvA0T!9@N0CV&N$n^U3C009}|34b$1PWt)lZInh?Z!}ZBPNz&)5 zf45ZGi`i&DYPzm<j$Lcnw!*37>9hz(;(}OL1ReYl*c(k}U4r}a;8?Qm81U&>Mg)Wx zq@4>sj_JWHU&9Fz_V?val27(&n^5mq3<ggJ=#6J8lJ^{n8VjIf0@Ga^K~r5{z2%m> zaD`1O=+#^1B!0~_YIfgGgL_PoCU1x8MTP~vZP4=p`U^(IivBl1i432gI}MarpS#NZ z9rIA{?%BkvmmL+o2SR7!5*czu?<;y{xr}Nve7<*^T1cU2L;KI_rKNj@{~Tq?^!yOI zg8w;`#lf^RT7A2vB2~xGo~w6kOnN%+Ha9cwBN3G%qI_>)?@j(QyT0?Td=haF-S6oL z`@N!-evPZWM&>s}UbakFPw!DwOT+qmY<#_!!Y=P(65qS<mdQxN%P0TWb&+cBQ3DVN zc6O>;;tRyI0Cnq~VmeuTZZ_%6pULL0@NC_vnT(`2KRvl(j^;$3-EH-PcZ6@&Fge^_ zD|~p#U|cii=r^$(-N$7ZFA!W;T`7-{qE8SEww+Bb+WKjxO((VD`Z#-SGetX_OQ;tE zfQn?5v&Dq>J_3a70TcLX@&P?8e|&$Z3#yD}mc#em33{BaTkC^@Zu8khevU2iffJC2 z3prb3<u_DN1X3=-D9g5yT%Z>CQI}Wv(`bdv`@J|I^DC8jSQ49?II4(8QU@Z}XF$Ux z%aL1shS=Bqs2FL^NQ6o8D}*qV*=7$h!XIVZ3u6hNM3tks0r5;MT!e<#9Ep$WwMv5L zhQ&w;YBir?@7dQ>KY3VOV^!>t<rbf}L#}{ix&U-pbpa?d>EX~fAz#`Js(vDLnSt{S znp-M!DZEnZZc|>jD1S2CSyVx`P7#SV_TG0?=I!W`R1&_av8n22qng-5&kLvPanPN~ z7@b3i{JS(3ahrucn)YoRWdE*qq&bh6vY!Nh*O*+$7r_snznT=5Y5FozC#{ZA^Bzd+ zB{N;F%0NaO=c^EhjV<YXH#*S_P6iwuz3PmlbA}x&CxBJt+tNeN&vu@Xv~D7#B*cs0 z65nXFH<|cnoB~7pHBl2~--^4Z7uaCsE6~n+uIaKgt0e<Dg(^cP1+nuIiSh%5L;7@& z9#1c$$;e(NP>*Q!(v#kp$mN>a_Xp|EJ81TO?C+_>0md&{KhtFoG9us9=!#biWY`y1 zJsceLIa<$G3FF)7;a0ncqpQ1UfPc~Ti+61-derA38v5w#O}cJ@-|t%JVGjN;c`rGb zq+#(^rgW1l_3LN_ytrsyH~J?PWrY?F9}m1by!-O`-;_~qy_N%*oZOtofhzYNAwAKt z<@V-#r!I*nrMC|xs>)3i8LS_d#2HD}Py|zLF6-ap6$c^oTHo=}!YkvjS5VTvODP}+ zGWOq$W7ZFHy@)h4Tu<B$5nrcms5IHjVo#JwCV?0>2%Pkm<_UaTNH~TJ%ap}3hSg1? za`BDoXj0-CsZ<8KY$&3Mz!FR$BQv&flFtU>xcK_$ty;Cud;=onMgjbEHgys=h`?Y3 z<cvaAV&d^AQKZQA%q?+UA)ahzj{Zqb#b4Qy&a!s|z}$j9_(Zvjh?MgYZevO0S3&}; z49NuTK9wM-uH*)yy$Cp_&!uz0q#=PR^-=4iDs7oKi*%1itgw-+Y>RveCU(PKoPvuI zzmE%6OFUjzzYSsX-)On-pr*qAPxOS|3B5x?lNO|RB!SR-M?|Fx2uKI%2?PirRX{<J zu2kv0cMwpj(tDL6y%R3q-8*;ocX#j1ot@eDUuVu_GH3F~Ip=vk@4TXsX#z=K{+Q-U ziWXRrlE`r9l4Fh|L|6t%`KJjr;2J+fKT@R@+Z70OV`)8I+;NX~rb1eX;<F-FJUX@Q z)Bkc7kuMP8nooRPYub_V38>ciMdPr;P^I}s^L>W#8nraVc)kc?S$}DlP$Vu|JDv;9 zees$5ar?5?5Yb~DTg{0K$MnQ+M;&0ujG<OMZY29hvTQby!VdvgL#c-yq_&3u0$ki* zY2G8MBuwv#<MVlf)0{r-;(~OZNGKZ2P=sC?{lJ)Rw0}NOA?B&jApL7XKwG#B^ycjX z9*ipEU&erSBZ`d!8PGDX1Rpc4#nKsPM95i56dM&p`!jSfGMVoY(#fsS0<9}cb5pt2 z$H{QWqcN$<i?6sX&(zKP0|*$WhlHNd2;dC77I|2ollTjln3{E&)~}|5quzD)wrD1I zajaCZ%b}d#VMPqgrg9<n(e`ICN-#7Qg+&DeoyCnsEG*galfo}`(LrD*KV1~sdvDxv zk}CC!uDilAlA-4iyWZZ&<FK1oRV!CgxR8d_M%t1gv1FdzH~}<XJI)yMX<=WezVZ3r zWRJ=nt~e#QR=>`721oeM_#PAt0)_>CtC5b^j&3>PW=&r7U8E|wX#cS=Ptnjt^{?%e z8@!RcQRw{qDtVpcTdA=M_v}}3%D=e|m%zPv8ZAIMZWr}e;|Q(euy12K9X6M+&o2Jb z7*>`Yf>F-S*sI;e+%&syImPTnAu%c0#l@jze?2JC&^$0mi9}c$1;P@smzUQU)lU;m zl|Y~c65(YL0Oyx1u>^v8j6f57FRQ4+hgWs1c+xSYs$7>>;tA`|MXU%1`o_&NTpEW0 zDaCLq5CoohkpRzW8>&9baL-N|3j43en%Whcl1nnb5+((44o0WCS-M8i_>d4^u`Ttj zxFNPmamSJhVR<OHuGII8ld)oMK45*QhHWI5*;RSvcT|IHF8UAQhI}MCr-Q6ujL&U; z{*lB*Qxs=-MX%NH_qb!j6;`*3RvvsCv5x6qCT^7ze6JriKUJfszXktH%<aXfY?J1` zU}>z?DZ~;hoLll0s>o|~#b-c!*$HQ=6)NC6Khjg)F`3K%{w$e9fS0FF`3o#?v_Z56 zwE#()Od5ZlOfC1Ums<jd;YaKKcmJDKSwh%`x~yk_S7E=vmB^i{Pdj+`*Ffp@O9LG& zH~Wxm`5;07p^ojwDIqJIv=9g6GUX=yC(%V<ENsFH;wX=+fKrQUnqXAIv-7zcQECaB ziqfTGV$rD#(<jYxN<J-cw)z`hhkVtUx-FtMUj4eLX^gSLD%qVC_*^K^s|rN;?bR-! z9z<haMDjx4558yqh-hw$@ogk28*xR51dhe?xu;9NBQ5T4<wZ1V>en!x2PO*e%wWjk zsrZDr8u4gP0^~a61hD{{9N--}Ji2`=zp?YvW6f8XXEAX759#II?k`|qr-B&{(aZS; z)_(z|&K>9WoZV64i9naI98wnd#wL}_pwgiU^&tnuUZx(V)p?nF&g`WI`6KF8ughib zfVO@{wn&r<B)9()Z~8LUPd=PYCaQpBHcdW}<ZbB)fhS^(k|8$jw*f2+c_Mglmi4^0 z*4X+F;WAf%s&r;i4lP<tXXA%vWDs986&8vgicR8~t?bz;kj-C<z~-E;R{q$@W*94v z2;<K#=F`XJ)yIBpK?LSfg7CIZ&B8LET^x337UFl)hG7a&3@(F}5?6L-@+d+Uh|67w z&DvC|d{~ma-O1h(J}w4;Er$z0Ka>;Jz(|mM)nT?pqKuPD#r#Bkds2^am0AB{!3J;y zp!B)|Op@N+lg=&i9o-P|ZskK5Xs_!rsWNwi{77tVe;52`EEm5p_V>3+oTR;DCvYm> zRvBEBtZ|R7Ok3|2_BXziVnBFwVa3690v5}s)C%cH2I|2b1p;ps^HYR52l8VBcbb)g zPhjt^Cg5ql%1t5Lw-tnA_?JzRb}P$<^}*iMX{0EklHHump7}kvvCor>+MKlFULX1D zw!on!(a{o}X09p%<c^Q2jN3(9i-+61Yw%hpeunX8+SaPP^J=HD5@P$9T$_}b$W+Nw z)X+Nke&VQa)dm_$GvE@G9Nr)zR#D{D@;$j4%9Sn+G*b0$QKi^Jf86B*mo##S!E*nK zaG~>3FA@9|O6;Y{<b_?((J&uaYnTUF<~+`q(?RCKaM*M>&vBeUVpX3-G?kSm6cNTv zqnVpeROs>}zA#)tpETBhLw2B~cyBOOA273u!`nbsn@5xf*W@?vVxA7KE>-?!C|)c_ zE<YX4)d0o^YGqkQm$k%I*(ukQ7As8Sa9&o$BeWXfxIiq%x4T2N@;~zJusY?3$Qyb_ z<ZyK+wdeR5jyp7qxMB;vf2dy%bLRsvEt6UbmI^Vr?IQZ@5;K6`M{WEXfPdYeesC3~ z9)A5+U0E~M{^y;J8z=DZ%9kMxRk59nmCqyPMLOD@Bj6RlZ|icu6T%f-oHYaFLVom{ zn7W;4-BeMvx81sHGE^&KRI`FObMJIFP$PRTOd^FD5f;&IV!GtcpCOGS#aGDKpbnDQ zWbr|Cp8+8uNqE%suksZH+Vb<7_Ltk!U&)tPHmkq*`ScRyWwa|<BYA(3!v~Y}2SIs_ zSyhc6;8heVV>BjX#f|`#!_v~j7TVOYXW#^i>2N{!RJ!0X#*HyHA6kaOG3K)|F!wlz z#5kwQIG4#dH>4Oy+es-nmLrQX;3+VqQNiXOz)>JX^3K=tkMOZTaq08J8498WM#dp$ z<KlQAVOk?mlL@Ja3F*`cnSu$hk6~7r;fIv*&m|L2BE(>bviP@RiqDB?vcu$oC|Tf# z>rredD@ZBMNLj^LC1O&uc2cW%Qaf`@&R&CRYJzjkNQZXHfP2bNV#-Km%Gkt&b7PXS zH;Wf<$|QB_X~C35?bNg0DNCI(Q`SzSt4Zof6Rg*OBlWN!`r6lyB+J?3Q=n)dFLs-e zkwe69@(N_5dDE+4Q$|+PBjMlR0#oNQidScbPG?XL9Yd-Hq)NmDvvAl_M>XTZZ<{zJ z8<kiJVQi-C0V`UQ7nqR=s(B+0S0sl!9c8v5Q^z~C0wN|L>hl$C!g8L%a1Cc1KeR+E z0rbHodLp*<XMhYHZH>80l0k(1H0K6ZJXu-lNApGE8vd#2c=Z|GbXhJ)7*raUCDrH& z(`4dvb3)np%v4gU0Y=e@KL#6r(oX-FLyDOb!wSyKV^u!b8vNm;1-##{Ew12Ct_UmM z7*7{BJVDR=;SF;RHlieame2tRf2u#iOH@VsjJ9=_L*W^x`kc7YOiY1cU9E(2X>>Wn z(0vS>K6|2cWQH;L+2jrF>xJ-0Mhk6-g`R?i)ksmvKunoAQ8^Y#r4@P`MDh19t{+X> z`8Hm6rKx8i8<V+1=0_GU&2M>?jZ+pe#&J16v;CV3MmFV`@SEX7j}^tj;cVMwY==HY zyA{R70R5FZwjC=GgK!vU1pw&&XWEB+c3G=2J9e2B^s|Fv&MJWkWO{5)HXoNTZ4Ub- z5%!YLa#c8fhm35djOeF5;a+X@A~%_G?BYxW$=?Ob;llXcf%yIHcnn^`!N^?k==|8_ z^NGTRf58cVfJ@f}MATR)*~7-4!DcJdaT~5L&K2U<&Eq%qUu>2o>sl|!BRIFqVzwYl z@$N6X&(K{XG2p+1WDH@E&n;zL=gsa+J_gB{C#5E5(^f9fr&_1S$e_G5KKSsZ`xa49 zLQ&tDFgBnO@$R?JPzDTW2^$}422>_F6!`GO35(jP0WYUJiDYmBGd_>yD_5k2$$ZR5 z!c!#D;%h$&sIFSAq=8h^#CS6Ni#`Mv0fgB;j51}2zgWx5u_>su@$R&tTeLyWG^fDQ z1byj4lIQ~}>4SFYviWQ^goxzvQK>n0ACQbm2B>t#4ev%q@kK_rXp0HNdWgYVC?HKJ z-d<8QgJ0LCmo>V3sN~NXzdH;SpK6y#nJ$I@>S1ZD9N8mdYS&&v^y-O?{#OP;JG)%w zXk`uxRch3?5^H9BSbDcn9xZ?Vz6iiV3r7hQNtjQ{!6o%0hZP&eCd$ba&DHF>#ff1u z=G&ZkOq?g;x!|`6W<Smo;|B_KaX@DC<wwKB!>Z*fxPY3DryUYPt6U)%u0MAi(8EUz z?$u#P2Y)t4d~=7a{8}!HTv#@CWF5FT!;z-gQSaCRJ(YuawJs~`n84_S{F1H66dkC_ z!7Yo+69A?PbBuWb&h!OCn?SJR9c9h@HfdbdfY)_@<vskjOE{yG;vGM=<)IGpL+}gy zg`%a`HiP;|WJevzmmTx*bLD6AB4E35rgPT_CsFL}x4N$qHo;kSn{5YZ_1EOI9XO>2 zn=-A|Mi1lN5k6|^;(UwZN@$txP>C{sX+uWIH(7z-r9?lpAWxr_4aaa|g40O*h=tI# zE=@o7lDA8{|3a!PO4K|B=3l#}@w6(dm-b={!MeAVn{dP;$0qt*24nWx&*f|L1ry6& zr?&1dd1~r#5jEHlHgbF_dA|Sn_~VKYWF&1*WL-e?-IDOLgFQ@%jA5B_ZrDs%*$CWC z_q3&lC3@w{{$EwcIX1!Z->yeO(Q<`3WoP`0=dMTijAO3_?<0R_RQ&4?dxM{NaINm% z$p25dBc{v88Xt<B7jjWj*fZ2{Vg1R+Z7cfdM9f$Y<wtg?9V@0TSKVT&8L2Lj$k!}A zEAISCJZmy6RMJCcsEVdtK+l#C{;W%52wT$V*%fQ`nATboOAVtRrY1FUMNS$8bu3|4 z^N=U>Sm1y2Zxf<vG#9PvDX;JOB79mpM$B2LhOIoDKa1RO!b6VvNNcE5RFH_{TNB?_ zm(ebo?hkBuPFtZK;^Xs=q3)!KwOUkByeY5gak+<Vg4b`BNd~v$N8bRlq1v*^{OaE* z;g43Be>sZ~;L5X;5G^^tp3ji{n;=z;A<Htvnr+NjMi5~*o<L;_KFL=z%hQhvRs_nE z@7047kr@r)Q2l3Q%X^&y^7zv7rwy|cyPd-2!!Sa*RsnZ>eR=$k&D?fa?Kjn<yHd_u z$4z2_Eo)s(K;JL7vJSs|N)zS3YQ0hIIWF6kU47!|*4}J_A<cf~=j;5%w@=HDO!^|3 z!MElaMEX&5;iqp#sPp!evyhvM;bHibmlt32S_ib=*2gN#4_t5vDcI|^hM2w1Z{kl> z@FfHKF)a^<WS#mm`F|On=g8hn9=+7=XQ+5~l@|IYustl)j8y;I3Y3nX@xaIMgOL$I zasP%pmS$&$6^tGQn~d#|``DvsjLl!8B<KP!=5KcW8qEa7m4{;UW`}<(?}4)PC<SFR z8v~4uRhaw3_*=RJy?c_(yCs8^owt-D302;x<><+)$kucxZ)3qL!UV{Sirj9B9RkF; zdi7YkMN4mf3iP(>^|qB?)n;8+^>;St_3+CngS-PV`v=OJG~I~$=;rdvpD&|F`~nn9 z;gP>uetHM>Iv@;!dcK+|!$04|sNJ+l1%*-sx6#0rf{NQIf+S;Mti#<Z>slT3w_+S0 zep^J(zuX+L3w-@1BrL-GN4ru5MKE&@Z0ONDL2O*{)_^zo0TQ&=xzIEH2=?^S=!_N( zUP9}-eC;8)R=LY+#r$Ap>99fv_NQ#5Djr%vpP{gW15J@aPWonV#ui1+icdmeP}+&W z|DvE#v!1kVU_%mv-X2Yyh7Ep!T0{oj4ghm#;r!&>Noc%;e%U}8O+gP8Ac&X8akgjB z3cptw68YQC{lum(&d)+~GP{RdUw~VQoC)(ZxpOc@fP1k}%#ngNTAi;hk#Ga}>$9A~ zcatAAyvA`BUkx|@POZh|)4f!RCbG$ST4QBUY^RZ$4MWK<^#u=iJkrmBXReaYO^dEp zJCU$y6Bcl?@q#O}O@j;V7V18P;^RFxJ$?R@<f0>`@rqBi)kq<swiGW(rHYJwyfTJ1 z@prGyQ+^rouDp{{ZmupY?*Y8+W#$u<{ON~gzr%#P<P>!a(Wjk90;a*vJ$W$-=FpRW z|LzqL0Agtn^4<xXn7?AaibUk6F{iG~;jI`rf>xJMPiED4jZ~z09-D+e+tCmdjUDN& z9L-nUz=449hT+CSIze*;fp%l7U<_|x!(uG<PhNvKsq@secoimpu4FFE05lOh7ZJr_ zy8UroO&`~DI>yvSW<7;3#2wBWW!?!$wa@VXiXh-=unMP8bp(IDw<-ijv4!z+WZ*`w zn|}!|Mx&_ww<)`lq(O#wRNla=r7s%T{Jc2;rkKLq=K+(2S?RAccJiZzn5>92=X3Bf zRC#UqqQB+_?0|#5s$+w^Nnx8`YiBcZGl)gEK`5%erz@YCeJ`!ioQtoYs;jUx@7Y=q z=0>=v=0a82!X_*EtD<;g^Q%Y6rCn?PylRG2Z)DuCH~hA779#yyHZ2r7_(kq<tH|aL zo^m&grgeo6RjflRfJ9yx(}~9%B-}+L&>|dtaq#zR`OS~?oC;sMA>lqo=N6HE*1%hl z0S(#tSLIYM)hpZmn3zR}AkDX;!y-fSUKxacHLKdFF62soh~M0bjlxJ2#K+X*KfCqZ z9Jq*dsL0)kPa0?`oOP)wyBzm;9|ws{JrBH-n6{49$)4i=)N<M`kkBeQ=h}RCK4iaD zD*oe{6q(eb|8A?)Qr(Zt({jg)d8w5M<`C)CySupBWy?nx>GdQn^7B=PKO;4>@15IZ zwlb?N8-ITIwlA|&@F}FJBYUDuVzaOrBfD1_>mt@>_Uz~NcGYg1+`m?%f`H{*iUYZ$ zUgjm4Ll4Q2i=z>_drZsXV0UBC=IFCfg>xe<H}Kg^;Jv~n)QzI_Fn-QLiAuzrN7<7o zN*|X<Wzjt=>0iHM_MNe>RX3%w%N9FfvM>%Eo;%{jP*##fA_}h<>Ug3&j=8R9#jSHh zYB(;3vY9s>9hC$PD;tu;xTBcSRtmFK!>lw0jQ2F1CfK>1lrcaE71;_<jdz?@)+V26 zF;NlXLPYVt2LSoF1>AQYq~K0wriF}Is#jQ1{Wi(x3gAMk<|0A39)vj9kSH}K8%l_c z3YN7&tmR$;Jw#ch$K%khftd~Y1{5K~Mv0E$T`gWe`^Y$L1qFf=3DIb@@^%HBgSYG6 z#x6qX0JEJKT{FzCxH`bKvJ6yRMiA>`4WfBH#I#TI8?ka!;DouvjxqUaJkj|bpT`_x z1yi_1iZo1!(WzJg8$94YeWfOXet5~STMJOcje!cqTVVi!Wj6L{Q360EF{jSL3K!>R zN7!leu$Ty88uO{1WFaY#mK=#9|JWfSjLzX9;T<{mL3~nngb@l#D>E>x5K49!5>*Yd zQ<8!WWQQFnYc%u%ZHh7%TGXka2pld3@E4L4GO>a|6=PX(q7(QdoJl8?><_{`DvdCo z>u}Al>eK{mfI>-j+fl#dNkX1fLZa(*6o+F?@NE#so&Mh><f0cesv!*i+6tF}rW1oB zRRM#4^EV9UFwP;3DAKN1G4R)fqu8PyG`uZ_AR+6YRYvo*7%L3$Njo_#3Sdg~0XoH{ z#*!kzt95T<^uAhbmWh=)@!x0=s0QGc&mR@qLjzdxjg2Kk>=DoF?T3Q@nnb;r%7?cN zVv&*Nq`sZAzcA*);dAK_4eU_nI3r9-oLq^Iu^Obr0uaKb>3}g%T+pmim@pX?aBDuC zEnZj&E82<+BBDg;DwiThI-ZO!*au?)1R%Oagqw`{DorP|(;UteDtl;e>p8kD4(z6W zG9jE|TY{K%>&94)GN&l_x%v3f79;F8uGYfytKZK!4|Rk{#oci^I93QTEcP7%K7rv^ zhU<|t1qZgTm@TpAfE|mBcB~9RS#;)piPJu1zL{5+oYypkq=+yOz6bh<KMX&LcOR^~ zyS!7U(z5R3PPq$QK9BJ<m_ou#D8S)3zeW{fX`S7zv+*E_P)Z*w=o^2QMap*R&H+5! zci_^M15fk8gdN>?+{0MJFE2za+R9zo^Il@E|FmXu38@@}+w<x5RI#sAMIc$07<UWt zqkt&<%gCn`rf$%#y-F<_0GfjrUgOQ1KxK(V*ftH1@<NvpV_W~={~QC@5bOfc<e*`s zUBp;Qnnv?tXhB3aUQl+oJ~<4JW*upqqG}*Bb<8J=g^kOCK_Ge97sAv(9gF<mvxoTY zj6bB=wPhY72(xDyvQf)8WaDTWR<OmGUq{VXnf;wSK~20op|c{R*1x8TeRKJe60Fjr zsmkuM5aZ7CuX2z#rfT`q$#taFLo)y5#ka^2iAelypmof<PsZ)!=M{`rZblq8zZ1zu z^%gt{dClqbCFJ3`^kweqOU<&QKXdSJ$=s3M&*rLrClS-E9LNk?uQj*%A?TdnxKAL7 z11exKMsLC+9$&2movF7)0gpooZU@NBB!3l&o+eRPPL)bZS47--X;I(qh^bxJPAUxe zX0^Q6bvql6Wn-5LTwgY9zb?{Rbh=o!o(r7AoG_25fvD9xaqpr5l)Ks3%2D}$%%Jcu z%sPq6qd5_NA2mVJSCoU-{XNcQD`tySRFFhI61188^CxF%axCBwF}_<Mxmy=fnwug^ z>eg6t$v>K_jeDvRO{uQvn#j`i51}Zz*;vLopcQnS>Ts&|_I^dVCqb0M<W`^e7uHbL zlhclS^<9PJ+od7s=OosKV+cFdc=gw-Tr&j`@PRcj7K>tZ+;pG&_#zSU;<TJzfToxt z&z7C>0+QYeuL7YdjTN&|YImlLiHEH!RE3rx?Rn?htP=?1UJ{!LJPSUsbVkO$<^Kgc zhRsABbf>d)ywG`0#Af22y+H;#!aR*Uvi}l~US@U7?ucV`46@ouvbq(1vC{GUaVI5` z20)2500ebixel?i%o2$p=%DFp75IpS^w$7vHb*Rux6`W|UqVr+W({0-iHW#7Rq7{T zljSA5h($0iHdzOPsyNM{29+s;ua*eb|F}ZG2xGu!rVoMpkkS#4FV@jm+ikF6p69^r ztc~RHOfFZFB}R$D`qZ7k%t9-SAt-7k@Dv^g+vKR$U}uMh4U=XMQyQ4M&6>sc<Fgvo zDpG4op<L$Q*0iij+`qHz{J}pNVYGx{gdc4l^|6=%80m7eII`h>y;zS{arwjgIPtUi zHBsCFxeVhroL^V@H~TO;b{v$tnPRH|u&J7+36W(GE=Grwo5}X>j===Vsb;(e76+11 z#glz~H&2EpnzsHO44paZ)Se%u1b%6G%gn`LO<2mREdpi5>bl4MLO1zx*&vPdu%8td z+s+BGwvh$OM$lbzLQPfv=$Jke&ez<_n~Qk4*{N=|j(oUR5;=CLj3YGF?Vv*Ga(~&_ zsCqzer=f;iS}#x@kR@eRE)(&59sV9L69G)uR{ea<_SP1v%lVTp*6X>A0VqO^4Vw*@ z+a_t<E}g3=Xa#nz))V}ZH#e(lnbWvWPgu0W;I;W(@4B4{7mj;}16dahkWP^!O@jsy zf7EZYlaFb{Kvj&9Mj-{7=L80(z2-ax#y0tMhukK(o6$O)M!G2R*E!FLyNLbadT;XR zI5wpgSJ|E}sXh6s^wAzh-f7atx-b832BkY6tPi>SqXEFq)wiJaMu66lwDU<o8^GhA z+%HJkb1gfKgScpn0WY<Y98e^caY6J7qvIqN$1;El3iFyof_RZH_&dc#H{Fi$4E2$e ziBJMi7%kS1oNXSe!%bTh;&m@BIQo&B@0K4w?Cmv=`+0$6@vQInK37eYJC%dUt1aKx zSl*hC`b@r!-)(toTH4jYL+BiQ+IrtSVYdQ~`{?EovGmZ+kBK<t_$&2;R&c}Pw^%D4 zy~Ui*df+eGG639XI#o0Aaq|0kXE)hE*zrER{*fD~V_1YNcL=$I$Bzu(MGE!cs2+(z z_++Bs_(l&SlK9fWTld?;g>oc9t@fhc>8hAp;0G<j;ud+?5QTvm<0%1*5f;4qUmQM1 zWYh8UA@~7~+C0I@2vj6rye=*c$jLvM51iwK6orN{ZDl4oF6QSgoIXW>0FCl}1je1Q zn*bUXd}Zk#$7pz95NabG*OsQ=mAB8uE;4XiEp!x7O^9okf-keOUeNT+#g4$+g}|dB zQ4LL?rmkk2{n{H9X=BV+Ux^nOr1JH5Um3qjp=Kn)us4tkg*+#Cg{$K8y%^)lg->hz z$hxOTTixb`I$r5_R4GO;WRJj+hF--I8B@i3?W2;<@0|KXfP<y4^2ZCq0es?1x&mE- z0IVX{f&L2q9@ZL5B2tH1**VQ8sznE?Zm13u$Nn}8J~x_3H}#Sd$*(oPcQanuZdOKA zvz1zF;|9z3bz%4`5BPWNotLm)?-FVcm=tV&R$mm<cyAXo_&YWY_3H>x`gmlBmJ3Nc zX*XD>x#+D~;7I&+IJUT9Zz!JUCszFN;nNPFnf~aH5xU~J{Md%WJ>XB07Ob+P4ncB5 z$nRHWzwzHqeP8<>0-26<&GLr4jwze@0-0Tn8RZ~bV}PWlP!4uMT1PR^Aq9N83VxG$ zNHQss4L2-mY(J(3K{*Rq?0dJEJfNRKvUFVr$9gmS<iIwuEc*w=V6w_aS}c*((8_WD z<^dt;9*o2h3*Y|DGP#h+GFEnU%6E>{zf2nW$?99z{kuE|RY7mI<G<6uzRzeLq|bM3 zT)*k+5n5p*qN>?QB7Bq7BD8B5eN2TuJnr9P!>*<&KQMjlcz6(x!lG?36%p$BXZnVO z#+o$+m$jpVfV2zt6J|&JotP#kBa)tm6vnpfa*5q_DT+laZACWO={eJ>_7;l<O~p}x zOX%{Ljf((_#C;_>wS57mG5PO~Jc4-pB`q$SM@&BNRk<41AqYb&gsUhFs(B1*aeG~s zW=kVXU8lDVnKctHFE2YF2*)R8KTHG6rGY;l|Ey3^7slIqicQjm#Tk3~_w}i+JKsh+ z`Mve+&wtqE6*z7)K%-1bvx;Xek8SJ^@A2IUa2Uz}O0*VkmsaH*_5fmUC~FJNVH57) zZ*@xd4$>Y|+W8LVM*xCJSFIZ8>P!bIsgeeon69vcmK4C;?BUYcky^M^H;lm7!liXY z5_@-;8w2PNP`@5MPDM`-eU<In-bJ!w=Ery|3y9?(SOlfNL4|bqe8*~*qFifbkNWA@ zCXj3=M`|qJxs0kjMT8$kjlQnUX%2!@o>skX>=5{NfT_~)<d&OY%f@1zR}+3eF3c__ z)a=BYAc~Ro6kz_#R&(@7vHCFu9xGZDL^=w2RLzd#x$;I7Rs$6Yua<sa#g|uQA$Tld zE2`xPqjE$LFo-d{Okf}o;+S5j%sINi#?LcBQgH#O#2>L@RS^ZN(9I`O$rqT9bda&s zWYDp}CTHcdXgCJ?7B)+yz*A~-@RdavJEQoh!B(y#GTyR6Qpl4irN(G^U!~kz9qLVy zernI#r7ni0X%s<1Qu}?e1`ay4MSI&7oYEcw=n}Vg`Ohk6I`p^ETED~}CIYHzY2Qt2 zc@`1IL!NI9Y77-r^-E3-s%uQzYiRwv^+qu@i>3h9#OI2(zZ6T*1{5_Lb#SKG)VfHs z|2#Kwy2xtI3P^?M)N63AYt_^rJ!MU&lFsIr5@Kh`3E=BmS?FXV1&|p_>Ir1(&HZ_) z^=Mxf@7dB4hhLrjhiykQ!0~L4?jLc4_4$fx9X`rei`3`MZZT!edFoi*E4j$bvZ>uJ zEO$3wC)-Z4!gGiFG&lBVW?JPs^9T=z^H<$&q4VdYXTG*(FwZPs?fPPep>qOIC)+&i z;J44oyiW{+4+#hxb|NvjDWTNe!Tub^)1FTGTb=!}WN--|;q4q-!;sxe6s77c@FNxn zTyu@>Er{j~Tf>jgP(Ru{-xApdQ_R|F$iL3Nf6Kze8sP8-{gTbq+Fzl8Ghy{`!u&`O zoP@RJS5#<^-vn0V&8{gs^E<72r+#Txp*nlCw8dj)Eq3tR36<A>8Z=HpiX|5T<z@RH zH^~AZ(G6%e=eqdQvlm)$LYHd%VJN5uix8w_L4)LINM8=YA{y}dqH?b0;!o*)^&!e; zgRUVg{1xjwK+7CP`wmJlj3Ak8B%SwPVFE<GN04+-e+ZP}rS^}As;44z&tCKQ=ehon z<)0y?29b;Wa?+R;Ym&p>1UCoJxI>97*VNFmMJ0$&-Hjq{0a@V$v~QhQJ2-K&1B(7! ze`&w=!)eOayZ$5)P?!*aDKcs(@ss^@L69?n$l<&$50!}s{b)TQlTXrw&w%8~fqoS6 zKd<nMVd%`ALeP%>BJ21a^j=P#W`!lF*Cz@EU8>|DR00kEt$az`wEOo*aYT0G91tsv zbr`W238lsAVl#(5+Y4-0{Ab4qV<YXN{^QnU#G0pkbGLDmczi=@2dI<2#rbC5qBwpm zgWo|S-}&gaOHqX8v4!Kg3g!3ZLB$q()NMySf@~c|6bxled~sJLKTItj!Q9dw=-xUZ z_rvJ&XZ^>7*z_*3TO5MB>TdDp`tnbo%J(^A)nbLQ4QJKO)xQ6*`4{d#!!+!y6*pKi z5SzC@?Vxb!e$$D<D2#RJ6TZdDnUIa<;*0a*`rV{3{|`BzcXv^!F#YLZ6ibvH3!6^x zDs&kMTJF>eE?cH<TRCYxxl~x!d$Q3Tzi#$q)8WaMWm_W+&_o|N%MZj^Al|M=ZB1zH zIESpe-Oc0va?*YCPCf~*KuY*TgPP1KoU&YrfClGX2ewE`01beK5l8?+#`hR`P9jtW zG1v<TVlHHWpm9mxXmWQVsY0mOLdPww;tyCmTs?Hnuw9Hy@%=KCG(AAe{C=%npU(O# z6XY=FU6R<$6W*&`X(Z~x>t1acftLzISkpk?sVCz`Q__<Hd5opkM=2vHz&tJn>jPwz zl$?gz>KG0pvUlvT<I5!Ml^FKN(67dg$@W?w9$WXN$h?20^GS;R|J63lQ%hp{FKyGW z=~DT2Wk-~W*~(~K6Az6jT_x(MWGIb6KJL#b^fDXOq*AXLJc?$<N?$Dr)UFO3m&Pr` z38#uG6m|y_#zuaB*-iXAtl|d<pQ9#7A%%eR)rdbXJq+C|iqnbGVb2)OKHeDilQ}sP zAUxbHXX6Zr+?QO5Qx-E!-nesjokMj|e$gQr|B+Khn$5zL%p{@28+MRuWd%>l?G*ak zH*!;XIRsw(w`j$92f~T`<#r%_f&*p{<%-<;)1DQI3BA8}8;^dJg`kQl%m>~&6n*^? z^SZeBRWhKRF2Cbnp7M8nLVV8n3IHl0(H7cB_pSqp1mbJv;*rUm9&%DeLOF=WIFz`Q znVE`7h<jb;W2>Wb<$ChE3xNO%1wlKk?hbN~c!{AxY20XXbzzZQ-f!a8=uuSxh<XC9 zSCxcdk$7c1J2n5q_gO$mIYn#Xgpr&vqd#l7pdC5cawqc>6&x}8IrU34VFs#9%J4#5 zC|+uHF9n$2qq!`y0^CcRARr)9qh3RmyV<j9MX{6ZOjVD{Rfgfh{_<Mm_j#|2D5LdR z2#tWrACd4&&^QhSwKSHVfhuERCm}-&=5QIG8TZ)%G3?2u*l5S$<ODjcL)aGYYTFhR z!4?D}%ApUsv?fpoXqzqg%(#9~1O)!4CK;m%EW*qDPffD4SOcF=63a;g6;m;!f!>@~ zPT=I1-HmT%;#d(mBb5ATMg|xwC4Uz{vlnS@0JZBE19#a@vPRcnQ!>ynNe|147i#0e z#kmt+MKstU#8KK$?D{|0ve|8BP;$s{aFZVy=j5=9Dv3eORcGUQWZq}I#{ci7+0IF+ z<@Mpq@3K@c8aPU8Hv@XZ)|wc=kQxvyDeg?&#zrRLVTsAi5;>itw}A~F-U(PV$T4Qj zZ6H>$JWNL>l7*_<lw)`gng^XZXK^Ujx)z&uckyNHUaMGO*{xCFR${yUGOG!wPBRt8 zAr<L4L?G$=g!A5sm|As2i46;{y<?q+EMBf9sj<Dl-clG{%sX^-e@W<+3!ETvut$(X zq03nKa_syzi3j+MJu%flWiW+~gEY!!zwv@CC_=me2goR%ZM(*_p&mvdC$CQrVd)H+ zEy4jY_@XGS%E11k;nw(Ggu~oD_Qf7A?PouvF^}?bF!nG;GWZe<bz~zcQikyeRyxUI zHW5UYAf-eQ_q(^kV15QT9ds1?NeZ4*P<AJ6u`eMzb`rpAJA)V-Ootyt20m+kiTMk9 za-3d{R@26C+%{db3hV&XV)Q%T&Z>#<@#h9@IaAS2s@0&xx59Lou!$0up&(XlJPm2w zukp()Q$Qf_Bv73}Dz#0%6rV#%9~Ts(|B-*3J9-S+Rk)`f&d;KRCk;xaWaLX@!vJ*z zuDTc_qY{M^t?~Fk-SiB=ND=SyltHfz0c%FB3_-mY_{D!tXnInDWY90gMUXVw*~!S% zzvOD_hHxcsI*2<0@U#I(3Ck%{ndampaT1cWwq6kp>XM6cG<n;?8J^3U8x#&qVSNT< zWnk%(6VF{Pl}{s(H&zuUZw%v*O$T;r3rnDR*%=uTx;}kgU&0F?;T$kBd#05eNH`8) z)Xp1$V2$^<>T@xazIJ2#&>W%vRuerO=BA1P{K3_hq@>D?4-wDr5$92j&nD!@?Q-z5 zgNhqjh}nxyq*GRQ0ct^LL3Oq4C@aR|ZFG&Q%!t&yJW5)TY9v$AD4#MK_UdnTSZdfQ z`5%#Fx>-2R5(APL4eB&~R&4ODi3{%)VK_cRMVJ^Whd@4?6(__UU*tABqv~|`CE!NW zf)4$n!8k^!;37L@FrN@^J}4}KHLi@iY7Eriu}}>saBO-EPHOG86Ziy-G}j=X4H}}A z?Evy`4@hZ>TPXbnp*gh;iJ~gIy5nOKi5C&zbr&O>AeyA5kVI9v*nJlaMGkJlnJ=)L z?7*2?DFVi8*ziUZJz;|Y7I5rG%qqbB9!7D{cV^X`cyo@FhO?h}xLVfmP_Gn7X3^$` zl$z5xmbno|`#Ut%vI75<OQBJ`8fvor1^X-8=;#0HD2U7OqK$82BOZ3u3DKiUfrBJ? zKbHZ-)?}TanvSSJtIJl><?q@*up*N`BS~%DD;XHFk!)yWuPotSoX6)iZ?Zc7`k)u5 zrv>IOea)<@ZH(SI0ST3q;3PK_2v5=Gr!lNgaWr0dD!FrIgr%E;6+B5<Z6u5npi=Vp zH8@EYAhZImQT?GeJHZoYMtQ<6#Fh2{E4KAFe)imk&D)rC1q{A}r>NCWAMyibtHUSn zmY@Ejbo~mFbzeoPU&D>z=!lO42thHcAvdq%C=)*?{%4I%Khy2}&*s*7lxEtW6e!<p zWA!U0{37Q-2;h`vqbYhojUsj3Y_m0-B5JAC95II|>Mo>XK?+6oB07?2VI|sT#WR&$ z0_RY9=R-aN7|e^qud*OVwv8a=|9#XrmU)nVIGq+b!W|wqKUC6C=A>I4PWgHi@bE@Q zqzOe)af;%pKw(4{R<$T8Ej-Rd=+f=ER0pjMHtcZaOBB>s3Fz@}lNW3XfudMs-J!hi zZt;m<#ThKDGef*P2+#ZK`&D13Gl6U<&TGY#Ud3YwxS&XK8P2%DN9he8>0=-IwIm?b z#pQYtaxR%A8CG%NGj101x!HJK+C+D}q-%U)RefX+-$CXv@#p3DjRC*^jUI;F%W<$R z^AH7vN1z_FfbAY%c0P`GF6@TlaecP))q8`I;{_0-2b45bRQEZ(Z`UU8IBn?SFVHDi zK=YTM&3}IParBZdJ#aG26TR1VZAQ%z4(`&22+NV@UlJ%@)-_qP2hJ#?79u1B6a6(5 z(m|b>EY61Szh?uur(rFo%PersL&1D4%-8mp6Nj;(K@sy-6hVlvAEQ(DEqefBc64eq zw|UgkjW$VOL#^8$p{1G<>80?W7fz1ANz4yr@xu8F8T3d3a7jC7+8fb++pBaN^2@!@ zisF`#V^wd&7min9wVItRTzt?>!!dpi9sFvWpJ69Z`0KjjmvD-k8t*7}M8YLj=Ovvh zIjQZkWQm3__f-!G@kfe|*O90L(7h@#aaFcJMTf3_HsA_MB)xo-7@0+r8*DC&PrHg! zyxew-Mf`*dx7LbKQg1fW?hO?-@i*I3i`-KN1Wt$*>5n)9@nwP@E5A0V<*UbJQ^NhP zfBCx;U3_(@{OwM@Q$fCeNPZ+tah6Et$MJ%2h%A(}a#iQzyaGse1f&$9r1hY*FDDBg zezB}Sz~Di}S4jmqq7o6Ib}FYx$9!9OqX+cTBbV@?(Ws=+IifKbd(JYpz+tdxctmS0 zLTB$mXYE0&NV%w#MCao{?_WtD>_O&wL<SQf53OW~J7P!@VZ7&Lz@em%Hek#VVJh%o z`j*59_F&*nVyg9EZmeY18e^i)rzIL=9;{>;IbzuYvQWZVR47>&j#yVj*ixgYod?fR zV~o`XY-b+qSC#CpO04h0SnoVQL{%U%DlpdZi;6K?iYhScF}P6#oZ|rQr{sVfbBK7- zb01e6CV|C{Ibot)5+0mOt{=V_a2beln~VcB3_)hc+}5Hz%t>tbhm_q(9CHRdKAw;K zJ=qBI*#JjOa#b9GRlJzEW8Sko?uQ>Gy^1f>bHTBy-`s;QtBSwun4eaOFG}=LWtBjy z;iKAdu9G8y!74!$Q9<e<&Jj<@%s9uGC$O;!vf(Lobp-KB5;_und^RSeXZZN;_;G8} z<9;e(qH5vy2EtS0!n9r@K9nNS$s%AeQJpc7HA7LziRhywQ4udO88NZEaq52tg4ESw z8r9-E`eHg_5++7u23``+Pb7RwC9J(9ov737swF+dq-HiGeX6B`#rPB_*ghGEv!6)C zok-h;NhNv7q#JRkRLkUu$x@0+hadCQ8_HIS$z_SjHBLy?SIc!)OSX&24^Bw*SIdu8 zi~kZ+n4uQ?Q;ktrp%z^dd$Ln4yjA_=$msDuF~ut*p^IuoK#kzN7?g-cfS?9SImt&M z4r83;rLTd3X#|TVc>W~ubDk=Zc`JQ8mKCW{E;)uNh{MIG;3_q6_GGw@xC#lCib;*i zuA#D9lC;2tiW3dT(;8KeQx-RIHUAoBzZx}U4U@IF_(YX-_^JBZky?_sMy!EG`l*J5 zr+QSix&w`7Sqf9;sb(z=ZMC;nt2a&a=|eM=s@q$8#G7*HRC_9gyTF*&-dks-hJHd^ zcjr`mZc=usM)&NLcFSAu&UoSaR1YteBD9J}N?eaX!azVopSIS(^+Z=7MVZydkRr)| z@62!x(`zW=V+4R3$($KobQ{5Zj2D!QHO`D3hzxPYl?-Z4Jcf;*OPHEro7&f!iiDZE zN|;e&oB2qX`PZ5`pP3;gOe1{EpVgYjof#)dJXP~~nto=KdG=IF!lK~Ju&CDJ(V0bM ztwF8NGwRxBttR@N5|($~mV+jGBWIR7;?JjOb!TdyPn|wrnbO|ydC^<*Vt-2ONaAI! z_sgp(&AYRgS>jfBz8XYzRtcw8lyvH}zSjOV)~s}DU`ZP%ZyUZk709`bk+`iy9bBf) zR{7KxR;R4uYxlUuPKQp(K+>Mk+x{sX?D@Gpk@zcnI;d0KtE-b&9(0O6z79Lp4#9L! zFi1(q8863ZI)%7%$3ZctR66<eI;X}HryM%D0^iqp)vwFyWGW?{KX^Geo=dl$JBNz7 z^wvoY*133{xQv;~o0x#PeO$lQx;{E~UHNUXk;X|``)0pRzd%&A$k=Ty%?;+IxkBYG zV&Y0>CP69Xq2uMj_(7cY!b3*PllzatzdEk_I?whq&*z3-y{TSLr@SswJXOq|z&^au z@_Vi)<z{5&gJ&kaAnx_7URT4<ci+p${*UhhtsjY*-&&1t@Sn#>skbMdZ=*j5#a+C; zd++zp(7#{YKhqDABNc#`;(wDIa5EJ^KpmLl9ne@W(0UPAE*jK(p<L@HJ|v|+D1{0B z<QY6e&$n<9%z7FWXB^@z9<u-8(UDXr_o+{bnBmh8p<dphcnmy54G6Pi1f?`L?OUWu z6_S;K3oIR`mJ(8u5+>puCNd3yybXVD9Ih}8hDoC+JW(2NRpc&F3X%~f(soZ9A~en; ztS{~C-$t6$MY=ZFdq_uF`$qY{eHDBe<tmAekal?3AM!s(CtW(EzKxEki_UCt%#n^s z@{K8a>r{3blPMWnEB(5$A-3o|w)66J@7s5^b?-(RoX4c&I(_42-nuMY#*IkEZ%DiD zG{n#R4(0PUF`!SVH&39D@Vk?iXMInN&!`}S3?aKp9283e%(xMFBr!6|vtni_Zqn4l zU1;I3<VWdpGB6s`&SV05sujRu2#nqi_Fks(edWn}GZ>xs3OykS+xg`S%^AL!l@ud? z8q@UDy!X_qE2*}P44V;Y3y=@)S1AriTGbrtpmaGoYZ`NFx=0yb%pcjD9EM11`n0FC zpRdv@scDR@GyJR>VgO85^^7?H##J4f4n{eZ9Q`CfX1R=EP7X}ppH_8+W3f?21@zIH zk=Hpr;r&zkG)7vXimVS_g!<MQCH^U)E_}t-ne|WkO~F8#3>h47O0W&XW+M~YCj090 zOEfI~sWmN?Y+i6Rp=oE1{S4#w(|n>?#u^#^v_?u%XhE<ME?Z{~W+?q5_?nC!l^+V` zw_C|SK|s6%B<Z;+EG+1PRtsz`zB*)N>Rr*L`P1rK)4%~VvPkL<*-{x8^*~eU$aU$M zY}r&m*-TT}!gbk-?Dvg;?>kN3_piSn$(El5lwUQK-(8mj<SOt2D~Osa$ZjeYEK0kZ zsG%?#RRFC;0NopKS~P%B=;~uCM?g$YzF%jy^-8`0j8+v{(#%AoeN$r~S8Ebj`?R_C z`Ax00T%CPjol|q2>rI`9T)j_Vy?=9k@J&5Zt|20@A-cIC?xrD0uF>ro4NKs|M6K#6 zfUeM=-j1<wC!(0sgyq1$I@W@|!h-I}O}-hd#2}|-<Ob6+Cf7O@*gDhPx^UCFBG<MN z*tXN$wtv%hB-efx*nZXAes|Ljkng|?>L6<AAiM3LoNw!IF35XE$MuZ9@Dl@?F>`{k z+Ue<sgY?X(oaWX*x>qo|4rV%dP>)7SkIrq6fqbt?Q18>0-siWy*7AM!L48gweXh5C z9`gM@LH+(M{lT~WNcn+?pn>R?0cVyTg`g_%Eq!E8mGx{|g&fO6?a?uVK{ANG!jisb zzS%8jsP%TJQ+~KNXn3$?c;t3?Onzi4Xk?~kWZ`yXMgHeT(9fNgpZm8zkK})y1^v2e z`E_^u3$QR!&(c--d60XaadV?dL@qZym+xSPF%e^3U3N>)%Q^(P8y8WSkO-cTX`N8G zn}8`yssvAJv`*^WO&TannFLQgZJm04H)XBx+dlZWQ|oWnyWbwqr}!2|x#z30ELmtC z{yfn-_UL*n2|Ui7$&eB}lioU$c{h`zFk28jThuyRb~jt8FjpHq*VsDOdN<dpFy9+I zKiE3|z$T0-EKCJ2%(N~vw=yi>O;fTmWy5$QIr1a!&V@ct$KH)m-Yo&1EaQbN6SXaq zVU{VMtk8z6Ft)9*VphOUR=Gn~`Px<?m{pM{YZ4)AGHq)Lm^Ijw^~YZpcNZ3i!1;MW zV^02jx@^<PRwk<_oAx1_PHmg6m`#r-TNs~^E&sNyV9XZs$#z7@c68fz9A-P|$xdp> zPI}u;CT1t+$=`yIzp0BG|5!Ip6qd}sZ0NO(m0@-}pX~L9><zZ<jr>ol@J7hNPTRpg z=HTebzXxRCK^S=81&-Qw^+I;5+YZG7ck5pq(uN*ANCK?)M_|Qc?$Bet_G8HXv54Y{ zMCgf3`-#H+2~6=+CG=FI{Z!}v)Ijmfr2T}F{fO-TjI-&?KJ?tF{oM8b+(YrgC-lO< z{UZ4O0;zZz5qcTjei?UvnWT7?8hVx9ewBHDm9unZ9eQ2VeqDBdU8#6e8+y~&e$#q? z)2Vpd8;ZCcY`-13za3M&n+m;~X}?>zzgtnnY=mNV+A;h0m?Opev(Wpi_WQg0d%$W| z2NIWrNggen(-lF=EE_~9lG_taBVf_;zo`nRyn<qZuW+&c5BR~49`W$<J>bE-{QUnN z4~7T{2?+}e{||VuxP*j+q~wDfEGaE5Eh{Z1Co7{MFQcd+1&2wgC`rSW6<|s*xQdFZ znwq-Cf9zl#9bJ6`10!Q&LnFhdMyhruQmz(a-p_@DZA9L_kb7;Z_wt#=iw7_G<x3k| zI|oO{S5A%&J`Ro%Hg8g`JYy_9LSMe|w03oKb$jFH=HcP#?c?L;@9Q7v6%gVP6z&-k z`LIw6K_C%GWLQ`j3WbV{jEstkdH{rDV`Jmu;t~=P5)%`Xlat@SfBzr>fBcx5o{^UE zIqknQz*$*YIXSs`|4Dv+enCOOe+=Mn-wKP0ic3mLA5!)o_xC>x@Wa7>PjPX{x5DC@ zjO@M;#7}RV-T=+E@F$%y(*21N<LMI1d6L^jl6xf&II-03clq5KwVf7|?e=FYy>@>_ zJcg&E2WARdCp+sVe|?{ruKBan{%2u$X8u7A{(t3vDF;6|!mF#R4^;3&{wG2B|30z3 zz5TybgdbSp{r&y_r6qiPe0=g>bAEn)@n3WK-*Wvw<mP{s+y9z}kNnpYw|94UnEx{& z#9-YMv8Y#McZL&E^IHy7<a9>?IW<44SLXJ{GKjsNAE?ahPXH;$uxM1}55DI$Dz+S~ zDj518Z2RN0M)lW`Ptsn0=Lf65{mO#=|MG+Tn6>IkXQ~}1ik}bFmCe<=ul>l>s{g+5 z;7|Nr7^*K{YDeHa)U_KbR+>fs#5@~rs9ft$<kb42-B`6T^ij-tak#O1>sPjNESpYK z&CW!jQOS#urrO;RXT3C^`LeqGxdyM@#gXRve@h+VB<#8^4M%GO?*(4|Y-v2%8qL$n z(rs-z+nxR-CnS(8xHdQ0g^6X?YiqeW*`6qQ`Kzt<=HhT|C`+%s?e6CCWOwOTd;5dl ziqE@@z&-F|wzczL&y=o>*cuKWhV!nVXiObfA{bs3u0*o<Zm&dvBLBbr;B2v#sXFs8 zrnp-3aG+@QuxLMx#&D84Ptkg^w&c$Gdwo^DjTB>3r;SweS4A6XmcBb1AFLwzHb2^> zIc=spel6NeQ(+UcLs1y!<w@JxuX83+Qbn%|2jQ=6Wg+nSx3f`nueWp1JjL6&?<D_j z=OwE0@8qYLzTPSL_^Np4>u2A;JKwS+`T4TCK|4I3J$;oO<mne?$Rse7Y+mcaotHMw zj~fnhcfYrs|J^O`z!%u7=%I7os~q4d*{d3s+}*2wn3(L>Oqx3H*G|7G*{_@T9TNQB zI{jBmxPZz_8&&k(Vk~n~nsdFh{=hR9a{9yOU+d*&$-lPS^WA^#SOkKH9k}!^hn<9v zN)Nk8rS=ZHfog(BJv3%6N4*RVrNXUs^Ho|6Z7I#9V$#JHTks>{>A2=9a@&%Yx`EXg zfwIZZKSrdtN>6^uU+kUyf)YSZN8$9Yr(^1m%1+0%rS?xJ^wl6|lg4JQXH(`5Wj^B) z^`g~+tp9ABi?(F*I7_H1hqQ;<PCa9X%kq_e@a9h54KBRhD!afe23_o5EFlPlE|*dC zZ!TBRkG@~7zLPq*TuW3Fx>`>$dvmq%(c!!Qs!yyaF<;SJ$Pi>DdF0*azp5$6CI6aQ zVj<$+lrA29a<sYG&#=tBIcWL+=?BmI>B%3|yB$Yw<uu#GP8Y<#lbxkl*bx%>-n|&Z z2u=Lo@Pi*3`X4);w@4U8)L)67OW65TB%91xNkudLfB3-__?Y*?FB^t^WZ%Q=eExaO zKpZ9iXFnK3*5XS-nVhJ*ul2M!?LpezQ=%*5Ri^tN{NOFZZqXVgIvdVDQTG(t$ZU64 zO>Y(cAZY*p;|C9_6I_F6zi+P!|Ezry1xjM<Ayj?rG8SWi%1-)^AFQVF!!W}z9L%61 z;4&6#^={O~N*)~k8Kx@sgM&6#x<JTpaOlPL@dqy&75>9*5{0gD6fw*O^5OsD>AnM! zivIqA0~Y}m6*q3&TXAmzcaCzFshPP_Go?~<Wgw_HbI)>T&a$#{hcnGAbERd8W~El9 zSvjMh-|zGMp8xsdo_pYO&-tA9>tmDV0NO5@$f(o4b8H+QmdKZ*@>x7nVT`X68C63J z)OmL7<>k`tn>7oA3NHjTZHF&Q`ki~Pk$ivjB+ZQX2yX>*?bB0CH$ialAo-|JL&NWa zD?zRV?hN{bR6XbxDzn}~-s89f&9|VZ*q{4E;fv^2&V=9H@?iA|z_j>RZTxB<%l<Pk zPG<Qw)`5ED-QbYeBR_ZuWO?=ZRQY~Hj=)e*gKpXj%ArQy`8Ih|mS}Lk;Y_Xaj07CT zJ=G|cShxRB@%WPv=q={2CU?Gm)nD=_TT2UW5{7D&(|2D|MRm~U?T6$Gh3UDb{I^Z! zD(sp(+;HD+G?7f2e7J(Z%8twE9-;+GMFAqHi9x9O;Qios^XEgBc?TATJd{~a!1~x4 zp4@B#T_V1@BlRmmpV1U@VhqF&Ds19vVK#>zoJ#R_CBU>%fX>bAzGEs;kLm9}1!#4h z4wIXDSWLYTw6>2E&!25D9$EBu6LERE9A0&AD408O>^<g?lD*s1kKXt~IR^FP^=t(J z!>AM;FIR+HB~`VJPU1K;XU&^SlJ;WIPTEVcAQhUVnfEgc^9x`sF<{^b1oUm|=Mazn zCSQzaJ*6+zzcAj)pVBnTefdwjgxg&&bxC}J=}zsn5eY(r$P|7>y~}H6Gjs`?%B&&@ zofx4bz0R?~Xp(3ulA_*C2T3?eLxpy&#ne!VK8_F;0pg$##P}p^*Y|!v0G;KrSIV*G z2%htEB!uXtlxJ#w&qYy|%o_nO0u{U=55)p6IC1=(ZBIxX1RLLX*?#8R+lwC7zo-=; z_BxpvOy=2TH_se${P>IsKs}gnj@-j{$10Z+e2CD3A6Gv)d<;iCbHs8KFS&_0euRAZ zD+8?4VT7*IlyJGbDVbkSt|Uec%FaGK=92N0f2X7JI!xRA?6s5D?N!&q>H+4>R(6RC zog**kXZ1p|SL8J5+@9@c1+{N|I)1(cEZb_yzwrc0sl^}$>5C%I?Y~96!OmV{5?jne z&l>|19i3Tf%({2yzkcBAB7L~qb^UF!)tB(wqr;25!%E5L4=`_c%Ay|q_=4Ei^m$kQ zC#vAy-%yxJpWuP{lTPNm$!2ai>O<+RNKbC(FB5MMuGh}!TyQz~YSB9Ts6VS^^y)t4 z`r)4h*ZNBWsB2F(RNgM3&XWfJo%^14q3oU8?C#(433fgPS0Cu^4}^Hx#z9Nm7oVq? z=jmOSYu<VcUKOuQtr)wo#(cZD%lnwS|D}sQQkuP84A9C4ZTRVf0qxcy-kS~|YSnwz z1fE3~p1H)rl|REW5Y%5-W0-14q61ea+D3YgU+#?iK=wPecawecvX_?IE2r^A*VFMc ze}i?py#IDvRNz^CWdyo!+#b}_)(Go2_k24YXgI{n_50x35;{wviJ$F(JG1aU=bv}R zK(E@tx-$0H<v$<izcNiGAJw#RH54g5J!d#o+W%pH^~BSCKiajJhw%q$ul|=3ZmWcI zRGNjaPy9YOdJjMlzFS}TVI96DNJ12o*bvr$dsGDMdfgKek3N}i)q+Dm7U~ome2OeO zM;1qz3)WvdI=&;}o+uZc$j+B|OD9o;mZ-Lyh#kQxA$%*6qSOT``o$CpeaiMp%EBEA z9!=#Pp|Gq{;0jcmV(M3GYT&a(y?Ux6I?3o6m1~vi9G&F88s=&fi<(P3y_@8N_VO$y zpV_6Ji%t&Ob@9_j2?r$y?<Nyz$1f<LE}~PSqEkL=r~GqFiJm+1gY9ESQm*SC`N6hi z_he>LF)eMxCM75-eV3N4V4WF6l|iQ#MyI-Ir;h%n6wjrW2a$<|m*<}(=C3AIM5oo; zn3qOhs4M=DAM7ib=AS|irO{fW)7upYO+l27x%A%XYY!A+rQFlPcGHKWGxi>)-=t-{ zn9Fz`O&v#P4)10ZC}hq?r%%tNy=l*^FU}kq$z%kjen4lf?52J!HkZo&k1H&Jfoc#5 zGMmtoZ~_LylBHv=y$O73zX3sK)YwqU5Si-v(3k?82_0d>z#rMWj+<FBt#C6U;dtwR zbzu}Mo0WMsidD=JZ-<3KR-oCsmQtfP^rN#h+7RiLIO)nP4k#=K#mvjWuy6_G2)IIi zA_$7uJY9bP?}NXBg-aUbA_t*4pYW2PTpbWFW|c3umZ*@5*CIh}h(Kc$#Doa7&W1`J zF?)1~TPjW|6?dkgKqVXJ-cWFih?CAPu+BaLJs~#PP%c@hrVy*h9)OyM5b(h6M+kud z$k9Ps3_y(mh)n<qqabMpV2ZtQAPw=tmT1xoy%>Oo4-4)TJ^;ijvk4r>0``n(JO=7a za+CDAaX^6_amrZGe{|s^T3HeVbq2BQXaP=i=xMz&XJXlr^JnXmzdHpcpjga_`2>S} zPK%qI+CbhcR4fK3yO*zyE`a4jGnlQnGKj#X(OVg<2zgZbLMrrfL#}HK@Ui38hZvkH zs9bpzvN;N}0hOy@;Tmg@D;Smw7?!xrihmvM1W;uh17e4-{Fe$*$5*P-aS9~sF;Fi1 zW8@<}nI7w-X<@aag9L^0M1)wKP^`KJ(45xdJphPS%)`XwNU*UYK`ffAtPXrE*{wNh zw#BN?^W{ht;*DiG!Yod$B?m6Ia9BX11megj5(7b<Hp|$Ok6d9Er_H>bk2iNdg7F|0 z2V%a?5wpxVQk0KA4>(|0jzCVw%_}p(w-ji%SlSR7D2T`eM5z@_j0J=$bH4^dm0A&L zmA4oMSCK@3`9200_4ZawXYSQfa8N5kiH-<DL6lMDI&7@cAl9cbuz&MVh3v|IYhcyQ z3V3WKsspaKS)n@7&^?1QMOE$OLChb()GArU<nbb?d=Yw;R!5HD9*~X6M`Gc6jW`9v zJWa=%PBvDZN?0}nl0$+^ZbF`x;$nz3I&6R%h&99&mecC4h=tk{i*ks;O!HcYO$b2= zzz9LjF%VHYluZ|^HV8g>r_32t>*Nzjz(B=Gwb@p6=6Hx1rtWY6N)5g^y_O&9kr-x+ zw?>uQv}RFbp*uBqGAa=rZ|nKHa`(*ZzZ={aF>2r&1NpZi;Pd5HbVLrOIi{8Qpm@Kc zW52?r6+RnP>Ck#~aTRK<aIG%5>BK|kR3i^tQ`SUI7Cyr7E!5Wo09jRMMdrwCHYw}_ zf~SF(!YoL7?XEDO5CYqIcr*-f&vQ_KZS{VAlPn20^BnZj5H6A0Jk^LB6T(~U=N$(D zjvf$a48*O`htLYOPQ{%pEv1ZtZ0Y&_Z*#Oz?fd2s3@h|>Q7ikqI_7GEgG~lo8`uPN z=Y7lr5u<Wx&j%t+IPo}K`4~v)SUpPvBHgj#`(A6YaK3Y8%dL>Se``Qob`E?U8b=4k zf!a;eD|^No?;2Kl;V%W+RBLop<ZJ>(ws%F>tBVaEDQq?iGFg2Vl=93-)i9A}wb-2C zI2^XKSWu|_f)OC@(IA3iz0iug!j8A_C~*Km9EFd*UF~eMV4cd__NQ-?%OHVop$;IH zg8AEED4?cYy7#ayuZvP(M=BD@p3%n(5etRz^=bI}3k|oHM-f$H_nYHzLPXqcqxy{2 zz9rTN)J_DIttj}2M8?9WSbcP2aQ|W&8M2K%2VF)NfPbmDc)M=%F66Vgi-FPijsWw1 zHkhvnE7_<EiR~F51DzukwG87H#vbQX!h+IqIw;niF;Fy$)qMzbK^c;R4cN(htmDz% zA>2$CjyvRi>VE+KEi&9(l7pm!H83pOh;}Akg+-zg2Rp<aG~ITZfQB@-a=ajODF27Y zwyG@1?JoCky(M<ox0Cn4qX8kKGRl2nv{(i5uH?Z|OuaRIR1w4)>Ij%)@^!v-#Z`i< zpLdxND|^|yt%NIa_T3j9S>!-XmfsMI#W;0(-YziY+<arm_Vxj#ItJU7Ghx9<$2~F3 zTTo(|j;#?4h8?a|6G%m8CrXNS^E3`|5ev|$W~dy7WzLX}%?4}JpGbpPP76YD*<cLn z8etPG%7C0aHS%u&DuDua6go1$(I5P|VWQCYR^jN@LvLPy^041&c!7|L!&Q%g<cXu= zhokRe3iW(mD~dp*zxPQtGa=&FpxP|JOj-jHHHKSgsO|)}zZlTIFa`3+KAdVa=K=aN zx&hag#wgtLZ!cZG^#s^AYZ|~$h_Eij;g0<A=$O(y0Iv5O{P3WOM;N-x%6g87Q^3z) z&)k*X1AcbBM7Cysd0TY)E7XYry{|ZHo;?Ek1GX=%qbN@Nb%AgTL9<gQSl^Rxd^1-e z79tto>{wfc#__+DYTZ;k8uf&7W*+G{XJS!rMS>n>;vGC{2pK~;m@3$GMG%U$J$Sw# zbKZExgBbFl&H}Fd?&%FN*7q0ix=Jil4R2Y;-**3f_hygIIg*rxSQu`h^m5>>@UUm^ z7wi-k+H6uDGmG)6^iGr3EJtnN-1miral6s?I8x^=<L?%-#0lgk3*z1T^&XqWaokeJ zf_&u_H|mG4XBN|@KO6veg6IqXwgF!{%ohvzjl)8-L)&_AOb&*_3dFM#<}+d8unC-L zWl<->%uq|b-b+UmKTGfXUGv31V#`U?#oF{y^e_&Gg@Fno8FnmQt<!sX%gP%NaUu-Y z3f7>*6epm*c;F(Q1xIHw-uQ_39@Jzk;ps3U0|tHBF2!8AV6nVE1-YlXxTgiX(t;xp zVMoTWd->6SA#7KR#g<rybcCJ!$`Y9MSq<-xB(CfO%Z{dBLS;Vf`$388qX&6l=2gZD zbqyBV{pDIYj*!i=TLX2SfKpvy(i5N45<X{cd?uFTE+79=7-kvO`z*L?A&rjs>j!I> zpAGRjx&`Y#YM)(BeNI<{Wc99JOu*%3;k<pSi@d)&=da0PMtR@k2qc)+#Htzy;=_PS zIDW%s;d+=~)llDb%fT8GFr$t25Vh~E8%sMbEDo(;8Pwe458sXQ*Tj9E=f*GZ=Ya`6 zuy8C)YZDSVvGHAeea~-W_3lRK7)uBWhEn@}!yDGDwsw^cqsY&AwZi;}j1LK$diiUY zo-HC4H+gSwa!PC&v25|2-9lMz2~=#YP`88^w<ZU-kiS~YvCsu?CP4xVg&J9k`T%AO z;0z~TzT&3|3*==SUi)bze;Zi86)+&ZPpaKE{;^%v1~GE{byD0MQwf;e!%4IP&5z8F z3IsIh&wn2wI1E(Bae7Y+2+M{?Vzwc_fb;Jb{mw!n@o!-=f3R&}4@WrB5#F|eJ0gTl zJ^?U+kABy2Ar-hNiFuwj@O4K7)e&*xAI`86K(v94|Cy20cc~}vDH7&J_W)%SK_82t zZ0;uC*yXPUl3Ia1-o2x)4i#K@qkqE|uOOCB_YEqKE^iOny1i4gZ>xT~=_x>ak1OZe zhqXZr8NZIAF5RzQALmM(Fv;LN^CEen)(N$v!AyXMorTwK44u7>Kg;<1@5<j@tsU0d zzv}+LQA;5a5+sQozwpmZauZO${$VaW{`)J?QDLI+-=0V%#Q6t~1VSLFKoSNKev<$q z*Gyz_C>_V*iyfED@FW3KD%z>KA9bCLTZu1d*(w!sDKvD%$$t=K$SH?R-5jK6Ca_)e zZ>>2B{ZiC8e@bt1nc*nD0uUuyQd$}QoS90@Wf?#WuOa?kA&;eBRK3W%AbQP3>2y~j zx1Uu@S$p)q7v+{0bj#brri;1RAKRU5JW<rDMAb+nvn$3*mMgmWQrP(r#}0R$(C0D@ zHTlGk-^@1WkTiA194;sMeWuE;Bbk@D2d&IT(xfk2t@<J0REgwiG(<WAIZ1OckLO-V zNu`>v)8_O$F0;L=w3HX!@*ByPxEnyN%fV9DB?-uPS@oqlz#A>}%7<~1MJSafD|ePj z>C2Fm2u0ji6YsKED&$W5;vhYeE+G~&H*o{^FBEjnV1my~wF=7a^)hKTIa-ajiYg83 z*tN=KZKoce=&R+3oI3{>L)j`;AtOj^QYFoas}wP!`_d4XNxqX6pY(G_Nlp`2RtxT9 z5jMBQ>U={iM5A^YBVw^Dmt=|%%P2_!3*)sB8FPQSt!#<wb7`?_qB&%q4*Q_zf;h)5 zX_113b1X@=UJVXHl9!pITrgdfzZ{kAzLs4LdR38102zScH)$TZEN1&&BSWb7D;q;- z7gvRB{P8(bQeKqts*OOzDh4hJ_28Kx82gZ1sBMEk@6y_qpDVWxN-3*){yW{&@?^QR zN$r$itYjL86eI(h<n8#8Q-7M64IUQlQlAeH69s1&Zq}P;3R3kyA|<KyV7;&&mN!}& zjQSc*$=<xe)0evbK2DZcM-+i2*4qU$jMm!+;86vUg4LLHd=ZDBCMuCVGO2j8D&*ey ztXITLKoP@`o~?i8s~3L2SBrT|p!z>JMKYN^sxRqi+59b?mi-8ggyq*uXGGwv1Q>y0 zj|Dt+&`kXfPD&Z^V`k~zt?Jd9A4D>T-fB<yLiCd)!3FM{$))6suXF8w5jX)wikJ%9 zmbAc684Hx&tKNDPzOJq9n;W~33?&sZ`fxhsBpXz^aPD|q5{~IUT800md+8h5AL?}x z2D&P;F(9id^CH_H0#(QqPRW-hQ0#5wGN}8C+ZncR4llKd?QAQIEPjv-8$NaQp`uxN zV$f#4kbbwEfUJ61_*3o^Bew~;P^A=;1HO^($k;|UxuTOkYfv-VsnM&&R5)84RmIKr zclz{)bEq==vjkL%G5y#f-3j;iO^VO=^`_QgrLQO3E=RJfb*w%}KSXCIDtO6B9d+mt zW+t@W!Zwq!7o+=qh4Zpurr5+2?dI*a3;@%;#CbJ(K%^0r!<m4kx^3Ev-6TP@Mw$~9 zNElWVgc)}%hC|a2Bsg68z)+=+B?Jus-spjpN(RU2T|C<)BZ;FMd`2?D%mQ0akf<dl zslFhgr;ikB64-C8Q%VrcV9|Sl0Z#AEp`>?FBFl~`Ru<JfJ(Ze;8Vq)|I2(Z{bCxBq zRX8+T&4k4e13ISuX&&2P(Y*FSx#=oavF%KLQPxqzXlvMMWl4^v>``8+mE7MCq}YdS zthA~x$%vq#Rxh5&;OoCb6F1Fao5P7nZ40<=mFIyoKf;PYWdZKHTAXBRX7fUQ<y*Y^ zl>ahP@Y**N^3855!TW4a^*a}uHOOMZSoya1$gzc2X!cMt5SZ3b+H(`p5TQ-O#bd55 zsSN6mDIUKZ0xfxdQ^fx6F+0!Y2W6k_<y6M^$o5J1qQ{}nwLDX@FMgin8dxA`5bmIg zUes1U_XAaY4$Kk#Wg(ZHn|j<=9zjtWv};)R*0>7EX+)U82O#yD0S_qMJ%h4JDB8~r zMaS4e7ZO`lMf1if<-fO*u6ONM+*>)7sIUN&!aAbSj@gNZ(MxbsGzBe#P;K<!Z}PYZ zh;!GLWXg<ad7)1V3{T871-ePG`jWx}@otj!8ElCA5Yf4PrW<Wx%m^7&>s{=a^4&tF zna$vW$1@O+Houh~6o3~P#JkC1pqX)z$`&iOr=CjH=47;d6sveUr~d0c=W8&87u)1U z6V;Wx#S$u3o}GfqC$KAZK`vfw(zFZY(DHXf5lu=S4O&G#h^!Cw?@O*SqvyxIeL=pR zaJn%+Beg?A37RADAQy-H%0-U8%UK=QPM&VN!k&|Q<-MHu+5-!Fg3@a}@-JSUN5MTG z#ZnD<c}%Dy{!q!x(Ol4B{Q>Ms)r~9Rkpw~S!{;kR+3(>oaA$<xt%zPFMT@IKn`aCk z{p9*K?P67;$7>hUhLUFue)pj4xWJ`1UBamdb`>)PChXZolq6Q}x0MbGhgyc}%#M(H zcA6^R-Z;6ZtaNv766XzeB;g%z*u;ZURJ$uV!yL^E$699&ybQ)d6wF}^pQIG}Z*972 zR=}7~fXaovmVVVf?g9{;cY<5e!v`pP+Wjd7iG(4l<^y1!bH-Uh_bZ&Xd#naP8u6D9 zA$0_?>K80ptMlWi)GGp?Lm@bzGgsN1h8}E0S*E;g6W-4%Qtv@&<QYibDnBh&w|QR^ z3x3k}I8s(<bM(I2;EV2A;c98mWSbMQ9a6{c<*&*i0^x~IyD2{`tRb{uQ&y=<W+PXx z8z2JNAyuCoWE)+ly#lUu%^zu;ZM;%vgP8xIGw(KZGYrgnylrLs=PVy}jkSFX{F0}n zV!M;X9U2y{#jqgL<ZmBB!^|q5_y2gG9cOTe!hw7(-TLaSJm2tj&X@H9+z3O#%g&+U z?jN{E!IDhSkHBYHSN{xw5p#;PTdmy;gZ;I`$IeerFR71)oYr)X<ENi3z$|jjliI%* z!%*EzcM)4-4^fl9?r7oFeS9eQky+VljEOMrHA6Ga?9b<1#0+>?4`zinsfNu<Y;oX6 z+$}y)_2&Mt%B)avcdgY_pEF<m1fv9=`vAwZe7v(xUO_4h7i&(uU*|d3_3jO2M`eZF zI4d+)&ubR_Thw&6KC1hy`0~~Ji_D&^f^f*)@NtsIcGR2R0Q}phY6nY+nwtTRhn?u_ z1^!z2&l$pGyw!9*=C7p9*;jbZwgXf(sy{xg>+vA46}RH}s%}d}&%S{xa!HG2U&Pe( zvBsSr4PSq5!A>#X+bBi-O^62cZ(vu)e-!0KRqW22GXJ!cgY^PHaP1VtSLr*uG5Q~Q zyK>9glj`-!(PgM9{Tp*2st9#WQ{Ug0HQiDFx_N{1F?^DZVLl4__dq>UUsMdp-`MKe zlYV*=XuQSSD1BfcJH`J`$PnB}ewv2hai=JvAjq`JzUoBDR>-Vxh8!ZXA7myutu%}U z<f9?8mlKVA5@k^}G#ayCaRu^#*BEBgFPTqMt~H}Fs#YC^9E<>CVz!#U>PZ05bA&v0 zflwJnsXk`%e1Ix4!`KE;o-3lao1h#4-FisGyrxb*O+&j~H-5m-5yD9XwCWSDy*8#Q zfK65g4CgdUNA=99G{g9Qwae!E_9nAqkCYuv&UDqvBOp&f14^MoOU^^wbaVWX(zar9 zIUS3e0|y#{!<rP(WexXB$~yaU_>KCu`>~uzP1E@y{3<8|O>RVWO!N&^OjvsV8k*iq zMXlW>Fk~x9cjEI>FHkkem|+?nY*s9aufHAQ$GYoDxDYzr!OBe;8Qx_bzJ-1kxInUG z&9P*XY3Eg_LGk#&U+M7{^gLzpsOkK(&&jAuWrABgSNQV2#_(92Bk?<07st}F-;ud( zMlMippP8<|<}X*IOlV^0^Z5<OC{b(t`lP-ZRNFqNsV2zhNl4b$&^Af(`sP|b5bY(9 zES{pvfLy;+7-66aLqD%Jem(@E=;>2*q{s`-l$AtU;|ogDpn08)ZH>kA<~G}AC`HSM zqaX$_-h~7O+qPyP_(oc^eG<PHn;T|4Z}|3HSRd#Rwcu;-`K<tGqak8HZSNrMXbNNB zNp>bT?amVbZ3F~cJUBFGCx;&7ny^R;8oOg$*_BZ_lyAq09-3_eTx2ZYbk#B=f(2T- zZ3oa}OU~nWZ<6VvFEAcyAG&x;s|`N&fxG7|&G31=tE>bCetw2*>MlUoHT*lty*B0$ zcmRB2ZO<L+rAFgcR~#0<-Diltl&xZ2?!H;{3;#ajI2HRcSi6Bs`lajI%X4Jw=<b*A zZ<gWK9F`Z3|5<q~oBC>%Pb7pQi@5M4_kuW^OX>#lSQ;Rf@=K(0gjJwQ_fY0#BJo~{ znRR7lD{uzEwMi+}7uBABl_EnZHdmb3n~3%&z_LfHj-d7jqjD~dyh*Ro1+QsDvXQ%B zdsC6nj8l@05OouzJ(AdTL<qlsEv4gp1n|LjUt>%r<sv8LlO`1kn3IaPCzZz81hq9Q z4mt!Jl&T+2s*f8;IzqJc0TjwS9z1pSK3G2*a<oA?SBB7#b<uK|GVDpyxj3aa?qu|7 z%JlaXj%6A@^O`TIPnDyyEZ&LW=Bi4hyt73Vq-t6wA$W;L?@9o6ZYtBq)w;kHf7|uw z#Q5?5?*|ixCQH1W{w_@l8_%3dnsNU>Ke)izY-Y05*j4bivlq*(5C7~r*;!wmS--!E zXKo)8_&%d%dGgdTFmS1Hs6G1`hD$jzD+NTBK$#f5pA8FmzOxB#nK~JE>vhnXtY95y zPSmN(w`id(Q{jIVqYEav>&f;lQ^JVEE#|J4nB^Nu$BgT4NG?#K5M$*0HMf8>GoHb2 zH?^GwcfmwfuyO(TJr<Ky4AvW=u*TBxi3p=~=j}?1bJCB7m#5++Cyic1(u0eW@bg0B zbD2p3^6yCnmPdV75jh->t%0c`2gEHg)(7d%m>`Ow&!j1bOm@=g%ujR0pXRvd=5);6 z-QDKUp>q~PX~Hy!A`NnLeEu3iFg|h;)jDseubY+KnNpef&}8aXyz@h;(`&ont1VNg zV$UQ@H)amR$Ka@K_Y`yRlplZB^ZlKs`NQ@W=dQ?8S|1Tr*Cu0@5^t?dJ#zD)e{xqd zM?_fyl#;hDEgt5#2xki_y64iFy_iBe8aY(Y1@v=m(K6@jGe_Ln9`iyt=PC~-I6g4m z{G>gg2awiKiRwO{?Eqx1hjTs?@ymzv3yCxCbS8X@vt1|awNEy%#EA&@W~<5yVJXC* zGPxM1J{EAToO!=q;I%k``W}rE#%2ee^JdM-`ab^r4F}{c-K*Y(^Ye(;^VS<%Zf~eT zXO2?p4-6O9GT;Auzqmwyzlq3Z?%sfjqqe_4Vld7w?`BN6Yd4K8ex`fx&UmvMcth2| zx**`vyE6mn4;FSmpsWyoh+Mn$_x#>$41RAzp0inq#eEjWf&*gl_xqk`Ko!d^(YpAO zfBMy@nTg2R3bsOu8<XbiL`&Hcs=SY;I0;=_61+ZIlFglpq616SzWLzOuWg@~d_v#Y zn@gWBN&uITVi3iIB6UN-OretLZ0!ccBEw?8$d1xG_j^n>gtY~P5<BLVz5P_f1Vh$J zLf1Yv6VOR}0>brvaSbxfdmmF-SMDA2QwjX23G>mR2{n1HRLuM8dDAL2imkoT_x^Gk z-zB%4E^;nhP!Ruw6%ZE02-n;%F|rXp^SP*Q>tlU`@O}OOniJrDw^;u}slDzy-SSVT zrXD@MC^R6way$Q%`@@pJazXv}`P=#*?`f>4h^G<*{anKYBzhO9=;pu<BfVWiX_%`_ z;7Qpiw>`<qbmlb#)VcDzel3TyjKQ*`1Vl<wSVn3YG4$~?b@$5=t7OdP<!o59#IY*D zCZ&^zFj<yTXOq=pB<h+W#Fk~a-v)_79%qW*)=XQaZ9;S~^@4bEs(4WP#`#+4W4YLB zJtE}BOUZXC!C0Q#8fL*Rv54Zw<84DhrXF2LGnvH47@B*K+~sORl9Z69WX_*80pAd_ zT&dfCzDRq>s0Y<r?`Ifh%iJ$)dec;tEiOqbUdu5J$?RRvQ<EixgwQ4+I?-Q}#ia{B zfQnwOqkl@{_lpa{f}sfrnw505_?HOoRgLKNgWoGjj@`R>vZnim=&UcUZca@XXJe!I z>oh}|Fj8Z>BJ$0Hk5BiT4Wm1|Jz8?wyF!v$ra4tpKD$4Eppts>V)tZIV@Q+EAp2x& zbK7L&xKztPlFFmTo*a{nkG5)63A8?8Kyre;Yx4W7?sqCk*FdKEL%mF=?S_wM*t?T= zwY@Lux0ba9G>fRJ!rC`x6KHdHfxfpJsib!wy_G+FZkiR=*)4B*+u1TX-STgv#Ux-M zseNPFx#`z%218eEt5@alWpfG|5X}uVx-7I>xB*Tiwp0sEH>x1vZ&Hawt;#UiNYmAF z8qX``-C6dC@_Fi}UGre5Wx@HA-$PR(`4vP`72hSEbV0b+2u*c8G<MO!dVVvjUQXa( zUhd}Ad7=9F#_)H;el0t#pF4LcmKWOYzG!neXnDD7*Cu|toWEQCRn?M?z66S57(@{Q z%`2+^#A>xAjfAP)3~$NNGCT+~mbqeU=cjlcc%iCe1ppFohMr)tq2o_ORGT4AOI>hV zN9&i_6&)(*@@XT>DVcF_1%rn9g+0-xtfyn5-mQ7(vZ;v4yXH-~S0L?E+d>MzU%AlS zPHgK)q?*WI>K=GF^k>`lDN;}(WboG3i>v~bGbcsvoELq{UQ>1y=*-ae0ZnS@OTIEP z%IlioHIi6;Lqk(^SKlGC|2*$9R;s%gG}=>}aT!)0b;qbHg<%|G)qT#KHWFuam$}_} z7rK4Rp?hdxFg*$tu4fx^ozmg5(@FVruWY;1tLt&uPTaGB%Zoi{&kJ=7EJW>eCqDU; zvK!S?bH$8;m@gY5<DR}A>zu6VHb##-8(TV@K)f}7k)x+?T)Ued9DOa^IGbxL`YDBn zbm=bl4svxz2y1)cmHqvLn3@+064BsPV)R3n=u;m-wYb4{_T7y09A~edwjTcD^KVM{ z{G7<Mx6MO+%?o|v-4w)63k}earE8+5YoeCD`OL|FfnH6%vos+RMH8JUx0%?MVs1^f zIF^r*wg7vG4hAwKwJgjHxy;n#X|@XkrfpX(ENCa&c3i!NP9q2V^&-cq6s8i&MK>Vs z$*IG3T%5a?<###l(d#|#gNGgqI|JbdgC}hJt{&PgJed4qp^LP%viO@>dHD3j-z5FG z-t&WbXM60={+&8cI`z%s;Ujb7=4(e4mlscl7^i4m=>spW4catQ)ET6g{|+Unaq6P6 zb<lqXo;7ioD5*(^e)##C%)fz7*Z-tkdm_*Lrrs}&jQ=ZW)Lb(a1*09U5qVUCHZlEF zHbKqM)lJDk8dCk5t?Y$USl<`*k-UOGBu28O2*bQ@GKIB#`=Ul|f3M|QP|QdwzcyEp z;#&5m$Y${8@e+BYqt|F&GAmp#@&jW}$`1pV4SGx5(m)NBC?n4kFEJ@~qZ8HE2H1Ks z%mIZx8#^0pceGWh8I&BPL2(SeRd+(j;+BWbxlAqVCOX0C{0Lno0Fh{59)(G*4k^yp zzZtCo2wnWzUY}7+_HDnMLKLE42Xe77(~go=`3)}h&J7-_2U@H6@r!4W{?1=C{GLH0 zul$KW{cB<JYSFr^yWjRZI%R3|7prT~*|)5z!j^9j^ae(n6g^=*`Uhv}Pm(T6yc-M? zlC!->FFJeP>hpNF5UrwlBGz%Z<W!-LJt}bSeAQ6F&EVCU<Ou;{_srDk;A`a4kmelv zo6zfuPALfJxpt2WKnERmo=w%JNGMw8yj0qO*sr(g-(yY*L@+};bR1z0)7(&kdoVw5 z&VT*jW6u8ER>GH7UfVb^T_%qywoFgj9Sbq=6VnOZlP$LCB&MLwX)^i~#4B@#%xz<W z<p_R-tlXtQ!>C+Qcz=g{#kHTO<$<eKR5PKgu2pv`9NPL^a?><R?-Yt7z*b_ep$z%D zBR_Z|S1_Q>$y(x=B2R%r!(gr*_M+{1F|ND&A@*hp=Z1wa#le8+3B;0R(Z$D|cbePY zvT@(-{FxSX^J#yl%EJVKt_%0Lb1JE54}al7u@QmPmdB%=AuEWG=%s<%<E3$77PoX+ zmGWznT^kGP15?$Ca1(Lr1dsNrqzs=@2307A^!g&x%yyprPVb@ZuW&jb==H2`*Vb6W z49RYf?N$F3S3AruWUnzIDcG=a=S152M!sB0Y(S&b|N6mN<2vu+uZ+tW2`L?Q7!g%3 zY+N?her+joO?&c~a?h_3{+P}yT?zwnArtnV*K}r2U+B?!b4IyVt4qGiNM~$2_L}b7 z;HLlh!6K}WM@{Z{$<C;DUHe}@7&|b2<(2=Ka>U|){oqt(=A)^v!(zLyBFlR8KNWZ; z7<@kVPwe+xPLV_O=c;s5!?oKNIy>fS*t{RD9kpsZ@`FXFoeNFxRE;(|zV;q`Xfr>) z^QD^|XS_9}{=I9uoGZ+D`@eqh;K)_Z!=L~4gXhB)d)A*nylb+%l#VmqaeiyMx4YK# zw0HB9b&Toiw=o><Z&eqL=kWK}r?`J9izga)!rnXu^R$xA94vN0XuSbBJ_xK00x4&q zg*x<s`ZR*G`z;9Uw*Hj(WfBLKLE+F@0nF#vbM0wny)jsOMKlEIRH=*XXQfIlII>Ip z>_?kYlV6xuzN+8p!TrS}bP#=)gA!313t)ZDJ;I=j6a{mLVX^s15c}LFt2`%b?>_Bo zRvDD7z7Y&~)B~dH7y^ZM2?H^k6xm`KFz`j%Uz9-z4QK;;D^;Azzk~(H{jIbcbHFk2 zBjN|U)<;b;H8Y&z#ZX@!KUn8(fH`HG@y(758=)R}+Bz*0e0_k__&#<G);^)BIZNpz z23%%=hyUc>?UTKllDD-HsyqG^iHjf>xz^i?@7=}qIeE{95&_}&_$2%H4=^3nsVf4b zkK8|`74`blwWN8*Qyh7V+tdA-X;6T@6VE1UJR<bmF_EJk#KIAe0V;Qo2|^`d9VLFS zJ-|}P?DmncBL$QS<;eTz0J8Pt?De~L{F5$;qMLWPoI!~Of0U~Tt>7A))>lbXI^1m6 zOi*VZNYJELqrZQ_EooA@s8|GV(o({QBY~LHqEcPV%#!~IaDWl=V8>Ru5)85>Ni?P; z<Tuj9nzbZTX{G9)#kwV{W}*ar6K-7KV|}iekdr%Idn49HtQm_EhAy$-R`DF6n5kGE zY7<b>XX|O0-Ei_zU7tVQVP~5Xf1D2&Hd80T4w*h{_2^D={Mgy0=gyKV+nD2-t6mL; zR7y-_gY+518TmN3#E4%t4`fCH;hJ+vC>@LF+pBo9G13e1&@$2A3O1HaE?vShfNAC0 zD!qZeJG8>$q#$TGw)y<T>@Rj(Fd+ZKhhMUl%t2gTW}ha)_3O!c(v^JT>y^oZh$ZBC zR3f(o55#yO5<|eqh#0!SHEOr4n}+U2SrcCb4e@3M$J<5R@qC|HMb2hMjjBh+Yy$@Z zKRaVys{y8b$&ZT(y(95cm-4;>8?l1jIz;TXS7pP$PA2zU3=Sn|d!_se#3Q^$s!{PC zlN$+dXkuaEC7|xJRJ49qNc1I7-)5LuBKX-xB;mT-Y3DUqdoQv5o<+Z5wp{xXN2L3v zSfC?(WtPxkKC2$i_ktn0UEHtQyBWXOMm6mA!Qkrwq<^<Ya(f|I>Ug+d8#d91L<TRq zT}iCy4iFwV#o=|_?-o3M#cWwf^7W_tH^@-`e^N59!>oRk3OO$GQi@>cguEIqj-baj zTE_`@DQ7->gQ$D%wnP#s_{;CwbHQpcW_*|&XA}!bsup&Y={UeOVzxjMexhneBn#V{ zXRAbLATI=+7oq;7hH5Y>@zDcf8=J{`u1k^{3UX{8vXi)KF&y6Y|5NlJlEGttCJ9%} z&#Koi0V2_4WM*b)6=sk<te60!je}xpF!M;CCtXVy!vgOdm<MMQq;-IEXMs56tE@k5 zO}8ra0^;7iXGVDrI)qVOZ@&BRfi5zse^DN@vNTzz+pgn%KH)$_@=MrbE@#s)tUn$Z zLL$KE6CX2fbS)eS8NH{~_()I7YJK>Xf%s`ElZQV&ayPPd=i0Xf_8|sB&wM<*{0g?% zczL~US8P=*8EbRx1L?ipGxdbLGatY#S6i9niS77JEAf?2@NvVJk<1@af<50{ahc=W zz1zf{!^NGKJLi**MPI)2{v86`F|vsNnX2sl(TjdCYtWNjA>F&>y=wUAo--`9sq|R$ zXRjUa9y%=_!)9fTKpscJ_`dD4_jt<z&7c%l%CMSZJw-5qLD8U*!57`r3D7i~o#ic4 zyU+Gw?ZgHZzJI%LCw)S^7EIE8bEi)tVT<c$oSe)s@`Ir1(USDq2G`&|%ie@137_!1 zqQMz>-Gk3Rab0Cuer=-2G>E#0HmLY_Iy+pS+f3B$m%}3Zro^r+^?;QZ6xfHR;{|4> zUpiExGtTZA`0TeV8W5<tvS-AZRJ_n8`{3N!jXpA5K;lq?ba<L^GoEmZ#Wm)&L{K{! z;qJo^me^;lG;bI9XR?S|AoI2n#CDVOubtiRsXQcLesWNezLonkeSab=xJ(%Y`*ZjJ z#;=P$JcVa#RDD34=fHA<U;*eK9T6dC3Bk$A&$3YXpK_sn8p~S6*VV%HEddKqpR^*C zi{2;jtrY#MlqVQ0!bk1xp*J*;r3;TH8$5XgUusgFC(2@~=JD|eX*q<9?eg!}MHf>E zVr_j$Y_*7fwXjbzVFEOWgbEgel^U0QGkg`7MHG6^IyIbY`z9<kDWKjv8q>!sUuYd9 zI*1MP6?1nIR--Z@vCAr^%fTzv*cd4R#RBxVoARB@eS^N*cdKjnK#HZlxsvbWu=sei zy_l$!Nc>0Ncv`TKvzU(`$NHkMCS48O$J<Uow11orkkY7Qh^c^u8DLR&A0=C9V>Jtz z<JHEKe)?G-6?Ln%#RqjbEp*vvzC>viIdPF#U(L@#EkYJr31@V?hb=Yny2Fx3Fb**2 zYm-3ZcdK4oU6SE&vd_mGo0h{-gMzi>bD+@}p=HNzviZ6Qq8q%?A^?!UBH50Okpzyq z(u;jAW*Gz#gd5DJgeQO?jv2Y6FY8)bTe~%U(%I5kEdaqY_^4p?N-@F1)(uwt3F&C* zV#<`gu`+*rQsPp8$mFpA?@5VMa>J*DrIiH+eG;w2vn`LwL49mXtqKWVFWt;&vNtR~ ztIdy*f<Fed$!6KqIX{;@^EN==<F;7_!=TQOZIXKSxSWgH3f@2P+6=?5?yX4}-td^X zcamJd&mpe-d9(JDzOl026CeV)&SPEH+`X=L^mE|L+qE;Yg6*F@hCeHZ1^UN+_ROl1 z=ltSZEg6lpZu9vZd0faYd6K2~_SIa=i$7^x#dUw1g{Nz?_P)*LOymE_LRp*p_z-;$ zOu+DVvXCqIh;k5603ZJ~rm+v>N0RyZ7CjC7c&Qb<3t(OqLPy_F!`27F3y^4jABw3> z7F@Y0q5vi+68x8GLN-CW!Na`JJ_HdY>Pl{2vE|oYrAR>$^<WVctp0sHC5@ahS<f>U zL_J=A`R8(a7RgyOD3Q}5$vY^yQz0X_K6MtHCj2>=L`W@Py^3KFEEJRL6euu7AChpo zRUj)miJzEjDD*k&Pmr*xRf*|p_N+qBF`-69DC*`Z^e@+tx6eohisGAAw>lYWx*}zr ziuoQ2$&K%FIcLJ+;aSNN0$YB>SpqK<%;vt98U+$v=tCH%oD>boWx`93ua?#k%4P{d z3&A;TNe$wIjgQyMVtsG!*IQfF-SKTO)0Qj9B9*E&Ha!@s>-~UVX=Ez>ZsgH!%rAXg zUie{(>hOK;PR<JphXsq{-z-kM(mdL2Liwlyh%(Br!B~8<|BH(3P|H*CmhKTLgy4pY zUMZd5hiO5Gl-;2xsKK;p%ihW1p2CstWmst1m#_(&_Mg_Bvlr6lY`SBYqi92!+Hz*U z;4%2nj>cz^we=Bbn{z>HX$mP6s0wRKlUds-Pj^CPqjcyu%MJk*vOWBSyUM@@oQ>Xh zCg59YEuwLQHlRsIXN$4AuRe{nsb)Uwh*CL6!iQv!B>R6OD13ir7W#Cfv5=_}ZODD8 zUU1O%V&n?K%=LR$7E5Q=GdF+BwK<sy`rAQ&I@(|1NBgl=5Hqc^J8dB`qXvySsBc-> zl<aixL%D*thgu%^ynHCi-mEaxJIVfJ_4|kC@{gD=9Ugq|$pA-cfQjE<KJ(8S(zjpk zl^Tl3_;{CV5%y}eTy4GX?jnBUWBc2cyXEV{cfY;dSZfVya(MN1U-kQj+K)eBQ^g<R zPkt5ub4;r5;+FFZWVV=@f8Vk&bi03)>n1@2bLOWUYpbG#z~R!Yad?jFaF4~0U%drC z_to~qE!LcQDyBgTe+KtI*s-FJJ8Bk(38U<lWOjcLuIJwG{nKU>bQ{A#!Ie8^P;3RN zHRnaRIT|Z6Y4`U-ICIu%Z)0O`Sw{QOz5PifL_K_4JQc;X_b&GOQKYbW<O~<ni1z-i zTA%OiRNKL=TiLZZH?8h|y{r07fE8ifCrr$BK0_pIwx))Xg-PI}3^02%UBuWCO;T*F z0!gX$$!U_giu>-hgHY`EJ7PAGBr+va9f-j5))U0(WVd)aZ}T!WS_7Sa-|UctZY84` zaDKQ(f-8*oOCN8oFt7GkFEL)hnoGhu;i8^fJbGJrY|)h&m{6Gpq4mDVP6excB?zv` zDrg~9)aThw5;3-9dr^!y_0x0WzQEjleB~uHaGC$h9SG%t!Vgy=&!4>3mzKn#(oeTa zZfc6mZi($Ai{BHF5Tr_+(CBIb%k{Q`9k9$#!pHdi$*e>W`dcf@Knwh4A6F<I*-Bt@ zBybGUg^_(Q;-#By1g&RBLuGm7fAo_hb6IR_pSr@<O|M1{@{495iT8OUz-&a4fIADn zS0CJ>h-GHm<jWPb4hE>jbK7a@cwPyJCvb#nB11tUj6M-<LEQKi0!Z6b{jQ;W8-enW zgSO3f>4)jgLt*y`E>s%<AYbVqT(K;*9RS<id1LkPidjY*?%9-3F<lTeYWGY#d@kac zdW89+DB#nEml(A7ymI16n`8LVv+og0!M1_kk7J%W1o=od?cd{sHVc=Cu!)Bz=e2>L zK9oNmZXv9(eM937(Y_WWp3lTP7(68G5;+hIK7~F}4YD9==<=_#0{N*tHgd>e{2AWC zGw}SLO1dyM&C(pkE;o#L-<J?g_At>6(*A)~a62&<S=gH@(0xo?#KLboC7_0Qj%)CY za?)AK>ut{O{x_ThB?hI(q7uq=0ntB%_CI*XKYwo%1UAbdU;jLv#|K15ab)9z)$d;X z7^P%AcAi}?9R9ck1P&9j2sMJA7u><eKUPcsvn!>CH&N%0AVl7Y1h+ieu%%wSPWIZt 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 b(rw+^?cL&S-s<h%@@?Px?cb(LKmY(cN8k-A diff --git a/docs/images/init.gif b/docs/images/init.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2cdf6b31003cc2fd3a9d49ba2cf9e159dc02b70 GIT binary patch literal 133852 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 F{|o*zO8o!; literal 0 HcmV?d00001 diff --git a/docs/init.md b/docs/init.md index f818dac62f..778a79f529 100644 --- a/docs/init.md +++ b/docs/init.md @@ -1,3 +1,5 @@ +![Bump version](images/init.gif) + To start using commitizen, the recommended approach is to run ```sh @@ -16,3 +18,4 @@ The `init` will help you with 5. Choosing a version type (`semver` or `pep440`) 6. Whether to create the changelog automatically or not during bump 7. Whether you want to keep the major as zero while building alpha software. +8. Whether to setup pre-commit hooks. From c1834605320c2187833957b74c63654eb90f8053 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Wed, 10 Apr 2024 09:34:22 +0800 Subject: [PATCH 198/685] ci(github-actions): replace env with "with" for docpublish aciton this has been changed since 3.0 as well https://github.com/peaceiris/actions-gh-pages/issues/123 --- .github/workflows/docspublish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml index 1001be8d9b..11f509b5b8 100644 --- a/.github/workflows/docspublish.yml +++ b/.github/workflows/docspublish.yml @@ -32,7 +32,7 @@ jobs: file: 'docs/README.md' - name: Push doc to Github Page uses: peaceiris/actions-gh-pages@v4 - env: + with: personal_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} publish_branch: gh-pages publish_dir: ./site From 5e2cc6c67a6d5d437db1c1a782d5aa4c6b7b0176 Mon Sep 17 00:00:00 2001 From: rockleona <34214497+rockleona@users.noreply.github.com> Date: Mon, 1 Apr 2024 20:13:46 +0800 Subject: [PATCH 199/685] feat(cli): add config option to specify config file path Issue #656 --- commitizen/cli.py | 11 +++++++++-- commitizen/config/__init__.py | 24 +++++++++++++++++++++++- commitizen/exceptions.py | 6 ++++++ tests/test_cli.py | 10 ++++++++++ 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index a442803d7f..d96d675850 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -92,6 +92,10 @@ def __call__( ), "formatter_class": argparse.RawDescriptionHelpFormatter, "arguments": [ + { + "name": "--config", + "help": "specify file path if config file is not in root folder", + }, {"name": "--debug", "action": "store_true", "help": "use debug mode"}, { "name": ["-n", "--name"], @@ -534,9 +538,7 @@ def parse_no_raise(comma_separated_no_raise: str) -> list[int]: def main(): - conf = config.read_cfg() parser = cli(data) - argcomplete.autocomplete(parser) # Show help if no arg provided if len(sys.argv) == 1: @@ -576,6 +578,11 @@ def main(): extra_args = " ".join(unknown_args[1:]) arguments["extra_cli_args"] = extra_args + if args.config: + conf = config.read_cfg(args.config) + else: + conf = config.read_cfg() + if args.name: conf.update({"name": args.name}) elif not args.name and not conf.path: diff --git a/commitizen/config/__init__.py b/commitizen/config/__init__.py index 09e38ca96e..883c0ded33 100644 --- a/commitizen/config/__init__.py +++ b/commitizen/config/__init__.py @@ -3,6 +3,7 @@ from pathlib import Path from commitizen import defaults, git +from commitizen.exceptions import ConfigFileNotFound from .base_config import BaseConfig from .json_config import JsonConfig @@ -10,10 +11,31 @@ from .yaml_config import YAMLConfig -def read_cfg() -> BaseConfig: +def read_cfg(filepath: str | None = None) -> BaseConfig: conf = BaseConfig() git_project_root = git.find_git_project_root() + + if filepath is not None: + given_cfg_path = Path(filepath) + + if not given_cfg_path.exists(): + raise ConfigFileNotFound() + + with open(given_cfg_path, "rb") as f: + given_cfg_data: bytes = f.read() + + given_cfg: TomlConfig | JsonConfig | YAMLConfig + + if "toml" in given_cfg_path.suffix: + given_cfg = TomlConfig(data=given_cfg_data, path=given_cfg_path) + elif "json" in given_cfg_path.suffix: + given_cfg = JsonConfig(data=given_cfg_data, path=given_cfg_path) + elif "yaml" in given_cfg_path.suffix: + given_cfg = YAMLConfig(data=given_cfg_data, path=given_cfg_path) + + return given_cfg + cfg_search_paths = [Path(".")] if git_project_root: cfg_search_paths.append(git_project_root) diff --git a/commitizen/exceptions.py b/commitizen/exceptions.py index 31b867b8f9..52c300a938 100644 --- a/commitizen/exceptions.py +++ b/commitizen/exceptions.py @@ -34,6 +34,7 @@ class ExitCode(enum.IntEnum): VERSION_PROVIDER_UNKNOWN = 27 VERSION_SCHEME_UNKNOWN = 28 CHANGELOG_FORMAT_UNKNOWN = 29 + CONFIG_FILE_NOT_FOUND = 30 class CommitizenException(Exception): @@ -189,3 +190,8 @@ class VersionSchemeUnknown(CommitizenException): class ChangelogFormatUnknown(CommitizenException): exit_code = ExitCode.CHANGELOG_FORMAT_UNKNOWN message = "Unknown changelog format identifier" + + +class ConfigFileNotFound(CommitizenException): + exit_code = ExitCode.CONFIG_FILE_NOT_FOUND + message = "Cannot found the config file, please check your file path again." diff --git a/tests/test_cli.py b/tests/test_cli.py index 93f6c16ddd..345f0b1b00 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -12,6 +12,7 @@ NoCommandFoundError, NotAGitProjectError, InvalidCommandArgumentError, + ConfigFileNotFound, ) @@ -25,6 +26,15 @@ def test_sysexit_no_argv(mocker: MockFixture, capsys): assert out.startswith("usage") +def test_cz_config_file_without_correct_file_path(mocker: MockFixture, capsys): + testargs = ["cz", "--config", "./config/pyproject.toml", "example"] + mocker.patch.object(sys, "argv", testargs) + + with pytest.raises(ConfigFileNotFound) as excinfo: + cli.main() + assert "Cannot found the config file" in str(excinfo.value) + + def test_cz_with_arg_but_without_command(mocker: MockFixture): testargs = ["cz", "--name", "cz_jira"] mocker.patch.object(sys, "argv", testargs) From 85a5ec27d690f8b6e5c2556364631a6325768e04 Mon Sep 17 00:00:00 2001 From: rockleona <34214497+rockleona@users.noreply.github.com> Date: Mon, 1 Apr 2024 20:54:33 +0800 Subject: [PATCH 200/685] test(test_conf.py): add a test case for --config option --- tests/test_conf.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/test_conf.py b/tests/test_conf.py index a12bcdd35d..12207271db 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -158,6 +158,15 @@ def test_load_empty_pyproject_toml_and_cz_toml_with_config(_, tmpdir): cfg = config.read_cfg() assert cfg.settings == _settings + def test_load_pyproject_toml_not_in_root_folder(_, tmpdir): + with tmpdir.as_cwd(): + _not_root_path = tmpdir.mkdir("not_in_root") + p = tmpdir.join("./not_in_root/pyproject.toml") + p.write(PYPROJECT) + + cfg = config.read_cfg(filepath="./not_in_root/pyproject.toml") + assert cfg.settings == _settings + class TestTomlConfig: def test_init_empty_config_content(self, tmpdir): From 88ab61ded44178a65d03efadb00bdabfb1a09aeb Mon Sep 17 00:00:00 2001 From: rockleona <34214497+rockleona@users.noreply.github.com> Date: Mon, 1 Apr 2024 22:55:01 +0800 Subject: [PATCH 201/685] test(test_conf.py): add test case for specify yaml and json files --- tests/test_conf.py | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/tests/test_conf.py b/tests/test_conf.py index 12207271db..8d2a0233da 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -44,6 +44,27 @@ } } +JSON_STR = r""" + { + "commitizen": { + "name": "cz_jira", + "version": "1.0.0", + "version_files": [ + "commitizen/__version__.py", + "pyproject.toml" + ] + } + } +""" + +YAML_STR = """ +commitizen: + name: cz_jira + version: 1.0.0 + version_files: + - commitizen/__version__.py + - pyproject.toml +""" _settings: dict[str, Any] = { "name": "cz_jira", @@ -160,13 +181,30 @@ def test_load_empty_pyproject_toml_and_cz_toml_with_config(_, tmpdir): def test_load_pyproject_toml_not_in_root_folder(_, tmpdir): with tmpdir.as_cwd(): - _not_root_path = tmpdir.mkdir("not_in_root") - p = tmpdir.join("./not_in_root/pyproject.toml") - p.write(PYPROJECT) + _not_root_path = tmpdir.mkdir("not_in_root").join("pyproject.toml") + _not_root_path.write(PYPROJECT) cfg = config.read_cfg(filepath="./not_in_root/pyproject.toml") assert cfg.settings == _settings + def test_load_cz_json_not_in_root_folder(_, tmpdir): + with tmpdir.as_cwd(): + _not_root_path = tmpdir.mkdir("not_in_root").join(".cz.json") + _not_root_path.write(JSON_STR) + + cfg = config.read_cfg(filepath="./not_in_root/.cz.json") + json_cfg_by_class = config.JsonConfig(data=JSON_STR, path=_not_root_path) + assert cfg.settings == json_cfg_by_class.settings + + def test_load_cz_yaml_not_in_root_folder(_, tmpdir): + with tmpdir.as_cwd(): + _not_root_path = tmpdir.mkdir("not_in_root").join(".cz.yaml") + _not_root_path.write(YAML_STR) + + cfg = config.read_cfg(filepath="./not_in_root/.cz.yaml") + yaml_cfg_by_class = config.YAMLConfig(data=JSON_STR, path=_not_root_path) + assert cfg.settings == yaml_cfg_by_class._settings + class TestTomlConfig: def test_init_empty_config_content(self, tmpdir): From a1cfdb086fc7030c406b090115245799e7d97de4 Mon Sep 17 00:00:00 2001 From: rockleona <34214497+rockleona@users.noreply.github.com> Date: Mon, 1 Apr 2024 23:05:12 +0800 Subject: [PATCH 202/685] docs(README): add --config option in doc --- docs/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/README.md b/docs/README.md index e48062e168..8822826595 100644 --- a/docs/README.md +++ b/docs/README.md @@ -107,6 +107,7 @@ For more information about the topic go to https://conventionalcommits.org/ optional arguments: -h, --help show this help message and exit + --config specify file path if config file is not in root folder --debug use debug mode -n NAME, --name NAME use the given commitizen (default: cz_conventional_commits) -nr NO_RAISE, --no-raise NO_RAISE From a47bdd04fd121bc675fb57a374f91cc528529523 Mon Sep 17 00:00:00 2001 From: rockleona <34214497+rockleona@users.noreply.github.com> Date: Mon, 8 Apr 2024 09:44:30 +0800 Subject: [PATCH 203/685] test(conf): add test case if config file is given in argument --- commitizen/cli.py | 2 +- commitizen/config/__init__.py | 44 +++++++++++++---------------------- commitizen/exceptions.py | 6 +++++ docs/README.md | 2 +- tests/test_conf.py | 18 ++++++++++---- 5 files changed, 37 insertions(+), 35 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index d96d675850..cf3d6c5eef 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -94,7 +94,7 @@ def __call__( "arguments": [ { "name": "--config", - "help": "specify file path if config file is not in root folder", + "help": "the path of configuration file", }, {"name": "--debug", "action": "store_true", "help": "use debug mode"}, { diff --git a/commitizen/config/__init__.py b/commitizen/config/__init__.py index 883c0ded33..a9395fca7d 100644 --- a/commitizen/config/__init__.py +++ b/commitizen/config/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from commitizen import defaults, git -from commitizen.exceptions import ConfigFileNotFound +from commitizen.exceptions import ConfigFileNotFound, ConfigFileIsEmpty from .base_config import BaseConfig from .json_config import JsonConfig @@ -14,37 +14,23 @@ def read_cfg(filepath: str | None = None) -> BaseConfig: conf = BaseConfig() - git_project_root = git.find_git_project_root() - if filepath is not None: - given_cfg_path = Path(filepath) - - if not given_cfg_path.exists(): + if not Path(filepath).exists(): raise ConfigFileNotFound() - with open(given_cfg_path, "rb") as f: - given_cfg_data: bytes = f.read() - - given_cfg: TomlConfig | JsonConfig | YAMLConfig - - if "toml" in given_cfg_path.suffix: - given_cfg = TomlConfig(data=given_cfg_data, path=given_cfg_path) - elif "json" in given_cfg_path.suffix: - given_cfg = JsonConfig(data=given_cfg_data, path=given_cfg_path) - elif "yaml" in given_cfg_path.suffix: - given_cfg = YAMLConfig(data=given_cfg_data, path=given_cfg_path) - - return given_cfg + cfg_paths = (path for path in (Path(filepath),)) + else: + git_project_root = git.find_git_project_root() + cfg_search_paths = [Path(".")] + if git_project_root: + cfg_search_paths.append(git_project_root) - cfg_search_paths = [Path(".")] - if git_project_root: - cfg_search_paths.append(git_project_root) + cfg_paths = ( + path / Path(filename) + for path in cfg_search_paths + for filename in defaults.config_files + ) - cfg_paths = ( - path / Path(filename) - for path in cfg_search_paths - for filename in defaults.config_files - ) for filename in cfg_paths: if not filename.exists(): continue @@ -61,7 +47,9 @@ def read_cfg(filepath: str | None = None) -> BaseConfig: elif "yaml" in filename.suffix: _conf = YAMLConfig(data=data, path=filename) - if _conf.is_empty_config: + if filepath is not None and _conf.is_empty_config: + raise ConfigFileIsEmpty() + elif _conf.is_empty_config: continue else: conf = _conf diff --git a/commitizen/exceptions.py b/commitizen/exceptions.py index 52c300a938..9cb1517680 100644 --- a/commitizen/exceptions.py +++ b/commitizen/exceptions.py @@ -35,6 +35,7 @@ class ExitCode(enum.IntEnum): VERSION_SCHEME_UNKNOWN = 28 CHANGELOG_FORMAT_UNKNOWN = 29 CONFIG_FILE_NOT_FOUND = 30 + CONFIG_FILE_IS_EMPTY = 31 class CommitizenException(Exception): @@ -195,3 +196,8 @@ class ChangelogFormatUnknown(CommitizenException): class ConfigFileNotFound(CommitizenException): exit_code = ExitCode.CONFIG_FILE_NOT_FOUND message = "Cannot found the config file, please check your file path again." + + +class ConfigFileIsEmpty(CommitizenException): + exit_code = ExitCode.CONFIG_FILE_IS_EMPTY + message = "Config file is empty, please check your file path again." diff --git a/docs/README.md b/docs/README.md index 8822826595..8c7dc51e48 100644 --- a/docs/README.md +++ b/docs/README.md @@ -107,7 +107,7 @@ For more information about the topic go to https://conventionalcommits.org/ optional arguments: -h, --help show this help message and exit - --config specify file path if config file is not in root folder + --config the path of configuration file --debug use debug mode -n NAME, --name NAME use the given commitizen (default: cz_conventional_commits) -nr NO_RAISE, --no-raise NO_RAISE diff --git a/tests/test_conf.py b/tests/test_conf.py index 8d2a0233da..786f12b36b 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -9,7 +9,7 @@ import yaml from commitizen import config, defaults, git -from commitizen.exceptions import InvalidConfigurationError +from commitizen.exceptions import InvalidConfigurationError, ConfigFileIsEmpty PYPROJECT = """ [tool.commitizen] @@ -179,7 +179,7 @@ def test_load_empty_pyproject_toml_and_cz_toml_with_config(_, tmpdir): cfg = config.read_cfg() assert cfg.settings == _settings - def test_load_pyproject_toml_not_in_root_folder(_, tmpdir): + def test_load_pyproject_toml_from_config_argument(_, tmpdir): with tmpdir.as_cwd(): _not_root_path = tmpdir.mkdir("not_in_root").join("pyproject.toml") _not_root_path.write(PYPROJECT) @@ -187,7 +187,7 @@ def test_load_pyproject_toml_not_in_root_folder(_, tmpdir): cfg = config.read_cfg(filepath="./not_in_root/pyproject.toml") assert cfg.settings == _settings - def test_load_cz_json_not_in_root_folder(_, tmpdir): + def test_load_cz_json_not_from_config_argument(_, tmpdir): with tmpdir.as_cwd(): _not_root_path = tmpdir.mkdir("not_in_root").join(".cz.json") _not_root_path.write(JSON_STR) @@ -196,15 +196,23 @@ def test_load_cz_json_not_in_root_folder(_, tmpdir): json_cfg_by_class = config.JsonConfig(data=JSON_STR, path=_not_root_path) assert cfg.settings == json_cfg_by_class.settings - def test_load_cz_yaml_not_in_root_folder(_, tmpdir): + def test_load_cz_yaml_not_from_config_argument(_, tmpdir): with tmpdir.as_cwd(): _not_root_path = tmpdir.mkdir("not_in_root").join(".cz.yaml") _not_root_path.write(YAML_STR) cfg = config.read_cfg(filepath="./not_in_root/.cz.yaml") - yaml_cfg_by_class = config.YAMLConfig(data=JSON_STR, path=_not_root_path) + yaml_cfg_by_class = config.YAMLConfig(data=YAML_STR, path=_not_root_path) assert cfg.settings == yaml_cfg_by_class._settings + def test_load_empty_pyproject_toml_from_config_argument(_, tmpdir): + with tmpdir.as_cwd(): + _not_root_path = tmpdir.mkdir("not_in_root").join("pyproject.toml") + _not_root_path.write("") + + with pytest.raises(ConfigFileIsEmpty): + config.read_cfg(filepath="./not_in_root/pyproject.toml") + class TestTomlConfig: def test_init_empty_config_content(self, tmpdir): From 7c0bc1591103b1f089aab9810fc2a201ccb0552b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Thu, 11 Apr 2024 15:13:46 +0000 Subject: [PATCH 204/685] =?UTF-8?q?bump:=20version=203.21.3=20=E2=86=92=20?= =?UTF-8?q?3.22.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5c9623149e..20b8d08ec6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.21.3 # automatically updated by Commitizen + rev: v3.22.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index a27d8610ec..cf16e6a106 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.22.0 (2024-04-11) + +### Feat + +- **cli**: add config option to specify config file path + ## v3.21.3 (2024-03-30) ### Refactor diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 322a27ea54..659cac322f 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.21.3" +__version__ = "3.22.0" diff --git a/pyproject.toml b/pyproject.toml index 3410a50aba..b6d766ef19 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.21.3" +version = "3.22.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.21.3" +version = "3.22.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From ef19711f544fc65d60711837cb9995d5081ef75c Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Thu, 4 Apr 2024 18:20:18 +0800 Subject: [PATCH 205/685] ci(github-actions): unify yaml style --- .github/workflows/bumpversion.yml | 2 +- .github/workflows/docspublish.yml | 58 +++++++++++++-------------- .github/workflows/homebrewpublish.yml | 38 +++++++++--------- 3 files changed, 49 insertions(+), 49 deletions(-) diff --git a/.github/workflows/bumpversion.yml b/.github/workflows/bumpversion.yml index ed010b4158..ed0c8cffce 100644 --- a/.github/workflows/bumpversion.yml +++ b/.github/workflows/bumpversion.yml @@ -15,7 +15,7 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 - token: '${{ secrets.PERSONAL_ACCESS_TOKEN }}' + token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}" - name: Create bump and changelog uses: commitizen-tools/commitizen-action@master with: diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml index 11f509b5b8..747e509dc3 100644 --- a/.github/workflows/docspublish.yml +++ b/.github/workflows/docspublish.yml @@ -9,32 +9,32 @@ jobs: publish-documentation: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - with: - token: '${{ secrets.PERSONAL_ACCESS_TOKEN }}' - fetch-depth: 0 - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.x' - - name: Install dependencies - run: | - python -m pip install -U mkdocs mkdocs-material - - name: Build docs - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - python -m mkdocs build - - name: Generate Sponsors 💖 - uses: JamesIves/github-sponsors-readme-action@v1 - with: - token: ${{ secrets.PERSONAL_ACCESS_TOKEN_FOR_ORG }} - file: 'docs/README.md' - - name: Push doc to Github Page - uses: peaceiris/actions-gh-pages@v4 - with: - personal_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - publish_branch: gh-pages - publish_dir: ./site - user_name: "github-actions[bot]" - user_email: "github-actions[bot]@users.noreply.github.com" + - uses: actions/checkout@v4 + with: + token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}" + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: Install dependencies + run: | + python -m pip install -U mkdocs mkdocs-material + - name: Build docs + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + python -m mkdocs build + - name: Generate Sponsors 💖 + uses: JamesIves/github-sponsors-readme-action@v1 + with: + token: ${{ secrets.PERSONAL_ACCESS_TOKEN_FOR_ORG }} + file: "docs/README.md" + - name: Push doc to Github Page + uses: peaceiris/actions-gh-pages@v2 + with: + personal_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + publish_branch: gh-pages + publish_dir: ./site + user_name: "github-actions[bot]" + user_email: "github-actions[bot]@users.noreply.github.com" diff --git a/.github/workflows/homebrewpublish.yml b/.github/workflows/homebrewpublish.yml index a2610229bc..84c2ca6ca0 100644 --- a/.github/workflows/homebrewpublish.yml +++ b/.github/workflows/homebrewpublish.yml @@ -11,22 +11,22 @@ jobs: runs-on: macos-latest if: ${{ github.event.workflow_run.conclusion == 'success' }} steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.x' - - name: Install dependencies - run: | - python -m pip install -U commitizen - - name: Set Project version env variable - run: | - echo "project_version=$(cz version --project)" >> $GITHUB_ENV - - name: Update Homebrew formula - uses: dawidd6/action-homebrew-bump-formula@v3 - with: - token: ${{secrets.PERSONAL_ACCESS_TOKEN}} - formula: commitizen - tag: v${{ env.project_version }} - force: true + - name: Checkout + uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: Install dependencies + run: | + python -m pip install -U commitizen + - name: Set Project version env variable + run: | + echo "project_version=$(cz version --project)" >> $GITHUB_ENV + - name: Update Homebrew formula + uses: dawidd6/action-homebrew-bump-formula@v3 + with: + token: ${{secrets.PERSONAL_ACCESS_TOKEN}} + formula: commitizen + tag: v${{ env.project_version }} + force: true From aa658be9ab3bc07ecad7c440dc7fc2056e39675f Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Thu, 4 Apr 2024 18:21:13 +0800 Subject: [PATCH 206/685] ci(github-actions): unpin poetry as #7611 has been closed --- .github/workflows/pythonpackage.yml | 9 ++++----- .github/workflows/pythonpublish.yml | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index f5967f3a93..8ffa398611 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -1,13 +1,13 @@ name: Python package -on: [ workflow_dispatch, pull_request ] +on: [workflow_dispatch, pull_request] jobs: python-check: strategy: matrix: - python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12" ] - platform: [ ubuntu-20.04, macos-latest, windows-latest ] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + platform: [ubuntu-20.04, macos-latest, windows-latest] runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v4 @@ -19,8 +19,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | - # pin poetry to 1.3.2 due to https://github.com/python-poetry/poetry/issues/7611 - python -m pip install -U pip poetry==1.3.2 + python -m pip install -U pip poetry poetry --version poetry install - name: Run tests and linters diff --git a/.github/workflows/pythonpublish.yml b/.github/workflows/pythonpublish.yml index f31691a50b..e3b3aa6f30 100644 --- a/.github/workflows/pythonpublish.yml +++ b/.github/workflows/pythonpublish.yml @@ -3,7 +3,7 @@ name: Upload Python Package on: push: tags: - - 'v*' + - "v*" jobs: deploy: @@ -11,16 +11,15 @@ jobs: steps: - uses: actions/checkout@v4 with: - token: '${{ secrets.PERSONAL_ACCESS_TOKEN }}' + token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}" fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.x' + python-version: "3.x" - name: Install dependencies run: | - # pin poetry to 1.3.2 due to https://github.com/python-poetry/poetry/issues/7611 - python -m pip install -U pip poetry==1.3.2 mkdocs mkdocs-material + python -m pip install -U pip poetry mkdocs mkdocs-material poetry --version poetry install - name: Publish From fb151454f449eb76cd7bb032fb725aa2a268dbc4 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Thu, 4 Apr 2024 18:24:35 +0800 Subject: [PATCH 207/685] ci(scripts): fix ill-formated code when running formatters --- scripts/test | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/test b/scripts/test index e2fa065142..08889af8b0 100755 --- a/scripts/test +++ b/scripts/test @@ -5,7 +5,7 @@ export PREFIX='poetry run python -m ' export REGEX='^(?![.]|venv).*' ${PREFIX}pytest -n 3 --dist=loadfile --cov-report term-missing --cov-report=xml:coverage.xml --cov=commitizen tests/ -${PREFIX}black commitizen tests --check -${PREFIX}ruff commitizen/ tests/ +${PREFIX}black commitizen tests +${PREFIX}ruff check commitizen/ tests/ --fix ${PREFIX}mypy commitizen/ tests/ ${PREFIX}commitizen -nr 3 check --rev-range origin/master.. From a4c19c23d600a6834c2533b6131d05999782630d Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Thu, 4 Apr 2024 18:25:25 +0800 Subject: [PATCH 208/685] ci(github-actions): replace "./scripts/test" with pre-commit for unifying the checking process --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 8ffa398611..7d5f20577a 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -26,7 +26,7 @@ jobs: run: | git config --global user.email "action@github.com" git config --global user.name "GitHub Action" - ./scripts/test + poetry run pre-commit run --all-files shell: bash - name: Upload coverage to Codecov if: runner.os == 'Linux' From 18b471ad6d03d53b603ccf4ede645fa858b5200a Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sat, 6 Apr 2024 19:11:17 +0800 Subject: [PATCH 209/685] ci(github-actions): skip no-commit-to-branch in CI which causes false negative when bumping version --- .github/workflows/pythonpackage.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 7d5f20577a..3b5d5305a3 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -26,13 +26,13 @@ jobs: run: | git config --global user.email "action@github.com" git config --global user.name "GitHub Action" - poetry run pre-commit run --all-files + SKIP=no-commit-to-branch,commitizen-branch poetry run pre-commit run --all-files --hook-stage pre-push shell: bash - name: Upload coverage to Codecov if: runner.os == 'Linux' uses: codecov/codecov-action@v4 with: - token: ${{secrets.CODECOV_TOKEN}} + token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage.xml flags: unittests name: codecov-umbrella From bf98a9ba5571a35412f78990931b46ef10368a14 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 01:38:29 +0000 Subject: [PATCH 210/685] build(deps-dev): bump ruff from 0.3.5 to 0.3.6 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.3.5 to 0.3.6. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.3.5...v0.3.6) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4cc8f16674..6c6c26d030 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1461,28 +1461,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.3.5" +version = "0.3.6" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.3.5-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:aef5bd3b89e657007e1be6b16553c8813b221ff6d92c7526b7e0227450981eac"}, - {file = "ruff-0.3.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:89b1e92b3bd9fca249153a97d23f29bed3992cff414b222fcd361d763fc53f12"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e55771559c89272c3ebab23326dc23e7f813e492052391fe7950c1a5a139d89"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dabc62195bf54b8a7876add6e789caae0268f34582333cda340497c886111c39"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a05f3793ba25f194f395578579c546ca5d83e0195f992edc32e5907d142bfa3"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:dfd3504e881082959b4160ab02f7a205f0fadc0a9619cc481982b6837b2fd4c0"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87258e0d4b04046cf1d6cc1c56fadbf7a880cc3de1f7294938e923234cf9e498"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:712e71283fc7d9f95047ed5f793bc019b0b0a29849b14664a60fd66c23b96da1"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a532a90b4a18d3f722c124c513ffb5e5eaff0cc4f6d3aa4bda38e691b8600c9f"}, - {file = "ruff-0.3.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:122de171a147c76ada00f76df533b54676f6e321e61bd8656ae54be326c10296"}, - {file = "ruff-0.3.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d80a6b18a6c3b6ed25b71b05eba183f37d9bc8b16ace9e3d700997f00b74660b"}, - {file = "ruff-0.3.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a7b6e63194c68bca8e71f81de30cfa6f58ff70393cf45aab4c20f158227d5936"}, - {file = "ruff-0.3.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a759d33a20c72f2dfa54dae6e85e1225b8e302e8ac655773aff22e542a300985"}, - {file = "ruff-0.3.5-py3-none-win32.whl", hash = "sha256:9d8605aa990045517c911726d21293ef4baa64f87265896e491a05461cae078d"}, - {file = "ruff-0.3.5-py3-none-win_amd64.whl", hash = "sha256:dc56bb16a63c1303bd47563c60482a1512721053d93231cf7e9e1c6954395a0e"}, - {file = "ruff-0.3.5-py3-none-win_arm64.whl", hash = "sha256:faeeae9905446b975dcf6d4499dc93439b131f1443ee264055c5716dd947af55"}, - {file = "ruff-0.3.5.tar.gz", hash = "sha256:a067daaeb1dc2baf9b82a32dae67d154d95212080c80435eb052d95da647763d"}, + {file = "ruff-0.3.6-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:732ef99984275534f9466fbc01121523caf72aa8c2bdeb36fd2edf2bc294a992"}, + {file = "ruff-0.3.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:93699d61116807edc5ca1cdf9d2d22cf8d93335d59e3ff0ca7aee62c1818a736"}, + {file = "ruff-0.3.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc4006cbc6c11fefc25f122d2eb4731d7a3d815dc74d67c54991cc3f99c90177"}, + {file = "ruff-0.3.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:878ef1a55ce931f3ca23b690b159cd0659f495a4c231a847b00ca55e4c688baf"}, + {file = "ruff-0.3.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ecb87788284af96725643eae9ab3ac746d8cc09aad140268523b019f7ac3cd98"}, + {file = "ruff-0.3.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b2e79f8e1b6bd5411d7ddad3f2abff3f9d371beda29daef86400d416dedb7e02"}, + {file = "ruff-0.3.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf48ec2c4bfae7837dc325c431a2932dc23a1485e71c59591c1df471ba234e0e"}, + {file = "ruff-0.3.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c466a52c522e6a08df0af018f550902f154f5649ad09e7f0d43da766e7399ebc"}, + {file = "ruff-0.3.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28ccf3fb6d1162a73cd286c63a5e4d885f46a1f99f0b392924bc95ccbd18ea8f"}, + {file = "ruff-0.3.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b11e09439d9df6cc12d9f622065834654417c40216d271f639512d80e80e3e53"}, + {file = "ruff-0.3.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:647f1fb5128a3e24ce68878b8050bb55044c45bb3f3ae4710d4da9ca96ede5cb"}, + {file = "ruff-0.3.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2b0c4c70578ef1871a9ac5c85ed7a8c33470e976c73ba9211a111d2771b5f787"}, + {file = "ruff-0.3.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e3da499ded004d0b956ab04248b2ae17e54a67ffc81353514ac583af5959a255"}, + {file = "ruff-0.3.6-py3-none-win32.whl", hash = "sha256:4056480f5cf38ad278667c31b0ef334c29acdfcea617cb89c4ccbc7d96f1637f"}, + {file = "ruff-0.3.6-py3-none-win_amd64.whl", hash = "sha256:f1aa621beed533f46e9c7d6fe00e7f6e4570155b61d8f020387b72ace2b42e04"}, + {file = "ruff-0.3.6-py3-none-win_arm64.whl", hash = "sha256:7c8a2a0e0cab077a07465259ffe3b3c090e747ca8097c5dc4c36ca0fdaaac90d"}, + {file = "ruff-0.3.6.tar.gz", hash = "sha256:26071fb530038602b984e3bbe1443ef82a38450c4dcb1344a9caf67234ff9756"}, ] [[package]] From afb9d3ec2fff860b79a99597297b1b92fd22b702 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 12 Apr 2024 10:26:15 +0800 Subject: [PATCH 211/685] ci(github-actions): update peaceiris/actions-gh-pages to v4 --- .github/workflows/docspublish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml index 747e509dc3..d95b464b40 100644 --- a/.github/workflows/docspublish.yml +++ b/.github/workflows/docspublish.yml @@ -31,7 +31,7 @@ jobs: token: ${{ secrets.PERSONAL_ACCESS_TOKEN_FOR_ORG }} file: "docs/README.md" - name: Push doc to Github Page - uses: peaceiris/actions-gh-pages@v2 + uses: peaceiris/actions-gh-pages@v4 with: personal_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} publish_branch: gh-pages From 46c5a5cac4da36aa81d1e2e8e6c5d5262aa600eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 01:59:09 +0000 Subject: [PATCH 212/685] build(deps-dev): bump idna from 3.6 to 3.7 Bumps [idna](https://github.com/kjd/idna) from 3.6 to 3.7. - [Release notes](https://github.com/kjd/idna/releases) - [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.rst) - [Commits](https://github.com/kjd/idna/compare/v3.6...v3.7) --- updated-dependencies: - dependency-name: idna dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6c6c26d030..04b72c0aec 100644 --- a/poetry.lock +++ b/poetry.lock @@ -485,13 +485,13 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] From 8e36212d24610b9a5520183a4c2a0b87d8c82141 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Apr 2024 01:52:19 +0000 Subject: [PATCH 213/685] build(deps): bump argcomplete from 3.2.3 to 3.3.0 Bumps [argcomplete](https://github.com/kislyuk/argcomplete) from 3.2.3 to 3.3.0. - [Release notes](https://github.com/kislyuk/argcomplete/releases) - [Changelog](https://github.com/kislyuk/argcomplete/blob/develop/Changes.rst) - [Commits](https://github.com/kislyuk/argcomplete/compare/v3.2.3...v3.3.0) --- updated-dependencies: - dependency-name: argcomplete dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 04b72c0aec..d43c069db1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "argcomplete" -version = "3.2.3" +version = "3.3.0" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.2.3-py3-none-any.whl", hash = "sha256:c12355e0494c76a2a7b73e3a59b09024ca0ba1e279fb9ed6c1b82d5b74b6a70c"}, - {file = "argcomplete-3.2.3.tar.gz", hash = "sha256:bf7900329262e481be5a15f56f19736b376df6f82ed27576fa893652c5de6c23"}, + {file = "argcomplete-3.3.0-py3-none-any.whl", hash = "sha256:c168c3723482c031df3c207d4ba8fa702717ccb9fc0bfe4117166c1f537b4a54"}, + {file = "argcomplete-3.3.0.tar.gz", hash = "sha256:fd03ff4a5b9e6580569d34b273f741e85cd9e072f3feeeee3eba4891c70eda62"}, ] [package.extras] @@ -1820,4 +1820,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "5cd809db4e9dc8005ab2295ca7d182435021752953a7b1552bb81912b54df791" +content-hash = "abe023abef8eaadaffaa2b8725bc1958b6597cc8e07f0899cf751d5ce28cab82" diff --git a/pyproject.toml b/pyproject.toml index b6d766ef19..2014e323ba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,7 +43,7 @@ packaging = ">=19" tomlkit = ">=0.5.3,<1.0.0" jinja2 = ">=2.10.3" pyyaml = ">=3.08" -argcomplete = ">=1.12.1,<3.3" +argcomplete = ">=1.12.1,<3.4" typing-extensions = { version = "^4.0.1", python = "<3.8" } charset-normalizer = ">=2.1.0,<4" # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility From e7a7c92b136c13f7bd97eb827004240802131e47 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Apr 2024 08:26:27 +0000 Subject: [PATCH 214/685] build(deps-dev): bump black from 24.3.0 to 24.4.0 Bumps [black](https://github.com/psf/black) from 24.3.0 to 24.4.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/24.3.0...24.4.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/poetry.lock b/poetry.lock index d43c069db1..0e13e63fa2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -73,33 +73,33 @@ files = [ [[package]] name = "black" -version = "24.3.0" +version = "24.4.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-24.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395"}, - {file = "black-24.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995"}, - {file = "black-24.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7"}, - {file = "black-24.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0"}, - {file = "black-24.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9"}, - {file = "black-24.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597"}, - {file = "black-24.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d"}, - {file = "black-24.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5"}, - {file = "black-24.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f"}, - {file = "black-24.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11"}, - {file = "black-24.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4"}, - {file = "black-24.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5"}, - {file = "black-24.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837"}, - {file = "black-24.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd"}, - {file = "black-24.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213"}, - {file = "black-24.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959"}, - {file = "black-24.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb"}, - {file = "black-24.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7"}, - {file = "black-24.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7"}, - {file = "black-24.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f"}, - {file = "black-24.3.0-py3-none-any.whl", hash = "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93"}, - {file = "black-24.3.0.tar.gz", hash = "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f"}, + {file = "black-24.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6ad001a9ddd9b8dfd1b434d566be39b1cd502802c8d38bbb1ba612afda2ef436"}, + {file = "black-24.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3a3a092b8b756c643fe45f4624dbd5a389f770a4ac294cf4d0fce6af86addaf"}, + {file = "black-24.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dae79397f367ac8d7adb6c779813328f6d690943f64b32983e896bcccd18cbad"}, + {file = "black-24.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:71d998b73c957444fb7c52096c3843875f4b6b47a54972598741fe9a7f737fcb"}, + {file = "black-24.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8e5537f456a22cf5cfcb2707803431d2feeb82ab3748ade280d6ccd0b40ed2e8"}, + {file = "black-24.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64e60a7edd71fd542a10a9643bf369bfd2644de95ec71e86790b063aa02ff745"}, + {file = "black-24.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cd5b4f76056cecce3e69b0d4c228326d2595f506797f40b9233424e2524c070"}, + {file = "black-24.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:64578cf99b6b46a6301bc28bdb89f9d6f9b592b1c5837818a177c98525dbe397"}, + {file = "black-24.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f95cece33329dc4aa3b0e1a771c41075812e46cf3d6e3f1dfe3d91ff09826ed2"}, + {file = "black-24.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4396ca365a4310beef84d446ca5016f671b10f07abdba3e4e4304218d2c71d33"}, + {file = "black-24.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d99dfdf37a2a00a6f7a8dcbd19edf361d056ee51093b2445de7ca09adac965"}, + {file = "black-24.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:21f9407063ec71c5580b8ad975653c66508d6a9f57bd008bb8691d273705adcd"}, + {file = "black-24.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:652e55bb722ca026299eb74e53880ee2315b181dfdd44dca98e43448620ddec1"}, + {file = "black-24.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f2966b9b2b3b7104fca9d75b2ee856fe3fdd7ed9e47c753a4bb1a675f2caab8"}, + {file = "black-24.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bb9ca06e556a09f7f7177bc7cb604e5ed2d2df1e9119e4f7d2f1f7071c32e5d"}, + {file = "black-24.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4e71cdebdc8efeb6deaf5f2deb28325f8614d48426bed118ecc2dcaefb9ebf3"}, + {file = "black-24.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6644f97a7ef6f401a150cca551a1ff97e03c25d8519ee0bbc9b0058772882665"}, + {file = "black-24.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:75a2d0b4f5eb81f7eebc31f788f9830a6ce10a68c91fbe0fade34fff7a2836e6"}, + {file = "black-24.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb949f56a63c5e134dfdca12091e98ffb5fd446293ebae123d10fc1abad00b9e"}, + {file = "black-24.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:7852b05d02b5b9a8c893ab95863ef8986e4dda29af80bbbda94d7aee1abf8702"}, + {file = "black-24.4.0-py3-none-any.whl", hash = "sha256:74eb9b5420e26b42c00a3ff470dc0cd144b80a766128b1771d07643165e08d0e"}, + {file = "black-24.4.0.tar.gz", hash = "sha256:f07b69fda20578367eaebbd670ff8fc653ab181e1ff95d84497f9fa20e7d0641"}, ] [package.dependencies] From a0aee07f67e706a8cff90b591135eb0fe0793ca4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Apr 2024 08:48:36 +0000 Subject: [PATCH 215/685] build(deps-dev): bump ruff from 0.3.6 to 0.3.7 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.3.6 to 0.3.7. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.3.6...v0.3.7) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0e13e63fa2..33419080b8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1461,28 +1461,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.3.6" +version = "0.3.7" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.3.6-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:732ef99984275534f9466fbc01121523caf72aa8c2bdeb36fd2edf2bc294a992"}, - {file = "ruff-0.3.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:93699d61116807edc5ca1cdf9d2d22cf8d93335d59e3ff0ca7aee62c1818a736"}, - {file = "ruff-0.3.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc4006cbc6c11fefc25f122d2eb4731d7a3d815dc74d67c54991cc3f99c90177"}, - {file = "ruff-0.3.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:878ef1a55ce931f3ca23b690b159cd0659f495a4c231a847b00ca55e4c688baf"}, - {file = "ruff-0.3.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ecb87788284af96725643eae9ab3ac746d8cc09aad140268523b019f7ac3cd98"}, - {file = "ruff-0.3.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b2e79f8e1b6bd5411d7ddad3f2abff3f9d371beda29daef86400d416dedb7e02"}, - {file = "ruff-0.3.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf48ec2c4bfae7837dc325c431a2932dc23a1485e71c59591c1df471ba234e0e"}, - {file = "ruff-0.3.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c466a52c522e6a08df0af018f550902f154f5649ad09e7f0d43da766e7399ebc"}, - {file = "ruff-0.3.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28ccf3fb6d1162a73cd286c63a5e4d885f46a1f99f0b392924bc95ccbd18ea8f"}, - {file = "ruff-0.3.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b11e09439d9df6cc12d9f622065834654417c40216d271f639512d80e80e3e53"}, - {file = "ruff-0.3.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:647f1fb5128a3e24ce68878b8050bb55044c45bb3f3ae4710d4da9ca96ede5cb"}, - {file = "ruff-0.3.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2b0c4c70578ef1871a9ac5c85ed7a8c33470e976c73ba9211a111d2771b5f787"}, - {file = "ruff-0.3.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e3da499ded004d0b956ab04248b2ae17e54a67ffc81353514ac583af5959a255"}, - {file = "ruff-0.3.6-py3-none-win32.whl", hash = "sha256:4056480f5cf38ad278667c31b0ef334c29acdfcea617cb89c4ccbc7d96f1637f"}, - {file = "ruff-0.3.6-py3-none-win_amd64.whl", hash = "sha256:f1aa621beed533f46e9c7d6fe00e7f6e4570155b61d8f020387b72ace2b42e04"}, - {file = "ruff-0.3.6-py3-none-win_arm64.whl", hash = "sha256:7c8a2a0e0cab077a07465259ffe3b3c090e747ca8097c5dc4c36ca0fdaaac90d"}, - {file = "ruff-0.3.6.tar.gz", hash = "sha256:26071fb530038602b984e3bbe1443ef82a38450c4dcb1344a9caf67234ff9756"}, + {file = "ruff-0.3.7-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0e8377cccb2f07abd25e84fc5b2cbe48eeb0fea9f1719cad7caedb061d70e5ce"}, + {file = "ruff-0.3.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:15a4d1cc1e64e556fa0d67bfd388fed416b7f3b26d5d1c3e7d192c897e39ba4b"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d28bdf3d7dc71dd46929fafeec98ba89b7c3550c3f0978e36389b5631b793663"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:379b67d4f49774ba679593b232dcd90d9e10f04d96e3c8ce4a28037ae473f7bb"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c060aea8ad5ef21cdfbbe05475ab5104ce7827b639a78dd55383a6e9895b7c51"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:ebf8f615dde968272d70502c083ebf963b6781aacd3079081e03b32adfe4d58a"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d48098bd8f5c38897b03604f5428901b65e3c97d40b3952e38637b5404b739a2"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da8a4fda219bf9024692b1bc68c9cff4b80507879ada8769dc7e985755d662ea"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c44e0149f1d8b48c4d5c33d88c677a4aa22fd09b1683d6a7ff55b816b5d074f"}, + {file = "ruff-0.3.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3050ec0af72b709a62ecc2aca941b9cd479a7bf2b36cc4562f0033d688e44fa1"}, + {file = "ruff-0.3.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a29cc38e4c1ab00da18a3f6777f8b50099d73326981bb7d182e54a9a21bb4ff7"}, + {file = "ruff-0.3.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5b15cc59c19edca917f51b1956637db47e200b0fc5e6e1878233d3a938384b0b"}, + {file = "ruff-0.3.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e491045781b1e38b72c91247cf4634f040f8d0cb3e6d3d64d38dcf43616650b4"}, + {file = "ruff-0.3.7-py3-none-win32.whl", hash = "sha256:bc931de87593d64fad3a22e201e55ad76271f1d5bfc44e1a1887edd0903c7d9f"}, + {file = "ruff-0.3.7-py3-none-win_amd64.whl", hash = "sha256:5ef0e501e1e39f35e03c2acb1d1238c595b8bb36cf7a170e7c1df1b73da00e74"}, + {file = "ruff-0.3.7-py3-none-win_arm64.whl", hash = "sha256:789e144f6dc7019d1f92a812891c645274ed08af6037d11fc65fcbc183b7d59f"}, + {file = "ruff-0.3.7.tar.gz", hash = "sha256:d5c1aebee5162c2226784800ae031f660c350e7a3402c4d1f8ea4e97e232e3ba"}, ] [[package]] From 3015a76bff07980993f543bd3fc6920edfa58278 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 01:22:52 +0000 Subject: [PATCH 216/685] build(deps-dev): bump mkdocs-material from 9.5.17 to 9.5.18 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.17 to 9.5.18. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.17...9.5.18) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 33419080b8..4479975b01 100644 --- a/poetry.lock +++ b/poetry.lock @@ -779,13 +779,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.17" +version = "9.5.18" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.17-py3-none-any.whl", hash = "sha256:14a2a60119a785e70e765dd033e6211367aca9fc70230e577c1cf6a326949571"}, - {file = "mkdocs_material-9.5.17.tar.gz", hash = "sha256:06ae1275a72db1989cf6209de9e9ecdfbcfdbc24c58353877b2bb927dbe413e4"}, + {file = "mkdocs_material-9.5.18-py3-none-any.whl", hash = "sha256:1e0e27fc9fe239f9064318acf548771a4629d5fd5dfd45444fd80a953fe21eb4"}, + {file = "mkdocs_material-9.5.18.tar.gz", hash = "sha256:a43f470947053fa2405c33995f282d24992c752a50114f23f30da9d8d0c57e62"}, ] [package.dependencies] From 62c5cf2cd94730179096202da0cc297aa631dc73 Mon Sep 17 00:00:00 2001 From: Axel H <noirbizarre@users.noreply.github.com> Date: Thu, 18 Apr 2024 11:51:46 +0200 Subject: [PATCH 217/685] feat(bump): `version_files` now support glob patterns (fix #1067) (#1070) --- commitizen/bump.py | 39 +++++++---- commitizen/commands/bump.py | 65 +++++++------------ commitizen/commands/changelog.py | 6 +- commitizen/git.py | 4 +- docs/bump.md | 4 ++ tests/commands/test_bump_command.py | 10 +++ tests/test_bump_update_version_in_files.py | 18 +++++ .../test_update_version_in_globbed_files.toml | 3 + 8 files changed, 92 insertions(+), 57 deletions(-) create mode 100644 tests/test_bump_update_version_in_files/test_update_version_in_globbed_files.toml diff --git a/commitizen/bump.py b/commitizen/bump.py index f0e45e3432..2351dbd7ec 100644 --- a/commitizen/bump.py +++ b/commitizen/bump.py @@ -3,6 +3,7 @@ import os import re from collections import OrderedDict +from glob import iglob from string import Template from typing import cast @@ -53,23 +54,20 @@ def update_version_in_files( *, check_consistency: bool = False, encoding: str = encoding, -) -> None: +) -> list[str]: """Change old version to the new one in every file given. Note that this version is not the tag formatted one. So for example, your tag could look like `v1.0.0` while your version in the package like `1.0.0`. + + Returns the list of updated files. """ # TODO: separate check step and write step - for location in files: - drive, tail = os.path.splitdrive(location) - path, _, regex = tail.partition(":") - filepath = drive + path - if not regex: - regex = _version_to_regex(current_version) - + updated = [] + for path, regex in files_and_regexs(files, current_version): current_version_found, version_file = _bump_with_regex( - filepath, + path, current_version, new_version, regex, @@ -78,14 +76,33 @@ def update_version_in_files( if check_consistency and not current_version_found: raise CurrentVersionNotFoundError( - f"Current version {current_version} is not found in {location}.\n" + f"Current version {current_version} is not found in {path}.\n" "The version defined in commitizen configuration and the ones in " "version_files are possibly inconsistent." ) # Write the file out again - with smart_open(filepath, "w", encoding=encoding) as file: + with smart_open(path, "w", encoding=encoding) as file: file.write(version_file) + updated.append(path) + return updated + + +def files_and_regexs(patterns: list[str], version: str) -> list[tuple[str, str]]: + """ + Resolve all distinct files with their regexp from a list of glob patterns with optional regexp + """ + out = [] + for pattern in patterns: + drive, tail = os.path.splitdrive(pattern) + path, _, regex = tail.partition(":") + filepath = drive + path + if not regex: + regex = _version_to_regex(version) + + for path in iglob(filepath): + out.append((path, regex)) + return sorted(list(set(out))) def _bump_with_regex( diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index efbe1e0c3c..554e3c800b 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -1,12 +1,11 @@ from __future__ import annotations -import os import warnings from logging import getLogger import questionary -from commitizen import bump, cmd, factory, git, hooks, out +from commitizen import bump, factory, git, hooks, out from commitizen.commands.changelog import Changelog from commitizen.config import BaseConfig from commitizen.exceptions import ( @@ -286,56 +285,39 @@ def __call__(self) -> None: # noqa: C901 "The commits found are not eligible to be bumped" ) + files: list[str] = [] if self.changelog: + args = { + "unreleased_version": new_tag_version, + "template": self.template, + "extras": self.extras, + "incremental": True, + "dry_run": dry_run, + } if self.changelog_to_stdout: - changelog_cmd = Changelog( - self.config, - { - "unreleased_version": new_tag_version, - "template": self.template, - "extras": self.extras, - "incremental": True, - "dry_run": True, - }, - ) + changelog_cmd = Changelog(self.config, {**args, "dry_run": True}) try: changelog_cmd() except DryRunExit: pass - changelog_cmd = Changelog( - self.config, - { - "unreleased_version": new_tag_version, - "incremental": True, - "dry_run": dry_run, - "template": self.template, - "extras": self.extras, - "file_name": self.file_name, - }, - ) + + args["file_name"] = self.file_name + changelog_cmd = Changelog(self.config, args) changelog_cmd() - file_names = [] - for file_name in version_files: - drive, tail = os.path.splitdrive(file_name) - path, _, regex = tail.partition(":") - path = drive + path if path != "" else drive + regex - file_names.append(path) - git_add_changelog_and_version_files_command = ( - f"git add {changelog_cmd.file_name} " - f"{' '.join(name for name in file_names)}" - ) - c = cmd.run(git_add_changelog_and_version_files_command) + files.append(changelog_cmd.file_name) # Do not perform operations over files or git. if dry_run: raise DryRunExit() - bump.update_version_in_files( - str(current_version), - str(new_version), - version_files, - check_consistency=self.check_consistency, - encoding=self.encoding, + files.extend( + bump.update_version_in_files( + str(current_version), + str(new_version), + version_files, + check_consistency=self.check_consistency, + encoding=self.encoding, + ) ) provider.set_version(str(new_version)) @@ -358,12 +340,13 @@ def __call__(self) -> None: # noqa: C901 raise ExpectedExit() # FIXME: check if any changes have been staged + git.add(*files) c = git.commit(message, args=self._get_commit_args()) if self.retry and c.return_code != 0 and self.changelog: # Maybe pre-commit reformatted some files? Retry once logger.debug("1st git.commit error: %s", c.err) logger.info("1st commit attempt failed; retrying once") - cmd.run(git_add_changelog_and_version_files_command) + git.add(*files) c = git.commit(message, args=self._get_commit_args()) if c.return_code != 0: err = c.err.strip() or c.out diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 3fc204eba9..f1b69598f1 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -4,7 +4,7 @@ from difflib import SequenceMatcher from operator import itemgetter from pathlib import Path -from typing import Callable +from typing import Callable, cast from commitizen import bump, changelog, defaults, factory, git, out @@ -38,8 +38,8 @@ def __init__(self, config: BaseConfig, args): self.start_rev = args.get("start_rev") or self.config.settings.get( "changelog_start_rev" ) - self.file_name = args.get("file_name") or self.config.settings.get( - "changelog_file" + self.file_name = args.get("file_name") or cast( + str, self.config.settings.get("changelog_file") ) if not isinstance(self.file_name, str): raise NotAllowed( diff --git a/commitizen/git.py b/commitizen/git.py index 53e7335a3f..1f758889ed 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -98,8 +98,8 @@ def tag( return c -def add(args: str = "") -> cmd.Command: - c = cmd.run(f"git add {args}") +def add(*args: str) -> cmd.Command: + c = cmd.run(f"git add {' '.join(args)}") return c diff --git a/docs/bump.md b/docs/bump.md index 0e35083b0a..05843eeab5 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -474,6 +474,10 @@ In the example above, we can see the reference `"setup.py:version"`. This means that it will find a file `setup.py` and will only make a change in a line containing the `version` substring. +!!! note + Files can be specified using relative (to the execution) paths, absolute paths + or glob patterns. + --- ### `bump_message` diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 6cf8a8d00c..84faf9ee82 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -812,6 +812,16 @@ def test_bump_with_git_to_stdout_arg(mocker: MockFixture, capsys, changelog_path """, id="version in __init__.py with regex", ), + pytest.param( + "pyproject.toml", + "*.toml:^version", + """ +[tool.poetry] +name = "my_package" +version = "0.1.0" +""", + id="version in pyproject.toml with glob and regex", + ), ], ) @pytest.mark.parametrize( diff --git a/tests/test_bump_update_version_in_files.py b/tests/test_bump_update_version_in_files.py index 9a80d4cfd9..850b59c166 100644 --- a/tests/test_bump_update_version_in_files.py +++ b/tests/test_bump_update_version_in_files.py @@ -207,3 +207,21 @@ def test_multiplt_versions_to_bump( bump.update_version_in_files(old_version, new_version, [location], encoding="utf-8") with open(multiple_versions_to_update_poetry_lock, encoding="utf-8") as f: file_regression.check(f.read(), extension=".toml") + + +def test_update_version_in_globbed_files(commitizen_config_file, file_regression): + old_version = "1.2.3" + new_version = "2.0.0" + other = commitizen_config_file.dirpath("other.toml") + print(commitizen_config_file, other) + copyfile(commitizen_config_file, other) + + # Prepend full ppath as test assume absolute paths or cwd-relative + version_files = [commitizen_config_file.dirpath("*.toml")] + + bump.update_version_in_files( + old_version, new_version, version_files, encoding="utf-8" + ) + + for file in commitizen_config_file, other: + file_regression.check(file.read_text("utf-8"), extension=".toml") diff --git a/tests/test_bump_update_version_in_files/test_update_version_in_globbed_files.toml b/tests/test_bump_update_version_in_files/test_update_version_in_globbed_files.toml new file mode 100644 index 0000000000..bf82cfe859 --- /dev/null +++ b/tests/test_bump_update_version_in_files/test_update_version_in_globbed_files.toml @@ -0,0 +1,3 @@ +[tool.poetry] +name = "commitizen" +version = "2.0.0" From aad06020fa43255c239342d84d2d6dc7f0a44f42 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 09:52:10 +0000 Subject: [PATCH 218/685] =?UTF-8?q?bump:=20version=203.22.0=20=E2=86=92=20?= =?UTF-8?q?3.23.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 20b8d08ec6..b232a86c72 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.22.0 # automatically updated by Commitizen + rev: v3.23.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index cf16e6a106..41db572536 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.23.0 (2024-04-18) + +### Feat + +- **bump**: `version_files` now support glob patterns (fix #1067) (#1070) + ## v3.22.0 (2024-04-11) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 659cac322f..dbea1a3912 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.22.0" +__version__ = "3.23.0" diff --git a/pyproject.toml b/pyproject.toml index 2014e323ba..66a73a310d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.22.0" +version = "3.23.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.22.0" +version = "3.23.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 2ad26e08e471ddb4943c6d84d1fc5c2e7327a8b3 Mon Sep 17 00:00:00 2001 From: Axel H <noirbizarre@users.noreply.github.com> Date: Thu, 18 Apr 2024 12:14:09 +0200 Subject: [PATCH 219/685] feat(schemes): adds support for SemVer 2.0 (dot in pre-releases) (fix #1025) (#1072) --- commitizen/version_schemes.py | 61 +++++++- docs/bump.md | 20 +-- docs/config.md | 3 +- pyproject.toml | 1 + tests/test_version_scheme_semver2.py | 211 +++++++++++++++++++++++++++ 5 files changed, 281 insertions(+), 15 deletions(-) create mode 100644 tests/test_version_scheme_semver2.py diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index ec04fde1e7..596aa94b2e 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -310,7 +310,7 @@ class SemVer(BaseVersion): """ Semantic Versioning (SemVer) scheme - See: https://semver.org/ + See: https://semver.org/spec/v1.0.0.html """ def __str__(self) -> str: @@ -324,9 +324,8 @@ def __str__(self) -> str: parts.append(".".join(str(x) for x in self.release)) # Pre-release - if self.pre: - pre = "".join(str(x) for x in self.pre) - parts.append(f"-{pre}") + if self.prerelease: + parts.append(f"-{self.prerelease}") # Post-release if self.post is not None: @@ -343,6 +342,60 @@ def __str__(self) -> str: return "".join(parts) +class SemVer2(SemVer): + """ + Semantic Versioning 2.0 (SemVer2) schema + + See: https://semver.org/spec/v2.0.0.html + """ + + _STD_PRELEASES = { + "a": "alpha", + "b": "beta", + } + + @property + def prerelease(self) -> str | None: + if self.is_prerelease and self.pre: + prerelease_type = self._STD_PRELEASES.get(self.pre[0], self.pre[0]) + return f"{prerelease_type}.{self.pre[1]}" + return None + + def __str__(self) -> str: + parts = [] + + # Epoch + if self.epoch != 0: + parts.append(f"{self.epoch}!") + + # Release segment + parts.append(".".join(str(x) for x in self.release)) + + # Pre-release identifiers + # See: https://semver.org/spec/v2.0.0.html#spec-item-9 + prerelease_parts = [] + if self.prerelease: + prerelease_parts.append(f"{self.prerelease}") + + # Post-release + if self.post is not None: + prerelease_parts.append(f"post.{self.post}") + + # Development release + if self.dev is not None: + prerelease_parts.append(f"dev.{self.dev}") + + if prerelease_parts: + parts.append("-") + parts.append(".".join(prerelease_parts)) + + # Local version segment + if self.local: + parts.append(f"+{self.local}") + + return "".join(parts) + + DEFAULT_SCHEME: VersionScheme = Pep440 SCHEMES_ENTRYPOINT = "commitizen.scheme" diff --git a/docs/bump.md b/docs/bump.md index 05843eeab5..6dad38219e 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -55,7 +55,7 @@ $ cz bump --help usage: cz bump [-h] [--dry-run] [--files-only] [--local-version] [--changelog] [--no-verify] [--yes] [--tag-format TAG_FORMAT] [--bump-message BUMP_MESSAGE] [--prerelease {alpha,beta,rc}] [--devrelease DEVRELEASE] [--increment {MAJOR,MINOR,PATCH}] [--check-consistency] [--annotated-tag] [--gpg-sign] [--changelog-to-stdout] [--git-output-to-stderr] [--retry] [--major-version-zero] - [--prerelease-offset PRERELEASE_OFFSET] [--version-scheme {semver,pep440}] [--version-type {semver,pep440}] [--build-metadata BUILD_METADATA] + [--prerelease-offset PRERELEASE_OFFSET] [--version-scheme {pep440,semver,semver2}] [--version-type {pep440,semver,semver2}] [--build-metadata BUILD_METADATA] [MANUAL_VERSION] positional arguments: @@ -97,9 +97,9 @@ options: --major-version-zero keep major version at zero, even for breaking changes --prerelease-offset PRERELEASE_OFFSET start pre-releases with this offset - --version-scheme {semver,pep440} + --version-scheme {pep440,semver,semver2} choose version scheme - --version-type {semver,pep440} + --version-type {pep440,semver,semver2} Deprecated, use --version-scheme --build-metadata {BUILD_METADATA} additional metadata in the version string @@ -619,14 +619,14 @@ prerelease_offset = 1 Choose version scheme -| schemes | pep440 | semver | -| -------------- | -------------- | --------------- | -| non-prerelease | `0.1.0` | `0.1.0` | -| prerelease | `0.3.1a0` | `0.3.1-a0` | -| devrelease | `0.1.1.dev1` | `0.1.1-dev1` | -| dev and pre | `1.0.0a3.dev1` | `1.0.0-a3-dev1` | +| schemes | pep440 | semver | semver2 | +| -------------- | -------------- | --------------- | --------------------- | +| non-prerelease | `0.1.0` | `0.1.0` | `0.1.0` | +| prerelease | `0.3.1a0` | `0.3.1-a0` | `0.3.1-alpha.0` | +| devrelease | `0.1.1.dev1` | `0.1.1-dev1` | `0.1.1-dev.1` | +| dev and pre | `1.0.0a3.dev1` | `1.0.0-a3-dev1` | `1.0.0-alpha.3.dev.1` | -Options: `semver`, `pep440` +Options: `pep440`, `semver`, `semver2` Defaults to: `pep440` diff --git a/docs/config.md b/docs/config.md index d6ab12abcd..7ef8644fa2 100644 --- a/docs/config.md +++ b/docs/config.md @@ -40,7 +40,8 @@ Type: `str` Default: `pep440` -Select a version scheme from the following options [`pep440`, `semver`]. Useful for non-python projects. [Read more][version-scheme] +Select a version scheme from the following options [`pep440`, `semver`, `semver2`]. +Useful for non-python projects. [Read more][version-scheme] ### `tag_format` diff --git a/pyproject.toml b/pyproject.toml index 66a73a310d..96f630e869 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -103,6 +103,7 @@ scm = "commitizen.providers:ScmProvider" [tool.poetry.plugins."commitizen.scheme"] pep440 = "commitizen.version_schemes:Pep440" semver = "commitizen.version_schemes:SemVer" +semver2 = "commitizen.version_schemes:SemVer2" [tool.coverage] [tool.coverage.report] diff --git a/tests/test_version_scheme_semver2.py b/tests/test_version_scheme_semver2.py new file mode 100644 index 0000000000..d18a058a7c --- /dev/null +++ b/tests/test_version_scheme_semver2.py @@ -0,0 +1,211 @@ +import itertools +import random + +import pytest + +from commitizen.version_schemes import SemVer2, VersionProtocol + +simple_flow = [ + (("0.1.0", "PATCH", None, 0, None), "0.1.1"), + (("0.1.0", "PATCH", None, 0, 1), "0.1.1-dev.1"), + (("0.1.1", "MINOR", None, 0, None), "0.2.0"), + (("0.2.0", "MINOR", None, 0, None), "0.3.0"), + (("0.2.0", "MINOR", None, 0, 1), "0.3.0-dev.1"), + (("0.3.0", "PATCH", None, 0, None), "0.3.1"), + (("0.3.0", "PATCH", "alpha", 0, None), "0.3.1-alpha.0"), + (("0.3.1-alpha.0", None, "alpha", 0, None), "0.3.1-alpha.1"), + (("0.3.0", "PATCH", "alpha", 1, None), "0.3.1-alpha.1"), + (("0.3.1-alpha.0", None, "alpha", 1, None), "0.3.1-alpha.1"), + (("0.3.1-alpha.0", None, None, 0, None), "0.3.1"), + (("0.3.1", "PATCH", None, 0, None), "0.3.2"), + (("0.4.2", "MAJOR", "alpha", 0, None), "1.0.0-alpha.0"), + (("1.0.0-alpha.0", None, "alpha", 0, None), "1.0.0-alpha.1"), + (("1.0.0-alpha.1", None, "alpha", 0, None), "1.0.0-alpha.2"), + (("1.0.0-alpha.1", None, "alpha", 0, 1), "1.0.0-alpha.2.dev.1"), + (("1.0.0-alpha.2.dev.0", None, "alpha", 0, 1), "1.0.0-alpha.3.dev.1"), + (("1.0.0-alpha.2.dev.0", None, "alpha", 0, 0), "1.0.0-alpha.3.dev.0"), + (("1.0.0-alpha.1", None, "beta", 0, None), "1.0.0-beta.0"), + (("1.0.0-beta.0", None, "beta", 0, None), "1.0.0-beta.1"), + (("1.0.0-beta.1", None, "rc", 0, None), "1.0.0-rc.0"), + (("1.0.0-rc.0", None, "rc", 0, None), "1.0.0-rc.1"), + (("1.0.0-rc.0", None, "rc", 0, 1), "1.0.0-rc.1.dev.1"), + (("1.0.0-rc.0", "PATCH", None, 0, None), "1.0.0"), + (("1.0.0-alpha.3.dev.0", None, "beta", 0, None), "1.0.0-beta.0"), + (("1.0.0", "PATCH", None, 0, None), "1.0.1"), + (("1.0.1", "PATCH", None, 0, None), "1.0.2"), + (("1.0.2", "MINOR", None, 0, None), "1.1.0"), + (("1.1.0", "MINOR", None, 0, None), "1.2.0"), + (("1.2.0", "PATCH", None, 0, None), "1.2.1"), + (("1.2.1", "MAJOR", None, 0, None), "2.0.0"), +] + +local_versions = [ + (("4.5.0+0.1.0", "PATCH", None, 0, None), "4.5.0+0.1.1"), + (("4.5.0+0.1.1", "MINOR", None, 0, None), "4.5.0+0.2.0"), + (("4.5.0+0.2.0", "MAJOR", None, 0, None), "4.5.0+1.0.0"), +] + +# never bump backwards on pre-releases +linear_prerelease_cases = [ + (("0.1.1-beta.1", None, "alpha", 0, None), "0.1.1-beta.2"), + (("0.1.1-rc.0", None, "alpha", 0, None), "0.1.1-rc.1"), + (("0.1.1-rc.0", None, "beta", 0, None), "0.1.1-rc.1"), +] + +weird_cases = [ + (("1.1", "PATCH", None, 0, None), "1.1.1"), + (("1", "MINOR", None, 0, None), "1.1.0"), + (("1", "MAJOR", None, 0, None), "2.0.0"), + (("1-alpha.0", None, "alpha", 0, None), "1.0.0-alpha.1"), + (("1-alpha.0", None, "alpha", 1, None), "1.0.0-alpha.1"), + (("1", None, "beta", 0, None), "1.0.0-beta.0"), + (("1", None, "beta", 1, None), "1.0.0-beta.1"), + (("1-beta", None, "beta", 0, None), "1.0.0-beta.1"), + (("1.0.0-alpha.1", None, "alpha", 0, None), "1.0.0-alpha.2"), + (("1", None, "rc", 0, None), "1.0.0-rc.0"), + (("1.0.0-rc.1+e20d7b57f3eb", "PATCH", None, 0, None), "1.0.0"), +] + +# test driven development +tdd_cases = [ + (("0.1.1", "PATCH", None, 0, None), "0.1.2"), + (("0.1.1", "MINOR", None, 0, None), "0.2.0"), + (("2.1.1", "MAJOR", None, 0, None), "3.0.0"), + (("0.9.0", "PATCH", "alpha", 0, None), "0.9.1-alpha.0"), + (("0.9.0", "MINOR", "alpha", 0, None), "0.10.0-alpha.0"), + (("0.9.0", "MAJOR", "alpha", 0, None), "1.0.0-alpha.0"), + (("0.9.0", "MAJOR", "alpha", 1, None), "1.0.0-alpha.1"), + (("1.0.0-alpha.2", None, "beta", 0, None), "1.0.0-beta.0"), + (("1.0.0-alpha.2", None, "beta", 1, None), "1.0.0-beta.1"), + (("1.0.0-beta.1", None, "rc", 0, None), "1.0.0-rc.0"), + (("1.0.0-rc.1", None, "rc", 0, None), "1.0.0-rc.2"), + (("1.0.0-alpha.0", None, "rc", 0, None), "1.0.0-rc.0"), + (("1.0.0-alpha.1", None, "alpha", 0, None), "1.0.0-alpha.2"), +] + + +@pytest.mark.parametrize( + "test_input, expected", + itertools.chain(tdd_cases, weird_cases, simple_flow, linear_prerelease_cases), +) +def test_bump_semver_version(test_input, expected): + current_version = test_input[0] + increment = test_input[1] + prerelease = test_input[2] + prerelease_offset = test_input[3] + devrelease = test_input[4] + assert ( + str( + SemVer2(current_version).bump( + increment=increment, + prerelease=prerelease, + prerelease_offset=prerelease_offset, + devrelease=devrelease, + ) + ) + == expected + ) + + +@pytest.mark.parametrize("test_input,expected", local_versions) +def test_bump_semver_version_local(test_input, expected): + current_version = test_input[0] + increment = test_input[1] + prerelease = test_input[2] + prerelease_offset = test_input[3] + devrelease = test_input[4] + is_local_version = True + assert ( + str( + SemVer2(current_version).bump( + increment=increment, + prerelease=prerelease, + prerelease_offset=prerelease_offset, + devrelease=devrelease, + is_local_version=is_local_version, + ) + ) + == expected + ) + + +def test_semver_scheme_property(): + version = SemVer2("0.0.1") + assert version.scheme is SemVer2 + + +def test_semver_implement_version_protocol(): + assert isinstance(SemVer2("0.0.1"), VersionProtocol) + + +def test_semver_sortable(): + test_input = [x[0][0] for x in simple_flow] + test_input.extend([x[1] for x in simple_flow]) + # randomize + random_input = [SemVer2(x) for x in random.sample(test_input, len(test_input))] + assert len(random_input) == len(test_input) + sorted_result = [str(x) for x in sorted(random_input)] + assert sorted_result == [ + "0.1.0", + "0.1.0", + "0.1.1-dev.1", + "0.1.1", + "0.1.1", + "0.2.0", + "0.2.0", + "0.2.0", + "0.3.0-dev.1", + "0.3.0", + "0.3.0", + "0.3.0", + "0.3.0", + "0.3.1-alpha.0", + "0.3.1-alpha.0", + "0.3.1-alpha.0", + "0.3.1-alpha.0", + "0.3.1-alpha.1", + "0.3.1-alpha.1", + "0.3.1-alpha.1", + "0.3.1", + "0.3.1", + "0.3.1", + "0.3.2", + "0.4.2", + "1.0.0-alpha.0", + "1.0.0-alpha.0", + "1.0.0-alpha.1", + "1.0.0-alpha.1", + "1.0.0-alpha.1", + "1.0.0-alpha.1", + "1.0.0-alpha.2.dev.0", + "1.0.0-alpha.2.dev.0", + "1.0.0-alpha.2.dev.1", + "1.0.0-alpha.2", + "1.0.0-alpha.3.dev.0", + "1.0.0-alpha.3.dev.0", + "1.0.0-alpha.3.dev.1", + "1.0.0-beta.0", + "1.0.0-beta.0", + "1.0.0-beta.0", + "1.0.0-beta.1", + "1.0.0-beta.1", + "1.0.0-rc.0", + "1.0.0-rc.0", + "1.0.0-rc.0", + "1.0.0-rc.0", + "1.0.0-rc.1.dev.1", + "1.0.0-rc.1", + "1.0.0", + "1.0.0", + "1.0.1", + "1.0.1", + "1.0.2", + "1.0.2", + "1.1.0", + "1.1.0", + "1.2.0", + "1.2.0", + "1.2.1", + "1.2.1", + "2.0.0", + ] From a754230d41a1933fd4ba000014d841dd2a05c71d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 10:14:32 +0000 Subject: [PATCH 220/685] =?UTF-8?q?bump:=20version=203.23.0=20=E2=86=92=20?= =?UTF-8?q?3.24.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b232a86c72..7cf5bb5857 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.23.0 # automatically updated by Commitizen + rev: v3.24.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 41db572536..aafb47ecc3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.24.0 (2024-04-18) + +### Feat + +- **schemes**: adds support for SemVer 2.0 (dot in pre-releases) (fix #1025) (#1072) + ## v3.23.0 (2024-04-18) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index dbea1a3912..3e6d8c7b73 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.23.0" +__version__ = "3.24.0" diff --git a/pyproject.toml b/pyproject.toml index 96f630e869..d627f99250 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.23.0" +version = "3.24.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.23.0" +version = "3.24.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 99db128865880dff5a5db9bd70dbed7c563da30e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Apr 2024 01:26:46 +0000 Subject: [PATCH 221/685] build(deps-dev): bump ruff from 0.3.7 to 0.4.0 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.3.7 to 0.4.0. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.3.7...v0.4.0) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- pyproject.toml | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4479975b01..98e6f9d655 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1461,28 +1461,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.3.7" +version = "0.4.0" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.3.7-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0e8377cccb2f07abd25e84fc5b2cbe48eeb0fea9f1719cad7caedb061d70e5ce"}, - {file = "ruff-0.3.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:15a4d1cc1e64e556fa0d67bfd388fed416b7f3b26d5d1c3e7d192c897e39ba4b"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d28bdf3d7dc71dd46929fafeec98ba89b7c3550c3f0978e36389b5631b793663"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:379b67d4f49774ba679593b232dcd90d9e10f04d96e3c8ce4a28037ae473f7bb"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c060aea8ad5ef21cdfbbe05475ab5104ce7827b639a78dd55383a6e9895b7c51"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:ebf8f615dde968272d70502c083ebf963b6781aacd3079081e03b32adfe4d58a"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d48098bd8f5c38897b03604f5428901b65e3c97d40b3952e38637b5404b739a2"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da8a4fda219bf9024692b1bc68c9cff4b80507879ada8769dc7e985755d662ea"}, - {file = "ruff-0.3.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c44e0149f1d8b48c4d5c33d88c677a4aa22fd09b1683d6a7ff55b816b5d074f"}, - {file = "ruff-0.3.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3050ec0af72b709a62ecc2aca941b9cd479a7bf2b36cc4562f0033d688e44fa1"}, - {file = "ruff-0.3.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a29cc38e4c1ab00da18a3f6777f8b50099d73326981bb7d182e54a9a21bb4ff7"}, - {file = "ruff-0.3.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5b15cc59c19edca917f51b1956637db47e200b0fc5e6e1878233d3a938384b0b"}, - {file = "ruff-0.3.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e491045781b1e38b72c91247cf4634f040f8d0cb3e6d3d64d38dcf43616650b4"}, - {file = "ruff-0.3.7-py3-none-win32.whl", hash = "sha256:bc931de87593d64fad3a22e201e55ad76271f1d5bfc44e1a1887edd0903c7d9f"}, - {file = "ruff-0.3.7-py3-none-win_amd64.whl", hash = "sha256:5ef0e501e1e39f35e03c2acb1d1238c595b8bb36cf7a170e7c1df1b73da00e74"}, - {file = "ruff-0.3.7-py3-none-win_arm64.whl", hash = "sha256:789e144f6dc7019d1f92a812891c645274ed08af6037d11fc65fcbc183b7d59f"}, - {file = "ruff-0.3.7.tar.gz", hash = "sha256:d5c1aebee5162c2226784800ae031f660c350e7a3402c4d1f8ea4e97e232e3ba"}, + {file = "ruff-0.4.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:70b8c620cf2212744eabd6d69c4f839f2be0d8880d27beaeb0adb6aa0b316aa8"}, + {file = "ruff-0.4.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfa3e3ff53be05a8c5570c1585ea1e089f6b399ca99fcb78598d4a8234f248db"}, + {file = "ruff-0.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5616cca501d1d16b932b7e607d7e1fd1b8c8c51d6ee484b7940fc1adc5bea541"}, + {file = "ruff-0.4.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46eff08dd480b5d9b540846159fe134d70e3c45a3c913c600047cbf7f0e4e308"}, + {file = "ruff-0.4.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d546f511431fff2b17adcf7110f3b2c2c0c8d33b0e10e5fd27fd340bc617efc"}, + {file = "ruff-0.4.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c7b6b6b38e216036284c5779b6aa14acbf5664e3b5872533219cf93daf40ddfb"}, + {file = "ruff-0.4.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e1cf8b064bb2a6b4922af7274fe2dffcb552d96ba716b2fbe5e2c970ed7de18"}, + {file = "ruff-0.4.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9911c9046b94253e1fa844c0192bb764b86866a881502dee324686474d498c17"}, + {file = "ruff-0.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ca7a971c8f1a0b6f5ff4a819c0d1c2619536530bbd5a289af725d8b2ef1013d"}, + {file = "ruff-0.4.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:752e0f77f421141dd470a0b1bed4fd8f763aebabe32c80ed3580f740ef4ba807"}, + {file = "ruff-0.4.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:84f2a5dd8f33964d826c5377e094f7ce11e55e432cd42d3bf64efe4384224a03"}, + {file = "ruff-0.4.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0b20e7db4a672495320a8a18149b7febf4e4f97509a4657367144569ce0915fd"}, + {file = "ruff-0.4.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:0b0eddd339e24dc4f7719b1cde4967f6b6bc0ad948cc183711ba8910f14aeafe"}, + {file = "ruff-0.4.0-py3-none-win32.whl", hash = "sha256:e70befd488271a2c28c80bd427f73d8855dd222fc549fa1e9967d287c5cfe781"}, + {file = "ruff-0.4.0-py3-none-win_amd64.whl", hash = "sha256:8584b9361900997ccf8d7aaa4dc4ab43e258a853ca7189d98ac929dc9ee50875"}, + {file = "ruff-0.4.0-py3-none-win_arm64.whl", hash = "sha256:fea4ec813c965e40af29ee627a1579ee1d827d77e81d54b85bdd7b42d1540cdd"}, + {file = "ruff-0.4.0.tar.gz", hash = "sha256:7457308d9ebf00d6a1c9a26aa755e477787a636c90b823f91cd7d4bea9e89260"}, ] [[package]] @@ -1820,4 +1820,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "abe023abef8eaadaffaa2b8725bc1958b6597cc8e07f0899cf751d5ce28cab82" +content-hash = "7749ae1f4f41db8c1a5333070a9b88a798dd6666535bbe1d96a6d15fa3f5ddd9" diff --git a/pyproject.toml b/pyproject.toml index d627f99250..d427aaa0f6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,7 +62,7 @@ pytest-xdist = "^3.1.0" # code formatter black = ">=23.11,<25.0" # linter -ruff = ">=0.1.6,<0.4.0" +ruff = ">=0.1.6,<0.5.0" pre-commit = ">=2.18,<4.0" mypy = "^1.4" types-PyYAML = ">=5.4.3,<7.0.0" From 5236aba3a745356a3c7843261629b3f516ec5f10 Mon Sep 17 00:00:00 2001 From: Smallfu666 <nick20350@gmail.com> Date: Sun, 21 Apr 2024 14:38:24 +0800 Subject: [PATCH 222/685] docs(getting_started): fix broken link #1008 --- docs/getting_started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started.md b/docs/getting_started.md index afc2586412..e826a5e424 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -28,7 +28,7 @@ This command will bump your project's version, and it will create a tag. Because of the setting `update_changelog_on_bump`, bump will also create the **changelog**. You can also [update files](./bump.md#version_files). -You can configure the [version type](./bump.md#version-type) and [version provider](./config.md#version-providers). +You can configure the [version scheme](./bump.md#version_scheme) and [version provider](./config.md#version-providers). There are many more options available, please read the docs for the [bump command](./bump.md). From e5a81a26db4b11201932063960ac1209712f6dbf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 01:21:55 +0000 Subject: [PATCH 223/685] build(deps-dev): bump ruff from 0.4.0 to 0.4.1 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.4.0 to 0.4.1. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.0...v0.4.1) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 98e6f9d655..57a068bc82 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1461,28 +1461,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.4.0" +version = "0.4.1" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:70b8c620cf2212744eabd6d69c4f839f2be0d8880d27beaeb0adb6aa0b316aa8"}, - {file = "ruff-0.4.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfa3e3ff53be05a8c5570c1585ea1e089f6b399ca99fcb78598d4a8234f248db"}, - {file = "ruff-0.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5616cca501d1d16b932b7e607d7e1fd1b8c8c51d6ee484b7940fc1adc5bea541"}, - {file = "ruff-0.4.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46eff08dd480b5d9b540846159fe134d70e3c45a3c913c600047cbf7f0e4e308"}, - {file = "ruff-0.4.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d546f511431fff2b17adcf7110f3b2c2c0c8d33b0e10e5fd27fd340bc617efc"}, - {file = "ruff-0.4.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c7b6b6b38e216036284c5779b6aa14acbf5664e3b5872533219cf93daf40ddfb"}, - {file = "ruff-0.4.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e1cf8b064bb2a6b4922af7274fe2dffcb552d96ba716b2fbe5e2c970ed7de18"}, - {file = "ruff-0.4.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9911c9046b94253e1fa844c0192bb764b86866a881502dee324686474d498c17"}, - {file = "ruff-0.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ca7a971c8f1a0b6f5ff4a819c0d1c2619536530bbd5a289af725d8b2ef1013d"}, - {file = "ruff-0.4.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:752e0f77f421141dd470a0b1bed4fd8f763aebabe32c80ed3580f740ef4ba807"}, - {file = "ruff-0.4.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:84f2a5dd8f33964d826c5377e094f7ce11e55e432cd42d3bf64efe4384224a03"}, - {file = "ruff-0.4.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0b20e7db4a672495320a8a18149b7febf4e4f97509a4657367144569ce0915fd"}, - {file = "ruff-0.4.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:0b0eddd339e24dc4f7719b1cde4967f6b6bc0ad948cc183711ba8910f14aeafe"}, - {file = "ruff-0.4.0-py3-none-win32.whl", hash = "sha256:e70befd488271a2c28c80bd427f73d8855dd222fc549fa1e9967d287c5cfe781"}, - {file = "ruff-0.4.0-py3-none-win_amd64.whl", hash = "sha256:8584b9361900997ccf8d7aaa4dc4ab43e258a853ca7189d98ac929dc9ee50875"}, - {file = "ruff-0.4.0-py3-none-win_arm64.whl", hash = "sha256:fea4ec813c965e40af29ee627a1579ee1d827d77e81d54b85bdd7b42d1540cdd"}, - {file = "ruff-0.4.0.tar.gz", hash = "sha256:7457308d9ebf00d6a1c9a26aa755e477787a636c90b823f91cd7d4bea9e89260"}, + {file = "ruff-0.4.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:2d9ef6231e3fbdc0b8c72404a1a0c46fd0dcea84efca83beb4681c318ea6a953"}, + {file = "ruff-0.4.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9485f54a7189e6f7433e0058cf8581bee45c31a25cd69009d2a040d1bd4bfaef"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2921ac03ce1383e360e8a95442ffb0d757a6a7ddd9a5be68561a671e0e5807e"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eec8d185fe193ad053eda3a6be23069e0c8ba8c5d20bc5ace6e3b9e37d246d3f"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baa27d9d72a94574d250f42b7640b3bd2edc4c58ac8ac2778a8c82374bb27984"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f1ee41580bff1a651339eb3337c20c12f4037f6110a36ae4a2d864c52e5ef954"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0926cefb57fc5fced629603fbd1a23d458b25418681d96823992ba975f050c2b"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c6e37f2e3cd74496a74af9a4fa67b547ab3ca137688c484749189bf3a686ceb"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd703a5975ac1998c2cc5e9494e13b28f31e66c616b0a76e206de2562e0843c"}, + {file = "ruff-0.4.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b92f03b4aa9fa23e1799b40f15f8b95cdc418782a567d6c43def65e1bbb7f1cf"}, + {file = "ruff-0.4.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1c859f294f8633889e7d77de228b203eb0e9a03071b72b5989d89a0cf98ee262"}, + {file = "ruff-0.4.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b34510141e393519a47f2d7b8216fec747ea1f2c81e85f076e9f2910588d4b64"}, + {file = "ruff-0.4.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6e68d248ed688b9d69fd4d18737edcbb79c98b251bba5a2b031ce2470224bdf9"}, + {file = "ruff-0.4.1-py3-none-win32.whl", hash = "sha256:b90506f3d6d1f41f43f9b7b5ff845aeefabed6d2494307bc7b178360a8805252"}, + {file = "ruff-0.4.1-py3-none-win_amd64.whl", hash = "sha256:c7d391e5936af5c9e252743d767c564670dc3889aff460d35c518ee76e4b26d7"}, + {file = "ruff-0.4.1-py3-none-win_arm64.whl", hash = "sha256:a1eaf03d87e6a7cd5e661d36d8c6e874693cb9bc3049d110bc9a97b350680c43"}, + {file = "ruff-0.4.1.tar.gz", hash = "sha256:d592116cdbb65f8b1b7e2a2b48297eb865f6bdc20641879aa9d7b9c11d86db79"}, ] [[package]] From 3dfbcc9a984ac90436a24e5e4fd6c443767a2b35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 01:22:47 +0000 Subject: [PATCH 224/685] build(deps-dev): bump mkdocs from 1.5.3 to 1.6.0 Bumps [mkdocs](https://github.com/mkdocs/mkdocs) from 1.5.3 to 1.6.0. - [Release notes](https://github.com/mkdocs/mkdocs/releases) - [Commits](https://github.com/mkdocs/mkdocs/compare/1.5.3...1.6.0) --- updated-dependencies: - dependency-name: mkdocs dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/poetry.lock b/poetry.lock index 57a068bc82..83258241f5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -748,44 +748,61 @@ files = [ [[package]] name = "mkdocs" -version = "1.5.3" +version = "1.6.0" description = "Project documentation with Markdown." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, - {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"}, + {file = "mkdocs-1.6.0-py3-none-any.whl", hash = "sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7"}, + {file = "mkdocs-1.6.0.tar.gz", hash = "sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512"}, ] [package.dependencies] click = ">=7.0" colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} jinja2 = ">=2.11.1" -markdown = ">=3.2.1" +markdown = ">=3.3.6" markupsafe = ">=2.0.1" mergedeep = ">=1.3.4" +mkdocs-get-deps = ">=0.2.0" packaging = ">=20.5" pathspec = ">=0.11.1" -platformdirs = ">=2.2.0" pyyaml = ">=5.1" pyyaml-env-tag = ">=0.1" watchdog = ">=2.0" [package.extras] i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, + {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +mergedeep = ">=1.3.4" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.18" +version = "9.5.2" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.18-py3-none-any.whl", hash = "sha256:1e0e27fc9fe239f9064318acf548771a4629d5fd5dfd45444fd80a953fe21eb4"}, - {file = "mkdocs_material-9.5.18.tar.gz", hash = "sha256:a43f470947053fa2405c33995f282d24992c752a50114f23f30da9d8d0c57e62"}, + {file = "mkdocs_material-9.5.2-py3-none-any.whl", hash = "sha256:6ed0fbf4682491766f0ec1acc955db6901c2fd424c7ab343964ef51b819741f5"}, + {file = "mkdocs_material-9.5.2.tar.gz", hash = "sha256:ca8b9cd2b3be53e858e5a1a45ac9668bd78d95d77a30288bb5ebc1a31db6184c"}, ] [package.dependencies] @@ -793,7 +810,7 @@ babel = ">=2.10,<3.0" colorama = ">=0.4,<1.0" jinja2 = ">=3.0,<4.0" markdown = ">=3.2,<4.0" -mkdocs = ">=1.5.3,<1.6.0" +mkdocs = ">=1.5.3,<2.0" mkdocs-material-extensions = ">=1.3,<2.0" paginate = ">=0.5,<1.0" pygments = ">=2.16,<3.0" @@ -802,8 +819,8 @@ regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] -imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2,<2.0)"] +imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=9.4,<10.0)"] recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] [[package]] From ac07bdaa30155ef080ad6487c8ccc21067d0ceab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 01:17:23 +0000 Subject: [PATCH 225/685] build(deps-dev): bump mkdocs-material from 9.5.2 to 9.5.18 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.2 to 9.5.18. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.2...9.5.18) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 45 ++++++++++++++------------------------------- 1 file changed, 14 insertions(+), 31 deletions(-) diff --git a/poetry.lock b/poetry.lock index 83258241f5..57a068bc82 100644 --- a/poetry.lock +++ b/poetry.lock @@ -748,61 +748,44 @@ files = [ [[package]] name = "mkdocs" -version = "1.6.0" +version = "1.5.3" description = "Project documentation with Markdown." optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "mkdocs-1.6.0-py3-none-any.whl", hash = "sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7"}, - {file = "mkdocs-1.6.0.tar.gz", hash = "sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512"}, + {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, + {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"}, ] [package.dependencies] click = ">=7.0" colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} jinja2 = ">=2.11.1" -markdown = ">=3.3.6" +markdown = ">=3.2.1" markupsafe = ">=2.0.1" mergedeep = ">=1.3.4" -mkdocs-get-deps = ">=0.2.0" packaging = ">=20.5" pathspec = ">=0.11.1" +platformdirs = ">=2.2.0" pyyaml = ">=5.1" pyyaml-env-tag = ">=0.1" watchdog = ">=2.0" [package.extras] i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] - -[[package]] -name = "mkdocs-get-deps" -version = "0.2.0" -description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, - {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} -mergedeep = ">=1.3.4" -platformdirs = ">=2.2.0" -pyyaml = ">=5.1" +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] [[package]] name = "mkdocs-material" -version = "9.5.2" +version = "9.5.18" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.2-py3-none-any.whl", hash = "sha256:6ed0fbf4682491766f0ec1acc955db6901c2fd424c7ab343964ef51b819741f5"}, - {file = "mkdocs_material-9.5.2.tar.gz", hash = "sha256:ca8b9cd2b3be53e858e5a1a45ac9668bd78d95d77a30288bb5ebc1a31db6184c"}, + {file = "mkdocs_material-9.5.18-py3-none-any.whl", hash = "sha256:1e0e27fc9fe239f9064318acf548771a4629d5fd5dfd45444fd80a953fe21eb4"}, + {file = "mkdocs_material-9.5.18.tar.gz", hash = "sha256:a43f470947053fa2405c33995f282d24992c752a50114f23f30da9d8d0c57e62"}, ] [package.dependencies] @@ -810,7 +793,7 @@ babel = ">=2.10,<3.0" colorama = ">=0.4,<1.0" jinja2 = ">=3.0,<4.0" markdown = ">=3.2,<4.0" -mkdocs = ">=1.5.3,<2.0" +mkdocs = ">=1.5.3,<1.6.0" mkdocs-material-extensions = ">=1.3,<2.0" paginate = ">=0.5,<1.0" pygments = ">=2.16,<3.0" @@ -819,8 +802,8 @@ regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2,<2.0)"] -imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=9.4,<10.0)"] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] [[package]] From 3a2a38d463828bb65236bf7f176bd2cffa31f7c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Apr 2024 01:37:01 +0000 Subject: [PATCH 226/685] build(deps-dev): bump mkdocs from 1.5.3 to 1.6.0 Bumps [mkdocs](https://github.com/mkdocs/mkdocs) from 1.5.3 to 1.6.0. - [Release notes](https://github.com/mkdocs/mkdocs/releases) - [Commits](https://github.com/mkdocs/mkdocs/compare/1.5.3...1.6.0) --- updated-dependencies: - dependency-name: mkdocs dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/poetry.lock b/poetry.lock index 57a068bc82..83258241f5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -748,44 +748,61 @@ files = [ [[package]] name = "mkdocs" -version = "1.5.3" +version = "1.6.0" description = "Project documentation with Markdown." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, - {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"}, + {file = "mkdocs-1.6.0-py3-none-any.whl", hash = "sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7"}, + {file = "mkdocs-1.6.0.tar.gz", hash = "sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512"}, ] [package.dependencies] click = ">=7.0" colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} jinja2 = ">=2.11.1" -markdown = ">=3.2.1" +markdown = ">=3.3.6" markupsafe = ">=2.0.1" mergedeep = ">=1.3.4" +mkdocs-get-deps = ">=0.2.0" packaging = ">=20.5" pathspec = ">=0.11.1" -platformdirs = ">=2.2.0" pyyaml = ">=5.1" pyyaml-env-tag = ">=0.1" watchdog = ">=2.0" [package.extras] i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, + {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +mergedeep = ">=1.3.4" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.18" +version = "9.5.2" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.18-py3-none-any.whl", hash = "sha256:1e0e27fc9fe239f9064318acf548771a4629d5fd5dfd45444fd80a953fe21eb4"}, - {file = "mkdocs_material-9.5.18.tar.gz", hash = "sha256:a43f470947053fa2405c33995f282d24992c752a50114f23f30da9d8d0c57e62"}, + {file = "mkdocs_material-9.5.2-py3-none-any.whl", hash = "sha256:6ed0fbf4682491766f0ec1acc955db6901c2fd424c7ab343964ef51b819741f5"}, + {file = "mkdocs_material-9.5.2.tar.gz", hash = "sha256:ca8b9cd2b3be53e858e5a1a45ac9668bd78d95d77a30288bb5ebc1a31db6184c"}, ] [package.dependencies] @@ -793,7 +810,7 @@ babel = ">=2.10,<3.0" colorama = ">=0.4,<1.0" jinja2 = ">=3.0,<4.0" markdown = ">=3.2,<4.0" -mkdocs = ">=1.5.3,<1.6.0" +mkdocs = ">=1.5.3,<2.0" mkdocs-material-extensions = ">=1.3,<2.0" paginate = ">=0.5,<1.0" pygments = ">=2.16,<3.0" @@ -802,8 +819,8 @@ regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] -imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2,<2.0)"] +imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=9.4,<10.0)"] recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] [[package]] From 35b7c983ed075c20650e9bf629376151d4667884 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Apr 2024 01:41:13 +0000 Subject: [PATCH 227/685] build(deps-dev): bump black from 24.4.0 to 24.4.2 Bumps [black](https://github.com/psf/black) from 24.4.0 to 24.4.2. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/24.4.0...24.4.2) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/poetry.lock b/poetry.lock index 83258241f5..b33ec6cd80 100644 --- a/poetry.lock +++ b/poetry.lock @@ -73,33 +73,33 @@ files = [ [[package]] name = "black" -version = "24.4.0" +version = "24.4.2" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-24.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6ad001a9ddd9b8dfd1b434d566be39b1cd502802c8d38bbb1ba612afda2ef436"}, - {file = "black-24.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3a3a092b8b756c643fe45f4624dbd5a389f770a4ac294cf4d0fce6af86addaf"}, - {file = "black-24.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dae79397f367ac8d7adb6c779813328f6d690943f64b32983e896bcccd18cbad"}, - {file = "black-24.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:71d998b73c957444fb7c52096c3843875f4b6b47a54972598741fe9a7f737fcb"}, - {file = "black-24.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8e5537f456a22cf5cfcb2707803431d2feeb82ab3748ade280d6ccd0b40ed2e8"}, - {file = "black-24.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64e60a7edd71fd542a10a9643bf369bfd2644de95ec71e86790b063aa02ff745"}, - {file = "black-24.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cd5b4f76056cecce3e69b0d4c228326d2595f506797f40b9233424e2524c070"}, - {file = "black-24.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:64578cf99b6b46a6301bc28bdb89f9d6f9b592b1c5837818a177c98525dbe397"}, - {file = "black-24.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f95cece33329dc4aa3b0e1a771c41075812e46cf3d6e3f1dfe3d91ff09826ed2"}, - {file = "black-24.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4396ca365a4310beef84d446ca5016f671b10f07abdba3e4e4304218d2c71d33"}, - {file = "black-24.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d99dfdf37a2a00a6f7a8dcbd19edf361d056ee51093b2445de7ca09adac965"}, - {file = "black-24.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:21f9407063ec71c5580b8ad975653c66508d6a9f57bd008bb8691d273705adcd"}, - {file = "black-24.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:652e55bb722ca026299eb74e53880ee2315b181dfdd44dca98e43448620ddec1"}, - {file = "black-24.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f2966b9b2b3b7104fca9d75b2ee856fe3fdd7ed9e47c753a4bb1a675f2caab8"}, - {file = "black-24.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bb9ca06e556a09f7f7177bc7cb604e5ed2d2df1e9119e4f7d2f1f7071c32e5d"}, - {file = "black-24.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4e71cdebdc8efeb6deaf5f2deb28325f8614d48426bed118ecc2dcaefb9ebf3"}, - {file = "black-24.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6644f97a7ef6f401a150cca551a1ff97e03c25d8519ee0bbc9b0058772882665"}, - {file = "black-24.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:75a2d0b4f5eb81f7eebc31f788f9830a6ce10a68c91fbe0fade34fff7a2836e6"}, - {file = "black-24.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb949f56a63c5e134dfdca12091e98ffb5fd446293ebae123d10fc1abad00b9e"}, - {file = "black-24.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:7852b05d02b5b9a8c893ab95863ef8986e4dda29af80bbbda94d7aee1abf8702"}, - {file = "black-24.4.0-py3-none-any.whl", hash = "sha256:74eb9b5420e26b42c00a3ff470dc0cd144b80a766128b1771d07643165e08d0e"}, - {file = "black-24.4.0.tar.gz", hash = "sha256:f07b69fda20578367eaebbd670ff8fc653ab181e1ff95d84497f9fa20e7d0641"}, + {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"}, + {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"}, + {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"}, + {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"}, + {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"}, + {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"}, + {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"}, + {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"}, + {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"}, + {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"}, + {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"}, + {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"}, + {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"}, + {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"}, + {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"}, + {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"}, + {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"}, + {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"}, + {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"}, + {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"}, + {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"}, + {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"}, ] [package.dependencies] From 2e6ec16b336ad0898ddeee79e39e40492ae3435e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Apr 2024 01:40:20 +0000 Subject: [PATCH 228/685] build(deps-dev): bump mkdocs-material from 9.5.2 to 9.5.19 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.2 to 9.5.19. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.2...9.5.19) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index b33ec6cd80..82674e65f9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -796,13 +796,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.2" +version = "9.5.19" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.2-py3-none-any.whl", hash = "sha256:6ed0fbf4682491766f0ec1acc955db6901c2fd424c7ab343964ef51b819741f5"}, - {file = "mkdocs_material-9.5.2.tar.gz", hash = "sha256:ca8b9cd2b3be53e858e5a1a45ac9668bd78d95d77a30288bb5ebc1a31db6184c"}, + {file = "mkdocs_material-9.5.19-py3-none-any.whl", hash = "sha256:ea96e150b6c95f5e4ffe47d78bb712c7bacdd91d2a0bec47f46b6fa0705a86ec"}, + {file = "mkdocs_material-9.5.19.tar.gz", hash = "sha256:7473e06e17e23af608a30ef583fdde8f36389dd3ef56b1d503eed54c89c9618c"}, ] [package.dependencies] @@ -810,7 +810,7 @@ babel = ">=2.10,<3.0" colorama = ">=0.4,<1.0" jinja2 = ">=3.0,<4.0" markdown = ">=3.2,<4.0" -mkdocs = ">=1.5.3,<2.0" +mkdocs = ">=1.6,<2.0" mkdocs-material-extensions = ">=1.3,<2.0" paginate = ">=0.5,<1.0" pygments = ">=2.16,<3.0" @@ -819,8 +819,8 @@ regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2,<2.0)"] -imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=9.4,<10.0)"] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] [[package]] From 8efbe9eca309ebacb634dbe7ff9c8eea1f168f47 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Apr 2024 02:26:09 +0000 Subject: [PATCH 229/685] build(deps-dev): bump ruff from 0.4.1 to 0.4.2 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.4.1 to 0.4.2. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.1...v0.4.2) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 82674e65f9..a5d06d63f8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1478,28 +1478,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.4.1" +version = "0.4.2" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:2d9ef6231e3fbdc0b8c72404a1a0c46fd0dcea84efca83beb4681c318ea6a953"}, - {file = "ruff-0.4.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9485f54a7189e6f7433e0058cf8581bee45c31a25cd69009d2a040d1bd4bfaef"}, - {file = "ruff-0.4.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2921ac03ce1383e360e8a95442ffb0d757a6a7ddd9a5be68561a671e0e5807e"}, - {file = "ruff-0.4.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eec8d185fe193ad053eda3a6be23069e0c8ba8c5d20bc5ace6e3b9e37d246d3f"}, - {file = "ruff-0.4.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baa27d9d72a94574d250f42b7640b3bd2edc4c58ac8ac2778a8c82374bb27984"}, - {file = "ruff-0.4.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f1ee41580bff1a651339eb3337c20c12f4037f6110a36ae4a2d864c52e5ef954"}, - {file = "ruff-0.4.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0926cefb57fc5fced629603fbd1a23d458b25418681d96823992ba975f050c2b"}, - {file = "ruff-0.4.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c6e37f2e3cd74496a74af9a4fa67b547ab3ca137688c484749189bf3a686ceb"}, - {file = "ruff-0.4.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd703a5975ac1998c2cc5e9494e13b28f31e66c616b0a76e206de2562e0843c"}, - {file = "ruff-0.4.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b92f03b4aa9fa23e1799b40f15f8b95cdc418782a567d6c43def65e1bbb7f1cf"}, - {file = "ruff-0.4.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1c859f294f8633889e7d77de228b203eb0e9a03071b72b5989d89a0cf98ee262"}, - {file = "ruff-0.4.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b34510141e393519a47f2d7b8216fec747ea1f2c81e85f076e9f2910588d4b64"}, - {file = "ruff-0.4.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6e68d248ed688b9d69fd4d18737edcbb79c98b251bba5a2b031ce2470224bdf9"}, - {file = "ruff-0.4.1-py3-none-win32.whl", hash = "sha256:b90506f3d6d1f41f43f9b7b5ff845aeefabed6d2494307bc7b178360a8805252"}, - {file = "ruff-0.4.1-py3-none-win_amd64.whl", hash = "sha256:c7d391e5936af5c9e252743d767c564670dc3889aff460d35c518ee76e4b26d7"}, - {file = "ruff-0.4.1-py3-none-win_arm64.whl", hash = "sha256:a1eaf03d87e6a7cd5e661d36d8c6e874693cb9bc3049d110bc9a97b350680c43"}, - {file = "ruff-0.4.1.tar.gz", hash = "sha256:d592116cdbb65f8b1b7e2a2b48297eb865f6bdc20641879aa9d7b9c11d86db79"}, + {file = "ruff-0.4.2-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:8d14dc8953f8af7e003a485ef560bbefa5f8cc1ad994eebb5b12136049bbccc5"}, + {file = "ruff-0.4.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:24016ed18db3dc9786af103ff49c03bdf408ea253f3cb9e3638f39ac9cf2d483"}, + {file = "ruff-0.4.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2e06459042ac841ed510196c350ba35a9b24a643e23db60d79b2db92af0c2b"}, + {file = "ruff-0.4.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3afabaf7ba8e9c485a14ad8f4122feff6b2b93cc53cd4dad2fd24ae35112d5c5"}, + {file = "ruff-0.4.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:799eb468ea6bc54b95527143a4ceaf970d5aa3613050c6cff54c85fda3fde480"}, + {file = "ruff-0.4.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:ec4ba9436a51527fb6931a8839af4c36a5481f8c19e8f5e42c2f7ad3a49f5069"}, + {file = "ruff-0.4.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6a2243f8f434e487c2a010c7252150b1fdf019035130f41b77626f5655c9ca22"}, + {file = "ruff-0.4.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8772130a063f3eebdf7095da00c0b9898bd1774c43b336272c3e98667d4fb8fa"}, + {file = "ruff-0.4.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ab165ef5d72392b4ebb85a8b0fbd321f69832a632e07a74794c0e598e7a8376"}, + {file = "ruff-0.4.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1f32cadf44c2020e75e0c56c3408ed1d32c024766bd41aedef92aa3ca28eef68"}, + {file = "ruff-0.4.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:22e306bf15e09af45ca812bc42fa59b628646fa7c26072555f278994890bc7ac"}, + {file = "ruff-0.4.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:82986bb77ad83a1719c90b9528a9dd663c9206f7c0ab69282af8223566a0c34e"}, + {file = "ruff-0.4.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:652e4ba553e421a6dc2a6d4868bc3b3881311702633eb3672f9f244ded8908cd"}, + {file = "ruff-0.4.2-py3-none-win32.whl", hash = "sha256:7891ee376770ac094da3ad40c116258a381b86c7352552788377c6eb16d784fe"}, + {file = "ruff-0.4.2-py3-none-win_amd64.whl", hash = "sha256:5ec481661fb2fd88a5d6cf1f83403d388ec90f9daaa36e40e2c003de66751798"}, + {file = "ruff-0.4.2-py3-none-win_arm64.whl", hash = "sha256:cbd1e87c71bca14792948c4ccb51ee61c3296e164019d2d484f3eaa2d360dfaf"}, + {file = "ruff-0.4.2.tar.gz", hash = "sha256:33bcc160aee2520664bc0859cfeaebc84bb7323becff3f303b8f1f2d81cb4edc"}, ] [[package]] From 1ddc0174eb3d086713a411c2bfe714309e17fcd0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Apr 2024 02:41:27 +0000 Subject: [PATCH 230/685] build(deps-dev): bump mypy from 1.9.0 to 1.10.0 Bumps [mypy](https://github.com/python/mypy) from 1.9.0 to 1.10.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/1.9.0...v1.10.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index a5d06d63f8..9ac3f8345c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -836,38 +836,38 @@ files = [ [[package]] name = "mypy" -version = "1.9.0" +version = "1.10.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"}, - {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"}, - {file = "mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150"}, - {file = "mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374"}, - {file = "mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03"}, - {file = "mypy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3"}, - {file = "mypy-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc"}, - {file = "mypy-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129"}, - {file = "mypy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612"}, - {file = "mypy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3"}, - {file = "mypy-1.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd"}, - {file = "mypy-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6"}, - {file = "mypy-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185"}, - {file = "mypy-1.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913"}, - {file = "mypy-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"}, - {file = "mypy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b"}, - {file = "mypy-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2"}, - {file = "mypy-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e"}, - {file = "mypy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04"}, - {file = "mypy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89"}, - {file = "mypy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02"}, - {file = "mypy-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4"}, - {file = "mypy-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d"}, - {file = "mypy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf"}, - {file = "mypy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9"}, - {file = "mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e"}, - {file = "mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, + {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, + {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, + {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, + {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, + {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, + {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, + {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, + {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, + {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, + {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, + {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, + {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, + {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, + {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, + {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, + {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, + {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, ] [package.dependencies] From d6d4fe06f0f76c7f21332caafa4a3edfe5974179 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 01:29:46 +0000 Subject: [PATCH 231/685] build(deps-dev): bump pytest-xdist from 3.5.0 to 3.6.1 Bumps [pytest-xdist](https://github.com/pytest-dev/pytest-xdist) from 3.5.0 to 3.6.1. - [Release notes](https://github.com/pytest-dev/pytest-xdist/releases) - [Changelog](https://github.com/pytest-dev/pytest-xdist/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-xdist/compare/v3.5.0...v3.6.1) --- updated-dependencies: - dependency-name: pytest-xdist dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9ac3f8345c..7861aa2023 100644 --- a/poetry.lock +++ b/poetry.lock @@ -396,13 +396,13 @@ test = ["pytest (>=6)"] [[package]] name = "execnet" -version = "2.0.2" +version = "2.1.1" description = "execnet: rapid multi-Python deployment" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"}, - {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"}, + {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, + {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, ] [package.extras] @@ -1208,18 +1208,18 @@ num = ["numpy", "pandas"] [[package]] name = "pytest-xdist" -version = "3.5.0" +version = "3.6.1" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-xdist-3.5.0.tar.gz", hash = "sha256:cbb36f3d67e0c478baa57fa4edc8843887e0f6cfc42d677530a36d7472b32d8a"}, - {file = "pytest_xdist-3.5.0-py3-none-any.whl", hash = "sha256:d075629c7e00b611df89f490a5063944bee7a4362a5ff11c7cc7824a03dfce24"}, + {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, + {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, ] [package.dependencies] -execnet = ">=1.1" -pytest = ">=6.2.0" +execnet = ">=2.1" +pytest = ">=7.0.0" [package.extras] psutil = ["psutil (>=3.0)"] From 5d00b18c4daa2be1c0168aa9198273640385d794 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 01:28:03 +0000 Subject: [PATCH 232/685] build(deps): bump decli from 0.6.1 to 0.6.2 Bumps decli from 0.6.1 to 0.6.2. --- updated-dependencies: - dependency-name: decli dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7861aa2023..d7467087a0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -332,13 +332,13 @@ toml = ["tomli"] [[package]] name = "decli" -version = "0.6.1" +version = "0.6.2" description = "Minimal, easy-to-use, declarative cli tool" optional = false python-versions = ">=3.7" files = [ - {file = "decli-0.6.1-py3-none-any.whl", hash = "sha256:7815ac58617764e1a200d7cadac6315fcaacc24d727d182f9878dd6378ccf869"}, - {file = "decli-0.6.1.tar.gz", hash = "sha256:ed88ccb947701e8e5509b7945fda56e150e2ac74a69f25d47ac85ef30ab0c0f0"}, + {file = "decli-0.6.2-py3-none-any.whl", hash = "sha256:2fc84106ce9a8f523ed501ca543bdb7e416c064917c12a59ebdc7f311a97b7ed"}, + {file = "decli-0.6.2.tar.gz", hash = "sha256:36f71eb55fd0093895efb4f416ec32b7f6e00147dda448e3365cf73ceab42d6f"}, ] [[package]] From 891daa38b0c7d0a1ffb0c82cc4b7a0ccd295280a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 01:26:36 +0000 Subject: [PATCH 233/685] build(deps-dev): bump pytest from 8.1.1 to 8.2.0 Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.1.1 to 8.2.0. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.1.1...8.2.0) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index d7467087a0..fa2296e373 100644 --- a/poetry.lock +++ b/poetry.lock @@ -995,13 +995,13 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co [[package]] name = "pluggy" -version = "1.4.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, - {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -1100,13 +1100,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pytest" -version = "8.1.1" +version = "8.2.0" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.1.1-py3-none-any.whl", hash = "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7"}, - {file = "pytest-8.1.1.tar.gz", hash = "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"}, + {file = "pytest-8.2.0-py3-none-any.whl", hash = "sha256:1733f0620f6cda4095bbf0d9ff8022486e91892245bb9e7d5542c018f612f233"}, + {file = "pytest-8.2.0.tar.gz", hash = "sha256:d507d4482197eac0ba2bae2e9babf0672eb333017bcedaa5fb1a3d42c1174b3f"}, ] [package.dependencies] @@ -1114,11 +1114,11 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=1.4,<2.0" +pluggy = ">=1.5,<2.0" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" From 9b459569eb313cbedc2ce708eb1730e46a3c3775 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Apr 2024 01:47:47 +0000 Subject: [PATCH 234/685] build(deps-dev): bump mkdocs-material from 9.5.19 to 9.5.20 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.19 to 9.5.20. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.19...9.5.20) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index fa2296e373..45b7faa212 100644 --- a/poetry.lock +++ b/poetry.lock @@ -796,13 +796,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.19" +version = "9.5.20" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.19-py3-none-any.whl", hash = "sha256:ea96e150b6c95f5e4ffe47d78bb712c7bacdd91d2a0bec47f46b6fa0705a86ec"}, - {file = "mkdocs_material-9.5.19.tar.gz", hash = "sha256:7473e06e17e23af608a30ef583fdde8f36389dd3ef56b1d503eed54c89c9618c"}, + {file = "mkdocs_material-9.5.20-py3-none-any.whl", hash = "sha256:ad0094a7597bcb5d0cc3e8e543a10927c2581f7f647b9bb4861600f583180f9b"}, + {file = "mkdocs_material-9.5.20.tar.gz", hash = "sha256:986eef0250d22f70fb06ce0f4eac64cc92bd797a589ec3892ce31fad976fe3da"}, ] [package.dependencies] From 88ef59bf4b5528fd25d9f85532f914ce401294b3 Mon Sep 17 00:00:00 2001 From: Yu-Sheng Li <kevin1kevin1k@gmail.com> Date: Sun, 21 Apr 2024 14:32:15 +0800 Subject: [PATCH 235/685] feat: add an argument to limit the length of commit message --- commitizen/cli.py | 6 ++++++ commitizen/commands/commit.py | 4 +++- commitizen/cz/base.py | 12 ++++++++++- .../conventional_commits.py | 8 ++++---- commitizen/cz/customize/customize.py | 13 +++++++----- commitizen/cz/jira/jira.py | 6 ++++-- commitizen/defaults.py | 2 ++ commitizen/exceptions.py | 5 +++++ docs/commit.md | 10 ++++++++++ docs/customization.md | 6 ++++-- tests/conftest.py | 8 +++++--- tests/test_cz_base.py | 20 +++++++++++++++++-- 12 files changed, 80 insertions(+), 20 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index cf3d6c5eef..8b2d008e0e 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -154,6 +154,12 @@ def __call__( "action": "store_true", "help": "Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.", }, + { + "name": ["-l", "--message-length-limit"], + "type": int, + "default": 0, + "help": "length limit of the commit message; 0 for no limit", + }, ], }, { diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 7591a28658..1f21b45571 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -61,7 +61,9 @@ def prompt_commit_questions(self) -> str: if not answers: raise NoAnswersError() - return cz.message(answers) + + message_length_limit: int = self.arguments.get("message_length_limit", 0) + return cz.message(answers, message_length_limit=message_length_limit) def __call__(self): dry_run: bool = self.arguments.get("dry_run") diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index bd116ceb02..9cbfe795db 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -9,6 +9,7 @@ from commitizen import git from commitizen.config.base_config import BaseConfig from commitizen.defaults import Questions +from commitizen.exceptions import CommitMessageLengthExceededError class MessageBuilderHook(Protocol): @@ -71,7 +72,7 @@ def questions(self) -> Questions: """Questions regarding the commit message.""" @abstractmethod - def message(self, answers: dict) -> str: + def message(self, answers: dict, message_length_limit: int) -> str: """Format your git message.""" @property @@ -105,3 +106,12 @@ def process_commit(self, commit: str) -> str: If not overwritten, it returns the first line of commit. """ return commit.split("\n")[0] + + def _check_message_length_limit( + self, message: str, message_length_limit: int + ) -> None: + message_len = len(message) + if message_length_limit > 0 and message_len > message_length_limit: + raise CommitMessageLengthExceededError( + f"Length of commit message exceeds limit ({message_len}/{message_length_limit})" + ) diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 5f693963e7..50d6e94133 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -150,7 +150,7 @@ def questions(self) -> Questions: ] return questions - def message(self, answers: dict) -> str: + def message(self, answers: dict, message_length_limit: int = 0) -> str: prefix = answers["prefix"] scope = answers["scope"] subject = answers["subject"] @@ -167,9 +167,9 @@ def message(self, answers: dict) -> str: if footer: footer = f"\n\n{footer}" - message = f"{prefix}{scope}: {subject}{body}{footer}" - - return message + message = f"{prefix}{scope}: {subject}" + self._check_message_length_limit(message, message_length_limit) + return f"{message}{body}{footer}" def example(self) -> str: return ( diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index 5c3b4e76b4..0dc5b26794 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -61,12 +61,15 @@ def __init__(self, config: BaseConfig): def questions(self) -> Questions: return self.custom_settings.get("questions", [{}]) - def message(self, answers: dict) -> str: + def message(self, answers: dict, message_length_limit: int = 0) -> str: message_template = Template(self.custom_settings.get("message_template", "")) - if getattr(Template, "substitute", None): - return message_template.substitute(**answers) # type: ignore - else: - return message_template.render(**answers) + message: str = ( + message_template.substitute(**answers) # type: ignore + if getattr(Template, "substitute", None) + else message_template.render(**answers) + ) + self._check_message_length_limit(message, message_length_limit) + return message def example(self) -> str | None: return self.custom_settings.get("example") diff --git a/commitizen/cz/jira/jira.py b/commitizen/cz/jira/jira.py index a4fdcfa09e..6a727f78ed 100644 --- a/commitizen/cz/jira/jira.py +++ b/commitizen/cz/jira/jira.py @@ -44,8 +44,8 @@ def questions(self) -> Questions: ] return questions - def message(self, answers) -> str: - return " ".join( + def message(self, answers: dict, message_length_limit: int = 0) -> str: + message = " ".join( filter( bool, [ @@ -57,6 +57,8 @@ def message(self, answers) -> str: ], ) ) + self._check_message_length_limit(message, message_length_limit) + return message def example(self) -> str: return ( diff --git a/commitizen/defaults.py b/commitizen/defaults.py index a1651ebe88..cb35319168 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -57,6 +57,7 @@ class Settings(TypedDict, total=False): always_signoff: bool template: str | None extras: dict[str, Any] + message_length_limit: int name: str = "cz_conventional_commits" @@ -102,6 +103,7 @@ class Settings(TypedDict, total=False): "always_signoff": False, "template": None, # default provided by plugin "extras": {}, + "message_length_limit": 0, } MAJOR = "MAJOR" diff --git a/commitizen/exceptions.py b/commitizen/exceptions.py index 9cb1517680..bcdd0d1e3c 100644 --- a/commitizen/exceptions.py +++ b/commitizen/exceptions.py @@ -36,6 +36,7 @@ class ExitCode(enum.IntEnum): CHANGELOG_FORMAT_UNKNOWN = 29 CONFIG_FILE_NOT_FOUND = 30 CONFIG_FILE_IS_EMPTY = 31 + COMMIT_MESSAGE_LENGTH_LIMIT_EXCEEDED = 32 class CommitizenException(Exception): @@ -201,3 +202,7 @@ class ConfigFileNotFound(CommitizenException): class ConfigFileIsEmpty(CommitizenException): exit_code = ExitCode.CONFIG_FILE_IS_EMPTY message = "Config file is empty, please check your file path again." + + +class CommitMessageLengthExceededError(CommitizenException): + exit_code = ExitCode.COMMIT_MESSAGE_LENGTH_LIMIT_EXCEEDED diff --git a/docs/commit.md b/docs/commit.md index 54c792f743..fe6fb415c4 100644 --- a/docs/commit.md +++ b/docs/commit.md @@ -36,3 +36,13 @@ You can use `cz commit --retry` to reuse the last commit message when the previo To automatically retry when running `cz commit`, you can set the `retry_after_failure` configuration option to `true`. Running `cz commit --no-retry` makes commitizen ignore `retry_after_failure`, forcing a new commit message to be prompted. + +### Commit message length limit + +The argument `-l` (or `--message-length-limit`) followed by a positive number can limit the length of commit messages. +An exception would be raised when the message length exceeds the limit. +For example, `cz commit -l 72` will limit the length of commit messages to 72 characters. +By default the limit is set to 0, which means no limit on the length. + +Note that for `ConventionalCommitsCz`, the limit applies only from the prefix to the subject. +In other words, everything after the first line (the body and the footer) are not counted in the length. diff --git a/docs/customization.md b/docs/customization.md index 1fd1826e03..e7832e319f 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -227,9 +227,11 @@ class JiraCz(BaseCommitizen): ] return questions - def message(self, answers: dict) -> str: + def message(self, answers: dict, message_length_limit: int = 0) -> str: """Generate the message with the given answers.""" - return "{0} (#{1})".format(answers["title"], answers["issue"]) + message = "{0} (#{1})".format(answers["title"], answers["issue"]) + self._check_message_length_limit(message, message_length_limit) + return message def example(self) -> str: """Provide an example to help understand the style (OPTIONAL) diff --git a/tests/conftest.py b/tests/conftest.py index 76d2e53fb7..0431a39556 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -204,10 +204,12 @@ def questions(self) -> list: }, ] - def message(self, answers: dict) -> str: + def message(self, answers: dict, message_length_limit: int = 0) -> str: prefix = answers["prefix"] subject = answers.get("subject", "default message").trim() - return f"{prefix}: {subject}" + message = f"{prefix}: {subject}" + self._check_message_length_limit(message, message_length_limit) + return message @pytest.fixture() @@ -220,7 +222,7 @@ class MockPlugin(BaseCommitizen): def questions(self) -> defaults.Questions: return [] - def message(self, answers: dict) -> str: + def message(self, answers: dict, message_length_limit: int = 0) -> str: return "" diff --git a/tests/test_cz_base.py b/tests/test_cz_base.py index 891ee01167..3b903d80b8 100644 --- a/tests/test_cz_base.py +++ b/tests/test_cz_base.py @@ -1,14 +1,17 @@ import pytest from commitizen.cz.base import BaseCommitizen +from commitizen.exceptions import CommitMessageLengthExceededError class DummyCz(BaseCommitizen): def questions(self): return [{"type": "input", "name": "commit", "message": "Initial commit:\n"}] - def message(self, answers): - return answers["commit"] + def message(self, answers: dict, message_length_limit: int = 0): + message = answers["commit"] + self._check_message_length_limit(message, message_length_limit) + return message def test_base_raises_error(config): @@ -48,3 +51,16 @@ def test_process_commit(config): cz = DummyCz(config) message = cz.process_commit("test(test_scope): this is test msg") assert message == "test(test_scope): this is test msg" + + +def test_message_length_limit(config): + cz = DummyCz(config) + commit_message = "123456789" + message_length = len(commit_message) + assert cz.message({"commit": commit_message}) == commit_message + assert ( + cz.message({"commit": commit_message}, message_length_limit=message_length) + == commit_message + ) + with pytest.raises(CommitMessageLengthExceededError): + cz.message({"commit": commit_message}, message_length_limit=message_length - 1) From 8884a1faf608f27e0aef988dea6dd46ac3b5ee8b Mon Sep 17 00:00:00 2001 From: Yu-Sheng Li <kevin1kevin1k@gmail.com> Date: Sun, 21 Apr 2024 16:58:26 +0800 Subject: [PATCH 236/685] fix: resolve test error by removing defaults --- commitizen/defaults.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/commitizen/defaults.py b/commitizen/defaults.py index cb35319168..a1651ebe88 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -57,7 +57,6 @@ class Settings(TypedDict, total=False): always_signoff: bool template: str | None extras: dict[str, Any] - message_length_limit: int name: str = "cz_conventional_commits" @@ -103,7 +102,6 @@ class Settings(TypedDict, total=False): "always_signoff": False, "template": None, # default provided by plugin "extras": {}, - "message_length_limit": 0, } MAJOR = "MAJOR" From 432431ec0918a325cca7d9f4727c0e318a770d00 Mon Sep 17 00:00:00 2001 From: Yu-Sheng Li <kevin1kevin1k@gmail.com> Date: Sun, 21 Apr 2024 22:18:57 +0800 Subject: [PATCH 237/685] refactor: check the length in Commit instead of Commitizen --- commitizen/commands/commit.py | 10 ++++++- commitizen/cz/base.py | 12 +-------- .../conventional_commits.py | 8 +++--- commitizen/cz/customize/customize.py | 13 ++++----- commitizen/cz/jira/jira.py | 6 ++--- commitizen/exceptions.py | 1 + docs/commit.md | 5 ++-- docs/customization.md | 6 ++--- tests/commands/test_commit_command.py | 27 +++++++++++++++++++ tests/conftest.py | 8 +++--- tests/test_cz_base.py | 20 ++------------ 11 files changed, 59 insertions(+), 57 deletions(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 1f21b45571..15f2cc903c 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -12,6 +12,7 @@ from commitizen.cz.utils import get_backup_file_path from commitizen.exceptions import ( CommitError, + CommitMessageLengthExceededError, CustomError, DryRunExit, NoAnswersError, @@ -62,8 +63,15 @@ def prompt_commit_questions(self) -> str: if not answers: raise NoAnswersError() + message = cz.message(answers) + message_len = len(message.partition("\n")[0]) message_length_limit: int = self.arguments.get("message_length_limit", 0) - return cz.message(answers, message_length_limit=message_length_limit) + if message_length_limit > 0 and message_len > message_length_limit: + raise CommitMessageLengthExceededError( + f"Length of commit message exceeds limit ({message_len}/{message_length_limit})" + ) + + return message def __call__(self): dry_run: bool = self.arguments.get("dry_run") diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index 9cbfe795db..bd116ceb02 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -9,7 +9,6 @@ from commitizen import git from commitizen.config.base_config import BaseConfig from commitizen.defaults import Questions -from commitizen.exceptions import CommitMessageLengthExceededError class MessageBuilderHook(Protocol): @@ -72,7 +71,7 @@ def questions(self) -> Questions: """Questions regarding the commit message.""" @abstractmethod - def message(self, answers: dict, message_length_limit: int) -> str: + def message(self, answers: dict) -> str: """Format your git message.""" @property @@ -106,12 +105,3 @@ def process_commit(self, commit: str) -> str: If not overwritten, it returns the first line of commit. """ return commit.split("\n")[0] - - def _check_message_length_limit( - self, message: str, message_length_limit: int - ) -> None: - message_len = len(message) - if message_length_limit > 0 and message_len > message_length_limit: - raise CommitMessageLengthExceededError( - f"Length of commit message exceeds limit ({message_len}/{message_length_limit})" - ) diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 50d6e94133..5f693963e7 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -150,7 +150,7 @@ def questions(self) -> Questions: ] return questions - def message(self, answers: dict, message_length_limit: int = 0) -> str: + def message(self, answers: dict) -> str: prefix = answers["prefix"] scope = answers["scope"] subject = answers["subject"] @@ -167,9 +167,9 @@ def message(self, answers: dict, message_length_limit: int = 0) -> str: if footer: footer = f"\n\n{footer}" - message = f"{prefix}{scope}: {subject}" - self._check_message_length_limit(message, message_length_limit) - return f"{message}{body}{footer}" + message = f"{prefix}{scope}: {subject}{body}{footer}" + + return message def example(self) -> str: return ( diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index 0dc5b26794..5c3b4e76b4 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -61,15 +61,12 @@ def __init__(self, config: BaseConfig): def questions(self) -> Questions: return self.custom_settings.get("questions", [{}]) - def message(self, answers: dict, message_length_limit: int = 0) -> str: + def message(self, answers: dict) -> str: message_template = Template(self.custom_settings.get("message_template", "")) - message: str = ( - message_template.substitute(**answers) # type: ignore - if getattr(Template, "substitute", None) - else message_template.render(**answers) - ) - self._check_message_length_limit(message, message_length_limit) - return message + if getattr(Template, "substitute", None): + return message_template.substitute(**answers) # type: ignore + else: + return message_template.render(**answers) def example(self) -> str | None: return self.custom_settings.get("example") diff --git a/commitizen/cz/jira/jira.py b/commitizen/cz/jira/jira.py index 6a727f78ed..b8fd056a71 100644 --- a/commitizen/cz/jira/jira.py +++ b/commitizen/cz/jira/jira.py @@ -44,8 +44,8 @@ def questions(self) -> Questions: ] return questions - def message(self, answers: dict, message_length_limit: int = 0) -> str: - message = " ".join( + def message(self, answers: dict) -> str: + return " ".join( filter( bool, [ @@ -57,8 +57,6 @@ def message(self, answers: dict, message_length_limit: int = 0) -> str: ], ) ) - self._check_message_length_limit(message, message_length_limit) - return message def example(self) -> str: return ( diff --git a/commitizen/exceptions.py b/commitizen/exceptions.py index bcdd0d1e3c..b0fc4e382d 100644 --- a/commitizen/exceptions.py +++ b/commitizen/exceptions.py @@ -206,3 +206,4 @@ class ConfigFileIsEmpty(CommitizenException): class CommitMessageLengthExceededError(CommitizenException): exit_code = ExitCode.COMMIT_MESSAGE_LENGTH_LIMIT_EXCEEDED + message = "Length of commit message exceeds the given limit." diff --git a/docs/commit.md b/docs/commit.md index fe6fb415c4..7e3c6268ca 100644 --- a/docs/commit.md +++ b/docs/commit.md @@ -44,5 +44,6 @@ An exception would be raised when the message length exceeds the limit. For example, `cz commit -l 72` will limit the length of commit messages to 72 characters. By default the limit is set to 0, which means no limit on the length. -Note that for `ConventionalCommitsCz`, the limit applies only from the prefix to the subject. -In other words, everything after the first line (the body and the footer) are not counted in the length. +Note that the limit applies only to the first line of message. +Specifically, for `ConventionalCommitsCz` the length only counts from the type of change to the subject, +while the body and the footer are not counted. diff --git a/docs/customization.md b/docs/customization.md index e7832e319f..1fd1826e03 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -227,11 +227,9 @@ class JiraCz(BaseCommitizen): ] return questions - def message(self, answers: dict, message_length_limit: int = 0) -> str: + def message(self, answers: dict) -> str: """Generate the message with the given answers.""" - message = "{0} (#{1})".format(answers["title"], answers["issue"]) - self._check_message_length_limit(message, message_length_limit) - return message + return "{0} (#{1})".format(answers["title"], answers["issue"]) def example(self) -> str: """Provide an example to help understand the style (OPTIONAL) diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index 1930b2eaee..0e0a12751a 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -9,6 +9,7 @@ from commitizen.cz.utils import get_backup_file_path from commitizen.exceptions import ( CommitError, + CommitMessageLengthExceededError, CustomError, DryRunExit, NoAnswersError, @@ -379,3 +380,29 @@ def test_commit_command_with_extra_args(config, mocker: MockFixture): commands.Commit(config, {"extra_cli_args": "-- -extra-args1 -extra-arg2"})() commit_mock.assert_called_once_with(ANY, args="-- -extra-args1 -extra-arg2") success_mock.assert_called_once() + + +@pytest.mark.usefixtures("staging_is_clean") +def test_commit_command_with_message_length_limit(config, mocker: MockFixture): + prompt_mock = mocker.patch("questionary.prompt") + prefix = "feat" + subject = "random subject" + message_length = len(prefix) + len(": ") + len(subject) + prompt_mock.return_value = { + "prefix": prefix, + "subject": subject, + "scope": "", + "is_breaking_change": False, + "body": "random body", + "footer": "random footer", + } + + commit_mock = mocker.patch("commitizen.git.commit") + commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) + success_mock = mocker.patch("commitizen.out.success") + + commands.Commit(config, {"message_length_limit": message_length})() + success_mock.assert_called_once() + + with pytest.raises(CommitMessageLengthExceededError): + commands.Commit(config, {"message_length_limit": message_length - 1})() diff --git a/tests/conftest.py b/tests/conftest.py index 0431a39556..76d2e53fb7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -204,12 +204,10 @@ def questions(self) -> list: }, ] - def message(self, answers: dict, message_length_limit: int = 0) -> str: + def message(self, answers: dict) -> str: prefix = answers["prefix"] subject = answers.get("subject", "default message").trim() - message = f"{prefix}: {subject}" - self._check_message_length_limit(message, message_length_limit) - return message + return f"{prefix}: {subject}" @pytest.fixture() @@ -222,7 +220,7 @@ class MockPlugin(BaseCommitizen): def questions(self) -> defaults.Questions: return [] - def message(self, answers: dict, message_length_limit: int = 0) -> str: + def message(self, answers: dict) -> str: return "" diff --git a/tests/test_cz_base.py b/tests/test_cz_base.py index 3b903d80b8..4ee1cc6eda 100644 --- a/tests/test_cz_base.py +++ b/tests/test_cz_base.py @@ -1,17 +1,14 @@ import pytest from commitizen.cz.base import BaseCommitizen -from commitizen.exceptions import CommitMessageLengthExceededError class DummyCz(BaseCommitizen): def questions(self): return [{"type": "input", "name": "commit", "message": "Initial commit:\n"}] - def message(self, answers: dict, message_length_limit: int = 0): - message = answers["commit"] - self._check_message_length_limit(message, message_length_limit) - return message + def message(self, answers: dict): + return answers["commit"] def test_base_raises_error(config): @@ -51,16 +48,3 @@ def test_process_commit(config): cz = DummyCz(config) message = cz.process_commit("test(test_scope): this is test msg") assert message == "test(test_scope): this is test msg" - - -def test_message_length_limit(config): - cz = DummyCz(config) - commit_message = "123456789" - message_length = len(commit_message) - assert cz.message({"commit": commit_message}) == commit_message - assert ( - cz.message({"commit": commit_message}, message_length_limit=message_length) - == commit_message - ) - with pytest.raises(CommitMessageLengthExceededError): - cz.message({"commit": commit_message}, message_length_limit=message_length - 1) From 83cf451c1489a326fd76bb7af3adc3e6f4669c80 Mon Sep 17 00:00:00 2001 From: Yu-Sheng Li <kevin1kevin1k@gmail.com> Date: Fri, 26 Apr 2024 16:45:19 +0800 Subject: [PATCH 238/685] fix: strip the commit message for calculating length --- commitizen/commands/commit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 15f2cc903c..7a2a01c9cb 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -64,7 +64,7 @@ def prompt_commit_questions(self) -> str: raise NoAnswersError() message = cz.message(answers) - message_len = len(message.partition("\n")[0]) + message_len = len(message.partition("\n")[0].strip()) message_length_limit: int = self.arguments.get("message_length_limit", 0) if message_length_limit > 0 and message_len > message_length_limit: raise CommitMessageLengthExceededError( From 799dc6d2cc1496ef8f9883925e8870481c86dd7c Mon Sep 17 00:00:00 2001 From: Yu-Sheng Li <kevin1kevin1k@gmail.com> Date: Fri, 26 Apr 2024 16:46:41 +0800 Subject: [PATCH 239/685] docs: emphasize the note on commit message length calculation --- docs/commit.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/commit.md b/docs/commit.md index 7e3c6268ca..2c1b94f63e 100644 --- a/docs/commit.md +++ b/docs/commit.md @@ -44,6 +44,6 @@ An exception would be raised when the message length exceeds the limit. For example, `cz commit -l 72` will limit the length of commit messages to 72 characters. By default the limit is set to 0, which means no limit on the length. -Note that the limit applies only to the first line of message. +**Note that the limit applies only to the first line of the message.** Specifically, for `ConventionalCommitsCz` the length only counts from the type of change to the subject, while the body and the footer are not counted. From 106c294b1ee241eadf0a940a27425ccef8044c92 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Mon, 29 Apr 2024 10:05:20 +0800 Subject: [PATCH 240/685] refactor(commands/commit): replace comparison with chained comparison --- commitizen/commands/commit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 7a2a01c9cb..df28b2a5dd 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -66,7 +66,7 @@ def prompt_commit_questions(self) -> str: message = cz.message(answers) message_len = len(message.partition("\n")[0].strip()) message_length_limit: int = self.arguments.get("message_length_limit", 0) - if message_length_limit > 0 and message_len > message_length_limit: + if 0 < message_length_limit < message_len: raise CommitMessageLengthExceededError( f"Length of commit message exceeds limit ({message_len}/{message_length_limit})" ) From faff6a61f4f53585a965addd06156eedf0027643 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Tue, 30 Apr 2024 06:50:29 +0000 Subject: [PATCH 241/685] =?UTF-8?q?bump:=20version=203.24.0=20=E2=86=92=20?= =?UTF-8?q?3.25.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 16 ++++++++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7cf5bb5857..be1a106a30 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.24.0 # automatically updated by Commitizen + rev: v3.25.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index aafb47ecc3..d0df802fda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +## v3.25.0 (2024-04-30) + +### Feat + +- add an argument to limit the length of commit message + +### Fix + +- strip the commit message for calculating length +- resolve test error by removing defaults + +### Refactor + +- **commands/commit**: replace comparison with chained comparison +- check the length in Commit instead of Commitizen + ## v3.24.0 (2024-04-18) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 3e6d8c7b73..e1609ca35c 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.24.0" +__version__ = "3.25.0" diff --git a/pyproject.toml b/pyproject.toml index d427aaa0f6..da57effff7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.24.0" +version = "3.25.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.24.0" +version = "3.25.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 26671545a3cc6b044fa5cfa93d31cc569786d933 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 02:01:41 +0000 Subject: [PATCH 242/685] build(deps-dev): bump mkdocs-material from 9.5.20 to 9.5.21 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.20 to 9.5.21. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.20...9.5.21) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 45b7faa212..d25e77ef70 100644 --- a/poetry.lock +++ b/poetry.lock @@ -796,13 +796,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.20" +version = "9.5.21" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.20-py3-none-any.whl", hash = "sha256:ad0094a7597bcb5d0cc3e8e543a10927c2581f7f647b9bb4861600f583180f9b"}, - {file = "mkdocs_material-9.5.20.tar.gz", hash = "sha256:986eef0250d22f70fb06ce0f4eac64cc92bd797a589ec3892ce31fad976fe3da"}, + {file = "mkdocs_material-9.5.21-py3-none-any.whl", hash = "sha256:210e1f179682cd4be17d5c641b2f4559574b9dea2f589c3f0e7c17c5bd1959bc"}, + {file = "mkdocs_material-9.5.21.tar.gz", hash = "sha256:049f82770f40559d3c2aa2259c562ea7257dbb4aaa9624323b5ef27b2d95a450"}, ] [package.dependencies] From 48e5c44d48dfad5651c769842bda288c352cc5e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 02:02:56 +0000 Subject: [PATCH 243/685] build(deps-dev): bump ruff from 0.4.2 to 0.4.3 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.4.2 to 0.4.3. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.2...v0.4.3) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index d25e77ef70..d9cfa4a079 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1478,28 +1478,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.4.2" +version = "0.4.3" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.2-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:8d14dc8953f8af7e003a485ef560bbefa5f8cc1ad994eebb5b12136049bbccc5"}, - {file = "ruff-0.4.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:24016ed18db3dc9786af103ff49c03bdf408ea253f3cb9e3638f39ac9cf2d483"}, - {file = "ruff-0.4.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2e06459042ac841ed510196c350ba35a9b24a643e23db60d79b2db92af0c2b"}, - {file = "ruff-0.4.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3afabaf7ba8e9c485a14ad8f4122feff6b2b93cc53cd4dad2fd24ae35112d5c5"}, - {file = "ruff-0.4.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:799eb468ea6bc54b95527143a4ceaf970d5aa3613050c6cff54c85fda3fde480"}, - {file = "ruff-0.4.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:ec4ba9436a51527fb6931a8839af4c36a5481f8c19e8f5e42c2f7ad3a49f5069"}, - {file = "ruff-0.4.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6a2243f8f434e487c2a010c7252150b1fdf019035130f41b77626f5655c9ca22"}, - {file = "ruff-0.4.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8772130a063f3eebdf7095da00c0b9898bd1774c43b336272c3e98667d4fb8fa"}, - {file = "ruff-0.4.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ab165ef5d72392b4ebb85a8b0fbd321f69832a632e07a74794c0e598e7a8376"}, - {file = "ruff-0.4.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1f32cadf44c2020e75e0c56c3408ed1d32c024766bd41aedef92aa3ca28eef68"}, - {file = "ruff-0.4.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:22e306bf15e09af45ca812bc42fa59b628646fa7c26072555f278994890bc7ac"}, - {file = "ruff-0.4.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:82986bb77ad83a1719c90b9528a9dd663c9206f7c0ab69282af8223566a0c34e"}, - {file = "ruff-0.4.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:652e4ba553e421a6dc2a6d4868bc3b3881311702633eb3672f9f244ded8908cd"}, - {file = "ruff-0.4.2-py3-none-win32.whl", hash = "sha256:7891ee376770ac094da3ad40c116258a381b86c7352552788377c6eb16d784fe"}, - {file = "ruff-0.4.2-py3-none-win_amd64.whl", hash = "sha256:5ec481661fb2fd88a5d6cf1f83403d388ec90f9daaa36e40e2c003de66751798"}, - {file = "ruff-0.4.2-py3-none-win_arm64.whl", hash = "sha256:cbd1e87c71bca14792948c4ccb51ee61c3296e164019d2d484f3eaa2d360dfaf"}, - {file = "ruff-0.4.2.tar.gz", hash = "sha256:33bcc160aee2520664bc0859cfeaebc84bb7323becff3f303b8f1f2d81cb4edc"}, + {file = "ruff-0.4.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b70800c290f14ae6fcbb41bbe201cf62dfca024d124a1f373e76371a007454ce"}, + {file = "ruff-0.4.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:08a0d6a22918ab2552ace96adeaca308833873a4d7d1d587bb1d37bae8728eb3"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba1f14df3c758dd7de5b55fbae7e1c8af238597961e5fb628f3de446c3c40c5"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:819fb06d535cc76dfddbfe8d3068ff602ddeb40e3eacbc90e0d1272bb8d97113"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bfc9e955e6dc6359eb6f82ea150c4f4e82b660e5b58d9a20a0e42ec3bb6342b"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:510a67d232d2ebe983fddea324dbf9d69b71c4d2dfeb8a862f4a127536dd4cfb"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc9ff11cd9a092ee7680a56d21f302bdda14327772cd870d806610a3503d001f"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29efff25bf9ee685c2c8390563a5b5c006a3fee5230d28ea39f4f75f9d0b6f2f"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b00e0bcccf0fc8d7186ed21e311dffd19761cb632241a6e4fe4477cc80ef6e"}, + {file = "ruff-0.4.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:262f5635e2c74d80b7507fbc2fac28fe0d4fef26373bbc62039526f7722bca1b"}, + {file = "ruff-0.4.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7363691198719c26459e08cc17c6a3dac6f592e9ea3d2fa772f4e561b5fe82a3"}, + {file = "ruff-0.4.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:eeb039f8428fcb6725bb63cbae92ad67b0559e68b5d80f840f11914afd8ddf7f"}, + {file = "ruff-0.4.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:927b11c1e4d0727ce1a729eace61cee88a334623ec424c0b1c8fe3e5f9d3c865"}, + {file = "ruff-0.4.3-py3-none-win32.whl", hash = "sha256:25cacda2155778beb0d064e0ec5a3944dcca9c12715f7c4634fd9d93ac33fd30"}, + {file = "ruff-0.4.3-py3-none-win_amd64.whl", hash = "sha256:7a1c3a450bc6539ef00da6c819fb1b76b6b065dec585f91456e7c0d6a0bbc725"}, + {file = "ruff-0.4.3-py3-none-win_arm64.whl", hash = "sha256:71ca5f8ccf1121b95a59649482470c5601c60a416bf189d553955b0338e34614"}, + {file = "ruff-0.4.3.tar.gz", hash = "sha256:ff0a3ef2e3c4b6d133fbedcf9586abfbe38d076041f2dc18ffb2c7e0485d5a07"}, ] [[package]] From 3d705a2236b04a79d66d2e2524914521361bc3c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 02:03:47 +0000 Subject: [PATCH 244/685] build(deps): bump jinja2 from 3.1.3 to 3.1.4 Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/jinja/compare/3.1.3...3.1.4) --- updated-dependencies: - dependency-name: jinja2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index d9cfa4a079..6041e917b3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -584,13 +584,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] From a2295eb9dbc0be4d91857fa61a68ca97e31908d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 01:07:12 +0000 Subject: [PATCH 245/685] build(deps): bump tomlkit from 0.12.4 to 0.12.5 Bumps [tomlkit](https://github.com/sdispater/tomlkit) from 0.12.4 to 0.12.5. - [Release notes](https://github.com/sdispater/tomlkit/releases) - [Changelog](https://github.com/python-poetry/tomlkit/blob/master/CHANGELOG.md) - [Commits](https://github.com/sdispater/tomlkit/compare/0.12.4...0.12.5) --- updated-dependencies: - dependency-name: tomlkit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6041e917b3..2a32316848 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1575,13 +1575,13 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.4" +version = "0.12.5" description = "Style preserving TOML library" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, - {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, + {file = "tomlkit-0.12.5-py3-none-any.whl", hash = "sha256:af914f5a9c59ed9d0762c7b64d3b5d5df007448eb9cd2edc8a46b1eafead172f"}, + {file = "tomlkit-0.12.5.tar.gz", hash = "sha256:eef34fba39834d4d6b73c9ba7f3e4d1c417a4e56f89a7e96e090dd0d24b8fb3c"}, ] [[package]] From 70938a4f65ea8e91e2907248438fb9ace26c695d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 01:28:05 +0000 Subject: [PATCH 246/685] build(deps-dev): bump ruff from 0.4.3 to 0.4.4 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.4.3 to 0.4.4. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.3...v0.4.4) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2a32316848..7a8aa525e1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1478,28 +1478,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.4.3" +version = "0.4.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b70800c290f14ae6fcbb41bbe201cf62dfca024d124a1f373e76371a007454ce"}, - {file = "ruff-0.4.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:08a0d6a22918ab2552ace96adeaca308833873a4d7d1d587bb1d37bae8728eb3"}, - {file = "ruff-0.4.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba1f14df3c758dd7de5b55fbae7e1c8af238597961e5fb628f3de446c3c40c5"}, - {file = "ruff-0.4.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:819fb06d535cc76dfddbfe8d3068ff602ddeb40e3eacbc90e0d1272bb8d97113"}, - {file = "ruff-0.4.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bfc9e955e6dc6359eb6f82ea150c4f4e82b660e5b58d9a20a0e42ec3bb6342b"}, - {file = "ruff-0.4.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:510a67d232d2ebe983fddea324dbf9d69b71c4d2dfeb8a862f4a127536dd4cfb"}, - {file = "ruff-0.4.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc9ff11cd9a092ee7680a56d21f302bdda14327772cd870d806610a3503d001f"}, - {file = "ruff-0.4.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29efff25bf9ee685c2c8390563a5b5c006a3fee5230d28ea39f4f75f9d0b6f2f"}, - {file = "ruff-0.4.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b00e0bcccf0fc8d7186ed21e311dffd19761cb632241a6e4fe4477cc80ef6e"}, - {file = "ruff-0.4.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:262f5635e2c74d80b7507fbc2fac28fe0d4fef26373bbc62039526f7722bca1b"}, - {file = "ruff-0.4.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7363691198719c26459e08cc17c6a3dac6f592e9ea3d2fa772f4e561b5fe82a3"}, - {file = "ruff-0.4.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:eeb039f8428fcb6725bb63cbae92ad67b0559e68b5d80f840f11914afd8ddf7f"}, - {file = "ruff-0.4.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:927b11c1e4d0727ce1a729eace61cee88a334623ec424c0b1c8fe3e5f9d3c865"}, - {file = "ruff-0.4.3-py3-none-win32.whl", hash = "sha256:25cacda2155778beb0d064e0ec5a3944dcca9c12715f7c4634fd9d93ac33fd30"}, - {file = "ruff-0.4.3-py3-none-win_amd64.whl", hash = "sha256:7a1c3a450bc6539ef00da6c819fb1b76b6b065dec585f91456e7c0d6a0bbc725"}, - {file = "ruff-0.4.3-py3-none-win_arm64.whl", hash = "sha256:71ca5f8ccf1121b95a59649482470c5601c60a416bf189d553955b0338e34614"}, - {file = "ruff-0.4.3.tar.gz", hash = "sha256:ff0a3ef2e3c4b6d133fbedcf9586abfbe38d076041f2dc18ffb2c7e0485d5a07"}, + {file = "ruff-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:29d44ef5bb6a08e235c8249294fa8d431adc1426bfda99ed493119e6f9ea1bf6"}, + {file = "ruff-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c4efe62b5bbb24178c950732ddd40712b878a9b96b1d02b0ff0b08a090cbd891"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c8e2f1e8fc12d07ab521a9005d68a969e167b589cbcaee354cb61e9d9de9c15"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:60ed88b636a463214905c002fa3eaab19795679ed55529f91e488db3fe8976ab"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b90fc5e170fc71c712cc4d9ab0e24ea505c6a9e4ebf346787a67e691dfb72e85"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:8e7e6ebc10ef16dcdc77fd5557ee60647512b400e4a60bdc4849468f076f6eef"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9ddb2c494fb79fc208cd15ffe08f32b7682519e067413dbaf5f4b01a6087bcd"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c51c928a14f9f0a871082603e25a1588059b7e08a920f2f9fa7157b5bf08cfe9"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5eb0a4bfd6400b7d07c09a7725e1a98c3b838be557fee229ac0f84d9aa49c36"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b1867ee9bf3acc21778dcb293db504692eda5f7a11a6e6cc40890182a9f9e595"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1aecced1269481ef2894cc495647392a34b0bf3e28ff53ed95a385b13aa45768"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9da73eb616b3241a307b837f32756dc20a0b07e2bcb694fec73699c93d04a69e"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:958b4ea5589706a81065e2a776237de2ecc3e763342e5cc8e02a4a4d8a5e6f95"}, + {file = "ruff-0.4.4-py3-none-win32.whl", hash = "sha256:cb53473849f011bca6e754f2cdf47cafc9c4f4ff4570003a0dad0b9b6890e876"}, + {file = "ruff-0.4.4-py3-none-win_amd64.whl", hash = "sha256:424e5b72597482543b684c11def82669cc6b395aa8cc69acc1858b5ef3e5daae"}, + {file = "ruff-0.4.4-py3-none-win_arm64.whl", hash = "sha256:39df0537b47d3b597293edbb95baf54ff5b49589eb7ff41926d8243caa995ea6"}, + {file = "ruff-0.4.4.tar.gz", hash = "sha256:f87ea42d5cdebdc6a69761a9d0bc83ae9b3b30d0ad78952005ba6568d6c022af"}, ] [[package]] From 01aaf35e1677dc8e0fbd3503d72049297fef9cde Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 01:34:13 +0000 Subject: [PATCH 247/685] build(deps-dev): bump mkdocs-material from 9.5.21 to 9.5.22 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.21 to 9.5.22. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.21...9.5.22) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7a8aa525e1..7d7f8e43d8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -796,13 +796,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.21" +version = "9.5.22" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.21-py3-none-any.whl", hash = "sha256:210e1f179682cd4be17d5c641b2f4559574b9dea2f589c3f0e7c17c5bd1959bc"}, - {file = "mkdocs_material-9.5.21.tar.gz", hash = "sha256:049f82770f40559d3c2aa2259c562ea7257dbb4aaa9624323b5ef27b2d95a450"}, + {file = "mkdocs_material-9.5.22-py3-none-any.whl", hash = "sha256:8c7a377d323567934e6cd46915e64dc209efceaec0dec1cf2202184f5649862c"}, + {file = "mkdocs_material-9.5.22.tar.gz", hash = "sha256:22a853a456ae8c581c4628159574d6fc7c71b2c7569dc9c3a82cc70432219599"}, ] [package.dependencies] From 4bd2525a42310d5896db3fb244a7bbe36e9e496f Mon Sep 17 00:00:00 2001 From: Norwid Behrnd <nbehrnd@yahoo.com> Date: Tue, 14 May 2024 13:22:36 +0200 Subject: [PATCH 248/685] refactor: strip possessive from note about ci option A description of the commit option affecting the ci does not require a "our", nor "your". It doesn't relate to "a local" vs. "a remote repository", either. To ease conveying the intent,[1] the possessive is removed. [1] https://github.com/commitizen-tools/commitizen/issues/1095 Signed-off-by: Norwid Behrnd <nbehrnd@yahoo.com> --- commitizen/cz/conventional_commits/conventional_commits.py | 2 +- docs/images/commit.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 5f693963e7..dcfd7bab89 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -102,7 +102,7 @@ def questions(self) -> Questions: { "value": "ci", "name": ( - "ci: Changes to our CI configuration files and " + "ci: Changes to CI configuration files and " "scripts (example scopes: GitLabCI)" ), "key": "c", diff --git a/docs/images/commit.yml b/docs/images/commit.yml index a239bc3aab..fd10ed777f 100644 --- a/docs/images/commit.yml +++ b/docs/images/commit.yml @@ -136,9 +136,9 @@ records: - delay: 209 content: "\e[?1l\e[6n" - delay: 7 - content: "\e[?2004h\e[?25l\e[0m\e[?7l\e[0m\e[J\e[0;38;5;67m?\e[0;1m Select the type of change you are committing \e[0m (Use arrow keys) \r\e[100C \e[0m\r\r\n\e[0m » fix: A bug fix. Correlates with PATCH in SemVer\e[0m\r\r\n\e[0m feat: A new feature. Correlates with MINOR in SemVer\e[0m\r\r\n\e[0m docs: Documentation only changes\e[0m\r\r\n\e[0m style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-\r\e[100Cc\e[0m\r\r\n\e[0m refactor: A code change that neither fixes a bug nor adds a feature\e[0m\r\r\n\e[0m perf: A code change that improves performance\e[0m\r\r\n\e[0m test: Adding missing or correcting existing tests\e[0m\r\r\n\e[0m build: Changes that affect the build system or external dependencies (example scopes: pip, docker\r\e[100C,\e[0m\r\r\n\e[0m ci: Changes to our CI configuration files and scripts (example scopes: GitLabCI) \r\e[100C \r\e[9A\e[64C\e[?7h\e[0m\e[?12l\e[?25h" + content: "\e[?2004h\e[?25l\e[0m\e[?7l\e[0m\e[J\e[0;38;5;67m?\e[0;1m Select the type of change you are committing \e[0m (Use arrow keys) \r\e[100C \e[0m\r\r\n\e[0m » fix: A bug fix. Correlates with PATCH in SemVer\e[0m\r\r\n\e[0m feat: A new feature. Correlates with MINOR in SemVer\e[0m\r\r\n\e[0m docs: Documentation only changes\e[0m\r\r\n\e[0m style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-\r\e[100Cc\e[0m\r\r\n\e[0m refactor: A code change that neither fixes a bug nor adds a feature\e[0m\r\r\n\e[0m perf: A code change that improves performance\e[0m\r\r\n\e[0m test: Adding missing or correcting existing tests\e[0m\r\r\n\e[0m build: Changes that affect the build system or external dependencies (example scopes: pip, docker\r\e[100C,\e[0m\r\r\n\e[0m ci: Changes to CI configuration files and scripts (example scopes: GitLabCI) \r\e[100C \r\e[9A\e[64C\e[?7h\e[0m\e[?12l\e[?25h" - delay: 17 - content: "\e[?25l\e[?7l\e[0m\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\e[0m ci: Changes to our CI configuration files and scripts (example scopes: GitLabCI)\e[0m\e[K\e[0m\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\e[0m \r\e[100C \r\e[19A\e[64C\e[?7h\e[0m\e[?12l\e[?25h" + content: "\e[?25l\e[?7l\e[0m\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\e[0m ci: Changes to CI configuration files and scripts (example scopes: GitLabCI)\e[0m\e[K\e[0m\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\r\r\n\e[0m \r\e[100C \r\e[19A\e[64C\e[?7h\e[0m\e[?12l\e[?25h" - delay: 647 content: "\e[?25l\e[?7l\e[0m\r\r\n\e[0m \e[0m\r\r\n\e[0m » \e[2A\e[61C\e[?7h\e[0m\e[?12l\e[?25h" - delay: 574 From 9d17f393228f6c60793b4929d910e3b1f0fcb1ad Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 02:32:09 +0000 Subject: [PATCH 249/685] =?UTF-8?q?bump:=20version=203.25.0=20=E2=86=92=20?= =?UTF-8?q?3.25.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index be1a106a30..a795a9300e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.25.0 # automatically updated by Commitizen + rev: v3.25.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index d0df802fda..f10a35b917 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.25.1 (2024-05-15) + +### Refactor + +- strip possessive from note about ci option + ## v3.25.0 (2024-04-30) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index e1609ca35c..1d3669f91a 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.25.0" +__version__ = "3.25.1" diff --git a/pyproject.toml b/pyproject.toml index da57effff7..d17a8e63c7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.25.0" +version = "3.25.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.25.0" +version = "3.25.1" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 9308cd7fd65c0fd1dab9c14095acde707320f8a5 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Thu, 25 Apr 2024 23:28:20 +0800 Subject: [PATCH 250/685] docs: fix missing links, reorganize documentation and replace command help messages with images --- docs/README.md | 2 +- docs/{ => commands}/bump.md | 66 ++----------------- docs/{ => commands}/changelog.md | 34 ++-------- docs/{ => commands}/check.md | 6 +- docs/{ => commands}/commit.md | 7 +- docs/{ => commands}/init.md | 8 ++- docs/config.md | 22 +++---- docs/contributing.md | 2 +- docs/customization.md | 4 +- docs/getting_started.md | 8 +-- docs/tutorials/auto_prepare_commit_message.md | 2 +- docs/tutorials/gitlab_ci.md | 2 +- mkdocs.yml | 10 +-- 13 files changed, 53 insertions(+), 120 deletions(-) rename docs/{ => commands}/bump.md (83%) rename docs/{ => commands}/changelog.md (76%) rename docs/{ => commands}/check.md (89%) rename docs/{ => commands}/commit.md (91%) rename docs/{ => commands}/init.md (86%) diff --git a/docs/README.md b/docs/README.md index 8c7dc51e48..b4fa13eb2c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -32,7 +32,7 @@ descriptive commits. ### Features - Command-line utility to create commits with your rules. Defaults: [Conventional commits][conventional_commits] -- Bump version automatically using [semantic versioning][semver] based on the commits. [Read More](./bump.md) +- Bump version automatically using [semantic versioning][semver] based on the commits. [Read More](./commands/bump.md) - Generate a changelog using [Keep a changelog][keepchangelog] - Update your project's version files automatically - Display information about your commit rules (commands: schema, example, info) diff --git a/docs/bump.md b/docs/commands/bump.md similarity index 83% rename from docs/bump.md rename to docs/commands/bump.md index 6dad38219e..5f5590e885 100644 --- a/docs/bump.md +++ b/docs/commands/bump.md @@ -1,4 +1,4 @@ -![Bump version](images/bump.gif) +![Bump version](../images/bump.gif) ## About @@ -50,60 +50,8 @@ Some examples of pep440: ## Usage -```bash -$ cz bump --help -usage: cz bump [-h] [--dry-run] [--files-only] [--local-version] [--changelog] [--no-verify] [--yes] [--tag-format TAG_FORMAT] - [--bump-message BUMP_MESSAGE] [--prerelease {alpha,beta,rc}] [--devrelease DEVRELEASE] [--increment {MAJOR,MINOR,PATCH}] - [--check-consistency] [--annotated-tag] [--gpg-sign] [--changelog-to-stdout] [--git-output-to-stderr] [--retry] [--major-version-zero] - [--prerelease-offset PRERELEASE_OFFSET] [--version-scheme {pep440,semver,semver2}] [--version-type {pep440,semver,semver2}] [--build-metadata BUILD_METADATA] - [MANUAL_VERSION] - -positional arguments: - MANUAL_VERSION bump to the given version (e.g: 1.5.3) - -options: - -h, --help show this help message and exit - --dry-run show output to stdout, no commit, no modified files - --files-only bump version in the files from the config - --local-version bump only the local version portion - --changelog, -ch generate the changelog for the newest version - --no-verify this option bypasses the pre-commit and commit-msg hooks - --yes accept automatically questions done - --tag-format TAG_FORMAT - the format used to tag the commit and read it, use it in existing projects, wrap around simple quotes - --bump-message BUMP_MESSAGE - template used to create the release commit, useful when working with CI - --prerelease {alpha,beta,rc}, -pr {alpha,beta,rc} - choose type of prerelease - --devrelease DEVRELEASE, -d DEVRELEASE - specify non-negative integer for dev. release - --increment {MAJOR,MINOR,PATCH} - manually specify the desired increment - --increment-mode - set the method by which the new version is chosen. 'linear' (default) guesses the next version based - on typical linear version progression, such that bumping of a pre-release with lower precedence than - the current pre-release phase maintains the current phase of higher precedence. 'exact' applies the - changes that have been specified (or determined from the commit log) without interpretation, such that - the increment and pre-release are always honored - --check-consistency, -cc - check consistency among versions defined in commitizen configuration and version_files - --annotated-tag, -at create annotated tag instead of lightweight one - --gpg-sign, -s sign tag instead of lightweight one - --changelog-to-stdout - Output changelog to the stdout - --git-output-to-stderr - Redirect git output to stderr - --retry retry commit if it fails the 1st time - --major-version-zero keep major version at zero, even for breaking changes - --prerelease-offset PRERELEASE_OFFSET - start pre-releases with this offset - --version-scheme {pep440,semver,semver2} - choose version scheme - --version-type {pep440,semver,semver2} - Deprecated, use --version-scheme - --build-metadata {BUILD_METADATA} - additional metadata in the version string -``` +![cz bump --help](../images/cli_help/cz_bump___help.svg) + ### `--files-only` @@ -306,7 +254,7 @@ Yes, you shouldn't have any issues. ### `--template` Provides your own changelog jinja template. -See [the template customization section](customization.md#customizing-the-changelog-template) +See [the template customization section](../customization.md#customizing-the-changelog-template) ### `--extra` @@ -316,7 +264,7 @@ Provides your own changelog extra variables by using the `extras` settings or th cz bump --changelog --extra key=value -e short="quoted value" ``` -See [the template customization section](customization.md#customizing-the-changelog-template). +See [the template customization section](../customization.md#customizing-the-changelog-template). ### `--build-metadata` @@ -388,7 +336,7 @@ cz --no-raise 3,4,5 ### Longer way -Check the list of [exit_codes](./exit_codes.md) and understand which one you have +Check the list of [exit_codes](../exit_codes.md) and understand which one you have to skip and why. Remember to document somewhere this, because you'll forget. @@ -637,7 +585,7 @@ version_scheme = "semver" ## Custom bump -Read the [customizing section](./customization.md). +Read the [customizing section](../customization.md). [pep440]: https://www.python.org/dev/peps/pep-0440/ [semver]: https://semver.org/ diff --git a/docs/changelog.md b/docs/commands/changelog.md similarity index 76% rename from docs/changelog.md rename to docs/commands/changelog.md index 029882c12b..cbf22b15a7 100644 --- a/docs/changelog.md +++ b/docs/commands/changelog.md @@ -11,33 +11,7 @@ update_changelog_on_bump = true ## Usage -```bash -$ cz changelog --help -usage: cz changelog [-h] [--dry-run] [--file-name FILE_NAME] [--unreleased-version UNRELEASED_VERSION] [--incremental] [--start-rev START_REV] - [--template TEMPLATE] [--extra EXTRA] - [rev_range] - -positional arguments: - rev_range generates changelog for the given version (e.g: 1.5.3) or version range (e.g: 1.5.3..1.7.9) - -optional arguments: - -h, --help show this help message and exit - --dry-run show changelog to stdout - --file-name FILE_NAME - file name of changelog (default: 'CHANGELOG.md') - --unreleased-version UNRELEASED_VERSION - set the value for the new version (use the tag value), instead of using unreleased - --incremental generates changelog from last created version, useful if the changelog has been manually modified - --start-rev START_REV - start rev of the changelog. If not set, it will generate changelog from the start - --merge-prerelease - collect all changes from prereleases into next non-prerelease. If not set, it will include prereleases in the changelog - start rev of the changelog.If not set, it will generate changelog from the start - --template TEMPLATE, -t TEMPLATE - changelog template file name (relative to the current working directory) - --extra EXTRA, -e EXTRA - a changelog extra variable (in the form 'key=value') -``` +![cz changelog --help](../images/cli_help/cz_changelog___help.svg) ### Examples @@ -195,7 +169,7 @@ changelog_merge_prerelease = true ### `template` Provides your own changelog jinja template by using the `template` settings or the `--template` parameter. -See [the template customization section](customization.md#customizing-the-changelog-template) +See [the template customization section](../customization.md#customizing-the-changelog-template) ### `extras` @@ -205,7 +179,7 @@ Provides your own changelog extra variables by using the `extras` settings or th cz changelog --extra key=value -e short="quoted value" ``` -See [the template customization section](customization.md#customizing-the-changelog-template) +See [the template customization section](../customization.md#customizing-the-changelog-template) ## Hooks @@ -218,4 +192,4 @@ Read more about hooks in the [customization page][customization] [keepachangelog]: https://keepachangelog.com/ [semver]: https://semver.org/ -[customization]: ./customization.md +[customization]: ../customization.md diff --git a/docs/check.md b/docs/commands/check.md similarity index 89% rename from docs/check.md rename to docs/commands/check.md index 1cd42c74a9..c31fd085ee 100644 --- a/docs/check.md +++ b/docs/commands/check.md @@ -5,10 +5,12 @@ This feature checks whether the commit message follows the given committing rules. And comment in git message will be ignored. If you want to setup an automatic check before every git commit, please refer to -[Automatically check message before commit](./tutorials/auto_check.md). +[Automatically check message before commit](../tutorials/auto_check.md). ## Usage +![cz check --help](../images/cli_help/cz_check___help.svg) + There are three mutually exclusive ways to use `cz check`: - with `--rev-range` to check a range of pre-existing commits @@ -54,7 +56,7 @@ $ cz check --commit-msg-file COMMIT_MSG_FILE ``` In this option, COMMIT_MSG_FILE is the path of the temporal file that contains the commit message. -This argument can be useful when cooperating with git hook, please check [Automatically check message before commit](./tutorials/auto_check.md) for more information about how to use this argument with git hook. +This argument can be useful when cooperating with git hook, please check [Automatically check message before commit](../tutorials/auto_check.md) for more information about how to use this argument with git hook. ### Allow Abort diff --git a/docs/commit.md b/docs/commands/commit.md similarity index 91% rename from docs/commit.md rename to docs/commands/commit.md index 2c1b94f63e..7760a2b88e 100644 --- a/docs/commit.md +++ b/docs/commands/commit.md @@ -1,4 +1,4 @@ -![Using commitizen cli](images/demo.gif) +![Using commitizen cli](../images/demo.gif) ## About @@ -7,13 +7,16 @@ In your terminal run `cz commit` or the shortcut `cz c` to generate a guided git You can run `cz commit --write-message-to-file COMMIT_MSG_FILE` to additionally save the generated message to a file. This can be combined with the `--dry-run` flag to only write the message to a file and not modify files and create a commit. A possible use -case for this is to [automatically prepare a commit message](./tutorials/auto_prepare_commit_message.md). +case for this is to [automatically prepare a commit message](../tutorials/auto_prepare_commit_message.md). !!! note To maintain platform compatibility, the `commit` command disable ANSI escaping in its output. In particular pre-commit hooks coloring will be deactivated as discussed in [commitizen-tools/commitizen#417](https://github.com/commitizen-tools/commitizen/issues/417). +## Usage + +![cz commit --help](../images/cli_help/cz_commit___help.svg) ### git options diff --git a/docs/init.md b/docs/commands/init.md similarity index 86% rename from docs/init.md rename to docs/commands/init.md index 778a79f529..01e1db6be8 100644 --- a/docs/init.md +++ b/docs/commands/init.md @@ -1,4 +1,8 @@ -![Bump version](images/init.gif) +## Usage + +![cz init --help](../images/cli_help/cz_init___help.svg) + +## Example To start using commitizen, the recommended approach is to run @@ -6,6 +10,8 @@ To start using commitizen, the recommended approach is to run cz init ``` +![init](../images/init.gif) + This command will ask you for information about the project and will configure the selected file type (`pyproject.toml`, `.cz.toml`, etc.). diff --git a/docs/config.md b/docs/config.md index 7ef8644fa2..398c045339 100644 --- a/docs/config.md +++ b/docs/config.md @@ -384,17 +384,17 @@ setup( ) ``` -[version_files]: bump.md#version_files -[tag_format]: bump.md#tag_format -[bump_message]: bump.md#bump_message -[major-version-zero]: bump.md#-major-version-zero -[prerelease-offset]: bump.md#-prerelease_offset -[retry_after_failure]: commit.md#retry -[allow_abort]: check.md#allow-abort -[version-scheme]: bump.md#version-scheme -[pre_bump_hooks]: bump.md#pre_bump_hooks -[post_bump_hooks]: bump.md#post_bump_hooks -[allowed_prefixes]: check.md#allowed-prefixes +[version_files]: commands/bump.md#version_files +[tag_format]: commands/bump.md#tag_format +[bump_message]: commands/bump.md#bump_message +[major-version-zero]: commands/bump.md#-major-version-zero +[prerelease-offset]: commands/bump.md#-prerelease_offset +[retry_after_failure]: commands/commit.md#retry +[allow_abort]: commands/check.md#allow-abort +[version-scheme]: commands/bump.md#version-scheme +[pre_bump_hooks]: commands/bump.md#pre_bump_hooks +[post_bump_hooks]: commands/bump.md#post_bump_hooks +[allowed_prefixes]: commands/check.md#allowed-prefixes [additional-features]: https://github.com/tmbo/questionary#additional-features [customization]: customization.md [shortcuts]: customization.md#shortcut-keys diff --git a/docs/contributing.md b/docs/contributing.md index 77ee1f44fe..a41843d753 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -105,4 +105,4 @@ flowchart TD ``` -[conventional-commmits]: https://www.conventionalcommits.org/ +[conventional-commits]: https://www.conventionalcommits.org/ diff --git a/docs/customization.md b/docs/customization.md index 1fd1826e03..e8f233fce1 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -193,7 +193,7 @@ The basic steps are: 3. Create a python package using `setup.py`, `poetry`, etc 4. Expose the class as a `commitizen.plugin` entrypoint -Check an [example](convcomms) on how to configure `BaseCommitizen`. +Check an [example][convcomms] on how to configure `BaseCommitizen`. You can also automate the steps above through [cookiecutter](https://cookiecutter.readthedocs.io/en/1.7.0/). @@ -372,7 +372,7 @@ class StrangeCommitizen(BaseCommitizen): return full_changelog ``` -[changelog-des]: ./changelog.md#description +[changelog-des]: ./commands/changelog.md#description ### Raise Customize Exception diff --git a/docs/getting_started.md b/docs/getting_started.md index e826a5e424..7ceba2bb65 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -27,10 +27,10 @@ cz bump This command will bump your project's version, and it will create a tag. Because of the setting `update_changelog_on_bump`, bump will also create the **changelog**. -You can also [update files](./bump.md#version_files). -You can configure the [version scheme](./bump.md#version_scheme) and [version provider](./config.md#version-providers). +You can also [update files](./commands/bump.md#version_files). +You can configure the [version scheme](./commands/bump.md#version_scheme) and [version provider](./config.md#version-providers). -There are many more options available, please read the docs for the [bump command](./bump.md). +There are many more options available, please read the docs for the [bump command](./commands/bump.md). ### Committing @@ -116,4 +116,4 @@ Note that pre-commit discourages using `master` as a revision, and the above com pre-commit autoupdate ``` -Read more about the `check` command [here](check.md). +Read more about the `check` command [here](commands/check.md). diff --git a/docs/tutorials/auto_prepare_commit_message.md b/docs/tutorials/auto_prepare_commit_message.md index 80a1b211d7..3011142679 100644 --- a/docs/tutorials/auto_prepare_commit_message.md +++ b/docs/tutorials/auto_prepare_commit_message.md @@ -7,7 +7,7 @@ squash) so that the complete git history adheres to the commit message conventio without ever having to call `cz commit`. To automatically prepare a commit message prior to committing, you can -use a [prepare-commit-msg Git hook](prepare-commit-msg-docs): +use a [prepare-commit-msg Git hook][prepare-commit-msg-docs]: > This hook is invoked by git-commit right after preparing the > default log message, and before the editor is started. diff --git a/docs/tutorials/gitlab_ci.md b/docs/tutorials/gitlab_ci.md index 7b6e2032df..de1336b675 100644 --- a/docs/tutorials/gitlab_ci.md +++ b/docs/tutorials/gitlab_ci.md @@ -10,7 +10,7 @@ _Goal_: Bump a new version every time that a change occurs on the `master` branc 2. A developer creates a merge request (MR) against `master` branch 3. When the `MR` is merged into master, the 2 stages of the CI are executed 4. For simplification, we store the software version in a file called `VERSION`. You can use any file that you want as `commitizen` supports it. -5. The commit message executed automatically by the `CI` must include `[skip-ci]` in the message; otherwise, the process will generate a loop. You can define the message structure in [commitizen](../bump.md) as well. +5. The commit message executed automatically by the `CI` must include `[skip-ci]` in the message; otherwise, the process will generate a loop. You can define the message structure in [commitizen](../commands/bump.md) as well. ### Gitlab Configuration diff --git a/mkdocs.yml b/mkdocs.yml index 1f76605153..f80e427981 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -33,11 +33,11 @@ nav: - Introduction: "README.md" - Getting Started: "getting_started.md" - Commands: - - Init: "init.md" - - Commit: "commit.md" - - Bump: "bump.md" - - Check: "check.md" - - Changelog: "changelog.md" + - Init: "commands/init.md" + - Commit: "commands/commit.md" + - Bump: "commands/bump.md" + - Check: "commands/check.md" + - Changelog: "commands/changelog.md" - Configuration: "config.md" - Customization: "customization.md" - Tutorials: From 3e57007bf1f882a6ed34717c68d3a265e16dcf7a Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Thu, 25 Apr 2024 23:44:51 +0800 Subject: [PATCH 251/685] docs: initial documentation for undocumented commands --- docs/commands/example.md | 5 +++++ docs/commands/info.md | 5 +++++ docs/commands/ls.md | 3 +++ docs/commands/schema.md | 5 +++++ docs/commands/version.md | 5 +++++ mkdocs.yml | 15 ++++++++++----- 6 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 docs/commands/example.md create mode 100644 docs/commands/info.md create mode 100644 docs/commands/ls.md create mode 100644 docs/commands/schema.md create mode 100644 docs/commands/version.md diff --git a/docs/commands/example.md b/docs/commands/example.md new file mode 100644 index 0000000000..8243453916 --- /dev/null +++ b/docs/commands/example.md @@ -0,0 +1,5 @@ +Show commit example + +## Usage + +![cz example --help](../images/cli_help/cz_example___help.svg) diff --git a/docs/commands/info.md b/docs/commands/info.md new file mode 100644 index 0000000000..5f816ba88d --- /dev/null +++ b/docs/commands/info.md @@ -0,0 +1,5 @@ +Show information about the cz + +## Usage + +![cz info --help](../images/cli_help/cz_info___help.svg) diff --git a/docs/commands/ls.md b/docs/commands/ls.md new file mode 100644 index 0000000000..f255ca5444 --- /dev/null +++ b/docs/commands/ls.md @@ -0,0 +1,3 @@ +## Usage + +![cz ls --help](../images/cli_help/cz_ls___help.svg) diff --git a/docs/commands/schema.md b/docs/commands/schema.md new file mode 100644 index 0000000000..bd6fa85195 --- /dev/null +++ b/docs/commands/schema.md @@ -0,0 +1,5 @@ +Show commit schema + +## Usage + +![cz schema --help](../images/cli_help/cz_schema___help.svg) diff --git a/docs/commands/version.md b/docs/commands/version.md new file mode 100644 index 0000000000..9a8176b45f --- /dev/null +++ b/docs/commands/version.md @@ -0,0 +1,5 @@ +Get the version of the installed commitizen or the current project (default: installed commitizen) + +## Usage + +![cz version --help](../images/cli_help/cz_version___help.svg) diff --git a/mkdocs.yml b/mkdocs.yml index f80e427981..a0fb57fde2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -33,11 +33,16 @@ nav: - Introduction: "README.md" - Getting Started: "getting_started.md" - Commands: - - Init: "commands/init.md" - - Commit: "commands/commit.md" - - Bump: "commands/bump.md" - - Check: "commands/check.md" - - Changelog: "commands/changelog.md" + - init: "commands/init.md" + - commit: "commands/commit.md" + - bump: "commands/bump.md" + - check: "commands/check.md" + - changelog: "commands/changelog.md" + - example: "commands/example.md" + - info: "commands/info.md" + - ls: "commands/ls.md" + - schema: "commands/schema.md" + - version: "commands/version.md" - Configuration: "config.md" - Customization: "customization.md" - Tutorials: From f1ece99dc9ca142268b912671b04dfdfe5addb3f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 May 2024 01:46:55 +0000 Subject: [PATCH 252/685] build(deps-dev): bump mkdocs-material from 9.5.22 to 9.5.23 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.22 to 9.5.23. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.22...9.5.23) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7d7f8e43d8..b6313ee09e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -796,13 +796,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.22" +version = "9.5.23" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.22-py3-none-any.whl", hash = "sha256:8c7a377d323567934e6cd46915e64dc209efceaec0dec1cf2202184f5649862c"}, - {file = "mkdocs_material-9.5.22.tar.gz", hash = "sha256:22a853a456ae8c581c4628159574d6fc7c71b2c7569dc9c3a82cc70432219599"}, + {file = "mkdocs_material-9.5.23-py3-none-any.whl", hash = "sha256:ffd08a5beaef3cd135aceb58ded8b98bbbbf2b70e5b656f6a14a63c917d9b001"}, + {file = "mkdocs_material-9.5.23.tar.gz", hash = "sha256:4627fc3f15de2cba2bde9debc2fd59b9888ef494beabfe67eb352e23d14bf288"}, ] [package.dependencies] From ce2128fe18174d806c80493cba20b816bd6b09cc Mon Sep 17 00:00:00 2001 From: Marcos Martins <contato@marcosmartins.me> Date: Fri, 17 May 2024 14:12:25 -0300 Subject: [PATCH 253/685] feat(ci/cd): automates the generation of CLI screenshots --- .../workflows/generate_cli_screenshots.yml | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .github/workflows/generate_cli_screenshots.yml diff --git a/.github/workflows/generate_cli_screenshots.yml b/.github/workflows/generate_cli_screenshots.yml new file mode 100644 index 0000000000..7bbc8b16d9 --- /dev/null +++ b/.github/workflows/generate_cli_screenshots.yml @@ -0,0 +1,39 @@ +name: Generate CLI screenshots + +on: + pull_request: + types: + - closed + +jobs: + generate_cli_screenshots: + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}" + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + + - name: Install dependencies + run: | + python -m pip install -U pip poetry + poetry --version + poetry install + + - name: Generate CLI screenshots + run: | + poetry run python scripts/gen_cli_help_screenshots.py + + - name: Commit and push CLI screenshots + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git add docs/images/cli_help + git commit -m "docs(cli/screenshots) update CLI screenshots" + git push From c2bbc92202e9080adcdf8fa2e99c9e4406a1f684 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sat, 18 May 2024 11:11:37 +0000 Subject: [PATCH 254/685] =?UTF-8?q?bump:=20version=203.25.1=20=E2=86=92=20?= =?UTF-8?q?3.26.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a795a9300e..d3c9a02544 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,7 +46,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.25.1 # automatically updated by Commitizen + rev: v3.26.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index f10a35b917..e99491f1cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.26.0 (2024-05-18) + +### Feat + +- **ci/cd**: automates the generation of CLI screenshots + ## v3.25.1 (2024-05-15) ### Refactor diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 1d3669f91a..1e6bdc4260 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.25.1" +__version__ = "3.26.0" diff --git a/pyproject.toml b/pyproject.toml index d17a8e63c7..beb7b87308 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.25.1" +version = "3.26.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.25.1" +version = "3.26.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From f5cc52846bd9cddcff1110f76eba9441ec8c627b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 01:23:34 +0000 Subject: [PATCH 255/685] build(deps-dev): bump pytest from 8.2.0 to 8.2.1 Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.2.0 to 8.2.1. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.2.0...8.2.1) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index b6313ee09e..2e16545b02 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1100,13 +1100,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pytest" -version = "8.2.0" +version = "8.2.1" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.2.0-py3-none-any.whl", hash = "sha256:1733f0620f6cda4095bbf0d9ff8022486e91892245bb9e7d5542c018f612f233"}, - {file = "pytest-8.2.0.tar.gz", hash = "sha256:d507d4482197eac0ba2bae2e9babf0672eb333017bcedaa5fb1a3d42c1174b3f"}, + {file = "pytest-8.2.1-py3-none-any.whl", hash = "sha256:faccc5d332b8c3719f40283d0d44aa5cf101cec36f88cde9ed8f2bc0538612b1"}, + {file = "pytest-8.2.1.tar.gz", hash = "sha256:5046e5b46d8e4cac199c373041f26be56fdb81eb4e67dc11d4e10811fc3408fd"}, ] [package.dependencies] From 37522866e4788deb12b2ef1c426662400b0ebac8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 13:58:43 +0000 Subject: [PATCH 256/685] docs(cli/screenshots) update CLI screenshots --- docs/images/cli_help/cz___help.svg | 172 +++++----- docs/images/cli_help/cz_bump___help.svg | 336 +++++++++---------- docs/images/cli_help/cz_changelog___help.svg | 180 +++++----- docs/images/cli_help/cz_check___help.svg | 4 +- docs/images/cli_help/cz_commit___help.svg | 103 +++--- docs/images/cli_help/cz_example___help.svg | 4 +- docs/images/cli_help/cz_info___help.svg | 4 +- docs/images/cli_help/cz_init___help.svg | 4 +- docs/images/cli_help/cz_ls___help.svg | 4 +- docs/images/cli_help/cz_schema___help.svg | 4 +- docs/images/cli_help/cz_version___help.svg | 4 +- 11 files changed, 418 insertions(+), 401 deletions(-) diff --git a/docs/images/cli_help/cz___help.svg b/docs/images/cli_help/cz___help.svg index 07b23d558f..22a9e4d0e7 100644 --- a/docs/images/cli_help/cz___help.svg +++ b/docs/images/cli_help/cz___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 904.0" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 928.4" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,179 +19,183 @@ font-weight: 700; } - .terminal-911685263-matrix { + .terminal-4198725382-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-911685263-title { + .terminal-4198725382-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-911685263-r1 { fill: #c5c8c6 } -.terminal-911685263-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-911685263-r3 { fill: #d0b344 } -.terminal-911685263-r4 { fill: #1984e9;text-decoration: underline; } -.terminal-911685263-r5 { fill: #68a0b3;font-weight: bold } + .terminal-4198725382-r1 { fill: #c5c8c6 } +.terminal-4198725382-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-4198725382-r3 { fill: #d0b344 } +.terminal-4198725382-r4 { fill: #1984e9;text-decoration: underline; } +.terminal-4198725382-r5 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-911685263-clip-terminal"> - <rect x="0" y="0" width="975.0" height="853.0" /> + <clipPath id="terminal-4198725382-clip-terminal"> + <rect x="0" y="0" width="975.0" height="877.4" /> </clipPath> - <clipPath id="terminal-911685263-line-0"> + <clipPath id="terminal-4198725382-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-1"> +<clipPath id="terminal-4198725382-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-2"> +<clipPath id="terminal-4198725382-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-3"> +<clipPath id="terminal-4198725382-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-4"> +<clipPath id="terminal-4198725382-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-5"> +<clipPath id="terminal-4198725382-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-6"> +<clipPath id="terminal-4198725382-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-7"> +<clipPath id="terminal-4198725382-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-8"> +<clipPath id="terminal-4198725382-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-9"> +<clipPath id="terminal-4198725382-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-10"> +<clipPath id="terminal-4198725382-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-11"> +<clipPath id="terminal-4198725382-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-12"> +<clipPath id="terminal-4198725382-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-13"> +<clipPath id="terminal-4198725382-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-14"> +<clipPath id="terminal-4198725382-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-15"> +<clipPath id="terminal-4198725382-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-16"> +<clipPath id="terminal-4198725382-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-17"> +<clipPath id="terminal-4198725382-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-18"> +<clipPath id="terminal-4198725382-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-19"> +<clipPath id="terminal-4198725382-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-20"> +<clipPath id="terminal-4198725382-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-21"> +<clipPath id="terminal-4198725382-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-22"> +<clipPath id="terminal-4198725382-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-23"> +<clipPath id="terminal-4198725382-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-24"> +<clipPath id="terminal-4198725382-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-25"> +<clipPath id="terminal-4198725382-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-26"> +<clipPath id="terminal-4198725382-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-27"> +<clipPath id="terminal-4198725382-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-28"> +<clipPath id="terminal-4198725382-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-29"> +<clipPath id="terminal-4198725382-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-30"> +<clipPath id="terminal-4198725382-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-31"> +<clipPath id="terminal-4198725382-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-32"> +<clipPath id="terminal-4198725382-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-911685263-line-33"> +<clipPath id="terminal-4198725382-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-4198725382-line-34"> + <rect x="0" y="831.1" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="902" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="926.4" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - - <g transform="translate(9, 41)" clip-path="url(#terminal-911685263-clip-terminal)"> - - <g class="terminal-911685263-matrix"> - <text class="terminal-911685263-r1" x="0" y="20" textLength="134.2" clip-path="url(#terminal-911685263-line-0)">$ cz --help</text><text class="terminal-911685263-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-911685263-line-0)"> -</text><text class="terminal-911685263-r1" x="0" y="44.4" textLength="122" clip-path="url(#terminal-911685263-line-1)">usage: cz </text><text class="terminal-911685263-r2" x="122" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">[</text><text class="terminal-911685263-r1" x="134.2" y="44.4" textLength="24.4" clip-path="url(#terminal-911685263-line-1)">-h</text><text class="terminal-911685263-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">]</text><text class="terminal-911685263-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">[</text><text class="terminal-911685263-r1" x="195.2" y="44.4" textLength="85.4" clip-path="url(#terminal-911685263-line-1)">--debug</text><text class="terminal-911685263-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">]</text><text class="terminal-911685263-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">[</text><text class="terminal-911685263-r1" x="317.2" y="44.4" textLength="85.4" clip-path="url(#terminal-911685263-line-1)">-n NAME</text><text class="terminal-911685263-r2" x="402.6" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">]</text><text class="terminal-911685263-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">[</text><text class="terminal-911685263-r1" x="439.2" y="44.4" textLength="146.4" clip-path="url(#terminal-911685263-line-1)">-nr NO_RAISE</text><text class="terminal-911685263-r2" x="585.6" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)">]</text><text class="terminal-911685263-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-911685263-line-1)"> -</text><text class="terminal-911685263-r2" x="122" y="68.8" textLength="12.2" clip-path="url(#terminal-911685263-line-2)">{</text><text class="terminal-911685263-r1" x="134.2" y="68.8" textLength="829.6" clip-path="url(#terminal-911685263-line-2)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-911685263-r2" x="963.8" y="68.8" textLength="12.2" clip-path="url(#terminal-911685263-line-2)">}</text><text class="terminal-911685263-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-911685263-line-2)"> -</text><text class="terminal-911685263-r3" x="122" y="93.2" textLength="36.6" clip-path="url(#terminal-911685263-line-3)">...</text><text class="terminal-911685263-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-911685263-line-3)"> -</text><text class="terminal-911685263-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-911685263-line-4)"> -</text><text class="terminal-911685263-r1" x="0" y="142" textLength="707.6" clip-path="url(#terminal-911685263-line-5)">Commitizen is a cli tool to generate conventional commits.</text><text class="terminal-911685263-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-911685263-line-5)"> -</text><text class="terminal-911685263-r1" x="0" y="166.4" textLength="524.6" clip-path="url(#terminal-911685263-line-6)">For more information about the topic go to </text><text class="terminal-911685263-r4" x="524.6" y="166.4" textLength="390.4" clip-path="url(#terminal-911685263-line-6)">https://conventionalcommits.org/</text><text class="terminal-911685263-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-911685263-line-6)"> -</text><text class="terminal-911685263-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-911685263-line-7)"> -</text><text class="terminal-911685263-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-911685263-line-8)">options:</text><text class="terminal-911685263-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-911685263-line-8)"> -</text><text class="terminal-911685263-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-911685263-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-911685263-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-911685263-line-9)"> -</text><text class="terminal-911685263-r1" x="0" y="264" textLength="463.6" clip-path="url(#terminal-911685263-line-10)">  --debug               use debug mode</text><text class="terminal-911685263-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-911685263-line-10)"> -</text><text class="terminal-911685263-r1" x="0" y="288.4" textLength="597.8" clip-path="url(#terminal-911685263-line-11)">  -n NAME, --name NAME  use the given commitizen </text><text class="terminal-911685263-r2" x="597.8" y="288.4" textLength="12.2" clip-path="url(#terminal-911685263-line-11)">(</text><text class="terminal-911685263-r1" x="610" y="288.4" textLength="97.6" clip-path="url(#terminal-911685263-line-11)">default:</text><text class="terminal-911685263-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-911685263-line-11)"> -</text><text class="terminal-911685263-r1" x="0" y="312.8" textLength="573.4" clip-path="url(#terminal-911685263-line-12)">                        cz_conventional_commits</text><text class="terminal-911685263-r2" x="573.4" y="312.8" textLength="12.2" clip-path="url(#terminal-911685263-line-12)">)</text><text class="terminal-911685263-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-911685263-line-12)"> -</text><text class="terminal-911685263-r1" x="0" y="337.2" textLength="427" clip-path="url(#terminal-911685263-line-13)">  -nr NO_RAISE, --no-raise NO_RAISE</text><text class="terminal-911685263-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-911685263-line-13)"> -</text><text class="terminal-911685263-r1" x="0" y="361.6" textLength="902.8" clip-path="url(#terminal-911685263-line-14)">                        comma separated error codes that won't rise error,</text><text class="terminal-911685263-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-911685263-line-14)"> -</text><text class="terminal-911685263-r1" x="0" y="386" textLength="439.2" clip-path="url(#terminal-911685263-line-15)">                        e.g: cz -nr </text><text class="terminal-911685263-r5" x="439.2" y="386" textLength="12.2" clip-path="url(#terminal-911685263-line-15)">1</text><text class="terminal-911685263-r1" x="451.4" y="386" textLength="12.2" clip-path="url(#terminal-911685263-line-15)">,</text><text class="terminal-911685263-r5" x="463.6" y="386" textLength="12.2" clip-path="url(#terminal-911685263-line-15)">2</text><text class="terminal-911685263-r1" x="475.8" y="386" textLength="12.2" clip-path="url(#terminal-911685263-line-15)">,</text><text class="terminal-911685263-r5" x="488" y="386" textLength="12.2" clip-path="url(#terminal-911685263-line-15)">3</text><text class="terminal-911685263-r1" x="500.2" y="386" textLength="231.8" clip-path="url(#terminal-911685263-line-15)"> bump. See codes at</text><text class="terminal-911685263-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-911685263-line-15)"> -</text><text class="terminal-911685263-r4" x="292.8" y="410.4" textLength="231.8" clip-path="url(#terminal-911685263-line-16)">https://commitizen-</text><text class="terminal-911685263-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-911685263-line-16)"> -</text><text class="terminal-911685263-r1" x="0" y="434.8" textLength="756.4" clip-path="url(#terminal-911685263-line-17)">                        tools.github.io/commitizen/exit_codes/</text><text class="terminal-911685263-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-911685263-line-17)"> -</text><text class="terminal-911685263-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-911685263-line-18)"> -</text><text class="terminal-911685263-r1" x="0" y="483.6" textLength="109.8" clip-path="url(#terminal-911685263-line-19)">commands:</text><text class="terminal-911685263-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-911685263-line-19)"> -</text><text class="terminal-911685263-r2" x="24.4" y="508" textLength="12.2" clip-path="url(#terminal-911685263-line-20)">{</text><text class="terminal-911685263-r1" x="36.6" y="508" textLength="829.6" clip-path="url(#terminal-911685263-line-20)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-911685263-r2" x="866.2" y="508" textLength="12.2" clip-path="url(#terminal-911685263-line-20)">}</text><text class="terminal-911685263-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-911685263-line-20)"> -</text><text class="terminal-911685263-r1" x="0" y="532.4" textLength="646.6" clip-path="url(#terminal-911685263-line-21)">    init                init commitizen configuration</text><text class="terminal-911685263-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-911685263-line-21)"> -</text><text class="terminal-911685263-r1" x="0" y="556.8" textLength="134.2" clip-path="url(#terminal-911685263-line-22)">    commit </text><text class="terminal-911685263-r2" x="134.2" y="556.8" textLength="12.2" clip-path="url(#terminal-911685263-line-22)">(</text><text class="terminal-911685263-r1" x="146.4" y="556.8" textLength="12.2" clip-path="url(#terminal-911685263-line-22)">c</text><text class="terminal-911685263-r2" x="158.6" y="556.8" textLength="12.2" clip-path="url(#terminal-911685263-line-22)">)</text><text class="terminal-911685263-r1" x="170.8" y="556.8" textLength="329.4" clip-path="url(#terminal-911685263-line-22)">          create new commit</text><text class="terminal-911685263-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-911685263-line-22)"> -</text><text class="terminal-911685263-r1" x="0" y="581.2" textLength="610" clip-path="url(#terminal-911685263-line-23)">    ls                  show available commitizens</text><text class="terminal-911685263-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-911685263-line-23)"> -</text><text class="terminal-911685263-r1" x="0" y="605.6" textLength="524.6" clip-path="url(#terminal-911685263-line-24)">    example             show commit example</text><text class="terminal-911685263-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-911685263-line-24)"> -</text><text class="terminal-911685263-r1" x="0" y="630" textLength="646.6" clip-path="url(#terminal-911685263-line-25)">    info                show information about the cz</text><text class="terminal-911685263-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-911685263-line-25)"> -</text><text class="terminal-911685263-r1" x="0" y="654.4" textLength="512.4" clip-path="url(#terminal-911685263-line-26)">    schema              show commit schema</text><text class="terminal-911685263-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-911685263-line-26)"> -</text><text class="terminal-911685263-r1" x="0" y="678.8" textLength="805.2" clip-path="url(#terminal-911685263-line-27)">    bump                bump semantic version based on the git log</text><text class="terminal-911685263-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-911685263-line-27)"> -</text><text class="terminal-911685263-r1" x="0" y="703.2" textLength="170.8" clip-path="url(#terminal-911685263-line-28)">    changelog </text><text class="terminal-911685263-r2" x="170.8" y="703.2" textLength="12.2" clip-path="url(#terminal-911685263-line-28)">(</text><text class="terminal-911685263-r1" x="183" y="703.2" textLength="24.4" clip-path="url(#terminal-911685263-line-28)">ch</text><text class="terminal-911685263-r2" x="207.4" y="703.2" textLength="12.2" clip-path="url(#terminal-911685263-line-28)">)</text><text class="terminal-911685263-r1" x="219.6" y="703.2" textLength="305" clip-path="url(#terminal-911685263-line-28)">      generate changelog </text><text class="terminal-911685263-r2" x="524.6" y="703.2" textLength="12.2" clip-path="url(#terminal-911685263-line-28)">(</text><text class="terminal-911685263-r1" x="536.8" y="703.2" textLength="329.4" clip-path="url(#terminal-911685263-line-28)">note that it will overwrite</text><text class="terminal-911685263-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-911685263-line-28)"> -</text><text class="terminal-911685263-r1" x="0" y="727.6" textLength="451.4" clip-path="url(#terminal-911685263-line-29)">                        existing file</text><text class="terminal-911685263-r2" x="451.4" y="727.6" textLength="12.2" clip-path="url(#terminal-911685263-line-29)">)</text><text class="terminal-911685263-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-911685263-line-29)"> -</text><text class="terminal-911685263-r1" x="0" y="752" textLength="951.6" clip-path="url(#terminal-911685263-line-30)">    check               validates that a commit message matches the commitizen</text><text class="terminal-911685263-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-911685263-line-30)"> -</text><text class="terminal-911685263-r1" x="0" y="776.4" textLength="366" clip-path="url(#terminal-911685263-line-31)">                        schema</text><text class="terminal-911685263-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-911685263-line-31)"> -</text><text class="terminal-911685263-r1" x="0" y="800.8" textLength="902.8" clip-path="url(#terminal-911685263-line-32)">    version             get the version of the installed commitizen or the</text><text class="terminal-911685263-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-911685263-line-32)"> -</text><text class="terminal-911685263-r1" x="0" y="825.2" textLength="488" clip-path="url(#terminal-911685263-line-33)">                        current project </text><text class="terminal-911685263-r2" x="488" y="825.2" textLength="12.2" clip-path="url(#terminal-911685263-line-33)">(</text><text class="terminal-911685263-r1" x="500.2" y="825.2" textLength="353.8" clip-path="url(#terminal-911685263-line-33)">default: installed commitizen</text><text class="terminal-911685263-r2" x="854" y="825.2" textLength="12.2" clip-path="url(#terminal-911685263-line-33)">)</text><text class="terminal-911685263-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-911685263-line-33)"> -</text><text class="terminal-911685263-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-911685263-line-34)"> + + <g transform="translate(9, 41)" clip-path="url(#terminal-4198725382-clip-terminal)"> + + <g class="terminal-4198725382-matrix"> + <text class="terminal-4198725382-r1" x="0" y="20" textLength="134.2" clip-path="url(#terminal-4198725382-line-0)">$ cz --help</text><text class="terminal-4198725382-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-4198725382-line-0)"> +</text><text class="terminal-4198725382-r1" x="0" y="44.4" textLength="122" clip-path="url(#terminal-4198725382-line-1)">usage: cz </text><text class="terminal-4198725382-r2" x="122" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="134.2" y="44.4" textLength="24.4" clip-path="url(#terminal-4198725382-line-1)">-h</text><text class="terminal-4198725382-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="195.2" y="44.4" textLength="183" clip-path="url(#terminal-4198725382-line-1)">--config CONFIG</text><text class="terminal-4198725382-r2" x="378.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="402.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="414.8" y="44.4" textLength="85.4" clip-path="url(#terminal-4198725382-line-1)">--debug</text><text class="terminal-4198725382-r2" x="500.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="536.8" y="44.4" textLength="85.4" clip-path="url(#terminal-4198725382-line-1)">-n NAME</text><text class="terminal-4198725382-r2" x="622.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="646.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="658.8" y="44.4" textLength="146.4" clip-path="url(#terminal-4198725382-line-1)">-nr NO_RAISE</text><text class="terminal-4198725382-r2" x="805.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)"> +</text><text class="terminal-4198725382-r2" x="122" y="68.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-2)">{</text><text class="terminal-4198725382-r1" x="134.2" y="68.8" textLength="829.6" clip-path="url(#terminal-4198725382-line-2)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-4198725382-r2" x="963.8" y="68.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-2)">}</text><text class="terminal-4198725382-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-2)"> +</text><text class="terminal-4198725382-r3" x="122" y="93.2" textLength="36.6" clip-path="url(#terminal-4198725382-line-3)">...</text><text class="terminal-4198725382-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-3)"> +</text><text class="terminal-4198725382-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-4)"> +</text><text class="terminal-4198725382-r1" x="0" y="142" textLength="707.6" clip-path="url(#terminal-4198725382-line-5)">Commitizen is a cli tool to generate conventional commits.</text><text class="terminal-4198725382-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-4198725382-line-5)"> +</text><text class="terminal-4198725382-r1" x="0" y="166.4" textLength="524.6" clip-path="url(#terminal-4198725382-line-6)">For more information about the topic go to </text><text class="terminal-4198725382-r4" x="524.6" y="166.4" textLength="390.4" clip-path="url(#terminal-4198725382-line-6)">https://conventionalcommits.org/</text><text class="terminal-4198725382-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-6)"> +</text><text class="terminal-4198725382-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-7)"> +</text><text class="terminal-4198725382-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-4198725382-line-8)">options:</text><text class="terminal-4198725382-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-8)"> +</text><text class="terminal-4198725382-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-4198725382-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-4198725382-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-9)"> +</text><text class="terminal-4198725382-r1" x="0" y="264" textLength="658.8" clip-path="url(#terminal-4198725382-line-10)">  --config CONFIG       the path of configuration file</text><text class="terminal-4198725382-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-4198725382-line-10)"> +</text><text class="terminal-4198725382-r1" x="0" y="288.4" textLength="463.6" clip-path="url(#terminal-4198725382-line-11)">  --debug               use debug mode</text><text class="terminal-4198725382-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-11)"> +</text><text class="terminal-4198725382-r1" x="0" y="312.8" textLength="597.8" clip-path="url(#terminal-4198725382-line-12)">  -n NAME, --name NAME  use the given commitizen </text><text class="terminal-4198725382-r2" x="597.8" y="312.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-12)">(</text><text class="terminal-4198725382-r1" x="610" y="312.8" textLength="97.6" clip-path="url(#terminal-4198725382-line-12)">default:</text><text class="terminal-4198725382-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-12)"> +</text><text class="terminal-4198725382-r1" x="0" y="337.2" textLength="573.4" clip-path="url(#terminal-4198725382-line-13)">                        cz_conventional_commits</text><text class="terminal-4198725382-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-13)">)</text><text class="terminal-4198725382-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-13)"> +</text><text class="terminal-4198725382-r1" x="0" y="361.6" textLength="427" clip-path="url(#terminal-4198725382-line-14)">  -nr NO_RAISE, --no-raise NO_RAISE</text><text class="terminal-4198725382-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-14)"> +</text><text class="terminal-4198725382-r1" x="0" y="386" textLength="902.8" clip-path="url(#terminal-4198725382-line-15)">                        comma separated error codes that won't rise error,</text><text class="terminal-4198725382-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-4198725382-line-15)"> +</text><text class="terminal-4198725382-r1" x="0" y="410.4" textLength="439.2" clip-path="url(#terminal-4198725382-line-16)">                        e.g: cz -nr </text><text class="terminal-4198725382-r5" x="439.2" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">1</text><text class="terminal-4198725382-r1" x="451.4" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">,</text><text class="terminal-4198725382-r5" x="463.6" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">2</text><text class="terminal-4198725382-r1" x="475.8" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">,</text><text class="terminal-4198725382-r5" x="488" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">3</text><text class="terminal-4198725382-r1" x="500.2" y="410.4" textLength="231.8" clip-path="url(#terminal-4198725382-line-16)"> bump. See codes at</text><text class="terminal-4198725382-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)"> +</text><text class="terminal-4198725382-r4" x="292.8" y="434.8" textLength="231.8" clip-path="url(#terminal-4198725382-line-17)">https://commitizen-</text><text class="terminal-4198725382-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-17)"> +</text><text class="terminal-4198725382-r1" x="0" y="459.2" textLength="756.4" clip-path="url(#terminal-4198725382-line-18)">                        tools.github.io/commitizen/exit_codes/</text><text class="terminal-4198725382-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-18)"> +</text><text class="terminal-4198725382-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-19)"> +</text><text class="terminal-4198725382-r1" x="0" y="508" textLength="109.8" clip-path="url(#terminal-4198725382-line-20)">commands:</text><text class="terminal-4198725382-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-4198725382-line-20)"> +</text><text class="terminal-4198725382-r2" x="24.4" y="532.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-21)">{</text><text class="terminal-4198725382-r1" x="36.6" y="532.4" textLength="829.6" clip-path="url(#terminal-4198725382-line-21)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-4198725382-r2" x="866.2" y="532.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-21)">}</text><text class="terminal-4198725382-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-21)"> +</text><text class="terminal-4198725382-r1" x="0" y="556.8" textLength="646.6" clip-path="url(#terminal-4198725382-line-22)">    init                init commitizen configuration</text><text class="terminal-4198725382-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-22)"> +</text><text class="terminal-4198725382-r1" x="0" y="581.2" textLength="134.2" clip-path="url(#terminal-4198725382-line-23)">    commit </text><text class="terminal-4198725382-r2" x="134.2" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)">(</text><text class="terminal-4198725382-r1" x="146.4" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)">c</text><text class="terminal-4198725382-r2" x="158.6" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)">)</text><text class="terminal-4198725382-r1" x="170.8" y="581.2" textLength="329.4" clip-path="url(#terminal-4198725382-line-23)">          create new commit</text><text class="terminal-4198725382-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)"> +</text><text class="terminal-4198725382-r1" x="0" y="605.6" textLength="610" clip-path="url(#terminal-4198725382-line-24)">    ls                  show available commitizens</text><text class="terminal-4198725382-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-24)"> +</text><text class="terminal-4198725382-r1" x="0" y="630" textLength="524.6" clip-path="url(#terminal-4198725382-line-25)">    example             show commit example</text><text class="terminal-4198725382-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-4198725382-line-25)"> +</text><text class="terminal-4198725382-r1" x="0" y="654.4" textLength="646.6" clip-path="url(#terminal-4198725382-line-26)">    info                show information about the cz</text><text class="terminal-4198725382-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-26)"> +</text><text class="terminal-4198725382-r1" x="0" y="678.8" textLength="512.4" clip-path="url(#terminal-4198725382-line-27)">    schema              show commit schema</text><text class="terminal-4198725382-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-27)"> +</text><text class="terminal-4198725382-r1" x="0" y="703.2" textLength="805.2" clip-path="url(#terminal-4198725382-line-28)">    bump                bump semantic version based on the git log</text><text class="terminal-4198725382-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-28)"> +</text><text class="terminal-4198725382-r1" x="0" y="727.6" textLength="170.8" clip-path="url(#terminal-4198725382-line-29)">    changelog </text><text class="terminal-4198725382-r2" x="170.8" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)">(</text><text class="terminal-4198725382-r1" x="183" y="727.6" textLength="24.4" clip-path="url(#terminal-4198725382-line-29)">ch</text><text class="terminal-4198725382-r2" x="207.4" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)">)</text><text class="terminal-4198725382-r1" x="219.6" y="727.6" textLength="305" clip-path="url(#terminal-4198725382-line-29)">      generate changelog </text><text class="terminal-4198725382-r2" x="524.6" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)">(</text><text class="terminal-4198725382-r1" x="536.8" y="727.6" textLength="329.4" clip-path="url(#terminal-4198725382-line-29)">note that it will overwrite</text><text class="terminal-4198725382-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)"> +</text><text class="terminal-4198725382-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-4198725382-line-30)">                        existing file</text><text class="terminal-4198725382-r2" x="451.4" y="752" textLength="12.2" clip-path="url(#terminal-4198725382-line-30)">)</text><text class="terminal-4198725382-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-4198725382-line-30)"> +</text><text class="terminal-4198725382-r1" x="0" y="776.4" textLength="951.6" clip-path="url(#terminal-4198725382-line-31)">    check               validates that a commit message matches the commitizen</text><text class="terminal-4198725382-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-31)"> +</text><text class="terminal-4198725382-r1" x="0" y="800.8" textLength="366" clip-path="url(#terminal-4198725382-line-32)">                        schema</text><text class="terminal-4198725382-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-32)"> +</text><text class="terminal-4198725382-r1" x="0" y="825.2" textLength="902.8" clip-path="url(#terminal-4198725382-line-33)">    version             get the version of the installed commitizen or the</text><text class="terminal-4198725382-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-33)"> +</text><text class="terminal-4198725382-r1" x="0" y="849.6" textLength="488" clip-path="url(#terminal-4198725382-line-34)">                        current project </text><text class="terminal-4198725382-r2" x="488" y="849.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-34)">(</text><text class="terminal-4198725382-r1" x="500.2" y="849.6" textLength="353.8" clip-path="url(#terminal-4198725382-line-34)">default: installed commitizen</text><text class="terminal-4198725382-r2" x="854" y="849.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-34)">)</text><text class="terminal-4198725382-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-34)"> +</text><text class="terminal-4198725382-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-4198725382-line-35)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_bump___help.svg b/docs/images/cli_help/cz_bump___help.svg index 18d402f16e..5b71728ccf 100644 --- a/docs/images/cli_help/cz_bump___help.svg +++ b/docs/images/cli_help/cz_bump___help.svg @@ -19,261 +19,261 @@ font-weight: 700; } - .terminal-2106414123-matrix { + .terminal-908877803-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2106414123-title { + .terminal-908877803-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2106414123-r1 { fill: #c5c8c6 } -.terminal-2106414123-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-2106414123-r3 { fill: #68a0b3;font-weight: bold } -.terminal-2106414123-r4 { fill: #98a84b } + .terminal-908877803-r1 { fill: #c5c8c6 } +.terminal-908877803-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-908877803-r3 { fill: #68a0b3;font-weight: bold } +.terminal-908877803-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-2106414123-clip-terminal"> + <clipPath id="terminal-908877803-clip-terminal"> <rect x="0" y="0" width="975.0" height="1926.6" /> </clipPath> - <clipPath id="terminal-2106414123-line-0"> + <clipPath id="terminal-908877803-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-1"> +<clipPath id="terminal-908877803-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-2"> +<clipPath id="terminal-908877803-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-3"> +<clipPath id="terminal-908877803-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-4"> +<clipPath id="terminal-908877803-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-5"> +<clipPath id="terminal-908877803-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-6"> +<clipPath id="terminal-908877803-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-7"> +<clipPath id="terminal-908877803-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-8"> +<clipPath id="terminal-908877803-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-9"> +<clipPath id="terminal-908877803-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-10"> +<clipPath id="terminal-908877803-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-11"> +<clipPath id="terminal-908877803-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-12"> +<clipPath id="terminal-908877803-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-13"> +<clipPath id="terminal-908877803-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-14"> +<clipPath id="terminal-908877803-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-15"> +<clipPath id="terminal-908877803-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-16"> +<clipPath id="terminal-908877803-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-17"> +<clipPath id="terminal-908877803-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-18"> +<clipPath id="terminal-908877803-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-19"> +<clipPath id="terminal-908877803-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-20"> +<clipPath id="terminal-908877803-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-21"> +<clipPath id="terminal-908877803-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-22"> +<clipPath id="terminal-908877803-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-23"> +<clipPath id="terminal-908877803-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-24"> +<clipPath id="terminal-908877803-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-25"> +<clipPath id="terminal-908877803-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-26"> +<clipPath id="terminal-908877803-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-27"> +<clipPath id="terminal-908877803-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-28"> +<clipPath id="terminal-908877803-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-29"> +<clipPath id="terminal-908877803-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-30"> +<clipPath id="terminal-908877803-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-31"> +<clipPath id="terminal-908877803-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-32"> +<clipPath id="terminal-908877803-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-33"> +<clipPath id="terminal-908877803-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-34"> +<clipPath id="terminal-908877803-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-35"> +<clipPath id="terminal-908877803-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-36"> +<clipPath id="terminal-908877803-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-37"> +<clipPath id="terminal-908877803-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-38"> +<clipPath id="terminal-908877803-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-39"> +<clipPath id="terminal-908877803-line-39"> <rect x="0" y="953.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-40"> +<clipPath id="terminal-908877803-line-40"> <rect x="0" y="977.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-41"> +<clipPath id="terminal-908877803-line-41"> <rect x="0" y="1001.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-42"> +<clipPath id="terminal-908877803-line-42"> <rect x="0" y="1026.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-43"> +<clipPath id="terminal-908877803-line-43"> <rect x="0" y="1050.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-44"> +<clipPath id="terminal-908877803-line-44"> <rect x="0" y="1075.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-45"> +<clipPath id="terminal-908877803-line-45"> <rect x="0" y="1099.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-46"> +<clipPath id="terminal-908877803-line-46"> <rect x="0" y="1123.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-47"> +<clipPath id="terminal-908877803-line-47"> <rect x="0" y="1148.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-48"> +<clipPath id="terminal-908877803-line-48"> <rect x="0" y="1172.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-49"> +<clipPath id="terminal-908877803-line-49"> <rect x="0" y="1197.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-50"> +<clipPath id="terminal-908877803-line-50"> <rect x="0" y="1221.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-51"> +<clipPath id="terminal-908877803-line-51"> <rect x="0" y="1245.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-52"> +<clipPath id="terminal-908877803-line-52"> <rect x="0" y="1270.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-53"> +<clipPath id="terminal-908877803-line-53"> <rect x="0" y="1294.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-54"> +<clipPath id="terminal-908877803-line-54"> <rect x="0" y="1319.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-55"> +<clipPath id="terminal-908877803-line-55"> <rect x="0" y="1343.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-56"> +<clipPath id="terminal-908877803-line-56"> <rect x="0" y="1367.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-57"> +<clipPath id="terminal-908877803-line-57"> <rect x="0" y="1392.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-58"> +<clipPath id="terminal-908877803-line-58"> <rect x="0" y="1416.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-59"> +<clipPath id="terminal-908877803-line-59"> <rect x="0" y="1441.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-60"> +<clipPath id="terminal-908877803-line-60"> <rect x="0" y="1465.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-61"> +<clipPath id="terminal-908877803-line-61"> <rect x="0" y="1489.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-62"> +<clipPath id="terminal-908877803-line-62"> <rect x="0" y="1514.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-63"> +<clipPath id="terminal-908877803-line-63"> <rect x="0" y="1538.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-64"> +<clipPath id="terminal-908877803-line-64"> <rect x="0" y="1563.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-65"> +<clipPath id="terminal-908877803-line-65"> <rect x="0" y="1587.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-66"> +<clipPath id="terminal-908877803-line-66"> <rect x="0" y="1611.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-67"> +<clipPath id="terminal-908877803-line-67"> <rect x="0" y="1636.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-68"> +<clipPath id="terminal-908877803-line-68"> <rect x="0" y="1660.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-69"> +<clipPath id="terminal-908877803-line-69"> <rect x="0" y="1685.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-70"> +<clipPath id="terminal-908877803-line-70"> <rect x="0" y="1709.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-71"> +<clipPath id="terminal-908877803-line-71"> <rect x="0" y="1733.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-72"> +<clipPath id="terminal-908877803-line-72"> <rect x="0" y="1758.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-73"> +<clipPath id="terminal-908877803-line-73"> <rect x="0" y="1782.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-74"> +<clipPath id="terminal-908877803-line-74"> <rect x="0" y="1807.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-75"> +<clipPath id="terminal-908877803-line-75"> <rect x="0" y="1831.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-76"> +<clipPath id="terminal-908877803-line-76"> <rect x="0" y="1855.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2106414123-line-77"> +<clipPath id="terminal-908877803-line-77"> <rect x="0" y="1880.3" width="976" height="24.65"/> </clipPath> </defs> @@ -284,89 +284,89 @@ <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - - <g transform="translate(9, 41)" clip-path="url(#terminal-2106414123-clip-terminal)"> - - <g class="terminal-2106414123-matrix"> - <text class="terminal-2106414123-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-2106414123-line-0)">$ cz bump --help</text><text class="terminal-2106414123-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2106414123-line-0)"> -</text><text class="terminal-2106414123-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-2106414123-line-1)">usage: cz bump </text><text class="terminal-2106414123-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">[</text><text class="terminal-2106414123-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2106414123-line-1)">-h</text><text class="terminal-2106414123-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">]</text><text class="terminal-2106414123-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">[</text><text class="terminal-2106414123-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-2106414123-line-1)">--dry-run</text><text class="terminal-2106414123-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">]</text><text class="terminal-2106414123-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">[</text><text class="terminal-2106414123-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-2106414123-line-1)">--files-only</text><text class="terminal-2106414123-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">]</text><text class="terminal-2106414123-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">[</text><text class="terminal-2106414123-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-2106414123-line-1)">--local-version</text><text class="terminal-2106414123-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">]</text><text class="terminal-2106414123-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">[</text><text class="terminal-2106414123-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-2106414123-line-1)">--changelog</text><text class="terminal-2106414123-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)">]</text><text class="terminal-2106414123-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-1)"> -</text><text class="terminal-2106414123-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)">[</text><text class="terminal-2106414123-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-2106414123-line-2)">--no-verify</text><text class="terminal-2106414123-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)">]</text><text class="terminal-2106414123-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)">[</text><text class="terminal-2106414123-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-2106414123-line-2)">--yes</text><text class="terminal-2106414123-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)">]</text><text class="terminal-2106414123-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)">[</text><text class="terminal-2106414123-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-2106414123-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-2106414123-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)">]</text><text class="terminal-2106414123-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-2)"> -</text><text class="terminal-2106414123-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)">[</text><text class="terminal-2106414123-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-2106414123-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-2106414123-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)">]</text><text class="terminal-2106414123-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)">[</text><text class="terminal-2106414123-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-2106414123-line-3)">--prerelease </text><text class="terminal-2106414123-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)">{</text><text class="terminal-2106414123-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-2106414123-line-3)">alpha,beta,rc</text><text class="terminal-2106414123-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)">}</text><text class="terminal-2106414123-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)">]</text><text class="terminal-2106414123-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-3)"> -</text><text class="terminal-2106414123-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)">[</text><text class="terminal-2106414123-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-2106414123-line-4)">--devrelease DEVRELEASE</text><text class="terminal-2106414123-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)">]</text><text class="terminal-2106414123-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)">[</text><text class="terminal-2106414123-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-2106414123-line-4)">--increment </text><text class="terminal-2106414123-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)">{</text><text class="terminal-2106414123-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-2106414123-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-2106414123-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)">}</text><text class="terminal-2106414123-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)">]</text><text class="terminal-2106414123-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-4)"> -</text><text class="terminal-2106414123-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)">[</text><text class="terminal-2106414123-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-2106414123-line-5)">--increment-mode </text><text class="terminal-2106414123-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)">{</text><text class="terminal-2106414123-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-2106414123-line-5)">linear,exact</text><text class="terminal-2106414123-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)">}</text><text class="terminal-2106414123-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)">]</text><text class="terminal-2106414123-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)">[</text><text class="terminal-2106414123-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-2106414123-line-5)">--check-consistency</text><text class="terminal-2106414123-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)">]</text><text class="terminal-2106414123-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2106414123-line-5)"> -</text><text class="terminal-2106414123-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-6)">[</text><text class="terminal-2106414123-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-2106414123-line-6)">--annotated-tag</text><text class="terminal-2106414123-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-6)">]</text><text class="terminal-2106414123-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-6)"> -</text><text class="terminal-2106414123-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-7)">[</text><text class="terminal-2106414123-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-2106414123-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-2106414123-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-7)">]</text><text class="terminal-2106414123-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-7)">[</text><text class="terminal-2106414123-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-2106414123-line-7)">--gpg-sign</text><text class="terminal-2106414123-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-7)">]</text><text class="terminal-2106414123-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-7)"> -</text><text class="terminal-2106414123-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)">[</text><text class="terminal-2106414123-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-2106414123-line-8)">--changelog-to-stdout</text><text class="terminal-2106414123-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)">]</text><text class="terminal-2106414123-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)">[</text><text class="terminal-2106414123-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-2106414123-line-8)">--git-output-to-stderr</text><text class="terminal-2106414123-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)">]</text><text class="terminal-2106414123-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)">[</text><text class="terminal-2106414123-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-2106414123-line-8)">--retry</text><text class="terminal-2106414123-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)">]</text><text class="terminal-2106414123-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-8)"> -</text><text class="terminal-2106414123-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)">[</text><text class="terminal-2106414123-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-2106414123-line-9)">--major-version-zero</text><text class="terminal-2106414123-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)">]</text><text class="terminal-2106414123-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)">[</text><text class="terminal-2106414123-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-2106414123-line-9)">--template TEMPLATE</text><text class="terminal-2106414123-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)">]</text><text class="terminal-2106414123-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)">[</text><text class="terminal-2106414123-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-2106414123-line-9)">--extra EXTRA</text><text class="terminal-2106414123-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)">]</text><text class="terminal-2106414123-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-9)"> -</text><text class="terminal-2106414123-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-2106414123-line-10)">[</text><text class="terminal-2106414123-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-2106414123-line-10)">--file-name FILE_NAME</text><text class="terminal-2106414123-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-2106414123-line-10)">]</text><text class="terminal-2106414123-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-2106414123-line-10)">[</text><text class="terminal-2106414123-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-2106414123-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-2106414123-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-2106414123-line-10)">]</text><text class="terminal-2106414123-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2106414123-line-10)"> -</text><text class="terminal-2106414123-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-11)">[</text><text class="terminal-2106414123-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-2106414123-line-11)">--version-scheme </text><text class="terminal-2106414123-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-11)">{</text><text class="terminal-2106414123-r1" x="414.8" y="288.4" textLength="158.6" clip-path="url(#terminal-2106414123-line-11)">semver,pep440</text><text class="terminal-2106414123-r2" x="573.4" y="288.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-11)">}</text><text class="terminal-2106414123-r2" x="585.6" y="288.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-11)">]</text><text class="terminal-2106414123-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-11)"> -</text><text class="terminal-2106414123-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-12)">[</text><text class="terminal-2106414123-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-2106414123-line-12)">--version-type </text><text class="terminal-2106414123-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-12)">{</text><text class="terminal-2106414123-r1" x="390.4" y="312.8" textLength="158.6" clip-path="url(#terminal-2106414123-line-12)">semver,pep440</text><text class="terminal-2106414123-r2" x="549" y="312.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-12)">}</text><text class="terminal-2106414123-r2" x="561.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-12)">]</text><text class="terminal-2106414123-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-12)"> -</text><text class="terminal-2106414123-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-13)">[</text><text class="terminal-2106414123-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-2106414123-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-2106414123-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-13)">]</text><text class="terminal-2106414123-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-13)"> -</text><text class="terminal-2106414123-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-14)">[</text><text class="terminal-2106414123-r1" x="195.2" y="361.6" textLength="170.8" clip-path="url(#terminal-2106414123-line-14)">MANUAL_VERSION</text><text class="terminal-2106414123-r2" x="366" y="361.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-14)">]</text><text class="terminal-2106414123-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-14)"> -</text><text class="terminal-2106414123-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2106414123-line-15)"> -</text><text class="terminal-2106414123-r1" x="0" y="410.4" textLength="256.2" clip-path="url(#terminal-2106414123-line-16)">positional arguments:</text><text class="terminal-2106414123-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-16)"> -</text><text class="terminal-2106414123-r1" x="0" y="434.8" textLength="610" clip-path="url(#terminal-2106414123-line-17)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-2106414123-r2" x="610" y="434.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-17)">(</text><text class="terminal-2106414123-r1" x="622.2" y="434.8" textLength="61" clip-path="url(#terminal-2106414123-line-17)">e.g: </text><text class="terminal-2106414123-r3" x="683.2" y="434.8" textLength="36.6" clip-path="url(#terminal-2106414123-line-17)">1.5</text><text class="terminal-2106414123-r1" x="719.8" y="434.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-17)">.</text><text class="terminal-2106414123-r3" x="732" y="434.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-17)">3</text><text class="terminal-2106414123-r2" x="744.2" y="434.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-17)">)</text><text class="terminal-2106414123-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-17)"> -</text><text class="terminal-2106414123-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-18)"> -</text><text class="terminal-2106414123-r1" x="0" y="483.6" textLength="97.6" clip-path="url(#terminal-2106414123-line-19)">options:</text><text class="terminal-2106414123-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-19)"> -</text><text class="terminal-2106414123-r1" x="0" y="508" textLength="671" clip-path="url(#terminal-2106414123-line-20)">  -h, --help            show this help message and exit</text><text class="terminal-2106414123-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2106414123-line-20)"> -</text><text class="terminal-2106414123-r1" x="0" y="532.4" textLength="915" clip-path="url(#terminal-2106414123-line-21)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-2106414123-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-21)"> -</text><text class="terminal-2106414123-r1" x="0" y="556.8" textLength="793" clip-path="url(#terminal-2106414123-line-22)">  --files-only          bump version in the files from the config</text><text class="terminal-2106414123-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-22)"> -</text><text class="terminal-2106414123-r1" x="0" y="581.2" textLength="719.8" clip-path="url(#terminal-2106414123-line-23)">  --local-version       bump only the local version portion</text><text class="terminal-2106414123-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-23)"> -</text><text class="terminal-2106414123-r1" x="0" y="605.6" textLength="841.8" clip-path="url(#terminal-2106414123-line-24)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-2106414123-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-24)"> -</text><text class="terminal-2106414123-r1" x="0" y="630" textLength="902.8" clip-path="url(#terminal-2106414123-line-25)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-2106414123-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2106414123-line-25)"> -</text><text class="terminal-2106414123-r1" x="0" y="654.4" textLength="353.8" clip-path="url(#terminal-2106414123-line-26)">                        hooks</text><text class="terminal-2106414123-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-26)"> -</text><text class="terminal-2106414123-r1" x="0" y="678.8" textLength="719.8" clip-path="url(#terminal-2106414123-line-27)">  --yes                 accept automatically questions done</text><text class="terminal-2106414123-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-27)"> -</text><text class="terminal-2106414123-r1" x="0" y="703.2" textLength="305" clip-path="url(#terminal-2106414123-line-28)">  --tag-format TAG_FORMAT</text><text class="terminal-2106414123-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-28)"> -</text><text class="terminal-2106414123-r1" x="0" y="727.6" textLength="939.4" clip-path="url(#terminal-2106414123-line-29)">                        the format used to tag the commit and read it, use it</text><text class="terminal-2106414123-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-29)"> -</text><text class="terminal-2106414123-r1" x="0" y="752" textLength="866.2" clip-path="url(#terminal-2106414123-line-30)">                        in existing projects, wrap around simple quotes</text><text class="terminal-2106414123-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-2106414123-line-30)"> -</text><text class="terminal-2106414123-r1" x="0" y="776.4" textLength="353.8" clip-path="url(#terminal-2106414123-line-31)">  --bump-message BUMP_MESSAGE</text><text class="terminal-2106414123-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-31)"> -</text><text class="terminal-2106414123-r1" x="0" y="800.8" textLength="902.8" clip-path="url(#terminal-2106414123-line-32)">                        template used to create the release commit, useful</text><text class="terminal-2106414123-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-32)"> -</text><text class="terminal-2106414123-r1" x="0" y="825.2" textLength="536.8" clip-path="url(#terminal-2106414123-line-33)">                        when working with CI</text><text class="terminal-2106414123-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-33)"> -</text><text class="terminal-2106414123-r1" x="0" y="849.6" textLength="183" clip-path="url(#terminal-2106414123-line-34)">  --prerelease </text><text class="terminal-2106414123-r2" x="183" y="849.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-34)">{</text><text class="terminal-2106414123-r1" x="195.2" y="849.6" textLength="158.6" clip-path="url(#terminal-2106414123-line-34)">alpha,beta,rc</text><text class="terminal-2106414123-r2" x="353.8" y="849.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-34)">}</text><text class="terminal-2106414123-r1" x="366" y="849.6" textLength="73.2" clip-path="url(#terminal-2106414123-line-34)">, -pr </text><text class="terminal-2106414123-r2" x="439.2" y="849.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-34)">{</text><text class="terminal-2106414123-r1" x="451.4" y="849.6" textLength="158.6" clip-path="url(#terminal-2106414123-line-34)">alpha,beta,rc</text><text class="terminal-2106414123-r2" x="610" y="849.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-34)">}</text><text class="terminal-2106414123-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-34)"> -</text><text class="terminal-2106414123-r1" x="0" y="874" textLength="597.8" clip-path="url(#terminal-2106414123-line-35)">                        choose type of prerelease</text><text class="terminal-2106414123-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-2106414123-line-35)"> -</text><text class="terminal-2106414123-r1" x="0" y="898.4" textLength="488" clip-path="url(#terminal-2106414123-line-36)">  --devrelease DEVRELEASE, -d DEVRELEASE</text><text class="terminal-2106414123-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-36)"> -</text><text class="terminal-2106414123-r1" x="0" y="922.8" textLength="841.8" clip-path="url(#terminal-2106414123-line-37)">                        specify non-negative integer for dev. release</text><text class="terminal-2106414123-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-37)"> -</text><text class="terminal-2106414123-r1" x="0" y="947.2" textLength="170.8" clip-path="url(#terminal-2106414123-line-38)">  --increment </text><text class="terminal-2106414123-r2" x="170.8" y="947.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-38)">{</text><text class="terminal-2106414123-r1" x="183" y="947.2" textLength="207.4" clip-path="url(#terminal-2106414123-line-38)">MAJOR,MINOR,PATCH</text><text class="terminal-2106414123-r2" x="390.4" y="947.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-38)">}</text><text class="terminal-2106414123-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-38)"> -</text><text class="terminal-2106414123-r1" x="0" y="971.6" textLength="756.4" clip-path="url(#terminal-2106414123-line-39)">                        manually specify the desired increment</text><text class="terminal-2106414123-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-39)"> -</text><text class="terminal-2106414123-r1" x="0" y="996" textLength="231.8" clip-path="url(#terminal-2106414123-line-40)">  --increment-mode </text><text class="terminal-2106414123-r2" x="231.8" y="996" textLength="12.2" clip-path="url(#terminal-2106414123-line-40)">{</text><text class="terminal-2106414123-r1" x="244" y="996" textLength="146.4" clip-path="url(#terminal-2106414123-line-40)">linear,exact</text><text class="terminal-2106414123-r2" x="390.4" y="996" textLength="12.2" clip-path="url(#terminal-2106414123-line-40)">}</text><text class="terminal-2106414123-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-2106414123-line-40)"> -</text><text class="terminal-2106414123-r1" x="0" y="1020.4" textLength="902.8" clip-path="url(#terminal-2106414123-line-41)">                        set the method by which the new version is chosen.</text><text class="terminal-2106414123-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-41)"> -</text><text class="terminal-2106414123-r4" x="292.8" y="1044.8" textLength="97.6" clip-path="url(#terminal-2106414123-line-42)">'linear'</text><text class="terminal-2106414123-r2" x="402.6" y="1044.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-42)">(</text><text class="terminal-2106414123-r1" x="414.8" y="1044.8" textLength="85.4" clip-path="url(#terminal-2106414123-line-42)">default</text><text class="terminal-2106414123-r2" x="500.2" y="1044.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-42)">)</text><text class="terminal-2106414123-r1" x="512.4" y="1044.8" textLength="414.8" clip-path="url(#terminal-2106414123-line-42)"> guesses the next version based on</text><text class="terminal-2106414123-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-42)"> -</text><text class="terminal-2106414123-r1" x="0" y="1069.2" textLength="939.4" clip-path="url(#terminal-2106414123-line-43)">                        typical linear version progression, such that bumping</text><text class="terminal-2106414123-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-43)"> -</text><text class="terminal-2106414123-r1" x="0" y="1093.6" textLength="866.2" clip-path="url(#terminal-2106414123-line-44)">                        of a pre-release with lower precedence than the</text><text class="terminal-2106414123-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-44)"> -</text><text class="terminal-2106414123-r1" x="0" y="1118" textLength="939.4" clip-path="url(#terminal-2106414123-line-45)">                        current pre-release phase maintains the current phase</text><text class="terminal-2106414123-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-2106414123-line-45)"> -</text><text class="terminal-2106414123-r1" x="0" y="1142.4" textLength="561.2" clip-path="url(#terminal-2106414123-line-46)">                        of higher precedence. </text><text class="terminal-2106414123-r4" x="561.2" y="1142.4" textLength="85.4" clip-path="url(#terminal-2106414123-line-46)">'exact'</text><text class="terminal-2106414123-r1" x="646.6" y="1142.4" textLength="305" clip-path="url(#terminal-2106414123-line-46)"> applies the changes that</text><text class="terminal-2106414123-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-46)"> -</text><text class="terminal-2106414123-r1" x="0" y="1166.8" textLength="536.8" clip-path="url(#terminal-2106414123-line-47)">                        have been specified </text><text class="terminal-2106414123-r2" x="536.8" y="1166.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-47)">(</text><text class="terminal-2106414123-r1" x="549" y="1166.8" textLength="353.8" clip-path="url(#terminal-2106414123-line-47)">or determined from the commit</text><text class="terminal-2106414123-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-47)"> -</text><text class="terminal-2106414123-r1" x="0" y="1191.2" textLength="329.4" clip-path="url(#terminal-2106414123-line-48)">                        log</text><text class="terminal-2106414123-r2" x="329.4" y="1191.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-48)">)</text><text class="terminal-2106414123-r1" x="341.6" y="1191.2" textLength="585.6" clip-path="url(#terminal-2106414123-line-48)"> without interpretation, such that the increment</text><text class="terminal-2106414123-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-48)"> -</text><text class="terminal-2106414123-r1" x="0" y="1215.6" textLength="707.6" clip-path="url(#terminal-2106414123-line-49)">                        and pre-release are always honored</text><text class="terminal-2106414123-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-49)"> -</text><text class="terminal-2106414123-r1" x="0" y="1240" textLength="317.2" clip-path="url(#terminal-2106414123-line-50)">  --check-consistency, -cc</text><text class="terminal-2106414123-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-2106414123-line-50)"> -</text><text class="terminal-2106414123-r1" x="0" y="1264.4" textLength="951.6" clip-path="url(#terminal-2106414123-line-51)">                        check consistency among versions defined in commitizen</text><text class="terminal-2106414123-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-51)"> -</text><text class="terminal-2106414123-r1" x="0" y="1288.8" textLength="671" clip-path="url(#terminal-2106414123-line-52)">                        configuration and version_files</text><text class="terminal-2106414123-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-52)"> -</text><text class="terminal-2106414123-r1" x="0" y="1313.2" textLength="866.2" clip-path="url(#terminal-2106414123-line-53)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-2106414123-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-53)"> -</text><text class="terminal-2106414123-r1" x="0" y="1337.6" textLength="915" clip-path="url(#terminal-2106414123-line-54)">  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-2106414123-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-54)"> -</text><text class="terminal-2106414123-r1" x="0" y="1362" textLength="634.4" clip-path="url(#terminal-2106414123-line-55)">                        create annotated tag message</text><text class="terminal-2106414123-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-2106414123-line-55)"> -</text><text class="terminal-2106414123-r1" x="0" y="1386.4" textLength="719.8" clip-path="url(#terminal-2106414123-line-56)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-2106414123-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-56)"> -</text><text class="terminal-2106414123-r1" x="0" y="1410.8" textLength="280.6" clip-path="url(#terminal-2106414123-line-57)">  --changelog-to-stdout</text><text class="terminal-2106414123-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-57)"> -</text><text class="terminal-2106414123-r1" x="0" y="1435.2" textLength="658.8" clip-path="url(#terminal-2106414123-line-58)">                        Output changelog to the stdout</text><text class="terminal-2106414123-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-58)"> -</text><text class="terminal-2106414123-r1" x="0" y="1459.6" textLength="292.8" clip-path="url(#terminal-2106414123-line-59)">  --git-output-to-stderr</text><text class="terminal-2106414123-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-59)"> -</text><text class="terminal-2106414123-r1" x="0" y="1484" textLength="646.6" clip-path="url(#terminal-2106414123-line-60)">                        Redirect git output to stderr</text><text class="terminal-2106414123-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-2106414123-line-60)"> -</text><text class="terminal-2106414123-r1" x="0" y="1508.4" textLength="744.2" clip-path="url(#terminal-2106414123-line-61)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-2106414123-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-61)"> -</text><text class="terminal-2106414123-r1" x="0" y="1532.8" textLength="939.4" clip-path="url(#terminal-2106414123-line-62)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-2106414123-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-62)"> -</text><text class="terminal-2106414123-r1" x="0" y="1557.2" textLength="414.8" clip-path="url(#terminal-2106414123-line-63)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-2106414123-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-63)"> -</text><text class="terminal-2106414123-r1" x="0" y="1581.6" textLength="646.6" clip-path="url(#terminal-2106414123-line-64)">                        changelog template file name </text><text class="terminal-2106414123-r2" x="646.6" y="1581.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-64)">(</text><text class="terminal-2106414123-r1" x="658.8" y="1581.6" textLength="280.6" clip-path="url(#terminal-2106414123-line-64)">relative to the current</text><text class="terminal-2106414123-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-64)"> -</text><text class="terminal-2106414123-r1" x="0" y="1606" textLength="500.2" clip-path="url(#terminal-2106414123-line-65)">                        working directory</text><text class="terminal-2106414123-r2" x="500.2" y="1606" textLength="12.2" clip-path="url(#terminal-2106414123-line-65)">)</text><text class="terminal-2106414123-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-2106414123-line-65)"> -</text><text class="terminal-2106414123-r1" x="0" y="1630.4" textLength="305" clip-path="url(#terminal-2106414123-line-66)">  --extra EXTRA, -e EXTRA</text><text class="terminal-2106414123-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-66)"> -</text><text class="terminal-2106414123-r1" x="0" y="1654.8" textLength="622.2" clip-path="url(#terminal-2106414123-line-67)">                        a changelog extra variable </text><text class="terminal-2106414123-r2" x="622.2" y="1654.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-67)">(</text><text class="terminal-2106414123-r1" x="634.4" y="1654.8" textLength="146.4" clip-path="url(#terminal-2106414123-line-67)">in the form </text><text class="terminal-2106414123-r4" x="780.8" y="1654.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-67)">'</text><text class="terminal-2106414123-r4" x="793" y="1654.8" textLength="36.6" clip-path="url(#terminal-2106414123-line-67)">key</text><text class="terminal-2106414123-r4" x="829.6" y="1654.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-67)">=</text><text class="terminal-2106414123-r4" x="841.8" y="1654.8" textLength="61" clip-path="url(#terminal-2106414123-line-67)">value</text><text class="terminal-2106414123-r4" x="902.8" y="1654.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-67)">'</text><text class="terminal-2106414123-r2" x="915" y="1654.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-67)">)</text><text class="terminal-2106414123-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-67)"> -</text><text class="terminal-2106414123-r1" x="0" y="1679.2" textLength="280.6" clip-path="url(#terminal-2106414123-line-68)">  --file-name FILE_NAME</text><text class="terminal-2106414123-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-68)"> -</text><text class="terminal-2106414123-r1" x="0" y="1703.6" textLength="573.4" clip-path="url(#terminal-2106414123-line-69)">                        file name of changelog </text><text class="terminal-2106414123-r2" x="573.4" y="1703.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-69)">(</text><text class="terminal-2106414123-r1" x="585.6" y="1703.6" textLength="109.8" clip-path="url(#terminal-2106414123-line-69)">default: </text><text class="terminal-2106414123-r4" x="695.4" y="1703.6" textLength="170.8" clip-path="url(#terminal-2106414123-line-69)">'CHANGELOG.md'</text><text class="terminal-2106414123-r2" x="866.2" y="1703.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-69)">)</text><text class="terminal-2106414123-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-69)"> -</text><text class="terminal-2106414123-r1" x="0" y="1728" textLength="475.8" clip-path="url(#terminal-2106414123-line-70)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-2106414123-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-2106414123-line-70)"> -</text><text class="terminal-2106414123-r1" x="0" y="1752.4" textLength="719.8" clip-path="url(#terminal-2106414123-line-71)">                        start pre-releases with this offset</text><text class="terminal-2106414123-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-71)"> -</text><text class="terminal-2106414123-r1" x="0" y="1776.8" textLength="231.8" clip-path="url(#terminal-2106414123-line-72)">  --version-scheme </text><text class="terminal-2106414123-r2" x="231.8" y="1776.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-72)">{</text><text class="terminal-2106414123-r1" x="244" y="1776.8" textLength="158.6" clip-path="url(#terminal-2106414123-line-72)">semver,pep440</text><text class="terminal-2106414123-r2" x="402.6" y="1776.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-72)">}</text><text class="terminal-2106414123-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-72)"> -</text><text class="terminal-2106414123-r1" x="0" y="1801.2" textLength="549" clip-path="url(#terminal-2106414123-line-73)">                        choose version scheme</text><text class="terminal-2106414123-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-73)"> -</text><text class="terminal-2106414123-r1" x="0" y="1825.6" textLength="207.4" clip-path="url(#terminal-2106414123-line-74)">  --version-type </text><text class="terminal-2106414123-r2" x="207.4" y="1825.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-74)">{</text><text class="terminal-2106414123-r1" x="219.6" y="1825.6" textLength="158.6" clip-path="url(#terminal-2106414123-line-74)">semver,pep440</text><text class="terminal-2106414123-r2" x="378.2" y="1825.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-74)">}</text><text class="terminal-2106414123-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-2106414123-line-74)"> -</text><text class="terminal-2106414123-r1" x="0" y="1850" textLength="683.2" clip-path="url(#terminal-2106414123-line-75)">                        Deprecated, use --version-scheme</text><text class="terminal-2106414123-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-2106414123-line-75)"> -</text><text class="terminal-2106414123-r1" x="0" y="1874.4" textLength="402.6" clip-path="url(#terminal-2106414123-line-76)">  --build-metadata BUILD_METADATA</text><text class="terminal-2106414123-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-2106414123-line-76)"> -</text><text class="terminal-2106414123-r1" x="0" y="1898.8" textLength="915" clip-path="url(#terminal-2106414123-line-77)">                        Add additional build-metadata to the version-number</text><text class="terminal-2106414123-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-2106414123-line-77)"> -</text><text class="terminal-2106414123-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-2106414123-line-78)"> + + <g transform="translate(9, 41)" clip-path="url(#terminal-908877803-clip-terminal)"> + + <g class="terminal-908877803-matrix"> + <text class="terminal-908877803-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-908877803-line-0)">$ cz bump --help</text><text class="terminal-908877803-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-908877803-line-0)"> +</text><text class="terminal-908877803-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-908877803-line-1)">usage: cz bump </text><text class="terminal-908877803-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">[</text><text class="terminal-908877803-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-908877803-line-1)">-h</text><text class="terminal-908877803-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">]</text><text class="terminal-908877803-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">[</text><text class="terminal-908877803-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-908877803-line-1)">--dry-run</text><text class="terminal-908877803-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">]</text><text class="terminal-908877803-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">[</text><text class="terminal-908877803-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-908877803-line-1)">--files-only</text><text class="terminal-908877803-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">]</text><text class="terminal-908877803-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">[</text><text class="terminal-908877803-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-908877803-line-1)">--local-version</text><text class="terminal-908877803-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">]</text><text class="terminal-908877803-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">[</text><text class="terminal-908877803-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-908877803-line-1)">--changelog</text><text class="terminal-908877803-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">]</text><text class="terminal-908877803-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)"> +</text><text class="terminal-908877803-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)">[</text><text class="terminal-908877803-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-908877803-line-2)">--no-verify</text><text class="terminal-908877803-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)">]</text><text class="terminal-908877803-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)">[</text><text class="terminal-908877803-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-908877803-line-2)">--yes</text><text class="terminal-908877803-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)">]</text><text class="terminal-908877803-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)">[</text><text class="terminal-908877803-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-908877803-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-908877803-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)">]</text><text class="terminal-908877803-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)"> +</text><text class="terminal-908877803-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)">[</text><text class="terminal-908877803-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-908877803-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-908877803-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)">]</text><text class="terminal-908877803-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)">[</text><text class="terminal-908877803-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-908877803-line-3)">--prerelease </text><text class="terminal-908877803-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)">{</text><text class="terminal-908877803-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-908877803-line-3)">alpha,beta,rc</text><text class="terminal-908877803-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)">}</text><text class="terminal-908877803-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)">]</text><text class="terminal-908877803-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)"> +</text><text class="terminal-908877803-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)">[</text><text class="terminal-908877803-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-908877803-line-4)">--devrelease DEVRELEASE</text><text class="terminal-908877803-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)">]</text><text class="terminal-908877803-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)">[</text><text class="terminal-908877803-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-908877803-line-4)">--increment </text><text class="terminal-908877803-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)">{</text><text class="terminal-908877803-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-908877803-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-908877803-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)">}</text><text class="terminal-908877803-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)">]</text><text class="terminal-908877803-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)"> +</text><text class="terminal-908877803-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)">[</text><text class="terminal-908877803-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-908877803-line-5)">--increment-mode </text><text class="terminal-908877803-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)">{</text><text class="terminal-908877803-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-908877803-line-5)">linear,exact</text><text class="terminal-908877803-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)">}</text><text class="terminal-908877803-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)">]</text><text class="terminal-908877803-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)">[</text><text class="terminal-908877803-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-908877803-line-5)">--check-consistency</text><text class="terminal-908877803-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)">]</text><text class="terminal-908877803-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)"> +</text><text class="terminal-908877803-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-908877803-line-6)">[</text><text class="terminal-908877803-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-908877803-line-6)">--annotated-tag</text><text class="terminal-908877803-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-908877803-line-6)">]</text><text class="terminal-908877803-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-908877803-line-6)"> +</text><text class="terminal-908877803-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-908877803-line-7)">[</text><text class="terminal-908877803-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-908877803-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-908877803-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-908877803-line-7)">]</text><text class="terminal-908877803-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-908877803-line-7)">[</text><text class="terminal-908877803-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-908877803-line-7)">--gpg-sign</text><text class="terminal-908877803-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-908877803-line-7)">]</text><text class="terminal-908877803-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-908877803-line-7)"> +</text><text class="terminal-908877803-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)">[</text><text class="terminal-908877803-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-908877803-line-8)">--changelog-to-stdout</text><text class="terminal-908877803-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)">]</text><text class="terminal-908877803-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)">[</text><text class="terminal-908877803-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-908877803-line-8)">--git-output-to-stderr</text><text class="terminal-908877803-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)">]</text><text class="terminal-908877803-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)">[</text><text class="terminal-908877803-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-908877803-line-8)">--retry</text><text class="terminal-908877803-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)">]</text><text class="terminal-908877803-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)"> +</text><text class="terminal-908877803-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)">[</text><text class="terminal-908877803-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-908877803-line-9)">--major-version-zero</text><text class="terminal-908877803-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)">]</text><text class="terminal-908877803-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)">[</text><text class="terminal-908877803-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-908877803-line-9)">--template TEMPLATE</text><text class="terminal-908877803-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)">]</text><text class="terminal-908877803-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)">[</text><text class="terminal-908877803-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-908877803-line-9)">--extra EXTRA</text><text class="terminal-908877803-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)">]</text><text class="terminal-908877803-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)"> +</text><text class="terminal-908877803-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-908877803-line-10)">[</text><text class="terminal-908877803-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-908877803-line-10)">--file-name FILE_NAME</text><text class="terminal-908877803-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-908877803-line-10)">]</text><text class="terminal-908877803-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-908877803-line-10)">[</text><text class="terminal-908877803-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-908877803-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-908877803-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-908877803-line-10)">]</text><text class="terminal-908877803-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-908877803-line-10)"> +</text><text class="terminal-908877803-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-908877803-line-11)">[</text><text class="terminal-908877803-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-908877803-line-11)">--version-scheme </text><text class="terminal-908877803-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-908877803-line-11)">{</text><text class="terminal-908877803-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-908877803-line-11)">pep440,semver,semver2</text><text class="terminal-908877803-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-908877803-line-11)">}</text><text class="terminal-908877803-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-908877803-line-11)">]</text><text class="terminal-908877803-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-908877803-line-11)"> +</text><text class="terminal-908877803-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-908877803-line-12)">[</text><text class="terminal-908877803-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-908877803-line-12)">--version-type </text><text class="terminal-908877803-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-908877803-line-12)">{</text><text class="terminal-908877803-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-908877803-line-12)">pep440,semver,semver2</text><text class="terminal-908877803-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-908877803-line-12)">}</text><text class="terminal-908877803-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-908877803-line-12)">]</text><text class="terminal-908877803-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-908877803-line-12)"> +</text><text class="terminal-908877803-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-908877803-line-13)">[</text><text class="terminal-908877803-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-908877803-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-908877803-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-908877803-line-13)">]</text><text class="terminal-908877803-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-908877803-line-13)"> +</text><text class="terminal-908877803-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-908877803-line-14)">[</text><text class="terminal-908877803-r1" x="195.2" y="361.6" textLength="170.8" clip-path="url(#terminal-908877803-line-14)">MANUAL_VERSION</text><text class="terminal-908877803-r2" x="366" y="361.6" textLength="12.2" clip-path="url(#terminal-908877803-line-14)">]</text><text class="terminal-908877803-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-908877803-line-14)"> +</text><text class="terminal-908877803-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-908877803-line-15)"> +</text><text class="terminal-908877803-r1" x="0" y="410.4" textLength="256.2" clip-path="url(#terminal-908877803-line-16)">positional arguments:</text><text class="terminal-908877803-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-908877803-line-16)"> +</text><text class="terminal-908877803-r1" x="0" y="434.8" textLength="610" clip-path="url(#terminal-908877803-line-17)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-908877803-r2" x="610" y="434.8" textLength="12.2" clip-path="url(#terminal-908877803-line-17)">(</text><text class="terminal-908877803-r1" x="622.2" y="434.8" textLength="61" clip-path="url(#terminal-908877803-line-17)">e.g: </text><text class="terminal-908877803-r3" x="683.2" y="434.8" textLength="36.6" clip-path="url(#terminal-908877803-line-17)">1.5</text><text class="terminal-908877803-r1" x="719.8" y="434.8" textLength="12.2" clip-path="url(#terminal-908877803-line-17)">.</text><text class="terminal-908877803-r3" x="732" y="434.8" textLength="12.2" clip-path="url(#terminal-908877803-line-17)">3</text><text class="terminal-908877803-r2" x="744.2" y="434.8" textLength="12.2" clip-path="url(#terminal-908877803-line-17)">)</text><text class="terminal-908877803-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-908877803-line-17)"> +</text><text class="terminal-908877803-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-908877803-line-18)"> +</text><text class="terminal-908877803-r1" x="0" y="483.6" textLength="97.6" clip-path="url(#terminal-908877803-line-19)">options:</text><text class="terminal-908877803-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-908877803-line-19)"> +</text><text class="terminal-908877803-r1" x="0" y="508" textLength="671" clip-path="url(#terminal-908877803-line-20)">  -h, --help            show this help message and exit</text><text class="terminal-908877803-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-908877803-line-20)"> +</text><text class="terminal-908877803-r1" x="0" y="532.4" textLength="915" clip-path="url(#terminal-908877803-line-21)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-908877803-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-908877803-line-21)"> +</text><text class="terminal-908877803-r1" x="0" y="556.8" textLength="793" clip-path="url(#terminal-908877803-line-22)">  --files-only          bump version in the files from the config</text><text class="terminal-908877803-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-908877803-line-22)"> +</text><text class="terminal-908877803-r1" x="0" y="581.2" textLength="719.8" clip-path="url(#terminal-908877803-line-23)">  --local-version       bump only the local version portion</text><text class="terminal-908877803-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-908877803-line-23)"> +</text><text class="terminal-908877803-r1" x="0" y="605.6" textLength="841.8" clip-path="url(#terminal-908877803-line-24)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-908877803-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-908877803-line-24)"> +</text><text class="terminal-908877803-r1" x="0" y="630" textLength="902.8" clip-path="url(#terminal-908877803-line-25)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-908877803-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-908877803-line-25)"> +</text><text class="terminal-908877803-r1" x="0" y="654.4" textLength="353.8" clip-path="url(#terminal-908877803-line-26)">                        hooks</text><text class="terminal-908877803-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-908877803-line-26)"> +</text><text class="terminal-908877803-r1" x="0" y="678.8" textLength="719.8" clip-path="url(#terminal-908877803-line-27)">  --yes                 accept automatically questions done</text><text class="terminal-908877803-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-908877803-line-27)"> +</text><text class="terminal-908877803-r1" x="0" y="703.2" textLength="305" clip-path="url(#terminal-908877803-line-28)">  --tag-format TAG_FORMAT</text><text class="terminal-908877803-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-908877803-line-28)"> +</text><text class="terminal-908877803-r1" x="0" y="727.6" textLength="939.4" clip-path="url(#terminal-908877803-line-29)">                        the format used to tag the commit and read it, use it</text><text class="terminal-908877803-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-908877803-line-29)"> +</text><text class="terminal-908877803-r1" x="0" y="752" textLength="866.2" clip-path="url(#terminal-908877803-line-30)">                        in existing projects, wrap around simple quotes</text><text class="terminal-908877803-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-908877803-line-30)"> +</text><text class="terminal-908877803-r1" x="0" y="776.4" textLength="353.8" clip-path="url(#terminal-908877803-line-31)">  --bump-message BUMP_MESSAGE</text><text class="terminal-908877803-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-908877803-line-31)"> +</text><text class="terminal-908877803-r1" x="0" y="800.8" textLength="902.8" clip-path="url(#terminal-908877803-line-32)">                        template used to create the release commit, useful</text><text class="terminal-908877803-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-908877803-line-32)"> +</text><text class="terminal-908877803-r1" x="0" y="825.2" textLength="536.8" clip-path="url(#terminal-908877803-line-33)">                        when working with CI</text><text class="terminal-908877803-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-908877803-line-33)"> +</text><text class="terminal-908877803-r1" x="0" y="849.6" textLength="183" clip-path="url(#terminal-908877803-line-34)">  --prerelease </text><text class="terminal-908877803-r2" x="183" y="849.6" textLength="12.2" clip-path="url(#terminal-908877803-line-34)">{</text><text class="terminal-908877803-r1" x="195.2" y="849.6" textLength="158.6" clip-path="url(#terminal-908877803-line-34)">alpha,beta,rc</text><text class="terminal-908877803-r2" x="353.8" y="849.6" textLength="12.2" clip-path="url(#terminal-908877803-line-34)">}</text><text class="terminal-908877803-r1" x="366" y="849.6" textLength="73.2" clip-path="url(#terminal-908877803-line-34)">, -pr </text><text class="terminal-908877803-r2" x="439.2" y="849.6" textLength="12.2" clip-path="url(#terminal-908877803-line-34)">{</text><text class="terminal-908877803-r1" x="451.4" y="849.6" textLength="158.6" clip-path="url(#terminal-908877803-line-34)">alpha,beta,rc</text><text class="terminal-908877803-r2" x="610" y="849.6" textLength="12.2" clip-path="url(#terminal-908877803-line-34)">}</text><text class="terminal-908877803-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-908877803-line-34)"> +</text><text class="terminal-908877803-r1" x="0" y="874" textLength="597.8" clip-path="url(#terminal-908877803-line-35)">                        choose type of prerelease</text><text class="terminal-908877803-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-908877803-line-35)"> +</text><text class="terminal-908877803-r1" x="0" y="898.4" textLength="488" clip-path="url(#terminal-908877803-line-36)">  --devrelease DEVRELEASE, -d DEVRELEASE</text><text class="terminal-908877803-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-908877803-line-36)"> +</text><text class="terminal-908877803-r1" x="0" y="922.8" textLength="841.8" clip-path="url(#terminal-908877803-line-37)">                        specify non-negative integer for dev. release</text><text class="terminal-908877803-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-908877803-line-37)"> +</text><text class="terminal-908877803-r1" x="0" y="947.2" textLength="170.8" clip-path="url(#terminal-908877803-line-38)">  --increment </text><text class="terminal-908877803-r2" x="170.8" y="947.2" textLength="12.2" clip-path="url(#terminal-908877803-line-38)">{</text><text class="terminal-908877803-r1" x="183" y="947.2" textLength="207.4" clip-path="url(#terminal-908877803-line-38)">MAJOR,MINOR,PATCH</text><text class="terminal-908877803-r2" x="390.4" y="947.2" textLength="12.2" clip-path="url(#terminal-908877803-line-38)">}</text><text class="terminal-908877803-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-908877803-line-38)"> +</text><text class="terminal-908877803-r1" x="0" y="971.6" textLength="756.4" clip-path="url(#terminal-908877803-line-39)">                        manually specify the desired increment</text><text class="terminal-908877803-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-908877803-line-39)"> +</text><text class="terminal-908877803-r1" x="0" y="996" textLength="231.8" clip-path="url(#terminal-908877803-line-40)">  --increment-mode </text><text class="terminal-908877803-r2" x="231.8" y="996" textLength="12.2" clip-path="url(#terminal-908877803-line-40)">{</text><text class="terminal-908877803-r1" x="244" y="996" textLength="146.4" clip-path="url(#terminal-908877803-line-40)">linear,exact</text><text class="terminal-908877803-r2" x="390.4" y="996" textLength="12.2" clip-path="url(#terminal-908877803-line-40)">}</text><text class="terminal-908877803-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-908877803-line-40)"> +</text><text class="terminal-908877803-r1" x="0" y="1020.4" textLength="902.8" clip-path="url(#terminal-908877803-line-41)">                        set the method by which the new version is chosen.</text><text class="terminal-908877803-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-908877803-line-41)"> +</text><text class="terminal-908877803-r4" x="292.8" y="1044.8" textLength="97.6" clip-path="url(#terminal-908877803-line-42)">'linear'</text><text class="terminal-908877803-r2" x="402.6" y="1044.8" textLength="12.2" clip-path="url(#terminal-908877803-line-42)">(</text><text class="terminal-908877803-r1" x="414.8" y="1044.8" textLength="85.4" clip-path="url(#terminal-908877803-line-42)">default</text><text class="terminal-908877803-r2" x="500.2" y="1044.8" textLength="12.2" clip-path="url(#terminal-908877803-line-42)">)</text><text class="terminal-908877803-r1" x="512.4" y="1044.8" textLength="414.8" clip-path="url(#terminal-908877803-line-42)"> guesses the next version based on</text><text class="terminal-908877803-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-908877803-line-42)"> +</text><text class="terminal-908877803-r1" x="0" y="1069.2" textLength="939.4" clip-path="url(#terminal-908877803-line-43)">                        typical linear version progression, such that bumping</text><text class="terminal-908877803-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-908877803-line-43)"> +</text><text class="terminal-908877803-r1" x="0" y="1093.6" textLength="866.2" clip-path="url(#terminal-908877803-line-44)">                        of a pre-release with lower precedence than the</text><text class="terminal-908877803-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-908877803-line-44)"> +</text><text class="terminal-908877803-r1" x="0" y="1118" textLength="939.4" clip-path="url(#terminal-908877803-line-45)">                        current pre-release phase maintains the current phase</text><text class="terminal-908877803-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-908877803-line-45)"> +</text><text class="terminal-908877803-r1" x="0" y="1142.4" textLength="561.2" clip-path="url(#terminal-908877803-line-46)">                        of higher precedence. </text><text class="terminal-908877803-r4" x="561.2" y="1142.4" textLength="85.4" clip-path="url(#terminal-908877803-line-46)">'exact'</text><text class="terminal-908877803-r1" x="646.6" y="1142.4" textLength="305" clip-path="url(#terminal-908877803-line-46)"> applies the changes that</text><text class="terminal-908877803-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-908877803-line-46)"> +</text><text class="terminal-908877803-r1" x="0" y="1166.8" textLength="536.8" clip-path="url(#terminal-908877803-line-47)">                        have been specified </text><text class="terminal-908877803-r2" x="536.8" y="1166.8" textLength="12.2" clip-path="url(#terminal-908877803-line-47)">(</text><text class="terminal-908877803-r1" x="549" y="1166.8" textLength="353.8" clip-path="url(#terminal-908877803-line-47)">or determined from the commit</text><text class="terminal-908877803-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-908877803-line-47)"> +</text><text class="terminal-908877803-r1" x="0" y="1191.2" textLength="329.4" clip-path="url(#terminal-908877803-line-48)">                        log</text><text class="terminal-908877803-r2" x="329.4" y="1191.2" textLength="12.2" clip-path="url(#terminal-908877803-line-48)">)</text><text class="terminal-908877803-r1" x="341.6" y="1191.2" textLength="585.6" clip-path="url(#terminal-908877803-line-48)"> without interpretation, such that the increment</text><text class="terminal-908877803-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-908877803-line-48)"> +</text><text class="terminal-908877803-r1" x="0" y="1215.6" textLength="707.6" clip-path="url(#terminal-908877803-line-49)">                        and pre-release are always honored</text><text class="terminal-908877803-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-908877803-line-49)"> +</text><text class="terminal-908877803-r1" x="0" y="1240" textLength="317.2" clip-path="url(#terminal-908877803-line-50)">  --check-consistency, -cc</text><text class="terminal-908877803-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-908877803-line-50)"> +</text><text class="terminal-908877803-r1" x="0" y="1264.4" textLength="951.6" clip-path="url(#terminal-908877803-line-51)">                        check consistency among versions defined in commitizen</text><text class="terminal-908877803-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-908877803-line-51)"> +</text><text class="terminal-908877803-r1" x="0" y="1288.8" textLength="671" clip-path="url(#terminal-908877803-line-52)">                        configuration and version_files</text><text class="terminal-908877803-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-908877803-line-52)"> +</text><text class="terminal-908877803-r1" x="0" y="1313.2" textLength="866.2" clip-path="url(#terminal-908877803-line-53)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-908877803-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-908877803-line-53)"> +</text><text class="terminal-908877803-r1" x="0" y="1337.6" textLength="915" clip-path="url(#terminal-908877803-line-54)">  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-908877803-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-908877803-line-54)"> +</text><text class="terminal-908877803-r1" x="0" y="1362" textLength="634.4" clip-path="url(#terminal-908877803-line-55)">                        create annotated tag message</text><text class="terminal-908877803-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-908877803-line-55)"> +</text><text class="terminal-908877803-r1" x="0" y="1386.4" textLength="719.8" clip-path="url(#terminal-908877803-line-56)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-908877803-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-908877803-line-56)"> +</text><text class="terminal-908877803-r1" x="0" y="1410.8" textLength="280.6" clip-path="url(#terminal-908877803-line-57)">  --changelog-to-stdout</text><text class="terminal-908877803-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-908877803-line-57)"> +</text><text class="terminal-908877803-r1" x="0" y="1435.2" textLength="658.8" clip-path="url(#terminal-908877803-line-58)">                        Output changelog to the stdout</text><text class="terminal-908877803-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-908877803-line-58)"> +</text><text class="terminal-908877803-r1" x="0" y="1459.6" textLength="292.8" clip-path="url(#terminal-908877803-line-59)">  --git-output-to-stderr</text><text class="terminal-908877803-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-908877803-line-59)"> +</text><text class="terminal-908877803-r1" x="0" y="1484" textLength="646.6" clip-path="url(#terminal-908877803-line-60)">                        Redirect git output to stderr</text><text class="terminal-908877803-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-908877803-line-60)"> +</text><text class="terminal-908877803-r1" x="0" y="1508.4" textLength="744.2" clip-path="url(#terminal-908877803-line-61)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-908877803-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-908877803-line-61)"> +</text><text class="terminal-908877803-r1" x="0" y="1532.8" textLength="939.4" clip-path="url(#terminal-908877803-line-62)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-908877803-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-908877803-line-62)"> +</text><text class="terminal-908877803-r1" x="0" y="1557.2" textLength="414.8" clip-path="url(#terminal-908877803-line-63)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-908877803-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-908877803-line-63)"> +</text><text class="terminal-908877803-r1" x="0" y="1581.6" textLength="646.6" clip-path="url(#terminal-908877803-line-64)">                        changelog template file name </text><text class="terminal-908877803-r2" x="646.6" y="1581.6" textLength="12.2" clip-path="url(#terminal-908877803-line-64)">(</text><text class="terminal-908877803-r1" x="658.8" y="1581.6" textLength="280.6" clip-path="url(#terminal-908877803-line-64)">relative to the current</text><text class="terminal-908877803-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-908877803-line-64)"> +</text><text class="terminal-908877803-r1" x="0" y="1606" textLength="500.2" clip-path="url(#terminal-908877803-line-65)">                        working directory</text><text class="terminal-908877803-r2" x="500.2" y="1606" textLength="12.2" clip-path="url(#terminal-908877803-line-65)">)</text><text class="terminal-908877803-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-908877803-line-65)"> +</text><text class="terminal-908877803-r1" x="0" y="1630.4" textLength="305" clip-path="url(#terminal-908877803-line-66)">  --extra EXTRA, -e EXTRA</text><text class="terminal-908877803-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-908877803-line-66)"> +</text><text class="terminal-908877803-r1" x="0" y="1654.8" textLength="622.2" clip-path="url(#terminal-908877803-line-67)">                        a changelog extra variable </text><text class="terminal-908877803-r2" x="622.2" y="1654.8" textLength="12.2" clip-path="url(#terminal-908877803-line-67)">(</text><text class="terminal-908877803-r1" x="634.4" y="1654.8" textLength="146.4" clip-path="url(#terminal-908877803-line-67)">in the form </text><text class="terminal-908877803-r4" x="780.8" y="1654.8" textLength="12.2" clip-path="url(#terminal-908877803-line-67)">'</text><text class="terminal-908877803-r4" x="793" y="1654.8" textLength="36.6" clip-path="url(#terminal-908877803-line-67)">key</text><text class="terminal-908877803-r4" x="829.6" y="1654.8" textLength="12.2" clip-path="url(#terminal-908877803-line-67)">=</text><text class="terminal-908877803-r4" x="841.8" y="1654.8" textLength="61" clip-path="url(#terminal-908877803-line-67)">value</text><text class="terminal-908877803-r4" x="902.8" y="1654.8" textLength="12.2" clip-path="url(#terminal-908877803-line-67)">'</text><text class="terminal-908877803-r2" x="915" y="1654.8" textLength="12.2" clip-path="url(#terminal-908877803-line-67)">)</text><text class="terminal-908877803-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-908877803-line-67)"> +</text><text class="terminal-908877803-r1" x="0" y="1679.2" textLength="280.6" clip-path="url(#terminal-908877803-line-68)">  --file-name FILE_NAME</text><text class="terminal-908877803-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-908877803-line-68)"> +</text><text class="terminal-908877803-r1" x="0" y="1703.6" textLength="573.4" clip-path="url(#terminal-908877803-line-69)">                        file name of changelog </text><text class="terminal-908877803-r2" x="573.4" y="1703.6" textLength="12.2" clip-path="url(#terminal-908877803-line-69)">(</text><text class="terminal-908877803-r1" x="585.6" y="1703.6" textLength="109.8" clip-path="url(#terminal-908877803-line-69)">default: </text><text class="terminal-908877803-r4" x="695.4" y="1703.6" textLength="170.8" clip-path="url(#terminal-908877803-line-69)">'CHANGELOG.md'</text><text class="terminal-908877803-r2" x="866.2" y="1703.6" textLength="12.2" clip-path="url(#terminal-908877803-line-69)">)</text><text class="terminal-908877803-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-908877803-line-69)"> +</text><text class="terminal-908877803-r1" x="0" y="1728" textLength="475.8" clip-path="url(#terminal-908877803-line-70)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-908877803-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-908877803-line-70)"> +</text><text class="terminal-908877803-r1" x="0" y="1752.4" textLength="719.8" clip-path="url(#terminal-908877803-line-71)">                        start pre-releases with this offset</text><text class="terminal-908877803-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-908877803-line-71)"> +</text><text class="terminal-908877803-r1" x="0" y="1776.8" textLength="231.8" clip-path="url(#terminal-908877803-line-72)">  --version-scheme </text><text class="terminal-908877803-r2" x="231.8" y="1776.8" textLength="12.2" clip-path="url(#terminal-908877803-line-72)">{</text><text class="terminal-908877803-r1" x="244" y="1776.8" textLength="256.2" clip-path="url(#terminal-908877803-line-72)">pep440,semver,semver2</text><text class="terminal-908877803-r2" x="500.2" y="1776.8" textLength="12.2" clip-path="url(#terminal-908877803-line-72)">}</text><text class="terminal-908877803-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-908877803-line-72)"> +</text><text class="terminal-908877803-r1" x="0" y="1801.2" textLength="549" clip-path="url(#terminal-908877803-line-73)">                        choose version scheme</text><text class="terminal-908877803-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-908877803-line-73)"> +</text><text class="terminal-908877803-r1" x="0" y="1825.6" textLength="207.4" clip-path="url(#terminal-908877803-line-74)">  --version-type </text><text class="terminal-908877803-r2" x="207.4" y="1825.6" textLength="12.2" clip-path="url(#terminal-908877803-line-74)">{</text><text class="terminal-908877803-r1" x="219.6" y="1825.6" textLength="256.2" clip-path="url(#terminal-908877803-line-74)">pep440,semver,semver2</text><text class="terminal-908877803-r2" x="475.8" y="1825.6" textLength="12.2" clip-path="url(#terminal-908877803-line-74)">}</text><text class="terminal-908877803-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-908877803-line-74)"> +</text><text class="terminal-908877803-r1" x="0" y="1850" textLength="683.2" clip-path="url(#terminal-908877803-line-75)">                        Deprecated, use --version-scheme</text><text class="terminal-908877803-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-908877803-line-75)"> +</text><text class="terminal-908877803-r1" x="0" y="1874.4" textLength="402.6" clip-path="url(#terminal-908877803-line-76)">  --build-metadata BUILD_METADATA</text><text class="terminal-908877803-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-908877803-line-76)"> +</text><text class="terminal-908877803-r1" x="0" y="1898.8" textLength="915" clip-path="url(#terminal-908877803-line-77)">                        Add additional build-metadata to the version-number</text><text class="terminal-908877803-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-908877803-line-77)"> +</text><text class="terminal-908877803-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-908877803-line-78)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_changelog___help.svg b/docs/images/cli_help/cz_changelog___help.svg index 4f236ea467..a7d277df44 100644 --- a/docs/images/cli_help/cz_changelog___help.svg +++ b/docs/images/cli_help/cz_changelog___help.svg @@ -19,144 +19,144 @@ font-weight: 700; } - .terminal-3815852825-matrix { + .terminal-37245177-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3815852825-title { + .terminal-37245177-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3815852825-r1 { fill: #c5c8c6 } -.terminal-3815852825-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-3815852825-r3 { fill: #68a0b3;font-weight: bold } -.terminal-3815852825-r4 { fill: #98a84b } + .terminal-37245177-r1 { fill: #c5c8c6 } +.terminal-37245177-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-37245177-r3 { fill: #68a0b3;font-weight: bold } +.terminal-37245177-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-3815852825-clip-terminal"> + <clipPath id="terminal-37245177-clip-terminal"> <rect x="0" y="0" width="975.0" height="975.0" /> </clipPath> - <clipPath id="terminal-3815852825-line-0"> + <clipPath id="terminal-37245177-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-1"> +<clipPath id="terminal-37245177-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-2"> +<clipPath id="terminal-37245177-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-3"> +<clipPath id="terminal-37245177-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-4"> +<clipPath id="terminal-37245177-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-5"> +<clipPath id="terminal-37245177-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-6"> +<clipPath id="terminal-37245177-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-7"> +<clipPath id="terminal-37245177-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-8"> +<clipPath id="terminal-37245177-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-9"> +<clipPath id="terminal-37245177-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-10"> +<clipPath id="terminal-37245177-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-11"> +<clipPath id="terminal-37245177-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-12"> +<clipPath id="terminal-37245177-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-13"> +<clipPath id="terminal-37245177-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-14"> +<clipPath id="terminal-37245177-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-15"> +<clipPath id="terminal-37245177-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-16"> +<clipPath id="terminal-37245177-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-17"> +<clipPath id="terminal-37245177-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-18"> +<clipPath id="terminal-37245177-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-19"> +<clipPath id="terminal-37245177-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-20"> +<clipPath id="terminal-37245177-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-21"> +<clipPath id="terminal-37245177-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-22"> +<clipPath id="terminal-37245177-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-23"> +<clipPath id="terminal-37245177-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-24"> +<clipPath id="terminal-37245177-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-25"> +<clipPath id="terminal-37245177-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-26"> +<clipPath id="terminal-37245177-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-27"> +<clipPath id="terminal-37245177-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-28"> +<clipPath id="terminal-37245177-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-29"> +<clipPath id="terminal-37245177-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-30"> +<clipPath id="terminal-37245177-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-31"> +<clipPath id="terminal-37245177-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-32"> +<clipPath id="terminal-37245177-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-33"> +<clipPath id="terminal-37245177-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-34"> +<clipPath id="terminal-37245177-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-35"> +<clipPath id="terminal-37245177-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-36"> +<clipPath id="terminal-37245177-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-37"> +<clipPath id="terminal-37245177-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3815852825-line-38"> +<clipPath id="terminal-37245177-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> </defs> @@ -167,50 +167,50 @@ <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - - <g transform="translate(9, 41)" clip-path="url(#terminal-3815852825-clip-terminal)"> - - <g class="terminal-3815852825-matrix"> - <text class="terminal-3815852825-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-3815852825-line-0)">$ cz changelog --help</text><text class="terminal-3815852825-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3815852825-line-0)"> -</text><text class="terminal-3815852825-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-3815852825-line-1)">usage: cz changelog </text><text class="terminal-3815852825-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)">[</text><text class="terminal-3815852825-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-3815852825-line-1)">-h</text><text class="terminal-3815852825-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)">]</text><text class="terminal-3815852825-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)">[</text><text class="terminal-3815852825-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-3815852825-line-1)">--dry-run</text><text class="terminal-3815852825-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)">]</text><text class="terminal-3815852825-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)">[</text><text class="terminal-3815852825-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-3815852825-line-1)">--file-name FILE_NAME</text><text class="terminal-3815852825-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)">]</text><text class="terminal-3815852825-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-1)"> -</text><text class="terminal-3815852825-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-2)">[</text><text class="terminal-3815852825-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-3815852825-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-3815852825-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-2)">]</text><text class="terminal-3815852825-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-2)">[</text><text class="terminal-3815852825-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-3815852825-line-2)">--incremental</text><text class="terminal-3815852825-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-2)">]</text><text class="terminal-3815852825-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-2)"> -</text><text class="terminal-3815852825-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-3)">[</text><text class="terminal-3815852825-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-3815852825-line-3)">--start-rev START_REV</text><text class="terminal-3815852825-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-3)">]</text><text class="terminal-3815852825-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-3)">[</text><text class="terminal-3815852825-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-3815852825-line-3)">--merge-prerelease</text><text class="terminal-3815852825-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-3)">]</text><text class="terminal-3815852825-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-3)"> -</text><text class="terminal-3815852825-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-4)">[</text><text class="terminal-3815852825-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-3815852825-line-4)">--version-scheme </text><text class="terminal-3815852825-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-4)">{</text><text class="terminal-3815852825-r1" x="475.8" y="117.6" textLength="158.6" clip-path="url(#terminal-3815852825-line-4)">pep440,semver</text><text class="terminal-3815852825-r2" x="634.4" y="117.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-4)">}</text><text class="terminal-3815852825-r2" x="646.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-4)">]</text><text class="terminal-3815852825-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-4)"> -</text><text class="terminal-3815852825-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-3815852825-line-5)">[</text><text class="terminal-3815852825-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-3815852825-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-3815852825-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-3815852825-line-5)">]</text><text class="terminal-3815852825-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-3815852825-line-5)">[</text><text class="terminal-3815852825-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-3815852825-line-5)">--template TEMPLATE</text><text class="terminal-3815852825-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-3815852825-line-5)">]</text><text class="terminal-3815852825-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3815852825-line-5)"> -</text><text class="terminal-3815852825-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-6)">[</text><text class="terminal-3815852825-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-3815852825-line-6)">--extra EXTRA</text><text class="terminal-3815852825-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-6)">]</text><text class="terminal-3815852825-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-6)"> -</text><text class="terminal-3815852825-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-7)"> -</text><text class="terminal-3815852825-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-8)"> -</text><text class="terminal-3815852825-r1" x="0" y="239.6" textLength="256.2" clip-path="url(#terminal-3815852825-line-9)">positional arguments:</text><text class="terminal-3815852825-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-9)"> -</text><text class="terminal-3815852825-r1" x="0" y="264" textLength="805.2" clip-path="url(#terminal-3815852825-line-10)">  rev_range             generates changelog for the given version </text><text class="terminal-3815852825-r2" x="805.2" y="264" textLength="12.2" clip-path="url(#terminal-3815852825-line-10)">(</text><text class="terminal-3815852825-r1" x="817.4" y="264" textLength="61" clip-path="url(#terminal-3815852825-line-10)">e.g: </text><text class="terminal-3815852825-r3" x="878.4" y="264" textLength="36.6" clip-path="url(#terminal-3815852825-line-10)">1.5</text><text class="terminal-3815852825-r1" x="915" y="264" textLength="12.2" clip-path="url(#terminal-3815852825-line-10)">.</text><text class="terminal-3815852825-r3" x="927.2" y="264" textLength="12.2" clip-path="url(#terminal-3815852825-line-10)">3</text><text class="terminal-3815852825-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-3815852825-line-10)">)</text><text class="terminal-3815852825-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3815852825-line-10)"> -</text><text class="terminal-3815852825-r1" x="0" y="288.4" textLength="500.2" clip-path="url(#terminal-3815852825-line-11)">                        or version range </text><text class="terminal-3815852825-r2" x="500.2" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)">(</text><text class="terminal-3815852825-r1" x="512.4" y="288.4" textLength="61" clip-path="url(#terminal-3815852825-line-11)">e.g: </text><text class="terminal-3815852825-r3" x="573.4" y="288.4" textLength="36.6" clip-path="url(#terminal-3815852825-line-11)">1.5</text><text class="terminal-3815852825-r1" x="610" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)">.</text><text class="terminal-3815852825-r3" x="622.2" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)">3</text><text class="terminal-3815852825-r1" x="634.4" y="288.4" textLength="24.4" clip-path="url(#terminal-3815852825-line-11)">..</text><text class="terminal-3815852825-r3" x="658.8" y="288.4" textLength="36.6" clip-path="url(#terminal-3815852825-line-11)">1.7</text><text class="terminal-3815852825-r1" x="695.4" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)">.</text><text class="terminal-3815852825-r3" x="707.6" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)">9</text><text class="terminal-3815852825-r2" x="719.8" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)">)</text><text class="terminal-3815852825-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-11)"> -</text><text class="terminal-3815852825-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-12)"> -</text><text class="terminal-3815852825-r1" x="0" y="337.2" textLength="97.6" clip-path="url(#terminal-3815852825-line-13)">options:</text><text class="terminal-3815852825-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-13)"> -</text><text class="terminal-3815852825-r1" x="0" y="361.6" textLength="671" clip-path="url(#terminal-3815852825-line-14)">  -h, --help            show this help message and exit</text><text class="terminal-3815852825-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-14)"> -</text><text class="terminal-3815852825-r1" x="0" y="386" textLength="585.6" clip-path="url(#terminal-3815852825-line-15)">  --dry-run             show changelog to stdout</text><text class="terminal-3815852825-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3815852825-line-15)"> -</text><text class="terminal-3815852825-r1" x="0" y="410.4" textLength="280.6" clip-path="url(#terminal-3815852825-line-16)">  --file-name FILE_NAME</text><text class="terminal-3815852825-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-16)"> -</text><text class="terminal-3815852825-r1" x="0" y="434.8" textLength="573.4" clip-path="url(#terminal-3815852825-line-17)">                        file name of changelog </text><text class="terminal-3815852825-r2" x="573.4" y="434.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-17)">(</text><text class="terminal-3815852825-r1" x="585.6" y="434.8" textLength="109.8" clip-path="url(#terminal-3815852825-line-17)">default: </text><text class="terminal-3815852825-r4" x="695.4" y="434.8" textLength="170.8" clip-path="url(#terminal-3815852825-line-17)">'CHANGELOG.md'</text><text class="terminal-3815852825-r2" x="866.2" y="434.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-17)">)</text><text class="terminal-3815852825-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-17)"> -</text><text class="terminal-3815852825-r1" x="0" y="459.2" textLength="500.2" clip-path="url(#terminal-3815852825-line-18)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-3815852825-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-18)"> -</text><text class="terminal-3815852825-r1" x="0" y="483.6" textLength="707.6" clip-path="url(#terminal-3815852825-line-19)">                        set the value for the new version </text><text class="terminal-3815852825-r2" x="707.6" y="483.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-19)">(</text><text class="terminal-3815852825-r1" x="719.8" y="483.6" textLength="207.4" clip-path="url(#terminal-3815852825-line-19)">use the tag value</text><text class="terminal-3815852825-r2" x="927.2" y="483.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-19)">)</text><text class="terminal-3815852825-r1" x="939.4" y="483.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-19)">,</text><text class="terminal-3815852825-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-19)"> -</text><text class="terminal-3815852825-r1" x="0" y="508" textLength="622.2" clip-path="url(#terminal-3815852825-line-20)">                        instead of using unreleased</text><text class="terminal-3815852825-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3815852825-line-20)"> -</text><text class="terminal-3815852825-r1" x="0" y="532.4" textLength="939.4" clip-path="url(#terminal-3815852825-line-21)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-3815852825-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-21)"> -</text><text class="terminal-3815852825-r1" x="0" y="556.8" textLength="817.4" clip-path="url(#terminal-3815852825-line-22)">                        if the changelog has been manually modified</text><text class="terminal-3815852825-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-22)"> -</text><text class="terminal-3815852825-r1" x="0" y="581.2" textLength="280.6" clip-path="url(#terminal-3815852825-line-23)">  --start-rev START_REV</text><text class="terminal-3815852825-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-23)"> -</text><text class="terminal-3815852825-r1" x="0" y="605.6" textLength="866.2" clip-path="url(#terminal-3815852825-line-24)">                        start rev of the changelog. If not set, it will</text><text class="terminal-3815852825-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-24)"> -</text><text class="terminal-3815852825-r1" x="0" y="630" textLength="695.4" clip-path="url(#terminal-3815852825-line-25)">                        generate changelog from the start</text><text class="terminal-3815852825-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-3815852825-line-25)"> -</text><text class="terminal-3815852825-r1" x="0" y="654.4" textLength="915" clip-path="url(#terminal-3815852825-line-26)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-3815852825-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-26)"> -</text><text class="terminal-3815852825-r1" x="0" y="678.8" textLength="951.6" clip-path="url(#terminal-3815852825-line-27)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-3815852825-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-27)"> -</text><text class="terminal-3815852825-r1" x="0" y="703.2" textLength="451.4" clip-path="url(#terminal-3815852825-line-28)">                        the changelog</text><text class="terminal-3815852825-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-28)"> -</text><text class="terminal-3815852825-r1" x="0" y="727.6" textLength="231.8" clip-path="url(#terminal-3815852825-line-29)">  --version-scheme </text><text class="terminal-3815852825-r2" x="231.8" y="727.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-29)">{</text><text class="terminal-3815852825-r1" x="244" y="727.6" textLength="158.6" clip-path="url(#terminal-3815852825-line-29)">pep440,semver</text><text class="terminal-3815852825-r2" x="402.6" y="727.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-29)">}</text><text class="terminal-3815852825-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-29)"> -</text><text class="terminal-3815852825-r1" x="0" y="752" textLength="549" clip-path="url(#terminal-3815852825-line-30)">                        choose version scheme</text><text class="terminal-3815852825-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-3815852825-line-30)"> -</text><text class="terminal-3815852825-r1" x="0" y="776.4" textLength="427" clip-path="url(#terminal-3815852825-line-31)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-3815852825-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-31)"> -</text><text class="terminal-3815852825-r1" x="0" y="800.8" textLength="927.2" clip-path="url(#terminal-3815852825-line-32)">                        Export the changelog template into this file instead</text><text class="terminal-3815852825-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-32)"> -</text><text class="terminal-3815852825-r1" x="0" y="825.2" textLength="475.8" clip-path="url(#terminal-3815852825-line-33)">                        of rendering it</text><text class="terminal-3815852825-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-33)"> -</text><text class="terminal-3815852825-r1" x="0" y="849.6" textLength="414.8" clip-path="url(#terminal-3815852825-line-34)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-3815852825-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-34)"> -</text><text class="terminal-3815852825-r1" x="0" y="874" textLength="646.6" clip-path="url(#terminal-3815852825-line-35)">                        changelog template file name </text><text class="terminal-3815852825-r2" x="646.6" y="874" textLength="12.2" clip-path="url(#terminal-3815852825-line-35)">(</text><text class="terminal-3815852825-r1" x="658.8" y="874" textLength="280.6" clip-path="url(#terminal-3815852825-line-35)">relative to the current</text><text class="terminal-3815852825-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-3815852825-line-35)"> -</text><text class="terminal-3815852825-r1" x="0" y="898.4" textLength="500.2" clip-path="url(#terminal-3815852825-line-36)">                        working directory</text><text class="terminal-3815852825-r2" x="500.2" y="898.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-36)">)</text><text class="terminal-3815852825-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-3815852825-line-36)"> -</text><text class="terminal-3815852825-r1" x="0" y="922.8" textLength="305" clip-path="url(#terminal-3815852825-line-37)">  --extra EXTRA, -e EXTRA</text><text class="terminal-3815852825-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-3815852825-line-37)"> -</text><text class="terminal-3815852825-r1" x="0" y="947.2" textLength="622.2" clip-path="url(#terminal-3815852825-line-38)">                        a changelog extra variable </text><text class="terminal-3815852825-r2" x="622.2" y="947.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-38)">(</text><text class="terminal-3815852825-r1" x="634.4" y="947.2" textLength="146.4" clip-path="url(#terminal-3815852825-line-38)">in the form </text><text class="terminal-3815852825-r4" x="780.8" y="947.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-38)">'</text><text class="terminal-3815852825-r4" x="793" y="947.2" textLength="36.6" clip-path="url(#terminal-3815852825-line-38)">key</text><text class="terminal-3815852825-r4" x="829.6" y="947.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-38)">=</text><text class="terminal-3815852825-r4" x="841.8" y="947.2" textLength="61" clip-path="url(#terminal-3815852825-line-38)">value</text><text class="terminal-3815852825-r4" x="902.8" y="947.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-38)">'</text><text class="terminal-3815852825-r2" x="915" y="947.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-38)">)</text><text class="terminal-3815852825-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-3815852825-line-38)"> -</text><text class="terminal-3815852825-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-3815852825-line-39)"> + + <g transform="translate(9, 41)" clip-path="url(#terminal-37245177-clip-terminal)"> + + <g class="terminal-37245177-matrix"> + <text class="terminal-37245177-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-37245177-line-0)">$ cz changelog --help</text><text class="terminal-37245177-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-37245177-line-0)"> +</text><text class="terminal-37245177-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-37245177-line-1)">usage: cz changelog </text><text class="terminal-37245177-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)">[</text><text class="terminal-37245177-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-37245177-line-1)">-h</text><text class="terminal-37245177-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)">]</text><text class="terminal-37245177-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)">[</text><text class="terminal-37245177-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-37245177-line-1)">--dry-run</text><text class="terminal-37245177-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)">]</text><text class="terminal-37245177-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)">[</text><text class="terminal-37245177-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-37245177-line-1)">--file-name FILE_NAME</text><text class="terminal-37245177-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)">]</text><text class="terminal-37245177-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)"> +</text><text class="terminal-37245177-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-37245177-line-2)">[</text><text class="terminal-37245177-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-37245177-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-37245177-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-37245177-line-2)">]</text><text class="terminal-37245177-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-37245177-line-2)">[</text><text class="terminal-37245177-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-37245177-line-2)">--incremental</text><text class="terminal-37245177-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-37245177-line-2)">]</text><text class="terminal-37245177-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-37245177-line-2)"> +</text><text class="terminal-37245177-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-37245177-line-3)">[</text><text class="terminal-37245177-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-37245177-line-3)">--start-rev START_REV</text><text class="terminal-37245177-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-37245177-line-3)">]</text><text class="terminal-37245177-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-37245177-line-3)">[</text><text class="terminal-37245177-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-37245177-line-3)">--merge-prerelease</text><text class="terminal-37245177-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-37245177-line-3)">]</text><text class="terminal-37245177-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-37245177-line-3)"> +</text><text class="terminal-37245177-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-37245177-line-4)">[</text><text class="terminal-37245177-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-37245177-line-4)">--version-scheme </text><text class="terminal-37245177-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-37245177-line-4)">{</text><text class="terminal-37245177-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-37245177-line-4)">semver,semver2,pep440</text><text class="terminal-37245177-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-37245177-line-4)">}</text><text class="terminal-37245177-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-37245177-line-4)">]</text><text class="terminal-37245177-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-37245177-line-4)"> +</text><text class="terminal-37245177-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-37245177-line-5)">[</text><text class="terminal-37245177-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-37245177-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-37245177-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-37245177-line-5)">]</text><text class="terminal-37245177-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-37245177-line-5)">[</text><text class="terminal-37245177-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-37245177-line-5)">--template TEMPLATE</text><text class="terminal-37245177-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-37245177-line-5)">]</text><text class="terminal-37245177-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-37245177-line-5)"> +</text><text class="terminal-37245177-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-37245177-line-6)">[</text><text class="terminal-37245177-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-37245177-line-6)">--extra EXTRA</text><text class="terminal-37245177-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-37245177-line-6)">]</text><text class="terminal-37245177-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-37245177-line-6)"> +</text><text class="terminal-37245177-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-37245177-line-7)"> +</text><text class="terminal-37245177-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-37245177-line-8)"> +</text><text class="terminal-37245177-r1" x="0" y="239.6" textLength="256.2" clip-path="url(#terminal-37245177-line-9)">positional arguments:</text><text class="terminal-37245177-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-37245177-line-9)"> +</text><text class="terminal-37245177-r1" x="0" y="264" textLength="805.2" clip-path="url(#terminal-37245177-line-10)">  rev_range             generates changelog for the given version </text><text class="terminal-37245177-r2" x="805.2" y="264" textLength="12.2" clip-path="url(#terminal-37245177-line-10)">(</text><text class="terminal-37245177-r1" x="817.4" y="264" textLength="61" clip-path="url(#terminal-37245177-line-10)">e.g: </text><text class="terminal-37245177-r3" x="878.4" y="264" textLength="36.6" clip-path="url(#terminal-37245177-line-10)">1.5</text><text class="terminal-37245177-r1" x="915" y="264" textLength="12.2" clip-path="url(#terminal-37245177-line-10)">.</text><text class="terminal-37245177-r3" x="927.2" y="264" textLength="12.2" clip-path="url(#terminal-37245177-line-10)">3</text><text class="terminal-37245177-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-37245177-line-10)">)</text><text class="terminal-37245177-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-37245177-line-10)"> +</text><text class="terminal-37245177-r1" x="0" y="288.4" textLength="500.2" clip-path="url(#terminal-37245177-line-11)">                        or version range </text><text class="terminal-37245177-r2" x="500.2" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)">(</text><text class="terminal-37245177-r1" x="512.4" y="288.4" textLength="61" clip-path="url(#terminal-37245177-line-11)">e.g: </text><text class="terminal-37245177-r3" x="573.4" y="288.4" textLength="36.6" clip-path="url(#terminal-37245177-line-11)">1.5</text><text class="terminal-37245177-r1" x="610" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)">.</text><text class="terminal-37245177-r3" x="622.2" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)">3</text><text class="terminal-37245177-r1" x="634.4" y="288.4" textLength="24.4" clip-path="url(#terminal-37245177-line-11)">..</text><text class="terminal-37245177-r3" x="658.8" y="288.4" textLength="36.6" clip-path="url(#terminal-37245177-line-11)">1.7</text><text class="terminal-37245177-r1" x="695.4" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)">.</text><text class="terminal-37245177-r3" x="707.6" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)">9</text><text class="terminal-37245177-r2" x="719.8" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)">)</text><text class="terminal-37245177-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)"> +</text><text class="terminal-37245177-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-37245177-line-12)"> +</text><text class="terminal-37245177-r1" x="0" y="337.2" textLength="97.6" clip-path="url(#terminal-37245177-line-13)">options:</text><text class="terminal-37245177-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-37245177-line-13)"> +</text><text class="terminal-37245177-r1" x="0" y="361.6" textLength="671" clip-path="url(#terminal-37245177-line-14)">  -h, --help            show this help message and exit</text><text class="terminal-37245177-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-37245177-line-14)"> +</text><text class="terminal-37245177-r1" x="0" y="386" textLength="585.6" clip-path="url(#terminal-37245177-line-15)">  --dry-run             show changelog to stdout</text><text class="terminal-37245177-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-37245177-line-15)"> +</text><text class="terminal-37245177-r1" x="0" y="410.4" textLength="280.6" clip-path="url(#terminal-37245177-line-16)">  --file-name FILE_NAME</text><text class="terminal-37245177-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-37245177-line-16)"> +</text><text class="terminal-37245177-r1" x="0" y="434.8" textLength="573.4" clip-path="url(#terminal-37245177-line-17)">                        file name of changelog </text><text class="terminal-37245177-r2" x="573.4" y="434.8" textLength="12.2" clip-path="url(#terminal-37245177-line-17)">(</text><text class="terminal-37245177-r1" x="585.6" y="434.8" textLength="109.8" clip-path="url(#terminal-37245177-line-17)">default: </text><text class="terminal-37245177-r4" x="695.4" y="434.8" textLength="170.8" clip-path="url(#terminal-37245177-line-17)">'CHANGELOG.md'</text><text class="terminal-37245177-r2" x="866.2" y="434.8" textLength="12.2" clip-path="url(#terminal-37245177-line-17)">)</text><text class="terminal-37245177-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-37245177-line-17)"> +</text><text class="terminal-37245177-r1" x="0" y="459.2" textLength="500.2" clip-path="url(#terminal-37245177-line-18)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-37245177-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-37245177-line-18)"> +</text><text class="terminal-37245177-r1" x="0" y="483.6" textLength="707.6" clip-path="url(#terminal-37245177-line-19)">                        set the value for the new version </text><text class="terminal-37245177-r2" x="707.6" y="483.6" textLength="12.2" clip-path="url(#terminal-37245177-line-19)">(</text><text class="terminal-37245177-r1" x="719.8" y="483.6" textLength="207.4" clip-path="url(#terminal-37245177-line-19)">use the tag value</text><text class="terminal-37245177-r2" x="927.2" y="483.6" textLength="12.2" clip-path="url(#terminal-37245177-line-19)">)</text><text class="terminal-37245177-r1" x="939.4" y="483.6" textLength="12.2" clip-path="url(#terminal-37245177-line-19)">,</text><text class="terminal-37245177-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-37245177-line-19)"> +</text><text class="terminal-37245177-r1" x="0" y="508" textLength="622.2" clip-path="url(#terminal-37245177-line-20)">                        instead of using unreleased</text><text class="terminal-37245177-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-37245177-line-20)"> +</text><text class="terminal-37245177-r1" x="0" y="532.4" textLength="939.4" clip-path="url(#terminal-37245177-line-21)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-37245177-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-37245177-line-21)"> +</text><text class="terminal-37245177-r1" x="0" y="556.8" textLength="817.4" clip-path="url(#terminal-37245177-line-22)">                        if the changelog has been manually modified</text><text class="terminal-37245177-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-37245177-line-22)"> +</text><text class="terminal-37245177-r1" x="0" y="581.2" textLength="280.6" clip-path="url(#terminal-37245177-line-23)">  --start-rev START_REV</text><text class="terminal-37245177-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-37245177-line-23)"> +</text><text class="terminal-37245177-r1" x="0" y="605.6" textLength="866.2" clip-path="url(#terminal-37245177-line-24)">                        start rev of the changelog. If not set, it will</text><text class="terminal-37245177-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-37245177-line-24)"> +</text><text class="terminal-37245177-r1" x="0" y="630" textLength="695.4" clip-path="url(#terminal-37245177-line-25)">                        generate changelog from the start</text><text class="terminal-37245177-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-37245177-line-25)"> +</text><text class="terminal-37245177-r1" x="0" y="654.4" textLength="915" clip-path="url(#terminal-37245177-line-26)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-37245177-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-37245177-line-26)"> +</text><text class="terminal-37245177-r1" x="0" y="678.8" textLength="951.6" clip-path="url(#terminal-37245177-line-27)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-37245177-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-37245177-line-27)"> +</text><text class="terminal-37245177-r1" x="0" y="703.2" textLength="451.4" clip-path="url(#terminal-37245177-line-28)">                        the changelog</text><text class="terminal-37245177-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-37245177-line-28)"> +</text><text class="terminal-37245177-r1" x="0" y="727.6" textLength="231.8" clip-path="url(#terminal-37245177-line-29)">  --version-scheme </text><text class="terminal-37245177-r2" x="231.8" y="727.6" textLength="12.2" clip-path="url(#terminal-37245177-line-29)">{</text><text class="terminal-37245177-r1" x="244" y="727.6" textLength="256.2" clip-path="url(#terminal-37245177-line-29)">semver,semver2,pep440</text><text class="terminal-37245177-r2" x="500.2" y="727.6" textLength="12.2" clip-path="url(#terminal-37245177-line-29)">}</text><text class="terminal-37245177-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-37245177-line-29)"> +</text><text class="terminal-37245177-r1" x="0" y="752" textLength="549" clip-path="url(#terminal-37245177-line-30)">                        choose version scheme</text><text class="terminal-37245177-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-37245177-line-30)"> +</text><text class="terminal-37245177-r1" x="0" y="776.4" textLength="427" clip-path="url(#terminal-37245177-line-31)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-37245177-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-37245177-line-31)"> +</text><text class="terminal-37245177-r1" x="0" y="800.8" textLength="927.2" clip-path="url(#terminal-37245177-line-32)">                        Export the changelog template into this file instead</text><text class="terminal-37245177-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-37245177-line-32)"> +</text><text class="terminal-37245177-r1" x="0" y="825.2" textLength="475.8" clip-path="url(#terminal-37245177-line-33)">                        of rendering it</text><text class="terminal-37245177-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-37245177-line-33)"> +</text><text class="terminal-37245177-r1" x="0" y="849.6" textLength="414.8" clip-path="url(#terminal-37245177-line-34)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-37245177-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-37245177-line-34)"> +</text><text class="terminal-37245177-r1" x="0" y="874" textLength="646.6" clip-path="url(#terminal-37245177-line-35)">                        changelog template file name </text><text class="terminal-37245177-r2" x="646.6" y="874" textLength="12.2" clip-path="url(#terminal-37245177-line-35)">(</text><text class="terminal-37245177-r1" x="658.8" y="874" textLength="280.6" clip-path="url(#terminal-37245177-line-35)">relative to the current</text><text class="terminal-37245177-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-37245177-line-35)"> +</text><text class="terminal-37245177-r1" x="0" y="898.4" textLength="500.2" clip-path="url(#terminal-37245177-line-36)">                        working directory</text><text class="terminal-37245177-r2" x="500.2" y="898.4" textLength="12.2" clip-path="url(#terminal-37245177-line-36)">)</text><text class="terminal-37245177-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-37245177-line-36)"> +</text><text class="terminal-37245177-r1" x="0" y="922.8" textLength="305" clip-path="url(#terminal-37245177-line-37)">  --extra EXTRA, -e EXTRA</text><text class="terminal-37245177-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-37245177-line-37)"> +</text><text class="terminal-37245177-r1" x="0" y="947.2" textLength="622.2" clip-path="url(#terminal-37245177-line-38)">                        a changelog extra variable </text><text class="terminal-37245177-r2" x="622.2" y="947.2" textLength="12.2" clip-path="url(#terminal-37245177-line-38)">(</text><text class="terminal-37245177-r1" x="634.4" y="947.2" textLength="146.4" clip-path="url(#terminal-37245177-line-38)">in the form </text><text class="terminal-37245177-r4" x="780.8" y="947.2" textLength="12.2" clip-path="url(#terminal-37245177-line-38)">'</text><text class="terminal-37245177-r4" x="793" y="947.2" textLength="36.6" clip-path="url(#terminal-37245177-line-38)">key</text><text class="terminal-37245177-r4" x="829.6" y="947.2" textLength="12.2" clip-path="url(#terminal-37245177-line-38)">=</text><text class="terminal-37245177-r4" x="841.8" y="947.2" textLength="61" clip-path="url(#terminal-37245177-line-38)">value</text><text class="terminal-37245177-r4" x="902.8" y="947.2" textLength="12.2" clip-path="url(#terminal-37245177-line-38)">'</text><text class="terminal-37245177-r2" x="915" y="947.2" textLength="12.2" clip-path="url(#terminal-37245177-line-38)">)</text><text class="terminal-37245177-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-37245177-line-38)"> +</text><text class="terminal-37245177-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-37245177-line-39)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_check___help.svg b/docs/images/cli_help/cz_check___help.svg index 82dab7282e..427d91e414 100644 --- a/docs/images/cli_help/cz_check___help.svg +++ b/docs/images/cli_help/cz_check___help.svg @@ -116,9 +116,9 @@ <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - + <g transform="translate(9, 41)" clip-path="url(#terminal-3217887475-clip-terminal)"> - + <g class="terminal-3217887475-matrix"> <text class="terminal-3217887475-r1" x="0" y="20" textLength="207.4" clip-path="url(#terminal-3217887475-line-0)">$ cz check --help</text><text class="terminal-3217887475-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3217887475-line-0)"> </text><text class="terminal-3217887475-r1" x="0" y="44.4" textLength="195.2" clip-path="url(#terminal-3217887475-line-1)">usage: cz check </text><text class="terminal-3217887475-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-1)">[</text><text class="terminal-3217887475-r1" x="207.4" y="44.4" textLength="24.4" clip-path="url(#terminal-3217887475-line-1)">-h</text><text class="terminal-3217887475-r2" x="231.8" y="44.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-1)">]</text><text class="terminal-3217887475-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-1)"> diff --git a/docs/images/cli_help/cz_commit___help.svg b/docs/images/cli_help/cz_commit___help.svg index e29f55607d..deb871fce9 100644 --- a/docs/images/cli_help/cz_commit___help.svg +++ b/docs/images/cli_help/cz_commit___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 464.79999999999995" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 538.0" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,104 +19,117 @@ font-weight: 700; } - .terminal-3369302934-matrix { + .terminal-1406799249-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3369302934-title { + .terminal-1406799249-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3369302934-r1 { fill: #c5c8c6 } -.terminal-3369302934-r2 { fill: #c5c8c6;font-weight: bold } + .terminal-1406799249-r1 { fill: #c5c8c6 } +.terminal-1406799249-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-1406799249-r3 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-3369302934-clip-terminal"> - <rect x="0" y="0" width="975.0" height="413.79999999999995" /> + <clipPath id="terminal-1406799249-clip-terminal"> + <rect x="0" y="0" width="975.0" height="487.0" /> </clipPath> - <clipPath id="terminal-3369302934-line-0"> + <clipPath id="terminal-1406799249-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-1"> +<clipPath id="terminal-1406799249-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-2"> +<clipPath id="terminal-1406799249-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-3"> +<clipPath id="terminal-1406799249-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-4"> +<clipPath id="terminal-1406799249-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-5"> +<clipPath id="terminal-1406799249-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-6"> +<clipPath id="terminal-1406799249-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-7"> +<clipPath id="terminal-1406799249-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-8"> +<clipPath id="terminal-1406799249-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-9"> +<clipPath id="terminal-1406799249-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-10"> +<clipPath id="terminal-1406799249-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-11"> +<clipPath id="terminal-1406799249-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-12"> +<clipPath id="terminal-1406799249-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-13"> +<clipPath id="terminal-1406799249-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-14"> +<clipPath id="terminal-1406799249-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3369302934-line-15"> +<clipPath id="terminal-1406799249-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-1406799249-line-16"> + <rect x="0" y="391.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1406799249-line-17"> + <rect x="0" y="416.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1406799249-line-18"> + <rect x="0" y="440.7" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="462.8" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="536" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - - <g transform="translate(9, 41)" clip-path="url(#terminal-3369302934-clip-terminal)"> - - <g class="terminal-3369302934-matrix"> - <text class="terminal-3369302934-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-3369302934-line-0)">$ cz commit --help</text><text class="terminal-3369302934-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3369302934-line-0)"> -</text><text class="terminal-3369302934-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-3369302934-line-1)">usage: cz commit </text><text class="terminal-3369302934-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">[</text><text class="terminal-3369302934-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-3369302934-line-1)">-h</text><text class="terminal-3369302934-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">]</text><text class="terminal-3369302934-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">[</text><text class="terminal-3369302934-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-3369302934-line-1)">--retry</text><text class="terminal-3369302934-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">]</text><text class="terminal-3369302934-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">[</text><text class="terminal-3369302934-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-3369302934-line-1)">--no-retry</text><text class="terminal-3369302934-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">]</text><text class="terminal-3369302934-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">[</text><text class="terminal-3369302934-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-3369302934-line-1)">--dry-run</text><text class="terminal-3369302934-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)">]</text><text class="terminal-3369302934-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-1)"> -</text><text class="terminal-3369302934-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)">[</text><text class="terminal-3369302934-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-3369302934-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-3369302934-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)">]</text><text class="terminal-3369302934-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)">[</text><text class="terminal-3369302934-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-3369302934-line-2)">-s</text><text class="terminal-3369302934-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)">]</text><text class="terminal-3369302934-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)">[</text><text class="terminal-3369302934-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-3369302934-line-2)">-a</text><text class="terminal-3369302934-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)">]</text><text class="terminal-3369302934-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-2)"> -</text><text class="terminal-3369302934-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3369302934-line-3)"> -</text><text class="terminal-3369302934-r1" x="0" y="117.6" textLength="97.6" clip-path="url(#terminal-3369302934-line-4)">options:</text><text class="terminal-3369302934-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3369302934-line-4)"> -</text><text class="terminal-3369302934-r1" x="0" y="142" textLength="671" clip-path="url(#terminal-3369302934-line-5)">  -h, --help            show this help message and exit</text><text class="terminal-3369302934-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3369302934-line-5)"> -</text><text class="terminal-3369302934-r1" x="0" y="166.4" textLength="500.2" clip-path="url(#terminal-3369302934-line-6)">  --retry               retry last commit</text><text class="terminal-3369302934-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-6)"> -</text><text class="terminal-3369302934-r1" x="0" y="190.8" textLength="878.4" clip-path="url(#terminal-3369302934-line-7)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-3369302934-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-7)"> -</text><text class="terminal-3369302934-r1" x="0" y="215.2" textLength="915" clip-path="url(#terminal-3369302934-line-8)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-3369302934-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3369302934-line-8)"> -</text><text class="terminal-3369302934-r1" x="0" y="239.6" textLength="427" clip-path="url(#terminal-3369302934-line-9)">  --write-message-to-file FILE_PATH</text><text class="terminal-3369302934-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3369302934-line-9)"> -</text><text class="terminal-3369302934-r1" x="0" y="264" textLength="780.8" clip-path="url(#terminal-3369302934-line-10)">                        write message to file before committing </text><text class="terminal-3369302934-r2" x="780.8" y="264" textLength="12.2" clip-path="url(#terminal-3369302934-line-10)">(</text><text class="terminal-3369302934-r1" x="793" y="264" textLength="73.2" clip-path="url(#terminal-3369302934-line-10)">can be</text><text class="terminal-3369302934-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3369302934-line-10)"> -</text><text class="terminal-3369302934-r1" x="0" y="288.4" textLength="573.4" clip-path="url(#terminal-3369302934-line-11)">                        combined with --dry-run</text><text class="terminal-3369302934-r2" x="573.4" y="288.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-11)">)</text><text class="terminal-3369302934-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-11)"> -</text><text class="terminal-3369302934-r1" x="0" y="312.8" textLength="524.6" clip-path="url(#terminal-3369302934-line-12)">  -s, --signoff         sign off the commit</text><text class="terminal-3369302934-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3369302934-line-12)"> -</text><text class="terminal-3369302934-r1" x="0" y="337.2" textLength="902.8" clip-path="url(#terminal-3369302934-line-13)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-3369302934-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3369302934-line-13)"> -</text><text class="terminal-3369302934-r1" x="0" y="361.6" textLength="951.6" clip-path="url(#terminal-3369302934-line-14)">                        have been modified and deleted, but new files you have</text><text class="terminal-3369302934-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3369302934-line-14)"> -</text><text class="terminal-3369302934-r1" x="0" y="386" textLength="732" clip-path="url(#terminal-3369302934-line-15)">                        not told Git about are not affected.</text><text class="terminal-3369302934-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3369302934-line-15)"> -</text><text class="terminal-3369302934-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3369302934-line-16)"> + + <g transform="translate(9, 41)" clip-path="url(#terminal-1406799249-clip-terminal)"> + + <g class="terminal-1406799249-matrix"> + <text class="terminal-1406799249-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-1406799249-line-0)">$ cz commit --help</text><text class="terminal-1406799249-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1406799249-line-0)"> +</text><text class="terminal-1406799249-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-1406799249-line-1)">usage: cz commit </text><text class="terminal-1406799249-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">[</text><text class="terminal-1406799249-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-1406799249-line-1)">-h</text><text class="terminal-1406799249-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">]</text><text class="terminal-1406799249-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">[</text><text class="terminal-1406799249-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-1406799249-line-1)">--retry</text><text class="terminal-1406799249-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">]</text><text class="terminal-1406799249-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">[</text><text class="terminal-1406799249-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-1406799249-line-1)">--no-retry</text><text class="terminal-1406799249-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">]</text><text class="terminal-1406799249-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">[</text><text class="terminal-1406799249-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-1406799249-line-1)">--dry-run</text><text class="terminal-1406799249-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">]</text><text class="terminal-1406799249-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)"> +</text><text class="terminal-1406799249-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)">[</text><text class="terminal-1406799249-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-1406799249-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-1406799249-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)">]</text><text class="terminal-1406799249-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)">[</text><text class="terminal-1406799249-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1406799249-line-2)">-s</text><text class="terminal-1406799249-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)">]</text><text class="terminal-1406799249-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)">[</text><text class="terminal-1406799249-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1406799249-line-2)">-a</text><text class="terminal-1406799249-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)">]</text><text class="terminal-1406799249-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)"> +</text><text class="terminal-1406799249-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-3)">[</text><text class="terminal-1406799249-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-1406799249-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-1406799249-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-3)">]</text><text class="terminal-1406799249-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-3)"> +</text><text class="terminal-1406799249-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1406799249-line-4)"> +</text><text class="terminal-1406799249-r1" x="0" y="142" textLength="97.6" clip-path="url(#terminal-1406799249-line-5)">options:</text><text class="terminal-1406799249-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1406799249-line-5)"> +</text><text class="terminal-1406799249-r1" x="0" y="166.4" textLength="671" clip-path="url(#terminal-1406799249-line-6)">  -h, --help            show this help message and exit</text><text class="terminal-1406799249-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-6)"> +</text><text class="terminal-1406799249-r1" x="0" y="190.8" textLength="500.2" clip-path="url(#terminal-1406799249-line-7)">  --retry               retry last commit</text><text class="terminal-1406799249-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-7)"> +</text><text class="terminal-1406799249-r1" x="0" y="215.2" textLength="878.4" clip-path="url(#terminal-1406799249-line-8)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-1406799249-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-8)"> +</text><text class="terminal-1406799249-r1" x="0" y="239.6" textLength="915" clip-path="url(#terminal-1406799249-line-9)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-1406799249-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1406799249-line-9)"> +</text><text class="terminal-1406799249-r1" x="0" y="264" textLength="427" clip-path="url(#terminal-1406799249-line-10)">  --write-message-to-file FILE_PATH</text><text class="terminal-1406799249-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1406799249-line-10)"> +</text><text class="terminal-1406799249-r1" x="0" y="288.4" textLength="780.8" clip-path="url(#terminal-1406799249-line-11)">                        write message to file before committing </text><text class="terminal-1406799249-r2" x="780.8" y="288.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-11)">(</text><text class="terminal-1406799249-r1" x="793" y="288.4" textLength="73.2" clip-path="url(#terminal-1406799249-line-11)">can be</text><text class="terminal-1406799249-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-11)"> +</text><text class="terminal-1406799249-r1" x="0" y="312.8" textLength="573.4" clip-path="url(#terminal-1406799249-line-12)">                        combined with --dry-run</text><text class="terminal-1406799249-r2" x="573.4" y="312.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-12)">)</text><text class="terminal-1406799249-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-12)"> +</text><text class="terminal-1406799249-r1" x="0" y="337.2" textLength="524.6" clip-path="url(#terminal-1406799249-line-13)">  -s, --signoff         sign off the commit</text><text class="terminal-1406799249-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-13)"> +</text><text class="terminal-1406799249-r1" x="0" y="361.6" textLength="902.8" clip-path="url(#terminal-1406799249-line-14)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-1406799249-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1406799249-line-14)"> +</text><text class="terminal-1406799249-r1" x="0" y="386" textLength="951.6" clip-path="url(#terminal-1406799249-line-15)">                        have been modified and deleted, but new files you have</text><text class="terminal-1406799249-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1406799249-line-15)"> +</text><text class="terminal-1406799249-r1" x="0" y="410.4" textLength="732" clip-path="url(#terminal-1406799249-line-16)">                        not told Git about are not affected.</text><text class="terminal-1406799249-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-16)"> +</text><text class="terminal-1406799249-r1" x="0" y="434.8" textLength="854" clip-path="url(#terminal-1406799249-line-17)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-1406799249-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-17)"> +</text><text class="terminal-1406799249-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-1406799249-line-18)">                        length limit of the commit message; </text><text class="terminal-1406799249-r3" x="732" y="459.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-18)">0</text><text class="terminal-1406799249-r1" x="744.2" y="459.2" textLength="158.6" clip-path="url(#terminal-1406799249-line-18)"> for no limit</text><text class="terminal-1406799249-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-18)"> +</text><text class="terminal-1406799249-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1406799249-line-19)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_example___help.svg b/docs/images/cli_help/cz_example___help.svg index a3fee0064a..e142dd4f9b 100644 --- a/docs/images/cli_help/cz_example___help.svg +++ b/docs/images/cli_help/cz_example___help.svg @@ -63,9 +63,9 @@ <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - + <g transform="translate(9, 41)" clip-path="url(#terminal-2958388120-clip-terminal)"> - + <g class="terminal-2958388120-matrix"> <text class="terminal-2958388120-r1" x="0" y="20" textLength="231.8" clip-path="url(#terminal-2958388120-line-0)">$ cz example --help</text><text class="terminal-2958388120-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2958388120-line-0)"> </text><text class="terminal-2958388120-r1" x="0" y="44.4" textLength="219.6" clip-path="url(#terminal-2958388120-line-1)">usage: cz example </text><text class="terminal-2958388120-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2958388120-line-1)">[</text><text class="terminal-2958388120-r1" x="231.8" y="44.4" textLength="24.4" clip-path="url(#terminal-2958388120-line-1)">-h</text><text class="terminal-2958388120-r2" x="256.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2958388120-line-1)">]</text><text class="terminal-2958388120-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2958388120-line-1)"> diff --git a/docs/images/cli_help/cz_info___help.svg b/docs/images/cli_help/cz_info___help.svg index 02c2f313df..8059ec466c 100644 --- a/docs/images/cli_help/cz_info___help.svg +++ b/docs/images/cli_help/cz_info___help.svg @@ -63,9 +63,9 @@ <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - + <g transform="translate(9, 41)" clip-path="url(#terminal-2494261528-clip-terminal)"> - + <g class="terminal-2494261528-matrix"> <text class="terminal-2494261528-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-2494261528-line-0)">$ cz info --help</text><text class="terminal-2494261528-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2494261528-line-0)"> </text><text class="terminal-2494261528-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-2494261528-line-1)">usage: cz info </text><text class="terminal-2494261528-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2494261528-line-1)">[</text><text class="terminal-2494261528-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2494261528-line-1)">-h</text><text class="terminal-2494261528-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2494261528-line-1)">]</text><text class="terminal-2494261528-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2494261528-line-1)"> diff --git a/docs/images/cli_help/cz_init___help.svg b/docs/images/cli_help/cz_init___help.svg index b296b79d76..6bcd577160 100644 --- a/docs/images/cli_help/cz_init___help.svg +++ b/docs/images/cli_help/cz_init___help.svg @@ -63,9 +63,9 @@ <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - + <g transform="translate(9, 41)" clip-path="url(#terminal-2788256040-clip-terminal)"> - + <g class="terminal-2788256040-matrix"> <text class="terminal-2788256040-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-2788256040-line-0)">$ cz init --help</text><text class="terminal-2788256040-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2788256040-line-0)"> </text><text class="terminal-2788256040-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-2788256040-line-1)">usage: cz init </text><text class="terminal-2788256040-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2788256040-line-1)">[</text><text class="terminal-2788256040-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2788256040-line-1)">-h</text><text class="terminal-2788256040-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2788256040-line-1)">]</text><text class="terminal-2788256040-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2788256040-line-1)"> diff --git a/docs/images/cli_help/cz_ls___help.svg b/docs/images/cli_help/cz_ls___help.svg index 7e95d4c8dc..390f5bbb42 100644 --- a/docs/images/cli_help/cz_ls___help.svg +++ b/docs/images/cli_help/cz_ls___help.svg @@ -63,9 +63,9 @@ <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - + <g transform="translate(9, 41)" clip-path="url(#terminal-2631362430-clip-terminal)"> - + <g class="terminal-2631362430-matrix"> <text class="terminal-2631362430-r1" x="0" y="20" textLength="170.8" clip-path="url(#terminal-2631362430-line-0)">$ cz ls --help</text><text class="terminal-2631362430-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2631362430-line-0)"> </text><text class="terminal-2631362430-r1" x="0" y="44.4" textLength="158.6" clip-path="url(#terminal-2631362430-line-1)">usage: cz ls </text><text class="terminal-2631362430-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2631362430-line-1)">[</text><text class="terminal-2631362430-r1" x="170.8" y="44.4" textLength="24.4" clip-path="url(#terminal-2631362430-line-1)">-h</text><text class="terminal-2631362430-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2631362430-line-1)">]</text><text class="terminal-2631362430-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2631362430-line-1)"> diff --git a/docs/images/cli_help/cz_schema___help.svg b/docs/images/cli_help/cz_schema___help.svg index 201778bdfd..443634428d 100644 --- a/docs/images/cli_help/cz_schema___help.svg +++ b/docs/images/cli_help/cz_schema___help.svg @@ -63,9 +63,9 @@ <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - + <g transform="translate(9, 41)" clip-path="url(#terminal-2172349090-clip-terminal)"> - + <g class="terminal-2172349090-matrix"> <text class="terminal-2172349090-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-2172349090-line-0)">$ cz schema --help</text><text class="terminal-2172349090-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2172349090-line-0)"> </text><text class="terminal-2172349090-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-2172349090-line-1)">usage: cz schema </text><text class="terminal-2172349090-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2172349090-line-1)">[</text><text class="terminal-2172349090-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-2172349090-line-1)">-h</text><text class="terminal-2172349090-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-2172349090-line-1)">]</text><text class="terminal-2172349090-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2172349090-line-1)"> diff --git a/docs/images/cli_help/cz_version___help.svg b/docs/images/cli_help/cz_version___help.svg index 0a7dc85397..0d14aaffa1 100644 --- a/docs/images/cli_help/cz_version___help.svg +++ b/docs/images/cli_help/cz_version___help.svg @@ -78,9 +78,9 @@ <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - + <g transform="translate(9, 41)" clip-path="url(#terminal-1533814420-clip-terminal)"> - + <g class="terminal-1533814420-matrix"> <text class="terminal-1533814420-r1" x="0" y="20" textLength="231.8" clip-path="url(#terminal-1533814420-line-0)">$ cz version --help</text><text class="terminal-1533814420-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1533814420-line-0)"> </text><text class="terminal-1533814420-r1" x="0" y="44.4" textLength="219.6" clip-path="url(#terminal-1533814420-line-1)">usage: cz version </text><text class="terminal-1533814420-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)">[</text><text class="terminal-1533814420-r1" x="231.8" y="44.4" textLength="24.4" clip-path="url(#terminal-1533814420-line-1)">-h</text><text class="terminal-1533814420-r2" x="256.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)">]</text><text class="terminal-1533814420-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)">[</text><text class="terminal-1533814420-r1" x="292.8" y="44.4" textLength="207.4" clip-path="url(#terminal-1533814420-line-1)">-r | -p | -c | -v</text><text class="terminal-1533814420-r2" x="500.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)">]</text><text class="terminal-1533814420-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)"> From b62456a61a95351c285a8ca340670e65f96fbda9 Mon Sep 17 00:00:00 2001 From: Marcos Martins <contato@marcosmartins.me> Date: Mon, 20 May 2024 09:53:26 -0300 Subject: [PATCH 257/685] ci(workflow): move 'generate_cli_screenshots' steps to 'docspublish' Since the purpose is to updated the CLI screenshots on Github Pages, combining this two workflows makes sense. --- .github/workflows/docspublish.yml | 31 +++++++++++++++ .../workflows/generate_cli_screenshots.yml | 39 ------------------- 2 files changed, 31 insertions(+), 39 deletions(-) delete mode 100644 .github/workflows/generate_cli_screenshots.yml diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml index d95b464b40..1ac8e7f5e3 100644 --- a/.github/workflows/docspublish.yml +++ b/.github/workflows/docspublish.yml @@ -6,13 +6,44 @@ on: - master jobs: + update-cli-screenshots: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: Install dependencies + run: | + python -m pip install -U pip poetry + poetry --version + poetry install + - name: Update CLI screenshots + run: | + poetry run python scripts/gen_cli_help_screenshots.py + - name: Commit and push updated CLI screenshots + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git add docs/images/cli_help + git commit -m "docs(cli/screenshots) update CLI screenshots" -m "[skip ci]" + git push + publish-documentation: runs-on: ubuntu-latest + needs: update-cli-screenshots steps: - uses: actions/checkout@v4 with: token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}" fetch-depth: 0 + - name: Pull latest changes + run: | + git pull origin master - name: Set up Python uses: actions/setup-python@v5 with: diff --git a/.github/workflows/generate_cli_screenshots.yml b/.github/workflows/generate_cli_screenshots.yml deleted file mode 100644 index 7bbc8b16d9..0000000000 --- a/.github/workflows/generate_cli_screenshots.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Generate CLI screenshots - -on: - pull_request: - types: - - closed - -jobs: - generate_cli_screenshots: - if: github.event.pull_request.merged == true - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}" - fetch-depth: 0 - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: "3.x" - - - name: Install dependencies - run: | - python -m pip install -U pip poetry - poetry --version - poetry install - - - name: Generate CLI screenshots - run: | - poetry run python scripts/gen_cli_help_screenshots.py - - - name: Commit and push CLI screenshots - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git add docs/images/cli_help - git commit -m "docs(cli/screenshots) update CLI screenshots" - git push From e6e97dcdbeb993d7e10b9fdfd55525a00ade22e2 Mon Sep 17 00:00:00 2001 From: Marcos Martins <contato@marcosmartins.me> Date: Mon, 20 May 2024 11:38:18 -0300 Subject: [PATCH 258/685] ci: exclude *.svg files from trailing whitespace hook --- .pre-commit-config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d3c9a02544..163e7a0ab3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,6 +21,7 @@ repos: exclude: "tests/((commands|data)/|test_).+" - id: trailing-whitespace args: [ --markdown-linebreak-ext=md ] + exclude: '\.svg$' - id: debug-statements - id: no-commit-to-branch - id: check-merge-conflict From 59270b96e6b7e2f8121ea6d6025634ecfa64ae18 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Tue, 21 May 2024 00:04:23 +0800 Subject: [PATCH 259/685] ci(docpublish): reword cli screenshot generation commit message --- .github/workflows/docspublish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml index 1ac8e7f5e3..4ac9a3a4a4 100644 --- a/.github/workflows/docspublish.yml +++ b/.github/workflows/docspublish.yml @@ -30,7 +30,7 @@ jobs: git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" git add docs/images/cli_help - git commit -m "docs(cli/screenshots) update CLI screenshots" -m "[skip ci]" + git commit -m "docs(cli/screenshots): update CLI screenshots" -m "[skip ci]" git push publish-documentation: From 7eafdfa3f53709fba80a21663c7788062e5457dd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 16:16:25 +0000 Subject: [PATCH 260/685] docs(cli/screenshots): update CLI screenshots [skip ci] --- docs/images/cli_help/cz_bump___help.svg | 332 +++++++++---------- docs/images/cli_help/cz_changelog___help.svg | 176 +++++----- 2 files changed, 254 insertions(+), 254 deletions(-) diff --git a/docs/images/cli_help/cz_bump___help.svg b/docs/images/cli_help/cz_bump___help.svg index 5b71728ccf..6d217d3958 100644 --- a/docs/images/cli_help/cz_bump___help.svg +++ b/docs/images/cli_help/cz_bump___help.svg @@ -19,261 +19,261 @@ font-weight: 700; } - .terminal-908877803-matrix { + .terminal-1103912939-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-908877803-title { + .terminal-1103912939-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-908877803-r1 { fill: #c5c8c6 } -.terminal-908877803-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-908877803-r3 { fill: #68a0b3;font-weight: bold } -.terminal-908877803-r4 { fill: #98a84b } + .terminal-1103912939-r1 { fill: #c5c8c6 } +.terminal-1103912939-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-1103912939-r3 { fill: #68a0b3;font-weight: bold } +.terminal-1103912939-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-908877803-clip-terminal"> + <clipPath id="terminal-1103912939-clip-terminal"> <rect x="0" y="0" width="975.0" height="1926.6" /> </clipPath> - <clipPath id="terminal-908877803-line-0"> + <clipPath id="terminal-1103912939-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-1"> +<clipPath id="terminal-1103912939-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-2"> +<clipPath id="terminal-1103912939-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-3"> +<clipPath id="terminal-1103912939-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-4"> +<clipPath id="terminal-1103912939-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-5"> +<clipPath id="terminal-1103912939-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-6"> +<clipPath id="terminal-1103912939-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-7"> +<clipPath id="terminal-1103912939-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-8"> +<clipPath id="terminal-1103912939-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-9"> +<clipPath id="terminal-1103912939-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-10"> +<clipPath id="terminal-1103912939-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-11"> +<clipPath id="terminal-1103912939-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-12"> +<clipPath id="terminal-1103912939-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-13"> +<clipPath id="terminal-1103912939-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-14"> +<clipPath id="terminal-1103912939-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-15"> +<clipPath id="terminal-1103912939-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-16"> +<clipPath id="terminal-1103912939-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-17"> +<clipPath id="terminal-1103912939-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-18"> +<clipPath id="terminal-1103912939-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-19"> +<clipPath id="terminal-1103912939-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-20"> +<clipPath id="terminal-1103912939-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-21"> +<clipPath id="terminal-1103912939-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-22"> +<clipPath id="terminal-1103912939-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-23"> +<clipPath id="terminal-1103912939-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-24"> +<clipPath id="terminal-1103912939-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-25"> +<clipPath id="terminal-1103912939-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-26"> +<clipPath id="terminal-1103912939-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-27"> +<clipPath id="terminal-1103912939-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-28"> +<clipPath id="terminal-1103912939-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-29"> +<clipPath id="terminal-1103912939-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-30"> +<clipPath id="terminal-1103912939-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-31"> +<clipPath id="terminal-1103912939-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-32"> +<clipPath id="terminal-1103912939-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-33"> +<clipPath id="terminal-1103912939-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-34"> +<clipPath id="terminal-1103912939-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-35"> +<clipPath id="terminal-1103912939-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-36"> +<clipPath id="terminal-1103912939-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-37"> +<clipPath id="terminal-1103912939-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-38"> +<clipPath id="terminal-1103912939-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-39"> +<clipPath id="terminal-1103912939-line-39"> <rect x="0" y="953.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-40"> +<clipPath id="terminal-1103912939-line-40"> <rect x="0" y="977.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-41"> +<clipPath id="terminal-1103912939-line-41"> <rect x="0" y="1001.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-42"> +<clipPath id="terminal-1103912939-line-42"> <rect x="0" y="1026.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-43"> +<clipPath id="terminal-1103912939-line-43"> <rect x="0" y="1050.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-44"> +<clipPath id="terminal-1103912939-line-44"> <rect x="0" y="1075.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-45"> +<clipPath id="terminal-1103912939-line-45"> <rect x="0" y="1099.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-46"> +<clipPath id="terminal-1103912939-line-46"> <rect x="0" y="1123.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-47"> +<clipPath id="terminal-1103912939-line-47"> <rect x="0" y="1148.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-48"> +<clipPath id="terminal-1103912939-line-48"> <rect x="0" y="1172.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-49"> +<clipPath id="terminal-1103912939-line-49"> <rect x="0" y="1197.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-50"> +<clipPath id="terminal-1103912939-line-50"> <rect x="0" y="1221.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-51"> +<clipPath id="terminal-1103912939-line-51"> <rect x="0" y="1245.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-52"> +<clipPath id="terminal-1103912939-line-52"> <rect x="0" y="1270.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-53"> +<clipPath id="terminal-1103912939-line-53"> <rect x="0" y="1294.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-54"> +<clipPath id="terminal-1103912939-line-54"> <rect x="0" y="1319.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-55"> +<clipPath id="terminal-1103912939-line-55"> <rect x="0" y="1343.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-56"> +<clipPath id="terminal-1103912939-line-56"> <rect x="0" y="1367.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-57"> +<clipPath id="terminal-1103912939-line-57"> <rect x="0" y="1392.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-58"> +<clipPath id="terminal-1103912939-line-58"> <rect x="0" y="1416.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-59"> +<clipPath id="terminal-1103912939-line-59"> <rect x="0" y="1441.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-60"> +<clipPath id="terminal-1103912939-line-60"> <rect x="0" y="1465.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-61"> +<clipPath id="terminal-1103912939-line-61"> <rect x="0" y="1489.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-62"> +<clipPath id="terminal-1103912939-line-62"> <rect x="0" y="1514.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-63"> +<clipPath id="terminal-1103912939-line-63"> <rect x="0" y="1538.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-64"> +<clipPath id="terminal-1103912939-line-64"> <rect x="0" y="1563.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-65"> +<clipPath id="terminal-1103912939-line-65"> <rect x="0" y="1587.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-66"> +<clipPath id="terminal-1103912939-line-66"> <rect x="0" y="1611.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-67"> +<clipPath id="terminal-1103912939-line-67"> <rect x="0" y="1636.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-68"> +<clipPath id="terminal-1103912939-line-68"> <rect x="0" y="1660.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-69"> +<clipPath id="terminal-1103912939-line-69"> <rect x="0" y="1685.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-70"> +<clipPath id="terminal-1103912939-line-70"> <rect x="0" y="1709.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-71"> +<clipPath id="terminal-1103912939-line-71"> <rect x="0" y="1733.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-72"> +<clipPath id="terminal-1103912939-line-72"> <rect x="0" y="1758.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-73"> +<clipPath id="terminal-1103912939-line-73"> <rect x="0" y="1782.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-74"> +<clipPath id="terminal-1103912939-line-74"> <rect x="0" y="1807.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-75"> +<clipPath id="terminal-1103912939-line-75"> <rect x="0" y="1831.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-76"> +<clipPath id="terminal-1103912939-line-76"> <rect x="0" y="1855.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-908877803-line-77"> +<clipPath id="terminal-1103912939-line-77"> <rect x="0" y="1880.3" width="976" height="24.65"/> </clipPath> </defs> @@ -285,88 +285,88 @@ <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-908877803-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1103912939-clip-terminal)"> - <g class="terminal-908877803-matrix"> - <text class="terminal-908877803-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-908877803-line-0)">$ cz bump --help</text><text class="terminal-908877803-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-908877803-line-0)"> -</text><text class="terminal-908877803-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-908877803-line-1)">usage: cz bump </text><text class="terminal-908877803-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">[</text><text class="terminal-908877803-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-908877803-line-1)">-h</text><text class="terminal-908877803-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">]</text><text class="terminal-908877803-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">[</text><text class="terminal-908877803-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-908877803-line-1)">--dry-run</text><text class="terminal-908877803-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">]</text><text class="terminal-908877803-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">[</text><text class="terminal-908877803-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-908877803-line-1)">--files-only</text><text class="terminal-908877803-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">]</text><text class="terminal-908877803-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">[</text><text class="terminal-908877803-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-908877803-line-1)">--local-version</text><text class="terminal-908877803-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">]</text><text class="terminal-908877803-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">[</text><text class="terminal-908877803-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-908877803-line-1)">--changelog</text><text class="terminal-908877803-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)">]</text><text class="terminal-908877803-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-908877803-line-1)"> -</text><text class="terminal-908877803-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)">[</text><text class="terminal-908877803-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-908877803-line-2)">--no-verify</text><text class="terminal-908877803-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)">]</text><text class="terminal-908877803-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)">[</text><text class="terminal-908877803-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-908877803-line-2)">--yes</text><text class="terminal-908877803-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)">]</text><text class="terminal-908877803-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)">[</text><text class="terminal-908877803-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-908877803-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-908877803-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)">]</text><text class="terminal-908877803-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-908877803-line-2)"> -</text><text class="terminal-908877803-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)">[</text><text class="terminal-908877803-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-908877803-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-908877803-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)">]</text><text class="terminal-908877803-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)">[</text><text class="terminal-908877803-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-908877803-line-3)">--prerelease </text><text class="terminal-908877803-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)">{</text><text class="terminal-908877803-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-908877803-line-3)">alpha,beta,rc</text><text class="terminal-908877803-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)">}</text><text class="terminal-908877803-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)">]</text><text class="terminal-908877803-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-908877803-line-3)"> -</text><text class="terminal-908877803-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)">[</text><text class="terminal-908877803-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-908877803-line-4)">--devrelease DEVRELEASE</text><text class="terminal-908877803-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)">]</text><text class="terminal-908877803-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)">[</text><text class="terminal-908877803-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-908877803-line-4)">--increment </text><text class="terminal-908877803-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)">{</text><text class="terminal-908877803-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-908877803-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-908877803-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)">}</text><text class="terminal-908877803-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)">]</text><text class="terminal-908877803-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-908877803-line-4)"> -</text><text class="terminal-908877803-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)">[</text><text class="terminal-908877803-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-908877803-line-5)">--increment-mode </text><text class="terminal-908877803-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)">{</text><text class="terminal-908877803-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-908877803-line-5)">linear,exact</text><text class="terminal-908877803-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)">}</text><text class="terminal-908877803-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)">]</text><text class="terminal-908877803-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)">[</text><text class="terminal-908877803-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-908877803-line-5)">--check-consistency</text><text class="terminal-908877803-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)">]</text><text class="terminal-908877803-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-908877803-line-5)"> -</text><text class="terminal-908877803-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-908877803-line-6)">[</text><text class="terminal-908877803-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-908877803-line-6)">--annotated-tag</text><text class="terminal-908877803-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-908877803-line-6)">]</text><text class="terminal-908877803-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-908877803-line-6)"> -</text><text class="terminal-908877803-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-908877803-line-7)">[</text><text class="terminal-908877803-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-908877803-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-908877803-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-908877803-line-7)">]</text><text class="terminal-908877803-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-908877803-line-7)">[</text><text class="terminal-908877803-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-908877803-line-7)">--gpg-sign</text><text class="terminal-908877803-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-908877803-line-7)">]</text><text class="terminal-908877803-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-908877803-line-7)"> -</text><text class="terminal-908877803-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)">[</text><text class="terminal-908877803-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-908877803-line-8)">--changelog-to-stdout</text><text class="terminal-908877803-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)">]</text><text class="terminal-908877803-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)">[</text><text class="terminal-908877803-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-908877803-line-8)">--git-output-to-stderr</text><text class="terminal-908877803-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)">]</text><text class="terminal-908877803-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)">[</text><text class="terminal-908877803-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-908877803-line-8)">--retry</text><text class="terminal-908877803-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)">]</text><text class="terminal-908877803-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-908877803-line-8)"> -</text><text class="terminal-908877803-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)">[</text><text class="terminal-908877803-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-908877803-line-9)">--major-version-zero</text><text class="terminal-908877803-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)">]</text><text class="terminal-908877803-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)">[</text><text class="terminal-908877803-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-908877803-line-9)">--template TEMPLATE</text><text class="terminal-908877803-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)">]</text><text class="terminal-908877803-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)">[</text><text class="terminal-908877803-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-908877803-line-9)">--extra EXTRA</text><text class="terminal-908877803-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)">]</text><text class="terminal-908877803-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-908877803-line-9)"> -</text><text class="terminal-908877803-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-908877803-line-10)">[</text><text class="terminal-908877803-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-908877803-line-10)">--file-name FILE_NAME</text><text class="terminal-908877803-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-908877803-line-10)">]</text><text class="terminal-908877803-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-908877803-line-10)">[</text><text class="terminal-908877803-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-908877803-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-908877803-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-908877803-line-10)">]</text><text class="terminal-908877803-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-908877803-line-10)"> -</text><text class="terminal-908877803-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-908877803-line-11)">[</text><text class="terminal-908877803-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-908877803-line-11)">--version-scheme </text><text class="terminal-908877803-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-908877803-line-11)">{</text><text class="terminal-908877803-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-908877803-line-11)">pep440,semver,semver2</text><text class="terminal-908877803-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-908877803-line-11)">}</text><text class="terminal-908877803-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-908877803-line-11)">]</text><text class="terminal-908877803-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-908877803-line-11)"> -</text><text class="terminal-908877803-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-908877803-line-12)">[</text><text class="terminal-908877803-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-908877803-line-12)">--version-type </text><text class="terminal-908877803-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-908877803-line-12)">{</text><text class="terminal-908877803-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-908877803-line-12)">pep440,semver,semver2</text><text class="terminal-908877803-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-908877803-line-12)">}</text><text class="terminal-908877803-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-908877803-line-12)">]</text><text class="terminal-908877803-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-908877803-line-12)"> -</text><text class="terminal-908877803-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-908877803-line-13)">[</text><text class="terminal-908877803-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-908877803-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-908877803-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-908877803-line-13)">]</text><text class="terminal-908877803-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-908877803-line-13)"> -</text><text class="terminal-908877803-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-908877803-line-14)">[</text><text class="terminal-908877803-r1" x="195.2" y="361.6" textLength="170.8" clip-path="url(#terminal-908877803-line-14)">MANUAL_VERSION</text><text class="terminal-908877803-r2" x="366" y="361.6" textLength="12.2" clip-path="url(#terminal-908877803-line-14)">]</text><text class="terminal-908877803-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-908877803-line-14)"> -</text><text class="terminal-908877803-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-908877803-line-15)"> -</text><text class="terminal-908877803-r1" x="0" y="410.4" textLength="256.2" clip-path="url(#terminal-908877803-line-16)">positional arguments:</text><text class="terminal-908877803-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-908877803-line-16)"> -</text><text class="terminal-908877803-r1" x="0" y="434.8" textLength="610" clip-path="url(#terminal-908877803-line-17)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-908877803-r2" x="610" y="434.8" textLength="12.2" clip-path="url(#terminal-908877803-line-17)">(</text><text class="terminal-908877803-r1" x="622.2" y="434.8" textLength="61" clip-path="url(#terminal-908877803-line-17)">e.g: </text><text class="terminal-908877803-r3" x="683.2" y="434.8" textLength="36.6" clip-path="url(#terminal-908877803-line-17)">1.5</text><text class="terminal-908877803-r1" x="719.8" y="434.8" textLength="12.2" clip-path="url(#terminal-908877803-line-17)">.</text><text class="terminal-908877803-r3" x="732" y="434.8" textLength="12.2" clip-path="url(#terminal-908877803-line-17)">3</text><text class="terminal-908877803-r2" x="744.2" y="434.8" textLength="12.2" clip-path="url(#terminal-908877803-line-17)">)</text><text class="terminal-908877803-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-908877803-line-17)"> -</text><text class="terminal-908877803-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-908877803-line-18)"> -</text><text class="terminal-908877803-r1" x="0" y="483.6" textLength="97.6" clip-path="url(#terminal-908877803-line-19)">options:</text><text class="terminal-908877803-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-908877803-line-19)"> -</text><text class="terminal-908877803-r1" x="0" y="508" textLength="671" clip-path="url(#terminal-908877803-line-20)">  -h, --help            show this help message and exit</text><text class="terminal-908877803-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-908877803-line-20)"> -</text><text class="terminal-908877803-r1" x="0" y="532.4" textLength="915" clip-path="url(#terminal-908877803-line-21)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-908877803-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-908877803-line-21)"> -</text><text class="terminal-908877803-r1" x="0" y="556.8" textLength="793" clip-path="url(#terminal-908877803-line-22)">  --files-only          bump version in the files from the config</text><text class="terminal-908877803-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-908877803-line-22)"> -</text><text class="terminal-908877803-r1" x="0" y="581.2" textLength="719.8" clip-path="url(#terminal-908877803-line-23)">  --local-version       bump only the local version portion</text><text class="terminal-908877803-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-908877803-line-23)"> -</text><text class="terminal-908877803-r1" x="0" y="605.6" textLength="841.8" clip-path="url(#terminal-908877803-line-24)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-908877803-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-908877803-line-24)"> -</text><text class="terminal-908877803-r1" x="0" y="630" textLength="902.8" clip-path="url(#terminal-908877803-line-25)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-908877803-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-908877803-line-25)"> -</text><text class="terminal-908877803-r1" x="0" y="654.4" textLength="353.8" clip-path="url(#terminal-908877803-line-26)">                        hooks</text><text class="terminal-908877803-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-908877803-line-26)"> -</text><text class="terminal-908877803-r1" x="0" y="678.8" textLength="719.8" clip-path="url(#terminal-908877803-line-27)">  --yes                 accept automatically questions done</text><text class="terminal-908877803-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-908877803-line-27)"> -</text><text class="terminal-908877803-r1" x="0" y="703.2" textLength="305" clip-path="url(#terminal-908877803-line-28)">  --tag-format TAG_FORMAT</text><text class="terminal-908877803-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-908877803-line-28)"> -</text><text class="terminal-908877803-r1" x="0" y="727.6" textLength="939.4" clip-path="url(#terminal-908877803-line-29)">                        the format used to tag the commit and read it, use it</text><text class="terminal-908877803-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-908877803-line-29)"> -</text><text class="terminal-908877803-r1" x="0" y="752" textLength="866.2" clip-path="url(#terminal-908877803-line-30)">                        in existing projects, wrap around simple quotes</text><text class="terminal-908877803-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-908877803-line-30)"> -</text><text class="terminal-908877803-r1" x="0" y="776.4" textLength="353.8" clip-path="url(#terminal-908877803-line-31)">  --bump-message BUMP_MESSAGE</text><text class="terminal-908877803-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-908877803-line-31)"> -</text><text class="terminal-908877803-r1" x="0" y="800.8" textLength="902.8" clip-path="url(#terminal-908877803-line-32)">                        template used to create the release commit, useful</text><text class="terminal-908877803-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-908877803-line-32)"> -</text><text class="terminal-908877803-r1" x="0" y="825.2" textLength="536.8" clip-path="url(#terminal-908877803-line-33)">                        when working with CI</text><text class="terminal-908877803-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-908877803-line-33)"> -</text><text class="terminal-908877803-r1" x="0" y="849.6" textLength="183" clip-path="url(#terminal-908877803-line-34)">  --prerelease </text><text class="terminal-908877803-r2" x="183" y="849.6" textLength="12.2" clip-path="url(#terminal-908877803-line-34)">{</text><text class="terminal-908877803-r1" x="195.2" y="849.6" textLength="158.6" clip-path="url(#terminal-908877803-line-34)">alpha,beta,rc</text><text class="terminal-908877803-r2" x="353.8" y="849.6" textLength="12.2" clip-path="url(#terminal-908877803-line-34)">}</text><text class="terminal-908877803-r1" x="366" y="849.6" textLength="73.2" clip-path="url(#terminal-908877803-line-34)">, -pr </text><text class="terminal-908877803-r2" x="439.2" y="849.6" textLength="12.2" clip-path="url(#terminal-908877803-line-34)">{</text><text class="terminal-908877803-r1" x="451.4" y="849.6" textLength="158.6" clip-path="url(#terminal-908877803-line-34)">alpha,beta,rc</text><text class="terminal-908877803-r2" x="610" y="849.6" textLength="12.2" clip-path="url(#terminal-908877803-line-34)">}</text><text class="terminal-908877803-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-908877803-line-34)"> -</text><text class="terminal-908877803-r1" x="0" y="874" textLength="597.8" clip-path="url(#terminal-908877803-line-35)">                        choose type of prerelease</text><text class="terminal-908877803-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-908877803-line-35)"> -</text><text class="terminal-908877803-r1" x="0" y="898.4" textLength="488" clip-path="url(#terminal-908877803-line-36)">  --devrelease DEVRELEASE, -d DEVRELEASE</text><text class="terminal-908877803-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-908877803-line-36)"> -</text><text class="terminal-908877803-r1" x="0" y="922.8" textLength="841.8" clip-path="url(#terminal-908877803-line-37)">                        specify non-negative integer for dev. release</text><text class="terminal-908877803-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-908877803-line-37)"> -</text><text class="terminal-908877803-r1" x="0" y="947.2" textLength="170.8" clip-path="url(#terminal-908877803-line-38)">  --increment </text><text class="terminal-908877803-r2" x="170.8" y="947.2" textLength="12.2" clip-path="url(#terminal-908877803-line-38)">{</text><text class="terminal-908877803-r1" x="183" y="947.2" textLength="207.4" clip-path="url(#terminal-908877803-line-38)">MAJOR,MINOR,PATCH</text><text class="terminal-908877803-r2" x="390.4" y="947.2" textLength="12.2" clip-path="url(#terminal-908877803-line-38)">}</text><text class="terminal-908877803-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-908877803-line-38)"> -</text><text class="terminal-908877803-r1" x="0" y="971.6" textLength="756.4" clip-path="url(#terminal-908877803-line-39)">                        manually specify the desired increment</text><text class="terminal-908877803-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-908877803-line-39)"> -</text><text class="terminal-908877803-r1" x="0" y="996" textLength="231.8" clip-path="url(#terminal-908877803-line-40)">  --increment-mode </text><text class="terminal-908877803-r2" x="231.8" y="996" textLength="12.2" clip-path="url(#terminal-908877803-line-40)">{</text><text class="terminal-908877803-r1" x="244" y="996" textLength="146.4" clip-path="url(#terminal-908877803-line-40)">linear,exact</text><text class="terminal-908877803-r2" x="390.4" y="996" textLength="12.2" clip-path="url(#terminal-908877803-line-40)">}</text><text class="terminal-908877803-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-908877803-line-40)"> -</text><text class="terminal-908877803-r1" x="0" y="1020.4" textLength="902.8" clip-path="url(#terminal-908877803-line-41)">                        set the method by which the new version is chosen.</text><text class="terminal-908877803-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-908877803-line-41)"> -</text><text class="terminal-908877803-r4" x="292.8" y="1044.8" textLength="97.6" clip-path="url(#terminal-908877803-line-42)">'linear'</text><text class="terminal-908877803-r2" x="402.6" y="1044.8" textLength="12.2" clip-path="url(#terminal-908877803-line-42)">(</text><text class="terminal-908877803-r1" x="414.8" y="1044.8" textLength="85.4" clip-path="url(#terminal-908877803-line-42)">default</text><text class="terminal-908877803-r2" x="500.2" y="1044.8" textLength="12.2" clip-path="url(#terminal-908877803-line-42)">)</text><text class="terminal-908877803-r1" x="512.4" y="1044.8" textLength="414.8" clip-path="url(#terminal-908877803-line-42)"> guesses the next version based on</text><text class="terminal-908877803-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-908877803-line-42)"> -</text><text class="terminal-908877803-r1" x="0" y="1069.2" textLength="939.4" clip-path="url(#terminal-908877803-line-43)">                        typical linear version progression, such that bumping</text><text class="terminal-908877803-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-908877803-line-43)"> -</text><text class="terminal-908877803-r1" x="0" y="1093.6" textLength="866.2" clip-path="url(#terminal-908877803-line-44)">                        of a pre-release with lower precedence than the</text><text class="terminal-908877803-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-908877803-line-44)"> -</text><text class="terminal-908877803-r1" x="0" y="1118" textLength="939.4" clip-path="url(#terminal-908877803-line-45)">                        current pre-release phase maintains the current phase</text><text class="terminal-908877803-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-908877803-line-45)"> -</text><text class="terminal-908877803-r1" x="0" y="1142.4" textLength="561.2" clip-path="url(#terminal-908877803-line-46)">                        of higher precedence. </text><text class="terminal-908877803-r4" x="561.2" y="1142.4" textLength="85.4" clip-path="url(#terminal-908877803-line-46)">'exact'</text><text class="terminal-908877803-r1" x="646.6" y="1142.4" textLength="305" clip-path="url(#terminal-908877803-line-46)"> applies the changes that</text><text class="terminal-908877803-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-908877803-line-46)"> -</text><text class="terminal-908877803-r1" x="0" y="1166.8" textLength="536.8" clip-path="url(#terminal-908877803-line-47)">                        have been specified </text><text class="terminal-908877803-r2" x="536.8" y="1166.8" textLength="12.2" clip-path="url(#terminal-908877803-line-47)">(</text><text class="terminal-908877803-r1" x="549" y="1166.8" textLength="353.8" clip-path="url(#terminal-908877803-line-47)">or determined from the commit</text><text class="terminal-908877803-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-908877803-line-47)"> -</text><text class="terminal-908877803-r1" x="0" y="1191.2" textLength="329.4" clip-path="url(#terminal-908877803-line-48)">                        log</text><text class="terminal-908877803-r2" x="329.4" y="1191.2" textLength="12.2" clip-path="url(#terminal-908877803-line-48)">)</text><text class="terminal-908877803-r1" x="341.6" y="1191.2" textLength="585.6" clip-path="url(#terminal-908877803-line-48)"> without interpretation, such that the increment</text><text class="terminal-908877803-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-908877803-line-48)"> -</text><text class="terminal-908877803-r1" x="0" y="1215.6" textLength="707.6" clip-path="url(#terminal-908877803-line-49)">                        and pre-release are always honored</text><text class="terminal-908877803-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-908877803-line-49)"> -</text><text class="terminal-908877803-r1" x="0" y="1240" textLength="317.2" clip-path="url(#terminal-908877803-line-50)">  --check-consistency, -cc</text><text class="terminal-908877803-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-908877803-line-50)"> -</text><text class="terminal-908877803-r1" x="0" y="1264.4" textLength="951.6" clip-path="url(#terminal-908877803-line-51)">                        check consistency among versions defined in commitizen</text><text class="terminal-908877803-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-908877803-line-51)"> -</text><text class="terminal-908877803-r1" x="0" y="1288.8" textLength="671" clip-path="url(#terminal-908877803-line-52)">                        configuration and version_files</text><text class="terminal-908877803-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-908877803-line-52)"> -</text><text class="terminal-908877803-r1" x="0" y="1313.2" textLength="866.2" clip-path="url(#terminal-908877803-line-53)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-908877803-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-908877803-line-53)"> -</text><text class="terminal-908877803-r1" x="0" y="1337.6" textLength="915" clip-path="url(#terminal-908877803-line-54)">  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-908877803-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-908877803-line-54)"> -</text><text class="terminal-908877803-r1" x="0" y="1362" textLength="634.4" clip-path="url(#terminal-908877803-line-55)">                        create annotated tag message</text><text class="terminal-908877803-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-908877803-line-55)"> -</text><text class="terminal-908877803-r1" x="0" y="1386.4" textLength="719.8" clip-path="url(#terminal-908877803-line-56)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-908877803-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-908877803-line-56)"> -</text><text class="terminal-908877803-r1" x="0" y="1410.8" textLength="280.6" clip-path="url(#terminal-908877803-line-57)">  --changelog-to-stdout</text><text class="terminal-908877803-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-908877803-line-57)"> -</text><text class="terminal-908877803-r1" x="0" y="1435.2" textLength="658.8" clip-path="url(#terminal-908877803-line-58)">                        Output changelog to the stdout</text><text class="terminal-908877803-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-908877803-line-58)"> -</text><text class="terminal-908877803-r1" x="0" y="1459.6" textLength="292.8" clip-path="url(#terminal-908877803-line-59)">  --git-output-to-stderr</text><text class="terminal-908877803-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-908877803-line-59)"> -</text><text class="terminal-908877803-r1" x="0" y="1484" textLength="646.6" clip-path="url(#terminal-908877803-line-60)">                        Redirect git output to stderr</text><text class="terminal-908877803-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-908877803-line-60)"> -</text><text class="terminal-908877803-r1" x="0" y="1508.4" textLength="744.2" clip-path="url(#terminal-908877803-line-61)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-908877803-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-908877803-line-61)"> -</text><text class="terminal-908877803-r1" x="0" y="1532.8" textLength="939.4" clip-path="url(#terminal-908877803-line-62)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-908877803-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-908877803-line-62)"> -</text><text class="terminal-908877803-r1" x="0" y="1557.2" textLength="414.8" clip-path="url(#terminal-908877803-line-63)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-908877803-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-908877803-line-63)"> -</text><text class="terminal-908877803-r1" x="0" y="1581.6" textLength="646.6" clip-path="url(#terminal-908877803-line-64)">                        changelog template file name </text><text class="terminal-908877803-r2" x="646.6" y="1581.6" textLength="12.2" clip-path="url(#terminal-908877803-line-64)">(</text><text class="terminal-908877803-r1" x="658.8" y="1581.6" textLength="280.6" clip-path="url(#terminal-908877803-line-64)">relative to the current</text><text class="terminal-908877803-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-908877803-line-64)"> -</text><text class="terminal-908877803-r1" x="0" y="1606" textLength="500.2" clip-path="url(#terminal-908877803-line-65)">                        working directory</text><text class="terminal-908877803-r2" x="500.2" y="1606" textLength="12.2" clip-path="url(#terminal-908877803-line-65)">)</text><text class="terminal-908877803-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-908877803-line-65)"> -</text><text class="terminal-908877803-r1" x="0" y="1630.4" textLength="305" clip-path="url(#terminal-908877803-line-66)">  --extra EXTRA, -e EXTRA</text><text class="terminal-908877803-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-908877803-line-66)"> -</text><text class="terminal-908877803-r1" x="0" y="1654.8" textLength="622.2" clip-path="url(#terminal-908877803-line-67)">                        a changelog extra variable </text><text class="terminal-908877803-r2" x="622.2" y="1654.8" textLength="12.2" clip-path="url(#terminal-908877803-line-67)">(</text><text class="terminal-908877803-r1" x="634.4" y="1654.8" textLength="146.4" clip-path="url(#terminal-908877803-line-67)">in the form </text><text class="terminal-908877803-r4" x="780.8" y="1654.8" textLength="12.2" clip-path="url(#terminal-908877803-line-67)">'</text><text class="terminal-908877803-r4" x="793" y="1654.8" textLength="36.6" clip-path="url(#terminal-908877803-line-67)">key</text><text class="terminal-908877803-r4" x="829.6" y="1654.8" textLength="12.2" clip-path="url(#terminal-908877803-line-67)">=</text><text class="terminal-908877803-r4" x="841.8" y="1654.8" textLength="61" clip-path="url(#terminal-908877803-line-67)">value</text><text class="terminal-908877803-r4" x="902.8" y="1654.8" textLength="12.2" clip-path="url(#terminal-908877803-line-67)">'</text><text class="terminal-908877803-r2" x="915" y="1654.8" textLength="12.2" clip-path="url(#terminal-908877803-line-67)">)</text><text class="terminal-908877803-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-908877803-line-67)"> -</text><text class="terminal-908877803-r1" x="0" y="1679.2" textLength="280.6" clip-path="url(#terminal-908877803-line-68)">  --file-name FILE_NAME</text><text class="terminal-908877803-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-908877803-line-68)"> -</text><text class="terminal-908877803-r1" x="0" y="1703.6" textLength="573.4" clip-path="url(#terminal-908877803-line-69)">                        file name of changelog </text><text class="terminal-908877803-r2" x="573.4" y="1703.6" textLength="12.2" clip-path="url(#terminal-908877803-line-69)">(</text><text class="terminal-908877803-r1" x="585.6" y="1703.6" textLength="109.8" clip-path="url(#terminal-908877803-line-69)">default: </text><text class="terminal-908877803-r4" x="695.4" y="1703.6" textLength="170.8" clip-path="url(#terminal-908877803-line-69)">'CHANGELOG.md'</text><text class="terminal-908877803-r2" x="866.2" y="1703.6" textLength="12.2" clip-path="url(#terminal-908877803-line-69)">)</text><text class="terminal-908877803-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-908877803-line-69)"> -</text><text class="terminal-908877803-r1" x="0" y="1728" textLength="475.8" clip-path="url(#terminal-908877803-line-70)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-908877803-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-908877803-line-70)"> -</text><text class="terminal-908877803-r1" x="0" y="1752.4" textLength="719.8" clip-path="url(#terminal-908877803-line-71)">                        start pre-releases with this offset</text><text class="terminal-908877803-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-908877803-line-71)"> -</text><text class="terminal-908877803-r1" x="0" y="1776.8" textLength="231.8" clip-path="url(#terminal-908877803-line-72)">  --version-scheme </text><text class="terminal-908877803-r2" x="231.8" y="1776.8" textLength="12.2" clip-path="url(#terminal-908877803-line-72)">{</text><text class="terminal-908877803-r1" x="244" y="1776.8" textLength="256.2" clip-path="url(#terminal-908877803-line-72)">pep440,semver,semver2</text><text class="terminal-908877803-r2" x="500.2" y="1776.8" textLength="12.2" clip-path="url(#terminal-908877803-line-72)">}</text><text class="terminal-908877803-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-908877803-line-72)"> -</text><text class="terminal-908877803-r1" x="0" y="1801.2" textLength="549" clip-path="url(#terminal-908877803-line-73)">                        choose version scheme</text><text class="terminal-908877803-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-908877803-line-73)"> -</text><text class="terminal-908877803-r1" x="0" y="1825.6" textLength="207.4" clip-path="url(#terminal-908877803-line-74)">  --version-type </text><text class="terminal-908877803-r2" x="207.4" y="1825.6" textLength="12.2" clip-path="url(#terminal-908877803-line-74)">{</text><text class="terminal-908877803-r1" x="219.6" y="1825.6" textLength="256.2" clip-path="url(#terminal-908877803-line-74)">pep440,semver,semver2</text><text class="terminal-908877803-r2" x="475.8" y="1825.6" textLength="12.2" clip-path="url(#terminal-908877803-line-74)">}</text><text class="terminal-908877803-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-908877803-line-74)"> -</text><text class="terminal-908877803-r1" x="0" y="1850" textLength="683.2" clip-path="url(#terminal-908877803-line-75)">                        Deprecated, use --version-scheme</text><text class="terminal-908877803-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-908877803-line-75)"> -</text><text class="terminal-908877803-r1" x="0" y="1874.4" textLength="402.6" clip-path="url(#terminal-908877803-line-76)">  --build-metadata BUILD_METADATA</text><text class="terminal-908877803-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-908877803-line-76)"> -</text><text class="terminal-908877803-r1" x="0" y="1898.8" textLength="915" clip-path="url(#terminal-908877803-line-77)">                        Add additional build-metadata to the version-number</text><text class="terminal-908877803-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-908877803-line-77)"> -</text><text class="terminal-908877803-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-908877803-line-78)"> + <g class="terminal-1103912939-matrix"> + <text class="terminal-1103912939-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-1103912939-line-0)">$ cz bump --help</text><text class="terminal-1103912939-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1103912939-line-0)"> +</text><text class="terminal-1103912939-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-1103912939-line-1)">usage: cz bump </text><text class="terminal-1103912939-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">[</text><text class="terminal-1103912939-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-1103912939-line-1)">-h</text><text class="terminal-1103912939-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">]</text><text class="terminal-1103912939-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">[</text><text class="terminal-1103912939-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-1103912939-line-1)">--dry-run</text><text class="terminal-1103912939-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">]</text><text class="terminal-1103912939-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">[</text><text class="terminal-1103912939-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-1103912939-line-1)">--files-only</text><text class="terminal-1103912939-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">]</text><text class="terminal-1103912939-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">[</text><text class="terminal-1103912939-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-1103912939-line-1)">--local-version</text><text class="terminal-1103912939-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">]</text><text class="terminal-1103912939-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">[</text><text class="terminal-1103912939-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-1103912939-line-1)">--changelog</text><text class="terminal-1103912939-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">]</text><text class="terminal-1103912939-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)"> +</text><text class="terminal-1103912939-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)">[</text><text class="terminal-1103912939-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-1103912939-line-2)">--no-verify</text><text class="terminal-1103912939-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)">]</text><text class="terminal-1103912939-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)">[</text><text class="terminal-1103912939-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-1103912939-line-2)">--yes</text><text class="terminal-1103912939-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)">]</text><text class="terminal-1103912939-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)">[</text><text class="terminal-1103912939-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-1103912939-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-1103912939-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)">]</text><text class="terminal-1103912939-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)"> +</text><text class="terminal-1103912939-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)">[</text><text class="terminal-1103912939-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-1103912939-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-1103912939-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)">]</text><text class="terminal-1103912939-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)">[</text><text class="terminal-1103912939-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-1103912939-line-3)">--prerelease </text><text class="terminal-1103912939-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)">{</text><text class="terminal-1103912939-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-1103912939-line-3)">alpha,beta,rc</text><text class="terminal-1103912939-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)">}</text><text class="terminal-1103912939-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)">]</text><text class="terminal-1103912939-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)"> +</text><text class="terminal-1103912939-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)">[</text><text class="terminal-1103912939-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-1103912939-line-4)">--devrelease DEVRELEASE</text><text class="terminal-1103912939-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)">]</text><text class="terminal-1103912939-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)">[</text><text class="terminal-1103912939-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-1103912939-line-4)">--increment </text><text class="terminal-1103912939-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)">{</text><text class="terminal-1103912939-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-1103912939-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-1103912939-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)">}</text><text class="terminal-1103912939-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)">]</text><text class="terminal-1103912939-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)"> +</text><text class="terminal-1103912939-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)">[</text><text class="terminal-1103912939-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-1103912939-line-5)">--increment-mode </text><text class="terminal-1103912939-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)">{</text><text class="terminal-1103912939-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-1103912939-line-5)">linear,exact</text><text class="terminal-1103912939-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)">}</text><text class="terminal-1103912939-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)">]</text><text class="terminal-1103912939-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)">[</text><text class="terminal-1103912939-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-1103912939-line-5)">--check-consistency</text><text class="terminal-1103912939-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)">]</text><text class="terminal-1103912939-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)"> +</text><text class="terminal-1103912939-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-6)">[</text><text class="terminal-1103912939-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-1103912939-line-6)">--annotated-tag</text><text class="terminal-1103912939-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-6)">]</text><text class="terminal-1103912939-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-6)"> +</text><text class="terminal-1103912939-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-7)">[</text><text class="terminal-1103912939-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-1103912939-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-1103912939-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-7)">]</text><text class="terminal-1103912939-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-7)">[</text><text class="terminal-1103912939-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-1103912939-line-7)">--gpg-sign</text><text class="terminal-1103912939-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-7)">]</text><text class="terminal-1103912939-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-7)"> +</text><text class="terminal-1103912939-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)">[</text><text class="terminal-1103912939-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-1103912939-line-8)">--changelog-to-stdout</text><text class="terminal-1103912939-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)">]</text><text class="terminal-1103912939-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)">[</text><text class="terminal-1103912939-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-1103912939-line-8)">--git-output-to-stderr</text><text class="terminal-1103912939-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)">]</text><text class="terminal-1103912939-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)">[</text><text class="terminal-1103912939-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-1103912939-line-8)">--retry</text><text class="terminal-1103912939-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)">]</text><text class="terminal-1103912939-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)"> +</text><text class="terminal-1103912939-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)">[</text><text class="terminal-1103912939-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-1103912939-line-9)">--major-version-zero</text><text class="terminal-1103912939-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)">]</text><text class="terminal-1103912939-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)">[</text><text class="terminal-1103912939-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-1103912939-line-9)">--template TEMPLATE</text><text class="terminal-1103912939-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)">]</text><text class="terminal-1103912939-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)">[</text><text class="terminal-1103912939-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-1103912939-line-9)">--extra EXTRA</text><text class="terminal-1103912939-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)">]</text><text class="terminal-1103912939-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)"> +</text><text class="terminal-1103912939-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-1103912939-line-10)">[</text><text class="terminal-1103912939-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-1103912939-line-10)">--file-name FILE_NAME</text><text class="terminal-1103912939-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-1103912939-line-10)">]</text><text class="terminal-1103912939-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-1103912939-line-10)">[</text><text class="terminal-1103912939-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-1103912939-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-1103912939-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-1103912939-line-10)">]</text><text class="terminal-1103912939-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1103912939-line-10)"> +</text><text class="terminal-1103912939-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-11)">[</text><text class="terminal-1103912939-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-1103912939-line-11)">--version-scheme </text><text class="terminal-1103912939-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-11)">{</text><text class="terminal-1103912939-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-1103912939-line-11)">semver2,pep440,semver</text><text class="terminal-1103912939-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-11)">}</text><text class="terminal-1103912939-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-11)">]</text><text class="terminal-1103912939-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-11)"> +</text><text class="terminal-1103912939-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-12)">[</text><text class="terminal-1103912939-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-1103912939-line-12)">--version-type </text><text class="terminal-1103912939-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-12)">{</text><text class="terminal-1103912939-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-1103912939-line-12)">semver2,pep440,semver</text><text class="terminal-1103912939-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-12)">}</text><text class="terminal-1103912939-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-12)">]</text><text class="terminal-1103912939-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-12)"> +</text><text class="terminal-1103912939-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-13)">[</text><text class="terminal-1103912939-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-1103912939-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-1103912939-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-13)">]</text><text class="terminal-1103912939-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-13)"> +</text><text class="terminal-1103912939-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-14)">[</text><text class="terminal-1103912939-r1" x="195.2" y="361.6" textLength="170.8" clip-path="url(#terminal-1103912939-line-14)">MANUAL_VERSION</text><text class="terminal-1103912939-r2" x="366" y="361.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-14)">]</text><text class="terminal-1103912939-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-14)"> +</text><text class="terminal-1103912939-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1103912939-line-15)"> +</text><text class="terminal-1103912939-r1" x="0" y="410.4" textLength="256.2" clip-path="url(#terminal-1103912939-line-16)">positional arguments:</text><text class="terminal-1103912939-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-16)"> +</text><text class="terminal-1103912939-r1" x="0" y="434.8" textLength="610" clip-path="url(#terminal-1103912939-line-17)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-1103912939-r2" x="610" y="434.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-17)">(</text><text class="terminal-1103912939-r1" x="622.2" y="434.8" textLength="61" clip-path="url(#terminal-1103912939-line-17)">e.g: </text><text class="terminal-1103912939-r3" x="683.2" y="434.8" textLength="36.6" clip-path="url(#terminal-1103912939-line-17)">1.5</text><text class="terminal-1103912939-r1" x="719.8" y="434.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-17)">.</text><text class="terminal-1103912939-r3" x="732" y="434.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-17)">3</text><text class="terminal-1103912939-r2" x="744.2" y="434.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-17)">)</text><text class="terminal-1103912939-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-17)"> +</text><text class="terminal-1103912939-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-18)"> +</text><text class="terminal-1103912939-r1" x="0" y="483.6" textLength="97.6" clip-path="url(#terminal-1103912939-line-19)">options:</text><text class="terminal-1103912939-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-19)"> +</text><text class="terminal-1103912939-r1" x="0" y="508" textLength="671" clip-path="url(#terminal-1103912939-line-20)">  -h, --help            show this help message and exit</text><text class="terminal-1103912939-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1103912939-line-20)"> +</text><text class="terminal-1103912939-r1" x="0" y="532.4" textLength="915" clip-path="url(#terminal-1103912939-line-21)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-1103912939-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-21)"> +</text><text class="terminal-1103912939-r1" x="0" y="556.8" textLength="793" clip-path="url(#terminal-1103912939-line-22)">  --files-only          bump version in the files from the config</text><text class="terminal-1103912939-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-22)"> +</text><text class="terminal-1103912939-r1" x="0" y="581.2" textLength="719.8" clip-path="url(#terminal-1103912939-line-23)">  --local-version       bump only the local version portion</text><text class="terminal-1103912939-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-23)"> +</text><text class="terminal-1103912939-r1" x="0" y="605.6" textLength="841.8" clip-path="url(#terminal-1103912939-line-24)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-1103912939-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-24)"> +</text><text class="terminal-1103912939-r1" x="0" y="630" textLength="902.8" clip-path="url(#terminal-1103912939-line-25)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-1103912939-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1103912939-line-25)"> +</text><text class="terminal-1103912939-r1" x="0" y="654.4" textLength="353.8" clip-path="url(#terminal-1103912939-line-26)">                        hooks</text><text class="terminal-1103912939-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-26)"> +</text><text class="terminal-1103912939-r1" x="0" y="678.8" textLength="719.8" clip-path="url(#terminal-1103912939-line-27)">  --yes                 accept automatically questions done</text><text class="terminal-1103912939-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-27)"> +</text><text class="terminal-1103912939-r1" x="0" y="703.2" textLength="305" clip-path="url(#terminal-1103912939-line-28)">  --tag-format TAG_FORMAT</text><text class="terminal-1103912939-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-28)"> +</text><text class="terminal-1103912939-r1" x="0" y="727.6" textLength="939.4" clip-path="url(#terminal-1103912939-line-29)">                        the format used to tag the commit and read it, use it</text><text class="terminal-1103912939-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-29)"> +</text><text class="terminal-1103912939-r1" x="0" y="752" textLength="866.2" clip-path="url(#terminal-1103912939-line-30)">                        in existing projects, wrap around simple quotes</text><text class="terminal-1103912939-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-1103912939-line-30)"> +</text><text class="terminal-1103912939-r1" x="0" y="776.4" textLength="353.8" clip-path="url(#terminal-1103912939-line-31)">  --bump-message BUMP_MESSAGE</text><text class="terminal-1103912939-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-31)"> +</text><text class="terminal-1103912939-r1" x="0" y="800.8" textLength="902.8" clip-path="url(#terminal-1103912939-line-32)">                        template used to create the release commit, useful</text><text class="terminal-1103912939-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-32)"> +</text><text class="terminal-1103912939-r1" x="0" y="825.2" textLength="536.8" clip-path="url(#terminal-1103912939-line-33)">                        when working with CI</text><text class="terminal-1103912939-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-33)"> +</text><text class="terminal-1103912939-r1" x="0" y="849.6" textLength="183" clip-path="url(#terminal-1103912939-line-34)">  --prerelease </text><text class="terminal-1103912939-r2" x="183" y="849.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-34)">{</text><text class="terminal-1103912939-r1" x="195.2" y="849.6" textLength="158.6" clip-path="url(#terminal-1103912939-line-34)">alpha,beta,rc</text><text class="terminal-1103912939-r2" x="353.8" y="849.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-34)">}</text><text class="terminal-1103912939-r1" x="366" y="849.6" textLength="73.2" clip-path="url(#terminal-1103912939-line-34)">, -pr </text><text class="terminal-1103912939-r2" x="439.2" y="849.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-34)">{</text><text class="terminal-1103912939-r1" x="451.4" y="849.6" textLength="158.6" clip-path="url(#terminal-1103912939-line-34)">alpha,beta,rc</text><text class="terminal-1103912939-r2" x="610" y="849.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-34)">}</text><text class="terminal-1103912939-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-34)"> +</text><text class="terminal-1103912939-r1" x="0" y="874" textLength="597.8" clip-path="url(#terminal-1103912939-line-35)">                        choose type of prerelease</text><text class="terminal-1103912939-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-1103912939-line-35)"> +</text><text class="terminal-1103912939-r1" x="0" y="898.4" textLength="488" clip-path="url(#terminal-1103912939-line-36)">  --devrelease DEVRELEASE, -d DEVRELEASE</text><text class="terminal-1103912939-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-36)"> +</text><text class="terminal-1103912939-r1" x="0" y="922.8" textLength="841.8" clip-path="url(#terminal-1103912939-line-37)">                        specify non-negative integer for dev. release</text><text class="terminal-1103912939-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-37)"> +</text><text class="terminal-1103912939-r1" x="0" y="947.2" textLength="170.8" clip-path="url(#terminal-1103912939-line-38)">  --increment </text><text class="terminal-1103912939-r2" x="170.8" y="947.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-38)">{</text><text class="terminal-1103912939-r1" x="183" y="947.2" textLength="207.4" clip-path="url(#terminal-1103912939-line-38)">MAJOR,MINOR,PATCH</text><text class="terminal-1103912939-r2" x="390.4" y="947.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-38)">}</text><text class="terminal-1103912939-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-38)"> +</text><text class="terminal-1103912939-r1" x="0" y="971.6" textLength="756.4" clip-path="url(#terminal-1103912939-line-39)">                        manually specify the desired increment</text><text class="terminal-1103912939-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-39)"> +</text><text class="terminal-1103912939-r1" x="0" y="996" textLength="231.8" clip-path="url(#terminal-1103912939-line-40)">  --increment-mode </text><text class="terminal-1103912939-r2" x="231.8" y="996" textLength="12.2" clip-path="url(#terminal-1103912939-line-40)">{</text><text class="terminal-1103912939-r1" x="244" y="996" textLength="146.4" clip-path="url(#terminal-1103912939-line-40)">linear,exact</text><text class="terminal-1103912939-r2" x="390.4" y="996" textLength="12.2" clip-path="url(#terminal-1103912939-line-40)">}</text><text class="terminal-1103912939-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-1103912939-line-40)"> +</text><text class="terminal-1103912939-r1" x="0" y="1020.4" textLength="902.8" clip-path="url(#terminal-1103912939-line-41)">                        set the method by which the new version is chosen.</text><text class="terminal-1103912939-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-41)"> +</text><text class="terminal-1103912939-r4" x="292.8" y="1044.8" textLength="97.6" clip-path="url(#terminal-1103912939-line-42)">'linear'</text><text class="terminal-1103912939-r2" x="402.6" y="1044.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-42)">(</text><text class="terminal-1103912939-r1" x="414.8" y="1044.8" textLength="85.4" clip-path="url(#terminal-1103912939-line-42)">default</text><text class="terminal-1103912939-r2" x="500.2" y="1044.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-42)">)</text><text class="terminal-1103912939-r1" x="512.4" y="1044.8" textLength="414.8" clip-path="url(#terminal-1103912939-line-42)"> guesses the next version based on</text><text class="terminal-1103912939-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-42)"> +</text><text class="terminal-1103912939-r1" x="0" y="1069.2" textLength="939.4" clip-path="url(#terminal-1103912939-line-43)">                        typical linear version progression, such that bumping</text><text class="terminal-1103912939-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-43)"> +</text><text class="terminal-1103912939-r1" x="0" y="1093.6" textLength="866.2" clip-path="url(#terminal-1103912939-line-44)">                        of a pre-release with lower precedence than the</text><text class="terminal-1103912939-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-44)"> +</text><text class="terminal-1103912939-r1" x="0" y="1118" textLength="939.4" clip-path="url(#terminal-1103912939-line-45)">                        current pre-release phase maintains the current phase</text><text class="terminal-1103912939-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-1103912939-line-45)"> +</text><text class="terminal-1103912939-r1" x="0" y="1142.4" textLength="561.2" clip-path="url(#terminal-1103912939-line-46)">                        of higher precedence. </text><text class="terminal-1103912939-r4" x="561.2" y="1142.4" textLength="85.4" clip-path="url(#terminal-1103912939-line-46)">'exact'</text><text class="terminal-1103912939-r1" x="646.6" y="1142.4" textLength="305" clip-path="url(#terminal-1103912939-line-46)"> applies the changes that</text><text class="terminal-1103912939-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-46)"> +</text><text class="terminal-1103912939-r1" x="0" y="1166.8" textLength="536.8" clip-path="url(#terminal-1103912939-line-47)">                        have been specified </text><text class="terminal-1103912939-r2" x="536.8" y="1166.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-47)">(</text><text class="terminal-1103912939-r1" x="549" y="1166.8" textLength="353.8" clip-path="url(#terminal-1103912939-line-47)">or determined from the commit</text><text class="terminal-1103912939-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-47)"> +</text><text class="terminal-1103912939-r1" x="0" y="1191.2" textLength="329.4" clip-path="url(#terminal-1103912939-line-48)">                        log</text><text class="terminal-1103912939-r2" x="329.4" y="1191.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-48)">)</text><text class="terminal-1103912939-r1" x="341.6" y="1191.2" textLength="585.6" clip-path="url(#terminal-1103912939-line-48)"> without interpretation, such that the increment</text><text class="terminal-1103912939-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-48)"> +</text><text class="terminal-1103912939-r1" x="0" y="1215.6" textLength="707.6" clip-path="url(#terminal-1103912939-line-49)">                        and pre-release are always honored</text><text class="terminal-1103912939-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-49)"> +</text><text class="terminal-1103912939-r1" x="0" y="1240" textLength="317.2" clip-path="url(#terminal-1103912939-line-50)">  --check-consistency, -cc</text><text class="terminal-1103912939-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-1103912939-line-50)"> +</text><text class="terminal-1103912939-r1" x="0" y="1264.4" textLength="951.6" clip-path="url(#terminal-1103912939-line-51)">                        check consistency among versions defined in commitizen</text><text class="terminal-1103912939-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-51)"> +</text><text class="terminal-1103912939-r1" x="0" y="1288.8" textLength="671" clip-path="url(#terminal-1103912939-line-52)">                        configuration and version_files</text><text class="terminal-1103912939-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-52)"> +</text><text class="terminal-1103912939-r1" x="0" y="1313.2" textLength="866.2" clip-path="url(#terminal-1103912939-line-53)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-1103912939-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-53)"> +</text><text class="terminal-1103912939-r1" x="0" y="1337.6" textLength="915" clip-path="url(#terminal-1103912939-line-54)">  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-1103912939-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-54)"> +</text><text class="terminal-1103912939-r1" x="0" y="1362" textLength="634.4" clip-path="url(#terminal-1103912939-line-55)">                        create annotated tag message</text><text class="terminal-1103912939-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-1103912939-line-55)"> +</text><text class="terminal-1103912939-r1" x="0" y="1386.4" textLength="719.8" clip-path="url(#terminal-1103912939-line-56)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-1103912939-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-56)"> +</text><text class="terminal-1103912939-r1" x="0" y="1410.8" textLength="280.6" clip-path="url(#terminal-1103912939-line-57)">  --changelog-to-stdout</text><text class="terminal-1103912939-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-57)"> +</text><text class="terminal-1103912939-r1" x="0" y="1435.2" textLength="658.8" clip-path="url(#terminal-1103912939-line-58)">                        Output changelog to the stdout</text><text class="terminal-1103912939-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-58)"> +</text><text class="terminal-1103912939-r1" x="0" y="1459.6" textLength="292.8" clip-path="url(#terminal-1103912939-line-59)">  --git-output-to-stderr</text><text class="terminal-1103912939-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-59)"> +</text><text class="terminal-1103912939-r1" x="0" y="1484" textLength="646.6" clip-path="url(#terminal-1103912939-line-60)">                        Redirect git output to stderr</text><text class="terminal-1103912939-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-1103912939-line-60)"> +</text><text class="terminal-1103912939-r1" x="0" y="1508.4" textLength="744.2" clip-path="url(#terminal-1103912939-line-61)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-1103912939-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-61)"> +</text><text class="terminal-1103912939-r1" x="0" y="1532.8" textLength="939.4" clip-path="url(#terminal-1103912939-line-62)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-1103912939-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-62)"> +</text><text class="terminal-1103912939-r1" x="0" y="1557.2" textLength="414.8" clip-path="url(#terminal-1103912939-line-63)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-1103912939-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-63)"> +</text><text class="terminal-1103912939-r1" x="0" y="1581.6" textLength="646.6" clip-path="url(#terminal-1103912939-line-64)">                        changelog template file name </text><text class="terminal-1103912939-r2" x="646.6" y="1581.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-64)">(</text><text class="terminal-1103912939-r1" x="658.8" y="1581.6" textLength="280.6" clip-path="url(#terminal-1103912939-line-64)">relative to the current</text><text class="terminal-1103912939-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-64)"> +</text><text class="terminal-1103912939-r1" x="0" y="1606" textLength="500.2" clip-path="url(#terminal-1103912939-line-65)">                        working directory</text><text class="terminal-1103912939-r2" x="500.2" y="1606" textLength="12.2" clip-path="url(#terminal-1103912939-line-65)">)</text><text class="terminal-1103912939-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-1103912939-line-65)"> +</text><text class="terminal-1103912939-r1" x="0" y="1630.4" textLength="305" clip-path="url(#terminal-1103912939-line-66)">  --extra EXTRA, -e EXTRA</text><text class="terminal-1103912939-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-66)"> +</text><text class="terminal-1103912939-r1" x="0" y="1654.8" textLength="622.2" clip-path="url(#terminal-1103912939-line-67)">                        a changelog extra variable </text><text class="terminal-1103912939-r2" x="622.2" y="1654.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-67)">(</text><text class="terminal-1103912939-r1" x="634.4" y="1654.8" textLength="146.4" clip-path="url(#terminal-1103912939-line-67)">in the form </text><text class="terminal-1103912939-r4" x="780.8" y="1654.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-67)">'</text><text class="terminal-1103912939-r4" x="793" y="1654.8" textLength="36.6" clip-path="url(#terminal-1103912939-line-67)">key</text><text class="terminal-1103912939-r4" x="829.6" y="1654.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-67)">=</text><text class="terminal-1103912939-r4" x="841.8" y="1654.8" textLength="61" clip-path="url(#terminal-1103912939-line-67)">value</text><text class="terminal-1103912939-r4" x="902.8" y="1654.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-67)">'</text><text class="terminal-1103912939-r2" x="915" y="1654.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-67)">)</text><text class="terminal-1103912939-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-67)"> +</text><text class="terminal-1103912939-r1" x="0" y="1679.2" textLength="280.6" clip-path="url(#terminal-1103912939-line-68)">  --file-name FILE_NAME</text><text class="terminal-1103912939-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-68)"> +</text><text class="terminal-1103912939-r1" x="0" y="1703.6" textLength="573.4" clip-path="url(#terminal-1103912939-line-69)">                        file name of changelog </text><text class="terminal-1103912939-r2" x="573.4" y="1703.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-69)">(</text><text class="terminal-1103912939-r1" x="585.6" y="1703.6" textLength="109.8" clip-path="url(#terminal-1103912939-line-69)">default: </text><text class="terminal-1103912939-r4" x="695.4" y="1703.6" textLength="170.8" clip-path="url(#terminal-1103912939-line-69)">'CHANGELOG.md'</text><text class="terminal-1103912939-r2" x="866.2" y="1703.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-69)">)</text><text class="terminal-1103912939-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-69)"> +</text><text class="terminal-1103912939-r1" x="0" y="1728" textLength="475.8" clip-path="url(#terminal-1103912939-line-70)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-1103912939-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-1103912939-line-70)"> +</text><text class="terminal-1103912939-r1" x="0" y="1752.4" textLength="719.8" clip-path="url(#terminal-1103912939-line-71)">                        start pre-releases with this offset</text><text class="terminal-1103912939-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-71)"> +</text><text class="terminal-1103912939-r1" x="0" y="1776.8" textLength="231.8" clip-path="url(#terminal-1103912939-line-72)">  --version-scheme </text><text class="terminal-1103912939-r2" x="231.8" y="1776.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-72)">{</text><text class="terminal-1103912939-r1" x="244" y="1776.8" textLength="256.2" clip-path="url(#terminal-1103912939-line-72)">semver2,pep440,semver</text><text class="terminal-1103912939-r2" x="500.2" y="1776.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-72)">}</text><text class="terminal-1103912939-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-72)"> +</text><text class="terminal-1103912939-r1" x="0" y="1801.2" textLength="549" clip-path="url(#terminal-1103912939-line-73)">                        choose version scheme</text><text class="terminal-1103912939-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-73)"> +</text><text class="terminal-1103912939-r1" x="0" y="1825.6" textLength="207.4" clip-path="url(#terminal-1103912939-line-74)">  --version-type </text><text class="terminal-1103912939-r2" x="207.4" y="1825.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-74)">{</text><text class="terminal-1103912939-r1" x="219.6" y="1825.6" textLength="256.2" clip-path="url(#terminal-1103912939-line-74)">semver2,pep440,semver</text><text class="terminal-1103912939-r2" x="475.8" y="1825.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-74)">}</text><text class="terminal-1103912939-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-74)"> +</text><text class="terminal-1103912939-r1" x="0" y="1850" textLength="683.2" clip-path="url(#terminal-1103912939-line-75)">                        Deprecated, use --version-scheme</text><text class="terminal-1103912939-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-1103912939-line-75)"> +</text><text class="terminal-1103912939-r1" x="0" y="1874.4" textLength="402.6" clip-path="url(#terminal-1103912939-line-76)">  --build-metadata BUILD_METADATA</text><text class="terminal-1103912939-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-76)"> +</text><text class="terminal-1103912939-r1" x="0" y="1898.8" textLength="915" clip-path="url(#terminal-1103912939-line-77)">                        Add additional build-metadata to the version-number</text><text class="terminal-1103912939-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-77)"> +</text><text class="terminal-1103912939-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-78)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_changelog___help.svg b/docs/images/cli_help/cz_changelog___help.svg index a7d277df44..88f12bdbfa 100644 --- a/docs/images/cli_help/cz_changelog___help.svg +++ b/docs/images/cli_help/cz_changelog___help.svg @@ -19,144 +19,144 @@ font-weight: 700; } - .terminal-37245177-matrix { + .terminal-4187574521-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-37245177-title { + .terminal-4187574521-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-37245177-r1 { fill: #c5c8c6 } -.terminal-37245177-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-37245177-r3 { fill: #68a0b3;font-weight: bold } -.terminal-37245177-r4 { fill: #98a84b } + .terminal-4187574521-r1 { fill: #c5c8c6 } +.terminal-4187574521-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-4187574521-r3 { fill: #68a0b3;font-weight: bold } +.terminal-4187574521-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-37245177-clip-terminal"> + <clipPath id="terminal-4187574521-clip-terminal"> <rect x="0" y="0" width="975.0" height="975.0" /> </clipPath> - <clipPath id="terminal-37245177-line-0"> + <clipPath id="terminal-4187574521-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-1"> +<clipPath id="terminal-4187574521-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-2"> +<clipPath id="terminal-4187574521-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-3"> +<clipPath id="terminal-4187574521-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-4"> +<clipPath id="terminal-4187574521-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-5"> +<clipPath id="terminal-4187574521-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-6"> +<clipPath id="terminal-4187574521-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-7"> +<clipPath id="terminal-4187574521-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-8"> +<clipPath id="terminal-4187574521-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-9"> +<clipPath id="terminal-4187574521-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-10"> +<clipPath id="terminal-4187574521-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-11"> +<clipPath id="terminal-4187574521-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-12"> +<clipPath id="terminal-4187574521-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-13"> +<clipPath id="terminal-4187574521-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-14"> +<clipPath id="terminal-4187574521-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-15"> +<clipPath id="terminal-4187574521-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-16"> +<clipPath id="terminal-4187574521-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-17"> +<clipPath id="terminal-4187574521-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-18"> +<clipPath id="terminal-4187574521-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-19"> +<clipPath id="terminal-4187574521-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-20"> +<clipPath id="terminal-4187574521-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-21"> +<clipPath id="terminal-4187574521-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-22"> +<clipPath id="terminal-4187574521-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-23"> +<clipPath id="terminal-4187574521-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-24"> +<clipPath id="terminal-4187574521-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-25"> +<clipPath id="terminal-4187574521-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-26"> +<clipPath id="terminal-4187574521-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-27"> +<clipPath id="terminal-4187574521-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-28"> +<clipPath id="terminal-4187574521-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-29"> +<clipPath id="terminal-4187574521-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-30"> +<clipPath id="terminal-4187574521-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-31"> +<clipPath id="terminal-4187574521-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-32"> +<clipPath id="terminal-4187574521-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-33"> +<clipPath id="terminal-4187574521-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-34"> +<clipPath id="terminal-4187574521-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-35"> +<clipPath id="terminal-4187574521-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-36"> +<clipPath id="terminal-4187574521-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-37"> +<clipPath id="terminal-4187574521-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-37245177-line-38"> +<clipPath id="terminal-4187574521-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> </defs> @@ -168,49 +168,49 @@ <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-37245177-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-4187574521-clip-terminal)"> - <g class="terminal-37245177-matrix"> - <text class="terminal-37245177-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-37245177-line-0)">$ cz changelog --help</text><text class="terminal-37245177-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-37245177-line-0)"> -</text><text class="terminal-37245177-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-37245177-line-1)">usage: cz changelog </text><text class="terminal-37245177-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)">[</text><text class="terminal-37245177-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-37245177-line-1)">-h</text><text class="terminal-37245177-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)">]</text><text class="terminal-37245177-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)">[</text><text class="terminal-37245177-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-37245177-line-1)">--dry-run</text><text class="terminal-37245177-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)">]</text><text class="terminal-37245177-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)">[</text><text class="terminal-37245177-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-37245177-line-1)">--file-name FILE_NAME</text><text class="terminal-37245177-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)">]</text><text class="terminal-37245177-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-37245177-line-1)"> -</text><text class="terminal-37245177-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-37245177-line-2)">[</text><text class="terminal-37245177-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-37245177-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-37245177-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-37245177-line-2)">]</text><text class="terminal-37245177-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-37245177-line-2)">[</text><text class="terminal-37245177-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-37245177-line-2)">--incremental</text><text class="terminal-37245177-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-37245177-line-2)">]</text><text class="terminal-37245177-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-37245177-line-2)"> -</text><text class="terminal-37245177-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-37245177-line-3)">[</text><text class="terminal-37245177-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-37245177-line-3)">--start-rev START_REV</text><text class="terminal-37245177-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-37245177-line-3)">]</text><text class="terminal-37245177-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-37245177-line-3)">[</text><text class="terminal-37245177-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-37245177-line-3)">--merge-prerelease</text><text class="terminal-37245177-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-37245177-line-3)">]</text><text class="terminal-37245177-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-37245177-line-3)"> -</text><text class="terminal-37245177-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-37245177-line-4)">[</text><text class="terminal-37245177-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-37245177-line-4)">--version-scheme </text><text class="terminal-37245177-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-37245177-line-4)">{</text><text class="terminal-37245177-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-37245177-line-4)">semver,semver2,pep440</text><text class="terminal-37245177-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-37245177-line-4)">}</text><text class="terminal-37245177-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-37245177-line-4)">]</text><text class="terminal-37245177-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-37245177-line-4)"> -</text><text class="terminal-37245177-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-37245177-line-5)">[</text><text class="terminal-37245177-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-37245177-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-37245177-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-37245177-line-5)">]</text><text class="terminal-37245177-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-37245177-line-5)">[</text><text class="terminal-37245177-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-37245177-line-5)">--template TEMPLATE</text><text class="terminal-37245177-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-37245177-line-5)">]</text><text class="terminal-37245177-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-37245177-line-5)"> -</text><text class="terminal-37245177-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-37245177-line-6)">[</text><text class="terminal-37245177-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-37245177-line-6)">--extra EXTRA</text><text class="terminal-37245177-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-37245177-line-6)">]</text><text class="terminal-37245177-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-37245177-line-6)"> -</text><text class="terminal-37245177-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-37245177-line-7)"> -</text><text class="terminal-37245177-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-37245177-line-8)"> -</text><text class="terminal-37245177-r1" x="0" y="239.6" textLength="256.2" clip-path="url(#terminal-37245177-line-9)">positional arguments:</text><text class="terminal-37245177-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-37245177-line-9)"> -</text><text class="terminal-37245177-r1" x="0" y="264" textLength="805.2" clip-path="url(#terminal-37245177-line-10)">  rev_range             generates changelog for the given version </text><text class="terminal-37245177-r2" x="805.2" y="264" textLength="12.2" clip-path="url(#terminal-37245177-line-10)">(</text><text class="terminal-37245177-r1" x="817.4" y="264" textLength="61" clip-path="url(#terminal-37245177-line-10)">e.g: </text><text class="terminal-37245177-r3" x="878.4" y="264" textLength="36.6" clip-path="url(#terminal-37245177-line-10)">1.5</text><text class="terminal-37245177-r1" x="915" y="264" textLength="12.2" clip-path="url(#terminal-37245177-line-10)">.</text><text class="terminal-37245177-r3" x="927.2" y="264" textLength="12.2" clip-path="url(#terminal-37245177-line-10)">3</text><text class="terminal-37245177-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-37245177-line-10)">)</text><text class="terminal-37245177-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-37245177-line-10)"> -</text><text class="terminal-37245177-r1" x="0" y="288.4" textLength="500.2" clip-path="url(#terminal-37245177-line-11)">                        or version range </text><text class="terminal-37245177-r2" x="500.2" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)">(</text><text class="terminal-37245177-r1" x="512.4" y="288.4" textLength="61" clip-path="url(#terminal-37245177-line-11)">e.g: </text><text class="terminal-37245177-r3" x="573.4" y="288.4" textLength="36.6" clip-path="url(#terminal-37245177-line-11)">1.5</text><text class="terminal-37245177-r1" x="610" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)">.</text><text class="terminal-37245177-r3" x="622.2" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)">3</text><text class="terminal-37245177-r1" x="634.4" y="288.4" textLength="24.4" clip-path="url(#terminal-37245177-line-11)">..</text><text class="terminal-37245177-r3" x="658.8" y="288.4" textLength="36.6" clip-path="url(#terminal-37245177-line-11)">1.7</text><text class="terminal-37245177-r1" x="695.4" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)">.</text><text class="terminal-37245177-r3" x="707.6" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)">9</text><text class="terminal-37245177-r2" x="719.8" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)">)</text><text class="terminal-37245177-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-37245177-line-11)"> -</text><text class="terminal-37245177-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-37245177-line-12)"> -</text><text class="terminal-37245177-r1" x="0" y="337.2" textLength="97.6" clip-path="url(#terminal-37245177-line-13)">options:</text><text class="terminal-37245177-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-37245177-line-13)"> -</text><text class="terminal-37245177-r1" x="0" y="361.6" textLength="671" clip-path="url(#terminal-37245177-line-14)">  -h, --help            show this help message and exit</text><text class="terminal-37245177-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-37245177-line-14)"> -</text><text class="terminal-37245177-r1" x="0" y="386" textLength="585.6" clip-path="url(#terminal-37245177-line-15)">  --dry-run             show changelog to stdout</text><text class="terminal-37245177-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-37245177-line-15)"> -</text><text class="terminal-37245177-r1" x="0" y="410.4" textLength="280.6" clip-path="url(#terminal-37245177-line-16)">  --file-name FILE_NAME</text><text class="terminal-37245177-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-37245177-line-16)"> -</text><text class="terminal-37245177-r1" x="0" y="434.8" textLength="573.4" clip-path="url(#terminal-37245177-line-17)">                        file name of changelog </text><text class="terminal-37245177-r2" x="573.4" y="434.8" textLength="12.2" clip-path="url(#terminal-37245177-line-17)">(</text><text class="terminal-37245177-r1" x="585.6" y="434.8" textLength="109.8" clip-path="url(#terminal-37245177-line-17)">default: </text><text class="terminal-37245177-r4" x="695.4" y="434.8" textLength="170.8" clip-path="url(#terminal-37245177-line-17)">'CHANGELOG.md'</text><text class="terminal-37245177-r2" x="866.2" y="434.8" textLength="12.2" clip-path="url(#terminal-37245177-line-17)">)</text><text class="terminal-37245177-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-37245177-line-17)"> -</text><text class="terminal-37245177-r1" x="0" y="459.2" textLength="500.2" clip-path="url(#terminal-37245177-line-18)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-37245177-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-37245177-line-18)"> -</text><text class="terminal-37245177-r1" x="0" y="483.6" textLength="707.6" clip-path="url(#terminal-37245177-line-19)">                        set the value for the new version </text><text class="terminal-37245177-r2" x="707.6" y="483.6" textLength="12.2" clip-path="url(#terminal-37245177-line-19)">(</text><text class="terminal-37245177-r1" x="719.8" y="483.6" textLength="207.4" clip-path="url(#terminal-37245177-line-19)">use the tag value</text><text class="terminal-37245177-r2" x="927.2" y="483.6" textLength="12.2" clip-path="url(#terminal-37245177-line-19)">)</text><text class="terminal-37245177-r1" x="939.4" y="483.6" textLength="12.2" clip-path="url(#terminal-37245177-line-19)">,</text><text class="terminal-37245177-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-37245177-line-19)"> -</text><text class="terminal-37245177-r1" x="0" y="508" textLength="622.2" clip-path="url(#terminal-37245177-line-20)">                        instead of using unreleased</text><text class="terminal-37245177-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-37245177-line-20)"> -</text><text class="terminal-37245177-r1" x="0" y="532.4" textLength="939.4" clip-path="url(#terminal-37245177-line-21)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-37245177-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-37245177-line-21)"> -</text><text class="terminal-37245177-r1" x="0" y="556.8" textLength="817.4" clip-path="url(#terminal-37245177-line-22)">                        if the changelog has been manually modified</text><text class="terminal-37245177-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-37245177-line-22)"> -</text><text class="terminal-37245177-r1" x="0" y="581.2" textLength="280.6" clip-path="url(#terminal-37245177-line-23)">  --start-rev START_REV</text><text class="terminal-37245177-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-37245177-line-23)"> -</text><text class="terminal-37245177-r1" x="0" y="605.6" textLength="866.2" clip-path="url(#terminal-37245177-line-24)">                        start rev of the changelog. If not set, it will</text><text class="terminal-37245177-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-37245177-line-24)"> -</text><text class="terminal-37245177-r1" x="0" y="630" textLength="695.4" clip-path="url(#terminal-37245177-line-25)">                        generate changelog from the start</text><text class="terminal-37245177-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-37245177-line-25)"> -</text><text class="terminal-37245177-r1" x="0" y="654.4" textLength="915" clip-path="url(#terminal-37245177-line-26)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-37245177-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-37245177-line-26)"> -</text><text class="terminal-37245177-r1" x="0" y="678.8" textLength="951.6" clip-path="url(#terminal-37245177-line-27)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-37245177-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-37245177-line-27)"> -</text><text class="terminal-37245177-r1" x="0" y="703.2" textLength="451.4" clip-path="url(#terminal-37245177-line-28)">                        the changelog</text><text class="terminal-37245177-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-37245177-line-28)"> -</text><text class="terminal-37245177-r1" x="0" y="727.6" textLength="231.8" clip-path="url(#terminal-37245177-line-29)">  --version-scheme </text><text class="terminal-37245177-r2" x="231.8" y="727.6" textLength="12.2" clip-path="url(#terminal-37245177-line-29)">{</text><text class="terminal-37245177-r1" x="244" y="727.6" textLength="256.2" clip-path="url(#terminal-37245177-line-29)">semver,semver2,pep440</text><text class="terminal-37245177-r2" x="500.2" y="727.6" textLength="12.2" clip-path="url(#terminal-37245177-line-29)">}</text><text class="terminal-37245177-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-37245177-line-29)"> -</text><text class="terminal-37245177-r1" x="0" y="752" textLength="549" clip-path="url(#terminal-37245177-line-30)">                        choose version scheme</text><text class="terminal-37245177-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-37245177-line-30)"> -</text><text class="terminal-37245177-r1" x="0" y="776.4" textLength="427" clip-path="url(#terminal-37245177-line-31)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-37245177-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-37245177-line-31)"> -</text><text class="terminal-37245177-r1" x="0" y="800.8" textLength="927.2" clip-path="url(#terminal-37245177-line-32)">                        Export the changelog template into this file instead</text><text class="terminal-37245177-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-37245177-line-32)"> -</text><text class="terminal-37245177-r1" x="0" y="825.2" textLength="475.8" clip-path="url(#terminal-37245177-line-33)">                        of rendering it</text><text class="terminal-37245177-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-37245177-line-33)"> -</text><text class="terminal-37245177-r1" x="0" y="849.6" textLength="414.8" clip-path="url(#terminal-37245177-line-34)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-37245177-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-37245177-line-34)"> -</text><text class="terminal-37245177-r1" x="0" y="874" textLength="646.6" clip-path="url(#terminal-37245177-line-35)">                        changelog template file name </text><text class="terminal-37245177-r2" x="646.6" y="874" textLength="12.2" clip-path="url(#terminal-37245177-line-35)">(</text><text class="terminal-37245177-r1" x="658.8" y="874" textLength="280.6" clip-path="url(#terminal-37245177-line-35)">relative to the current</text><text class="terminal-37245177-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-37245177-line-35)"> -</text><text class="terminal-37245177-r1" x="0" y="898.4" textLength="500.2" clip-path="url(#terminal-37245177-line-36)">                        working directory</text><text class="terminal-37245177-r2" x="500.2" y="898.4" textLength="12.2" clip-path="url(#terminal-37245177-line-36)">)</text><text class="terminal-37245177-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-37245177-line-36)"> -</text><text class="terminal-37245177-r1" x="0" y="922.8" textLength="305" clip-path="url(#terminal-37245177-line-37)">  --extra EXTRA, -e EXTRA</text><text class="terminal-37245177-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-37245177-line-37)"> -</text><text class="terminal-37245177-r1" x="0" y="947.2" textLength="622.2" clip-path="url(#terminal-37245177-line-38)">                        a changelog extra variable </text><text class="terminal-37245177-r2" x="622.2" y="947.2" textLength="12.2" clip-path="url(#terminal-37245177-line-38)">(</text><text class="terminal-37245177-r1" x="634.4" y="947.2" textLength="146.4" clip-path="url(#terminal-37245177-line-38)">in the form </text><text class="terminal-37245177-r4" x="780.8" y="947.2" textLength="12.2" clip-path="url(#terminal-37245177-line-38)">'</text><text class="terminal-37245177-r4" x="793" y="947.2" textLength="36.6" clip-path="url(#terminal-37245177-line-38)">key</text><text class="terminal-37245177-r4" x="829.6" y="947.2" textLength="12.2" clip-path="url(#terminal-37245177-line-38)">=</text><text class="terminal-37245177-r4" x="841.8" y="947.2" textLength="61" clip-path="url(#terminal-37245177-line-38)">value</text><text class="terminal-37245177-r4" x="902.8" y="947.2" textLength="12.2" clip-path="url(#terminal-37245177-line-38)">'</text><text class="terminal-37245177-r2" x="915" y="947.2" textLength="12.2" clip-path="url(#terminal-37245177-line-38)">)</text><text class="terminal-37245177-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-37245177-line-38)"> -</text><text class="terminal-37245177-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-37245177-line-39)"> + <g class="terminal-4187574521-matrix"> + <text class="terminal-4187574521-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-4187574521-line-0)">$ cz changelog --help</text><text class="terminal-4187574521-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-4187574521-line-0)"> +</text><text class="terminal-4187574521-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-4187574521-line-1)">usage: cz changelog </text><text class="terminal-4187574521-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)">[</text><text class="terminal-4187574521-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-4187574521-line-1)">-h</text><text class="terminal-4187574521-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)">]</text><text class="terminal-4187574521-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)">[</text><text class="terminal-4187574521-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-4187574521-line-1)">--dry-run</text><text class="terminal-4187574521-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)">]</text><text class="terminal-4187574521-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)">[</text><text class="terminal-4187574521-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-4187574521-line-1)">--file-name FILE_NAME</text><text class="terminal-4187574521-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)">]</text><text class="terminal-4187574521-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)"> +</text><text class="terminal-4187574521-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-2)">[</text><text class="terminal-4187574521-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-4187574521-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-4187574521-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-2)">]</text><text class="terminal-4187574521-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-2)">[</text><text class="terminal-4187574521-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-4187574521-line-2)">--incremental</text><text class="terminal-4187574521-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-2)">]</text><text class="terminal-4187574521-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-2)"> +</text><text class="terminal-4187574521-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-3)">[</text><text class="terminal-4187574521-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-4187574521-line-3)">--start-rev START_REV</text><text class="terminal-4187574521-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-3)">]</text><text class="terminal-4187574521-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-3)">[</text><text class="terminal-4187574521-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-4187574521-line-3)">--merge-prerelease</text><text class="terminal-4187574521-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-3)">]</text><text class="terminal-4187574521-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-3)"> +</text><text class="terminal-4187574521-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-4)">[</text><text class="terminal-4187574521-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-4187574521-line-4)">--version-scheme </text><text class="terminal-4187574521-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-4)">{</text><text class="terminal-4187574521-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-4187574521-line-4)">semver,pep440,semver2</text><text class="terminal-4187574521-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-4)">}</text><text class="terminal-4187574521-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-4)">]</text><text class="terminal-4187574521-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-4)"> +</text><text class="terminal-4187574521-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-4187574521-line-5)">[</text><text class="terminal-4187574521-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-4187574521-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-4187574521-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-4187574521-line-5)">]</text><text class="terminal-4187574521-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-4187574521-line-5)">[</text><text class="terminal-4187574521-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-4187574521-line-5)">--template TEMPLATE</text><text class="terminal-4187574521-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-4187574521-line-5)">]</text><text class="terminal-4187574521-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-4187574521-line-5)"> +</text><text class="terminal-4187574521-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-6)">[</text><text class="terminal-4187574521-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-4187574521-line-6)">--extra EXTRA</text><text class="terminal-4187574521-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-6)">]</text><text class="terminal-4187574521-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-6)"> +</text><text class="terminal-4187574521-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-7)"> +</text><text class="terminal-4187574521-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-8)"> +</text><text class="terminal-4187574521-r1" x="0" y="239.6" textLength="256.2" clip-path="url(#terminal-4187574521-line-9)">positional arguments:</text><text class="terminal-4187574521-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-9)"> +</text><text class="terminal-4187574521-r1" x="0" y="264" textLength="805.2" clip-path="url(#terminal-4187574521-line-10)">  rev_range             generates changelog for the given version </text><text class="terminal-4187574521-r2" x="805.2" y="264" textLength="12.2" clip-path="url(#terminal-4187574521-line-10)">(</text><text class="terminal-4187574521-r1" x="817.4" y="264" textLength="61" clip-path="url(#terminal-4187574521-line-10)">e.g: </text><text class="terminal-4187574521-r3" x="878.4" y="264" textLength="36.6" clip-path="url(#terminal-4187574521-line-10)">1.5</text><text class="terminal-4187574521-r1" x="915" y="264" textLength="12.2" clip-path="url(#terminal-4187574521-line-10)">.</text><text class="terminal-4187574521-r3" x="927.2" y="264" textLength="12.2" clip-path="url(#terminal-4187574521-line-10)">3</text><text class="terminal-4187574521-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-4187574521-line-10)">)</text><text class="terminal-4187574521-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-4187574521-line-10)"> +</text><text class="terminal-4187574521-r1" x="0" y="288.4" textLength="500.2" clip-path="url(#terminal-4187574521-line-11)">                        or version range </text><text class="terminal-4187574521-r2" x="500.2" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)">(</text><text class="terminal-4187574521-r1" x="512.4" y="288.4" textLength="61" clip-path="url(#terminal-4187574521-line-11)">e.g: </text><text class="terminal-4187574521-r3" x="573.4" y="288.4" textLength="36.6" clip-path="url(#terminal-4187574521-line-11)">1.5</text><text class="terminal-4187574521-r1" x="610" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)">.</text><text class="terminal-4187574521-r3" x="622.2" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)">3</text><text class="terminal-4187574521-r1" x="634.4" y="288.4" textLength="24.4" clip-path="url(#terminal-4187574521-line-11)">..</text><text class="terminal-4187574521-r3" x="658.8" y="288.4" textLength="36.6" clip-path="url(#terminal-4187574521-line-11)">1.7</text><text class="terminal-4187574521-r1" x="695.4" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)">.</text><text class="terminal-4187574521-r3" x="707.6" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)">9</text><text class="terminal-4187574521-r2" x="719.8" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)">)</text><text class="terminal-4187574521-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)"> +</text><text class="terminal-4187574521-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-12)"> +</text><text class="terminal-4187574521-r1" x="0" y="337.2" textLength="97.6" clip-path="url(#terminal-4187574521-line-13)">options:</text><text class="terminal-4187574521-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-13)"> +</text><text class="terminal-4187574521-r1" x="0" y="361.6" textLength="671" clip-path="url(#terminal-4187574521-line-14)">  -h, --help            show this help message and exit</text><text class="terminal-4187574521-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-14)"> +</text><text class="terminal-4187574521-r1" x="0" y="386" textLength="585.6" clip-path="url(#terminal-4187574521-line-15)">  --dry-run             show changelog to stdout</text><text class="terminal-4187574521-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-4187574521-line-15)"> +</text><text class="terminal-4187574521-r1" x="0" y="410.4" textLength="280.6" clip-path="url(#terminal-4187574521-line-16)">  --file-name FILE_NAME</text><text class="terminal-4187574521-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-16)"> +</text><text class="terminal-4187574521-r1" x="0" y="434.8" textLength="573.4" clip-path="url(#terminal-4187574521-line-17)">                        file name of changelog </text><text class="terminal-4187574521-r2" x="573.4" y="434.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-17)">(</text><text class="terminal-4187574521-r1" x="585.6" y="434.8" textLength="109.8" clip-path="url(#terminal-4187574521-line-17)">default: </text><text class="terminal-4187574521-r4" x="695.4" y="434.8" textLength="170.8" clip-path="url(#terminal-4187574521-line-17)">'CHANGELOG.md'</text><text class="terminal-4187574521-r2" x="866.2" y="434.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-17)">)</text><text class="terminal-4187574521-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-17)"> +</text><text class="terminal-4187574521-r1" x="0" y="459.2" textLength="500.2" clip-path="url(#terminal-4187574521-line-18)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-4187574521-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-18)"> +</text><text class="terminal-4187574521-r1" x="0" y="483.6" textLength="707.6" clip-path="url(#terminal-4187574521-line-19)">                        set the value for the new version </text><text class="terminal-4187574521-r2" x="707.6" y="483.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-19)">(</text><text class="terminal-4187574521-r1" x="719.8" y="483.6" textLength="207.4" clip-path="url(#terminal-4187574521-line-19)">use the tag value</text><text class="terminal-4187574521-r2" x="927.2" y="483.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-19)">)</text><text class="terminal-4187574521-r1" x="939.4" y="483.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-19)">,</text><text class="terminal-4187574521-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-19)"> +</text><text class="terminal-4187574521-r1" x="0" y="508" textLength="622.2" clip-path="url(#terminal-4187574521-line-20)">                        instead of using unreleased</text><text class="terminal-4187574521-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-4187574521-line-20)"> +</text><text class="terminal-4187574521-r1" x="0" y="532.4" textLength="939.4" clip-path="url(#terminal-4187574521-line-21)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-4187574521-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-21)"> +</text><text class="terminal-4187574521-r1" x="0" y="556.8" textLength="817.4" clip-path="url(#terminal-4187574521-line-22)">                        if the changelog has been manually modified</text><text class="terminal-4187574521-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-22)"> +</text><text class="terminal-4187574521-r1" x="0" y="581.2" textLength="280.6" clip-path="url(#terminal-4187574521-line-23)">  --start-rev START_REV</text><text class="terminal-4187574521-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-23)"> +</text><text class="terminal-4187574521-r1" x="0" y="605.6" textLength="866.2" clip-path="url(#terminal-4187574521-line-24)">                        start rev of the changelog. If not set, it will</text><text class="terminal-4187574521-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-24)"> +</text><text class="terminal-4187574521-r1" x="0" y="630" textLength="695.4" clip-path="url(#terminal-4187574521-line-25)">                        generate changelog from the start</text><text class="terminal-4187574521-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-4187574521-line-25)"> +</text><text class="terminal-4187574521-r1" x="0" y="654.4" textLength="915" clip-path="url(#terminal-4187574521-line-26)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-4187574521-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-26)"> +</text><text class="terminal-4187574521-r1" x="0" y="678.8" textLength="951.6" clip-path="url(#terminal-4187574521-line-27)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-4187574521-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-27)"> +</text><text class="terminal-4187574521-r1" x="0" y="703.2" textLength="451.4" clip-path="url(#terminal-4187574521-line-28)">                        the changelog</text><text class="terminal-4187574521-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-28)"> +</text><text class="terminal-4187574521-r1" x="0" y="727.6" textLength="231.8" clip-path="url(#terminal-4187574521-line-29)">  --version-scheme </text><text class="terminal-4187574521-r2" x="231.8" y="727.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-29)">{</text><text class="terminal-4187574521-r1" x="244" y="727.6" textLength="256.2" clip-path="url(#terminal-4187574521-line-29)">semver,pep440,semver2</text><text class="terminal-4187574521-r2" x="500.2" y="727.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-29)">}</text><text class="terminal-4187574521-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-29)"> +</text><text class="terminal-4187574521-r1" x="0" y="752" textLength="549" clip-path="url(#terminal-4187574521-line-30)">                        choose version scheme</text><text class="terminal-4187574521-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-4187574521-line-30)"> +</text><text class="terminal-4187574521-r1" x="0" y="776.4" textLength="427" clip-path="url(#terminal-4187574521-line-31)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-4187574521-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-31)"> +</text><text class="terminal-4187574521-r1" x="0" y="800.8" textLength="927.2" clip-path="url(#terminal-4187574521-line-32)">                        Export the changelog template into this file instead</text><text class="terminal-4187574521-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-32)"> +</text><text class="terminal-4187574521-r1" x="0" y="825.2" textLength="475.8" clip-path="url(#terminal-4187574521-line-33)">                        of rendering it</text><text class="terminal-4187574521-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-33)"> +</text><text class="terminal-4187574521-r1" x="0" y="849.6" textLength="414.8" clip-path="url(#terminal-4187574521-line-34)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-4187574521-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-34)"> +</text><text class="terminal-4187574521-r1" x="0" y="874" textLength="646.6" clip-path="url(#terminal-4187574521-line-35)">                        changelog template file name </text><text class="terminal-4187574521-r2" x="646.6" y="874" textLength="12.2" clip-path="url(#terminal-4187574521-line-35)">(</text><text class="terminal-4187574521-r1" x="658.8" y="874" textLength="280.6" clip-path="url(#terminal-4187574521-line-35)">relative to the current</text><text class="terminal-4187574521-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-4187574521-line-35)"> +</text><text class="terminal-4187574521-r1" x="0" y="898.4" textLength="500.2" clip-path="url(#terminal-4187574521-line-36)">                        working directory</text><text class="terminal-4187574521-r2" x="500.2" y="898.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-36)">)</text><text class="terminal-4187574521-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-36)"> +</text><text class="terminal-4187574521-r1" x="0" y="922.8" textLength="305" clip-path="url(#terminal-4187574521-line-37)">  --extra EXTRA, -e EXTRA</text><text class="terminal-4187574521-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-37)"> +</text><text class="terminal-4187574521-r1" x="0" y="947.2" textLength="622.2" clip-path="url(#terminal-4187574521-line-38)">                        a changelog extra variable </text><text class="terminal-4187574521-r2" x="622.2" y="947.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-38)">(</text><text class="terminal-4187574521-r1" x="634.4" y="947.2" textLength="146.4" clip-path="url(#terminal-4187574521-line-38)">in the form </text><text class="terminal-4187574521-r4" x="780.8" y="947.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-38)">'</text><text class="terminal-4187574521-r4" x="793" y="947.2" textLength="36.6" clip-path="url(#terminal-4187574521-line-38)">key</text><text class="terminal-4187574521-r4" x="829.6" y="947.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-38)">=</text><text class="terminal-4187574521-r4" x="841.8" y="947.2" textLength="61" clip-path="url(#terminal-4187574521-line-38)">value</text><text class="terminal-4187574521-r4" x="902.8" y="947.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-38)">'</text><text class="terminal-4187574521-r2" x="915" y="947.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-38)">)</text><text class="terminal-4187574521-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-38)"> +</text><text class="terminal-4187574521-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-39)"> </text> </g> </g> From a9f86bedec00d068481896584ee3d4d90ec92f9b Mon Sep 17 00:00:00 2001 From: Stefanie Molin <24376333+stefmolin@users.noreply.github.com> Date: Mon, 20 May 2024 11:06:30 -0400 Subject: [PATCH 261/685] style: add py.typed file --- commitizen/py.typed | 0 pyproject.toml | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 commitizen/py.typed diff --git a/commitizen/py.typed b/commitizen/py.typed new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pyproject.toml b/pyproject.toml index beb7b87308..82d8fb197b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,6 +32,10 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: Implementation :: CPython", ] +packages = [ + {include = "commitizen"}, + {include = "commitizen/py.typed"}, +] [tool.poetry.dependencies] python = ">=3.8" From 796a160bc4b0d07dfd26a1d200930ba93584e74c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 18:27:27 +0000 Subject: [PATCH 262/685] docs(cli/screenshots): update CLI screenshots [skip ci] --- docs/images/cli_help/cz_changelog___help.svg | 176 +++++++++---------- 1 file changed, 88 insertions(+), 88 deletions(-) diff --git a/docs/images/cli_help/cz_changelog___help.svg b/docs/images/cli_help/cz_changelog___help.svg index 88f12bdbfa..32d9037665 100644 --- a/docs/images/cli_help/cz_changelog___help.svg +++ b/docs/images/cli_help/cz_changelog___help.svg @@ -19,144 +19,144 @@ font-weight: 700; } - .terminal-4187574521-matrix { + .terminal-4119023865-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-4187574521-title { + .terminal-4119023865-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-4187574521-r1 { fill: #c5c8c6 } -.terminal-4187574521-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-4187574521-r3 { fill: #68a0b3;font-weight: bold } -.terminal-4187574521-r4 { fill: #98a84b } + .terminal-4119023865-r1 { fill: #c5c8c6 } +.terminal-4119023865-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-4119023865-r3 { fill: #68a0b3;font-weight: bold } +.terminal-4119023865-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-4187574521-clip-terminal"> + <clipPath id="terminal-4119023865-clip-terminal"> <rect x="0" y="0" width="975.0" height="975.0" /> </clipPath> - <clipPath id="terminal-4187574521-line-0"> + <clipPath id="terminal-4119023865-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-1"> +<clipPath id="terminal-4119023865-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-2"> +<clipPath id="terminal-4119023865-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-3"> +<clipPath id="terminal-4119023865-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-4"> +<clipPath id="terminal-4119023865-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-5"> +<clipPath id="terminal-4119023865-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-6"> +<clipPath id="terminal-4119023865-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-7"> +<clipPath id="terminal-4119023865-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-8"> +<clipPath id="terminal-4119023865-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-9"> +<clipPath id="terminal-4119023865-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-10"> +<clipPath id="terminal-4119023865-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-11"> +<clipPath id="terminal-4119023865-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-12"> +<clipPath id="terminal-4119023865-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-13"> +<clipPath id="terminal-4119023865-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-14"> +<clipPath id="terminal-4119023865-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-15"> +<clipPath id="terminal-4119023865-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-16"> +<clipPath id="terminal-4119023865-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-17"> +<clipPath id="terminal-4119023865-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-18"> +<clipPath id="terminal-4119023865-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-19"> +<clipPath id="terminal-4119023865-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-20"> +<clipPath id="terminal-4119023865-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-21"> +<clipPath id="terminal-4119023865-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-22"> +<clipPath id="terminal-4119023865-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-23"> +<clipPath id="terminal-4119023865-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-24"> +<clipPath id="terminal-4119023865-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-25"> +<clipPath id="terminal-4119023865-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-26"> +<clipPath id="terminal-4119023865-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-27"> +<clipPath id="terminal-4119023865-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-28"> +<clipPath id="terminal-4119023865-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-29"> +<clipPath id="terminal-4119023865-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-30"> +<clipPath id="terminal-4119023865-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-31"> +<clipPath id="terminal-4119023865-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-32"> +<clipPath id="terminal-4119023865-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-33"> +<clipPath id="terminal-4119023865-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-34"> +<clipPath id="terminal-4119023865-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-35"> +<clipPath id="terminal-4119023865-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-36"> +<clipPath id="terminal-4119023865-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-37"> +<clipPath id="terminal-4119023865-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4187574521-line-38"> +<clipPath id="terminal-4119023865-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> </defs> @@ -168,49 +168,49 @@ <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-4187574521-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-4119023865-clip-terminal)"> - <g class="terminal-4187574521-matrix"> - <text class="terminal-4187574521-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-4187574521-line-0)">$ cz changelog --help</text><text class="terminal-4187574521-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-4187574521-line-0)"> -</text><text class="terminal-4187574521-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-4187574521-line-1)">usage: cz changelog </text><text class="terminal-4187574521-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)">[</text><text class="terminal-4187574521-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-4187574521-line-1)">-h</text><text class="terminal-4187574521-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)">]</text><text class="terminal-4187574521-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)">[</text><text class="terminal-4187574521-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-4187574521-line-1)">--dry-run</text><text class="terminal-4187574521-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)">]</text><text class="terminal-4187574521-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)">[</text><text class="terminal-4187574521-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-4187574521-line-1)">--file-name FILE_NAME</text><text class="terminal-4187574521-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)">]</text><text class="terminal-4187574521-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-1)"> -</text><text class="terminal-4187574521-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-2)">[</text><text class="terminal-4187574521-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-4187574521-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-4187574521-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-2)">]</text><text class="terminal-4187574521-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-2)">[</text><text class="terminal-4187574521-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-4187574521-line-2)">--incremental</text><text class="terminal-4187574521-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-2)">]</text><text class="terminal-4187574521-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-2)"> -</text><text class="terminal-4187574521-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-3)">[</text><text class="terminal-4187574521-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-4187574521-line-3)">--start-rev START_REV</text><text class="terminal-4187574521-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-3)">]</text><text class="terminal-4187574521-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-3)">[</text><text class="terminal-4187574521-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-4187574521-line-3)">--merge-prerelease</text><text class="terminal-4187574521-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-3)">]</text><text class="terminal-4187574521-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-3)"> -</text><text class="terminal-4187574521-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-4)">[</text><text class="terminal-4187574521-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-4187574521-line-4)">--version-scheme </text><text class="terminal-4187574521-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-4)">{</text><text class="terminal-4187574521-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-4187574521-line-4)">semver,pep440,semver2</text><text class="terminal-4187574521-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-4)">}</text><text class="terminal-4187574521-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-4)">]</text><text class="terminal-4187574521-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-4)"> -</text><text class="terminal-4187574521-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-4187574521-line-5)">[</text><text class="terminal-4187574521-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-4187574521-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-4187574521-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-4187574521-line-5)">]</text><text class="terminal-4187574521-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-4187574521-line-5)">[</text><text class="terminal-4187574521-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-4187574521-line-5)">--template TEMPLATE</text><text class="terminal-4187574521-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-4187574521-line-5)">]</text><text class="terminal-4187574521-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-4187574521-line-5)"> -</text><text class="terminal-4187574521-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-6)">[</text><text class="terminal-4187574521-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-4187574521-line-6)">--extra EXTRA</text><text class="terminal-4187574521-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-6)">]</text><text class="terminal-4187574521-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-6)"> -</text><text class="terminal-4187574521-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-7)"> -</text><text class="terminal-4187574521-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-8)"> -</text><text class="terminal-4187574521-r1" x="0" y="239.6" textLength="256.2" clip-path="url(#terminal-4187574521-line-9)">positional arguments:</text><text class="terminal-4187574521-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-9)"> -</text><text class="terminal-4187574521-r1" x="0" y="264" textLength="805.2" clip-path="url(#terminal-4187574521-line-10)">  rev_range             generates changelog for the given version </text><text class="terminal-4187574521-r2" x="805.2" y="264" textLength="12.2" clip-path="url(#terminal-4187574521-line-10)">(</text><text class="terminal-4187574521-r1" x="817.4" y="264" textLength="61" clip-path="url(#terminal-4187574521-line-10)">e.g: </text><text class="terminal-4187574521-r3" x="878.4" y="264" textLength="36.6" clip-path="url(#terminal-4187574521-line-10)">1.5</text><text class="terminal-4187574521-r1" x="915" y="264" textLength="12.2" clip-path="url(#terminal-4187574521-line-10)">.</text><text class="terminal-4187574521-r3" x="927.2" y="264" textLength="12.2" clip-path="url(#terminal-4187574521-line-10)">3</text><text class="terminal-4187574521-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-4187574521-line-10)">)</text><text class="terminal-4187574521-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-4187574521-line-10)"> -</text><text class="terminal-4187574521-r1" x="0" y="288.4" textLength="500.2" clip-path="url(#terminal-4187574521-line-11)">                        or version range </text><text class="terminal-4187574521-r2" x="500.2" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)">(</text><text class="terminal-4187574521-r1" x="512.4" y="288.4" textLength="61" clip-path="url(#terminal-4187574521-line-11)">e.g: </text><text class="terminal-4187574521-r3" x="573.4" y="288.4" textLength="36.6" clip-path="url(#terminal-4187574521-line-11)">1.5</text><text class="terminal-4187574521-r1" x="610" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)">.</text><text class="terminal-4187574521-r3" x="622.2" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)">3</text><text class="terminal-4187574521-r1" x="634.4" y="288.4" textLength="24.4" clip-path="url(#terminal-4187574521-line-11)">..</text><text class="terminal-4187574521-r3" x="658.8" y="288.4" textLength="36.6" clip-path="url(#terminal-4187574521-line-11)">1.7</text><text class="terminal-4187574521-r1" x="695.4" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)">.</text><text class="terminal-4187574521-r3" x="707.6" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)">9</text><text class="terminal-4187574521-r2" x="719.8" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)">)</text><text class="terminal-4187574521-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-11)"> -</text><text class="terminal-4187574521-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-12)"> -</text><text class="terminal-4187574521-r1" x="0" y="337.2" textLength="97.6" clip-path="url(#terminal-4187574521-line-13)">options:</text><text class="terminal-4187574521-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-13)"> -</text><text class="terminal-4187574521-r1" x="0" y="361.6" textLength="671" clip-path="url(#terminal-4187574521-line-14)">  -h, --help            show this help message and exit</text><text class="terminal-4187574521-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-14)"> -</text><text class="terminal-4187574521-r1" x="0" y="386" textLength="585.6" clip-path="url(#terminal-4187574521-line-15)">  --dry-run             show changelog to stdout</text><text class="terminal-4187574521-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-4187574521-line-15)"> -</text><text class="terminal-4187574521-r1" x="0" y="410.4" textLength="280.6" clip-path="url(#terminal-4187574521-line-16)">  --file-name FILE_NAME</text><text class="terminal-4187574521-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-16)"> -</text><text class="terminal-4187574521-r1" x="0" y="434.8" textLength="573.4" clip-path="url(#terminal-4187574521-line-17)">                        file name of changelog </text><text class="terminal-4187574521-r2" x="573.4" y="434.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-17)">(</text><text class="terminal-4187574521-r1" x="585.6" y="434.8" textLength="109.8" clip-path="url(#terminal-4187574521-line-17)">default: </text><text class="terminal-4187574521-r4" x="695.4" y="434.8" textLength="170.8" clip-path="url(#terminal-4187574521-line-17)">'CHANGELOG.md'</text><text class="terminal-4187574521-r2" x="866.2" y="434.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-17)">)</text><text class="terminal-4187574521-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-17)"> -</text><text class="terminal-4187574521-r1" x="0" y="459.2" textLength="500.2" clip-path="url(#terminal-4187574521-line-18)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-4187574521-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-18)"> -</text><text class="terminal-4187574521-r1" x="0" y="483.6" textLength="707.6" clip-path="url(#terminal-4187574521-line-19)">                        set the value for the new version </text><text class="terminal-4187574521-r2" x="707.6" y="483.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-19)">(</text><text class="terminal-4187574521-r1" x="719.8" y="483.6" textLength="207.4" clip-path="url(#terminal-4187574521-line-19)">use the tag value</text><text class="terminal-4187574521-r2" x="927.2" y="483.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-19)">)</text><text class="terminal-4187574521-r1" x="939.4" y="483.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-19)">,</text><text class="terminal-4187574521-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-19)"> -</text><text class="terminal-4187574521-r1" x="0" y="508" textLength="622.2" clip-path="url(#terminal-4187574521-line-20)">                        instead of using unreleased</text><text class="terminal-4187574521-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-4187574521-line-20)"> -</text><text class="terminal-4187574521-r1" x="0" y="532.4" textLength="939.4" clip-path="url(#terminal-4187574521-line-21)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-4187574521-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-21)"> -</text><text class="terminal-4187574521-r1" x="0" y="556.8" textLength="817.4" clip-path="url(#terminal-4187574521-line-22)">                        if the changelog has been manually modified</text><text class="terminal-4187574521-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-22)"> -</text><text class="terminal-4187574521-r1" x="0" y="581.2" textLength="280.6" clip-path="url(#terminal-4187574521-line-23)">  --start-rev START_REV</text><text class="terminal-4187574521-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-23)"> -</text><text class="terminal-4187574521-r1" x="0" y="605.6" textLength="866.2" clip-path="url(#terminal-4187574521-line-24)">                        start rev of the changelog. If not set, it will</text><text class="terminal-4187574521-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-24)"> -</text><text class="terminal-4187574521-r1" x="0" y="630" textLength="695.4" clip-path="url(#terminal-4187574521-line-25)">                        generate changelog from the start</text><text class="terminal-4187574521-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-4187574521-line-25)"> -</text><text class="terminal-4187574521-r1" x="0" y="654.4" textLength="915" clip-path="url(#terminal-4187574521-line-26)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-4187574521-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-26)"> -</text><text class="terminal-4187574521-r1" x="0" y="678.8" textLength="951.6" clip-path="url(#terminal-4187574521-line-27)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-4187574521-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-27)"> -</text><text class="terminal-4187574521-r1" x="0" y="703.2" textLength="451.4" clip-path="url(#terminal-4187574521-line-28)">                        the changelog</text><text class="terminal-4187574521-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-28)"> -</text><text class="terminal-4187574521-r1" x="0" y="727.6" textLength="231.8" clip-path="url(#terminal-4187574521-line-29)">  --version-scheme </text><text class="terminal-4187574521-r2" x="231.8" y="727.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-29)">{</text><text class="terminal-4187574521-r1" x="244" y="727.6" textLength="256.2" clip-path="url(#terminal-4187574521-line-29)">semver,pep440,semver2</text><text class="terminal-4187574521-r2" x="500.2" y="727.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-29)">}</text><text class="terminal-4187574521-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-29)"> -</text><text class="terminal-4187574521-r1" x="0" y="752" textLength="549" clip-path="url(#terminal-4187574521-line-30)">                        choose version scheme</text><text class="terminal-4187574521-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-4187574521-line-30)"> -</text><text class="terminal-4187574521-r1" x="0" y="776.4" textLength="427" clip-path="url(#terminal-4187574521-line-31)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-4187574521-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-31)"> -</text><text class="terminal-4187574521-r1" x="0" y="800.8" textLength="927.2" clip-path="url(#terminal-4187574521-line-32)">                        Export the changelog template into this file instead</text><text class="terminal-4187574521-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-32)"> -</text><text class="terminal-4187574521-r1" x="0" y="825.2" textLength="475.8" clip-path="url(#terminal-4187574521-line-33)">                        of rendering it</text><text class="terminal-4187574521-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-33)"> -</text><text class="terminal-4187574521-r1" x="0" y="849.6" textLength="414.8" clip-path="url(#terminal-4187574521-line-34)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-4187574521-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-34)"> -</text><text class="terminal-4187574521-r1" x="0" y="874" textLength="646.6" clip-path="url(#terminal-4187574521-line-35)">                        changelog template file name </text><text class="terminal-4187574521-r2" x="646.6" y="874" textLength="12.2" clip-path="url(#terminal-4187574521-line-35)">(</text><text class="terminal-4187574521-r1" x="658.8" y="874" textLength="280.6" clip-path="url(#terminal-4187574521-line-35)">relative to the current</text><text class="terminal-4187574521-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-4187574521-line-35)"> -</text><text class="terminal-4187574521-r1" x="0" y="898.4" textLength="500.2" clip-path="url(#terminal-4187574521-line-36)">                        working directory</text><text class="terminal-4187574521-r2" x="500.2" y="898.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-36)">)</text><text class="terminal-4187574521-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-4187574521-line-36)"> -</text><text class="terminal-4187574521-r1" x="0" y="922.8" textLength="305" clip-path="url(#terminal-4187574521-line-37)">  --extra EXTRA, -e EXTRA</text><text class="terminal-4187574521-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-4187574521-line-37)"> -</text><text class="terminal-4187574521-r1" x="0" y="947.2" textLength="622.2" clip-path="url(#terminal-4187574521-line-38)">                        a changelog extra variable </text><text class="terminal-4187574521-r2" x="622.2" y="947.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-38)">(</text><text class="terminal-4187574521-r1" x="634.4" y="947.2" textLength="146.4" clip-path="url(#terminal-4187574521-line-38)">in the form </text><text class="terminal-4187574521-r4" x="780.8" y="947.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-38)">'</text><text class="terminal-4187574521-r4" x="793" y="947.2" textLength="36.6" clip-path="url(#terminal-4187574521-line-38)">key</text><text class="terminal-4187574521-r4" x="829.6" y="947.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-38)">=</text><text class="terminal-4187574521-r4" x="841.8" y="947.2" textLength="61" clip-path="url(#terminal-4187574521-line-38)">value</text><text class="terminal-4187574521-r4" x="902.8" y="947.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-38)">'</text><text class="terminal-4187574521-r2" x="915" y="947.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-38)">)</text><text class="terminal-4187574521-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-4187574521-line-38)"> -</text><text class="terminal-4187574521-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-4187574521-line-39)"> + <g class="terminal-4119023865-matrix"> + <text class="terminal-4119023865-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-4119023865-line-0)">$ cz changelog --help</text><text class="terminal-4119023865-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-4119023865-line-0)"> +</text><text class="terminal-4119023865-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-4119023865-line-1)">usage: cz changelog </text><text class="terminal-4119023865-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)">[</text><text class="terminal-4119023865-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-4119023865-line-1)">-h</text><text class="terminal-4119023865-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)">]</text><text class="terminal-4119023865-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)">[</text><text class="terminal-4119023865-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-4119023865-line-1)">--dry-run</text><text class="terminal-4119023865-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)">]</text><text class="terminal-4119023865-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)">[</text><text class="terminal-4119023865-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-4119023865-line-1)">--file-name FILE_NAME</text><text class="terminal-4119023865-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)">]</text><text class="terminal-4119023865-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)"> +</text><text class="terminal-4119023865-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-2)">[</text><text class="terminal-4119023865-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-4119023865-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-4119023865-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-2)">]</text><text class="terminal-4119023865-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-2)">[</text><text class="terminal-4119023865-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-4119023865-line-2)">--incremental</text><text class="terminal-4119023865-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-2)">]</text><text class="terminal-4119023865-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-2)"> +</text><text class="terminal-4119023865-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-3)">[</text><text class="terminal-4119023865-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-4119023865-line-3)">--start-rev START_REV</text><text class="terminal-4119023865-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-3)">]</text><text class="terminal-4119023865-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-3)">[</text><text class="terminal-4119023865-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-4119023865-line-3)">--merge-prerelease</text><text class="terminal-4119023865-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-3)">]</text><text class="terminal-4119023865-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-3)"> +</text><text class="terminal-4119023865-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-4)">[</text><text class="terminal-4119023865-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-4119023865-line-4)">--version-scheme </text><text class="terminal-4119023865-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-4)">{</text><text class="terminal-4119023865-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-4119023865-line-4)">semver2,pep440,semver</text><text class="terminal-4119023865-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-4)">}</text><text class="terminal-4119023865-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-4)">]</text><text class="terminal-4119023865-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-4)"> +</text><text class="terminal-4119023865-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-4119023865-line-5)">[</text><text class="terminal-4119023865-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-4119023865-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-4119023865-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-4119023865-line-5)">]</text><text class="terminal-4119023865-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-4119023865-line-5)">[</text><text class="terminal-4119023865-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-4119023865-line-5)">--template TEMPLATE</text><text class="terminal-4119023865-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-4119023865-line-5)">]</text><text class="terminal-4119023865-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-4119023865-line-5)"> +</text><text class="terminal-4119023865-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-6)">[</text><text class="terminal-4119023865-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-4119023865-line-6)">--extra EXTRA</text><text class="terminal-4119023865-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-6)">]</text><text class="terminal-4119023865-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-6)"> +</text><text class="terminal-4119023865-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-7)"> +</text><text class="terminal-4119023865-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-8)"> +</text><text class="terminal-4119023865-r1" x="0" y="239.6" textLength="256.2" clip-path="url(#terminal-4119023865-line-9)">positional arguments:</text><text class="terminal-4119023865-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-9)"> +</text><text class="terminal-4119023865-r1" x="0" y="264" textLength="805.2" clip-path="url(#terminal-4119023865-line-10)">  rev_range             generates changelog for the given version </text><text class="terminal-4119023865-r2" x="805.2" y="264" textLength="12.2" clip-path="url(#terminal-4119023865-line-10)">(</text><text class="terminal-4119023865-r1" x="817.4" y="264" textLength="61" clip-path="url(#terminal-4119023865-line-10)">e.g: </text><text class="terminal-4119023865-r3" x="878.4" y="264" textLength="36.6" clip-path="url(#terminal-4119023865-line-10)">1.5</text><text class="terminal-4119023865-r1" x="915" y="264" textLength="12.2" clip-path="url(#terminal-4119023865-line-10)">.</text><text class="terminal-4119023865-r3" x="927.2" y="264" textLength="12.2" clip-path="url(#terminal-4119023865-line-10)">3</text><text class="terminal-4119023865-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-4119023865-line-10)">)</text><text class="terminal-4119023865-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-4119023865-line-10)"> +</text><text class="terminal-4119023865-r1" x="0" y="288.4" textLength="500.2" clip-path="url(#terminal-4119023865-line-11)">                        or version range </text><text class="terminal-4119023865-r2" x="500.2" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)">(</text><text class="terminal-4119023865-r1" x="512.4" y="288.4" textLength="61" clip-path="url(#terminal-4119023865-line-11)">e.g: </text><text class="terminal-4119023865-r3" x="573.4" y="288.4" textLength="36.6" clip-path="url(#terminal-4119023865-line-11)">1.5</text><text class="terminal-4119023865-r1" x="610" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)">.</text><text class="terminal-4119023865-r3" x="622.2" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)">3</text><text class="terminal-4119023865-r1" x="634.4" y="288.4" textLength="24.4" clip-path="url(#terminal-4119023865-line-11)">..</text><text class="terminal-4119023865-r3" x="658.8" y="288.4" textLength="36.6" clip-path="url(#terminal-4119023865-line-11)">1.7</text><text class="terminal-4119023865-r1" x="695.4" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)">.</text><text class="terminal-4119023865-r3" x="707.6" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)">9</text><text class="terminal-4119023865-r2" x="719.8" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)">)</text><text class="terminal-4119023865-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)"> +</text><text class="terminal-4119023865-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-12)"> +</text><text class="terminal-4119023865-r1" x="0" y="337.2" textLength="97.6" clip-path="url(#terminal-4119023865-line-13)">options:</text><text class="terminal-4119023865-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-13)"> +</text><text class="terminal-4119023865-r1" x="0" y="361.6" textLength="671" clip-path="url(#terminal-4119023865-line-14)">  -h, --help            show this help message and exit</text><text class="terminal-4119023865-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-14)"> +</text><text class="terminal-4119023865-r1" x="0" y="386" textLength="585.6" clip-path="url(#terminal-4119023865-line-15)">  --dry-run             show changelog to stdout</text><text class="terminal-4119023865-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-4119023865-line-15)"> +</text><text class="terminal-4119023865-r1" x="0" y="410.4" textLength="280.6" clip-path="url(#terminal-4119023865-line-16)">  --file-name FILE_NAME</text><text class="terminal-4119023865-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-16)"> +</text><text class="terminal-4119023865-r1" x="0" y="434.8" textLength="573.4" clip-path="url(#terminal-4119023865-line-17)">                        file name of changelog </text><text class="terminal-4119023865-r2" x="573.4" y="434.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-17)">(</text><text class="terminal-4119023865-r1" x="585.6" y="434.8" textLength="109.8" clip-path="url(#terminal-4119023865-line-17)">default: </text><text class="terminal-4119023865-r4" x="695.4" y="434.8" textLength="170.8" clip-path="url(#terminal-4119023865-line-17)">'CHANGELOG.md'</text><text class="terminal-4119023865-r2" x="866.2" y="434.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-17)">)</text><text class="terminal-4119023865-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-17)"> +</text><text class="terminal-4119023865-r1" x="0" y="459.2" textLength="500.2" clip-path="url(#terminal-4119023865-line-18)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-4119023865-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-18)"> +</text><text class="terminal-4119023865-r1" x="0" y="483.6" textLength="707.6" clip-path="url(#terminal-4119023865-line-19)">                        set the value for the new version </text><text class="terminal-4119023865-r2" x="707.6" y="483.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-19)">(</text><text class="terminal-4119023865-r1" x="719.8" y="483.6" textLength="207.4" clip-path="url(#terminal-4119023865-line-19)">use the tag value</text><text class="terminal-4119023865-r2" x="927.2" y="483.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-19)">)</text><text class="terminal-4119023865-r1" x="939.4" y="483.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-19)">,</text><text class="terminal-4119023865-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-19)"> +</text><text class="terminal-4119023865-r1" x="0" y="508" textLength="622.2" clip-path="url(#terminal-4119023865-line-20)">                        instead of using unreleased</text><text class="terminal-4119023865-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-4119023865-line-20)"> +</text><text class="terminal-4119023865-r1" x="0" y="532.4" textLength="939.4" clip-path="url(#terminal-4119023865-line-21)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-4119023865-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-21)"> +</text><text class="terminal-4119023865-r1" x="0" y="556.8" textLength="817.4" clip-path="url(#terminal-4119023865-line-22)">                        if the changelog has been manually modified</text><text class="terminal-4119023865-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-22)"> +</text><text class="terminal-4119023865-r1" x="0" y="581.2" textLength="280.6" clip-path="url(#terminal-4119023865-line-23)">  --start-rev START_REV</text><text class="terminal-4119023865-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-23)"> +</text><text class="terminal-4119023865-r1" x="0" y="605.6" textLength="866.2" clip-path="url(#terminal-4119023865-line-24)">                        start rev of the changelog. If not set, it will</text><text class="terminal-4119023865-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-24)"> +</text><text class="terminal-4119023865-r1" x="0" y="630" textLength="695.4" clip-path="url(#terminal-4119023865-line-25)">                        generate changelog from the start</text><text class="terminal-4119023865-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-4119023865-line-25)"> +</text><text class="terminal-4119023865-r1" x="0" y="654.4" textLength="915" clip-path="url(#terminal-4119023865-line-26)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-4119023865-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-26)"> +</text><text class="terminal-4119023865-r1" x="0" y="678.8" textLength="951.6" clip-path="url(#terminal-4119023865-line-27)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-4119023865-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-27)"> +</text><text class="terminal-4119023865-r1" x="0" y="703.2" textLength="451.4" clip-path="url(#terminal-4119023865-line-28)">                        the changelog</text><text class="terminal-4119023865-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-28)"> +</text><text class="terminal-4119023865-r1" x="0" y="727.6" textLength="231.8" clip-path="url(#terminal-4119023865-line-29)">  --version-scheme </text><text class="terminal-4119023865-r2" x="231.8" y="727.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-29)">{</text><text class="terminal-4119023865-r1" x="244" y="727.6" textLength="256.2" clip-path="url(#terminal-4119023865-line-29)">semver2,pep440,semver</text><text class="terminal-4119023865-r2" x="500.2" y="727.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-29)">}</text><text class="terminal-4119023865-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-29)"> +</text><text class="terminal-4119023865-r1" x="0" y="752" textLength="549" clip-path="url(#terminal-4119023865-line-30)">                        choose version scheme</text><text class="terminal-4119023865-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-4119023865-line-30)"> +</text><text class="terminal-4119023865-r1" x="0" y="776.4" textLength="427" clip-path="url(#terminal-4119023865-line-31)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-4119023865-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-31)"> +</text><text class="terminal-4119023865-r1" x="0" y="800.8" textLength="927.2" clip-path="url(#terminal-4119023865-line-32)">                        Export the changelog template into this file instead</text><text class="terminal-4119023865-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-32)"> +</text><text class="terminal-4119023865-r1" x="0" y="825.2" textLength="475.8" clip-path="url(#terminal-4119023865-line-33)">                        of rendering it</text><text class="terminal-4119023865-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-33)"> +</text><text class="terminal-4119023865-r1" x="0" y="849.6" textLength="414.8" clip-path="url(#terminal-4119023865-line-34)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-4119023865-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-34)"> +</text><text class="terminal-4119023865-r1" x="0" y="874" textLength="646.6" clip-path="url(#terminal-4119023865-line-35)">                        changelog template file name </text><text class="terminal-4119023865-r2" x="646.6" y="874" textLength="12.2" clip-path="url(#terminal-4119023865-line-35)">(</text><text class="terminal-4119023865-r1" x="658.8" y="874" textLength="280.6" clip-path="url(#terminal-4119023865-line-35)">relative to the current</text><text class="terminal-4119023865-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-4119023865-line-35)"> +</text><text class="terminal-4119023865-r1" x="0" y="898.4" textLength="500.2" clip-path="url(#terminal-4119023865-line-36)">                        working directory</text><text class="terminal-4119023865-r2" x="500.2" y="898.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-36)">)</text><text class="terminal-4119023865-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-36)"> +</text><text class="terminal-4119023865-r1" x="0" y="922.8" textLength="305" clip-path="url(#terminal-4119023865-line-37)">  --extra EXTRA, -e EXTRA</text><text class="terminal-4119023865-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-37)"> +</text><text class="terminal-4119023865-r1" x="0" y="947.2" textLength="622.2" clip-path="url(#terminal-4119023865-line-38)">                        a changelog extra variable </text><text class="terminal-4119023865-r2" x="622.2" y="947.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-38)">(</text><text class="terminal-4119023865-r1" x="634.4" y="947.2" textLength="146.4" clip-path="url(#terminal-4119023865-line-38)">in the form </text><text class="terminal-4119023865-r4" x="780.8" y="947.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-38)">'</text><text class="terminal-4119023865-r4" x="793" y="947.2" textLength="36.6" clip-path="url(#terminal-4119023865-line-38)">key</text><text class="terminal-4119023865-r4" x="829.6" y="947.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-38)">=</text><text class="terminal-4119023865-r4" x="841.8" y="947.2" textLength="61" clip-path="url(#terminal-4119023865-line-38)">value</text><text class="terminal-4119023865-r4" x="902.8" y="947.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-38)">'</text><text class="terminal-4119023865-r2" x="915" y="947.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-38)">)</text><text class="terminal-4119023865-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-38)"> +</text><text class="terminal-4119023865-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-39)"> </text> </g> </g> From bd4755fe39ee98b8c0b4e54683451ec22db05c46 Mon Sep 17 00:00:00 2001 From: Marcos Martins <contato@marcosmartins.me> Date: Thu, 16 May 2024 15:37:33 -0300 Subject: [PATCH 263/685] fix(cli/commands): add description for subcommands --- commitizen/cli.py | 21 ++++- tests/commands/test_bump_command.py | 12 +++ ...shows_description_when_use_help_option.txt | 79 +++++++++++++++++++ tests/commands/test_changelog_command.py | 12 +++ ...shows_description_when_use_help_option.txt | 40 ++++++++++ tests/commands/test_check_command.py | 12 +++ ...shows_description_when_use_help_option.txt | 22 ++++++ tests/commands/test_commit_command.py | 15 +++- ...shows_description_when_use_help_option.txt | 20 +++++ tests/commands/test_example_command.py | 17 ++++ ...shows_description_when_use_help_option.txt | 6 ++ tests/commands/test_info_command.py | 17 ++++ ...shows_description_when_use_help_option.txt | 6 ++ tests/commands/test_init_command.py | 15 +++- ...shows_description_when_use_help_option.txt | 6 ++ tests/commands/test_ls_command.py | 17 ++++ ...shows_description_when_use_help_option.txt | 6 ++ tests/commands/test_schema_command.py | 17 ++++ ...shows_description_when_use_help_option.txt | 6 ++ tests/commands/test_version_command.py | 14 +++- ...shows_description_when_use_help_option.txt | 12 +++ 21 files changed, 368 insertions(+), 4 deletions(-) create mode 100644 tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt create mode 100644 tests/commands/test_changelog_command/test_changelog_command_shows_description_when_use_help_option.txt create mode 100644 tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt create mode 100644 tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt create mode 100644 tests/commands/test_example_command.py create mode 100644 tests/commands/test_example_command/test_example_command_shows_description_when_use_help_option.txt create mode 100644 tests/commands/test_info_command.py create mode 100644 tests/commands/test_info_command/test_info_command_shows_description_when_use_help_option.txt create mode 100644 tests/commands/test_init_command/test_init_command_shows_description_when_use_help_option.txt create mode 100644 tests/commands/test_ls_command.py create mode 100644 tests/commands/test_ls_command/test_ls_command_shows_description_when_use_help_option.txt create mode 100644 tests/commands/test_schema_command.py create mode 100644 tests/commands/test_schema_command/test_schema_command_shows_description_when_use_help_option.txt create mode 100644 tests/commands/test_version_command/test_version_command_shows_description_when_use_help_option.txt diff --git a/commitizen/cli.py b/commitizen/cli.py index 8b2d008e0e..1d1ebe1f68 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -114,11 +114,13 @@ def __call__( "commands": [ { "name": ["init"], + "description": "init commitizen configuration", "help": "init commitizen configuration", "func": commands.Init, }, { "name": ["commit", "c"], + "description": "create new commit", "help": "create new commit", "func": commands.Commit, "arguments": [ @@ -164,22 +166,31 @@ def __call__( }, { "name": "ls", + "description": "show available commitizens", "help": "show available commitizens", "func": commands.ListCz, }, { "name": "example", + "description": "show commit example", "help": "show commit example", "func": commands.Example, }, { "name": "info", + "description": "show information about the cz", "help": "show information about the cz", "func": commands.Info, }, - {"name": "schema", "help": "show commit schema", "func": commands.Schema}, + { + "name": "schema", + "description": "show commit schema", + "help": "show commit schema", + "func": commands.Schema, + }, { "name": "bump", + "description": "bump semantic version based on the git log", "help": "bump semantic version based on the git log", "func": commands.Bump, "arguments": [ @@ -346,6 +357,9 @@ def __call__( }, { "name": ["changelog", "ch"], + "description": ( + "generate changelog (note that it will overwrite existing file)" + ), "help": ( "generate changelog (note that it will overwrite existing file)" ), @@ -416,6 +430,7 @@ def __call__( }, { "name": ["check"], + "description": "validates that a commit message matches the commitizen schema", "help": "validates that a commit message matches the commitizen schema", "func": commands.Check, "arguments": [ @@ -455,6 +470,10 @@ def __call__( }, { "name": ["version"], + "description": ( + "get the version of the installed commitizen or the current project" + " (default: installed commitizen)" + ), "help": ( "get the version of the installed commitizen or the current project" " (default: installed commitizen)" diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 84faf9ee82..ad7f4db64e 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -1449,3 +1449,15 @@ def test_bump_changelog_contains_increment_only(mocker, tmp_commitizen_project, assert "3.0.0" in out assert "2.0.0" not in out + + +def test_bump_command_shows_description_when_use_help_option( + mocker: MockFixture, capsys, file_regression +): + testargs = ["cz", "bump", "--help"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(SystemExit): + cli.main() + + out, _ = capsys.readouterr() + file_regression.check(out, extension=".txt") diff --git a/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt b/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt new file mode 100644 index 0000000000..de76f2efcf --- /dev/null +++ b/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt @@ -0,0 +1,79 @@ +usage: cz bump [-h] [--dry-run] [--files-only] [--local-version] [--changelog] + [--no-verify] [--yes] [--tag-format TAG_FORMAT] + [--bump-message BUMP_MESSAGE] [--prerelease {alpha,beta,rc}] + [--devrelease DEVRELEASE] [--increment {MAJOR,MINOR,PATCH}] + [--increment-mode {linear,exact}] [--check-consistency] + [--annotated-tag] + [--annotated-tag-message ANNOTATED_TAG_MESSAGE] [--gpg-sign] + [--changelog-to-stdout] [--git-output-to-stderr] [--retry] + [--major-version-zero] [--template TEMPLATE] [--extra EXTRA] + [--file-name FILE_NAME] [--prerelease-offset PRERELEASE_OFFSET] + [--version-scheme {pep440,semver,semver2}] + [--version-type {pep440,semver,semver2}] + [--build-metadata BUILD_METADATA] + [MANUAL_VERSION] + +bump semantic version based on the git log + +positional arguments: + MANUAL_VERSION bump to the given version (e.g: 1.5.3) + +options: + -h, --help show this help message and exit + --dry-run show output to stdout, no commit, no modified files + --files-only bump version in the files from the config + --local-version bump only the local version portion + --changelog, -ch generate the changelog for the newest version + --no-verify this option bypasses the pre-commit and commit-msg + hooks + --yes accept automatically questions done + --tag-format TAG_FORMAT + the format used to tag the commit and read it, use it + in existing projects, wrap around simple quotes + --bump-message BUMP_MESSAGE + template used to create the release commit, useful + when working with CI + --prerelease {alpha,beta,rc}, -pr {alpha,beta,rc} + choose type of prerelease + --devrelease DEVRELEASE, -d DEVRELEASE + specify non-negative integer for dev. release + --increment {MAJOR,MINOR,PATCH} + manually specify the desired increment + --increment-mode {linear,exact} + set the method by which the new version is chosen. + 'linear' (default) guesses the next version based on + typical linear version progression, such that bumping + of a pre-release with lower precedence than the + current pre-release phase maintains the current phase + of higher precedence. 'exact' applies the changes that + have been specified (or determined from the commit + log) without interpretation, such that the increment + and pre-release are always honored + --check-consistency, -cc + check consistency among versions defined in commitizen + configuration and version_files + --annotated-tag, -at create annotated tag instead of lightweight one + --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE + create annotated tag message + --gpg-sign, -s sign tag instead of lightweight one + --changelog-to-stdout + Output changelog to the stdout + --git-output-to-stderr + Redirect git output to stderr + --retry retry commit if it fails the 1st time + --major-version-zero keep major version at zero, even for breaking changes + --template TEMPLATE, -t TEMPLATE + changelog template file name (relative to the current + working directory) + --extra EXTRA, -e EXTRA + a changelog extra variable (in the form 'key=value') + --file-name FILE_NAME + file name of changelog (default: 'CHANGELOG.md') + --prerelease-offset PRERELEASE_OFFSET + start pre-releases with this offset + --version-scheme {pep440,semver,semver2} + choose version scheme + --version-type {pep440,semver,semver2} + Deprecated, use --version-scheme + --build-metadata BUILD_METADATA + Add additional build-metadata to the version-number diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index 4596724158..6f8919d71f 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -1637,3 +1637,15 @@ def test_export_changelog_template_from_plugin( assert target.exists() assert target.read_text() == tpl + + +def test_changelog_command_shows_description_when_use_help_option( + mocker: MockFixture, capsys, file_regression +): + testargs = ["cz", "changelog", "--help"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(SystemExit): + cli.main() + + out, _ = capsys.readouterr() + file_regression.check(out, extension=".txt") diff --git a/tests/commands/test_changelog_command/test_changelog_command_shows_description_when_use_help_option.txt b/tests/commands/test_changelog_command/test_changelog_command_shows_description_when_use_help_option.txt new file mode 100644 index 0000000000..dae438ca24 --- /dev/null +++ b/tests/commands/test_changelog_command/test_changelog_command_shows_description_when_use_help_option.txt @@ -0,0 +1,40 @@ +usage: cz changelog [-h] [--dry-run] [--file-name FILE_NAME] + [--unreleased-version UNRELEASED_VERSION] [--incremental] + [--start-rev START_REV] [--merge-prerelease] + [--version-scheme {pep440,semver,semver2}] + [--export-template EXPORT_TEMPLATE] [--template TEMPLATE] + [--extra EXTRA] + [rev_range] + +generate changelog (note that it will overwrite existing file) + +positional arguments: + rev_range generates changelog for the given version (e.g: 1.5.3) + or version range (e.g: 1.5.3..1.7.9) + +options: + -h, --help show this help message and exit + --dry-run show changelog to stdout + --file-name FILE_NAME + file name of changelog (default: 'CHANGELOG.md') + --unreleased-version UNRELEASED_VERSION + set the value for the new version (use the tag value), + instead of using unreleased + --incremental generates changelog from last created version, useful + if the changelog has been manually modified + --start-rev START_REV + start rev of the changelog. If not set, it will + generate changelog from the start + --merge-prerelease collect all changes from prereleases into next non- + prerelease. If not set, it will include prereleases in + the changelog + --version-scheme {pep440,semver,semver2} + choose version scheme + --export-template EXPORT_TEMPLATE + Export the changelog template into this file instead + of rendering it + --template TEMPLATE, -t TEMPLATE + changelog template file name (relative to the current + working directory) + --extra EXTRA, -e EXTRA + a changelog extra variable (in the form 'key=value') diff --git a/tests/commands/test_check_command.py b/tests/commands/test_check_command.py index e328f8d346..bd65e75b7c 100644 --- a/tests/commands/test_check_command.py +++ b/tests/commands/test_check_command.py @@ -414,3 +414,15 @@ def test_check_conventional_commit_succeed_with_git_diff(mocker, capsys): cli.main() out, _ = capsys.readouterr() assert "Commit validation: successful!" in out + + +def test_check_command_shows_description_when_use_help_option( + mocker: MockFixture, capsys, file_regression +): + testargs = ["cz", "check", "--help"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(SystemExit): + cli.main() + + out, _ = capsys.readouterr() + file_regression.check(out, extension=".txt") diff --git a/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt b/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt new file mode 100644 index 0000000000..56e42388dc --- /dev/null +++ b/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt @@ -0,0 +1,22 @@ +usage: cz check [-h] + [--commit-msg-file COMMIT_MSG_FILE | --rev-range REV_RANGE | -m MESSAGE] + [--allow-abort] [--allowed-prefixes [ALLOWED_PREFIXES ...]] + +validates that a commit message matches the commitizen schema + +options: + -h, --help show this help message and exit + --commit-msg-file COMMIT_MSG_FILE + ask for the name of the temporal file that contains + the commit message. Using it in a git hook script: + MSG_FILE=$1 + --rev-range REV_RANGE + a range of git rev to check. e.g, master..HEAD + -m MESSAGE, --message MESSAGE + commit message that needs to be checked + --allow-abort allow empty commit messages, which typically abort a + commit + --allowed-prefixes [ALLOWED_PREFIXES ...] + allowed commit message prefixes. If the message starts + by one of these prefixes, the message won't be checked + against the regex diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index 0e0a12751a..da54e7b6eb 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -1,10 +1,11 @@ import os +import sys import pytest from pytest_mock import MockFixture from unittest.mock import ANY -from commitizen import cmd, commands +from commitizen import cli, cmd, commands from commitizen.cz.exceptions import CzException from commitizen.cz.utils import get_backup_file_path from commitizen.exceptions import ( @@ -406,3 +407,15 @@ def test_commit_command_with_message_length_limit(config, mocker: MockFixture): with pytest.raises(CommitMessageLengthExceededError): commands.Commit(config, {"message_length_limit": message_length - 1})() + + +def test_commit_command_shows_description_when_use_help_option( + mocker: MockFixture, capsys, file_regression +): + testargs = ["cz", "commit", "--help"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(SystemExit): + cli.main() + + out, _ = capsys.readouterr() + file_regression.check(out, extension=".txt") diff --git a/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt new file mode 100644 index 0000000000..ebdb68446e --- /dev/null +++ b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt @@ -0,0 +1,20 @@ +usage: cz commit [-h] [--retry] [--no-retry] [--dry-run] + [--write-message-to-file FILE_PATH] [-s] [-a] + [-l MESSAGE_LENGTH_LIMIT] + +create new commit + +options: + -h, --help show this help message and exit + --retry retry last commit + --no-retry skip retry if retry_after_failure is set to true + --dry-run show output to stdout, no commit, no modified files + --write-message-to-file FILE_PATH + write message to file before committing (can be + combined with --dry-run) + -s, --signoff sign off the commit + -a, --all Tell the command to automatically stage files that + have been modified and deleted, but new files you have + not told Git about are not affected. + -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT + length limit of the commit message; 0 for no limit diff --git a/tests/commands/test_example_command.py b/tests/commands/test_example_command.py new file mode 100644 index 0000000000..43fdd96f5a --- /dev/null +++ b/tests/commands/test_example_command.py @@ -0,0 +1,17 @@ +import pytest +import sys +from commitizen import cli + +from pytest_mock import MockerFixture + + +def test_example_command_shows_description_when_use_help_option( + mocker: MockerFixture, capsys, file_regression +): + testargs = ["cz", "example", "--help"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(SystemExit): + cli.main() + + out, _ = capsys.readouterr() + file_regression.check(out, extension=".txt") diff --git a/tests/commands/test_example_command/test_example_command_shows_description_when_use_help_option.txt b/tests/commands/test_example_command/test_example_command_shows_description_when_use_help_option.txt new file mode 100644 index 0000000000..b9bf7f84fc --- /dev/null +++ b/tests/commands/test_example_command/test_example_command_shows_description_when_use_help_option.txt @@ -0,0 +1,6 @@ +usage: cz example [-h] + +show commit example + +options: + -h, --help show this help message and exit diff --git a/tests/commands/test_info_command.py b/tests/commands/test_info_command.py new file mode 100644 index 0000000000..4a5f0d4f73 --- /dev/null +++ b/tests/commands/test_info_command.py @@ -0,0 +1,17 @@ +import pytest +import sys +from commitizen import cli + +from pytest_mock import MockerFixture + + +def test_info_command_shows_description_when_use_help_option( + mocker: MockerFixture, capsys, file_regression +): + testargs = ["cz", "info", "--help"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(SystemExit): + cli.main() + + out, _ = capsys.readouterr() + file_regression.check(out, extension=".txt") diff --git a/tests/commands/test_info_command/test_info_command_shows_description_when_use_help_option.txt b/tests/commands/test_info_command/test_info_command_shows_description_when_use_help_option.txt new file mode 100644 index 0000000000..99b1ba8a4a --- /dev/null +++ b/tests/commands/test_info_command/test_info_command_shows_description_when_use_help_option.txt @@ -0,0 +1,6 @@ +usage: cz info [-h] + +show information about the cz + +options: + -h, --help show this help message and exit diff --git a/tests/commands/test_init_command.py b/tests/commands/test_init_command.py index 1814acb135..a3f8a8d739 100644 --- a/tests/commands/test_init_command.py +++ b/tests/commands/test_init_command.py @@ -2,13 +2,14 @@ import json import os +import sys from typing import Any import pytest import yaml from pytest_mock import MockFixture -from commitizen import commands +from commitizen import cli, commands from commitizen.__version__ import __version__ from commitizen.exceptions import InitFailedError, NoAnswersError @@ -251,3 +252,15 @@ def test_pre_commit_exec_failed( with tmpdir.as_cwd(): with pytest.raises(InitFailedError): commands.Init(config)() + + +def test_init_command_shows_description_when_use_help_option( + mocker: MockFixture, capsys, file_regression +): + testargs = ["cz", "init", "--help"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(SystemExit): + cli.main() + + out, _ = capsys.readouterr() + file_regression.check(out, extension=".txt") diff --git a/tests/commands/test_init_command/test_init_command_shows_description_when_use_help_option.txt b/tests/commands/test_init_command/test_init_command_shows_description_when_use_help_option.txt new file mode 100644 index 0000000000..0f72042f88 --- /dev/null +++ b/tests/commands/test_init_command/test_init_command_shows_description_when_use_help_option.txt @@ -0,0 +1,6 @@ +usage: cz init [-h] + +init commitizen configuration + +options: + -h, --help show this help message and exit diff --git a/tests/commands/test_ls_command.py b/tests/commands/test_ls_command.py new file mode 100644 index 0000000000..7fc4620e22 --- /dev/null +++ b/tests/commands/test_ls_command.py @@ -0,0 +1,17 @@ +import pytest +import sys +from commitizen import cli + +from pytest_mock import MockerFixture + + +def test_ls_command_shows_description_when_use_help_option( + mocker: MockerFixture, capsys, file_regression +): + testargs = ["cz", "ls", "--help"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(SystemExit): + cli.main() + + out, _ = capsys.readouterr() + file_regression.check(out, extension=".txt") diff --git a/tests/commands/test_ls_command/test_ls_command_shows_description_when_use_help_option.txt b/tests/commands/test_ls_command/test_ls_command_shows_description_when_use_help_option.txt new file mode 100644 index 0000000000..5fa8fe1f79 --- /dev/null +++ b/tests/commands/test_ls_command/test_ls_command_shows_description_when_use_help_option.txt @@ -0,0 +1,6 @@ +usage: cz ls [-h] + +show available commitizens + +options: + -h, --help show this help message and exit diff --git a/tests/commands/test_schema_command.py b/tests/commands/test_schema_command.py new file mode 100644 index 0000000000..13e6c319bb --- /dev/null +++ b/tests/commands/test_schema_command.py @@ -0,0 +1,17 @@ +import pytest +import sys +from commitizen import cli + +from pytest_mock import MockerFixture + + +def test_schema_command_shows_description_when_use_help_option( + mocker: MockerFixture, capsys, file_regression +): + testargs = ["cz", "schema", "--help"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(SystemExit): + cli.main() + + out, _ = capsys.readouterr() + file_regression.check(out, extension=".txt") diff --git a/tests/commands/test_schema_command/test_schema_command_shows_description_when_use_help_option.txt b/tests/commands/test_schema_command/test_schema_command_shows_description_when_use_help_option.txt new file mode 100644 index 0000000000..6666db4d41 --- /dev/null +++ b/tests/commands/test_schema_command/test_schema_command_shows_description_when_use_help_option.txt @@ -0,0 +1,6 @@ +usage: cz schema [-h] + +show commit schema + +options: + -h, --help show this help message and exit diff --git a/tests/commands/test_version_command.py b/tests/commands/test_version_command.py index 3f9de50d00..0a6109311c 100644 --- a/tests/commands/test_version_command.py +++ b/tests/commands/test_version_command.py @@ -4,7 +4,7 @@ import pytest from pytest_mock import MockerFixture -from commitizen import commands +from commitizen import cli, commands from commitizen.__version__ import __version__ from commitizen.config.base_config import BaseConfig @@ -106,3 +106,15 @@ def test_version_use_version_provider( get_provider.assert_called_once() mock.get_version.assert_called_once() mock.set_version.assert_not_called() + + +def test_version_command_shows_description_when_use_help_option( + mocker: MockerFixture, capsys, file_regression +): + testargs = ["cz", "version", "--help"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(SystemExit): + cli.main() + + out, _ = capsys.readouterr() + file_regression.check(out, extension=".txt") diff --git a/tests/commands/test_version_command/test_version_command_shows_description_when_use_help_option.txt b/tests/commands/test_version_command/test_version_command_shows_description_when_use_help_option.txt new file mode 100644 index 0000000000..c461b10bcd --- /dev/null +++ b/tests/commands/test_version_command/test_version_command_shows_description_when_use_help_option.txt @@ -0,0 +1,12 @@ +usage: cz version [-h] [-r | -p | -c | -v] + +get the version of the installed commitizen or the current project (default: +installed commitizen) + +options: + -h, --help show this help message and exit + -r, --report get system information for reporting bugs + -p, --project get the version of the current project + -c, --commitizen get the version of the installed commitizen + -v, --verbose get the version of both the installed commitizen and the + current project From 4a9f971c3d1f8cf5cc8dac7db1228c1b8d30d3d3 Mon Sep 17 00:00:00 2001 From: Marcos Martins <contato@marcosmartins.me> Date: Thu, 16 May 2024 15:57:09 -0300 Subject: [PATCH 264/685] refactor(tests/commands): move "other" tests for the correspondent file --- tests/commands/test_example_command.py | 8 +++++++- tests/commands/test_info_command.py | 8 +++++++- tests/commands/test_ls_command.py | 8 +++++++- tests/commands/test_other_commands.py | 27 -------------------------- tests/commands/test_schema_command.py | 8 +++++++- 5 files changed, 28 insertions(+), 31 deletions(-) delete mode 100644 tests/commands/test_other_commands.py diff --git a/tests/commands/test_example_command.py b/tests/commands/test_example_command.py index 43fdd96f5a..93d9368f58 100644 --- a/tests/commands/test_example_command.py +++ b/tests/commands/test_example_command.py @@ -1,10 +1,16 @@ import pytest import sys -from commitizen import cli +from commitizen import cli, commands from pytest_mock import MockerFixture +def test_example(config, mocker: MockerFixture): + write_mock = mocker.patch("commitizen.out.write") + commands.Example(config)() + write_mock.assert_called_once() + + def test_example_command_shows_description_when_use_help_option( mocker: MockerFixture, capsys, file_regression ): diff --git a/tests/commands/test_info_command.py b/tests/commands/test_info_command.py index 4a5f0d4f73..b9c8e10d3b 100644 --- a/tests/commands/test_info_command.py +++ b/tests/commands/test_info_command.py @@ -1,10 +1,16 @@ import pytest import sys -from commitizen import cli +from commitizen import cli, commands from pytest_mock import MockerFixture +def test_info(config, mocker: MockerFixture): + write_mock = mocker.patch("commitizen.out.write") + commands.Info(config)() + write_mock.assert_called_once() + + def test_info_command_shows_description_when_use_help_option( mocker: MockerFixture, capsys, file_regression ): diff --git a/tests/commands/test_ls_command.py b/tests/commands/test_ls_command.py index 7fc4620e22..e2a311fc76 100644 --- a/tests/commands/test_ls_command.py +++ b/tests/commands/test_ls_command.py @@ -1,10 +1,16 @@ import pytest import sys -from commitizen import cli +from commitizen import cli, commands from pytest_mock import MockerFixture +def test_list_cz(config, mocker: MockerFixture): + write_mock = mocker.patch("commitizen.out.write") + commands.ListCz(config)() + write_mock.assert_called_once() + + def test_ls_command_shows_description_when_use_help_option( mocker: MockerFixture, capsys, file_regression ): diff --git a/tests/commands/test_other_commands.py b/tests/commands/test_other_commands.py deleted file mode 100644 index 3f7f855d54..0000000000 --- a/tests/commands/test_other_commands.py +++ /dev/null @@ -1,27 +0,0 @@ -from pytest_mock import MockFixture - -from commitizen import commands - - -def test_example(config, mocker: MockFixture): - write_mock = mocker.patch("commitizen.out.write") - commands.Example(config)() - write_mock.assert_called_once() - - -def test_info(config, mocker: MockFixture): - write_mock = mocker.patch("commitizen.out.write") - commands.Info(config)() - write_mock.assert_called_once() - - -def test_schema(config, mocker: MockFixture): - write_mock = mocker.patch("commitizen.out.write") - commands.Schema(config)() - write_mock.assert_called_once() - - -def test_list_cz(config, mocker: MockFixture): - write_mock = mocker.patch("commitizen.out.write") - commands.ListCz(config)() - write_mock.assert_called_once() diff --git a/tests/commands/test_schema_command.py b/tests/commands/test_schema_command.py index 13e6c319bb..fd0693dcfe 100644 --- a/tests/commands/test_schema_command.py +++ b/tests/commands/test_schema_command.py @@ -1,10 +1,16 @@ import pytest import sys -from commitizen import cli +from commitizen import cli, commands from pytest_mock import MockerFixture +def test_schema(config, mocker: MockerFixture): + write_mock = mocker.patch("commitizen.out.write") + commands.Schema(config)() + write_mock.assert_called_once() + + def test_schema_command_shows_description_when_use_help_option( mocker: MockerFixture, capsys, file_regression ): From 4636e50978d849e2fc971de536ba25f40de7267f Mon Sep 17 00:00:00 2001 From: Marcos Martins <contato@marcosmartins.me> Date: Mon, 20 May 2024 15:09:18 -0300 Subject: [PATCH 265/685] refactor(KNOWN_SCHEMES): replace set comprehension for list comprehension Set is an unordered structure, so every call the order changes. Because the unordered behavior we can't use `file_regression` to test the command output. --- commitizen/version_schemes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index 596aa94b2e..26a19ec1b1 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -401,7 +401,7 @@ def __str__(self) -> str: SCHEMES_ENTRYPOINT = "commitizen.scheme" """Schemes entrypoints group""" -KNOWN_SCHEMES = {ep.name for ep in metadata.entry_points(group=SCHEMES_ENTRYPOINT)} +KNOWN_SCHEMES = [ep.name for ep in metadata.entry_points(group=SCHEMES_ENTRYPOINT)] """All known registered version schemes""" From 8f4dbe949af10798fbfd8ba42b4f8c6ae8ce99f0 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Mon, 20 May 2024 15:42:50 -0400 Subject: [PATCH 266/685] test(commands): add skip_if_below_py_3_10 as the message of argument changes in python 3.10 Optional arguments -> options --- tests/commands/test_bump_command.py | 3 ++- tests/commands/test_changelog_command.py | 2 ++ tests/commands/test_check_command.py | 3 ++- tests/commands/test_commit_command.py | 3 +++ tests/commands/test_example_command.py | 3 +++ tests/commands/test_info_command.py | 2 ++ tests/commands/test_init_command.py | 3 +++ tests/commands/test_ls_command.py | 3 +++ tests/commands/test_schema_command.py | 3 +++ tests/commands/test_version_command.py | 2 ++ tests/utils.py | 9 +++++++++ 11 files changed, 34 insertions(+), 2 deletions(-) diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index ad7f4db64e..b20f75169a 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -29,7 +29,7 @@ NoVersionSpecifiedError, ) from commitizen.changelog_formats import ChangelogFormat -from tests.utils import create_file_and_commit, create_tag +from tests.utils import create_file_and_commit, create_tag, skip_below_py_3_10 @pytest.mark.parametrize( @@ -1451,6 +1451,7 @@ def test_bump_changelog_contains_increment_only(mocker, tmp_commitizen_project, assert "2.0.0" not in out +@skip_below_py_3_10 def test_bump_command_shows_description_when_use_help_option( mocker: MockFixture, capsys, file_regression ): diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index 6f8919d71f..67f10a8ac0 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -31,6 +31,7 @@ merge_branch, switch_branch, wait_for_tag, + skip_below_py_3_10, ) @@ -1639,6 +1640,7 @@ def test_export_changelog_template_from_plugin( assert target.read_text() == tpl +@skip_below_py_3_10 def test_changelog_command_shows_description_when_use_help_option( mocker: MockFixture, capsys, file_regression ): diff --git a/tests/commands/test_check_command.py b/tests/commands/test_check_command.py index bd65e75b7c..47bdafd651 100644 --- a/tests/commands/test_check_command.py +++ b/tests/commands/test_check_command.py @@ -12,7 +12,7 @@ InvalidCommitMessageError, NoCommitsFoundError, ) -from tests.utils import create_file_and_commit +from tests.utils import create_file_and_commit, skip_below_py_3_10 COMMIT_LOG = [ "refactor: A code change that neither fixes a bug nor adds a feature", @@ -416,6 +416,7 @@ def test_check_conventional_commit_succeed_with_git_diff(mocker, capsys): assert "Commit validation: successful!" in out +@skip_below_py_3_10 def test_check_command_shows_description_when_use_help_option( mocker: MockFixture, capsys, file_regression ): diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index da54e7b6eb..2085278757 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -20,6 +20,8 @@ NothingToCommitError, ) +from tests.utils import skip_below_py_3_10 + @pytest.fixture def staging_is_clean(mocker: MockFixture, tmp_git_project): @@ -409,6 +411,7 @@ def test_commit_command_with_message_length_limit(config, mocker: MockFixture): commands.Commit(config, {"message_length_limit": message_length - 1})() +@skip_below_py_3_10 def test_commit_command_shows_description_when_use_help_option( mocker: MockFixture, capsys, file_regression ): diff --git a/tests/commands/test_example_command.py b/tests/commands/test_example_command.py index 93d9368f58..e0c2141453 100644 --- a/tests/commands/test_example_command.py +++ b/tests/commands/test_example_command.py @@ -4,6 +4,8 @@ from pytest_mock import MockerFixture +from tests.utils import skip_below_py_3_10 + def test_example(config, mocker: MockerFixture): write_mock = mocker.patch("commitizen.out.write") @@ -11,6 +13,7 @@ def test_example(config, mocker: MockerFixture): write_mock.assert_called_once() +@skip_below_py_3_10 def test_example_command_shows_description_when_use_help_option( mocker: MockerFixture, capsys, file_regression ): diff --git a/tests/commands/test_info_command.py b/tests/commands/test_info_command.py index b9c8e10d3b..6221630acc 100644 --- a/tests/commands/test_info_command.py +++ b/tests/commands/test_info_command.py @@ -3,6 +3,7 @@ from commitizen import cli, commands from pytest_mock import MockerFixture +from tests.utils import skip_below_py_3_10 def test_info(config, mocker: MockerFixture): @@ -11,6 +12,7 @@ def test_info(config, mocker: MockerFixture): write_mock.assert_called_once() +@skip_below_py_3_10 def test_info_command_shows_description_when_use_help_option( mocker: MockerFixture, capsys, file_regression ): diff --git a/tests/commands/test_init_command.py b/tests/commands/test_init_command.py index a3f8a8d739..a263e73a8e 100644 --- a/tests/commands/test_init_command.py +++ b/tests/commands/test_init_command.py @@ -13,6 +13,8 @@ from commitizen.__version__ import __version__ from commitizen.exceptions import InitFailedError, NoAnswersError +from tests.utils import skip_below_py_3_10 + class FakeQuestion: def __init__(self, expected_return): @@ -254,6 +256,7 @@ def test_pre_commit_exec_failed( commands.Init(config)() +@skip_below_py_3_10 def test_init_command_shows_description_when_use_help_option( mocker: MockFixture, capsys, file_regression ): diff --git a/tests/commands/test_ls_command.py b/tests/commands/test_ls_command.py index e2a311fc76..d783305fc0 100644 --- a/tests/commands/test_ls_command.py +++ b/tests/commands/test_ls_command.py @@ -4,6 +4,8 @@ from pytest_mock import MockerFixture +from tests.utils import skip_below_py_3_10 + def test_list_cz(config, mocker: MockerFixture): write_mock = mocker.patch("commitizen.out.write") @@ -11,6 +13,7 @@ def test_list_cz(config, mocker: MockerFixture): write_mock.assert_called_once() +@skip_below_py_3_10 def test_ls_command_shows_description_when_use_help_option( mocker: MockerFixture, capsys, file_regression ): diff --git a/tests/commands/test_schema_command.py b/tests/commands/test_schema_command.py index fd0693dcfe..f69638dba3 100644 --- a/tests/commands/test_schema_command.py +++ b/tests/commands/test_schema_command.py @@ -4,6 +4,8 @@ from pytest_mock import MockerFixture +from tests.utils import skip_below_py_3_10 + def test_schema(config, mocker: MockerFixture): write_mock = mocker.patch("commitizen.out.write") @@ -11,6 +13,7 @@ def test_schema(config, mocker: MockerFixture): write_mock.assert_called_once() +@skip_below_py_3_10 def test_schema_command_shows_description_when_use_help_option( mocker: MockerFixture, capsys, file_regression ): diff --git a/tests/commands/test_version_command.py b/tests/commands/test_version_command.py index 0a6109311c..f7d38c202d 100644 --- a/tests/commands/test_version_command.py +++ b/tests/commands/test_version_command.py @@ -7,6 +7,7 @@ from commitizen import cli, commands from commitizen.__version__ import __version__ from commitizen.config.base_config import BaseConfig +from tests.utils import skip_below_py_3_10 def test_version_for_showing_project_version(config, capsys): @@ -108,6 +109,7 @@ def test_version_use_version_provider( mock.set_version.assert_not_called() +@skip_below_py_3_10 def test_version_command_shows_description_when_use_help_option( mocker: MockerFixture, capsys, file_regression ): diff --git a/tests/utils.py b/tests/utils.py index 08d4414ba3..39fb0a17fa 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -2,12 +2,21 @@ import time import uuid +import sys from pathlib import Path + +import pytest from deprecated import deprecated from commitizen import cmd, exceptions, git +skip_below_py_3_10 = pytest.mark.skipif( + sys.version_info < (3, 10), + reason="The output meesage of argparse is different between Python 3.10 and lower than Python 3.10", +) + + class FakeCommand: def __init__(self, out=None, err=None, return_code=0): self.out = out From ae73429f38be340652319a0130f8b1d6aac29d4c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Wed, 22 May 2024 02:58:25 +0000 Subject: [PATCH 267/685] =?UTF-8?q?bump:=20version=203.26.0=20=E2=86=92=20?= =?UTF-8?q?3.26.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 11 +++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 163e7a0ab3..f80bf93bb9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,7 +47,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.26.0 # automatically updated by Commitizen + rev: v3.26.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index e99491f1cf..b851d3ab12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +## v3.26.1 (2024-05-22) + +### Fix + +- **cli/commands**: add description for subcommands + +### Refactor + +- **KNOWN_SCHEMES**: replace set comprehension for list comprehension +- **tests/commands**: move "other" tests for the correspondent file + ## v3.26.0 (2024-05-18) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 1e6bdc4260..2fb3eb449b 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.26.0" +__version__ = "3.26.1" diff --git a/pyproject.toml b/pyproject.toml index 82d8fb197b..20d08b020f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.26.0" +version = "3.26.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.26.0" +version = "3.26.1" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From c18c6a63434efc85fa4f82b0abc25063ce361cdb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Wed, 22 May 2024 02:58:59 +0000 Subject: [PATCH 268/685] docs(cli/screenshots): update CLI screenshots [skip ci] --- docs/images/cli_help/cz_bump___help.svg | 346 ++++++++++--------- docs/images/cli_help/cz_changelog___help.svg | 190 +++++----- docs/images/cli_help/cz_check___help.svg | 122 ++++--- docs/images/cli_help/cz_commit___help.svg | 108 +++--- docs/images/cli_help/cz_example___help.svg | 50 +-- docs/images/cli_help/cz_info___help.svg | 50 +-- docs/images/cli_help/cz_init___help.svg | 50 +-- docs/images/cli_help/cz_ls___help.svg | 50 +-- docs/images/cli_help/cz_schema___help.svg | 50 +-- docs/images/cli_help/cz_version___help.svg | 74 ++-- 10 files changed, 587 insertions(+), 503 deletions(-) diff --git a/docs/images/cli_help/cz_bump___help.svg b/docs/images/cli_help/cz_bump___help.svg index 6d217d3958..96db25a964 100644 --- a/docs/images/cli_help/cz_bump___help.svg +++ b/docs/images/cli_help/cz_bump___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 1977.6" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 2026.3999999999999" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,354 +19,362 @@ font-weight: 700; } - .terminal-1103912939-matrix { + .terminal-509574676-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1103912939-title { + .terminal-509574676-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1103912939-r1 { fill: #c5c8c6 } -.terminal-1103912939-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-1103912939-r3 { fill: #68a0b3;font-weight: bold } -.terminal-1103912939-r4 { fill: #98a84b } + .terminal-509574676-r1 { fill: #c5c8c6 } +.terminal-509574676-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-509574676-r3 { fill: #68a0b3;font-weight: bold } +.terminal-509574676-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-1103912939-clip-terminal"> - <rect x="0" y="0" width="975.0" height="1926.6" /> + <clipPath id="terminal-509574676-clip-terminal"> + <rect x="0" y="0" width="975.0" height="1975.3999999999999" /> </clipPath> - <clipPath id="terminal-1103912939-line-0"> + <clipPath id="terminal-509574676-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-1"> +<clipPath id="terminal-509574676-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-2"> +<clipPath id="terminal-509574676-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-3"> +<clipPath id="terminal-509574676-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-4"> +<clipPath id="terminal-509574676-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-5"> +<clipPath id="terminal-509574676-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-6"> +<clipPath id="terminal-509574676-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-7"> +<clipPath id="terminal-509574676-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-8"> +<clipPath id="terminal-509574676-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-9"> +<clipPath id="terminal-509574676-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-10"> +<clipPath id="terminal-509574676-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-11"> +<clipPath id="terminal-509574676-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-12"> +<clipPath id="terminal-509574676-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-13"> +<clipPath id="terminal-509574676-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-14"> +<clipPath id="terminal-509574676-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-15"> +<clipPath id="terminal-509574676-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-16"> +<clipPath id="terminal-509574676-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-17"> +<clipPath id="terminal-509574676-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-18"> +<clipPath id="terminal-509574676-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-19"> +<clipPath id="terminal-509574676-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-20"> +<clipPath id="terminal-509574676-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-21"> +<clipPath id="terminal-509574676-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-22"> +<clipPath id="terminal-509574676-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-23"> +<clipPath id="terminal-509574676-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-24"> +<clipPath id="terminal-509574676-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-25"> +<clipPath id="terminal-509574676-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-26"> +<clipPath id="terminal-509574676-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-27"> +<clipPath id="terminal-509574676-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-28"> +<clipPath id="terminal-509574676-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-29"> +<clipPath id="terminal-509574676-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-30"> +<clipPath id="terminal-509574676-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-31"> +<clipPath id="terminal-509574676-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-32"> +<clipPath id="terminal-509574676-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-33"> +<clipPath id="terminal-509574676-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-34"> +<clipPath id="terminal-509574676-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-35"> +<clipPath id="terminal-509574676-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-36"> +<clipPath id="terminal-509574676-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-37"> +<clipPath id="terminal-509574676-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-38"> +<clipPath id="terminal-509574676-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-39"> +<clipPath id="terminal-509574676-line-39"> <rect x="0" y="953.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-40"> +<clipPath id="terminal-509574676-line-40"> <rect x="0" y="977.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-41"> +<clipPath id="terminal-509574676-line-41"> <rect x="0" y="1001.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-42"> +<clipPath id="terminal-509574676-line-42"> <rect x="0" y="1026.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-43"> +<clipPath id="terminal-509574676-line-43"> <rect x="0" y="1050.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-44"> +<clipPath id="terminal-509574676-line-44"> <rect x="0" y="1075.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-45"> +<clipPath id="terminal-509574676-line-45"> <rect x="0" y="1099.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-46"> +<clipPath id="terminal-509574676-line-46"> <rect x="0" y="1123.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-47"> +<clipPath id="terminal-509574676-line-47"> <rect x="0" y="1148.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-48"> +<clipPath id="terminal-509574676-line-48"> <rect x="0" y="1172.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-49"> +<clipPath id="terminal-509574676-line-49"> <rect x="0" y="1197.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-50"> +<clipPath id="terminal-509574676-line-50"> <rect x="0" y="1221.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-51"> +<clipPath id="terminal-509574676-line-51"> <rect x="0" y="1245.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-52"> +<clipPath id="terminal-509574676-line-52"> <rect x="0" y="1270.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-53"> +<clipPath id="terminal-509574676-line-53"> <rect x="0" y="1294.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-54"> +<clipPath id="terminal-509574676-line-54"> <rect x="0" y="1319.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-55"> +<clipPath id="terminal-509574676-line-55"> <rect x="0" y="1343.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-56"> +<clipPath id="terminal-509574676-line-56"> <rect x="0" y="1367.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-57"> +<clipPath id="terminal-509574676-line-57"> <rect x="0" y="1392.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-58"> +<clipPath id="terminal-509574676-line-58"> <rect x="0" y="1416.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-59"> +<clipPath id="terminal-509574676-line-59"> <rect x="0" y="1441.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-60"> +<clipPath id="terminal-509574676-line-60"> <rect x="0" y="1465.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-61"> +<clipPath id="terminal-509574676-line-61"> <rect x="0" y="1489.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-62"> +<clipPath id="terminal-509574676-line-62"> <rect x="0" y="1514.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-63"> +<clipPath id="terminal-509574676-line-63"> <rect x="0" y="1538.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-64"> +<clipPath id="terminal-509574676-line-64"> <rect x="0" y="1563.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-65"> +<clipPath id="terminal-509574676-line-65"> <rect x="0" y="1587.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-66"> +<clipPath id="terminal-509574676-line-66"> <rect x="0" y="1611.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-67"> +<clipPath id="terminal-509574676-line-67"> <rect x="0" y="1636.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-68"> +<clipPath id="terminal-509574676-line-68"> <rect x="0" y="1660.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-69"> +<clipPath id="terminal-509574676-line-69"> <rect x="0" y="1685.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-70"> +<clipPath id="terminal-509574676-line-70"> <rect x="0" y="1709.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-71"> +<clipPath id="terminal-509574676-line-71"> <rect x="0" y="1733.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-72"> +<clipPath id="terminal-509574676-line-72"> <rect x="0" y="1758.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-73"> +<clipPath id="terminal-509574676-line-73"> <rect x="0" y="1782.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-74"> +<clipPath id="terminal-509574676-line-74"> <rect x="0" y="1807.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-75"> +<clipPath id="terminal-509574676-line-75"> <rect x="0" y="1831.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-76"> +<clipPath id="terminal-509574676-line-76"> <rect x="0" y="1855.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1103912939-line-77"> +<clipPath id="terminal-509574676-line-77"> <rect x="0" y="1880.3" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-509574676-line-78"> + <rect x="0" y="1904.7" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-509574676-line-79"> + <rect x="0" y="1929.1" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="1975.6" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="2024.4" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-1103912939-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-509574676-clip-terminal)"> - <g class="terminal-1103912939-matrix"> - <text class="terminal-1103912939-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-1103912939-line-0)">$ cz bump --help</text><text class="terminal-1103912939-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1103912939-line-0)"> -</text><text class="terminal-1103912939-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-1103912939-line-1)">usage: cz bump </text><text class="terminal-1103912939-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">[</text><text class="terminal-1103912939-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-1103912939-line-1)">-h</text><text class="terminal-1103912939-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">]</text><text class="terminal-1103912939-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">[</text><text class="terminal-1103912939-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-1103912939-line-1)">--dry-run</text><text class="terminal-1103912939-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">]</text><text class="terminal-1103912939-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">[</text><text class="terminal-1103912939-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-1103912939-line-1)">--files-only</text><text class="terminal-1103912939-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">]</text><text class="terminal-1103912939-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">[</text><text class="terminal-1103912939-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-1103912939-line-1)">--local-version</text><text class="terminal-1103912939-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">]</text><text class="terminal-1103912939-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">[</text><text class="terminal-1103912939-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-1103912939-line-1)">--changelog</text><text class="terminal-1103912939-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)">]</text><text class="terminal-1103912939-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-1)"> -</text><text class="terminal-1103912939-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)">[</text><text class="terminal-1103912939-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-1103912939-line-2)">--no-verify</text><text class="terminal-1103912939-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)">]</text><text class="terminal-1103912939-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)">[</text><text class="terminal-1103912939-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-1103912939-line-2)">--yes</text><text class="terminal-1103912939-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)">]</text><text class="terminal-1103912939-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)">[</text><text class="terminal-1103912939-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-1103912939-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-1103912939-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)">]</text><text class="terminal-1103912939-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-2)"> -</text><text class="terminal-1103912939-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)">[</text><text class="terminal-1103912939-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-1103912939-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-1103912939-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)">]</text><text class="terminal-1103912939-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)">[</text><text class="terminal-1103912939-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-1103912939-line-3)">--prerelease </text><text class="terminal-1103912939-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)">{</text><text class="terminal-1103912939-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-1103912939-line-3)">alpha,beta,rc</text><text class="terminal-1103912939-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)">}</text><text class="terminal-1103912939-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)">]</text><text class="terminal-1103912939-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-3)"> -</text><text class="terminal-1103912939-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)">[</text><text class="terminal-1103912939-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-1103912939-line-4)">--devrelease DEVRELEASE</text><text class="terminal-1103912939-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)">]</text><text class="terminal-1103912939-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)">[</text><text class="terminal-1103912939-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-1103912939-line-4)">--increment </text><text class="terminal-1103912939-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)">{</text><text class="terminal-1103912939-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-1103912939-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-1103912939-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)">}</text><text class="terminal-1103912939-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)">]</text><text class="terminal-1103912939-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-4)"> -</text><text class="terminal-1103912939-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)">[</text><text class="terminal-1103912939-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-1103912939-line-5)">--increment-mode </text><text class="terminal-1103912939-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)">{</text><text class="terminal-1103912939-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-1103912939-line-5)">linear,exact</text><text class="terminal-1103912939-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)">}</text><text class="terminal-1103912939-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)">]</text><text class="terminal-1103912939-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)">[</text><text class="terminal-1103912939-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-1103912939-line-5)">--check-consistency</text><text class="terminal-1103912939-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)">]</text><text class="terminal-1103912939-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1103912939-line-5)"> -</text><text class="terminal-1103912939-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-6)">[</text><text class="terminal-1103912939-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-1103912939-line-6)">--annotated-tag</text><text class="terminal-1103912939-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-6)">]</text><text class="terminal-1103912939-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-6)"> -</text><text class="terminal-1103912939-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-7)">[</text><text class="terminal-1103912939-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-1103912939-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-1103912939-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-7)">]</text><text class="terminal-1103912939-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-7)">[</text><text class="terminal-1103912939-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-1103912939-line-7)">--gpg-sign</text><text class="terminal-1103912939-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-7)">]</text><text class="terminal-1103912939-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-7)"> -</text><text class="terminal-1103912939-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)">[</text><text class="terminal-1103912939-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-1103912939-line-8)">--changelog-to-stdout</text><text class="terminal-1103912939-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)">]</text><text class="terminal-1103912939-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)">[</text><text class="terminal-1103912939-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-1103912939-line-8)">--git-output-to-stderr</text><text class="terminal-1103912939-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)">]</text><text class="terminal-1103912939-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)">[</text><text class="terminal-1103912939-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-1103912939-line-8)">--retry</text><text class="terminal-1103912939-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)">]</text><text class="terminal-1103912939-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-8)"> -</text><text class="terminal-1103912939-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)">[</text><text class="terminal-1103912939-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-1103912939-line-9)">--major-version-zero</text><text class="terminal-1103912939-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)">]</text><text class="terminal-1103912939-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)">[</text><text class="terminal-1103912939-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-1103912939-line-9)">--template TEMPLATE</text><text class="terminal-1103912939-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)">]</text><text class="terminal-1103912939-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)">[</text><text class="terminal-1103912939-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-1103912939-line-9)">--extra EXTRA</text><text class="terminal-1103912939-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)">]</text><text class="terminal-1103912939-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-9)"> -</text><text class="terminal-1103912939-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-1103912939-line-10)">[</text><text class="terminal-1103912939-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-1103912939-line-10)">--file-name FILE_NAME</text><text class="terminal-1103912939-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-1103912939-line-10)">]</text><text class="terminal-1103912939-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-1103912939-line-10)">[</text><text class="terminal-1103912939-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-1103912939-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-1103912939-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-1103912939-line-10)">]</text><text class="terminal-1103912939-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1103912939-line-10)"> -</text><text class="terminal-1103912939-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-11)">[</text><text class="terminal-1103912939-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-1103912939-line-11)">--version-scheme </text><text class="terminal-1103912939-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-11)">{</text><text class="terminal-1103912939-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-1103912939-line-11)">semver2,pep440,semver</text><text class="terminal-1103912939-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-11)">}</text><text class="terminal-1103912939-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-11)">]</text><text class="terminal-1103912939-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-11)"> -</text><text class="terminal-1103912939-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-12)">[</text><text class="terminal-1103912939-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-1103912939-line-12)">--version-type </text><text class="terminal-1103912939-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-12)">{</text><text class="terminal-1103912939-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-1103912939-line-12)">semver2,pep440,semver</text><text class="terminal-1103912939-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-12)">}</text><text class="terminal-1103912939-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-12)">]</text><text class="terminal-1103912939-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-12)"> -</text><text class="terminal-1103912939-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-13)">[</text><text class="terminal-1103912939-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-1103912939-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-1103912939-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-13)">]</text><text class="terminal-1103912939-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-13)"> -</text><text class="terminal-1103912939-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-14)">[</text><text class="terminal-1103912939-r1" x="195.2" y="361.6" textLength="170.8" clip-path="url(#terminal-1103912939-line-14)">MANUAL_VERSION</text><text class="terminal-1103912939-r2" x="366" y="361.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-14)">]</text><text class="terminal-1103912939-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-14)"> -</text><text class="terminal-1103912939-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1103912939-line-15)"> -</text><text class="terminal-1103912939-r1" x="0" y="410.4" textLength="256.2" clip-path="url(#terminal-1103912939-line-16)">positional arguments:</text><text class="terminal-1103912939-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-16)"> -</text><text class="terminal-1103912939-r1" x="0" y="434.8" textLength="610" clip-path="url(#terminal-1103912939-line-17)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-1103912939-r2" x="610" y="434.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-17)">(</text><text class="terminal-1103912939-r1" x="622.2" y="434.8" textLength="61" clip-path="url(#terminal-1103912939-line-17)">e.g: </text><text class="terminal-1103912939-r3" x="683.2" y="434.8" textLength="36.6" clip-path="url(#terminal-1103912939-line-17)">1.5</text><text class="terminal-1103912939-r1" x="719.8" y="434.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-17)">.</text><text class="terminal-1103912939-r3" x="732" y="434.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-17)">3</text><text class="terminal-1103912939-r2" x="744.2" y="434.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-17)">)</text><text class="terminal-1103912939-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-17)"> -</text><text class="terminal-1103912939-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-18)"> -</text><text class="terminal-1103912939-r1" x="0" y="483.6" textLength="97.6" clip-path="url(#terminal-1103912939-line-19)">options:</text><text class="terminal-1103912939-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-19)"> -</text><text class="terminal-1103912939-r1" x="0" y="508" textLength="671" clip-path="url(#terminal-1103912939-line-20)">  -h, --help            show this help message and exit</text><text class="terminal-1103912939-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1103912939-line-20)"> -</text><text class="terminal-1103912939-r1" x="0" y="532.4" textLength="915" clip-path="url(#terminal-1103912939-line-21)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-1103912939-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-21)"> -</text><text class="terminal-1103912939-r1" x="0" y="556.8" textLength="793" clip-path="url(#terminal-1103912939-line-22)">  --files-only          bump version in the files from the config</text><text class="terminal-1103912939-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-22)"> -</text><text class="terminal-1103912939-r1" x="0" y="581.2" textLength="719.8" clip-path="url(#terminal-1103912939-line-23)">  --local-version       bump only the local version portion</text><text class="terminal-1103912939-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-23)"> -</text><text class="terminal-1103912939-r1" x="0" y="605.6" textLength="841.8" clip-path="url(#terminal-1103912939-line-24)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-1103912939-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-24)"> -</text><text class="terminal-1103912939-r1" x="0" y="630" textLength="902.8" clip-path="url(#terminal-1103912939-line-25)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-1103912939-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1103912939-line-25)"> -</text><text class="terminal-1103912939-r1" x="0" y="654.4" textLength="353.8" clip-path="url(#terminal-1103912939-line-26)">                        hooks</text><text class="terminal-1103912939-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-26)"> -</text><text class="terminal-1103912939-r1" x="0" y="678.8" textLength="719.8" clip-path="url(#terminal-1103912939-line-27)">  --yes                 accept automatically questions done</text><text class="terminal-1103912939-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-27)"> -</text><text class="terminal-1103912939-r1" x="0" y="703.2" textLength="305" clip-path="url(#terminal-1103912939-line-28)">  --tag-format TAG_FORMAT</text><text class="terminal-1103912939-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-28)"> -</text><text class="terminal-1103912939-r1" x="0" y="727.6" textLength="939.4" clip-path="url(#terminal-1103912939-line-29)">                        the format used to tag the commit and read it, use it</text><text class="terminal-1103912939-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-29)"> -</text><text class="terminal-1103912939-r1" x="0" y="752" textLength="866.2" clip-path="url(#terminal-1103912939-line-30)">                        in existing projects, wrap around simple quotes</text><text class="terminal-1103912939-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-1103912939-line-30)"> -</text><text class="terminal-1103912939-r1" x="0" y="776.4" textLength="353.8" clip-path="url(#terminal-1103912939-line-31)">  --bump-message BUMP_MESSAGE</text><text class="terminal-1103912939-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-31)"> -</text><text class="terminal-1103912939-r1" x="0" y="800.8" textLength="902.8" clip-path="url(#terminal-1103912939-line-32)">                        template used to create the release commit, useful</text><text class="terminal-1103912939-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-32)"> -</text><text class="terminal-1103912939-r1" x="0" y="825.2" textLength="536.8" clip-path="url(#terminal-1103912939-line-33)">                        when working with CI</text><text class="terminal-1103912939-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-33)"> -</text><text class="terminal-1103912939-r1" x="0" y="849.6" textLength="183" clip-path="url(#terminal-1103912939-line-34)">  --prerelease </text><text class="terminal-1103912939-r2" x="183" y="849.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-34)">{</text><text class="terminal-1103912939-r1" x="195.2" y="849.6" textLength="158.6" clip-path="url(#terminal-1103912939-line-34)">alpha,beta,rc</text><text class="terminal-1103912939-r2" x="353.8" y="849.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-34)">}</text><text class="terminal-1103912939-r1" x="366" y="849.6" textLength="73.2" clip-path="url(#terminal-1103912939-line-34)">, -pr </text><text class="terminal-1103912939-r2" x="439.2" y="849.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-34)">{</text><text class="terminal-1103912939-r1" x="451.4" y="849.6" textLength="158.6" clip-path="url(#terminal-1103912939-line-34)">alpha,beta,rc</text><text class="terminal-1103912939-r2" x="610" y="849.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-34)">}</text><text class="terminal-1103912939-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-34)"> -</text><text class="terminal-1103912939-r1" x="0" y="874" textLength="597.8" clip-path="url(#terminal-1103912939-line-35)">                        choose type of prerelease</text><text class="terminal-1103912939-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-1103912939-line-35)"> -</text><text class="terminal-1103912939-r1" x="0" y="898.4" textLength="488" clip-path="url(#terminal-1103912939-line-36)">  --devrelease DEVRELEASE, -d DEVRELEASE</text><text class="terminal-1103912939-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-36)"> -</text><text class="terminal-1103912939-r1" x="0" y="922.8" textLength="841.8" clip-path="url(#terminal-1103912939-line-37)">                        specify non-negative integer for dev. release</text><text class="terminal-1103912939-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-37)"> -</text><text class="terminal-1103912939-r1" x="0" y="947.2" textLength="170.8" clip-path="url(#terminal-1103912939-line-38)">  --increment </text><text class="terminal-1103912939-r2" x="170.8" y="947.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-38)">{</text><text class="terminal-1103912939-r1" x="183" y="947.2" textLength="207.4" clip-path="url(#terminal-1103912939-line-38)">MAJOR,MINOR,PATCH</text><text class="terminal-1103912939-r2" x="390.4" y="947.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-38)">}</text><text class="terminal-1103912939-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-38)"> -</text><text class="terminal-1103912939-r1" x="0" y="971.6" textLength="756.4" clip-path="url(#terminal-1103912939-line-39)">                        manually specify the desired increment</text><text class="terminal-1103912939-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-39)"> -</text><text class="terminal-1103912939-r1" x="0" y="996" textLength="231.8" clip-path="url(#terminal-1103912939-line-40)">  --increment-mode </text><text class="terminal-1103912939-r2" x="231.8" y="996" textLength="12.2" clip-path="url(#terminal-1103912939-line-40)">{</text><text class="terminal-1103912939-r1" x="244" y="996" textLength="146.4" clip-path="url(#terminal-1103912939-line-40)">linear,exact</text><text class="terminal-1103912939-r2" x="390.4" y="996" textLength="12.2" clip-path="url(#terminal-1103912939-line-40)">}</text><text class="terminal-1103912939-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-1103912939-line-40)"> -</text><text class="terminal-1103912939-r1" x="0" y="1020.4" textLength="902.8" clip-path="url(#terminal-1103912939-line-41)">                        set the method by which the new version is chosen.</text><text class="terminal-1103912939-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-41)"> -</text><text class="terminal-1103912939-r4" x="292.8" y="1044.8" textLength="97.6" clip-path="url(#terminal-1103912939-line-42)">'linear'</text><text class="terminal-1103912939-r2" x="402.6" y="1044.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-42)">(</text><text class="terminal-1103912939-r1" x="414.8" y="1044.8" textLength="85.4" clip-path="url(#terminal-1103912939-line-42)">default</text><text class="terminal-1103912939-r2" x="500.2" y="1044.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-42)">)</text><text class="terminal-1103912939-r1" x="512.4" y="1044.8" textLength="414.8" clip-path="url(#terminal-1103912939-line-42)"> guesses the next version based on</text><text class="terminal-1103912939-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-42)"> -</text><text class="terminal-1103912939-r1" x="0" y="1069.2" textLength="939.4" clip-path="url(#terminal-1103912939-line-43)">                        typical linear version progression, such that bumping</text><text class="terminal-1103912939-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-43)"> -</text><text class="terminal-1103912939-r1" x="0" y="1093.6" textLength="866.2" clip-path="url(#terminal-1103912939-line-44)">                        of a pre-release with lower precedence than the</text><text class="terminal-1103912939-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-44)"> -</text><text class="terminal-1103912939-r1" x="0" y="1118" textLength="939.4" clip-path="url(#terminal-1103912939-line-45)">                        current pre-release phase maintains the current phase</text><text class="terminal-1103912939-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-1103912939-line-45)"> -</text><text class="terminal-1103912939-r1" x="0" y="1142.4" textLength="561.2" clip-path="url(#terminal-1103912939-line-46)">                        of higher precedence. </text><text class="terminal-1103912939-r4" x="561.2" y="1142.4" textLength="85.4" clip-path="url(#terminal-1103912939-line-46)">'exact'</text><text class="terminal-1103912939-r1" x="646.6" y="1142.4" textLength="305" clip-path="url(#terminal-1103912939-line-46)"> applies the changes that</text><text class="terminal-1103912939-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-46)"> -</text><text class="terminal-1103912939-r1" x="0" y="1166.8" textLength="536.8" clip-path="url(#terminal-1103912939-line-47)">                        have been specified </text><text class="terminal-1103912939-r2" x="536.8" y="1166.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-47)">(</text><text class="terminal-1103912939-r1" x="549" y="1166.8" textLength="353.8" clip-path="url(#terminal-1103912939-line-47)">or determined from the commit</text><text class="terminal-1103912939-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-47)"> -</text><text class="terminal-1103912939-r1" x="0" y="1191.2" textLength="329.4" clip-path="url(#terminal-1103912939-line-48)">                        log</text><text class="terminal-1103912939-r2" x="329.4" y="1191.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-48)">)</text><text class="terminal-1103912939-r1" x="341.6" y="1191.2" textLength="585.6" clip-path="url(#terminal-1103912939-line-48)"> without interpretation, such that the increment</text><text class="terminal-1103912939-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-48)"> -</text><text class="terminal-1103912939-r1" x="0" y="1215.6" textLength="707.6" clip-path="url(#terminal-1103912939-line-49)">                        and pre-release are always honored</text><text class="terminal-1103912939-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-49)"> -</text><text class="terminal-1103912939-r1" x="0" y="1240" textLength="317.2" clip-path="url(#terminal-1103912939-line-50)">  --check-consistency, -cc</text><text class="terminal-1103912939-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-1103912939-line-50)"> -</text><text class="terminal-1103912939-r1" x="0" y="1264.4" textLength="951.6" clip-path="url(#terminal-1103912939-line-51)">                        check consistency among versions defined in commitizen</text><text class="terminal-1103912939-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-51)"> -</text><text class="terminal-1103912939-r1" x="0" y="1288.8" textLength="671" clip-path="url(#terminal-1103912939-line-52)">                        configuration and version_files</text><text class="terminal-1103912939-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-52)"> -</text><text class="terminal-1103912939-r1" x="0" y="1313.2" textLength="866.2" clip-path="url(#terminal-1103912939-line-53)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-1103912939-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-53)"> -</text><text class="terminal-1103912939-r1" x="0" y="1337.6" textLength="915" clip-path="url(#terminal-1103912939-line-54)">  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-1103912939-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-54)"> -</text><text class="terminal-1103912939-r1" x="0" y="1362" textLength="634.4" clip-path="url(#terminal-1103912939-line-55)">                        create annotated tag message</text><text class="terminal-1103912939-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-1103912939-line-55)"> -</text><text class="terminal-1103912939-r1" x="0" y="1386.4" textLength="719.8" clip-path="url(#terminal-1103912939-line-56)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-1103912939-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-56)"> -</text><text class="terminal-1103912939-r1" x="0" y="1410.8" textLength="280.6" clip-path="url(#terminal-1103912939-line-57)">  --changelog-to-stdout</text><text class="terminal-1103912939-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-57)"> -</text><text class="terminal-1103912939-r1" x="0" y="1435.2" textLength="658.8" clip-path="url(#terminal-1103912939-line-58)">                        Output changelog to the stdout</text><text class="terminal-1103912939-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-58)"> -</text><text class="terminal-1103912939-r1" x="0" y="1459.6" textLength="292.8" clip-path="url(#terminal-1103912939-line-59)">  --git-output-to-stderr</text><text class="terminal-1103912939-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-59)"> -</text><text class="terminal-1103912939-r1" x="0" y="1484" textLength="646.6" clip-path="url(#terminal-1103912939-line-60)">                        Redirect git output to stderr</text><text class="terminal-1103912939-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-1103912939-line-60)"> -</text><text class="terminal-1103912939-r1" x="0" y="1508.4" textLength="744.2" clip-path="url(#terminal-1103912939-line-61)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-1103912939-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-61)"> -</text><text class="terminal-1103912939-r1" x="0" y="1532.8" textLength="939.4" clip-path="url(#terminal-1103912939-line-62)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-1103912939-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-62)"> -</text><text class="terminal-1103912939-r1" x="0" y="1557.2" textLength="414.8" clip-path="url(#terminal-1103912939-line-63)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-1103912939-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-63)"> -</text><text class="terminal-1103912939-r1" x="0" y="1581.6" textLength="646.6" clip-path="url(#terminal-1103912939-line-64)">                        changelog template file name </text><text class="terminal-1103912939-r2" x="646.6" y="1581.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-64)">(</text><text class="terminal-1103912939-r1" x="658.8" y="1581.6" textLength="280.6" clip-path="url(#terminal-1103912939-line-64)">relative to the current</text><text class="terminal-1103912939-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-64)"> -</text><text class="terminal-1103912939-r1" x="0" y="1606" textLength="500.2" clip-path="url(#terminal-1103912939-line-65)">                        working directory</text><text class="terminal-1103912939-r2" x="500.2" y="1606" textLength="12.2" clip-path="url(#terminal-1103912939-line-65)">)</text><text class="terminal-1103912939-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-1103912939-line-65)"> -</text><text class="terminal-1103912939-r1" x="0" y="1630.4" textLength="305" clip-path="url(#terminal-1103912939-line-66)">  --extra EXTRA, -e EXTRA</text><text class="terminal-1103912939-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-66)"> -</text><text class="terminal-1103912939-r1" x="0" y="1654.8" textLength="622.2" clip-path="url(#terminal-1103912939-line-67)">                        a changelog extra variable </text><text class="terminal-1103912939-r2" x="622.2" y="1654.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-67)">(</text><text class="terminal-1103912939-r1" x="634.4" y="1654.8" textLength="146.4" clip-path="url(#terminal-1103912939-line-67)">in the form </text><text class="terminal-1103912939-r4" x="780.8" y="1654.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-67)">'</text><text class="terminal-1103912939-r4" x="793" y="1654.8" textLength="36.6" clip-path="url(#terminal-1103912939-line-67)">key</text><text class="terminal-1103912939-r4" x="829.6" y="1654.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-67)">=</text><text class="terminal-1103912939-r4" x="841.8" y="1654.8" textLength="61" clip-path="url(#terminal-1103912939-line-67)">value</text><text class="terminal-1103912939-r4" x="902.8" y="1654.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-67)">'</text><text class="terminal-1103912939-r2" x="915" y="1654.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-67)">)</text><text class="terminal-1103912939-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-67)"> -</text><text class="terminal-1103912939-r1" x="0" y="1679.2" textLength="280.6" clip-path="url(#terminal-1103912939-line-68)">  --file-name FILE_NAME</text><text class="terminal-1103912939-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-68)"> -</text><text class="terminal-1103912939-r1" x="0" y="1703.6" textLength="573.4" clip-path="url(#terminal-1103912939-line-69)">                        file name of changelog </text><text class="terminal-1103912939-r2" x="573.4" y="1703.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-69)">(</text><text class="terminal-1103912939-r1" x="585.6" y="1703.6" textLength="109.8" clip-path="url(#terminal-1103912939-line-69)">default: </text><text class="terminal-1103912939-r4" x="695.4" y="1703.6" textLength="170.8" clip-path="url(#terminal-1103912939-line-69)">'CHANGELOG.md'</text><text class="terminal-1103912939-r2" x="866.2" y="1703.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-69)">)</text><text class="terminal-1103912939-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-69)"> -</text><text class="terminal-1103912939-r1" x="0" y="1728" textLength="475.8" clip-path="url(#terminal-1103912939-line-70)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-1103912939-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-1103912939-line-70)"> -</text><text class="terminal-1103912939-r1" x="0" y="1752.4" textLength="719.8" clip-path="url(#terminal-1103912939-line-71)">                        start pre-releases with this offset</text><text class="terminal-1103912939-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-71)"> -</text><text class="terminal-1103912939-r1" x="0" y="1776.8" textLength="231.8" clip-path="url(#terminal-1103912939-line-72)">  --version-scheme </text><text class="terminal-1103912939-r2" x="231.8" y="1776.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-72)">{</text><text class="terminal-1103912939-r1" x="244" y="1776.8" textLength="256.2" clip-path="url(#terminal-1103912939-line-72)">semver2,pep440,semver</text><text class="terminal-1103912939-r2" x="500.2" y="1776.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-72)">}</text><text class="terminal-1103912939-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-72)"> -</text><text class="terminal-1103912939-r1" x="0" y="1801.2" textLength="549" clip-path="url(#terminal-1103912939-line-73)">                        choose version scheme</text><text class="terminal-1103912939-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-73)"> -</text><text class="terminal-1103912939-r1" x="0" y="1825.6" textLength="207.4" clip-path="url(#terminal-1103912939-line-74)">  --version-type </text><text class="terminal-1103912939-r2" x="207.4" y="1825.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-74)">{</text><text class="terminal-1103912939-r1" x="219.6" y="1825.6" textLength="256.2" clip-path="url(#terminal-1103912939-line-74)">semver2,pep440,semver</text><text class="terminal-1103912939-r2" x="475.8" y="1825.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-74)">}</text><text class="terminal-1103912939-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-1103912939-line-74)"> -</text><text class="terminal-1103912939-r1" x="0" y="1850" textLength="683.2" clip-path="url(#terminal-1103912939-line-75)">                        Deprecated, use --version-scheme</text><text class="terminal-1103912939-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-1103912939-line-75)"> -</text><text class="terminal-1103912939-r1" x="0" y="1874.4" textLength="402.6" clip-path="url(#terminal-1103912939-line-76)">  --build-metadata BUILD_METADATA</text><text class="terminal-1103912939-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-1103912939-line-76)"> -</text><text class="terminal-1103912939-r1" x="0" y="1898.8" textLength="915" clip-path="url(#terminal-1103912939-line-77)">                        Add additional build-metadata to the version-number</text><text class="terminal-1103912939-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-1103912939-line-77)"> -</text><text class="terminal-1103912939-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-1103912939-line-78)"> + <g class="terminal-509574676-matrix"> + <text class="terminal-509574676-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-509574676-line-0)">$ cz bump --help</text><text class="terminal-509574676-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-509574676-line-0)"> +</text><text class="terminal-509574676-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-509574676-line-1)">usage: cz bump </text><text class="terminal-509574676-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">[</text><text class="terminal-509574676-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-509574676-line-1)">-h</text><text class="terminal-509574676-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">]</text><text class="terminal-509574676-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">[</text><text class="terminal-509574676-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-509574676-line-1)">--dry-run</text><text class="terminal-509574676-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">]</text><text class="terminal-509574676-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">[</text><text class="terminal-509574676-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-509574676-line-1)">--files-only</text><text class="terminal-509574676-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">]</text><text class="terminal-509574676-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">[</text><text class="terminal-509574676-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-509574676-line-1)">--local-version</text><text class="terminal-509574676-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">]</text><text class="terminal-509574676-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">[</text><text class="terminal-509574676-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-509574676-line-1)">--changelog</text><text class="terminal-509574676-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">]</text><text class="terminal-509574676-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)"> +</text><text class="terminal-509574676-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)">[</text><text class="terminal-509574676-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-509574676-line-2)">--no-verify</text><text class="terminal-509574676-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)">]</text><text class="terminal-509574676-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)">[</text><text class="terminal-509574676-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-509574676-line-2)">--yes</text><text class="terminal-509574676-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)">]</text><text class="terminal-509574676-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)">[</text><text class="terminal-509574676-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-509574676-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-509574676-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)">]</text><text class="terminal-509574676-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)"> +</text><text class="terminal-509574676-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)">[</text><text class="terminal-509574676-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-509574676-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-509574676-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)">]</text><text class="terminal-509574676-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)">[</text><text class="terminal-509574676-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-509574676-line-3)">--prerelease </text><text class="terminal-509574676-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)">{</text><text class="terminal-509574676-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-509574676-line-3)">alpha,beta,rc</text><text class="terminal-509574676-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)">}</text><text class="terminal-509574676-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)">]</text><text class="terminal-509574676-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)"> +</text><text class="terminal-509574676-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)">[</text><text class="terminal-509574676-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-509574676-line-4)">--devrelease DEVRELEASE</text><text class="terminal-509574676-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)">]</text><text class="terminal-509574676-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)">[</text><text class="terminal-509574676-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-509574676-line-4)">--increment </text><text class="terminal-509574676-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)">{</text><text class="terminal-509574676-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-509574676-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-509574676-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)">}</text><text class="terminal-509574676-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)">]</text><text class="terminal-509574676-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)"> +</text><text class="terminal-509574676-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)">[</text><text class="terminal-509574676-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-509574676-line-5)">--increment-mode </text><text class="terminal-509574676-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)">{</text><text class="terminal-509574676-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-509574676-line-5)">linear,exact</text><text class="terminal-509574676-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)">}</text><text class="terminal-509574676-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)">]</text><text class="terminal-509574676-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)">[</text><text class="terminal-509574676-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-509574676-line-5)">--check-consistency</text><text class="terminal-509574676-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)">]</text><text class="terminal-509574676-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)"> +</text><text class="terminal-509574676-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-509574676-line-6)">[</text><text class="terminal-509574676-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-509574676-line-6)">--annotated-tag</text><text class="terminal-509574676-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-509574676-line-6)">]</text><text class="terminal-509574676-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-509574676-line-6)"> +</text><text class="terminal-509574676-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-509574676-line-7)">[</text><text class="terminal-509574676-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-509574676-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-509574676-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-509574676-line-7)">]</text><text class="terminal-509574676-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-509574676-line-7)">[</text><text class="terminal-509574676-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-509574676-line-7)">--gpg-sign</text><text class="terminal-509574676-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-509574676-line-7)">]</text><text class="terminal-509574676-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-509574676-line-7)"> +</text><text class="terminal-509574676-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)">[</text><text class="terminal-509574676-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-509574676-line-8)">--changelog-to-stdout</text><text class="terminal-509574676-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)">]</text><text class="terminal-509574676-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)">[</text><text class="terminal-509574676-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-509574676-line-8)">--git-output-to-stderr</text><text class="terminal-509574676-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)">]</text><text class="terminal-509574676-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)">[</text><text class="terminal-509574676-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-509574676-line-8)">--retry</text><text class="terminal-509574676-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)">]</text><text class="terminal-509574676-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)"> +</text><text class="terminal-509574676-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)">[</text><text class="terminal-509574676-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-509574676-line-9)">--major-version-zero</text><text class="terminal-509574676-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)">]</text><text class="terminal-509574676-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)">[</text><text class="terminal-509574676-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-509574676-line-9)">--template TEMPLATE</text><text class="terminal-509574676-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)">]</text><text class="terminal-509574676-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)">[</text><text class="terminal-509574676-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-509574676-line-9)">--extra EXTRA</text><text class="terminal-509574676-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)">]</text><text class="terminal-509574676-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)"> +</text><text class="terminal-509574676-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-509574676-line-10)">[</text><text class="terminal-509574676-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-509574676-line-10)">--file-name FILE_NAME</text><text class="terminal-509574676-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-509574676-line-10)">]</text><text class="terminal-509574676-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-509574676-line-10)">[</text><text class="terminal-509574676-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-509574676-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-509574676-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-509574676-line-10)">]</text><text class="terminal-509574676-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-509574676-line-10)"> +</text><text class="terminal-509574676-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-509574676-line-11)">[</text><text class="terminal-509574676-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-509574676-line-11)">--version-scheme </text><text class="terminal-509574676-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-509574676-line-11)">{</text><text class="terminal-509574676-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-509574676-line-11)">pep440,semver,semver2</text><text class="terminal-509574676-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-509574676-line-11)">}</text><text class="terminal-509574676-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-509574676-line-11)">]</text><text class="terminal-509574676-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-509574676-line-11)"> +</text><text class="terminal-509574676-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-509574676-line-12)">[</text><text class="terminal-509574676-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-509574676-line-12)">--version-type </text><text class="terminal-509574676-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-509574676-line-12)">{</text><text class="terminal-509574676-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-509574676-line-12)">pep440,semver,semver2</text><text class="terminal-509574676-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-509574676-line-12)">}</text><text class="terminal-509574676-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-509574676-line-12)">]</text><text class="terminal-509574676-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-509574676-line-12)"> +</text><text class="terminal-509574676-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-509574676-line-13)">[</text><text class="terminal-509574676-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-509574676-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-509574676-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-509574676-line-13)">]</text><text class="terminal-509574676-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-509574676-line-13)"> +</text><text class="terminal-509574676-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-509574676-line-14)">[</text><text class="terminal-509574676-r1" x="195.2" y="361.6" textLength="170.8" clip-path="url(#terminal-509574676-line-14)">MANUAL_VERSION</text><text class="terminal-509574676-r2" x="366" y="361.6" textLength="12.2" clip-path="url(#terminal-509574676-line-14)">]</text><text class="terminal-509574676-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-509574676-line-14)"> +</text><text class="terminal-509574676-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-509574676-line-15)"> +</text><text class="terminal-509574676-r1" x="0" y="410.4" textLength="512.4" clip-path="url(#terminal-509574676-line-16)">bump semantic version based on the git log</text><text class="terminal-509574676-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-509574676-line-16)"> +</text><text class="terminal-509574676-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-509574676-line-17)"> +</text><text class="terminal-509574676-r1" x="0" y="459.2" textLength="256.2" clip-path="url(#terminal-509574676-line-18)">positional arguments:</text><text class="terminal-509574676-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-509574676-line-18)"> +</text><text class="terminal-509574676-r1" x="0" y="483.6" textLength="610" clip-path="url(#terminal-509574676-line-19)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-509574676-r2" x="610" y="483.6" textLength="12.2" clip-path="url(#terminal-509574676-line-19)">(</text><text class="terminal-509574676-r1" x="622.2" y="483.6" textLength="61" clip-path="url(#terminal-509574676-line-19)">e.g: </text><text class="terminal-509574676-r3" x="683.2" y="483.6" textLength="36.6" clip-path="url(#terminal-509574676-line-19)">1.5</text><text class="terminal-509574676-r1" x="719.8" y="483.6" textLength="12.2" clip-path="url(#terminal-509574676-line-19)">.</text><text class="terminal-509574676-r3" x="732" y="483.6" textLength="12.2" clip-path="url(#terminal-509574676-line-19)">3</text><text class="terminal-509574676-r2" x="744.2" y="483.6" textLength="12.2" clip-path="url(#terminal-509574676-line-19)">)</text><text class="terminal-509574676-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-509574676-line-19)"> +</text><text class="terminal-509574676-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-509574676-line-20)"> +</text><text class="terminal-509574676-r1" x="0" y="532.4" textLength="97.6" clip-path="url(#terminal-509574676-line-21)">options:</text><text class="terminal-509574676-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-509574676-line-21)"> +</text><text class="terminal-509574676-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-509574676-line-22)">  -h, --help            show this help message and exit</text><text class="terminal-509574676-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-509574676-line-22)"> +</text><text class="terminal-509574676-r1" x="0" y="581.2" textLength="915" clip-path="url(#terminal-509574676-line-23)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-509574676-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-509574676-line-23)"> +</text><text class="terminal-509574676-r1" x="0" y="605.6" textLength="793" clip-path="url(#terminal-509574676-line-24)">  --files-only          bump version in the files from the config</text><text class="terminal-509574676-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-509574676-line-24)"> +</text><text class="terminal-509574676-r1" x="0" y="630" textLength="719.8" clip-path="url(#terminal-509574676-line-25)">  --local-version       bump only the local version portion</text><text class="terminal-509574676-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-509574676-line-25)"> +</text><text class="terminal-509574676-r1" x="0" y="654.4" textLength="841.8" clip-path="url(#terminal-509574676-line-26)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-509574676-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-509574676-line-26)"> +</text><text class="terminal-509574676-r1" x="0" y="678.8" textLength="902.8" clip-path="url(#terminal-509574676-line-27)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-509574676-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-509574676-line-27)"> +</text><text class="terminal-509574676-r1" x="0" y="703.2" textLength="353.8" clip-path="url(#terminal-509574676-line-28)">                        hooks</text><text class="terminal-509574676-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-509574676-line-28)"> +</text><text class="terminal-509574676-r1" x="0" y="727.6" textLength="719.8" clip-path="url(#terminal-509574676-line-29)">  --yes                 accept automatically questions done</text><text class="terminal-509574676-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-509574676-line-29)"> +</text><text class="terminal-509574676-r1" x="0" y="752" textLength="305" clip-path="url(#terminal-509574676-line-30)">  --tag-format TAG_FORMAT</text><text class="terminal-509574676-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-509574676-line-30)"> +</text><text class="terminal-509574676-r1" x="0" y="776.4" textLength="939.4" clip-path="url(#terminal-509574676-line-31)">                        the format used to tag the commit and read it, use it</text><text class="terminal-509574676-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-509574676-line-31)"> +</text><text class="terminal-509574676-r1" x="0" y="800.8" textLength="866.2" clip-path="url(#terminal-509574676-line-32)">                        in existing projects, wrap around simple quotes</text><text class="terminal-509574676-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-509574676-line-32)"> +</text><text class="terminal-509574676-r1" x="0" y="825.2" textLength="353.8" clip-path="url(#terminal-509574676-line-33)">  --bump-message BUMP_MESSAGE</text><text class="terminal-509574676-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-509574676-line-33)"> +</text><text class="terminal-509574676-r1" x="0" y="849.6" textLength="902.8" clip-path="url(#terminal-509574676-line-34)">                        template used to create the release commit, useful</text><text class="terminal-509574676-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-509574676-line-34)"> +</text><text class="terminal-509574676-r1" x="0" y="874" textLength="536.8" clip-path="url(#terminal-509574676-line-35)">                        when working with CI</text><text class="terminal-509574676-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-509574676-line-35)"> +</text><text class="terminal-509574676-r1" x="0" y="898.4" textLength="183" clip-path="url(#terminal-509574676-line-36)">  --prerelease </text><text class="terminal-509574676-r2" x="183" y="898.4" textLength="12.2" clip-path="url(#terminal-509574676-line-36)">{</text><text class="terminal-509574676-r1" x="195.2" y="898.4" textLength="158.6" clip-path="url(#terminal-509574676-line-36)">alpha,beta,rc</text><text class="terminal-509574676-r2" x="353.8" y="898.4" textLength="12.2" clip-path="url(#terminal-509574676-line-36)">}</text><text class="terminal-509574676-r1" x="366" y="898.4" textLength="73.2" clip-path="url(#terminal-509574676-line-36)">, -pr </text><text class="terminal-509574676-r2" x="439.2" y="898.4" textLength="12.2" clip-path="url(#terminal-509574676-line-36)">{</text><text class="terminal-509574676-r1" x="451.4" y="898.4" textLength="158.6" clip-path="url(#terminal-509574676-line-36)">alpha,beta,rc</text><text class="terminal-509574676-r2" x="610" y="898.4" textLength="12.2" clip-path="url(#terminal-509574676-line-36)">}</text><text class="terminal-509574676-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-509574676-line-36)"> +</text><text class="terminal-509574676-r1" x="0" y="922.8" textLength="597.8" clip-path="url(#terminal-509574676-line-37)">                        choose type of prerelease</text><text class="terminal-509574676-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-509574676-line-37)"> +</text><text class="terminal-509574676-r1" x="0" y="947.2" textLength="488" clip-path="url(#terminal-509574676-line-38)">  --devrelease DEVRELEASE, -d DEVRELEASE</text><text class="terminal-509574676-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-509574676-line-38)"> +</text><text class="terminal-509574676-r1" x="0" y="971.6" textLength="841.8" clip-path="url(#terminal-509574676-line-39)">                        specify non-negative integer for dev. release</text><text class="terminal-509574676-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-509574676-line-39)"> +</text><text class="terminal-509574676-r1" x="0" y="996" textLength="170.8" clip-path="url(#terminal-509574676-line-40)">  --increment </text><text class="terminal-509574676-r2" x="170.8" y="996" textLength="12.2" clip-path="url(#terminal-509574676-line-40)">{</text><text class="terminal-509574676-r1" x="183" y="996" textLength="207.4" clip-path="url(#terminal-509574676-line-40)">MAJOR,MINOR,PATCH</text><text class="terminal-509574676-r2" x="390.4" y="996" textLength="12.2" clip-path="url(#terminal-509574676-line-40)">}</text><text class="terminal-509574676-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-509574676-line-40)"> +</text><text class="terminal-509574676-r1" x="0" y="1020.4" textLength="756.4" clip-path="url(#terminal-509574676-line-41)">                        manually specify the desired increment</text><text class="terminal-509574676-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-509574676-line-41)"> +</text><text class="terminal-509574676-r1" x="0" y="1044.8" textLength="231.8" clip-path="url(#terminal-509574676-line-42)">  --increment-mode </text><text class="terminal-509574676-r2" x="231.8" y="1044.8" textLength="12.2" clip-path="url(#terminal-509574676-line-42)">{</text><text class="terminal-509574676-r1" x="244" y="1044.8" textLength="146.4" clip-path="url(#terminal-509574676-line-42)">linear,exact</text><text class="terminal-509574676-r2" x="390.4" y="1044.8" textLength="12.2" clip-path="url(#terminal-509574676-line-42)">}</text><text class="terminal-509574676-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-509574676-line-42)"> +</text><text class="terminal-509574676-r1" x="0" y="1069.2" textLength="902.8" clip-path="url(#terminal-509574676-line-43)">                        set the method by which the new version is chosen.</text><text class="terminal-509574676-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-509574676-line-43)"> +</text><text class="terminal-509574676-r4" x="292.8" y="1093.6" textLength="97.6" clip-path="url(#terminal-509574676-line-44)">'linear'</text><text class="terminal-509574676-r2" x="402.6" y="1093.6" textLength="12.2" clip-path="url(#terminal-509574676-line-44)">(</text><text class="terminal-509574676-r1" x="414.8" y="1093.6" textLength="85.4" clip-path="url(#terminal-509574676-line-44)">default</text><text class="terminal-509574676-r2" x="500.2" y="1093.6" textLength="12.2" clip-path="url(#terminal-509574676-line-44)">)</text><text class="terminal-509574676-r1" x="512.4" y="1093.6" textLength="414.8" clip-path="url(#terminal-509574676-line-44)"> guesses the next version based on</text><text class="terminal-509574676-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-509574676-line-44)"> +</text><text class="terminal-509574676-r1" x="0" y="1118" textLength="939.4" clip-path="url(#terminal-509574676-line-45)">                        typical linear version progression, such that bumping</text><text class="terminal-509574676-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-509574676-line-45)"> +</text><text class="terminal-509574676-r1" x="0" y="1142.4" textLength="866.2" clip-path="url(#terminal-509574676-line-46)">                        of a pre-release with lower precedence than the</text><text class="terminal-509574676-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-509574676-line-46)"> +</text><text class="terminal-509574676-r1" x="0" y="1166.8" textLength="939.4" clip-path="url(#terminal-509574676-line-47)">                        current pre-release phase maintains the current phase</text><text class="terminal-509574676-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-509574676-line-47)"> +</text><text class="terminal-509574676-r1" x="0" y="1191.2" textLength="561.2" clip-path="url(#terminal-509574676-line-48)">                        of higher precedence. </text><text class="terminal-509574676-r4" x="561.2" y="1191.2" textLength="85.4" clip-path="url(#terminal-509574676-line-48)">'exact'</text><text class="terminal-509574676-r1" x="646.6" y="1191.2" textLength="305" clip-path="url(#terminal-509574676-line-48)"> applies the changes that</text><text class="terminal-509574676-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-509574676-line-48)"> +</text><text class="terminal-509574676-r1" x="0" y="1215.6" textLength="536.8" clip-path="url(#terminal-509574676-line-49)">                        have been specified </text><text class="terminal-509574676-r2" x="536.8" y="1215.6" textLength="12.2" clip-path="url(#terminal-509574676-line-49)">(</text><text class="terminal-509574676-r1" x="549" y="1215.6" textLength="353.8" clip-path="url(#terminal-509574676-line-49)">or determined from the commit</text><text class="terminal-509574676-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-509574676-line-49)"> +</text><text class="terminal-509574676-r1" x="0" y="1240" textLength="329.4" clip-path="url(#terminal-509574676-line-50)">                        log</text><text class="terminal-509574676-r2" x="329.4" y="1240" textLength="12.2" clip-path="url(#terminal-509574676-line-50)">)</text><text class="terminal-509574676-r1" x="341.6" y="1240" textLength="585.6" clip-path="url(#terminal-509574676-line-50)"> without interpretation, such that the increment</text><text class="terminal-509574676-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-509574676-line-50)"> +</text><text class="terminal-509574676-r1" x="0" y="1264.4" textLength="707.6" clip-path="url(#terminal-509574676-line-51)">                        and pre-release are always honored</text><text class="terminal-509574676-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-509574676-line-51)"> +</text><text class="terminal-509574676-r1" x="0" y="1288.8" textLength="317.2" clip-path="url(#terminal-509574676-line-52)">  --check-consistency, -cc</text><text class="terminal-509574676-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-509574676-line-52)"> +</text><text class="terminal-509574676-r1" x="0" y="1313.2" textLength="951.6" clip-path="url(#terminal-509574676-line-53)">                        check consistency among versions defined in commitizen</text><text class="terminal-509574676-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-509574676-line-53)"> +</text><text class="terminal-509574676-r1" x="0" y="1337.6" textLength="671" clip-path="url(#terminal-509574676-line-54)">                        configuration and version_files</text><text class="terminal-509574676-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-509574676-line-54)"> +</text><text class="terminal-509574676-r1" x="0" y="1362" textLength="866.2" clip-path="url(#terminal-509574676-line-55)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-509574676-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-509574676-line-55)"> +</text><text class="terminal-509574676-r1" x="0" y="1386.4" textLength="915" clip-path="url(#terminal-509574676-line-56)">  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-509574676-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-509574676-line-56)"> +</text><text class="terminal-509574676-r1" x="0" y="1410.8" textLength="634.4" clip-path="url(#terminal-509574676-line-57)">                        create annotated tag message</text><text class="terminal-509574676-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-509574676-line-57)"> +</text><text class="terminal-509574676-r1" x="0" y="1435.2" textLength="719.8" clip-path="url(#terminal-509574676-line-58)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-509574676-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-509574676-line-58)"> +</text><text class="terminal-509574676-r1" x="0" y="1459.6" textLength="280.6" clip-path="url(#terminal-509574676-line-59)">  --changelog-to-stdout</text><text class="terminal-509574676-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-509574676-line-59)"> +</text><text class="terminal-509574676-r1" x="0" y="1484" textLength="658.8" clip-path="url(#terminal-509574676-line-60)">                        Output changelog to the stdout</text><text class="terminal-509574676-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-509574676-line-60)"> +</text><text class="terminal-509574676-r1" x="0" y="1508.4" textLength="292.8" clip-path="url(#terminal-509574676-line-61)">  --git-output-to-stderr</text><text class="terminal-509574676-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-509574676-line-61)"> +</text><text class="terminal-509574676-r1" x="0" y="1532.8" textLength="646.6" clip-path="url(#terminal-509574676-line-62)">                        Redirect git output to stderr</text><text class="terminal-509574676-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-509574676-line-62)"> +</text><text class="terminal-509574676-r1" x="0" y="1557.2" textLength="744.2" clip-path="url(#terminal-509574676-line-63)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-509574676-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-509574676-line-63)"> +</text><text class="terminal-509574676-r1" x="0" y="1581.6" textLength="939.4" clip-path="url(#terminal-509574676-line-64)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-509574676-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-509574676-line-64)"> +</text><text class="terminal-509574676-r1" x="0" y="1606" textLength="414.8" clip-path="url(#terminal-509574676-line-65)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-509574676-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-509574676-line-65)"> +</text><text class="terminal-509574676-r1" x="0" y="1630.4" textLength="646.6" clip-path="url(#terminal-509574676-line-66)">                        changelog template file name </text><text class="terminal-509574676-r2" x="646.6" y="1630.4" textLength="12.2" clip-path="url(#terminal-509574676-line-66)">(</text><text class="terminal-509574676-r1" x="658.8" y="1630.4" textLength="280.6" clip-path="url(#terminal-509574676-line-66)">relative to the current</text><text class="terminal-509574676-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-509574676-line-66)"> +</text><text class="terminal-509574676-r1" x="0" y="1654.8" textLength="500.2" clip-path="url(#terminal-509574676-line-67)">                        working directory</text><text class="terminal-509574676-r2" x="500.2" y="1654.8" textLength="12.2" clip-path="url(#terminal-509574676-line-67)">)</text><text class="terminal-509574676-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-509574676-line-67)"> +</text><text class="terminal-509574676-r1" x="0" y="1679.2" textLength="305" clip-path="url(#terminal-509574676-line-68)">  --extra EXTRA, -e EXTRA</text><text class="terminal-509574676-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-509574676-line-68)"> +</text><text class="terminal-509574676-r1" x="0" y="1703.6" textLength="622.2" clip-path="url(#terminal-509574676-line-69)">                        a changelog extra variable </text><text class="terminal-509574676-r2" x="622.2" y="1703.6" textLength="12.2" clip-path="url(#terminal-509574676-line-69)">(</text><text class="terminal-509574676-r1" x="634.4" y="1703.6" textLength="146.4" clip-path="url(#terminal-509574676-line-69)">in the form </text><text class="terminal-509574676-r4" x="780.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-509574676-line-69)">'</text><text class="terminal-509574676-r4" x="793" y="1703.6" textLength="36.6" clip-path="url(#terminal-509574676-line-69)">key</text><text class="terminal-509574676-r4" x="829.6" y="1703.6" textLength="12.2" clip-path="url(#terminal-509574676-line-69)">=</text><text class="terminal-509574676-r4" x="841.8" y="1703.6" textLength="61" clip-path="url(#terminal-509574676-line-69)">value</text><text class="terminal-509574676-r4" x="902.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-509574676-line-69)">'</text><text class="terminal-509574676-r2" x="915" y="1703.6" textLength="12.2" clip-path="url(#terminal-509574676-line-69)">)</text><text class="terminal-509574676-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-509574676-line-69)"> +</text><text class="terminal-509574676-r1" x="0" y="1728" textLength="280.6" clip-path="url(#terminal-509574676-line-70)">  --file-name FILE_NAME</text><text class="terminal-509574676-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-509574676-line-70)"> +</text><text class="terminal-509574676-r1" x="0" y="1752.4" textLength="573.4" clip-path="url(#terminal-509574676-line-71)">                        file name of changelog </text><text class="terminal-509574676-r2" x="573.4" y="1752.4" textLength="12.2" clip-path="url(#terminal-509574676-line-71)">(</text><text class="terminal-509574676-r1" x="585.6" y="1752.4" textLength="109.8" clip-path="url(#terminal-509574676-line-71)">default: </text><text class="terminal-509574676-r4" x="695.4" y="1752.4" textLength="170.8" clip-path="url(#terminal-509574676-line-71)">'CHANGELOG.md'</text><text class="terminal-509574676-r2" x="866.2" y="1752.4" textLength="12.2" clip-path="url(#terminal-509574676-line-71)">)</text><text class="terminal-509574676-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-509574676-line-71)"> +</text><text class="terminal-509574676-r1" x="0" y="1776.8" textLength="475.8" clip-path="url(#terminal-509574676-line-72)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-509574676-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-509574676-line-72)"> +</text><text class="terminal-509574676-r1" x="0" y="1801.2" textLength="719.8" clip-path="url(#terminal-509574676-line-73)">                        start pre-releases with this offset</text><text class="terminal-509574676-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-509574676-line-73)"> +</text><text class="terminal-509574676-r1" x="0" y="1825.6" textLength="231.8" clip-path="url(#terminal-509574676-line-74)">  --version-scheme </text><text class="terminal-509574676-r2" x="231.8" y="1825.6" textLength="12.2" clip-path="url(#terminal-509574676-line-74)">{</text><text class="terminal-509574676-r1" x="244" y="1825.6" textLength="256.2" clip-path="url(#terminal-509574676-line-74)">pep440,semver,semver2</text><text class="terminal-509574676-r2" x="500.2" y="1825.6" textLength="12.2" clip-path="url(#terminal-509574676-line-74)">}</text><text class="terminal-509574676-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-509574676-line-74)"> +</text><text class="terminal-509574676-r1" x="0" y="1850" textLength="549" clip-path="url(#terminal-509574676-line-75)">                        choose version scheme</text><text class="terminal-509574676-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-509574676-line-75)"> +</text><text class="terminal-509574676-r1" x="0" y="1874.4" textLength="207.4" clip-path="url(#terminal-509574676-line-76)">  --version-type </text><text class="terminal-509574676-r2" x="207.4" y="1874.4" textLength="12.2" clip-path="url(#terminal-509574676-line-76)">{</text><text class="terminal-509574676-r1" x="219.6" y="1874.4" textLength="256.2" clip-path="url(#terminal-509574676-line-76)">pep440,semver,semver2</text><text class="terminal-509574676-r2" x="475.8" y="1874.4" textLength="12.2" clip-path="url(#terminal-509574676-line-76)">}</text><text class="terminal-509574676-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-509574676-line-76)"> +</text><text class="terminal-509574676-r1" x="0" y="1898.8" textLength="683.2" clip-path="url(#terminal-509574676-line-77)">                        Deprecated, use --version-scheme</text><text class="terminal-509574676-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-509574676-line-77)"> +</text><text class="terminal-509574676-r1" x="0" y="1923.2" textLength="402.6" clip-path="url(#terminal-509574676-line-78)">  --build-metadata BUILD_METADATA</text><text class="terminal-509574676-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-509574676-line-78)"> +</text><text class="terminal-509574676-r1" x="0" y="1947.6" textLength="915" clip-path="url(#terminal-509574676-line-79)">                        Add additional build-metadata to the version-number</text><text class="terminal-509574676-r1" x="976" y="1947.6" textLength="12.2" clip-path="url(#terminal-509574676-line-79)"> +</text><text class="terminal-509574676-r1" x="976" y="1972" textLength="12.2" clip-path="url(#terminal-509574676-line-80)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_changelog___help.svg b/docs/images/cli_help/cz_changelog___help.svg index 32d9037665..8cb3fcf2fe 100644 --- a/docs/images/cli_help/cz_changelog___help.svg +++ b/docs/images/cli_help/cz_changelog___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 1026.0" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 1074.8" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,198 +19,206 @@ font-weight: 700; } - .terminal-4119023865-matrix { + .terminal-2035912735-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-4119023865-title { + .terminal-2035912735-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-4119023865-r1 { fill: #c5c8c6 } -.terminal-4119023865-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-4119023865-r3 { fill: #68a0b3;font-weight: bold } -.terminal-4119023865-r4 { fill: #98a84b } + .terminal-2035912735-r1 { fill: #c5c8c6 } +.terminal-2035912735-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-2035912735-r3 { fill: #68a0b3;font-weight: bold } +.terminal-2035912735-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-4119023865-clip-terminal"> - <rect x="0" y="0" width="975.0" height="975.0" /> + <clipPath id="terminal-2035912735-clip-terminal"> + <rect x="0" y="0" width="975.0" height="1023.8" /> </clipPath> - <clipPath id="terminal-4119023865-line-0"> + <clipPath id="terminal-2035912735-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-1"> +<clipPath id="terminal-2035912735-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-2"> +<clipPath id="terminal-2035912735-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-3"> +<clipPath id="terminal-2035912735-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-4"> +<clipPath id="terminal-2035912735-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-5"> +<clipPath id="terminal-2035912735-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-6"> +<clipPath id="terminal-2035912735-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-7"> +<clipPath id="terminal-2035912735-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-8"> +<clipPath id="terminal-2035912735-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-9"> +<clipPath id="terminal-2035912735-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-10"> +<clipPath id="terminal-2035912735-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-11"> +<clipPath id="terminal-2035912735-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-12"> +<clipPath id="terminal-2035912735-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-13"> +<clipPath id="terminal-2035912735-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-14"> +<clipPath id="terminal-2035912735-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-15"> +<clipPath id="terminal-2035912735-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-16"> +<clipPath id="terminal-2035912735-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-17"> +<clipPath id="terminal-2035912735-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-18"> +<clipPath id="terminal-2035912735-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-19"> +<clipPath id="terminal-2035912735-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-20"> +<clipPath id="terminal-2035912735-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-21"> +<clipPath id="terminal-2035912735-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-22"> +<clipPath id="terminal-2035912735-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-23"> +<clipPath id="terminal-2035912735-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-24"> +<clipPath id="terminal-2035912735-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-25"> +<clipPath id="terminal-2035912735-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-26"> +<clipPath id="terminal-2035912735-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-27"> +<clipPath id="terminal-2035912735-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-28"> +<clipPath id="terminal-2035912735-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-29"> +<clipPath id="terminal-2035912735-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-30"> +<clipPath id="terminal-2035912735-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-31"> +<clipPath id="terminal-2035912735-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-32"> +<clipPath id="terminal-2035912735-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-33"> +<clipPath id="terminal-2035912735-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-34"> +<clipPath id="terminal-2035912735-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-35"> +<clipPath id="terminal-2035912735-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-36"> +<clipPath id="terminal-2035912735-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-37"> +<clipPath id="terminal-2035912735-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4119023865-line-38"> +<clipPath id="terminal-2035912735-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-2035912735-line-39"> + <rect x="0" y="953.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2035912735-line-40"> + <rect x="0" y="977.5" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="1024" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="1072.8" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-4119023865-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-2035912735-clip-terminal)"> - <g class="terminal-4119023865-matrix"> - <text class="terminal-4119023865-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-4119023865-line-0)">$ cz changelog --help</text><text class="terminal-4119023865-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-4119023865-line-0)"> -</text><text class="terminal-4119023865-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-4119023865-line-1)">usage: cz changelog </text><text class="terminal-4119023865-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)">[</text><text class="terminal-4119023865-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-4119023865-line-1)">-h</text><text class="terminal-4119023865-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)">]</text><text class="terminal-4119023865-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)">[</text><text class="terminal-4119023865-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-4119023865-line-1)">--dry-run</text><text class="terminal-4119023865-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)">]</text><text class="terminal-4119023865-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)">[</text><text class="terminal-4119023865-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-4119023865-line-1)">--file-name FILE_NAME</text><text class="terminal-4119023865-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)">]</text><text class="terminal-4119023865-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-1)"> -</text><text class="terminal-4119023865-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-2)">[</text><text class="terminal-4119023865-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-4119023865-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-4119023865-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-2)">]</text><text class="terminal-4119023865-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-2)">[</text><text class="terminal-4119023865-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-4119023865-line-2)">--incremental</text><text class="terminal-4119023865-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-2)">]</text><text class="terminal-4119023865-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-2)"> -</text><text class="terminal-4119023865-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-3)">[</text><text class="terminal-4119023865-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-4119023865-line-3)">--start-rev START_REV</text><text class="terminal-4119023865-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-3)">]</text><text class="terminal-4119023865-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-3)">[</text><text class="terminal-4119023865-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-4119023865-line-3)">--merge-prerelease</text><text class="terminal-4119023865-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-3)">]</text><text class="terminal-4119023865-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-3)"> -</text><text class="terminal-4119023865-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-4)">[</text><text class="terminal-4119023865-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-4119023865-line-4)">--version-scheme </text><text class="terminal-4119023865-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-4)">{</text><text class="terminal-4119023865-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-4119023865-line-4)">semver2,pep440,semver</text><text class="terminal-4119023865-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-4)">}</text><text class="terminal-4119023865-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-4)">]</text><text class="terminal-4119023865-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-4)"> -</text><text class="terminal-4119023865-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-4119023865-line-5)">[</text><text class="terminal-4119023865-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-4119023865-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-4119023865-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-4119023865-line-5)">]</text><text class="terminal-4119023865-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-4119023865-line-5)">[</text><text class="terminal-4119023865-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-4119023865-line-5)">--template TEMPLATE</text><text class="terminal-4119023865-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-4119023865-line-5)">]</text><text class="terminal-4119023865-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-4119023865-line-5)"> -</text><text class="terminal-4119023865-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-6)">[</text><text class="terminal-4119023865-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-4119023865-line-6)">--extra EXTRA</text><text class="terminal-4119023865-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-6)">]</text><text class="terminal-4119023865-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-6)"> -</text><text class="terminal-4119023865-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-7)"> -</text><text class="terminal-4119023865-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-8)"> -</text><text class="terminal-4119023865-r1" x="0" y="239.6" textLength="256.2" clip-path="url(#terminal-4119023865-line-9)">positional arguments:</text><text class="terminal-4119023865-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-9)"> -</text><text class="terminal-4119023865-r1" x="0" y="264" textLength="805.2" clip-path="url(#terminal-4119023865-line-10)">  rev_range             generates changelog for the given version </text><text class="terminal-4119023865-r2" x="805.2" y="264" textLength="12.2" clip-path="url(#terminal-4119023865-line-10)">(</text><text class="terminal-4119023865-r1" x="817.4" y="264" textLength="61" clip-path="url(#terminal-4119023865-line-10)">e.g: </text><text class="terminal-4119023865-r3" x="878.4" y="264" textLength="36.6" clip-path="url(#terminal-4119023865-line-10)">1.5</text><text class="terminal-4119023865-r1" x="915" y="264" textLength="12.2" clip-path="url(#terminal-4119023865-line-10)">.</text><text class="terminal-4119023865-r3" x="927.2" y="264" textLength="12.2" clip-path="url(#terminal-4119023865-line-10)">3</text><text class="terminal-4119023865-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-4119023865-line-10)">)</text><text class="terminal-4119023865-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-4119023865-line-10)"> -</text><text class="terminal-4119023865-r1" x="0" y="288.4" textLength="500.2" clip-path="url(#terminal-4119023865-line-11)">                        or version range </text><text class="terminal-4119023865-r2" x="500.2" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)">(</text><text class="terminal-4119023865-r1" x="512.4" y="288.4" textLength="61" clip-path="url(#terminal-4119023865-line-11)">e.g: </text><text class="terminal-4119023865-r3" x="573.4" y="288.4" textLength="36.6" clip-path="url(#terminal-4119023865-line-11)">1.5</text><text class="terminal-4119023865-r1" x="610" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)">.</text><text class="terminal-4119023865-r3" x="622.2" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)">3</text><text class="terminal-4119023865-r1" x="634.4" y="288.4" textLength="24.4" clip-path="url(#terminal-4119023865-line-11)">..</text><text class="terminal-4119023865-r3" x="658.8" y="288.4" textLength="36.6" clip-path="url(#terminal-4119023865-line-11)">1.7</text><text class="terminal-4119023865-r1" x="695.4" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)">.</text><text class="terminal-4119023865-r3" x="707.6" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)">9</text><text class="terminal-4119023865-r2" x="719.8" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)">)</text><text class="terminal-4119023865-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-11)"> -</text><text class="terminal-4119023865-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-12)"> -</text><text class="terminal-4119023865-r1" x="0" y="337.2" textLength="97.6" clip-path="url(#terminal-4119023865-line-13)">options:</text><text class="terminal-4119023865-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-13)"> -</text><text class="terminal-4119023865-r1" x="0" y="361.6" textLength="671" clip-path="url(#terminal-4119023865-line-14)">  -h, --help            show this help message and exit</text><text class="terminal-4119023865-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-14)"> -</text><text class="terminal-4119023865-r1" x="0" y="386" textLength="585.6" clip-path="url(#terminal-4119023865-line-15)">  --dry-run             show changelog to stdout</text><text class="terminal-4119023865-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-4119023865-line-15)"> -</text><text class="terminal-4119023865-r1" x="0" y="410.4" textLength="280.6" clip-path="url(#terminal-4119023865-line-16)">  --file-name FILE_NAME</text><text class="terminal-4119023865-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-16)"> -</text><text class="terminal-4119023865-r1" x="0" y="434.8" textLength="573.4" clip-path="url(#terminal-4119023865-line-17)">                        file name of changelog </text><text class="terminal-4119023865-r2" x="573.4" y="434.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-17)">(</text><text class="terminal-4119023865-r1" x="585.6" y="434.8" textLength="109.8" clip-path="url(#terminal-4119023865-line-17)">default: </text><text class="terminal-4119023865-r4" x="695.4" y="434.8" textLength="170.8" clip-path="url(#terminal-4119023865-line-17)">'CHANGELOG.md'</text><text class="terminal-4119023865-r2" x="866.2" y="434.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-17)">)</text><text class="terminal-4119023865-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-17)"> -</text><text class="terminal-4119023865-r1" x="0" y="459.2" textLength="500.2" clip-path="url(#terminal-4119023865-line-18)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-4119023865-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-18)"> -</text><text class="terminal-4119023865-r1" x="0" y="483.6" textLength="707.6" clip-path="url(#terminal-4119023865-line-19)">                        set the value for the new version </text><text class="terminal-4119023865-r2" x="707.6" y="483.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-19)">(</text><text class="terminal-4119023865-r1" x="719.8" y="483.6" textLength="207.4" clip-path="url(#terminal-4119023865-line-19)">use the tag value</text><text class="terminal-4119023865-r2" x="927.2" y="483.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-19)">)</text><text class="terminal-4119023865-r1" x="939.4" y="483.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-19)">,</text><text class="terminal-4119023865-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-19)"> -</text><text class="terminal-4119023865-r1" x="0" y="508" textLength="622.2" clip-path="url(#terminal-4119023865-line-20)">                        instead of using unreleased</text><text class="terminal-4119023865-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-4119023865-line-20)"> -</text><text class="terminal-4119023865-r1" x="0" y="532.4" textLength="939.4" clip-path="url(#terminal-4119023865-line-21)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-4119023865-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-21)"> -</text><text class="terminal-4119023865-r1" x="0" y="556.8" textLength="817.4" clip-path="url(#terminal-4119023865-line-22)">                        if the changelog has been manually modified</text><text class="terminal-4119023865-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-22)"> -</text><text class="terminal-4119023865-r1" x="0" y="581.2" textLength="280.6" clip-path="url(#terminal-4119023865-line-23)">  --start-rev START_REV</text><text class="terminal-4119023865-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-23)"> -</text><text class="terminal-4119023865-r1" x="0" y="605.6" textLength="866.2" clip-path="url(#terminal-4119023865-line-24)">                        start rev of the changelog. If not set, it will</text><text class="terminal-4119023865-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-24)"> -</text><text class="terminal-4119023865-r1" x="0" y="630" textLength="695.4" clip-path="url(#terminal-4119023865-line-25)">                        generate changelog from the start</text><text class="terminal-4119023865-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-4119023865-line-25)"> -</text><text class="terminal-4119023865-r1" x="0" y="654.4" textLength="915" clip-path="url(#terminal-4119023865-line-26)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-4119023865-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-26)"> -</text><text class="terminal-4119023865-r1" x="0" y="678.8" textLength="951.6" clip-path="url(#terminal-4119023865-line-27)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-4119023865-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-27)"> -</text><text class="terminal-4119023865-r1" x="0" y="703.2" textLength="451.4" clip-path="url(#terminal-4119023865-line-28)">                        the changelog</text><text class="terminal-4119023865-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-28)"> -</text><text class="terminal-4119023865-r1" x="0" y="727.6" textLength="231.8" clip-path="url(#terminal-4119023865-line-29)">  --version-scheme </text><text class="terminal-4119023865-r2" x="231.8" y="727.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-29)">{</text><text class="terminal-4119023865-r1" x="244" y="727.6" textLength="256.2" clip-path="url(#terminal-4119023865-line-29)">semver2,pep440,semver</text><text class="terminal-4119023865-r2" x="500.2" y="727.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-29)">}</text><text class="terminal-4119023865-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-29)"> -</text><text class="terminal-4119023865-r1" x="0" y="752" textLength="549" clip-path="url(#terminal-4119023865-line-30)">                        choose version scheme</text><text class="terminal-4119023865-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-4119023865-line-30)"> -</text><text class="terminal-4119023865-r1" x="0" y="776.4" textLength="427" clip-path="url(#terminal-4119023865-line-31)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-4119023865-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-31)"> -</text><text class="terminal-4119023865-r1" x="0" y="800.8" textLength="927.2" clip-path="url(#terminal-4119023865-line-32)">                        Export the changelog template into this file instead</text><text class="terminal-4119023865-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-32)"> -</text><text class="terminal-4119023865-r1" x="0" y="825.2" textLength="475.8" clip-path="url(#terminal-4119023865-line-33)">                        of rendering it</text><text class="terminal-4119023865-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-33)"> -</text><text class="terminal-4119023865-r1" x="0" y="849.6" textLength="414.8" clip-path="url(#terminal-4119023865-line-34)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-4119023865-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-34)"> -</text><text class="terminal-4119023865-r1" x="0" y="874" textLength="646.6" clip-path="url(#terminal-4119023865-line-35)">                        changelog template file name </text><text class="terminal-4119023865-r2" x="646.6" y="874" textLength="12.2" clip-path="url(#terminal-4119023865-line-35)">(</text><text class="terminal-4119023865-r1" x="658.8" y="874" textLength="280.6" clip-path="url(#terminal-4119023865-line-35)">relative to the current</text><text class="terminal-4119023865-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-4119023865-line-35)"> -</text><text class="terminal-4119023865-r1" x="0" y="898.4" textLength="500.2" clip-path="url(#terminal-4119023865-line-36)">                        working directory</text><text class="terminal-4119023865-r2" x="500.2" y="898.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-36)">)</text><text class="terminal-4119023865-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-4119023865-line-36)"> -</text><text class="terminal-4119023865-r1" x="0" y="922.8" textLength="305" clip-path="url(#terminal-4119023865-line-37)">  --extra EXTRA, -e EXTRA</text><text class="terminal-4119023865-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-4119023865-line-37)"> -</text><text class="terminal-4119023865-r1" x="0" y="947.2" textLength="622.2" clip-path="url(#terminal-4119023865-line-38)">                        a changelog extra variable </text><text class="terminal-4119023865-r2" x="622.2" y="947.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-38)">(</text><text class="terminal-4119023865-r1" x="634.4" y="947.2" textLength="146.4" clip-path="url(#terminal-4119023865-line-38)">in the form </text><text class="terminal-4119023865-r4" x="780.8" y="947.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-38)">'</text><text class="terminal-4119023865-r4" x="793" y="947.2" textLength="36.6" clip-path="url(#terminal-4119023865-line-38)">key</text><text class="terminal-4119023865-r4" x="829.6" y="947.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-38)">=</text><text class="terminal-4119023865-r4" x="841.8" y="947.2" textLength="61" clip-path="url(#terminal-4119023865-line-38)">value</text><text class="terminal-4119023865-r4" x="902.8" y="947.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-38)">'</text><text class="terminal-4119023865-r2" x="915" y="947.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-38)">)</text><text class="terminal-4119023865-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-4119023865-line-38)"> -</text><text class="terminal-4119023865-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-4119023865-line-39)"> + <g class="terminal-2035912735-matrix"> + <text class="terminal-2035912735-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-2035912735-line-0)">$ cz changelog --help</text><text class="terminal-2035912735-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2035912735-line-0)"> +</text><text class="terminal-2035912735-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-2035912735-line-1)">usage: cz changelog </text><text class="terminal-2035912735-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">[</text><text class="terminal-2035912735-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2035912735-line-1)">-h</text><text class="terminal-2035912735-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">]</text><text class="terminal-2035912735-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">[</text><text class="terminal-2035912735-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-2035912735-line-1)">--dry-run</text><text class="terminal-2035912735-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">]</text><text class="terminal-2035912735-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">[</text><text class="terminal-2035912735-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-2035912735-line-1)">--file-name FILE_NAME</text><text class="terminal-2035912735-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">]</text><text class="terminal-2035912735-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)"> +</text><text class="terminal-2035912735-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">[</text><text class="terminal-2035912735-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-2035912735-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-2035912735-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">]</text><text class="terminal-2035912735-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">[</text><text class="terminal-2035912735-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-2035912735-line-2)">--incremental</text><text class="terminal-2035912735-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">]</text><text class="terminal-2035912735-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)"> +</text><text class="terminal-2035912735-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">[</text><text class="terminal-2035912735-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-2035912735-line-3)">--start-rev START_REV</text><text class="terminal-2035912735-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">]</text><text class="terminal-2035912735-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">[</text><text class="terminal-2035912735-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-2035912735-line-3)">--merge-prerelease</text><text class="terminal-2035912735-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">]</text><text class="terminal-2035912735-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)"> +</text><text class="terminal-2035912735-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">[</text><text class="terminal-2035912735-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-2035912735-line-4)">--version-scheme </text><text class="terminal-2035912735-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">{</text><text class="terminal-2035912735-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-2035912735-line-4)">pep440,semver,semver2</text><text class="terminal-2035912735-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">}</text><text class="terminal-2035912735-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">]</text><text class="terminal-2035912735-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)"> +</text><text class="terminal-2035912735-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">[</text><text class="terminal-2035912735-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-2035912735-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-2035912735-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">]</text><text class="terminal-2035912735-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">[</text><text class="terminal-2035912735-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-2035912735-line-5)">--template TEMPLATE</text><text class="terminal-2035912735-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">]</text><text class="terminal-2035912735-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)"> +</text><text class="terminal-2035912735-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-6)">[</text><text class="terminal-2035912735-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-2035912735-line-6)">--extra EXTRA</text><text class="terminal-2035912735-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-6)">]</text><text class="terminal-2035912735-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-6)"> +</text><text class="terminal-2035912735-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-7)"> +</text><text class="terminal-2035912735-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-8)"> +</text><text class="terminal-2035912735-r1" x="0" y="239.6" textLength="231.8" clip-path="url(#terminal-2035912735-line-9)">generate changelog </text><text class="terminal-2035912735-r2" x="231.8" y="239.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-9)">(</text><text class="terminal-2035912735-r1" x="244" y="239.6" textLength="500.2" clip-path="url(#terminal-2035912735-line-9)">note that it will overwrite existing file</text><text class="terminal-2035912735-r2" x="744.2" y="239.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-9)">)</text><text class="terminal-2035912735-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-9)"> +</text><text class="terminal-2035912735-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2035912735-line-10)"> +</text><text class="terminal-2035912735-r1" x="0" y="288.4" textLength="256.2" clip-path="url(#terminal-2035912735-line-11)">positional arguments:</text><text class="terminal-2035912735-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-11)"> +</text><text class="terminal-2035912735-r1" x="0" y="312.8" textLength="805.2" clip-path="url(#terminal-2035912735-line-12)">  rev_range             generates changelog for the given version </text><text class="terminal-2035912735-r2" x="805.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">(</text><text class="terminal-2035912735-r1" x="817.4" y="312.8" textLength="61" clip-path="url(#terminal-2035912735-line-12)">e.g: </text><text class="terminal-2035912735-r3" x="878.4" y="312.8" textLength="36.6" clip-path="url(#terminal-2035912735-line-12)">1.5</text><text class="terminal-2035912735-r1" x="915" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">.</text><text class="terminal-2035912735-r3" x="927.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">3</text><text class="terminal-2035912735-r2" x="939.4" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">)</text><text class="terminal-2035912735-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)"> +</text><text class="terminal-2035912735-r1" x="0" y="337.2" textLength="500.2" clip-path="url(#terminal-2035912735-line-13)">                        or version range </text><text class="terminal-2035912735-r2" x="500.2" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">(</text><text class="terminal-2035912735-r1" x="512.4" y="337.2" textLength="61" clip-path="url(#terminal-2035912735-line-13)">e.g: </text><text class="terminal-2035912735-r3" x="573.4" y="337.2" textLength="36.6" clip-path="url(#terminal-2035912735-line-13)">1.5</text><text class="terminal-2035912735-r1" x="610" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">.</text><text class="terminal-2035912735-r3" x="622.2" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">3</text><text class="terminal-2035912735-r1" x="634.4" y="337.2" textLength="24.4" clip-path="url(#terminal-2035912735-line-13)">..</text><text class="terminal-2035912735-r3" x="658.8" y="337.2" textLength="36.6" clip-path="url(#terminal-2035912735-line-13)">1.7</text><text class="terminal-2035912735-r1" x="695.4" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">.</text><text class="terminal-2035912735-r3" x="707.6" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">9</text><text class="terminal-2035912735-r2" x="719.8" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">)</text><text class="terminal-2035912735-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)"> +</text><text class="terminal-2035912735-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-14)"> +</text><text class="terminal-2035912735-r1" x="0" y="386" textLength="97.6" clip-path="url(#terminal-2035912735-line-15)">options:</text><text class="terminal-2035912735-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2035912735-line-15)"> +</text><text class="terminal-2035912735-r1" x="0" y="410.4" textLength="671" clip-path="url(#terminal-2035912735-line-16)">  -h, --help            show this help message and exit</text><text class="terminal-2035912735-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-16)"> +</text><text class="terminal-2035912735-r1" x="0" y="434.8" textLength="585.6" clip-path="url(#terminal-2035912735-line-17)">  --dry-run             show changelog to stdout</text><text class="terminal-2035912735-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-17)"> +</text><text class="terminal-2035912735-r1" x="0" y="459.2" textLength="280.6" clip-path="url(#terminal-2035912735-line-18)">  --file-name FILE_NAME</text><text class="terminal-2035912735-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-18)"> +</text><text class="terminal-2035912735-r1" x="0" y="483.6" textLength="573.4" clip-path="url(#terminal-2035912735-line-19)">                        file name of changelog </text><text class="terminal-2035912735-r2" x="573.4" y="483.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-19)">(</text><text class="terminal-2035912735-r1" x="585.6" y="483.6" textLength="109.8" clip-path="url(#terminal-2035912735-line-19)">default: </text><text class="terminal-2035912735-r4" x="695.4" y="483.6" textLength="170.8" clip-path="url(#terminal-2035912735-line-19)">'CHANGELOG.md'</text><text class="terminal-2035912735-r2" x="866.2" y="483.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-19)">)</text><text class="terminal-2035912735-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-19)"> +</text><text class="terminal-2035912735-r1" x="0" y="508" textLength="500.2" clip-path="url(#terminal-2035912735-line-20)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-2035912735-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2035912735-line-20)"> +</text><text class="terminal-2035912735-r1" x="0" y="532.4" textLength="707.6" clip-path="url(#terminal-2035912735-line-21)">                        set the value for the new version </text><text class="terminal-2035912735-r2" x="707.6" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)">(</text><text class="terminal-2035912735-r1" x="719.8" y="532.4" textLength="207.4" clip-path="url(#terminal-2035912735-line-21)">use the tag value</text><text class="terminal-2035912735-r2" x="927.2" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)">)</text><text class="terminal-2035912735-r1" x="939.4" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)">,</text><text class="terminal-2035912735-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)"> +</text><text class="terminal-2035912735-r1" x="0" y="556.8" textLength="622.2" clip-path="url(#terminal-2035912735-line-22)">                        instead of using unreleased</text><text class="terminal-2035912735-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-22)"> +</text><text class="terminal-2035912735-r1" x="0" y="581.2" textLength="939.4" clip-path="url(#terminal-2035912735-line-23)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-2035912735-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-23)"> +</text><text class="terminal-2035912735-r1" x="0" y="605.6" textLength="817.4" clip-path="url(#terminal-2035912735-line-24)">                        if the changelog has been manually modified</text><text class="terminal-2035912735-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-24)"> +</text><text class="terminal-2035912735-r1" x="0" y="630" textLength="280.6" clip-path="url(#terminal-2035912735-line-25)">  --start-rev START_REV</text><text class="terminal-2035912735-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2035912735-line-25)"> +</text><text class="terminal-2035912735-r1" x="0" y="654.4" textLength="866.2" clip-path="url(#terminal-2035912735-line-26)">                        start rev of the changelog. If not set, it will</text><text class="terminal-2035912735-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-26)"> +</text><text class="terminal-2035912735-r1" x="0" y="678.8" textLength="695.4" clip-path="url(#terminal-2035912735-line-27)">                        generate changelog from the start</text><text class="terminal-2035912735-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-27)"> +</text><text class="terminal-2035912735-r1" x="0" y="703.2" textLength="915" clip-path="url(#terminal-2035912735-line-28)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-2035912735-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-28)"> +</text><text class="terminal-2035912735-r1" x="0" y="727.6" textLength="951.6" clip-path="url(#terminal-2035912735-line-29)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-2035912735-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-29)"> +</text><text class="terminal-2035912735-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-2035912735-line-30)">                        the changelog</text><text class="terminal-2035912735-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-2035912735-line-30)"> +</text><text class="terminal-2035912735-r1" x="0" y="776.4" textLength="231.8" clip-path="url(#terminal-2035912735-line-31)">  --version-scheme </text><text class="terminal-2035912735-r2" x="231.8" y="776.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-31)">{</text><text class="terminal-2035912735-r1" x="244" y="776.4" textLength="256.2" clip-path="url(#terminal-2035912735-line-31)">pep440,semver,semver2</text><text class="terminal-2035912735-r2" x="500.2" y="776.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-31)">}</text><text class="terminal-2035912735-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-31)"> +</text><text class="terminal-2035912735-r1" x="0" y="800.8" textLength="549" clip-path="url(#terminal-2035912735-line-32)">                        choose version scheme</text><text class="terminal-2035912735-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-32)"> +</text><text class="terminal-2035912735-r1" x="0" y="825.2" textLength="427" clip-path="url(#terminal-2035912735-line-33)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-2035912735-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-33)"> +</text><text class="terminal-2035912735-r1" x="0" y="849.6" textLength="927.2" clip-path="url(#terminal-2035912735-line-34)">                        Export the changelog template into this file instead</text><text class="terminal-2035912735-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-34)"> +</text><text class="terminal-2035912735-r1" x="0" y="874" textLength="475.8" clip-path="url(#terminal-2035912735-line-35)">                        of rendering it</text><text class="terminal-2035912735-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-2035912735-line-35)"> +</text><text class="terminal-2035912735-r1" x="0" y="898.4" textLength="414.8" clip-path="url(#terminal-2035912735-line-36)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-2035912735-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-36)"> +</text><text class="terminal-2035912735-r1" x="0" y="922.8" textLength="646.6" clip-path="url(#terminal-2035912735-line-37)">                        changelog template file name </text><text class="terminal-2035912735-r2" x="646.6" y="922.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-37)">(</text><text class="terminal-2035912735-r1" x="658.8" y="922.8" textLength="280.6" clip-path="url(#terminal-2035912735-line-37)">relative to the current</text><text class="terminal-2035912735-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-37)"> +</text><text class="terminal-2035912735-r1" x="0" y="947.2" textLength="500.2" clip-path="url(#terminal-2035912735-line-38)">                        working directory</text><text class="terminal-2035912735-r2" x="500.2" y="947.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-38)">)</text><text class="terminal-2035912735-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-38)"> +</text><text class="terminal-2035912735-r1" x="0" y="971.6" textLength="305" clip-path="url(#terminal-2035912735-line-39)">  --extra EXTRA, -e EXTRA</text><text class="terminal-2035912735-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-39)"> +</text><text class="terminal-2035912735-r1" x="0" y="996" textLength="622.2" clip-path="url(#terminal-2035912735-line-40)">                        a changelog extra variable </text><text class="terminal-2035912735-r2" x="622.2" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">(</text><text class="terminal-2035912735-r1" x="634.4" y="996" textLength="146.4" clip-path="url(#terminal-2035912735-line-40)">in the form </text><text class="terminal-2035912735-r4" x="780.8" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">'</text><text class="terminal-2035912735-r4" x="793" y="996" textLength="36.6" clip-path="url(#terminal-2035912735-line-40)">key</text><text class="terminal-2035912735-r4" x="829.6" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">=</text><text class="terminal-2035912735-r4" x="841.8" y="996" textLength="61" clip-path="url(#terminal-2035912735-line-40)">value</text><text class="terminal-2035912735-r4" x="902.8" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">'</text><text class="terminal-2035912735-r2" x="915" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">)</text><text class="terminal-2035912735-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)"> +</text><text class="terminal-2035912735-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-41)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_check___help.svg b/docs/images/cli_help/cz_check___help.svg index 427d91e414..df1af46637 100644 --- a/docs/images/cli_help/cz_check___help.svg +++ b/docs/images/cli_help/cz_check___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 611.1999999999999" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 660.0" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,130 +19,138 @@ font-weight: 700; } - .terminal-3217887475-matrix { + .terminal-3657119390-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3217887475-title { + .terminal-3657119390-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3217887475-r1 { fill: #c5c8c6 } -.terminal-3217887475-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-3217887475-r3 { fill: #d0b344 } -.terminal-3217887475-r4 { fill: #68a0b3;font-weight: bold } + .terminal-3657119390-r1 { fill: #c5c8c6 } +.terminal-3657119390-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-3657119390-r3 { fill: #d0b344 } +.terminal-3657119390-r4 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-3217887475-clip-terminal"> - <rect x="0" y="0" width="975.0" height="560.1999999999999" /> + <clipPath id="terminal-3657119390-clip-terminal"> + <rect x="0" y="0" width="975.0" height="609.0" /> </clipPath> - <clipPath id="terminal-3217887475-line-0"> + <clipPath id="terminal-3657119390-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-1"> +<clipPath id="terminal-3657119390-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-2"> +<clipPath id="terminal-3657119390-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-3"> +<clipPath id="terminal-3657119390-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-4"> +<clipPath id="terminal-3657119390-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-5"> +<clipPath id="terminal-3657119390-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-6"> +<clipPath id="terminal-3657119390-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-7"> +<clipPath id="terminal-3657119390-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-8"> +<clipPath id="terminal-3657119390-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-9"> +<clipPath id="terminal-3657119390-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-10"> +<clipPath id="terminal-3657119390-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-11"> +<clipPath id="terminal-3657119390-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-12"> +<clipPath id="terminal-3657119390-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-13"> +<clipPath id="terminal-3657119390-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-14"> +<clipPath id="terminal-3657119390-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-15"> +<clipPath id="terminal-3657119390-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-16"> +<clipPath id="terminal-3657119390-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-17"> +<clipPath id="terminal-3657119390-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-18"> +<clipPath id="terminal-3657119390-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-19"> +<clipPath id="terminal-3657119390-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-20"> +<clipPath id="terminal-3657119390-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3217887475-line-21"> +<clipPath id="terminal-3657119390-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-3657119390-line-22"> + <rect x="0" y="538.3" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3657119390-line-23"> + <rect x="0" y="562.7" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="609.2" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="658" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-3217887475-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-3657119390-clip-terminal)"> - <g class="terminal-3217887475-matrix"> - <text class="terminal-3217887475-r1" x="0" y="20" textLength="207.4" clip-path="url(#terminal-3217887475-line-0)">$ cz check --help</text><text class="terminal-3217887475-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3217887475-line-0)"> -</text><text class="terminal-3217887475-r1" x="0" y="44.4" textLength="195.2" clip-path="url(#terminal-3217887475-line-1)">usage: cz check </text><text class="terminal-3217887475-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-1)">[</text><text class="terminal-3217887475-r1" x="207.4" y="44.4" textLength="24.4" clip-path="url(#terminal-3217887475-line-1)">-h</text><text class="terminal-3217887475-r2" x="231.8" y="44.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-1)">]</text><text class="terminal-3217887475-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-1)"> -</text><text class="terminal-3217887475-r2" x="195.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3217887475-line-2)">[</text><text class="terminal-3217887475-r1" x="207.4" y="68.8" textLength="768.6" clip-path="url(#terminal-3217887475-line-2)">--commit-msg-file COMMIT_MSG_FILE | --rev-range REV_RANGE | -m </text><text class="terminal-3217887475-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3217887475-line-2)"> -</text><text class="terminal-3217887475-r1" x="0" y="93.2" textLength="85.4" clip-path="url(#terminal-3217887475-line-3)">MESSAGE</text><text class="terminal-3217887475-r2" x="85.4" y="93.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-3)">]</text><text class="terminal-3217887475-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-3)"> -</text><text class="terminal-3217887475-r2" x="195.2" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)">[</text><text class="terminal-3217887475-r1" x="207.4" y="117.6" textLength="158.6" clip-path="url(#terminal-3217887475-line-4)">--allow-abort</text><text class="terminal-3217887475-r2" x="366" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)">]</text><text class="terminal-3217887475-r2" x="390.4" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)">[</text><text class="terminal-3217887475-r1" x="402.6" y="117.6" textLength="231.8" clip-path="url(#terminal-3217887475-line-4)">--allowed-prefixes </text><text class="terminal-3217887475-r2" x="634.4" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)">[</text><text class="terminal-3217887475-r1" x="646.6" y="117.6" textLength="207.4" clip-path="url(#terminal-3217887475-line-4)">ALLOWED_PREFIXES </text><text class="terminal-3217887475-r3" x="854" y="117.6" textLength="36.6" clip-path="url(#terminal-3217887475-line-4)">...</text><text class="terminal-3217887475-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)">]</text><text class="terminal-3217887475-r2" x="902.8" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)">]</text><text class="terminal-3217887475-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-4)"> -</text><text class="terminal-3217887475-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3217887475-line-5)"> -</text><text class="terminal-3217887475-r1" x="0" y="166.4" textLength="97.6" clip-path="url(#terminal-3217887475-line-6)">options:</text><text class="terminal-3217887475-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-6)"> -</text><text class="terminal-3217887475-r1" x="0" y="190.8" textLength="671" clip-path="url(#terminal-3217887475-line-7)">  -h, --help            show this help message and exit</text><text class="terminal-3217887475-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3217887475-line-7)"> -</text><text class="terminal-3217887475-r1" x="0" y="215.2" textLength="427" clip-path="url(#terminal-3217887475-line-8)">  --commit-msg-file COMMIT_MSG_FILE</text><text class="terminal-3217887475-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-8)"> -</text><text class="terminal-3217887475-r1" x="0" y="239.6" textLength="915" clip-path="url(#terminal-3217887475-line-9)">                        ask for the name of the temporal file that contains</text><text class="terminal-3217887475-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-9)"> -</text><text class="terminal-3217887475-r1" x="0" y="264" textLength="902.8" clip-path="url(#terminal-3217887475-line-10)">                        the commit message. Using it in a git hook script:</text><text class="terminal-3217887475-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3217887475-line-10)"> -</text><text class="terminal-3217887475-r3" x="292.8" y="288.4" textLength="97.6" clip-path="url(#terminal-3217887475-line-11)">MSG_FILE</text><text class="terminal-3217887475-r1" x="390.4" y="288.4" textLength="24.4" clip-path="url(#terminal-3217887475-line-11)">=$</text><text class="terminal-3217887475-r4" x="414.8" y="288.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-11)">1</text><text class="terminal-3217887475-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-11)"> -</text><text class="terminal-3217887475-r1" x="0" y="312.8" textLength="280.6" clip-path="url(#terminal-3217887475-line-12)">  --rev-range REV_RANGE</text><text class="terminal-3217887475-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3217887475-line-12)"> -</text><text class="terminal-3217887475-r1" x="0" y="337.2" textLength="854" clip-path="url(#terminal-3217887475-line-13)">                        a range of git rev to check. e.g, master..HEAD</text><text class="terminal-3217887475-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-13)"> -</text><text class="terminal-3217887475-r1" x="0" y="361.6" textLength="378.2" clip-path="url(#terminal-3217887475-line-14)">  -m MESSAGE, --message MESSAGE</text><text class="terminal-3217887475-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-14)"> -</text><text class="terminal-3217887475-r1" x="0" y="386" textLength="768.6" clip-path="url(#terminal-3217887475-line-15)">                        commit message that needs to be checked</text><text class="terminal-3217887475-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3217887475-line-15)"> -</text><text class="terminal-3217887475-r1" x="0" y="410.4" textLength="927.2" clip-path="url(#terminal-3217887475-line-16)">  --allow-abort         allow empty commit messages, which typically abort a</text><text class="terminal-3217887475-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-16)"> -</text><text class="terminal-3217887475-r1" x="0" y="434.8" textLength="366" clip-path="url(#terminal-3217887475-line-17)">                        commit</text><text class="terminal-3217887475-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3217887475-line-17)"> -</text><text class="terminal-3217887475-r1" x="0" y="459.2" textLength="256.2" clip-path="url(#terminal-3217887475-line-18)">  --allowed-prefixes </text><text class="terminal-3217887475-r2" x="256.2" y="459.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-18)">[</text><text class="terminal-3217887475-r1" x="268.4" y="459.2" textLength="207.4" clip-path="url(#terminal-3217887475-line-18)">ALLOWED_PREFIXES </text><text class="terminal-3217887475-r3" x="475.8" y="459.2" textLength="36.6" clip-path="url(#terminal-3217887475-line-18)">...</text><text class="terminal-3217887475-r2" x="512.4" y="459.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-18)">]</text><text class="terminal-3217887475-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3217887475-line-18)"> -</text><text class="terminal-3217887475-r1" x="0" y="483.6" textLength="951.6" clip-path="url(#terminal-3217887475-line-19)">                        allowed commit message prefixes. If the message starts</text><text class="terminal-3217887475-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3217887475-line-19)"> -</text><text class="terminal-3217887475-r1" x="0" y="508" textLength="951.6" clip-path="url(#terminal-3217887475-line-20)">                        by one of these prefixes, the message won't be checked</text><text class="terminal-3217887475-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3217887475-line-20)"> -</text><text class="terminal-3217887475-r1" x="0" y="532.4" textLength="500.2" clip-path="url(#terminal-3217887475-line-21)">                        against the regex</text><text class="terminal-3217887475-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3217887475-line-21)"> -</text><text class="terminal-3217887475-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-3217887475-line-22)"> + <g class="terminal-3657119390-matrix"> + <text class="terminal-3657119390-r1" x="0" y="20" textLength="207.4" clip-path="url(#terminal-3657119390-line-0)">$ cz check --help</text><text class="terminal-3657119390-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3657119390-line-0)"> +</text><text class="terminal-3657119390-r1" x="0" y="44.4" textLength="195.2" clip-path="url(#terminal-3657119390-line-1)">usage: cz check </text><text class="terminal-3657119390-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-1)">[</text><text class="terminal-3657119390-r1" x="207.4" y="44.4" textLength="24.4" clip-path="url(#terminal-3657119390-line-1)">-h</text><text class="terminal-3657119390-r2" x="231.8" y="44.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-1)">]</text><text class="terminal-3657119390-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-1)"> +</text><text class="terminal-3657119390-r2" x="195.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3657119390-line-2)">[</text><text class="terminal-3657119390-r1" x="207.4" y="68.8" textLength="768.6" clip-path="url(#terminal-3657119390-line-2)">--commit-msg-file COMMIT_MSG_FILE | --rev-range REV_RANGE | -m </text><text class="terminal-3657119390-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3657119390-line-2)"> +</text><text class="terminal-3657119390-r1" x="0" y="93.2" textLength="85.4" clip-path="url(#terminal-3657119390-line-3)">MESSAGE</text><text class="terminal-3657119390-r2" x="85.4" y="93.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-3)">]</text><text class="terminal-3657119390-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-3)"> +</text><text class="terminal-3657119390-r2" x="195.2" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)">[</text><text class="terminal-3657119390-r1" x="207.4" y="117.6" textLength="158.6" clip-path="url(#terminal-3657119390-line-4)">--allow-abort</text><text class="terminal-3657119390-r2" x="366" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)">]</text><text class="terminal-3657119390-r2" x="390.4" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)">[</text><text class="terminal-3657119390-r1" x="402.6" y="117.6" textLength="231.8" clip-path="url(#terminal-3657119390-line-4)">--allowed-prefixes </text><text class="terminal-3657119390-r2" x="634.4" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)">[</text><text class="terminal-3657119390-r1" x="646.6" y="117.6" textLength="207.4" clip-path="url(#terminal-3657119390-line-4)">ALLOWED_PREFIXES </text><text class="terminal-3657119390-r3" x="854" y="117.6" textLength="36.6" clip-path="url(#terminal-3657119390-line-4)">...</text><text class="terminal-3657119390-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)">]</text><text class="terminal-3657119390-r2" x="902.8" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)">]</text><text class="terminal-3657119390-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)"> +</text><text class="terminal-3657119390-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3657119390-line-5)"> +</text><text class="terminal-3657119390-r1" x="0" y="166.4" textLength="744.2" clip-path="url(#terminal-3657119390-line-6)">validates that a commit message matches the commitizen schema</text><text class="terminal-3657119390-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-6)"> +</text><text class="terminal-3657119390-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3657119390-line-7)"> +</text><text class="terminal-3657119390-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-3657119390-line-8)">options:</text><text class="terminal-3657119390-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-8)"> +</text><text class="terminal-3657119390-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-3657119390-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-3657119390-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-9)"> +</text><text class="terminal-3657119390-r1" x="0" y="264" textLength="427" clip-path="url(#terminal-3657119390-line-10)">  --commit-msg-file COMMIT_MSG_FILE</text><text class="terminal-3657119390-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3657119390-line-10)"> +</text><text class="terminal-3657119390-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-3657119390-line-11)">                        ask for the name of the temporal file that contains</text><text class="terminal-3657119390-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-11)"> +</text><text class="terminal-3657119390-r1" x="0" y="312.8" textLength="902.8" clip-path="url(#terminal-3657119390-line-12)">                        the commit message. Using it in a git hook script:</text><text class="terminal-3657119390-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3657119390-line-12)"> +</text><text class="terminal-3657119390-r3" x="292.8" y="337.2" textLength="97.6" clip-path="url(#terminal-3657119390-line-13)">MSG_FILE</text><text class="terminal-3657119390-r1" x="390.4" y="337.2" textLength="24.4" clip-path="url(#terminal-3657119390-line-13)">=$</text><text class="terminal-3657119390-r4" x="414.8" y="337.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-13)">1</text><text class="terminal-3657119390-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-13)"> +</text><text class="terminal-3657119390-r1" x="0" y="361.6" textLength="280.6" clip-path="url(#terminal-3657119390-line-14)">  --rev-range REV_RANGE</text><text class="terminal-3657119390-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-14)"> +</text><text class="terminal-3657119390-r1" x="0" y="386" textLength="854" clip-path="url(#terminal-3657119390-line-15)">                        a range of git rev to check. e.g, master..HEAD</text><text class="terminal-3657119390-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3657119390-line-15)"> +</text><text class="terminal-3657119390-r1" x="0" y="410.4" textLength="378.2" clip-path="url(#terminal-3657119390-line-16)">  -m MESSAGE, --message MESSAGE</text><text class="terminal-3657119390-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-16)"> +</text><text class="terminal-3657119390-r1" x="0" y="434.8" textLength="768.6" clip-path="url(#terminal-3657119390-line-17)">                        commit message that needs to be checked</text><text class="terminal-3657119390-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3657119390-line-17)"> +</text><text class="terminal-3657119390-r1" x="0" y="459.2" textLength="927.2" clip-path="url(#terminal-3657119390-line-18)">  --allow-abort         allow empty commit messages, which typically abort a</text><text class="terminal-3657119390-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-18)"> +</text><text class="terminal-3657119390-r1" x="0" y="483.6" textLength="366" clip-path="url(#terminal-3657119390-line-19)">                        commit</text><text class="terminal-3657119390-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-19)"> +</text><text class="terminal-3657119390-r1" x="0" y="508" textLength="256.2" clip-path="url(#terminal-3657119390-line-20)">  --allowed-prefixes </text><text class="terminal-3657119390-r2" x="256.2" y="508" textLength="12.2" clip-path="url(#terminal-3657119390-line-20)">[</text><text class="terminal-3657119390-r1" x="268.4" y="508" textLength="207.4" clip-path="url(#terminal-3657119390-line-20)">ALLOWED_PREFIXES </text><text class="terminal-3657119390-r3" x="475.8" y="508" textLength="36.6" clip-path="url(#terminal-3657119390-line-20)">...</text><text class="terminal-3657119390-r2" x="512.4" y="508" textLength="12.2" clip-path="url(#terminal-3657119390-line-20)">]</text><text class="terminal-3657119390-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3657119390-line-20)"> +</text><text class="terminal-3657119390-r1" x="0" y="532.4" textLength="951.6" clip-path="url(#terminal-3657119390-line-21)">                        allowed commit message prefixes. If the message starts</text><text class="terminal-3657119390-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-21)"> +</text><text class="terminal-3657119390-r1" x="0" y="556.8" textLength="951.6" clip-path="url(#terminal-3657119390-line-22)">                        by one of these prefixes, the message won't be checked</text><text class="terminal-3657119390-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-3657119390-line-22)"> +</text><text class="terminal-3657119390-r1" x="0" y="581.2" textLength="500.2" clip-path="url(#terminal-3657119390-line-23)">                        against the regex</text><text class="terminal-3657119390-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-23)"> +</text><text class="terminal-3657119390-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-24)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_commit___help.svg b/docs/images/cli_help/cz_commit___help.svg index deb871fce9..1b7c98953c 100644 --- a/docs/images/cli_help/cz_commit___help.svg +++ b/docs/images/cli_help/cz_commit___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 538.0" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 586.8" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,117 +19,125 @@ font-weight: 700; } - .terminal-1406799249-matrix { + .terminal-3906085552-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1406799249-title { + .terminal-3906085552-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1406799249-r1 { fill: #c5c8c6 } -.terminal-1406799249-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-1406799249-r3 { fill: #68a0b3;font-weight: bold } + .terminal-3906085552-r1 { fill: #c5c8c6 } +.terminal-3906085552-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-3906085552-r3 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-1406799249-clip-terminal"> - <rect x="0" y="0" width="975.0" height="487.0" /> + <clipPath id="terminal-3906085552-clip-terminal"> + <rect x="0" y="0" width="975.0" height="535.8" /> </clipPath> - <clipPath id="terminal-1406799249-line-0"> + <clipPath id="terminal-3906085552-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-1"> +<clipPath id="terminal-3906085552-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-2"> +<clipPath id="terminal-3906085552-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-3"> +<clipPath id="terminal-3906085552-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-4"> +<clipPath id="terminal-3906085552-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-5"> +<clipPath id="terminal-3906085552-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-6"> +<clipPath id="terminal-3906085552-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-7"> +<clipPath id="terminal-3906085552-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-8"> +<clipPath id="terminal-3906085552-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-9"> +<clipPath id="terminal-3906085552-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-10"> +<clipPath id="terminal-3906085552-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-11"> +<clipPath id="terminal-3906085552-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-12"> +<clipPath id="terminal-3906085552-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-13"> +<clipPath id="terminal-3906085552-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-14"> +<clipPath id="terminal-3906085552-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-15"> +<clipPath id="terminal-3906085552-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-16"> +<clipPath id="terminal-3906085552-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-17"> +<clipPath id="terminal-3906085552-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1406799249-line-18"> +<clipPath id="terminal-3906085552-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-3906085552-line-19"> + <rect x="0" y="465.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-3906085552-line-20"> + <rect x="0" y="489.5" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="536" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="584.8" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-1406799249-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-3906085552-clip-terminal)"> - <g class="terminal-1406799249-matrix"> - <text class="terminal-1406799249-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-1406799249-line-0)">$ cz commit --help</text><text class="terminal-1406799249-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1406799249-line-0)"> -</text><text class="terminal-1406799249-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-1406799249-line-1)">usage: cz commit </text><text class="terminal-1406799249-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">[</text><text class="terminal-1406799249-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-1406799249-line-1)">-h</text><text class="terminal-1406799249-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">]</text><text class="terminal-1406799249-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">[</text><text class="terminal-1406799249-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-1406799249-line-1)">--retry</text><text class="terminal-1406799249-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">]</text><text class="terminal-1406799249-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">[</text><text class="terminal-1406799249-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-1406799249-line-1)">--no-retry</text><text class="terminal-1406799249-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">]</text><text class="terminal-1406799249-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">[</text><text class="terminal-1406799249-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-1406799249-line-1)">--dry-run</text><text class="terminal-1406799249-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)">]</text><text class="terminal-1406799249-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-1)"> -</text><text class="terminal-1406799249-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)">[</text><text class="terminal-1406799249-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-1406799249-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-1406799249-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)">]</text><text class="terminal-1406799249-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)">[</text><text class="terminal-1406799249-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1406799249-line-2)">-s</text><text class="terminal-1406799249-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)">]</text><text class="terminal-1406799249-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)">[</text><text class="terminal-1406799249-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1406799249-line-2)">-a</text><text class="terminal-1406799249-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)">]</text><text class="terminal-1406799249-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-2)"> -</text><text class="terminal-1406799249-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-3)">[</text><text class="terminal-1406799249-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-1406799249-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-1406799249-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-3)">]</text><text class="terminal-1406799249-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-3)"> -</text><text class="terminal-1406799249-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1406799249-line-4)"> -</text><text class="terminal-1406799249-r1" x="0" y="142" textLength="97.6" clip-path="url(#terminal-1406799249-line-5)">options:</text><text class="terminal-1406799249-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1406799249-line-5)"> -</text><text class="terminal-1406799249-r1" x="0" y="166.4" textLength="671" clip-path="url(#terminal-1406799249-line-6)">  -h, --help            show this help message and exit</text><text class="terminal-1406799249-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-6)"> -</text><text class="terminal-1406799249-r1" x="0" y="190.8" textLength="500.2" clip-path="url(#terminal-1406799249-line-7)">  --retry               retry last commit</text><text class="terminal-1406799249-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-7)"> -</text><text class="terminal-1406799249-r1" x="0" y="215.2" textLength="878.4" clip-path="url(#terminal-1406799249-line-8)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-1406799249-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-8)"> -</text><text class="terminal-1406799249-r1" x="0" y="239.6" textLength="915" clip-path="url(#terminal-1406799249-line-9)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-1406799249-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1406799249-line-9)"> -</text><text class="terminal-1406799249-r1" x="0" y="264" textLength="427" clip-path="url(#terminal-1406799249-line-10)">  --write-message-to-file FILE_PATH</text><text class="terminal-1406799249-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1406799249-line-10)"> -</text><text class="terminal-1406799249-r1" x="0" y="288.4" textLength="780.8" clip-path="url(#terminal-1406799249-line-11)">                        write message to file before committing </text><text class="terminal-1406799249-r2" x="780.8" y="288.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-11)">(</text><text class="terminal-1406799249-r1" x="793" y="288.4" textLength="73.2" clip-path="url(#terminal-1406799249-line-11)">can be</text><text class="terminal-1406799249-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-11)"> -</text><text class="terminal-1406799249-r1" x="0" y="312.8" textLength="573.4" clip-path="url(#terminal-1406799249-line-12)">                        combined with --dry-run</text><text class="terminal-1406799249-r2" x="573.4" y="312.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-12)">)</text><text class="terminal-1406799249-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-12)"> -</text><text class="terminal-1406799249-r1" x="0" y="337.2" textLength="524.6" clip-path="url(#terminal-1406799249-line-13)">  -s, --signoff         sign off the commit</text><text class="terminal-1406799249-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-13)"> -</text><text class="terminal-1406799249-r1" x="0" y="361.6" textLength="902.8" clip-path="url(#terminal-1406799249-line-14)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-1406799249-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1406799249-line-14)"> -</text><text class="terminal-1406799249-r1" x="0" y="386" textLength="951.6" clip-path="url(#terminal-1406799249-line-15)">                        have been modified and deleted, but new files you have</text><text class="terminal-1406799249-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1406799249-line-15)"> -</text><text class="terminal-1406799249-r1" x="0" y="410.4" textLength="732" clip-path="url(#terminal-1406799249-line-16)">                        not told Git about are not affected.</text><text class="terminal-1406799249-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1406799249-line-16)"> -</text><text class="terminal-1406799249-r1" x="0" y="434.8" textLength="854" clip-path="url(#terminal-1406799249-line-17)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-1406799249-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1406799249-line-17)"> -</text><text class="terminal-1406799249-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-1406799249-line-18)">                        length limit of the commit message; </text><text class="terminal-1406799249-r3" x="732" y="459.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-18)">0</text><text class="terminal-1406799249-r1" x="744.2" y="459.2" textLength="158.6" clip-path="url(#terminal-1406799249-line-18)"> for no limit</text><text class="terminal-1406799249-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1406799249-line-18)"> -</text><text class="terminal-1406799249-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1406799249-line-19)"> + <g class="terminal-3906085552-matrix"> + <text class="terminal-3906085552-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-3906085552-line-0)">$ cz commit --help</text><text class="terminal-3906085552-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3906085552-line-0)"> +</text><text class="terminal-3906085552-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-3906085552-line-1)">usage: cz commit </text><text class="terminal-3906085552-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">[</text><text class="terminal-3906085552-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-3906085552-line-1)">-h</text><text class="terminal-3906085552-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">]</text><text class="terminal-3906085552-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">[</text><text class="terminal-3906085552-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-3906085552-line-1)">--retry</text><text class="terminal-3906085552-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">]</text><text class="terminal-3906085552-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">[</text><text class="terminal-3906085552-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-3906085552-line-1)">--no-retry</text><text class="terminal-3906085552-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">]</text><text class="terminal-3906085552-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">[</text><text class="terminal-3906085552-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-3906085552-line-1)">--dry-run</text><text class="terminal-3906085552-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">]</text><text class="terminal-3906085552-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)"> +</text><text class="terminal-3906085552-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)">[</text><text class="terminal-3906085552-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-3906085552-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-3906085552-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)">]</text><text class="terminal-3906085552-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)">[</text><text class="terminal-3906085552-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-3906085552-line-2)">-s</text><text class="terminal-3906085552-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)">]</text><text class="terminal-3906085552-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)">[</text><text class="terminal-3906085552-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-3906085552-line-2)">-a</text><text class="terminal-3906085552-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)">]</text><text class="terminal-3906085552-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)"> +</text><text class="terminal-3906085552-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-3)">[</text><text class="terminal-3906085552-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-3906085552-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-3906085552-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-3)">]</text><text class="terminal-3906085552-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-3)"> +</text><text class="terminal-3906085552-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3906085552-line-4)"> +</text><text class="terminal-3906085552-r1" x="0" y="142" textLength="207.4" clip-path="url(#terminal-3906085552-line-5)">create new commit</text><text class="terminal-3906085552-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3906085552-line-5)"> +</text><text class="terminal-3906085552-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-6)"> +</text><text class="terminal-3906085552-r1" x="0" y="190.8" textLength="97.6" clip-path="url(#terminal-3906085552-line-7)">options:</text><text class="terminal-3906085552-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-7)"> +</text><text class="terminal-3906085552-r1" x="0" y="215.2" textLength="671" clip-path="url(#terminal-3906085552-line-8)">  -h, --help            show this help message and exit</text><text class="terminal-3906085552-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-8)"> +</text><text class="terminal-3906085552-r1" x="0" y="239.6" textLength="500.2" clip-path="url(#terminal-3906085552-line-9)">  --retry               retry last commit</text><text class="terminal-3906085552-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3906085552-line-9)"> +</text><text class="terminal-3906085552-r1" x="0" y="264" textLength="878.4" clip-path="url(#terminal-3906085552-line-10)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-3906085552-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3906085552-line-10)"> +</text><text class="terminal-3906085552-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-3906085552-line-11)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-3906085552-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-11)"> +</text><text class="terminal-3906085552-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-3906085552-line-12)">  --write-message-to-file FILE_PATH</text><text class="terminal-3906085552-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-12)"> +</text><text class="terminal-3906085552-r1" x="0" y="337.2" textLength="780.8" clip-path="url(#terminal-3906085552-line-13)">                        write message to file before committing </text><text class="terminal-3906085552-r2" x="780.8" y="337.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-13)">(</text><text class="terminal-3906085552-r1" x="793" y="337.2" textLength="73.2" clip-path="url(#terminal-3906085552-line-13)">can be</text><text class="terminal-3906085552-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-13)"> +</text><text class="terminal-3906085552-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-3906085552-line-14)">                        combined with --dry-run</text><text class="terminal-3906085552-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-3906085552-line-14)">)</text><text class="terminal-3906085552-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3906085552-line-14)"> +</text><text class="terminal-3906085552-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-3906085552-line-15)">  -s, --signoff         sign off the commit</text><text class="terminal-3906085552-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3906085552-line-15)"> +</text><text class="terminal-3906085552-r1" x="0" y="410.4" textLength="902.8" clip-path="url(#terminal-3906085552-line-16)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-3906085552-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-16)"> +</text><text class="terminal-3906085552-r1" x="0" y="434.8" textLength="951.6" clip-path="url(#terminal-3906085552-line-17)">                        have been modified and deleted, but new files you have</text><text class="terminal-3906085552-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-17)"> +</text><text class="terminal-3906085552-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-3906085552-line-18)">                        not told Git about are not affected.</text><text class="terminal-3906085552-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-18)"> +</text><text class="terminal-3906085552-r1" x="0" y="483.6" textLength="854" clip-path="url(#terminal-3906085552-line-19)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-3906085552-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3906085552-line-19)"> +</text><text class="terminal-3906085552-r1" x="0" y="508" textLength="732" clip-path="url(#terminal-3906085552-line-20)">                        length limit of the commit message; </text><text class="terminal-3906085552-r3" x="732" y="508" textLength="12.2" clip-path="url(#terminal-3906085552-line-20)">0</text><text class="terminal-3906085552-r1" x="744.2" y="508" textLength="158.6" clip-path="url(#terminal-3906085552-line-20)"> for no limit</text><text class="terminal-3906085552-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3906085552-line-20)"> +</text><text class="terminal-3906085552-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-21)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_example___help.svg b/docs/images/cli_help/cz_example___help.svg index e142dd4f9b..9fe4fd659a 100644 --- a/docs/images/cli_help/cz_example___help.svg +++ b/docs/images/cli_help/cz_example___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 196.39999999999998" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 245.2" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,60 +19,68 @@ font-weight: 700; } - .terminal-2958388120-matrix { + .terminal-1643610534-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2958388120-title { + .terminal-1643610534-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2958388120-r1 { fill: #c5c8c6 } -.terminal-2958388120-r2 { fill: #c5c8c6;font-weight: bold } + .terminal-1643610534-r1 { fill: #c5c8c6 } +.terminal-1643610534-r2 { fill: #c5c8c6;font-weight: bold } </style> <defs> - <clipPath id="terminal-2958388120-clip-terminal"> - <rect x="0" y="0" width="975.0" height="145.39999999999998" /> + <clipPath id="terminal-1643610534-clip-terminal"> + <rect x="0" y="0" width="975.0" height="194.2" /> </clipPath> - <clipPath id="terminal-2958388120-line-0"> + <clipPath id="terminal-1643610534-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2958388120-line-1"> +<clipPath id="terminal-1643610534-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2958388120-line-2"> +<clipPath id="terminal-1643610534-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2958388120-line-3"> +<clipPath id="terminal-1643610534-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2958388120-line-4"> +<clipPath id="terminal-1643610534-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-1643610534-line-5"> + <rect x="0" y="123.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1643610534-line-6"> + <rect x="0" y="147.9" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="194.4" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="243.2" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-2958388120-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1643610534-clip-terminal)"> - <g class="terminal-2958388120-matrix"> - <text class="terminal-2958388120-r1" x="0" y="20" textLength="231.8" clip-path="url(#terminal-2958388120-line-0)">$ cz example --help</text><text class="terminal-2958388120-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2958388120-line-0)"> -</text><text class="terminal-2958388120-r1" x="0" y="44.4" textLength="219.6" clip-path="url(#terminal-2958388120-line-1)">usage: cz example </text><text class="terminal-2958388120-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2958388120-line-1)">[</text><text class="terminal-2958388120-r1" x="231.8" y="44.4" textLength="24.4" clip-path="url(#terminal-2958388120-line-1)">-h</text><text class="terminal-2958388120-r2" x="256.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2958388120-line-1)">]</text><text class="terminal-2958388120-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2958388120-line-1)"> -</text><text class="terminal-2958388120-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2958388120-line-2)"> -</text><text class="terminal-2958388120-r1" x="0" y="93.2" textLength="97.6" clip-path="url(#terminal-2958388120-line-3)">options:</text><text class="terminal-2958388120-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2958388120-line-3)"> -</text><text class="terminal-2958388120-r1" x="0" y="117.6" textLength="549" clip-path="url(#terminal-2958388120-line-4)">  -h, --help  show this help message and exit</text><text class="terminal-2958388120-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2958388120-line-4)"> -</text><text class="terminal-2958388120-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2958388120-line-5)"> + <g class="terminal-1643610534-matrix"> + <text class="terminal-1643610534-r1" x="0" y="20" textLength="231.8" clip-path="url(#terminal-1643610534-line-0)">$ cz example --help</text><text class="terminal-1643610534-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1643610534-line-0)"> +</text><text class="terminal-1643610534-r1" x="0" y="44.4" textLength="219.6" clip-path="url(#terminal-1643610534-line-1)">usage: cz example </text><text class="terminal-1643610534-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1643610534-line-1)">[</text><text class="terminal-1643610534-r1" x="231.8" y="44.4" textLength="24.4" clip-path="url(#terminal-1643610534-line-1)">-h</text><text class="terminal-1643610534-r2" x="256.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1643610534-line-1)">]</text><text class="terminal-1643610534-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1643610534-line-1)"> +</text><text class="terminal-1643610534-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1643610534-line-2)"> +</text><text class="terminal-1643610534-r1" x="0" y="93.2" textLength="231.8" clip-path="url(#terminal-1643610534-line-3)">show commit example</text><text class="terminal-1643610534-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1643610534-line-3)"> +</text><text class="terminal-1643610534-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1643610534-line-4)"> +</text><text class="terminal-1643610534-r1" x="0" y="142" textLength="97.6" clip-path="url(#terminal-1643610534-line-5)">options:</text><text class="terminal-1643610534-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1643610534-line-5)"> +</text><text class="terminal-1643610534-r1" x="0" y="166.4" textLength="549" clip-path="url(#terminal-1643610534-line-6)">  -h, --help  show this help message and exit</text><text class="terminal-1643610534-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1643610534-line-6)"> +</text><text class="terminal-1643610534-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1643610534-line-7)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_info___help.svg b/docs/images/cli_help/cz_info___help.svg index 8059ec466c..b8827e34c2 100644 --- a/docs/images/cli_help/cz_info___help.svg +++ b/docs/images/cli_help/cz_info___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 196.39999999999998" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 245.2" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,60 +19,68 @@ font-weight: 700; } - .terminal-2494261528-matrix { + .terminal-4196041424-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2494261528-title { + .terminal-4196041424-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2494261528-r1 { fill: #c5c8c6 } -.terminal-2494261528-r2 { fill: #c5c8c6;font-weight: bold } + .terminal-4196041424-r1 { fill: #c5c8c6 } +.terminal-4196041424-r2 { fill: #c5c8c6;font-weight: bold } </style> <defs> - <clipPath id="terminal-2494261528-clip-terminal"> - <rect x="0" y="0" width="975.0" height="145.39999999999998" /> + <clipPath id="terminal-4196041424-clip-terminal"> + <rect x="0" y="0" width="975.0" height="194.2" /> </clipPath> - <clipPath id="terminal-2494261528-line-0"> + <clipPath id="terminal-4196041424-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2494261528-line-1"> +<clipPath id="terminal-4196041424-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2494261528-line-2"> +<clipPath id="terminal-4196041424-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2494261528-line-3"> +<clipPath id="terminal-4196041424-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2494261528-line-4"> +<clipPath id="terminal-4196041424-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-4196041424-line-5"> + <rect x="0" y="123.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-4196041424-line-6"> + <rect x="0" y="147.9" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="194.4" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="243.2" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-2494261528-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-4196041424-clip-terminal)"> - <g class="terminal-2494261528-matrix"> - <text class="terminal-2494261528-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-2494261528-line-0)">$ cz info --help</text><text class="terminal-2494261528-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2494261528-line-0)"> -</text><text class="terminal-2494261528-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-2494261528-line-1)">usage: cz info </text><text class="terminal-2494261528-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2494261528-line-1)">[</text><text class="terminal-2494261528-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2494261528-line-1)">-h</text><text class="terminal-2494261528-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2494261528-line-1)">]</text><text class="terminal-2494261528-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2494261528-line-1)"> -</text><text class="terminal-2494261528-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2494261528-line-2)"> -</text><text class="terminal-2494261528-r1" x="0" y="93.2" textLength="97.6" clip-path="url(#terminal-2494261528-line-3)">options:</text><text class="terminal-2494261528-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2494261528-line-3)"> -</text><text class="terminal-2494261528-r1" x="0" y="117.6" textLength="549" clip-path="url(#terminal-2494261528-line-4)">  -h, --help  show this help message and exit</text><text class="terminal-2494261528-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2494261528-line-4)"> -</text><text class="terminal-2494261528-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2494261528-line-5)"> + <g class="terminal-4196041424-matrix"> + <text class="terminal-4196041424-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-4196041424-line-0)">$ cz info --help</text><text class="terminal-4196041424-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-4196041424-line-0)"> +</text><text class="terminal-4196041424-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-4196041424-line-1)">usage: cz info </text><text class="terminal-4196041424-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-4196041424-line-1)">[</text><text class="terminal-4196041424-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-4196041424-line-1)">-h</text><text class="terminal-4196041424-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4196041424-line-1)">]</text><text class="terminal-4196041424-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-4196041424-line-1)"> +</text><text class="terminal-4196041424-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-4196041424-line-2)"> +</text><text class="terminal-4196041424-r1" x="0" y="93.2" textLength="353.8" clip-path="url(#terminal-4196041424-line-3)">show information about the cz</text><text class="terminal-4196041424-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-4196041424-line-3)"> +</text><text class="terminal-4196041424-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-4196041424-line-4)"> +</text><text class="terminal-4196041424-r1" x="0" y="142" textLength="97.6" clip-path="url(#terminal-4196041424-line-5)">options:</text><text class="terminal-4196041424-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-4196041424-line-5)"> +</text><text class="terminal-4196041424-r1" x="0" y="166.4" textLength="549" clip-path="url(#terminal-4196041424-line-6)">  -h, --help  show this help message and exit</text><text class="terminal-4196041424-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-4196041424-line-6)"> +</text><text class="terminal-4196041424-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-4196041424-line-7)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_init___help.svg b/docs/images/cli_help/cz_init___help.svg index 6bcd577160..41a950ebdb 100644 --- a/docs/images/cli_help/cz_init___help.svg +++ b/docs/images/cli_help/cz_init___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 196.39999999999998" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 245.2" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,60 +19,68 @@ font-weight: 700; } - .terminal-2788256040-matrix { + .terminal-1838121835-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2788256040-title { + .terminal-1838121835-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2788256040-r1 { fill: #c5c8c6 } -.terminal-2788256040-r2 { fill: #c5c8c6;font-weight: bold } + .terminal-1838121835-r1 { fill: #c5c8c6 } +.terminal-1838121835-r2 { fill: #c5c8c6;font-weight: bold } </style> <defs> - <clipPath id="terminal-2788256040-clip-terminal"> - <rect x="0" y="0" width="975.0" height="145.39999999999998" /> + <clipPath id="terminal-1838121835-clip-terminal"> + <rect x="0" y="0" width="975.0" height="194.2" /> </clipPath> - <clipPath id="terminal-2788256040-line-0"> + <clipPath id="terminal-1838121835-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2788256040-line-1"> +<clipPath id="terminal-1838121835-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2788256040-line-2"> +<clipPath id="terminal-1838121835-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2788256040-line-3"> +<clipPath id="terminal-1838121835-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2788256040-line-4"> +<clipPath id="terminal-1838121835-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-1838121835-line-5"> + <rect x="0" y="123.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1838121835-line-6"> + <rect x="0" y="147.9" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="194.4" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="243.2" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-2788256040-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1838121835-clip-terminal)"> - <g class="terminal-2788256040-matrix"> - <text class="terminal-2788256040-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-2788256040-line-0)">$ cz init --help</text><text class="terminal-2788256040-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2788256040-line-0)"> -</text><text class="terminal-2788256040-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-2788256040-line-1)">usage: cz init </text><text class="terminal-2788256040-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2788256040-line-1)">[</text><text class="terminal-2788256040-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2788256040-line-1)">-h</text><text class="terminal-2788256040-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2788256040-line-1)">]</text><text class="terminal-2788256040-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2788256040-line-1)"> -</text><text class="terminal-2788256040-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2788256040-line-2)"> -</text><text class="terminal-2788256040-r1" x="0" y="93.2" textLength="97.6" clip-path="url(#terminal-2788256040-line-3)">options:</text><text class="terminal-2788256040-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2788256040-line-3)"> -</text><text class="terminal-2788256040-r1" x="0" y="117.6" textLength="549" clip-path="url(#terminal-2788256040-line-4)">  -h, --help  show this help message and exit</text><text class="terminal-2788256040-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2788256040-line-4)"> -</text><text class="terminal-2788256040-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2788256040-line-5)"> + <g class="terminal-1838121835-matrix"> + <text class="terminal-1838121835-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-1838121835-line-0)">$ cz init --help</text><text class="terminal-1838121835-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1838121835-line-0)"> +</text><text class="terminal-1838121835-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-1838121835-line-1)">usage: cz init </text><text class="terminal-1838121835-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-1838121835-line-1)">[</text><text class="terminal-1838121835-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-1838121835-line-1)">-h</text><text class="terminal-1838121835-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1838121835-line-1)">]</text><text class="terminal-1838121835-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1838121835-line-1)"> +</text><text class="terminal-1838121835-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1838121835-line-2)"> +</text><text class="terminal-1838121835-r1" x="0" y="93.2" textLength="353.8" clip-path="url(#terminal-1838121835-line-3)">init commitizen configuration</text><text class="terminal-1838121835-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1838121835-line-3)"> +</text><text class="terminal-1838121835-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1838121835-line-4)"> +</text><text class="terminal-1838121835-r1" x="0" y="142" textLength="97.6" clip-path="url(#terminal-1838121835-line-5)">options:</text><text class="terminal-1838121835-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1838121835-line-5)"> +</text><text class="terminal-1838121835-r1" x="0" y="166.4" textLength="549" clip-path="url(#terminal-1838121835-line-6)">  -h, --help  show this help message and exit</text><text class="terminal-1838121835-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1838121835-line-6)"> +</text><text class="terminal-1838121835-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1838121835-line-7)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_ls___help.svg b/docs/images/cli_help/cz_ls___help.svg index 390f5bbb42..3ec3532ef1 100644 --- a/docs/images/cli_help/cz_ls___help.svg +++ b/docs/images/cli_help/cz_ls___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 196.39999999999998" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 245.2" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,60 +19,68 @@ font-weight: 700; } - .terminal-2631362430-matrix { + .terminal-589791338-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2631362430-title { + .terminal-589791338-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2631362430-r1 { fill: #c5c8c6 } -.terminal-2631362430-r2 { fill: #c5c8c6;font-weight: bold } + .terminal-589791338-r1 { fill: #c5c8c6 } +.terminal-589791338-r2 { fill: #c5c8c6;font-weight: bold } </style> <defs> - <clipPath id="terminal-2631362430-clip-terminal"> - <rect x="0" y="0" width="975.0" height="145.39999999999998" /> + <clipPath id="terminal-589791338-clip-terminal"> + <rect x="0" y="0" width="975.0" height="194.2" /> </clipPath> - <clipPath id="terminal-2631362430-line-0"> + <clipPath id="terminal-589791338-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2631362430-line-1"> +<clipPath id="terminal-589791338-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2631362430-line-2"> +<clipPath id="terminal-589791338-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2631362430-line-3"> +<clipPath id="terminal-589791338-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2631362430-line-4"> +<clipPath id="terminal-589791338-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-589791338-line-5"> + <rect x="0" y="123.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-589791338-line-6"> + <rect x="0" y="147.9" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="194.4" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="243.2" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-2631362430-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-589791338-clip-terminal)"> - <g class="terminal-2631362430-matrix"> - <text class="terminal-2631362430-r1" x="0" y="20" textLength="170.8" clip-path="url(#terminal-2631362430-line-0)">$ cz ls --help</text><text class="terminal-2631362430-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2631362430-line-0)"> -</text><text class="terminal-2631362430-r1" x="0" y="44.4" textLength="158.6" clip-path="url(#terminal-2631362430-line-1)">usage: cz ls </text><text class="terminal-2631362430-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2631362430-line-1)">[</text><text class="terminal-2631362430-r1" x="170.8" y="44.4" textLength="24.4" clip-path="url(#terminal-2631362430-line-1)">-h</text><text class="terminal-2631362430-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2631362430-line-1)">]</text><text class="terminal-2631362430-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2631362430-line-1)"> -</text><text class="terminal-2631362430-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2631362430-line-2)"> -</text><text class="terminal-2631362430-r1" x="0" y="93.2" textLength="97.6" clip-path="url(#terminal-2631362430-line-3)">options:</text><text class="terminal-2631362430-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2631362430-line-3)"> -</text><text class="terminal-2631362430-r1" x="0" y="117.6" textLength="549" clip-path="url(#terminal-2631362430-line-4)">  -h, --help  show this help message and exit</text><text class="terminal-2631362430-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2631362430-line-4)"> -</text><text class="terminal-2631362430-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2631362430-line-5)"> + <g class="terminal-589791338-matrix"> + <text class="terminal-589791338-r1" x="0" y="20" textLength="170.8" clip-path="url(#terminal-589791338-line-0)">$ cz ls --help</text><text class="terminal-589791338-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-589791338-line-0)"> +</text><text class="terminal-589791338-r1" x="0" y="44.4" textLength="158.6" clip-path="url(#terminal-589791338-line-1)">usage: cz ls </text><text class="terminal-589791338-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-589791338-line-1)">[</text><text class="terminal-589791338-r1" x="170.8" y="44.4" textLength="24.4" clip-path="url(#terminal-589791338-line-1)">-h</text><text class="terminal-589791338-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-589791338-line-1)">]</text><text class="terminal-589791338-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-589791338-line-1)"> +</text><text class="terminal-589791338-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-589791338-line-2)"> +</text><text class="terminal-589791338-r1" x="0" y="93.2" textLength="317.2" clip-path="url(#terminal-589791338-line-3)">show available commitizens</text><text class="terminal-589791338-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-589791338-line-3)"> +</text><text class="terminal-589791338-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-589791338-line-4)"> +</text><text class="terminal-589791338-r1" x="0" y="142" textLength="97.6" clip-path="url(#terminal-589791338-line-5)">options:</text><text class="terminal-589791338-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-589791338-line-5)"> +</text><text class="terminal-589791338-r1" x="0" y="166.4" textLength="549" clip-path="url(#terminal-589791338-line-6)">  -h, --help  show this help message and exit</text><text class="terminal-589791338-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-589791338-line-6)"> +</text><text class="terminal-589791338-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-589791338-line-7)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_schema___help.svg b/docs/images/cli_help/cz_schema___help.svg index 443634428d..afe8982e9a 100644 --- a/docs/images/cli_help/cz_schema___help.svg +++ b/docs/images/cli_help/cz_schema___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 196.39999999999998" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 245.2" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,60 +19,68 @@ font-weight: 700; } - .terminal-2172349090-matrix { + .terminal-1497071669-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2172349090-title { + .terminal-1497071669-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2172349090-r1 { fill: #c5c8c6 } -.terminal-2172349090-r2 { fill: #c5c8c6;font-weight: bold } + .terminal-1497071669-r1 { fill: #c5c8c6 } +.terminal-1497071669-r2 { fill: #c5c8c6;font-weight: bold } </style> <defs> - <clipPath id="terminal-2172349090-clip-terminal"> - <rect x="0" y="0" width="975.0" height="145.39999999999998" /> + <clipPath id="terminal-1497071669-clip-terminal"> + <rect x="0" y="0" width="975.0" height="194.2" /> </clipPath> - <clipPath id="terminal-2172349090-line-0"> + <clipPath id="terminal-1497071669-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2172349090-line-1"> +<clipPath id="terminal-1497071669-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2172349090-line-2"> +<clipPath id="terminal-1497071669-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2172349090-line-3"> +<clipPath id="terminal-1497071669-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2172349090-line-4"> +<clipPath id="terminal-1497071669-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-1497071669-line-5"> + <rect x="0" y="123.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1497071669-line-6"> + <rect x="0" y="147.9" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="194.4" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="243.2" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-2172349090-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1497071669-clip-terminal)"> - <g class="terminal-2172349090-matrix"> - <text class="terminal-2172349090-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-2172349090-line-0)">$ cz schema --help</text><text class="terminal-2172349090-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2172349090-line-0)"> -</text><text class="terminal-2172349090-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-2172349090-line-1)">usage: cz schema </text><text class="terminal-2172349090-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2172349090-line-1)">[</text><text class="terminal-2172349090-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-2172349090-line-1)">-h</text><text class="terminal-2172349090-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-2172349090-line-1)">]</text><text class="terminal-2172349090-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2172349090-line-1)"> -</text><text class="terminal-2172349090-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2172349090-line-2)"> -</text><text class="terminal-2172349090-r1" x="0" y="93.2" textLength="97.6" clip-path="url(#terminal-2172349090-line-3)">options:</text><text class="terminal-2172349090-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2172349090-line-3)"> -</text><text class="terminal-2172349090-r1" x="0" y="117.6" textLength="549" clip-path="url(#terminal-2172349090-line-4)">  -h, --help  show this help message and exit</text><text class="terminal-2172349090-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2172349090-line-4)"> -</text><text class="terminal-2172349090-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2172349090-line-5)"> + <g class="terminal-1497071669-matrix"> + <text class="terminal-1497071669-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-1497071669-line-0)">$ cz schema --help</text><text class="terminal-1497071669-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1497071669-line-0)"> +</text><text class="terminal-1497071669-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-1497071669-line-1)">usage: cz schema </text><text class="terminal-1497071669-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1497071669-line-1)">[</text><text class="terminal-1497071669-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-1497071669-line-1)">-h</text><text class="terminal-1497071669-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1497071669-line-1)">]</text><text class="terminal-1497071669-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1497071669-line-1)"> +</text><text class="terminal-1497071669-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1497071669-line-2)"> +</text><text class="terminal-1497071669-r1" x="0" y="93.2" textLength="219.6" clip-path="url(#terminal-1497071669-line-3)">show commit schema</text><text class="terminal-1497071669-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1497071669-line-3)"> +</text><text class="terminal-1497071669-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1497071669-line-4)"> +</text><text class="terminal-1497071669-r1" x="0" y="142" textLength="97.6" clip-path="url(#terminal-1497071669-line-5)">options:</text><text class="terminal-1497071669-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1497071669-line-5)"> +</text><text class="terminal-1497071669-r1" x="0" y="166.4" textLength="549" clip-path="url(#terminal-1497071669-line-6)">  -h, --help  show this help message and exit</text><text class="terminal-1497071669-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1497071669-line-6)"> +</text><text class="terminal-1497071669-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1497071669-line-7)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_version___help.svg b/docs/images/cli_help/cz_version___help.svg index 0d14aaffa1..c7777db4df 100644 --- a/docs/images/cli_help/cz_version___help.svg +++ b/docs/images/cli_help/cz_version___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 318.4" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 391.59999999999997" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,80 +19,92 @@ font-weight: 700; } - .terminal-1533814420-matrix { + .terminal-4023877003-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1533814420-title { + .terminal-4023877003-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1533814420-r1 { fill: #c5c8c6 } -.terminal-1533814420-r2 { fill: #c5c8c6;font-weight: bold } + .terminal-4023877003-r1 { fill: #c5c8c6 } +.terminal-4023877003-r2 { fill: #c5c8c6;font-weight: bold } </style> <defs> - <clipPath id="terminal-1533814420-clip-terminal"> - <rect x="0" y="0" width="975.0" height="267.4" /> + <clipPath id="terminal-4023877003-clip-terminal"> + <rect x="0" y="0" width="975.0" height="340.59999999999997" /> </clipPath> - <clipPath id="terminal-1533814420-line-0"> + <clipPath id="terminal-4023877003-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1533814420-line-1"> +<clipPath id="terminal-4023877003-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1533814420-line-2"> +<clipPath id="terminal-4023877003-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1533814420-line-3"> +<clipPath id="terminal-4023877003-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1533814420-line-4"> +<clipPath id="terminal-4023877003-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1533814420-line-5"> +<clipPath id="terminal-4023877003-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1533814420-line-6"> +<clipPath id="terminal-4023877003-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1533814420-line-7"> +<clipPath id="terminal-4023877003-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1533814420-line-8"> +<clipPath id="terminal-4023877003-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1533814420-line-9"> +<clipPath id="terminal-4023877003-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-4023877003-line-10"> + <rect x="0" y="245.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-4023877003-line-11"> + <rect x="0" y="269.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-4023877003-line-12"> + <rect x="0" y="294.3" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="316.4" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="389.6" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-1533814420-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-4023877003-clip-terminal)"> - <g class="terminal-1533814420-matrix"> - <text class="terminal-1533814420-r1" x="0" y="20" textLength="231.8" clip-path="url(#terminal-1533814420-line-0)">$ cz version --help</text><text class="terminal-1533814420-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1533814420-line-0)"> -</text><text class="terminal-1533814420-r1" x="0" y="44.4" textLength="219.6" clip-path="url(#terminal-1533814420-line-1)">usage: cz version </text><text class="terminal-1533814420-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)">[</text><text class="terminal-1533814420-r1" x="231.8" y="44.4" textLength="24.4" clip-path="url(#terminal-1533814420-line-1)">-h</text><text class="terminal-1533814420-r2" x="256.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)">]</text><text class="terminal-1533814420-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)">[</text><text class="terminal-1533814420-r1" x="292.8" y="44.4" textLength="207.4" clip-path="url(#terminal-1533814420-line-1)">-r | -p | -c | -v</text><text class="terminal-1533814420-r2" x="500.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)">]</text><text class="terminal-1533814420-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-1)"> -</text><text class="terminal-1533814420-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1533814420-line-2)"> -</text><text class="terminal-1533814420-r1" x="0" y="93.2" textLength="97.6" clip-path="url(#terminal-1533814420-line-3)">options:</text><text class="terminal-1533814420-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1533814420-line-3)"> -</text><text class="terminal-1533814420-r1" x="0" y="117.6" textLength="622.2" clip-path="url(#terminal-1533814420-line-4)">  -h, --help        show this help message and exit</text><text class="terminal-1533814420-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1533814420-line-4)"> -</text><text class="terminal-1533814420-r1" x="0" y="142" textLength="744.2" clip-path="url(#terminal-1533814420-line-5)">  -r, --report      get system information for reporting bugs</text><text class="terminal-1533814420-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1533814420-line-5)"> -</text><text class="terminal-1533814420-r1" x="0" y="166.4" textLength="707.6" clip-path="url(#terminal-1533814420-line-6)">  -p, --project     get the version of the current project</text><text class="terminal-1533814420-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1533814420-line-6)"> -</text><text class="terminal-1533814420-r1" x="0" y="190.8" textLength="768.6" clip-path="url(#terminal-1533814420-line-7)">  -c, --commitizen  get the version of the installed commitizen</text><text class="terminal-1533814420-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1533814420-line-7)"> -</text><text class="terminal-1533814420-r1" x="0" y="215.2" textLength="927.2" clip-path="url(#terminal-1533814420-line-8)">  -v, --verbose     get the version of both the installed commitizen and the</text><text class="terminal-1533814420-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1533814420-line-8)"> -</text><text class="terminal-1533814420-r1" x="0" y="239.6" textLength="427" clip-path="url(#terminal-1533814420-line-9)">                    current project</text><text class="terminal-1533814420-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1533814420-line-9)"> -</text><text class="terminal-1533814420-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1533814420-line-10)"> + <g class="terminal-4023877003-matrix"> + <text class="terminal-4023877003-r1" x="0" y="20" textLength="231.8" clip-path="url(#terminal-4023877003-line-0)">$ cz version --help</text><text class="terminal-4023877003-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-4023877003-line-0)"> +</text><text class="terminal-4023877003-r1" x="0" y="44.4" textLength="219.6" clip-path="url(#terminal-4023877003-line-1)">usage: cz version </text><text class="terminal-4023877003-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4023877003-line-1)">[</text><text class="terminal-4023877003-r1" x="231.8" y="44.4" textLength="24.4" clip-path="url(#terminal-4023877003-line-1)">-h</text><text class="terminal-4023877003-r2" x="256.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4023877003-line-1)">]</text><text class="terminal-4023877003-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4023877003-line-1)">[</text><text class="terminal-4023877003-r1" x="292.8" y="44.4" textLength="207.4" clip-path="url(#terminal-4023877003-line-1)">-r | -p | -c | -v</text><text class="terminal-4023877003-r2" x="500.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4023877003-line-1)">]</text><text class="terminal-4023877003-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-4023877003-line-1)"> +</text><text class="terminal-4023877003-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-4023877003-line-2)"> +</text><text class="terminal-4023877003-r1" x="0" y="93.2" textLength="817.4" clip-path="url(#terminal-4023877003-line-3)">get the version of the installed commitizen or the current project </text><text class="terminal-4023877003-r2" x="817.4" y="93.2" textLength="12.2" clip-path="url(#terminal-4023877003-line-3)">(</text><text class="terminal-4023877003-r1" x="829.6" y="93.2" textLength="97.6" clip-path="url(#terminal-4023877003-line-3)">default:</text><text class="terminal-4023877003-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-4023877003-line-3)"> +</text><text class="terminal-4023877003-r1" x="0" y="117.6" textLength="244" clip-path="url(#terminal-4023877003-line-4)">installed commitizen</text><text class="terminal-4023877003-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-4023877003-line-4)">)</text><text class="terminal-4023877003-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-4023877003-line-4)"> +</text><text class="terminal-4023877003-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-4023877003-line-5)"> +</text><text class="terminal-4023877003-r1" x="0" y="166.4" textLength="97.6" clip-path="url(#terminal-4023877003-line-6)">options:</text><text class="terminal-4023877003-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-4023877003-line-6)"> +</text><text class="terminal-4023877003-r1" x="0" y="190.8" textLength="622.2" clip-path="url(#terminal-4023877003-line-7)">  -h, --help        show this help message and exit</text><text class="terminal-4023877003-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-4023877003-line-7)"> +</text><text class="terminal-4023877003-r1" x="0" y="215.2" textLength="744.2" clip-path="url(#terminal-4023877003-line-8)">  -r, --report      get system information for reporting bugs</text><text class="terminal-4023877003-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-4023877003-line-8)"> +</text><text class="terminal-4023877003-r1" x="0" y="239.6" textLength="707.6" clip-path="url(#terminal-4023877003-line-9)">  -p, --project     get the version of the current project</text><text class="terminal-4023877003-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-4023877003-line-9)"> +</text><text class="terminal-4023877003-r1" x="0" y="264" textLength="768.6" clip-path="url(#terminal-4023877003-line-10)">  -c, --commitizen  get the version of the installed commitizen</text><text class="terminal-4023877003-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-4023877003-line-10)"> +</text><text class="terminal-4023877003-r1" x="0" y="288.4" textLength="927.2" clip-path="url(#terminal-4023877003-line-11)">  -v, --verbose     get the version of both the installed commitizen and the</text><text class="terminal-4023877003-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-4023877003-line-11)"> +</text><text class="terminal-4023877003-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-4023877003-line-12)">                    current project</text><text class="terminal-4023877003-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-4023877003-line-12)"> +</text><text class="terminal-4023877003-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-4023877003-line-13)"> </text> </g> </g> From ee14038b3647ea160f16065d39dc80a6c1206e5b Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko <debian@onerussian.com> Date: Tue, 21 May 2024 14:15:42 -0400 Subject: [PATCH 269/685] docs: fix a few typos in CHANGELOG.md and .pre-commit-hooks.yaml Signed-off-by: Yaroslav Halchenko <debian@onerussian.com> --- .pre-commit-hooks.yaml | 2 +- CHANGELOG.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.pre-commit-hooks.yaml b/.pre-commit-hooks.yaml index 619e58622b..2a3a088484 100644 --- a/.pre-commit-hooks.yaml +++ b/.pre-commit-hooks.yaml @@ -1,7 +1,7 @@ - id: commitizen name: commitizen check description: > - Check whether the current commit message follows commiting rules. Allow + Check whether the current commit message follows committing rules. Allow empty commit messages by default, because they typically indicate to Git that the commit should be aborted. entry: cz check diff --git a/CHANGELOG.md b/CHANGELOG.md index b851d3ab12..15bb75490f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -784,7 +784,7 @@ ### Fix -- **check**: filter out comment messege when checking +- **check**: filter out comment message when checking ## v2.20.2 (2021-12-14) @@ -1035,7 +1035,7 @@ ### Fix -- prevent prerelase from creating a bump when there are no commits +- prevent prerelease from creating a bump when there are no commits ## v2.8.0 (2020-11-15) @@ -1522,7 +1522,7 @@ - new config system where each config type has its own class - **config**: add type annotation to config property -- **config**: fix wrongly type annoated functions +- **config**: fix wrongly type annotated functions - **config/ini_config**: move deprecation warning into class initialization - **config**: use add_path instead of directly assigning _path - **all**: replace all the _settings invoke with settings.update From 3761124d5d2b2434625d66466ef676cfa765909e Mon Sep 17 00:00:00 2001 From: Tim Tsai <timtsai@91app.com> Date: Tue, 21 May 2024 10:41:54 -0400 Subject: [PATCH 270/685] fix(base.py): add encoding when open changlelog_file #1110 --- commitizen/changelog_formats/base.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/commitizen/changelog_formats/base.py b/commitizen/changelog_formats/base.py index d0dfd9ec55..7c802d63d4 100644 --- a/commitizen/changelog_formats/base.py +++ b/commitizen/changelog_formats/base.py @@ -24,6 +24,7 @@ def __init__(self, config: BaseConfig): # Constructor needs to be redefined because `Protocol` prevent instantiation by default # See: https://bugs.python.org/issue44807 self.config = config + self.encoding = self.config.settings["encoding"] @property def version_parser(self) -> Pattern: @@ -33,7 +34,7 @@ def get_metadata(self, filepath: str) -> Metadata: if not os.path.isfile(filepath): return Metadata() - with open(filepath) as changelog_file: + with open(filepath, encoding=self.encoding) as changelog_file: return self.get_metadata_from_file(changelog_file) def get_metadata_from_file(self, file: IO[Any]) -> Metadata: From 642fe8c9cced6896d2f8d7af9b1a3a3adedd162d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Wed, 22 May 2024 03:02:21 +0000 Subject: [PATCH 271/685] =?UTF-8?q?bump:=20version=203.26.1=20=E2=86=92=20?= =?UTF-8?q?3.26.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f80bf93bb9..3017978009 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,7 +47,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.26.1 # automatically updated by Commitizen + rev: v3.26.2 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 15bb75490f..b73d8c09e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.26.2 (2024-05-22) + +### Fix + +- **base.py**: add encoding when open changlelog_file + ## v3.26.1 (2024-05-22) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 2fb3eb449b..b09545868b 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.26.1" +__version__ = "3.26.2" diff --git a/pyproject.toml b/pyproject.toml index 20d08b020f..22eece6bce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.26.1" +version = "3.26.2" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.26.1" +version = "3.26.2" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 4bf8ca65a2c6f5c4a6a09a86f9c76babed4a5ff3 Mon Sep 17 00:00:00 2001 From: Marcos Martins <contato@marcosmartins.me> Date: Mon, 20 May 2024 18:34:43 -0300 Subject: [PATCH 272/685] feat(config_files): add suport for "cz.toml" config file --- commitizen/defaults.py | 1 + docs/commands/bump.md | 4 ++-- docs/config.md | 6 +++--- docs/faq.md | 2 +- docs/getting_started.md | 2 +- tests/test_conf.py | 27 ++++++++++++++++++++------- 6 files changed, 28 insertions(+), 14 deletions(-) diff --git a/commitizen/defaults.py b/commitizen/defaults.py index a1651ebe88..75162619de 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -67,6 +67,7 @@ class Settings(TypedDict, total=False): "cz.json", ".cz.yaml", "cz.yaml", + "cz.toml", ] encoding: str = "utf-8" diff --git a/docs/commands/bump.md b/docs/commands/bump.md index 5f5590e885..4d370a6a1f 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -408,7 +408,7 @@ regarding if the file is present or not in `version_files`. Some examples -`pyproject.toml` or `.cz.toml` +`pyproject.toml`, `.cz.toml` or `cz.toml` ```toml [tool.commitizen] @@ -441,7 +441,7 @@ defaults to: `bump: version $current_version → $new_version` Some examples -`pyproject.toml` or `.cz.toml` +`pyproject.toml`, `.cz.toml` or `cz.toml` ```toml [tool.commitizen] diff --git a/docs/config.md b/docs/config.md index 398c045339..210b5d7ff8 100644 --- a/docs/config.md +++ b/docs/config.md @@ -227,11 +227,11 @@ Provide extra variables to the changelog template. [Read more][template-customiz ## Configuration file -### pyproject.toml or .cz.toml +### pyproject.toml, .cz.toml or cz.toml Default and recommended configuration format for a project. For a **python** project, we recommend adding an entry to your `pyproject.toml`. -You can also create a `.cz.toml` file at the root of your project folder. +You can also create a `.cz.toml` or `cz.toml` file at the root of your project folder. Example configuration: @@ -339,7 +339,7 @@ Commitizen provides some version providers for some well known formats: !!! note The `scm` provider is meant to be used with `setuptools-scm` or any packager `*-scm` plugin. -An example in your `.cz.toml` would look like this: +An example in your `.cz.toml` or `cz.toml` would look like this: ```toml [tool.commitizen] diff --git a/docs/faq.md b/docs/faq.md index 060de78c30..4bcb2bc7cf 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -57,7 +57,7 @@ They differ a bit in design, not sure if cz-js does any of this, but these are s - create custom rules, version bumps and changelog generation, by default we use the popular conventional commits (I think cz-js allows this). - single package, install one thing and it will work (cz-js is a monorepo, but you have to install different dependencies AFAIK) - pre-commit integration -- works on any language project, as long as you create the `.cz.toml` file. +- works on any language project, as long as you create the `.cz.toml` or `cz.toml` file. Where do they cross paths? diff --git a/docs/getting_started.md b/docs/getting_started.md index 7ceba2bb65..81da513e0b 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -8,7 +8,7 @@ The assistant utility will help you set up everything cz init ``` -Alternatively, create a file `.cz.toml` in your project's directory. +Alternatively, create a file `.cz.toml` or `cz.toml` in your project's directory. ```toml [tool.commitizen] diff --git a/tests/test_conf.py b/tests/test_conf.py index 786f12b36b..2a5e727d8d 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -214,19 +214,30 @@ def test_load_empty_pyproject_toml_from_config_argument(_, tmpdir): config.read_cfg(filepath="./not_in_root/pyproject.toml") +@pytest.mark.parametrize( + "config_file, exception_string", + [ + (".cz.toml", r"\.cz\.toml"), + ("cz.toml", r"cz\.toml"), + ("pyproject.toml", r"pyproject\.toml"), + ], + ids=[".cz.toml", "cz.toml", "pyproject.toml"], +) class TestTomlConfig: - def test_init_empty_config_content(self, tmpdir): - path = tmpdir.mkdir("commitizen").join(".cz.toml") + def test_init_empty_config_content(self, tmpdir, config_file, exception_string): + path = tmpdir.mkdir("commitizen").join(config_file) toml_config = config.TomlConfig(data="", path=path) toml_config.init_empty_config_content() with open(path, encoding="utf-8") as toml_file: assert toml_file.read() == "[tool.commitizen]\n" - def test_init_empty_config_content_with_existing_content(self, tmpdir): + def test_init_empty_config_content_with_existing_content( + self, tmpdir, config_file, exception_string + ): existing_content = "[tool.black]\n" "line-length = 88\n" - path = tmpdir.mkdir("commitizen").join(".cz.toml") + path = tmpdir.mkdir("commitizen").join(config_file) path.write(existing_content) toml_config = config.TomlConfig(data="", path=path) toml_config.init_empty_config_content() @@ -234,11 +245,13 @@ def test_init_empty_config_content_with_existing_content(self, tmpdir): with open(path, encoding="utf-8") as toml_file: assert toml_file.read() == existing_content + "\n[tool.commitizen]\n" - def test_init_with_invalid_config_content(self, tmpdir): + def test_init_with_invalid_config_content( + self, tmpdir, config_file, exception_string + ): existing_content = "invalid toml content" - path = tmpdir.mkdir("commitizen").join(".cz.toml") + path = tmpdir.mkdir("commitizen").join(config_file) - with pytest.raises(InvalidConfigurationError, match=r"\.cz\.toml"): + with pytest.raises(InvalidConfigurationError, match=exception_string): config.TomlConfig(data=existing_content, path=path) From 912fda84908a851425eb80b580b2aa35ae252158 Mon Sep 17 00:00:00 2001 From: Marcos Martins <contato@marcosmartins.me> Date: Tue, 21 May 2024 10:43:04 -0300 Subject: [PATCH 273/685] test: extend tests for 'TestJsonConfig' and 'TestYamlConfig' --- tests/test_conf.py | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/tests/test_conf.py b/tests/test_conf.py index 2a5e727d8d..ac49362979 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -255,35 +255,53 @@ def test_init_with_invalid_config_content( config.TomlConfig(data=existing_content, path=path) +@pytest.mark.parametrize( + "config_file, exception_string", + [ + (".cz.json", r"\.cz\.json"), + ("cz.json", r"cz\.json"), + ], + ids=[".cz.json", "cz.json"], +) class TestJsonConfig: - def test_init_empty_config_content(self, tmpdir): - path = tmpdir.mkdir("commitizen").join(".cz.json") + def test_init_empty_config_content(self, tmpdir, config_file, exception_string): + path = tmpdir.mkdir("commitizen").join(config_file) json_config = config.JsonConfig(data="{}", path=path) json_config.init_empty_config_content() with open(path, encoding="utf-8") as json_file: assert json.load(json_file) == {"commitizen": {}} - def test_init_with_invalid_config_content(self, tmpdir): + def test_init_with_invalid_config_content( + self, tmpdir, config_file, exception_string + ): existing_content = "invalid json content" - path = tmpdir.mkdir("commitizen").join(".cz.json") + path = tmpdir.mkdir("commitizen").join(config_file) - with pytest.raises(InvalidConfigurationError, match=r"\.cz\.json"): + with pytest.raises(InvalidConfigurationError, match=exception_string): config.JsonConfig(data=existing_content, path=path) +@pytest.mark.parametrize( + "config_file, exception_string", + [ + (".cz.yaml", r"\.cz\.yaml"), + ("cz.yaml", r"cz\.yaml"), + ], + ids=[".cz.yaml", "cz.yaml"], +) class TestYamlConfig: - def test_init_empty_config_content(self, tmpdir): - path = tmpdir.mkdir("commitizen").join(".cz.yaml") + def test_init_empty_config_content(self, tmpdir, config_file, exception_string): + path = tmpdir.mkdir("commitizen").join(config_file) yaml_config = config.YAMLConfig(data="{}", path=path) yaml_config.init_empty_config_content() with open(path) as yaml_file: assert yaml.safe_load(yaml_file) == {"commitizen": {}} - def test_init_with_invalid_content(self, tmpdir): + def test_init_with_invalid_content(self, tmpdir, config_file, exception_string): existing_content = "invalid: .cz.yaml: content: maybe?" - path = tmpdir.mkdir("commitizen").join(".cz.yaml") + path = tmpdir.mkdir("commitizen").join(config_file) - with pytest.raises(InvalidConfigurationError, match=r"\.cz\.yaml"): + with pytest.raises(InvalidConfigurationError, match=exception_string): config.YAMLConfig(data=existing_content, path=path) From e9aa5d979ea6fd14dcf59c6bd3836bef17d386c1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Wed, 22 May 2024 03:06:04 +0000 Subject: [PATCH 274/685] =?UTF-8?q?bump:=20version=203.26.2=20=E2=86=92=20?= =?UTF-8?q?3.27.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3017978009..350a7a95b2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,7 +47,7 @@ repos: exclude: "poetry.lock" - repo: https://github.com/commitizen-tools/commitizen - rev: v3.26.2 # automatically updated by Commitizen + rev: v3.27.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index b73d8c09e6..496d9f5fba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.27.0 (2024-05-22) + +### Feat + +- **config_files**: add suport for "cz.toml" config file + ## v3.26.2 (2024-05-22) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index b09545868b..62bfee6c53 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.26.2" +__version__ = "3.27.0" diff --git a/pyproject.toml b/pyproject.toml index 22eece6bce..523f271c77 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.26.2" +version = "3.27.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.26.2" +version = "3.27.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From f8e37a0769e50c68b6a6380c847baea99a68e9d0 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Mon, 20 May 2024 15:57:55 -0400 Subject: [PATCH 275/685] build: add I into ruff lint and add "ruff check --fix" to format script to enable import sorting --- pyproject.toml | 11 ++++++++++- scripts/format | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 523f271c77..29f1eeddef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -149,7 +149,16 @@ addopts = "--strict-markers" line-length = 88 [tool.ruff.lint] -select = ["E", "F", "UP"] +select = [ + # pycodestyle + "E", + # Pyflakes + "F", + # pyupgrade + "UP", + # isort + "I", +] ignore = [ "E501", "D1", diff --git a/scripts/format b/scripts/format index e1282f598d..2aafc4f6e2 100755 --- a/scripts/format +++ b/scripts/format @@ -5,5 +5,7 @@ export PREFIX="poetry run python -m " set -x +# This is needed for running import sorting +${PREFIX}ruff check --fix commitizen tests ${PREFIX}ruff format commitizen tests ${PREFIX}black commitizen tests From 5a0053c83a8c56d0be3b17a5a6a71ca7552ed64f Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Mon, 20 May 2024 15:58:24 -0400 Subject: [PATCH 276/685] style: sort import --- commitizen/changelog_formats/__init__.py | 3 +-- commitizen/changelog_formats/restructuredtext.py | 2 +- commitizen/commands/bump.py | 4 ++-- commitizen/commands/changelog.py | 7 +++---- commitizen/commands/commit.py | 1 - commitizen/commands/init.py | 1 + commitizen/config/__init__.py | 2 +- commitizen/config/json_config.py | 2 +- commitizen/config/toml_config.py | 1 + commitizen/config/yaml_config.py | 2 +- commitizen/cz/utils.py | 4 ++-- commitizen/defaults.py | 4 +--- commitizen/providers/__init__.py | 1 - commitizen/providers/cargo_provider.py | 1 - commitizen/providers/commitizen_provider.py | 1 - commitizen/providers/composer_provider.py | 1 - commitizen/providers/npm_provider.py | 1 - commitizen/providers/pep621_provider.py | 1 - commitizen/providers/poetry_provider.py | 1 - commitizen/providers/scm_provider.py | 6 ++---- tests/commands/test_bump_command.py | 2 +- tests/commands/test_changelog_command.py | 4 ++-- tests/commands/test_commit_command.py | 3 +-- tests/commands/test_example_command.py | 4 ++-- tests/commands/test_info_command.py | 5 +++-- tests/commands/test_init_command.py | 1 - tests/commands/test_ls_command.py | 4 ++-- tests/commands/test_schema_command.py | 4 ++-- tests/conftest.py | 6 +++--- tests/providers/test_base_provider.py | 1 - tests/providers/test_cargo_provider.py | 1 - tests/providers/test_commitizen_provider.py | 2 -- tests/providers/test_composer_provider.py | 1 - tests/providers/test_npm_provider.py | 1 - tests/providers/test_pep621_provider.py | 1 - tests/providers/test_poetry_provider.py | 1 - tests/providers/test_scm_provider.py | 1 - tests/test_changelog.py | 3 +-- tests/test_changelog_format_asciidoc.py | 3 +-- tests/test_changelog_format_markdown.py | 3 +-- tests/test_changelog_format_restructuredtext.py | 2 +- tests/test_changelog_format_textile.py | 3 +-- tests/test_changelog_formats.py | 3 ++- tests/test_cli.py | 4 ++-- tests/test_conf.py | 2 +- tests/test_git.py | 4 ++-- tests/test_version_schemes.py | 2 +- tests/utils.py | 3 +-- 48 files changed, 47 insertions(+), 73 deletions(-) diff --git a/commitizen/changelog_formats/__init__.py b/commitizen/changelog_formats/__init__.py index 85df4b5144..b91579ee71 100644 --- a/commitizen/changelog_formats/__init__.py +++ b/commitizen/changelog_formats/__init__.py @@ -5,9 +5,8 @@ import importlib_metadata as metadata from commitizen.changelog import Metadata -from commitizen.exceptions import ChangelogFormatUnknown from commitizen.config.base_config import BaseConfig - +from commitizen.exceptions import ChangelogFormatUnknown CHANGELOG_FORMAT_ENTRYPOINT = "commitizen.changelog_format" TEMPLATE_EXTENSION = "j2" diff --git a/commitizen/changelog_formats/restructuredtext.py b/commitizen/changelog_formats/restructuredtext.py index a252fe1514..37acf81ef3 100644 --- a/commitizen/changelog_formats/restructuredtext.py +++ b/commitizen/changelog_formats/restructuredtext.py @@ -3,7 +3,7 @@ import re import sys from itertools import zip_longest -from typing import IO, TYPE_CHECKING, Any, Union, Tuple +from typing import IO, TYPE_CHECKING, Any, Tuple, Union from commitizen.changelog import Metadata diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 554e3c800b..8497384665 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -6,6 +6,7 @@ import questionary from commitizen import bump, factory, git, hooks, out +from commitizen.changelog_formats import get_changelog_format from commitizen.commands.changelog import Changelog from commitizen.config import BaseConfig from commitizen.exceptions import ( @@ -21,13 +22,12 @@ NotAllowed, NoVersionSpecifiedError, ) -from commitizen.changelog_formats import get_changelog_format from commitizen.providers import get_provider from commitizen.version_schemes import ( - get_version_scheme, Increment, InvalidVersion, Prerelease, + get_version_scheme, ) logger = getLogger("commitizen") diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index f1b69598f1..bda7a1844f 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -7,9 +7,10 @@ from typing import Callable, cast from commitizen import bump, changelog, defaults, factory, git, out - +from commitizen.changelog_formats import get_changelog_format from commitizen.config import BaseConfig -from commitizen.cz.base import MessageBuilderHook, ChangelogReleaseHook +from commitizen.cz.base import ChangelogReleaseHook, MessageBuilderHook +from commitizen.cz.utils import strip_local_version from commitizen.exceptions import ( DryRunExit, NoCommitsFoundError, @@ -18,10 +19,8 @@ NotAGitProjectError, NotAllowed, ) -from commitizen.changelog_formats import get_changelog_format from commitizen.git import GitTag, smart_open from commitizen.version_schemes import get_version_scheme -from commitizen.cz.utils import strip_local_version class Changelog: diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index df28b2a5dd..0816b2e508 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -3,7 +3,6 @@ import contextlib import os - import questionary from commitizen import factory, git, out diff --git a/commitizen/commands/init.py b/commitizen/commands/init.py index 9775ec7fc8..ffc5e3eb3b 100644 --- a/commitizen/commands/init.py +++ b/commitizen/commands/init.py @@ -6,6 +6,7 @@ import questionary import yaml + from commitizen import cmd, factory, out from commitizen.__version__ import __version__ from commitizen.config import BaseConfig, JsonConfig, TomlConfig, YAMLConfig diff --git a/commitizen/config/__init__.py b/commitizen/config/__init__.py index a9395fca7d..f3720bb1b3 100644 --- a/commitizen/config/__init__.py +++ b/commitizen/config/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from commitizen import defaults, git -from commitizen.exceptions import ConfigFileNotFound, ConfigFileIsEmpty +from commitizen.exceptions import ConfigFileIsEmpty, ConfigFileNotFound from .base_config import BaseConfig from .json_config import JsonConfig diff --git a/commitizen/config/json_config.py b/commitizen/config/json_config.py index cf554922d6..b6a07f4ced 100644 --- a/commitizen/config/json_config.py +++ b/commitizen/config/json_config.py @@ -2,8 +2,8 @@ import json from pathlib import Path -from commitizen.exceptions import InvalidConfigurationError +from commitizen.exceptions import InvalidConfigurationError from commitizen.git import smart_open from .base_config import BaseConfig diff --git a/commitizen/config/toml_config.py b/commitizen/config/toml_config.py index d45860d650..813389cbcf 100644 --- a/commitizen/config/toml_config.py +++ b/commitizen/config/toml_config.py @@ -6,6 +6,7 @@ from tomlkit import exceptions, parse, table from commitizen.exceptions import InvalidConfigurationError + from .base_config import BaseConfig diff --git a/commitizen/config/yaml_config.py b/commitizen/config/yaml_config.py index 396e2eba11..2bb6fe3af8 100644 --- a/commitizen/config/yaml_config.py +++ b/commitizen/config/yaml_config.py @@ -4,8 +4,8 @@ import yaml -from commitizen.git import smart_open from commitizen.exceptions import InvalidConfigurationError +from commitizen.git import smart_open from .base_config import BaseConfig diff --git a/commitizen/cz/utils.py b/commitizen/cz/utils.py index 4df2edf39c..7bc89673c6 100644 --- a/commitizen/cz/utils.py +++ b/commitizen/cz/utils.py @@ -1,9 +1,9 @@ -import re import os +import re import tempfile -from commitizen.cz import exceptions from commitizen import git +from commitizen.cz import exceptions def required_validator(answer, msg=None): diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 75162619de..e4363f4ab0 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -2,9 +2,7 @@ import pathlib from collections import OrderedDict -from typing import Any, Iterable, MutableMapping - -from typing import TypedDict +from typing import Any, Iterable, MutableMapping, TypedDict # Type Questions = Iterable[MutableMapping[str, Any]] diff --git a/commitizen/providers/__init__.py b/commitizen/providers/__init__.py index 51302d2b37..a177b29961 100644 --- a/commitizen/providers/__init__.py +++ b/commitizen/providers/__init__.py @@ -6,7 +6,6 @@ from commitizen.config.base_config import BaseConfig from commitizen.exceptions import VersionProviderUnknown - from commitizen.providers.base_provider import VersionProvider from commitizen.providers.cargo_provider import CargoProvider from commitizen.providers.commitizen_provider import CommitizenProvider diff --git a/commitizen/providers/cargo_provider.py b/commitizen/providers/cargo_provider.py index f64c003edd..cee687c15b 100644 --- a/commitizen/providers/cargo_provider.py +++ b/commitizen/providers/cargo_provider.py @@ -2,7 +2,6 @@ import tomlkit - from commitizen.providers.base_provider import TomlProvider diff --git a/commitizen/providers/commitizen_provider.py b/commitizen/providers/commitizen_provider.py index fd0cdb3ebf..a1da25ff72 100644 --- a/commitizen/providers/commitizen_provider.py +++ b/commitizen/providers/commitizen_provider.py @@ -1,6 +1,5 @@ from __future__ import annotations - from commitizen.providers.base_provider import VersionProvider diff --git a/commitizen/providers/composer_provider.py b/commitizen/providers/composer_provider.py index ef36af5a72..495357d8f0 100644 --- a/commitizen/providers/composer_provider.py +++ b/commitizen/providers/composer_provider.py @@ -1,6 +1,5 @@ from __future__ import annotations - from commitizen.providers.base_provider import JsonProvider diff --git a/commitizen/providers/npm_provider.py b/commitizen/providers/npm_provider.py index f625c3c6c3..12900ff7de 100644 --- a/commitizen/providers/npm_provider.py +++ b/commitizen/providers/npm_provider.py @@ -4,7 +4,6 @@ from pathlib import Path from typing import Any, ClassVar - from commitizen.providers.base_provider import VersionProvider diff --git a/commitizen/providers/pep621_provider.py b/commitizen/providers/pep621_provider.py index b6d32f1a63..0b8b5c4b87 100644 --- a/commitizen/providers/pep621_provider.py +++ b/commitizen/providers/pep621_provider.py @@ -1,6 +1,5 @@ from __future__ import annotations - from commitizen.providers.base_provider import TomlProvider diff --git a/commitizen/providers/poetry_provider.py b/commitizen/providers/poetry_provider.py index d301131115..7aa28f56d9 100644 --- a/commitizen/providers/poetry_provider.py +++ b/commitizen/providers/poetry_provider.py @@ -2,7 +2,6 @@ import tomlkit - from commitizen.providers.base_provider import TomlProvider diff --git a/commitizen/providers/scm_provider.py b/commitizen/providers/scm_provider.py index 37329d07a5..00df3e4153 100644 --- a/commitizen/providers/scm_provider.py +++ b/commitizen/providers/scm_provider.py @@ -3,17 +3,15 @@ import re from typing import Callable - from commitizen.git import get_tags +from commitizen.providers.base_provider import VersionProvider from commitizen.version_schemes import ( - get_version_scheme, InvalidVersion, Version, VersionProtocol, + get_version_scheme, ) -from commitizen.providers.base_provider import VersionProvider - class ScmProvider(VersionProvider): """ diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index b20f75169a..a0271c322e 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -12,6 +12,7 @@ import commitizen.commands.bump as bump from commitizen import cli, cmd, git, hooks +from commitizen.changelog_formats import ChangelogFormat from commitizen.cz.base import BaseCommitizen from commitizen.exceptions import ( BumpTagFailedError, @@ -28,7 +29,6 @@ NotAllowed, NoVersionSpecifiedError, ) -from commitizen.changelog_formats import ChangelogFormat from tests.utils import create_file_and_commit, create_tag, skip_below_py_3_10 diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index 67f10a8ac0..4694d33305 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -11,6 +11,7 @@ from commitizen import __file__ as commitizen_init from commitizen import cli, git +from commitizen.changelog_formats import ChangelogFormat from commitizen.commands.changelog import Changelog from commitizen.config.base_config import BaseConfig from commitizen.cz.base import BaseCommitizen @@ -22,16 +23,15 @@ NotAGitProjectError, NotAllowed, ) -from commitizen.changelog_formats import ChangelogFormat from tests.utils import ( create_branch, create_file_and_commit, create_tag, get_current_branch, merge_branch, + skip_below_py_3_10, switch_branch, wait_for_tag, - skip_below_py_3_10, ) diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index 2085278757..8ae7568a9d 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -1,9 +1,9 @@ import os import sys +from unittest.mock import ANY import pytest from pytest_mock import MockFixture -from unittest.mock import ANY from commitizen import cli, cmd, commands from commitizen.cz.exceptions import CzException @@ -19,7 +19,6 @@ NotAllowed, NothingToCommitError, ) - from tests.utils import skip_below_py_3_10 diff --git a/tests/commands/test_example_command.py b/tests/commands/test_example_command.py index e0c2141453..0521679f1c 100644 --- a/tests/commands/test_example_command.py +++ b/tests/commands/test_example_command.py @@ -1,9 +1,9 @@ -import pytest import sys -from commitizen import cli, commands +import pytest from pytest_mock import MockerFixture +from commitizen import cli, commands from tests.utils import skip_below_py_3_10 diff --git a/tests/commands/test_info_command.py b/tests/commands/test_info_command.py index 6221630acc..2bd1553679 100644 --- a/tests/commands/test_info_command.py +++ b/tests/commands/test_info_command.py @@ -1,8 +1,9 @@ -import pytest import sys -from commitizen import cli, commands +import pytest from pytest_mock import MockerFixture + +from commitizen import cli, commands from tests.utils import skip_below_py_3_10 diff --git a/tests/commands/test_init_command.py b/tests/commands/test_init_command.py index a263e73a8e..ea18e89a2b 100644 --- a/tests/commands/test_init_command.py +++ b/tests/commands/test_init_command.py @@ -12,7 +12,6 @@ from commitizen import cli, commands from commitizen.__version__ import __version__ from commitizen.exceptions import InitFailedError, NoAnswersError - from tests.utils import skip_below_py_3_10 diff --git a/tests/commands/test_ls_command.py b/tests/commands/test_ls_command.py index d783305fc0..7225d2a85c 100644 --- a/tests/commands/test_ls_command.py +++ b/tests/commands/test_ls_command.py @@ -1,9 +1,9 @@ -import pytest import sys -from commitizen import cli, commands +import pytest from pytest_mock import MockerFixture +from commitizen import cli, commands from tests.utils import skip_below_py_3_10 diff --git a/tests/commands/test_schema_command.py b/tests/commands/test_schema_command.py index f69638dba3..5e571721c5 100644 --- a/tests/commands/test_schema_command.py +++ b/tests/commands/test_schema_command.py @@ -1,9 +1,9 @@ -import pytest import sys -from commitizen import cli, commands +import pytest from pytest_mock import MockerFixture +from commitizen import cli, commands from tests.utils import skip_below_py_3_10 diff --git a/tests/conftest.py b/tests/conftest.py index 76d2e53fb7..cc306ac6d4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -10,13 +10,13 @@ from pytest_mock import MockerFixture from commitizen import cmd, defaults -from commitizen.config import BaseConfig -from commitizen.cz import registry -from commitizen.cz.base import BaseCommitizen from commitizen.changelog_formats import ( ChangelogFormat, get_changelog_format, ) +from commitizen.config import BaseConfig +from commitizen.cz import registry +from commitizen.cz.base import BaseCommitizen from tests.utils import create_file_and_commit SIGNER = "GitHub Action" diff --git a/tests/providers/test_base_provider.py b/tests/providers/test_base_provider.py index 09a2bd71cd..482bd698ea 100644 --- a/tests/providers/test_base_provider.py +++ b/tests/providers/test_base_provider.py @@ -1,6 +1,5 @@ from __future__ import annotations - import pytest from commitizen.config.base_config import BaseConfig diff --git a/tests/providers/test_cargo_provider.py b/tests/providers/test_cargo_provider.py index cde868deb5..646ef3a53d 100644 --- a/tests/providers/test_cargo_provider.py +++ b/tests/providers/test_cargo_provider.py @@ -9,7 +9,6 @@ from commitizen.providers import get_provider from commitizen.providers.cargo_provider import CargoProvider - CARGO_TOML = """\ [package] name = "whatever" diff --git a/tests/providers/test_commitizen_provider.py b/tests/providers/test_commitizen_provider.py index 887adf3d12..b8df60da93 100644 --- a/tests/providers/test_commitizen_provider.py +++ b/tests/providers/test_commitizen_provider.py @@ -2,11 +2,9 @@ from typing import TYPE_CHECKING - from commitizen.config.base_config import BaseConfig from commitizen.providers.commitizen_provider import CommitizenProvider - if TYPE_CHECKING: from pytest_mock import MockerFixture diff --git a/tests/providers/test_composer_provider.py b/tests/providers/test_composer_provider.py index ce72ae4703..45cbc8afa4 100644 --- a/tests/providers/test_composer_provider.py +++ b/tests/providers/test_composer_provider.py @@ -9,7 +9,6 @@ from commitizen.providers import get_provider from commitizen.providers.composer_provider import ComposerProvider - COMPOSER_JSON = """\ { "name": "whatever", diff --git a/tests/providers/test_npm_provider.py b/tests/providers/test_npm_provider.py index 2e5ceb42d5..bc9399916d 100644 --- a/tests/providers/test_npm_provider.py +++ b/tests/providers/test_npm_provider.py @@ -9,7 +9,6 @@ from commitizen.providers import get_provider from commitizen.providers.npm_provider import NpmProvider - NPM_PACKAGE_JSON = """\ { "name": "whatever", diff --git a/tests/providers/test_pep621_provider.py b/tests/providers/test_pep621_provider.py index 9e82213294..16bb479cc4 100644 --- a/tests/providers/test_pep621_provider.py +++ b/tests/providers/test_pep621_provider.py @@ -9,7 +9,6 @@ from commitizen.providers import get_provider from commitizen.providers.pep621_provider import Pep621Provider - PEP621_TOML = """\ [project] version = "0.1.0" diff --git a/tests/providers/test_poetry_provider.py b/tests/providers/test_poetry_provider.py index 9e327db6ad..e26e2a44fb 100644 --- a/tests/providers/test_poetry_provider.py +++ b/tests/providers/test_poetry_provider.py @@ -9,7 +9,6 @@ from commitizen.providers import get_provider from commitizen.providers.poetry_provider import PoetryProvider - POETRY_TOML = """\ [tool.poetry] version = "0.1.0" diff --git a/tests/providers/test_scm_provider.py b/tests/providers/test_scm_provider.py index 9611dd9ee0..01e7ab9943 100644 --- a/tests/providers/test_scm_provider.py +++ b/tests/providers/test_scm_provider.py @@ -1,6 +1,5 @@ from __future__ import annotations - import pytest from commitizen.config.base_config import BaseConfig diff --git a/tests/test_changelog.py b/tests/test_changelog.py index d382a67f30..20d59488d3 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1,5 +1,4 @@ import re - from pathlib import Path from typing import Optional @@ -7,11 +6,11 @@ from jinja2 import FileSystemLoader from commitizen import changelog, git +from commitizen.changelog_formats import ChangelogFormat from commitizen.cz.conventional_commits.conventional_commits import ( ConventionalCommitsCz, ) from commitizen.exceptions import InvalidConfigurationError -from commitizen.changelog_formats import ChangelogFormat COMMITS_DATA = [ { diff --git a/tests/test_changelog_format_asciidoc.py b/tests/test_changelog_format_asciidoc.py index df9c28f9d7..89740d2147 100644 --- a/tests/test_changelog_format_asciidoc.py +++ b/tests/test_changelog_format_asciidoc.py @@ -5,9 +5,8 @@ import pytest from commitizen.changelog import Metadata -from commitizen.config.base_config import BaseConfig from commitizen.changelog_formats.asciidoc import AsciiDoc - +from commitizen.config.base_config import BaseConfig CHANGELOG_A = """ = Changelog diff --git a/tests/test_changelog_format_markdown.py b/tests/test_changelog_format_markdown.py index 2e1ee69977..ab7c65453c 100644 --- a/tests/test_changelog_format_markdown.py +++ b/tests/test_changelog_format_markdown.py @@ -5,9 +5,8 @@ import pytest from commitizen.changelog import Metadata -from commitizen.config.base_config import BaseConfig from commitizen.changelog_formats.markdown import Markdown - +from commitizen.config.base_config import BaseConfig CHANGELOG_A = """ # Changelog diff --git a/tests/test_changelog_format_restructuredtext.py b/tests/test_changelog_format_restructuredtext.py index 7c5969f51d..46a11ebcdf 100644 --- a/tests/test_changelog_format_restructuredtext.py +++ b/tests/test_changelog_format_restructuredtext.py @@ -7,8 +7,8 @@ import pytest from commitizen.changelog import Metadata -from commitizen.config.base_config import BaseConfig from commitizen.changelog_formats.restructuredtext import RestructuredText +from commitizen.config.base_config import BaseConfig if TYPE_CHECKING: from _pytest.mark.structures import ParameterSet diff --git a/tests/test_changelog_format_textile.py b/tests/test_changelog_format_textile.py index 5176243ba0..e382e1c746 100644 --- a/tests/test_changelog_format_textile.py +++ b/tests/test_changelog_format_textile.py @@ -5,9 +5,8 @@ import pytest from commitizen.changelog import Metadata -from commitizen.config.base_config import BaseConfig from commitizen.changelog_formats.textile import Textile - +from commitizen.config.base_config import BaseConfig CHANGELOG_A = """ h1. Changelog diff --git a/tests/test_changelog_formats.py b/tests/test_changelog_formats.py index 7da87f16ca..dec23720dc 100644 --- a/tests/test_changelog_formats.py +++ b/tests/test_changelog_formats.py @@ -1,14 +1,15 @@ from __future__ import annotations import pytest + from commitizen import defaults -from commitizen.config.base_config import BaseConfig from commitizen.changelog_formats import ( KNOWN_CHANGELOG_FORMATS, ChangelogFormat, get_changelog_format, guess_changelog_format, ) +from commitizen.config.base_config import BaseConfig from commitizen.exceptions import ChangelogFormatUnknown diff --git a/tests/test_cli.py b/tests/test_cli.py index 345f0b1b00..1c87bc022b 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -8,11 +8,11 @@ from commitizen import cli from commitizen.exceptions import ( + ConfigFileNotFound, ExpectedExit, + InvalidCommandArgumentError, NoCommandFoundError, NotAGitProjectError, - InvalidCommandArgumentError, - ConfigFileNotFound, ) diff --git a/tests/test_conf.py b/tests/test_conf.py index ac49362979..1cbbc57aca 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -9,7 +9,7 @@ import yaml from commitizen import config, defaults, git -from commitizen.exceptions import InvalidConfigurationError, ConfigFileIsEmpty +from commitizen.exceptions import ConfigFileIsEmpty, InvalidConfigurationError PYPROJECT = """ [tool.commitizen] diff --git a/tests/test_git.py b/tests/test_git.py index 8af332d214..6ada76be6d 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -6,14 +6,14 @@ import shutil import pytest -from commitizen import cmd, exceptions, git from pytest_mock import MockFixture +from commitizen import cmd, exceptions, git from tests.utils import ( FakeCommand, + create_branch, create_file_and_commit, create_tag, - create_branch, switch_branch, ) diff --git a/tests/test_version_schemes.py b/tests/test_version_schemes.py index e30c780283..985b371f7b 100644 --- a/tests/test_version_schemes.py +++ b/tests/test_version_schemes.py @@ -1,8 +1,8 @@ from __future__ import annotations +import importlib_metadata as metadata import pytest from pytest_mock import MockerFixture -import importlib_metadata as metadata from commitizen.config.base_config import BaseConfig from commitizen.exceptions import VersionSchemeUnknown diff --git a/tests/utils.py b/tests/utils.py index 39fb0a17fa..971ff91820 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,8 +1,8 @@ from __future__ import annotations +import sys import time import uuid -import sys from pathlib import Path import pytest @@ -10,7 +10,6 @@ from commitizen import cmd, exceptions, git - skip_below_py_3_10 = pytest.mark.skipif( sys.version_info < (3, 10), reason="The output meesage of argparse is different between Python 3.10 and lower than Python 3.10", From 901ff2014cbc21150e0d90fb0ce2402b9aae463f Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Tue, 21 May 2024 10:18:40 -0400 Subject: [PATCH 277/685] build: remove black and use only ruff --- poetry.lock | 700 ++++++++++++++++++++++--------------------------- pyproject.toml | 2 - scripts/format | 1 - scripts/test | 1 - 4 files changed, 318 insertions(+), 386 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2e16545b02..6f2e254319 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,14 +1,14 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "appnope" -version = "0.1.3" +version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, + {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, + {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, ] [[package]] @@ -45,13 +45,13 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] [[package]] name = "babel" -version = "2.14.0" +version = "2.15.0" description = "Internationalization utilities" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, - {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, + {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"}, + {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"}, ] [package.dependencies] @@ -71,61 +71,15 @@ files = [ {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] -[[package]] -name = "black" -version = "24.4.2" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.8" -files = [ - {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"}, - {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"}, - {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"}, - {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"}, - {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"}, - {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"}, - {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"}, - {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"}, - {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"}, - {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"}, - {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"}, - {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"}, - {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"}, - {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"}, - {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"}, - {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"}, - {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"}, - {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"}, - {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"}, - {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"}, - {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"}, - {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - [[package]] name = "certifi" -version = "2023.11.17" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, - {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] @@ -265,63 +219,63 @@ files = [ [[package]] name = "coverage" -version = "7.3.3" +version = "7.5.1" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d874434e0cb7b90f7af2b6e3309b0733cde8ec1476eb47db148ed7deeb2a9494"}, - {file = "coverage-7.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee6621dccce8af666b8c4651f9f43467bfbf409607c604b840b78f4ff3619aeb"}, - {file = "coverage-7.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1367aa411afb4431ab58fd7ee102adb2665894d047c490649e86219327183134"}, - {file = "coverage-7.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f0f8f0c497eb9c9f18f21de0750c8d8b4b9c7000b43996a094290b59d0e7523"}, - {file = "coverage-7.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db0338c4b0951d93d547e0ff8d8ea340fecf5885f5b00b23be5aa99549e14cfd"}, - {file = "coverage-7.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d31650d313bd90d027f4be7663dfa2241079edd780b56ac416b56eebe0a21aab"}, - {file = "coverage-7.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9437a4074b43c177c92c96d051957592afd85ba00d3e92002c8ef45ee75df438"}, - {file = "coverage-7.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9e17d9cb06c13b4f2ef570355fa45797d10f19ca71395910b249e3f77942a837"}, - {file = "coverage-7.3.3-cp310-cp310-win32.whl", hash = "sha256:eee5e741b43ea1b49d98ab6e40f7e299e97715af2488d1c77a90de4a663a86e2"}, - {file = "coverage-7.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:593efa42160c15c59ee9b66c5f27a453ed3968718e6e58431cdfb2d50d5ad284"}, - {file = "coverage-7.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c944cf1775235c0857829c275c777a2c3e33032e544bcef614036f337ac37bb"}, - {file = "coverage-7.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eda7f6e92358ac9e1717ce1f0377ed2b9320cea070906ece4e5c11d172a45a39"}, - {file = "coverage-7.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c854c1d2c7d3e47f7120b560d1a30c1ca221e207439608d27bc4d08fd4aeae8"}, - {file = "coverage-7.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:222b038f08a7ebed1e4e78ccf3c09a1ca4ac3da16de983e66520973443b546bc"}, - {file = "coverage-7.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff4800783d85bff132f2cc7d007426ec698cdce08c3062c8d501ad3f4ea3d16c"}, - {file = "coverage-7.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fc200cec654311ca2c3f5ab3ce2220521b3d4732f68e1b1e79bef8fcfc1f2b97"}, - {file = "coverage-7.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:307aecb65bb77cbfebf2eb6e12009e9034d050c6c69d8a5f3f737b329f4f15fb"}, - {file = "coverage-7.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ffb0eacbadb705c0a6969b0adf468f126b064f3362411df95f6d4f31c40d31c1"}, - {file = "coverage-7.3.3-cp311-cp311-win32.whl", hash = "sha256:79c32f875fd7c0ed8d642b221cf81feba98183d2ff14d1f37a1bbce6b0347d9f"}, - {file = "coverage-7.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:243576944f7c1a1205e5cd658533a50eba662c74f9be4c050d51c69bd4532936"}, - {file = "coverage-7.3.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a2ac4245f18057dfec3b0074c4eb366953bca6787f1ec397c004c78176a23d56"}, - {file = "coverage-7.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f9191be7af41f0b54324ded600e8ddbcabea23e1e8ba419d9a53b241dece821d"}, - {file = "coverage-7.3.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31c0b1b8b5a4aebf8fcd227237fc4263aa7fa0ddcd4d288d42f50eff18b0bac4"}, - {file = "coverage-7.3.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee453085279df1bac0996bc97004771a4a052b1f1e23f6101213e3796ff3cb85"}, - {file = "coverage-7.3.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1191270b06ecd68b1d00897b2daddb98e1719f63750969614ceb3438228c088e"}, - {file = "coverage-7.3.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:007a7e49831cfe387473e92e9ff07377f6121120669ddc39674e7244350a6a29"}, - {file = "coverage-7.3.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:af75cf83c2d57717a8493ed2246d34b1f3398cb8a92b10fd7a1858cad8e78f59"}, - {file = "coverage-7.3.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:811ca7373da32f1ccee2927dc27dc523462fd30674a80102f86c6753d6681bc6"}, - {file = "coverage-7.3.3-cp312-cp312-win32.whl", hash = "sha256:733537a182b5d62184f2a72796eb6901299898231a8e4f84c858c68684b25a70"}, - {file = "coverage-7.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:e995efb191f04b01ced307dbd7407ebf6e6dc209b528d75583277b10fd1800ee"}, - {file = "coverage-7.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fbd8a5fe6c893de21a3c6835071ec116d79334fbdf641743332e442a3466f7ea"}, - {file = "coverage-7.3.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:50c472c1916540f8b2deef10cdc736cd2b3d1464d3945e4da0333862270dcb15"}, - {file = "coverage-7.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e9223a18f51d00d3ce239c39fc41410489ec7a248a84fab443fbb39c943616c"}, - {file = "coverage-7.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f501e36ac428c1b334c41e196ff6bd550c0353c7314716e80055b1f0a32ba394"}, - {file = "coverage-7.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:475de8213ed95a6b6283056d180b2442eee38d5948d735cd3d3b52b86dd65b92"}, - {file = "coverage-7.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:afdcc10c01d0db217fc0a64f58c7edd635b8f27787fea0a3054b856a6dff8717"}, - {file = "coverage-7.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:fff0b2f249ac642fd735f009b8363c2b46cf406d3caec00e4deeb79b5ff39b40"}, - {file = "coverage-7.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a1f76cfc122c9e0f62dbe0460ec9cc7696fc9a0293931a33b8870f78cf83a327"}, - {file = "coverage-7.3.3-cp38-cp38-win32.whl", hash = "sha256:757453848c18d7ab5d5b5f1827293d580f156f1c2c8cef45bfc21f37d8681069"}, - {file = "coverage-7.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:ad2453b852a1316c8a103c9c970db8fbc262f4f6b930aa6c606df9b2766eee06"}, - {file = "coverage-7.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b15e03b8ee6a908db48eccf4e4e42397f146ab1e91c6324da44197a45cb9132"}, - {file = "coverage-7.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:89400aa1752e09f666cc48708eaa171eef0ebe3d5f74044b614729231763ae69"}, - {file = "coverage-7.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c59a3e59fb95e6d72e71dc915e6d7fa568863fad0a80b33bc7b82d6e9f844973"}, - {file = "coverage-7.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ede881c7618f9cf93e2df0421ee127afdfd267d1b5d0c59bcea771cf160ea4a"}, - {file = "coverage-7.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3bfd2c2f0e5384276e12b14882bf2c7621f97c35320c3e7132c156ce18436a1"}, - {file = "coverage-7.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7f3bad1a9313401ff2964e411ab7d57fb700a2d5478b727e13f156c8f89774a0"}, - {file = "coverage-7.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:65d716b736f16e250435473c5ca01285d73c29f20097decdbb12571d5dfb2c94"}, - {file = "coverage-7.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a702e66483b1fe602717020a0e90506e759c84a71dbc1616dd55d29d86a9b91f"}, - {file = "coverage-7.3.3-cp39-cp39-win32.whl", hash = "sha256:7fbf3f5756e7955174a31fb579307d69ffca91ad163467ed123858ce0f3fd4aa"}, - {file = "coverage-7.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cad9afc1644b979211989ec3ff7d82110b2ed52995c2f7263e7841c846a75348"}, - {file = "coverage-7.3.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:d299d379b676812e142fb57662a8d0d810b859421412b4d7af996154c00c31bb"}, - {file = "coverage-7.3.3.tar.gz", hash = "sha256:df04c64e58df96b4427db8d0559e95e2df3138c9916c96f9f6a4dd220db2fdb7"}, + {file = "coverage-7.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0884920835a033b78d1c73b6d3bbcda8161a900f38a488829a83982925f6c2e"}, + {file = "coverage-7.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:39afcd3d4339329c5f58de48a52f6e4e50f6578dd6099961cf22228feb25f38f"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7b0ceee8147444347da6a66be737c9d78f3353b0681715b668b72e79203e4a"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a9ca3f2fae0088c3c71d743d85404cec8df9be818a005ea065495bedc33da35"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd215c0c7d7aab005221608a3c2b46f58c0285a819565887ee0b718c052aa4e"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4bf0655ab60d754491004a5efd7f9cccefcc1081a74c9ef2da4735d6ee4a6223"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:61c4bf1ba021817de12b813338c9be9f0ad5b1e781b9b340a6d29fc13e7c1b5e"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:db66fc317a046556a96b453a58eced5024af4582a8dbdc0c23ca4dbc0d5b3146"}, + {file = "coverage-7.5.1-cp310-cp310-win32.whl", hash = "sha256:b016ea6b959d3b9556cb401c55a37547135a587db0115635a443b2ce8f1c7228"}, + {file = "coverage-7.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:df4e745a81c110e7446b1cc8131bf986157770fa405fe90e15e850aaf7619bc8"}, + {file = "coverage-7.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:796a79f63eca8814ca3317a1ea443645c9ff0d18b188de470ed7ccd45ae79428"}, + {file = "coverage-7.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4fc84a37bfd98db31beae3c2748811a3fa72bf2007ff7902f68746d9757f3746"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6175d1a0559986c6ee3f7fccfc4a90ecd12ba0a383dcc2da30c2b9918d67d8a3"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fc81d5878cd6274ce971e0a3a18a8803c3fe25457165314271cf78e3aae3aa2"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:556cf1a7cbc8028cb60e1ff0be806be2eded2daf8129b8811c63e2b9a6c43bca"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9981706d300c18d8b220995ad22627647be11a4276721c10911e0e9fa44c83e8"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d7fed867ee50edf1a0b4a11e8e5d0895150e572af1cd6d315d557758bfa9c057"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef48e2707fb320c8f139424a596f5b69955a85b178f15af261bab871873bb987"}, + {file = "coverage-7.5.1-cp311-cp311-win32.whl", hash = "sha256:9314d5678dcc665330df5b69c1e726a0e49b27df0461c08ca12674bcc19ef136"}, + {file = "coverage-7.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:5fa567e99765fe98f4e7d7394ce623e794d7cabb170f2ca2ac5a4174437e90dd"}, + {file = "coverage-7.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b6cf3764c030e5338e7f61f95bd21147963cf6aa16e09d2f74f1fa52013c1206"}, + {file = "coverage-7.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ec92012fefebee89a6b9c79bc39051a6cb3891d562b9270ab10ecfdadbc0c34"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16db7f26000a07efcf6aea00316f6ac57e7d9a96501e990a36f40c965ec7a95d"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beccf7b8a10b09c4ae543582c1319c6df47d78fd732f854ac68d518ee1fb97fa"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8748731ad392d736cc9ccac03c9845b13bb07d020a33423fa5b3a36521ac6e4e"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7352b9161b33fd0b643ccd1f21f3a3908daaddf414f1c6cb9d3a2fd618bf2572"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a588d39e0925f6a2bff87154752481273cdb1736270642aeb3635cb9b4cad07"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:68f962d9b72ce69ea8621f57551b2fa9c70509af757ee3b8105d4f51b92b41a7"}, + {file = "coverage-7.5.1-cp312-cp312-win32.whl", hash = "sha256:f152cbf5b88aaeb836127d920dd0f5e7edff5a66f10c079157306c4343d86c19"}, + {file = "coverage-7.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:5a5740d1fb60ddf268a3811bcd353de34eb56dc24e8f52a7f05ee513b2d4f596"}, + {file = "coverage-7.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e2213def81a50519d7cc56ed643c9e93e0247f5bbe0d1247d15fa520814a7cd7"}, + {file = "coverage-7.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5037f8fcc2a95b1f0e80585bd9d1ec31068a9bcb157d9750a172836e98bc7a90"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3721c2c9e4c4953a41a26c14f4cef64330392a6d2d675c8b1db3b645e31f0e"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca498687ca46a62ae590253fba634a1fe9836bc56f626852fb2720f334c9e4e5"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cdcbc320b14c3e5877ee79e649677cb7d89ef588852e9583e6b24c2e5072661"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:57e0204b5b745594e5bc14b9b50006da722827f0b8c776949f1135677e88d0b8"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fe7502616b67b234482c3ce276ff26f39ffe88adca2acf0261df4b8454668b4"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9e78295f4144f9dacfed4f92935fbe1780021247c2fabf73a819b17f0ccfff8d"}, + {file = "coverage-7.5.1-cp38-cp38-win32.whl", hash = "sha256:1434e088b41594baa71188a17533083eabf5609e8e72f16ce8c186001e6b8c41"}, + {file = "coverage-7.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:0646599e9b139988b63704d704af8e8df7fa4cbc4a1f33df69d97f36cb0a38de"}, + {file = "coverage-7.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4cc37def103a2725bc672f84bd939a6fe4522310503207aae4d56351644682f1"}, + {file = "coverage-7.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc0b4d8bfeabd25ea75e94632f5b6e047eef8adaed0c2161ada1e922e7f7cece"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d0a0f5e06881ecedfe6f3dd2f56dcb057b6dbeb3327fd32d4b12854df36bf26"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9735317685ba6ec7e3754798c8871c2f49aa5e687cc794a0b1d284b2389d1bd5"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d21918e9ef11edf36764b93101e2ae8cc82aa5efdc7c5a4e9c6c35a48496d601"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c3e757949f268364b96ca894b4c342b41dc6f8f8b66c37878aacef5930db61be"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:79afb6197e2f7f60c4824dd4b2d4c2ec5801ceb6ba9ce5d2c3080e5660d51a4f"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1d0d98d95dd18fe29dc66808e1accf59f037d5716f86a501fc0256455219668"}, + {file = "coverage-7.5.1-cp39-cp39-win32.whl", hash = "sha256:1cc0fe9b0b3a8364093c53b0b4c0c2dd4bb23acbec4c9240b5f284095ccf7981"}, + {file = "coverage-7.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:dde0070c40ea8bb3641e811c1cfbf18e265d024deff6de52c5950677a8fb1e0f"}, + {file = "coverage-7.5.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:6537e7c10cc47c595828b8a8be04c72144725c383c4702703ff4e42e44577312"}, + {file = "coverage-7.5.1.tar.gz", hash = "sha256:54de9ef3a9da981f7af93eafde4ede199e0846cd819eb27c88e2b712aae9708c"}, ] [package.dependencies] @@ -382,13 +336,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.0" +version = "1.2.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, - {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, ] [package.extras] @@ -424,29 +378,29 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "filelock" -version = "3.13.1" +version = "3.14.0" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, - {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, + {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, + {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] typing = ["typing-extensions (>=4.8)"] [[package]] name = "freezegun" -version = "1.3.1" +version = "1.5.1" description = "Let your Python tests travel through time" optional = false python-versions = ">=3.7" files = [ - {file = "freezegun-1.3.1-py3-none-any.whl", hash = "sha256:065e77a12624d05531afa87ade12a0b9bdb53495c4573893252a055b545ce3ea"}, - {file = "freezegun-1.3.1.tar.gz", hash = "sha256:48984397b3b58ef5dfc645d6a304b0060f612bcecfdaaf45ce8aff0077a6cb6a"}, + {file = "freezegun-1.5.1-py3-none-any.whl", hash = "sha256:bf111d7138a8abe55ab48a71755673dbaa4ab87f4cff5634a4442dfec34c15f1"}, + {file = "freezegun-1.5.1.tar.gz", hash = "sha256:b29dedfcda6d5e8e083ce71b2b542753ad48cfec44037b3fc79702e2980a89e9"}, ] [package.dependencies] @@ -471,13 +425,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "identify" -version = "2.5.33" +version = "2.5.36" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"}, - {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"}, + {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, + {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, ] [package.extras] @@ -601,13 +555,13 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "markdown" -version = "3.5.1" +version = "3.6" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "Markdown-3.5.1-py3-none-any.whl", hash = "sha256:5874b47d4ee3f0b14d764324d2c94c03ea66bee56f2d929da9f2508d65e722dc"}, - {file = "Markdown-3.5.1.tar.gz", hash = "sha256:b65d7beb248dc22f2e8a31fb706d93798093c308dc1aba295aedeb9d41a813bd"}, + {file = "Markdown-3.6-py3-none-any.whl", hash = "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f"}, + {file = "Markdown-3.6.tar.gz", hash = "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"}, ] [package.dependencies] @@ -643,82 +597,82 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.3" +version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, - {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] [[package]] name = "matplotlib-inline" -version = "0.1.6" +version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, ] [package.dependencies] @@ -796,13 +750,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.23" +version = "9.5.24" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.23-py3-none-any.whl", hash = "sha256:ffd08a5beaef3cd135aceb58ded8b98bbbbf2b70e5b656f6a14a63c917d9b001"}, - {file = "mkdocs_material-9.5.23.tar.gz", hash = "sha256:4627fc3f15de2cba2bde9debc2fd59b9888ef494beabfe67eb352e23d14bf288"}, + {file = "mkdocs_material-9.5.24-py3-none-any.whl", hash = "sha256:e12cd75954c535b61e716f359cf2a5056bf4514889d17161fdebd5df4b0153c6"}, + {file = "mkdocs_material-9.5.24.tar.gz", hash = "sha256:02d5aaba0ee755e707c3ef6e748f9acb7b3011187c0ea766db31af8905078a34"}, ] [package.dependencies] @@ -929,18 +883,18 @@ files = [ [[package]] name = "parso" -version = "0.8.3" +version = "0.8.4" description = "A Python Parser" optional = false python-versions = ">=3.6" files = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, ] [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] [[package]] name = "pathspec" @@ -980,18 +934,19 @@ files = [ [[package]] name = "platformdirs" -version = "4.1.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, - {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] [[package]] name = "pluggy" @@ -1067,32 +1022,31 @@ tests = ["pytest"] [[package]] name = "pygments" -version = "2.17.2" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.5" +version = "10.8.1" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.5-py3-none-any.whl", hash = "sha256:1f0ca8bb5beff091315f793ee17683bc1390731f6ac4c5eb01e27464b80fe879"}, - {file = "pymdown_extensions-10.5.tar.gz", hash = "sha256:1b60f1e462adbec5a1ed79dac91f666c9c0d241fa294de1989f29d20096cfd0b"}, + {file = "pymdown_extensions-10.8.1-py3-none-any.whl", hash = "sha256:f938326115884f48c6059c67377c46cf631c733ef3629b6eed1349989d1b30cb"}, + {file = "pymdown_extensions-10.8.1.tar.gz", hash = "sha256:3ab1db5c9e21728dabf75192d71471f8e50f216627e9a1fa9535ecb0231b9940"}, ] [package.dependencies] -markdown = ">=3.5" +markdown = ">=3.6" pyyaml = "*" [package.extras] @@ -1228,13 +1182,13 @@ testing = ["filelock"] [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] [package.dependencies] @@ -1242,13 +1196,13 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2023.3.post1" +version = "2024.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] [[package]] @@ -1263,7 +1217,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1271,16 +1224,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -1297,7 +1242,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -1305,7 +1249,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -1341,110 +1284,101 @@ prompt_toolkit = ">=2.0,<=3.0.36" [[package]] name = "regex" -version = "2023.10.3" +version = "2024.5.15" description = "Alternative regular expression module, to replace re." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"}, - {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a"}, - {file = "regex-2023.10.3-cp310-cp310-win32.whl", hash = "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec"}, - {file = "regex-2023.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353"}, - {file = "regex-2023.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e"}, - {file = "regex-2023.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54"}, - {file = "regex-2023.10.3-cp311-cp311-win32.whl", hash = "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2"}, - {file = "regex-2023.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c"}, - {file = "regex-2023.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037"}, - {file = "regex-2023.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a"}, - {file = "regex-2023.10.3-cp312-cp312-win32.whl", hash = "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a"}, - {file = "regex-2023.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b"}, - {file = "regex-2023.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb"}, - {file = "regex-2023.10.3-cp37-cp37m-win32.whl", hash = "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a"}, - {file = "regex-2023.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed"}, - {file = "regex-2023.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533"}, - {file = "regex-2023.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4"}, - {file = "regex-2023.10.3-cp38-cp38-win32.whl", hash = "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d"}, - {file = "regex-2023.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b"}, - {file = "regex-2023.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af"}, - {file = "regex-2023.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48"}, - {file = "regex-2023.10.3-cp39-cp39-win32.whl", hash = "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd"}, - {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"}, - {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53"}, + {file = "regex-2024.5.15-cp310-cp310-win32.whl", hash = "sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3"}, + {file = "regex-2024.5.15-cp310-cp310-win_amd64.whl", hash = "sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68"}, + {file = "regex-2024.5.15-cp311-cp311-win32.whl", hash = "sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa"}, + {file = "regex-2024.5.15-cp311-cp311-win_amd64.whl", hash = "sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80"}, + {file = "regex-2024.5.15-cp312-cp312-win32.whl", hash = "sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe"}, + {file = "regex-2024.5.15-cp312-cp312-win_amd64.whl", hash = "sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741"}, + {file = "regex-2024.5.15-cp38-cp38-win32.whl", hash = "sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9"}, + {file = "regex-2024.5.15-cp38-cp38-win_amd64.whl", hash = "sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456"}, + {file = "regex-2024.5.15-cp39-cp39-win32.whl", hash = "sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694"}, + {file = "regex-2024.5.15-cp39-cp39-win_amd64.whl", hash = "sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388"}, + {file = "regex-2024.5.15.tar.gz", hash = "sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c"}, ] [[package]] name = "requests" -version = "2.31.0" +version = "2.32.1" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.1-py3-none-any.whl", hash = "sha256:21ac9465cdf8c1650fe1ecde8a71669a93d4e6f147550483a2967d08396a56a5"}, + {file = "requests-2.32.1.tar.gz", hash = "sha256:eb97e87e64c79e64e5b8ac75cee9dd1f97f49e289b083ee6be96268930725685"}, ] [package.dependencies] @@ -1504,19 +1438,18 @@ files = [ [[package]] name = "setuptools" -version = "69.0.2" +version = "70.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.0.2-py3-none-any.whl", hash = "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2"}, - {file = "setuptools-69.0.2.tar.gz", hash = "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6"}, + {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, + {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -1586,18 +1519,18 @@ files = [ [[package]] name = "traitlets" -version = "5.14.0" +version = "5.14.3" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" files = [ - {file = "traitlets-5.14.0-py3-none-any.whl", hash = "sha256:f14949d23829023013c47df20b4a76ccd1a85effb786dc060f34de7948361b33"}, - {file = "traitlets-5.14.0.tar.gz", hash = "sha256:fcdaa8ac49c04dfa0ed3ee3384ef6dfdb5d6f3741502be247279407679296772"}, + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "types-deprecated" @@ -1656,29 +1589,30 @@ files = [ [[package]] name = "urllib3" -version = "2.1.0" +version = "2.2.1" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, - {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.25.0" +version = "20.26.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"}, - {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"}, + {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, + {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, ] [package.dependencies] @@ -1687,43 +1621,45 @@ filelock = ">=3.12.2,<4" platformdirs = ">=3.9.1,<5" [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] name = "watchdog" -version = "3.0.0" +version = "4.0.0" description = "Filesystem events monitoring" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, - {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, - {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, - {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, - {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, - {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, - {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, - {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, - {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8"}, + {file = "watchdog-4.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b"}, + {file = "watchdog-4.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92"}, + {file = "watchdog-4.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269"}, + {file = "watchdog-4.0.0-py3-none-win32.whl", hash = "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c"}, + {file = "watchdog-4.0.0-py3-none-win_amd64.whl", hash = "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245"}, + {file = "watchdog-4.0.0-py3-none-win_ia64.whl", hash = "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7"}, + {file = "watchdog-4.0.0.tar.gz", hash = "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec"}, ] [package.extras] @@ -1731,13 +1667,13 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "wcwidth" -version = "0.2.12" +version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.12-py2.py3-none-any.whl", hash = "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c"}, - {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"}, + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] [[package]] @@ -1821,20 +1757,20 @@ files = [ [[package]] name = "zipp" -version = "3.17.0" +version = "3.18.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, - {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, + {file = "zipp-3.18.2-py3-none-any.whl", hash = "sha256:dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e"}, + {file = "zipp-3.18.2.tar.gz", hash = "sha256:6278d9ddbcfb1f1089a88fde84481528b07b0e10474e09dcfe53dad4069fa059"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "7749ae1f4f41db8c1a5333070a9b88a798dd6666535bbe1d96a6d15fa3f5ddd9" +content-hash = "f3966e7e19f4a5dae0b4500519ef776affe8b9e23609847f45794ece75d2c543" diff --git a/pyproject.toml b/pyproject.toml index 29f1eeddef..95a29693b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,8 +63,6 @@ pytest-mock = "^3.10" pytest-regressions = "^2.4.0" pytest-freezer = "^0.4.6" pytest-xdist = "^3.1.0" -# code formatter -black = ">=23.11,<25.0" # linter ruff = ">=0.1.6,<0.5.0" pre-commit = ">=2.18,<4.0" diff --git a/scripts/format b/scripts/format index 2aafc4f6e2..0ffe29ba4f 100755 --- a/scripts/format +++ b/scripts/format @@ -8,4 +8,3 @@ set -x # This is needed for running import sorting ${PREFIX}ruff check --fix commitizen tests ${PREFIX}ruff format commitizen tests -${PREFIX}black commitizen tests diff --git a/scripts/test b/scripts/test index 08889af8b0..894228b41f 100755 --- a/scripts/test +++ b/scripts/test @@ -5,7 +5,6 @@ export PREFIX='poetry run python -m ' export REGEX='^(?![.]|venv).*' ${PREFIX}pytest -n 3 --dist=loadfile --cov-report term-missing --cov-report=xml:coverage.xml --cov=commitizen tests/ -${PREFIX}black commitizen tests ${PREFIX}ruff check commitizen/ tests/ --fix ${PREFIX}mypy commitizen/ tests/ ${PREFIX}commitizen -nr 3 check --rev-range origin/master.. From 86d6aeacca823f68345960224c40e1d6672e814b Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Tue, 21 May 2024 23:09:36 -0400 Subject: [PATCH 278/685] docs(CHANGELOG): fix typo --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 496d9f5fba..c3a3ecc5e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ### Feat -- **config_files**: add suport for "cz.toml" config file +- **config_files**: add support for "cz.toml" config file ## v3.26.2 (2024-05-22) From a87c108c942d1e895e569b004e2d59504bc58a84 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko <debian@onerussian.com> Date: Tue, 21 May 2024 13:50:43 -0400 Subject: [PATCH 279/685] style: move codespell configuration to pyproject.toml So people could just run "codespell" without pre-commit and have centralized configuration for tools (the others are already in pyproject.toml) Signed-off-by: Yaroslav Halchenko <debian@onerussian.com> --- .pre-commit-config.yaml | 4 ++-- pyproject.toml | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 350a7a95b2..49e108f2b5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -41,10 +41,10 @@ repos: hooks: - id: codespell name: Run codespell to check for common misspellings in files + # config section is within pyproject.toml language: python types: [ text ] - args: [ "--write-changes", "--ignore-words-list", "asend" ] - exclude: "poetry.lock" + args: [ "--write-changes" ] - repo: https://github.com/commitizen-tools/commitizen rev: v3.27.0 # automatically updated by Commitizen diff --git a/pyproject.toml b/pyproject.toml index 95a29693b6..a4158614c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -181,3 +181,9 @@ warn_unused_configs = true [[tool.mypy.overrides]] module = "py.*" # Legacy pytest dependencies ignore_missing_imports = true + +[tool.codespell] +# Ref: https://github.com/codespell-project/codespell#using-a-config-file +skip = '.git*,*.svg,*.lock' +check-hidden = true +ignore-words-list = 'asend' From 26dc450a23ebd5503c8a3229db7afae2e7c30388 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko <debian@onerussian.com> Date: Wed, 22 May 2024 11:58:11 -0400 Subject: [PATCH 280/685] ci: add tomli as additional dependency for codespell since config now is in pyproject.toml Signed-off-by: Yaroslav Halchenko <debian@onerussian.com> --- .pre-commit-config.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 49e108f2b5..d0149b5fae 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -45,6 +45,8 @@ repos: language: python types: [ text ] args: [ "--write-changes" ] + additional_dependencies: + - tomli - repo: https://github.com/commitizen-tools/commitizen rev: v3.27.0 # automatically updated by Commitizen From 8f88d56b86ab79da69f2629d6fc5e284f6588953 Mon Sep 17 00:00:00 2001 From: Marcos Martins <contato@marcosmartins.me> Date: Wed, 22 May 2024 09:42:00 -0300 Subject: [PATCH 281/685] ci: skip 'update-cli-screenshots' if no changes --- .github/workflows/docspublish.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml index 4ac9a3a4a4..f318b86858 100644 --- a/.github/workflows/docspublish.yml +++ b/.github/workflows/docspublish.yml @@ -30,8 +30,13 @@ jobs: git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" git add docs/images/cli_help - git commit -m "docs(cli/screenshots): update CLI screenshots" -m "[skip ci]" - git push + + if [[ -n "$(git status --porcelain)" ]]; then + git commit -m "docs(cli/screenshots): update CLI screenshots" -m "[skip ci]" + git push + else + echo "No changes to commit. Skipping." + fi publish-documentation: runs-on: ubuntu-latest From 8cc46cd50185a69fdc6ce3ac54c4959c9b32c152 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 May 2024 01:52:03 +0000 Subject: [PATCH 282/685] build(deps-dev): bump ruff from 0.4.4 to 0.4.5 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.4.4 to 0.4.5. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.4...v0.4.5) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 49 ++++++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6f2e254319..bd61f32665 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "appnope" @@ -1217,6 +1217,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1224,8 +1225,16 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -1242,6 +1251,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -1249,6 +1259,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -1412,28 +1423,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.4.4" +version = "0.4.5" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:29d44ef5bb6a08e235c8249294fa8d431adc1426bfda99ed493119e6f9ea1bf6"}, - {file = "ruff-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c4efe62b5bbb24178c950732ddd40712b878a9b96b1d02b0ff0b08a090cbd891"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c8e2f1e8fc12d07ab521a9005d68a969e167b589cbcaee354cb61e9d9de9c15"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:60ed88b636a463214905c002fa3eaab19795679ed55529f91e488db3fe8976ab"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b90fc5e170fc71c712cc4d9ab0e24ea505c6a9e4ebf346787a67e691dfb72e85"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:8e7e6ebc10ef16dcdc77fd5557ee60647512b400e4a60bdc4849468f076f6eef"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9ddb2c494fb79fc208cd15ffe08f32b7682519e067413dbaf5f4b01a6087bcd"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c51c928a14f9f0a871082603e25a1588059b7e08a920f2f9fa7157b5bf08cfe9"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5eb0a4bfd6400b7d07c09a7725e1a98c3b838be557fee229ac0f84d9aa49c36"}, - {file = "ruff-0.4.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b1867ee9bf3acc21778dcb293db504692eda5f7a11a6e6cc40890182a9f9e595"}, - {file = "ruff-0.4.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1aecced1269481ef2894cc495647392a34b0bf3e28ff53ed95a385b13aa45768"}, - {file = "ruff-0.4.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9da73eb616b3241a307b837f32756dc20a0b07e2bcb694fec73699c93d04a69e"}, - {file = "ruff-0.4.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:958b4ea5589706a81065e2a776237de2ecc3e763342e5cc8e02a4a4d8a5e6f95"}, - {file = "ruff-0.4.4-py3-none-win32.whl", hash = "sha256:cb53473849f011bca6e754f2cdf47cafc9c4f4ff4570003a0dad0b9b6890e876"}, - {file = "ruff-0.4.4-py3-none-win_amd64.whl", hash = "sha256:424e5b72597482543b684c11def82669cc6b395aa8cc69acc1858b5ef3e5daae"}, - {file = "ruff-0.4.4-py3-none-win_arm64.whl", hash = "sha256:39df0537b47d3b597293edbb95baf54ff5b49589eb7ff41926d8243caa995ea6"}, - {file = "ruff-0.4.4.tar.gz", hash = "sha256:f87ea42d5cdebdc6a69761a9d0bc83ae9b3b30d0ad78952005ba6568d6c022af"}, + {file = "ruff-0.4.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8f58e615dec58b1a6b291769b559e12fdffb53cc4187160a2fc83250eaf54e96"}, + {file = "ruff-0.4.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:84dd157474e16e3a82745d2afa1016c17d27cb5d52b12e3d45d418bcc6d49264"}, + {file = "ruff-0.4.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f483ad9d50b00e7fd577f6d0305aa18494c6af139bce7319c68a17180087f4"}, + {file = "ruff-0.4.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:63fde3bf6f3ad4e990357af1d30e8ba2730860a954ea9282c95fc0846f5f64af"}, + {file = "ruff-0.4.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78e3ba4620dee27f76bbcad97067766026c918ba0f2d035c2fc25cbdd04d9c97"}, + {file = "ruff-0.4.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:441dab55c568e38d02bbda68a926a3d0b54f5510095c9de7f95e47a39e0168aa"}, + {file = "ruff-0.4.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1169e47e9c4136c997f08f9857ae889d614c5035d87d38fda9b44b4338909cdf"}, + {file = "ruff-0.4.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:755ac9ac2598a941512fc36a9070a13c88d72ff874a9781493eb237ab02d75df"}, + {file = "ruff-0.4.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4b02a65985be2b34b170025a8b92449088ce61e33e69956ce4d316c0fe7cce0"}, + {file = "ruff-0.4.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:75a426506a183d9201e7e5664de3f6b414ad3850d7625764106f7b6d0486f0a1"}, + {file = "ruff-0.4.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6e1b139b45e2911419044237d90b60e472f57285950e1492c757dfc88259bb06"}, + {file = "ruff-0.4.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a6f29a8221d2e3d85ff0c7b4371c0e37b39c87732c969b4d90f3dad2e721c5b1"}, + {file = "ruff-0.4.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d6ef817124d72b54cc923f3444828ba24fa45c3164bc9e8f1813db2f3d3a8a11"}, + {file = "ruff-0.4.5-py3-none-win32.whl", hash = "sha256:aed8166c18b1a169a5d3ec28a49b43340949e400665555b51ee06f22813ef062"}, + {file = "ruff-0.4.5-py3-none-win_amd64.whl", hash = "sha256:b0b03c619d2b4350b4a27e34fd2ac64d0dabe1afbf43de57d0f9d8a05ecffa45"}, + {file = "ruff-0.4.5-py3-none-win_arm64.whl", hash = "sha256:9d15de3425f53161b3f5a5658d4522e4eee5ea002bf2ac7aa380743dd9ad5fba"}, + {file = "ruff-0.4.5.tar.gz", hash = "sha256:286eabd47e7d4d521d199cab84deca135557e6d1e0f0d01c29e757c3cb151b54"}, ] [[package]] From 2115e39e7bbc927b8d5800c5f1f91a58e17a3cd5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 May 2024 01:38:11 +0000 Subject: [PATCH 283/685] build(deps): bump typing-extensions from 4.11.0 to 4.12.0 Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.11.0 to 4.12.0. - [Release notes](https://github.com/python/typing_extensions/releases) - [Changelog](https://github.com/python/typing_extensions/blob/main/CHANGELOG.md) - [Commits](https://github.com/python/typing_extensions/compare/4.11.0...4.12.0) --- updated-dependencies: - dependency-name: typing-extensions dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index bd61f32665..46636b212b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1589,13 +1589,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.11.0" +version = "4.12.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, + {file = "typing_extensions-4.12.0-py3-none-any.whl", hash = "sha256:b349c66bea9016ac22978d800cfff206d5f9816951f12a7d0ec5578b0a819594"}, + {file = "typing_extensions-4.12.0.tar.gz", hash = "sha256:8cbcdc8606ebcb0d95453ad7dc5065e6237b6aa230a31e81d0f440c30fed5fd8"}, ] [[package]] From 673045d7e6e20f571c60cafb7c9693197016243d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 01:08:58 +0000 Subject: [PATCH 284/685] build(deps-dev): bump mkdocs-material from 9.5.24 to 9.5.25 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.24 to 9.5.25. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.24...9.5.25) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 46636b212b..661d21d856 100644 --- a/poetry.lock +++ b/poetry.lock @@ -750,13 +750,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.24" +version = "9.5.25" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.24-py3-none-any.whl", hash = "sha256:e12cd75954c535b61e716f359cf2a5056bf4514889d17161fdebd5df4b0153c6"}, - {file = "mkdocs_material-9.5.24.tar.gz", hash = "sha256:02d5aaba0ee755e707c3ef6e748f9acb7b3011187c0ea766db31af8905078a34"}, + {file = "mkdocs_material-9.5.25-py3-none-any.whl", hash = "sha256:68fdab047a0b9bfbefe79ce267e8a7daaf5128bcf7867065fcd201ee335fece1"}, + {file = "mkdocs_material-9.5.25.tar.gz", hash = "sha256:d0662561efb725b712207e0ee01f035ca15633f29a64628e24f01ec99d7078f4"}, ] [package.dependencies] From 4975b38a504acc9e68163efae4dbc226fce2b34b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 01:32:24 +0000 Subject: [PATCH 285/685] build(deps-dev): bump ruff from 0.4.5 to 0.4.6 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.4.5 to 0.4.6. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.5...v0.4.6) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 661d21d856..2a664373c3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1423,28 +1423,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.4.5" +version = "0.4.6" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8f58e615dec58b1a6b291769b559e12fdffb53cc4187160a2fc83250eaf54e96"}, - {file = "ruff-0.4.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:84dd157474e16e3a82745d2afa1016c17d27cb5d52b12e3d45d418bcc6d49264"}, - {file = "ruff-0.4.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f483ad9d50b00e7fd577f6d0305aa18494c6af139bce7319c68a17180087f4"}, - {file = "ruff-0.4.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:63fde3bf6f3ad4e990357af1d30e8ba2730860a954ea9282c95fc0846f5f64af"}, - {file = "ruff-0.4.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78e3ba4620dee27f76bbcad97067766026c918ba0f2d035c2fc25cbdd04d9c97"}, - {file = "ruff-0.4.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:441dab55c568e38d02bbda68a926a3d0b54f5510095c9de7f95e47a39e0168aa"}, - {file = "ruff-0.4.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1169e47e9c4136c997f08f9857ae889d614c5035d87d38fda9b44b4338909cdf"}, - {file = "ruff-0.4.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:755ac9ac2598a941512fc36a9070a13c88d72ff874a9781493eb237ab02d75df"}, - {file = "ruff-0.4.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4b02a65985be2b34b170025a8b92449088ce61e33e69956ce4d316c0fe7cce0"}, - {file = "ruff-0.4.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:75a426506a183d9201e7e5664de3f6b414ad3850d7625764106f7b6d0486f0a1"}, - {file = "ruff-0.4.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6e1b139b45e2911419044237d90b60e472f57285950e1492c757dfc88259bb06"}, - {file = "ruff-0.4.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a6f29a8221d2e3d85ff0c7b4371c0e37b39c87732c969b4d90f3dad2e721c5b1"}, - {file = "ruff-0.4.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d6ef817124d72b54cc923f3444828ba24fa45c3164bc9e8f1813db2f3d3a8a11"}, - {file = "ruff-0.4.5-py3-none-win32.whl", hash = "sha256:aed8166c18b1a169a5d3ec28a49b43340949e400665555b51ee06f22813ef062"}, - {file = "ruff-0.4.5-py3-none-win_amd64.whl", hash = "sha256:b0b03c619d2b4350b4a27e34fd2ac64d0dabe1afbf43de57d0f9d8a05ecffa45"}, - {file = "ruff-0.4.5-py3-none-win_arm64.whl", hash = "sha256:9d15de3425f53161b3f5a5658d4522e4eee5ea002bf2ac7aa380743dd9ad5fba"}, - {file = "ruff-0.4.5.tar.gz", hash = "sha256:286eabd47e7d4d521d199cab84deca135557e6d1e0f0d01c29e757c3cb151b54"}, + {file = "ruff-0.4.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ef995583a038cd4a7edf1422c9e19118e2511b8ba0b015861b4abd26ec5367c5"}, + {file = "ruff-0.4.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:602ebd7ad909eab6e7da65d3c091547781bb06f5f826974a53dbe563d357e53c"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f9ced5cbb7510fd7525448eeb204e0a22cabb6e99a3cb160272262817d49786"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04a80acfc862e0e1630c8b738e70dcca03f350bad9e106968a8108379e12b31f"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be47700ecb004dfa3fd4dcdddf7322d4e632de3c06cd05329d69c45c0280e618"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1ff930d6e05f444090a0139e4e13e1e2e1f02bd51bb4547734823c760c621e79"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f13410aabd3b5776f9c5699f42b37a3a348d65498c4310589bc6e5c548dc8a2f"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cf5cc02d3ae52dfb0c8a946eb7a1d6ffe4d91846ffc8ce388baa8f627e3bd50"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea3424793c29906407e3cf417f28fc33f689dacbbadfb52b7e9a809dd535dcef"}, + {file = "ruff-0.4.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1fa8561489fadf483ffbb091ea94b9c39a00ed63efacd426aae2f197a45e67fc"}, + {file = "ruff-0.4.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:4d5b914818d8047270308fe3e85d9d7f4a31ec86c6475c9f418fbd1624d198e0"}, + {file = "ruff-0.4.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4f02284335c766678778475e7698b7ab83abaf2f9ff0554a07b6f28df3b5c259"}, + {file = "ruff-0.4.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3a6a0a4f4b5f54fff7c860010ab3dd81425445e37d35701a965c0248819dde7a"}, + {file = "ruff-0.4.6-py3-none-win32.whl", hash = "sha256:9018bf59b3aa8ad4fba2b1dc0299a6e4e60a4c3bc62bbeaea222679865453062"}, + {file = "ruff-0.4.6-py3-none-win_amd64.whl", hash = "sha256:a769ae07ac74ff1a019d6bd529426427c3e30d75bdf1e08bb3d46ac8f417326a"}, + {file = "ruff-0.4.6-py3-none-win_arm64.whl", hash = "sha256:735a16407a1a8f58e4c5b913ad6102722e80b562dd17acb88887685ff6f20cf6"}, + {file = "ruff-0.4.6.tar.gz", hash = "sha256:a797a87da50603f71e6d0765282098245aca6e3b94b7c17473115167d8dfb0b7"}, ] [[package]] From db9fa79efcf60a0d89987fde241d2e299bd2b3cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 01:12:23 +0000 Subject: [PATCH 286/685] build(deps): bump typing-extensions from 4.12.0 to 4.12.1 Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.12.0 to 4.12.1. - [Release notes](https://github.com/python/typing_extensions/releases) - [Changelog](https://github.com/python/typing_extensions/blob/main/CHANGELOG.md) - [Commits](https://github.com/python/typing_extensions/compare/4.12.0...4.12.1) --- updated-dependencies: - dependency-name: typing-extensions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2a664373c3..689bf607bd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1589,13 +1589,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.12.0" +version = "4.12.1" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.12.0-py3-none-any.whl", hash = "sha256:b349c66bea9016ac22978d800cfff206d5f9816951f12a7d0ec5578b0a819594"}, - {file = "typing_extensions-4.12.0.tar.gz", hash = "sha256:8cbcdc8606ebcb0d95453ad7dc5065e6237b6aa230a31e81d0f440c30fed5fd8"}, + {file = "typing_extensions-4.12.1-py3-none-any.whl", hash = "sha256:6024b58b69089e5a89c347397254e35f1bf02a907728ec7fee9bf0fe837d203a"}, + {file = "typing_extensions-4.12.1.tar.gz", hash = "sha256:915f5e35ff76f56588223f15fdd5938f9a1cf9195c0de25130c627e4d597f6d1"}, ] [[package]] From 3ae4de89c024a1e0f0f8a9a430cee899c36f09aa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 01:11:39 +0000 Subject: [PATCH 287/685] build(deps-dev): bump ruff from 0.4.6 to 0.4.7 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.4.6 to 0.4.7. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.6...v0.4.7) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 689bf607bd..eaca1b96ce 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1423,28 +1423,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.4.6" +version = "0.4.7" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ef995583a038cd4a7edf1422c9e19118e2511b8ba0b015861b4abd26ec5367c5"}, - {file = "ruff-0.4.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:602ebd7ad909eab6e7da65d3c091547781bb06f5f826974a53dbe563d357e53c"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f9ced5cbb7510fd7525448eeb204e0a22cabb6e99a3cb160272262817d49786"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04a80acfc862e0e1630c8b738e70dcca03f350bad9e106968a8108379e12b31f"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be47700ecb004dfa3fd4dcdddf7322d4e632de3c06cd05329d69c45c0280e618"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1ff930d6e05f444090a0139e4e13e1e2e1f02bd51bb4547734823c760c621e79"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f13410aabd3b5776f9c5699f42b37a3a348d65498c4310589bc6e5c548dc8a2f"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cf5cc02d3ae52dfb0c8a946eb7a1d6ffe4d91846ffc8ce388baa8f627e3bd50"}, - {file = "ruff-0.4.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea3424793c29906407e3cf417f28fc33f689dacbbadfb52b7e9a809dd535dcef"}, - {file = "ruff-0.4.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1fa8561489fadf483ffbb091ea94b9c39a00ed63efacd426aae2f197a45e67fc"}, - {file = "ruff-0.4.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:4d5b914818d8047270308fe3e85d9d7f4a31ec86c6475c9f418fbd1624d198e0"}, - {file = "ruff-0.4.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4f02284335c766678778475e7698b7ab83abaf2f9ff0554a07b6f28df3b5c259"}, - {file = "ruff-0.4.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3a6a0a4f4b5f54fff7c860010ab3dd81425445e37d35701a965c0248819dde7a"}, - {file = "ruff-0.4.6-py3-none-win32.whl", hash = "sha256:9018bf59b3aa8ad4fba2b1dc0299a6e4e60a4c3bc62bbeaea222679865453062"}, - {file = "ruff-0.4.6-py3-none-win_amd64.whl", hash = "sha256:a769ae07ac74ff1a019d6bd529426427c3e30d75bdf1e08bb3d46ac8f417326a"}, - {file = "ruff-0.4.6-py3-none-win_arm64.whl", hash = "sha256:735a16407a1a8f58e4c5b913ad6102722e80b562dd17acb88887685ff6f20cf6"}, - {file = "ruff-0.4.6.tar.gz", hash = "sha256:a797a87da50603f71e6d0765282098245aca6e3b94b7c17473115167d8dfb0b7"}, + {file = "ruff-0.4.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e089371c67892a73b6bb1525608e89a2aca1b77b5440acf7a71dda5dac958f9e"}, + {file = "ruff-0.4.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:10f973d521d910e5f9c72ab27e409e839089f955be8a4c8826601a6323a89753"}, + {file = "ruff-0.4.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59c3d110970001dfa494bcd95478e62286c751126dfb15c3c46e7915fc49694f"}, + {file = "ruff-0.4.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa9773c6c00f4958f73b317bc0fd125295110c3776089f6ef318f4b775f0abe4"}, + {file = "ruff-0.4.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07fc80bbb61e42b3b23b10fda6a2a0f5a067f810180a3760c5ef1b456c21b9db"}, + {file = "ruff-0.4.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:fa4dafe3fe66d90e2e2b63fa1591dd6e3f090ca2128daa0be33db894e6c18648"}, + {file = "ruff-0.4.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7c0083febdec17571455903b184a10026603a1de078428ba155e7ce9358c5f6"}, + {file = "ruff-0.4.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad1b20e66a44057c326168437d680a2166c177c939346b19c0d6b08a62a37589"}, + {file = "ruff-0.4.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbf5d818553add7511c38b05532d94a407f499d1a76ebb0cad0374e32bc67202"}, + {file = "ruff-0.4.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:50e9651578b629baec3d1513b2534de0ac7ed7753e1382272b8d609997e27e83"}, + {file = "ruff-0.4.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8874a9df7766cb956b218a0a239e0a5d23d9e843e4da1e113ae1d27ee420877a"}, + {file = "ruff-0.4.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b9de9a6e49f7d529decd09381c0860c3f82fa0b0ea00ea78409b785d2308a567"}, + {file = "ruff-0.4.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:13a1768b0691619822ae6d446132dbdfd568b700ecd3652b20d4e8bc1e498f78"}, + {file = "ruff-0.4.7-py3-none-win32.whl", hash = "sha256:769e5a51df61e07e887b81e6f039e7ed3573316ab7dd9f635c5afaa310e4030e"}, + {file = "ruff-0.4.7-py3-none-win_amd64.whl", hash = "sha256:9e3ab684ad403a9ed1226894c32c3ab9c2e0718440f6f50c7c5829932bc9e054"}, + {file = "ruff-0.4.7-py3-none-win_arm64.whl", hash = "sha256:10f2204b9a613988e3484194c2c9e96a22079206b22b787605c255f130db5ed7"}, + {file = "ruff-0.4.7.tar.gz", hash = "sha256:2331d2b051dc77a289a653fcc6a42cce357087c5975738157cd966590b18b5e1"}, ] [[package]] From 85fc472aca565af3c89bdb6233deefec3796697c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 01:54:02 +0000 Subject: [PATCH 288/685] build(deps-dev): bump pytest from 8.2.1 to 8.2.2 Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.2.1 to 8.2.2. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.2.1...8.2.2) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index eaca1b96ce..21b93bd1ad 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1054,13 +1054,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pytest" -version = "8.2.1" +version = "8.2.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.2.1-py3-none-any.whl", hash = "sha256:faccc5d332b8c3719f40283d0d44aa5cf101cec36f88cde9ed8f2bc0538612b1"}, - {file = "pytest-8.2.1.tar.gz", hash = "sha256:5046e5b46d8e4cac199c373041f26be56fdb81eb4e67dc11d4e10811fc3408fd"}, + {file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"}, + {file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"}, ] [package.dependencies] From 7fce6670fdc44f994243babf37ba873f8c6ae587 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Jun 2024 01:18:56 +0000 Subject: [PATCH 289/685] build(deps-dev): bump ruff from 0.4.7 to 0.4.8 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.4.7 to 0.4.8. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.7...v0.4.8) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 21b93bd1ad..a481869ff6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1423,28 +1423,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.4.7" +version = "0.4.8" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e089371c67892a73b6bb1525608e89a2aca1b77b5440acf7a71dda5dac958f9e"}, - {file = "ruff-0.4.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:10f973d521d910e5f9c72ab27e409e839089f955be8a4c8826601a6323a89753"}, - {file = "ruff-0.4.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59c3d110970001dfa494bcd95478e62286c751126dfb15c3c46e7915fc49694f"}, - {file = "ruff-0.4.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa9773c6c00f4958f73b317bc0fd125295110c3776089f6ef318f4b775f0abe4"}, - {file = "ruff-0.4.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07fc80bbb61e42b3b23b10fda6a2a0f5a067f810180a3760c5ef1b456c21b9db"}, - {file = "ruff-0.4.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:fa4dafe3fe66d90e2e2b63fa1591dd6e3f090ca2128daa0be33db894e6c18648"}, - {file = "ruff-0.4.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7c0083febdec17571455903b184a10026603a1de078428ba155e7ce9358c5f6"}, - {file = "ruff-0.4.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad1b20e66a44057c326168437d680a2166c177c939346b19c0d6b08a62a37589"}, - {file = "ruff-0.4.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbf5d818553add7511c38b05532d94a407f499d1a76ebb0cad0374e32bc67202"}, - {file = "ruff-0.4.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:50e9651578b629baec3d1513b2534de0ac7ed7753e1382272b8d609997e27e83"}, - {file = "ruff-0.4.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8874a9df7766cb956b218a0a239e0a5d23d9e843e4da1e113ae1d27ee420877a"}, - {file = "ruff-0.4.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b9de9a6e49f7d529decd09381c0860c3f82fa0b0ea00ea78409b785d2308a567"}, - {file = "ruff-0.4.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:13a1768b0691619822ae6d446132dbdfd568b700ecd3652b20d4e8bc1e498f78"}, - {file = "ruff-0.4.7-py3-none-win32.whl", hash = "sha256:769e5a51df61e07e887b81e6f039e7ed3573316ab7dd9f635c5afaa310e4030e"}, - {file = "ruff-0.4.7-py3-none-win_amd64.whl", hash = "sha256:9e3ab684ad403a9ed1226894c32c3ab9c2e0718440f6f50c7c5829932bc9e054"}, - {file = "ruff-0.4.7-py3-none-win_arm64.whl", hash = "sha256:10f2204b9a613988e3484194c2c9e96a22079206b22b787605c255f130db5ed7"}, - {file = "ruff-0.4.7.tar.gz", hash = "sha256:2331d2b051dc77a289a653fcc6a42cce357087c5975738157cd966590b18b5e1"}, + {file = "ruff-0.4.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7663a6d78f6adb0eab270fa9cf1ff2d28618ca3a652b60f2a234d92b9ec89066"}, + {file = "ruff-0.4.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eeceb78da8afb6de0ddada93112869852d04f1cd0f6b80fe464fd4e35c330913"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aad360893e92486662ef3be0a339c5ca3c1b109e0134fcd37d534d4be9fb8de3"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:284c2e3f3396fb05f5f803c9fffb53ebbe09a3ebe7dda2929ed8d73ded736deb"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7354f921e3fbe04d2a62d46707e569f9315e1a613307f7311a935743c51a764"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:72584676164e15a68a15778fd1b17c28a519e7a0622161eb2debdcdabdc71883"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9678d5c9b43315f323af2233a04d747409d1e3aa6789620083a82d1066a35199"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704977a658131651a22b5ebeb28b717ef42ac6ee3b11e91dc87b633b5d83142b"}, + {file = "ruff-0.4.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05f8d6f0c3cce5026cecd83b7a143dcad503045857bc49662f736437380ad45"}, + {file = "ruff-0.4.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6ea874950daca5697309d976c9afba830d3bf0ed66887481d6bca1673fc5b66a"}, + {file = "ruff-0.4.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fc95aac2943ddf360376be9aa3107c8cf9640083940a8c5bd824be692d2216dc"}, + {file = "ruff-0.4.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:384154a1c3f4bf537bac69f33720957ee49ac8d484bfc91720cc94172026ceed"}, + {file = "ruff-0.4.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e9d5ce97cacc99878aa0d084c626a15cd21e6b3d53fd6f9112b7fc485918e1fa"}, + {file = "ruff-0.4.8-py3-none-win32.whl", hash = "sha256:6d795d7639212c2dfd01991259460101c22aabf420d9b943f153ab9d9706e6a9"}, + {file = "ruff-0.4.8-py3-none-win_amd64.whl", hash = "sha256:e14a3a095d07560a9d6769a72f781d73259655919d9b396c650fc98a8157555d"}, + {file = "ruff-0.4.8-py3-none-win_arm64.whl", hash = "sha256:14019a06dbe29b608f6b7cbcec300e3170a8d86efaddb7b23405cb7f7dcaf780"}, + {file = "ruff-0.4.8.tar.gz", hash = "sha256:16d717b1d57b2e2fd68bd0bf80fb43931b79d05a7131aa477d66fc40fbd86268"}, ] [[package]] From 9c3db89f294e47eda06e85bced9b43e6a4a43d69 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 02:01:35 +0000 Subject: [PATCH 290/685] build(deps): bump packaging from 24.0 to 24.1 Bumps [packaging](https://github.com/pypa/packaging) from 24.0 to 24.1. - [Release notes](https://github.com/pypa/packaging/releases) - [Changelog](https://github.com/pypa/packaging/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pypa/packaging/compare/24.0...24.1) --- updated-dependencies: - dependency-name: packaging dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index a481869ff6..334339f82f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -862,13 +862,13 @@ setuptools = "*" [[package]] name = "packaging" -version = "24.0" +version = "24.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, - {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] [[package]] From 26c823df2172892f3058face1f1b95314c6a8357 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 02:02:27 +0000 Subject: [PATCH 291/685] build(deps): bump typing-extensions from 4.12.1 to 4.12.2 Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.12.1 to 4.12.2. - [Release notes](https://github.com/python/typing_extensions/releases) - [Changelog](https://github.com/python/typing_extensions/blob/main/CHANGELOG.md) - [Commits](https://github.com/python/typing_extensions/compare/4.12.1...4.12.2) --- updated-dependencies: - dependency-name: typing-extensions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 334339f82f..78485e278a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1589,13 +1589,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.12.1" +version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.12.1-py3-none-any.whl", hash = "sha256:6024b58b69089e5a89c347397254e35f1bf02a907728ec7fee9bf0fe837d203a"}, - {file = "typing_extensions-4.12.1.tar.gz", hash = "sha256:915f5e35ff76f56588223f15fdd5938f9a1cf9195c0de25130c627e4d597f6d1"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] From 2e953c8f41412aab112727b97d2cabd8a74b7a98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 01:52:01 +0000 Subject: [PATCH 292/685] build(deps-dev): bump mkdocs-material from 9.5.25 to 9.5.26 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.25 to 9.5.26. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.25...9.5.26) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 78485e278a..6d462c9ac0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -750,13 +750,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.25" +version = "9.5.26" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.25-py3-none-any.whl", hash = "sha256:68fdab047a0b9bfbefe79ce267e8a7daaf5128bcf7867065fcd201ee335fece1"}, - {file = "mkdocs_material-9.5.25.tar.gz", hash = "sha256:d0662561efb725b712207e0ee01f035ca15633f29a64628e24f01ec99d7078f4"}, + {file = "mkdocs_material-9.5.26-py3-none-any.whl", hash = "sha256:5d01fb0aa1c7946a1e3ae8689aa2b11a030621ecb54894e35aabb74c21016312"}, + {file = "mkdocs_material-9.5.26.tar.gz", hash = "sha256:56aeb91d94cffa43b6296fa4fbf0eb7c840136e563eecfd12c2d9e92e50ba326"}, ] [package.dependencies] From c0fcc183a46f104c6eefaae2aab2f0af11c2a681 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 23:35:51 +0000 Subject: [PATCH 293/685] build(deps-dev): bump urllib3 from 2.2.1 to 2.2.2 Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.2.1 to 2.2.2. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/2.2.1...2.2.2) --- updated-dependencies: - dependency-name: urllib3 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6d462c9ac0..562a967856 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1600,13 +1600,13 @@ files = [ [[package]] name = "urllib3" -version = "2.2.1" +version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, - {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, ] [package.extras] From dbe14fed97e0c0f18c39096314b1a88129d8df2d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 01:16:34 +0000 Subject: [PATCH 294/685] build(deps): bump importlib-metadata from 7.1.0 to 7.2.0 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 7.1.0 to 7.2.0. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v7.1.0...v7.2.0) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 562a967856..261c3e3612 100644 --- a/poetry.lock +++ b/poetry.lock @@ -450,22 +450,22 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.1.0" +version = "7.2.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, - {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, + {file = "importlib_metadata-7.2.0-py3-none-any.whl", hash = "sha256:04e4aad329b8b948a5711d394fa8759cb80f009225441b4f2a02bd4d8e5f426c"}, + {file = "importlib_metadata-7.2.0.tar.gz", hash = "sha256:3ff4519071ed42740522d494d04819b666541b9752c43012f85afb2cc220fcc6"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "iniconfig" From 05446014a76d5b844dc5436e4a7bce1fdfe3033e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 01:15:55 +0000 Subject: [PATCH 295/685] build(deps-dev): bump ruff from 0.4.8 to 0.4.10 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.4.8 to 0.4.10. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.8...v0.4.10) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 261c3e3612..f161ab93e2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1423,28 +1423,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.4.8" +version = "0.4.10" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7663a6d78f6adb0eab270fa9cf1ff2d28618ca3a652b60f2a234d92b9ec89066"}, - {file = "ruff-0.4.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eeceb78da8afb6de0ddada93112869852d04f1cd0f6b80fe464fd4e35c330913"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aad360893e92486662ef3be0a339c5ca3c1b109e0134fcd37d534d4be9fb8de3"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:284c2e3f3396fb05f5f803c9fffb53ebbe09a3ebe7dda2929ed8d73ded736deb"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7354f921e3fbe04d2a62d46707e569f9315e1a613307f7311a935743c51a764"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:72584676164e15a68a15778fd1b17c28a519e7a0622161eb2debdcdabdc71883"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9678d5c9b43315f323af2233a04d747409d1e3aa6789620083a82d1066a35199"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704977a658131651a22b5ebeb28b717ef42ac6ee3b11e91dc87b633b5d83142b"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05f8d6f0c3cce5026cecd83b7a143dcad503045857bc49662f736437380ad45"}, - {file = "ruff-0.4.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6ea874950daca5697309d976c9afba830d3bf0ed66887481d6bca1673fc5b66a"}, - {file = "ruff-0.4.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fc95aac2943ddf360376be9aa3107c8cf9640083940a8c5bd824be692d2216dc"}, - {file = "ruff-0.4.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:384154a1c3f4bf537bac69f33720957ee49ac8d484bfc91720cc94172026ceed"}, - {file = "ruff-0.4.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e9d5ce97cacc99878aa0d084c626a15cd21e6b3d53fd6f9112b7fc485918e1fa"}, - {file = "ruff-0.4.8-py3-none-win32.whl", hash = "sha256:6d795d7639212c2dfd01991259460101c22aabf420d9b943f153ab9d9706e6a9"}, - {file = "ruff-0.4.8-py3-none-win_amd64.whl", hash = "sha256:e14a3a095d07560a9d6769a72f781d73259655919d9b396c650fc98a8157555d"}, - {file = "ruff-0.4.8-py3-none-win_arm64.whl", hash = "sha256:14019a06dbe29b608f6b7cbcec300e3170a8d86efaddb7b23405cb7f7dcaf780"}, - {file = "ruff-0.4.8.tar.gz", hash = "sha256:16d717b1d57b2e2fd68bd0bf80fb43931b79d05a7131aa477d66fc40fbd86268"}, + {file = "ruff-0.4.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c2c4d0859305ac5a16310eec40e4e9a9dec5dcdfbe92697acd99624e8638dac"}, + {file = "ruff-0.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a79489607d1495685cdd911a323a35871abfb7a95d4f98fc6f85e799227ac46e"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1dd1681dfa90a41b8376a61af05cc4dc5ff32c8f14f5fe20dba9ff5deb80cd6"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c75c53bb79d71310dc79fb69eb4902fba804a81f374bc86a9b117a8d077a1784"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18238c80ee3d9100d3535d8eb15a59c4a0753b45cc55f8bf38f38d6a597b9739"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d8f71885bce242da344989cae08e263de29752f094233f932d4f5cfb4ef36a81"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:330421543bd3222cdfec481e8ff3460e8702ed1e58b494cf9d9e4bf90db52b9d"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e9b6fb3a37b772628415b00c4fc892f97954275394ed611056a4b8a2631365e"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f54c481b39a762d48f64d97351048e842861c6662d63ec599f67d515cb417f6"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:67fe086b433b965c22de0b4259ddfe6fa541c95bf418499bedb9ad5fb8d1c631"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:acfaaab59543382085f9eb51f8e87bac26bf96b164839955f244d07125a982ef"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3cea07079962b2941244191569cf3a05541477286f5cafea638cd3aa94b56815"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:338a64ef0748f8c3a80d7f05785930f7965d71ca260904a9321d13be24b79695"}, + {file = "ruff-0.4.10-py3-none-win32.whl", hash = "sha256:ffe3cd2f89cb54561c62e5fa20e8f182c0a444934bf430515a4b422f1ab7b7ca"}, + {file = "ruff-0.4.10-py3-none-win_amd64.whl", hash = "sha256:67f67cef43c55ffc8cc59e8e0b97e9e60b4837c8f21e8ab5ffd5d66e196e25f7"}, + {file = "ruff-0.4.10-py3-none-win_arm64.whl", hash = "sha256:dd1fcee327c20addac7916ca4e2653fbbf2e8388d8a6477ce5b4e986b68ae6c0"}, + {file = "ruff-0.4.10.tar.gz", hash = "sha256:3aa4f2bc388a30d346c56524f7cacca85945ba124945fe489952aadb6b5cd804"}, ] [[package]] From 1590cdf31493c971d6f62f5f68219fad561c4b8f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 01:44:53 +0000 Subject: [PATCH 296/685] build(deps): bump importlib-metadata from 7.2.0 to 7.2.1 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 7.2.0 to 7.2.1. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v7.2.0...v7.2.1) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index f161ab93e2..332d8e0b57 100644 --- a/poetry.lock +++ b/poetry.lock @@ -450,13 +450,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.2.0" +version = "7.2.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.2.0-py3-none-any.whl", hash = "sha256:04e4aad329b8b948a5711d394fa8759cb80f009225441b4f2a02bd4d8e5f426c"}, - {file = "importlib_metadata-7.2.0.tar.gz", hash = "sha256:3ff4519071ed42740522d494d04819b666541b9752c43012f85afb2cc220fcc6"}, + {file = "importlib_metadata-7.2.1-py3-none-any.whl", hash = "sha256:ffef94b0b66046dd8ea2d619b701fe978d9264d38f3998bc4c27ec3b146a87c8"}, + {file = "importlib_metadata-7.2.1.tar.gz", hash = "sha256:509ecb2ab77071db5137c655e24ceb3eee66e7bbc6574165d0d114d9fc4bbe68"}, ] [package.dependencies] From 98b297c0752f608466ec91932f6ae7780b6492c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 01:42:09 +0000 Subject: [PATCH 297/685] build(deps-dev): bump mypy from 1.10.0 to 1.10.1 Bumps [mypy](https://github.com/python/mypy) from 1.10.0 to 1.10.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.10.0...v1.10.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index 332d8e0b57..74e95e27a3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -790,38 +790,38 @@ files = [ [[package]] name = "mypy" -version = "1.10.0" +version = "1.10.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, - {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, - {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, - {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, - {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, - {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, - {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, - {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, - {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, - {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, - {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, - {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, - {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, - {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, - {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, - {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, - {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, - {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, - {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, - {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, - {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, - {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, - {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, - {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, - {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, - {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, - {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, + {file = "mypy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e36f229acfe250dc660790840916eb49726c928e8ce10fbdf90715090fe4ae02"}, + {file = "mypy-1.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51a46974340baaa4145363b9e051812a2446cf583dfaeba124af966fa44593f7"}, + {file = "mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:901c89c2d67bba57aaaca91ccdb659aa3a312de67f23b9dfb059727cce2e2e0a"}, + {file = "mypy-1.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0cd62192a4a32b77ceb31272d9e74d23cd88c8060c34d1d3622db3267679a5d9"}, + {file = "mypy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a2cbc68cb9e943ac0814c13e2452d2046c2f2b23ff0278e26599224cf164e78d"}, + {file = "mypy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bd6f629b67bb43dc0d9211ee98b96d8dabc97b1ad38b9b25f5e4c4d7569a0c6a"}, + {file = "mypy-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1bbb3a6f5ff319d2b9d40b4080d46cd639abe3516d5a62c070cf0114a457d84"}, + {file = "mypy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8edd4e9bbbc9d7b79502eb9592cab808585516ae1bcc1446eb9122656c6066f"}, + {file = "mypy-1.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6166a88b15f1759f94a46fa474c7b1b05d134b1b61fca627dd7335454cc9aa6b"}, + {file = "mypy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bb9cd11c01c8606a9d0b83ffa91d0b236a0e91bc4126d9ba9ce62906ada868e"}, + {file = "mypy-1.10.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d8681909f7b44d0b7b86e653ca152d6dff0eb5eb41694e163c6092124f8246d7"}, + {file = "mypy-1.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:378c03f53f10bbdd55ca94e46ec3ba255279706a6aacaecac52ad248f98205d3"}, + {file = "mypy-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bacf8f3a3d7d849f40ca6caea5c055122efe70e81480c8328ad29c55c69e93e"}, + {file = "mypy-1.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:701b5f71413f1e9855566a34d6e9d12624e9e0a8818a5704d74d6b0402e66c04"}, + {file = "mypy-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:3c4c2992f6ea46ff7fce0072642cfb62af7a2484efe69017ed8b095f7b39ef31"}, + {file = "mypy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:604282c886497645ffb87b8f35a57ec773a4a2721161e709a4422c1636ddde5c"}, + {file = "mypy-1.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37fd87cab83f09842653f08de066ee68f1182b9b5282e4634cdb4b407266bade"}, + {file = "mypy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8addf6313777dbb92e9564c5d32ec122bf2c6c39d683ea64de6a1fd98b90fe37"}, + {file = "mypy-1.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cc3ca0a244eb9a5249c7c583ad9a7e881aa5d7b73c35652296ddcdb33b2b9c7"}, + {file = "mypy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:1b3a2ffce52cc4dbaeee4df762f20a2905aa171ef157b82192f2e2f368eec05d"}, + {file = "mypy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe85ed6836165d52ae8b88f99527d3d1b2362e0cb90b005409b8bed90e9059b3"}, + {file = "mypy-1.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2ae450d60d7d020d67ab440c6e3fae375809988119817214440033f26ddf7bf"}, + {file = "mypy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be84c06e6abd72f960ba9a71561c14137a583093ffcf9bbfaf5e613d63fa531"}, + {file = "mypy-1.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2189ff1e39db399f08205e22a797383613ce1cb0cb3b13d8bcf0170e45b96cc3"}, + {file = "mypy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:97a131ee36ac37ce9581f4220311247ab6cba896b4395b9c87af0675a13a755f"}, + {file = "mypy-1.10.1-py3-none-any.whl", hash = "sha256:71d8ac0b906354ebda8ef1673e5fde785936ac1f29ff6987c7483cfbd5a4235a"}, + {file = "mypy-1.10.1.tar.gz", hash = "sha256:1f8f492d7db9e3593ef42d4f115f04e556130f2819ad33ab84551403e97dd4c0"}, ] [package.dependencies] From db470b224efa5008b7da5c2d15b1e7faf6131aef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 01:51:34 +0000 Subject: [PATCH 298/685] build(deps): bump argcomplete from 3.3.0 to 3.4.0 Bumps [argcomplete](https://github.com/kislyuk/argcomplete) from 3.3.0 to 3.4.0. - [Release notes](https://github.com/kislyuk/argcomplete/releases) - [Changelog](https://github.com/kislyuk/argcomplete/blob/develop/Changes.rst) - [Commits](https://github.com/kislyuk/argcomplete/compare/v3.3.0...v3.4.0) --- updated-dependencies: - dependency-name: argcomplete dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 74e95e27a3..5f23a584c6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "argcomplete" -version = "3.3.0" +version = "3.4.0" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.3.0-py3-none-any.whl", hash = "sha256:c168c3723482c031df3c207d4ba8fa702717ccb9fc0bfe4117166c1f537b4a54"}, - {file = "argcomplete-3.3.0.tar.gz", hash = "sha256:fd03ff4a5b9e6580569d34b273f741e85cd9e072f3feeeee3eba4891c70eda62"}, + {file = "argcomplete-3.4.0-py3-none-any.whl", hash = "sha256:69a79e083a716173e5532e0fa3bef45f793f4e61096cf52b5a42c0211c8b8aa5"}, + {file = "argcomplete-3.4.0.tar.gz", hash = "sha256:c2abcdfe1be8ace47ba777d4fce319eb13bf8ad9dace8d085dcad6eded88057f"}, ] [package.extras] @@ -1784,4 +1784,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "f3966e7e19f4a5dae0b4500519ef776affe8b9e23609847f45794ece75d2c543" +content-hash = "ae23361204d1cc38d6ea93cceaa273548efffef705c09120767bb4e79196181a" diff --git a/pyproject.toml b/pyproject.toml index a4158614c9..090e9ba42b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,7 +47,7 @@ packaging = ">=19" tomlkit = ">=0.5.3,<1.0.0" jinja2 = ">=2.10.3" pyyaml = ">=3.08" -argcomplete = ">=1.12.1,<3.4" +argcomplete = ">=1.12.1,<3.5" typing-extensions = { version = "^4.0.1", python = "<3.8" } charset-normalizer = ">=2.1.0,<4" # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility From 363d4e6f9b7b98a8728287c4e7dec883bd101833 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 01:50:48 +0000 Subject: [PATCH 299/685] build(deps-dev): bump mkdocs-material from 9.5.26 to 9.5.27 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.26 to 9.5.27. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.26...9.5.27) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5f23a584c6..91ce69f45e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -750,13 +750,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.26" +version = "9.5.27" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.26-py3-none-any.whl", hash = "sha256:5d01fb0aa1c7946a1e3ae8689aa2b11a030621ecb54894e35aabb74c21016312"}, - {file = "mkdocs_material-9.5.26.tar.gz", hash = "sha256:56aeb91d94cffa43b6296fa4fbf0eb7c840136e563eecfd12c2d9e92e50ba326"}, + {file = "mkdocs_material-9.5.27-py3-none-any.whl", hash = "sha256:af8cc263fafa98bb79e9e15a8c966204abf15164987569bd1175fd66a7705182"}, + {file = "mkdocs_material-9.5.27.tar.gz", hash = "sha256:a7d4a35f6d4a62b0c43a0cfe7e987da0980c13587b5bc3c26e690ad494427ec0"}, ] [package.dependencies] From 927cbcb6b407620fadb75581212040aa07c3658d Mon Sep 17 00:00:00 2001 From: Jakob Keller <57402305+jakob-keller@users.noreply.github.com> Date: Wed, 26 Jun 2024 22:31:00 +0200 Subject: [PATCH 300/685] build(deps): remove `importlib_metadata` for Python >=3.10 --- commitizen/changelog_formats/__init__.py | 6 +++++- commitizen/cz/__init__.py | 6 +++++- commitizen/providers/__init__.py | 6 +++++- commitizen/version_schemes.py | 6 +++++- poetry.lock | 2 +- pyproject.toml | 2 +- tests/test_factory.py | 6 +++++- tests/test_version_schemes.py | 8 +++++++- 8 files changed, 34 insertions(+), 8 deletions(-) diff --git a/commitizen/changelog_formats/__init__.py b/commitizen/changelog_formats/__init__.py index b91579ee71..782bfb24cb 100644 --- a/commitizen/changelog_formats/__init__.py +++ b/commitizen/changelog_formats/__init__.py @@ -1,8 +1,12 @@ from __future__ import annotations +import sys from typing import ClassVar, Protocol -import importlib_metadata as metadata +if sys.version_info >= (3, 10): + from importlib import metadata +else: + import importlib_metadata as metadata from commitizen.changelog import Metadata from commitizen.config.base_config import BaseConfig diff --git a/commitizen/cz/__init__.py b/commitizen/cz/__init__.py index f889dbd842..04603a9ec4 100644 --- a/commitizen/cz/__init__.py +++ b/commitizen/cz/__init__.py @@ -2,10 +2,14 @@ import importlib import pkgutil +import sys import warnings from typing import Iterable -import importlib_metadata as metadata +if sys.version_info >= (3, 10): + from importlib import metadata +else: + import importlib_metadata as metadata from commitizen.cz.base import BaseCommitizen diff --git a/commitizen/providers/__init__.py b/commitizen/providers/__init__.py index a177b29961..3fd4ab1bfd 100644 --- a/commitizen/providers/__init__.py +++ b/commitizen/providers/__init__.py @@ -1,8 +1,12 @@ from __future__ import annotations +import sys from typing import cast -import importlib_metadata as metadata +if sys.version_info >= (3, 10): + from importlib import metadata +else: + import importlib_metadata as metadata from commitizen.config.base_config import BaseConfig from commitizen.exceptions import VersionProviderUnknown diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index 26a19ec1b1..346287a065 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -15,7 +15,11 @@ runtime_checkable, ) -import importlib_metadata as metadata +if sys.version_info >= (3, 10): + from importlib import metadata +else: + import importlib_metadata as metadata + from packaging.version import InvalidVersion # noqa: F401: Rexpose the common exception from packaging.version import Version as _BaseVersion diff --git a/poetry.lock b/poetry.lock index 91ce69f45e..e15e2e851c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1784,4 +1784,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "ae23361204d1cc38d6ea93cceaa273548efffef705c09120767bb4e79196181a" +content-hash = "5c50eb89395cfaea68afc05bf419017823990724552f6d6fa25d426122fc9525" diff --git a/pyproject.toml b/pyproject.toml index 090e9ba42b..8ee0cd46aa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,7 +51,7 @@ argcomplete = ">=1.12.1,<3.5" typing-extensions = { version = "^4.0.1", python = "<3.8" } charset-normalizer = ">=2.1.0,<4" # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility -importlib_metadata = { version = ">=4.13,<8"} +importlib_metadata = { version = ">=4.13,<8", python = "<3.10"} [tool.poetry.group.dev.dependencies] # dev tool diff --git a/tests/test_factory.py b/tests/test_factory.py index 0ac8c0b275..390742f467 100644 --- a/tests/test_factory.py +++ b/tests/test_factory.py @@ -1,7 +1,11 @@ import sys from textwrap import dedent -import importlib_metadata as metadata +if sys.version_info >= (3, 10): + from importlib import metadata +else: + import importlib_metadata as metadata + import pytest from commitizen import BaseCommitizen, defaults, factory diff --git a/tests/test_version_schemes.py b/tests/test_version_schemes.py index 985b371f7b..686c0bfde1 100644 --- a/tests/test_version_schemes.py +++ b/tests/test_version_schemes.py @@ -1,6 +1,12 @@ from __future__ import annotations -import importlib_metadata as metadata +import sys + +if sys.version_info >= (3, 10): + from importlib import metadata +else: + import importlib_metadata as metadata + import pytest from pytest_mock import MockerFixture From 1039b40429774b7f7e302c96e4c6361d6ba8181d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 Jun 2024 02:03:27 +0000 Subject: [PATCH 301/685] build(deps): bump importlib-metadata from 7.2.1 to 8.0.0 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 7.2.1 to 8.0.0. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v7.2.1...v8.0.0) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index e15e2e851c..c5b5324d5f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -450,13 +450,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.2.1" +version = "8.0.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.2.1-py3-none-any.whl", hash = "sha256:ffef94b0b66046dd8ea2d619b701fe978d9264d38f3998bc4c27ec3b146a87c8"}, - {file = "importlib_metadata-7.2.1.tar.gz", hash = "sha256:509ecb2ab77071db5137c655e24ceb3eee66e7bbc6574165d0d114d9fc4bbe68"}, + {file = "importlib_metadata-8.0.0-py3-none-any.whl", hash = "sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f"}, + {file = "importlib_metadata-8.0.0.tar.gz", hash = "sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812"}, ] [package.dependencies] @@ -1784,4 +1784,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "5c50eb89395cfaea68afc05bf419017823990724552f6d6fa25d426122fc9525" +content-hash = "099b3d500de134efa6a2a2c130f1de534c0a4e9a7e99b7929a8abac7f1f57ee7" diff --git a/pyproject.toml b/pyproject.toml index 8ee0cd46aa..83d3bc532a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,7 +51,7 @@ argcomplete = ">=1.12.1,<3.5" typing-extensions = { version = "^4.0.1", python = "<3.8" } charset-normalizer = ">=2.1.0,<4" # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility -importlib_metadata = { version = ">=4.13,<8", python = "<3.10"} +importlib_metadata = { version = ">=8.0.0,<9", python = "<3.10"} [tool.poetry.group.dev.dependencies] # dev tool From 72cc6020a98d76ebf2d68b90b2749a60d0b9f270 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 Jun 2024 02:14:36 +0000 Subject: [PATCH 302/685] build(deps-dev): bump ruff from 0.4.10 to 0.5.0 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.4.10 to 0.5.0. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.10...0.5.0) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 39 ++++++++++++++++++++------------------- pyproject.toml | 2 +- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/poetry.lock b/poetry.lock index c5b5324d5f..9e5ed1cf73 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1423,28 +1423,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.4.10" +version = "0.5.0" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c2c4d0859305ac5a16310eec40e4e9a9dec5dcdfbe92697acd99624e8638dac"}, - {file = "ruff-0.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a79489607d1495685cdd911a323a35871abfb7a95d4f98fc6f85e799227ac46e"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1dd1681dfa90a41b8376a61af05cc4dc5ff32c8f14f5fe20dba9ff5deb80cd6"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c75c53bb79d71310dc79fb69eb4902fba804a81f374bc86a9b117a8d077a1784"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18238c80ee3d9100d3535d8eb15a59c4a0753b45cc55f8bf38f38d6a597b9739"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d8f71885bce242da344989cae08e263de29752f094233f932d4f5cfb4ef36a81"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:330421543bd3222cdfec481e8ff3460e8702ed1e58b494cf9d9e4bf90db52b9d"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e9b6fb3a37b772628415b00c4fc892f97954275394ed611056a4b8a2631365e"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f54c481b39a762d48f64d97351048e842861c6662d63ec599f67d515cb417f6"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:67fe086b433b965c22de0b4259ddfe6fa541c95bf418499bedb9ad5fb8d1c631"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:acfaaab59543382085f9eb51f8e87bac26bf96b164839955f244d07125a982ef"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3cea07079962b2941244191569cf3a05541477286f5cafea638cd3aa94b56815"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:338a64ef0748f8c3a80d7f05785930f7965d71ca260904a9321d13be24b79695"}, - {file = "ruff-0.4.10-py3-none-win32.whl", hash = "sha256:ffe3cd2f89cb54561c62e5fa20e8f182c0a444934bf430515a4b422f1ab7b7ca"}, - {file = "ruff-0.4.10-py3-none-win_amd64.whl", hash = "sha256:67f67cef43c55ffc8cc59e8e0b97e9e60b4837c8f21e8ab5ffd5d66e196e25f7"}, - {file = "ruff-0.4.10-py3-none-win_arm64.whl", hash = "sha256:dd1fcee327c20addac7916ca4e2653fbbf2e8388d8a6477ce5b4e986b68ae6c0"}, - {file = "ruff-0.4.10.tar.gz", hash = "sha256:3aa4f2bc388a30d346c56524f7cacca85945ba124945fe489952aadb6b5cd804"}, + {file = "ruff-0.5.0-py3-none-linux_armv6l.whl", hash = "sha256:ee770ea8ab38918f34e7560a597cc0a8c9a193aaa01bfbd879ef43cb06bd9c4c"}, + {file = "ruff-0.5.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:38f3b8327b3cb43474559d435f5fa65dacf723351c159ed0dc567f7ab735d1b6"}, + {file = "ruff-0.5.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7594f8df5404a5c5c8f64b8311169879f6cf42142da644c7e0ba3c3f14130370"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:adc7012d6ec85032bc4e9065110df205752d64010bed5f958d25dbee9ce35de3"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d505fb93b0fabef974b168d9b27c3960714d2ecda24b6ffa6a87ac432905ea38"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9dc5cfd3558f14513ed0d5b70ce531e28ea81a8a3b1b07f0f48421a3d9e7d80a"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:db3ca35265de239a1176d56a464b51557fce41095c37d6c406e658cf80bbb362"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b1a321c4f68809fddd9b282fab6a8d8db796b270fff44722589a8b946925a2a8"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c4dfcd8d34b143916994b3876b63d53f56724c03f8c1a33a253b7b1e6bf2a7d"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81e5facfc9f4a674c6a78c64d38becfbd5e4f739c31fcd9ce44c849f1fad9e4c"}, + {file = "ruff-0.5.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e589e27971c2a3efff3fadafb16e5aef7ff93250f0134ec4b52052b673cf988d"}, + {file = "ruff-0.5.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d2ffbc3715a52b037bcb0f6ff524a9367f642cdc5817944f6af5479bbb2eb50e"}, + {file = "ruff-0.5.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:cd096e23c6a4f9c819525a437fa0a99d1c67a1b6bb30948d46f33afbc53596cf"}, + {file = "ruff-0.5.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:46e193b36f2255729ad34a49c9a997d506e58f08555366b2108783b3064a0e1e"}, + {file = "ruff-0.5.0-py3-none-win32.whl", hash = "sha256:49141d267100f5ceff541b4e06552e98527870eafa1acc9dec9139c9ec5af64c"}, + {file = "ruff-0.5.0-py3-none-win_amd64.whl", hash = "sha256:e9118f60091047444c1b90952736ee7b1792910cab56e9b9a9ac20af94cd0440"}, + {file = "ruff-0.5.0-py3-none-win_arm64.whl", hash = "sha256:ed5c4df5c1fb4518abcb57725b576659542bdbe93366f4f329e8f398c4b71178"}, + {file = "ruff-0.5.0.tar.gz", hash = "sha256:eb641b5873492cf9bd45bc9c5ae5320648218e04386a5f0c264ad6ccce8226a1"}, ] [[package]] @@ -1784,4 +1785,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "099b3d500de134efa6a2a2c130f1de534c0a4e9a7e99b7929a8abac7f1f57ee7" +content-hash = "dc743cceaf8c8d472ebd6f824feb5955c09b64b24f84d916fc910def5f7637b5" diff --git a/pyproject.toml b/pyproject.toml index 83d3bc532a..4558e42570 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,7 @@ pytest-regressions = "^2.4.0" pytest-freezer = "^0.4.6" pytest-xdist = "^3.1.0" # linter -ruff = ">=0.1.6,<0.5.0" +ruff = ">=0.5.0,<0.6.0" pre-commit = ">=2.18,<4.0" mypy = "^1.4" types-PyYAML = ">=5.4.3,<7.0.0" From 974de65ef67ebe8f0bb32f5fcb1b1cc1a5ce3f8c Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Mon, 1 Jul 2024 09:43:29 +0800 Subject: [PATCH 303/685] test(cli): change type comparison to use is --- tests/test_cli.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_cli.py b/tests/test_cli.py index 1c87bc022b..a91e633128 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -88,7 +88,7 @@ def test_commitizen_excepthook(capsys): with pytest.raises(SystemExit) as excinfo: cli.commitizen_excepthook(NotAGitProjectError, NotAGitProjectError(), "") - assert excinfo.type == SystemExit + assert excinfo.type is SystemExit assert excinfo.value.code == NotAGitProjectError.exit_code @@ -101,7 +101,7 @@ def test_commitizen_debug_excepthook(capsys): debug=True, ) - assert excinfo.type == SystemExit + assert excinfo.type is SystemExit assert excinfo.value.code == NotAGitProjectError.exit_code assert "NotAGitProjectError" in str(excinfo.traceback[0]) @@ -132,7 +132,7 @@ def test_commitizen_excepthook_no_raises(capsys): no_raise=[NotAGitProjectError.exit_code], ) - assert excinfo.type == SystemExit + assert excinfo.type is SystemExit assert excinfo.value.code == 0 From d9a83155d8b58e96f91fa7c8740dc9295d352885 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Jul 2024 01:16:50 +0000 Subject: [PATCH 304/685] build(deps-dev): bump mkdocs-material from 9.5.27 to 9.5.28 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.27 to 9.5.28. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.27...9.5.28) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9e5ed1cf73..fa5cbb021f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -750,13 +750,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.27" +version = "9.5.28" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.27-py3-none-any.whl", hash = "sha256:af8cc263fafa98bb79e9e15a8c966204abf15164987569bd1175fd66a7705182"}, - {file = "mkdocs_material-9.5.27.tar.gz", hash = "sha256:a7d4a35f6d4a62b0c43a0cfe7e987da0980c13587b5bc3c26e690ad494427ec0"}, + {file = "mkdocs_material-9.5.28-py3-none-any.whl", hash = "sha256:ff48b11b2a9f705dd210409ec3b418ab443dd36d96915bcba45a41f10ea27bfd"}, + {file = "mkdocs_material-9.5.28.tar.gz", hash = "sha256:9cba305283ad1600e3d0a67abe72d7a058b54793b47be39930911a588fe0336b"}, ] [package.dependencies] From 63cd0ebdadf19b6cf51525675274158f876c43e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Jul 2024 02:06:39 +0000 Subject: [PATCH 305/685] build(deps-dev): bump certifi from 2024.2.2 to 2024.7.4 Bumps [certifi](https://github.com/certifi/python-certifi) from 2024.2.2 to 2024.7.4. - [Commits](https://github.com/certifi/python-certifi/compare/2024.02.02...2024.07.04) --- updated-dependencies: - dependency-name: certifi dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index fa5cbb021f..04763e736e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "appnope" @@ -73,13 +73,13 @@ files = [ [[package]] name = "certifi" -version = "2024.2.2" +version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, ] [[package]] From 34a96224d0e4f6267db0e5ec16b91d973372652a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 19:28:40 +0000 Subject: [PATCH 306/685] build(deps-dev): bump zipp from 3.18.2 to 3.19.1 Bumps [zipp](https://github.com/jaraco/zipp) from 3.18.2 to 3.19.1. - [Release notes](https://github.com/jaraco/zipp/releases) - [Changelog](https://github.com/jaraco/zipp/blob/main/NEWS.rst) - [Commits](https://github.com/jaraco/zipp/compare/v3.18.2...v3.19.1) --- updated-dependencies: - dependency-name: zipp dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 04763e736e..65d8f40ad7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1769,18 +1769,18 @@ files = [ [[package]] name = "zipp" -version = "3.18.2" +version = "3.19.1" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.18.2-py3-none-any.whl", hash = "sha256:dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e"}, - {file = "zipp-3.18.2.tar.gz", hash = "sha256:6278d9ddbcfb1f1089a88fde84481528b07b0e10474e09dcfe53dad4069fa059"}, + {file = "zipp-3.19.1-py3-none-any.whl", hash = "sha256:2828e64edb5386ea6a52e7ba7cdb17bb30a73a858f5eb6eb93d8d36f5ea26091"}, + {file = "zipp-3.19.1.tar.gz", hash = "sha256:35427f6d5594f4acf82d25541438348c26736fa9b3afa2754bcd63cdb99d8e8f"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [metadata] lock-version = "2.0" From dd9e352e33bee0e1e129576f7f48d4da32600b4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 01:55:05 +0000 Subject: [PATCH 307/685] build(deps): bump tomlkit from 0.12.5 to 0.13.0 Bumps [tomlkit](https://github.com/sdispater/tomlkit) from 0.12.5 to 0.13.0. - [Release notes](https://github.com/sdispater/tomlkit/releases) - [Changelog](https://github.com/python-poetry/tomlkit/blob/master/CHANGELOG.md) - [Commits](https://github.com/sdispater/tomlkit/compare/0.12.5...0.13.0) --- updated-dependencies: - dependency-name: tomlkit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 65d8f40ad7..03f038d0fc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1520,13 +1520,13 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.5" +version = "0.13.0" description = "Style preserving TOML library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomlkit-0.12.5-py3-none-any.whl", hash = "sha256:af914f5a9c59ed9d0762c7b64d3b5d5df007448eb9cd2edc8a46b1eafead172f"}, - {file = "tomlkit-0.12.5.tar.gz", hash = "sha256:eef34fba39834d4d6b73c9ba7f3e4d1c417a4e56f89a7e96e090dd0d24b8fb3c"}, + {file = "tomlkit-0.13.0-py3-none-any.whl", hash = "sha256:7075d3042d03b80f603482d69bf0c8f345c2b30e41699fd8883227f89972b264"}, + {file = "tomlkit-0.13.0.tar.gz", hash = "sha256:08ad192699734149f5b97b45f1f18dad7eb1b6d16bc72ad0c2335772650d7b72"}, ] [[package]] From 997db8e9d2c71254ea2cc1070306fe3acee8f1cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jul 2024 01:24:17 +0000 Subject: [PATCH 308/685] build(deps-dev): bump ruff from 0.5.0 to 0.5.1 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.0 to 0.5.1. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.5.0...0.5.1) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 03f038d0fc..391d35c55b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1423,29 +1423,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.5.0" +version = "0.5.1" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.0-py3-none-linux_armv6l.whl", hash = "sha256:ee770ea8ab38918f34e7560a597cc0a8c9a193aaa01bfbd879ef43cb06bd9c4c"}, - {file = "ruff-0.5.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:38f3b8327b3cb43474559d435f5fa65dacf723351c159ed0dc567f7ab735d1b6"}, - {file = "ruff-0.5.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7594f8df5404a5c5c8f64b8311169879f6cf42142da644c7e0ba3c3f14130370"}, - {file = "ruff-0.5.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:adc7012d6ec85032bc4e9065110df205752d64010bed5f958d25dbee9ce35de3"}, - {file = "ruff-0.5.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d505fb93b0fabef974b168d9b27c3960714d2ecda24b6ffa6a87ac432905ea38"}, - {file = "ruff-0.5.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9dc5cfd3558f14513ed0d5b70ce531e28ea81a8a3b1b07f0f48421a3d9e7d80a"}, - {file = "ruff-0.5.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:db3ca35265de239a1176d56a464b51557fce41095c37d6c406e658cf80bbb362"}, - {file = "ruff-0.5.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b1a321c4f68809fddd9b282fab6a8d8db796b270fff44722589a8b946925a2a8"}, - {file = "ruff-0.5.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c4dfcd8d34b143916994b3876b63d53f56724c03f8c1a33a253b7b1e6bf2a7d"}, - {file = "ruff-0.5.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81e5facfc9f4a674c6a78c64d38becfbd5e4f739c31fcd9ce44c849f1fad9e4c"}, - {file = "ruff-0.5.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e589e27971c2a3efff3fadafb16e5aef7ff93250f0134ec4b52052b673cf988d"}, - {file = "ruff-0.5.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d2ffbc3715a52b037bcb0f6ff524a9367f642cdc5817944f6af5479bbb2eb50e"}, - {file = "ruff-0.5.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:cd096e23c6a4f9c819525a437fa0a99d1c67a1b6bb30948d46f33afbc53596cf"}, - {file = "ruff-0.5.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:46e193b36f2255729ad34a49c9a997d506e58f08555366b2108783b3064a0e1e"}, - {file = "ruff-0.5.0-py3-none-win32.whl", hash = "sha256:49141d267100f5ceff541b4e06552e98527870eafa1acc9dec9139c9ec5af64c"}, - {file = "ruff-0.5.0-py3-none-win_amd64.whl", hash = "sha256:e9118f60091047444c1b90952736ee7b1792910cab56e9b9a9ac20af94cd0440"}, - {file = "ruff-0.5.0-py3-none-win_arm64.whl", hash = "sha256:ed5c4df5c1fb4518abcb57725b576659542bdbe93366f4f329e8f398c4b71178"}, - {file = "ruff-0.5.0.tar.gz", hash = "sha256:eb641b5873492cf9bd45bc9c5ae5320648218e04386a5f0c264ad6ccce8226a1"}, + {file = "ruff-0.5.1-py3-none-linux_armv6l.whl", hash = "sha256:6ecf968fcf94d942d42b700af18ede94b07521bd188aaf2cd7bc898dd8cb63b6"}, + {file = "ruff-0.5.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:204fb0a472f00f2e6280a7c8c7c066e11e20e23a37557d63045bf27a616ba61c"}, + {file = "ruff-0.5.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d235968460e8758d1e1297e1de59a38d94102f60cafb4d5382033c324404ee9d"}, + {file = "ruff-0.5.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38beace10b8d5f9b6bdc91619310af6d63dd2019f3fb2d17a2da26360d7962fa"}, + {file = "ruff-0.5.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e478d2f09cf06add143cf8c4540ef77b6599191e0c50ed976582f06e588c994"}, + {file = "ruff-0.5.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0368d765eec8247b8550251c49ebb20554cc4e812f383ff9f5bf0d5d94190b0"}, + {file = "ruff-0.5.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:3a9a9a1b582e37669b0138b7c1d9d60b9edac880b80eb2baba6d0e566bdeca4d"}, + {file = "ruff-0.5.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bdd9f723e16003623423affabcc0a807a66552ee6a29f90eddad87a40c750b78"}, + {file = "ruff-0.5.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:be9fd62c1e99539da05fcdc1e90d20f74aec1b7a1613463ed77870057cd6bd96"}, + {file = "ruff-0.5.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e216fc75a80ea1fbd96af94a6233d90190d5b65cc3d5dfacf2bd48c3e067d3e1"}, + {file = "ruff-0.5.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c4c2112e9883a40967827d5c24803525145e7dab315497fae149764979ac7929"}, + {file = "ruff-0.5.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:dfaf11c8a116394da3b65cd4b36de30d8552fa45b8119b9ef5ca6638ab964fa3"}, + {file = "ruff-0.5.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d7ceb9b2fe700ee09a0c6b192c5ef03c56eb82a0514218d8ff700f6ade004108"}, + {file = "ruff-0.5.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:bac6288e82f6296f82ed5285f597713acb2a6ae26618ffc6b429c597b392535c"}, + {file = "ruff-0.5.1-py3-none-win32.whl", hash = "sha256:5c441d9c24ec09e1cb190a04535c5379b36b73c4bc20aa180c54812c27d1cca4"}, + {file = "ruff-0.5.1-py3-none-win_amd64.whl", hash = "sha256:b1789bf2cd3d1b5a7d38397cac1398ddf3ad7f73f4de01b1e913e2abc7dfc51d"}, + {file = "ruff-0.5.1-py3-none-win_arm64.whl", hash = "sha256:2875b7596a740cbbd492f32d24be73e545a4ce0a3daf51e4f4e609962bfd3cd2"}, + {file = "ruff-0.5.1.tar.gz", hash = "sha256:3164488aebd89b1745b47fd00604fb4358d774465f20d1fcd907f9c0fc1b0655"}, ] [[package]] From 9a89ae52aaac856e09c9bec82647373998ca19f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 01:23:48 +0000 Subject: [PATCH 309/685] build(deps-dev): bump ruff from 0.5.1 to 0.5.2 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.1 to 0.5.2. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.5.1...0.5.2) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 391d35c55b..a48ffe1471 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1423,29 +1423,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.5.1" +version = "0.5.2" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.1-py3-none-linux_armv6l.whl", hash = "sha256:6ecf968fcf94d942d42b700af18ede94b07521bd188aaf2cd7bc898dd8cb63b6"}, - {file = "ruff-0.5.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:204fb0a472f00f2e6280a7c8c7c066e11e20e23a37557d63045bf27a616ba61c"}, - {file = "ruff-0.5.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d235968460e8758d1e1297e1de59a38d94102f60cafb4d5382033c324404ee9d"}, - {file = "ruff-0.5.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38beace10b8d5f9b6bdc91619310af6d63dd2019f3fb2d17a2da26360d7962fa"}, - {file = "ruff-0.5.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e478d2f09cf06add143cf8c4540ef77b6599191e0c50ed976582f06e588c994"}, - {file = "ruff-0.5.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0368d765eec8247b8550251c49ebb20554cc4e812f383ff9f5bf0d5d94190b0"}, - {file = "ruff-0.5.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:3a9a9a1b582e37669b0138b7c1d9d60b9edac880b80eb2baba6d0e566bdeca4d"}, - {file = "ruff-0.5.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bdd9f723e16003623423affabcc0a807a66552ee6a29f90eddad87a40c750b78"}, - {file = "ruff-0.5.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:be9fd62c1e99539da05fcdc1e90d20f74aec1b7a1613463ed77870057cd6bd96"}, - {file = "ruff-0.5.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e216fc75a80ea1fbd96af94a6233d90190d5b65cc3d5dfacf2bd48c3e067d3e1"}, - {file = "ruff-0.5.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c4c2112e9883a40967827d5c24803525145e7dab315497fae149764979ac7929"}, - {file = "ruff-0.5.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:dfaf11c8a116394da3b65cd4b36de30d8552fa45b8119b9ef5ca6638ab964fa3"}, - {file = "ruff-0.5.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d7ceb9b2fe700ee09a0c6b192c5ef03c56eb82a0514218d8ff700f6ade004108"}, - {file = "ruff-0.5.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:bac6288e82f6296f82ed5285f597713acb2a6ae26618ffc6b429c597b392535c"}, - {file = "ruff-0.5.1-py3-none-win32.whl", hash = "sha256:5c441d9c24ec09e1cb190a04535c5379b36b73c4bc20aa180c54812c27d1cca4"}, - {file = "ruff-0.5.1-py3-none-win_amd64.whl", hash = "sha256:b1789bf2cd3d1b5a7d38397cac1398ddf3ad7f73f4de01b1e913e2abc7dfc51d"}, - {file = "ruff-0.5.1-py3-none-win_arm64.whl", hash = "sha256:2875b7596a740cbbd492f32d24be73e545a4ce0a3daf51e4f4e609962bfd3cd2"}, - {file = "ruff-0.5.1.tar.gz", hash = "sha256:3164488aebd89b1745b47fd00604fb4358d774465f20d1fcd907f9c0fc1b0655"}, + {file = "ruff-0.5.2-py3-none-linux_armv6l.whl", hash = "sha256:7bab8345df60f9368d5f4594bfb8b71157496b44c30ff035d1d01972e764d3be"}, + {file = "ruff-0.5.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:1aa7acad382ada0189dbe76095cf0a36cd0036779607c397ffdea16517f535b1"}, + {file = "ruff-0.5.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:aec618d5a0cdba5592c60c2dee7d9c865180627f1a4a691257dea14ac1aa264d"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b62adc5ce81780ff04077e88bac0986363e4a3260ad3ef11ae9c14aa0e67ef"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dc42ebf56ede83cb080a50eba35a06e636775649a1ffd03dc986533f878702a3"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c15c6e9f88c67ffa442681365d11df38afb11059fc44238e71a9d9f1fd51de70"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d3de9a5960f72c335ef00763d861fc5005ef0644cb260ba1b5a115a102157251"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe5a968ae933e8f7627a7b2fc8893336ac2be0eb0aace762d3421f6e8f7b7f83"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a04f54a9018f75615ae52f36ea1c5515e356e5d5e214b22609ddb546baef7132"}, + {file = "ruff-0.5.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ed02fb52e3741f0738db5f93e10ae0fb5c71eb33a4f2ba87c9a2fa97462a649"}, + {file = "ruff-0.5.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3cf8fe659f6362530435d97d738eb413e9f090e7e993f88711b0377fbdc99f60"}, + {file = "ruff-0.5.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:237a37e673e9f3cbfff0d2243e797c4862a44c93d2f52a52021c1a1b0899f846"}, + {file = "ruff-0.5.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2a2949ce7c1cbd8317432ada80fe32156df825b2fd611688814c8557824ef060"}, + {file = "ruff-0.5.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:481af57c8e99da92ad168924fd82220266043c8255942a1cb87958b108ac9335"}, + {file = "ruff-0.5.2-py3-none-win32.whl", hash = "sha256:f1aea290c56d913e363066d83d3fc26848814a1fed3d72144ff9c930e8c7c718"}, + {file = "ruff-0.5.2-py3-none-win_amd64.whl", hash = "sha256:8532660b72b5d94d2a0a7a27ae7b9b40053662d00357bb2a6864dd7e38819084"}, + {file = "ruff-0.5.2-py3-none-win_arm64.whl", hash = "sha256:73439805c5cb68f364d826a5c5c4b6c798ded6b7ebaa4011f01ce6c94e4d5583"}, + {file = "ruff-0.5.2.tar.gz", hash = "sha256:2c0df2d2de685433794a14d8d2e240df619b748fbe3367346baa519d8e6f1ca2"}, ] [[package]] From 458345eb2ff0f48e5f7bfac008a729978ebf1e17 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 01:24:09 +0000 Subject: [PATCH 310/685] build(deps-dev): bump mkdocs-material from 9.5.28 to 9.5.29 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.28 to 9.5.29. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.28...9.5.29) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index a48ffe1471..384d060b63 100644 --- a/poetry.lock +++ b/poetry.lock @@ -750,13 +750,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.28" +version = "9.5.29" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.28-py3-none-any.whl", hash = "sha256:ff48b11b2a9f705dd210409ec3b418ab443dd36d96915bcba45a41f10ea27bfd"}, - {file = "mkdocs_material-9.5.28.tar.gz", hash = "sha256:9cba305283ad1600e3d0a67abe72d7a058b54793b47be39930911a588fe0336b"}, + {file = "mkdocs_material-9.5.29-py3-none-any.whl", hash = "sha256:afc1f508e2662ded95f0a35a329e8a5acd73ee88ca07ba73836eb6fcdae5d8b4"}, + {file = "mkdocs_material-9.5.29.tar.gz", hash = "sha256:3e977598ec15a4ddad5c4dfc9e08edab6023edb51e88f0729bd27be77e3d322a"}, ] [package.dependencies] From be744f9688e562148b9107f53727eb147ab37fef Mon Sep 17 00:00:00 2001 From: Jakob Widauer <jakob.widauer@gmail.com> Date: Wed, 10 Jul 2024 00:33:37 +0200 Subject: [PATCH 311/685] feat: add argument to limit length of commit message in checks --- commitizen/cli.py | 6 +++++ commitizen/commands/check.py | 5 ++++ docs/commands/check.md | 10 ++++++++ tests/commands/test_check_command.py | 25 +++++++++++++++++++ ...shows_description_when_use_help_option.txt | 3 +++ 5 files changed, 49 insertions(+) diff --git a/commitizen/cli.py b/commitizen/cli.py index 1d1ebe1f68..00be6daf15 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -466,6 +466,12 @@ def __call__( "If the message starts by one of these prefixes, " "the message won't be checked against the regex", }, + { + "name": ["-l", "--message-length-limit"], + "type": int, + "default": 0, + "help": "length limit of the commit message; 0 for no limit", + }, ], }, { diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index 6e98f8cb3f..13b8555b6d 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -31,6 +31,7 @@ def __init__(self, config: BaseConfig, arguments: dict[str, Any], cwd=os.getcwd( self.allow_abort: bool = bool( arguments.get("allow_abort", config.settings["allow_abort"]) ) + self.max_msg_length: int = arguments.get("message_length_limit", 0) # we need to distinguish between None and [], which is a valid value @@ -145,4 +146,8 @@ def validate_commit_message(self, commit_msg: str, pattern: str) -> bool: if any(map(commit_msg.startswith, self.allowed_prefixes)): return True + if self.max_msg_length: + msg_len = len(commit_msg.partition("\n")[0].strip()) + if msg_len > self.max_msg_length: + return False return bool(re.match(pattern, commit_msg)) diff --git a/docs/commands/check.md b/docs/commands/check.md index c31fd085ee..751a47aa2f 100644 --- a/docs/commands/check.md +++ b/docs/commands/check.md @@ -75,3 +75,13 @@ By default, the the following prefixes are allowed: `Merge`, `Revert`, `Pull Req ```bash cz check --message MESSAGE --allowed-prefixes 'Merge' 'Revert' 'Custom Prefix' ``` + +### Commit message length limit + +The argument `-l` (or `--message-length-limmit`) followed by a positive number, can limit the length of commit messages. +For example, `cz check --message MESSAGE -l 3` would fail the check, since `MESSAGE` is more than 3 characters long. +By default, the limit is set to 0, which means no limit on the length. + +**Note that the limit applies only to the first line of the message.*** +Specifically, for `ConventionalCommitsCz` the length only counts from the type of change to the subject, +while the body, and the footer are not counted. diff --git a/tests/commands/test_check_command.py b/tests/commands/test_check_command.py index 47bdafd651..328ebd78a9 100644 --- a/tests/commands/test_check_command.py +++ b/tests/commands/test_check_command.py @@ -427,3 +427,28 @@ def test_check_command_shows_description_when_use_help_option( out, _ = capsys.readouterr() file_regression.check(out, extension=".txt") + + +def test_check_command_with_message_length_limit(config, mocker: MockFixture): + success_mock = mocker.patch("commitizen.out.success") + message = "fix(scope): some commit message" + check_cmd = commands.Check( + config=config, + arguments={"message": message, "message_length_limit": len(message) + 1}, + ) + + check_cmd() + success_mock.assert_called_once() + + +def test_check_command_with_message_length_limit_exceeded(config, mocker: MockFixture): + error_mock = mocker.patch("commitizen.out.error") + message = "fix(scope): some commit message" + check_cmd = commands.Check( + config=config, + arguments={"message": message, "message_length_limit": len(message) - 1}, + ) + + with pytest.raises(InvalidCommitMessageError): + check_cmd() + error_mock.assert_called_once() diff --git a/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt b/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt index 56e42388dc..74b9df7196 100644 --- a/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt @@ -1,6 +1,7 @@ usage: cz check [-h] [--commit-msg-file COMMIT_MSG_FILE | --rev-range REV_RANGE | -m MESSAGE] [--allow-abort] [--allowed-prefixes [ALLOWED_PREFIXES ...]] + [-l MESSAGE_LENGTH_LIMIT] validates that a commit message matches the commitizen schema @@ -20,3 +21,5 @@ options: allowed commit message prefixes. If the message starts by one of these prefixes, the message won't be checked against the regex + -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT + length limit of the commit message; 0 for no limit From 545f14348514ac1adf3d84d46755ef56f082756b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:48:59 +0000 Subject: [PATCH 312/685] =?UTF-8?q?bump:=20version=203.27.0=20=E2=86=92=20?= =?UTF-8?q?3.28.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d0149b5fae..8d0cf55529 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v3.27.0 # automatically updated by Commitizen + rev: v3.28.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index c3a3ecc5e1..5ec2dd2d8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.28.0 (2024-07-17) + +### Feat + +- add argument to limit length of commit message in checks + ## v3.27.0 (2024-05-22) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 62bfee6c53..87dca02966 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.27.0" +__version__ = "3.28.0" diff --git a/pyproject.toml b/pyproject.toml index 4558e42570..643fb17d2d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.27.0" +version = "3.28.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.27.0" +version = "3.28.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 1f1e30f90056c181941ee100d82ee52457aa6edf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:49:35 +0000 Subject: [PATCH 313/685] docs(cli/screenshots): update CLI screenshots [skip ci] --- docs/images/cli_help/cz_check___help.svg | 134 ++++++++++++----------- 1 file changed, 73 insertions(+), 61 deletions(-) diff --git a/docs/images/cli_help/cz_check___help.svg b/docs/images/cli_help/cz_check___help.svg index df1af46637..922a6458a6 100644 --- a/docs/images/cli_help/cz_check___help.svg +++ b/docs/images/cli_help/cz_check___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 660.0" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 733.1999999999999" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,138 +19,150 @@ font-weight: 700; } - .terminal-3657119390-matrix { + .terminal-1820510314-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3657119390-title { + .terminal-1820510314-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3657119390-r1 { fill: #c5c8c6 } -.terminal-3657119390-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-3657119390-r3 { fill: #d0b344 } -.terminal-3657119390-r4 { fill: #68a0b3;font-weight: bold } + .terminal-1820510314-r1 { fill: #c5c8c6 } +.terminal-1820510314-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-1820510314-r3 { fill: #d0b344 } +.terminal-1820510314-r4 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-3657119390-clip-terminal"> - <rect x="0" y="0" width="975.0" height="609.0" /> + <clipPath id="terminal-1820510314-clip-terminal"> + <rect x="0" y="0" width="975.0" height="682.1999999999999" /> </clipPath> - <clipPath id="terminal-3657119390-line-0"> + <clipPath id="terminal-1820510314-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-1"> +<clipPath id="terminal-1820510314-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-2"> +<clipPath id="terminal-1820510314-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-3"> +<clipPath id="terminal-1820510314-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-4"> +<clipPath id="terminal-1820510314-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-5"> +<clipPath id="terminal-1820510314-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-6"> +<clipPath id="terminal-1820510314-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-7"> +<clipPath id="terminal-1820510314-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-8"> +<clipPath id="terminal-1820510314-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-9"> +<clipPath id="terminal-1820510314-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-10"> +<clipPath id="terminal-1820510314-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-11"> +<clipPath id="terminal-1820510314-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-12"> +<clipPath id="terminal-1820510314-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-13"> +<clipPath id="terminal-1820510314-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-14"> +<clipPath id="terminal-1820510314-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-15"> +<clipPath id="terminal-1820510314-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-16"> +<clipPath id="terminal-1820510314-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-17"> +<clipPath id="terminal-1820510314-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-18"> +<clipPath id="terminal-1820510314-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-19"> +<clipPath id="terminal-1820510314-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-20"> +<clipPath id="terminal-1820510314-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-21"> +<clipPath id="terminal-1820510314-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-22"> +<clipPath id="terminal-1820510314-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3657119390-line-23"> +<clipPath id="terminal-1820510314-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-1820510314-line-24"> + <rect x="0" y="587.1" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1820510314-line-25"> + <rect x="0" y="611.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-1820510314-line-26"> + <rect x="0" y="635.9" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="658" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="731.2" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-3657119390-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1820510314-clip-terminal)"> - <g class="terminal-3657119390-matrix"> - <text class="terminal-3657119390-r1" x="0" y="20" textLength="207.4" clip-path="url(#terminal-3657119390-line-0)">$ cz check --help</text><text class="terminal-3657119390-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3657119390-line-0)"> -</text><text class="terminal-3657119390-r1" x="0" y="44.4" textLength="195.2" clip-path="url(#terminal-3657119390-line-1)">usage: cz check </text><text class="terminal-3657119390-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-1)">[</text><text class="terminal-3657119390-r1" x="207.4" y="44.4" textLength="24.4" clip-path="url(#terminal-3657119390-line-1)">-h</text><text class="terminal-3657119390-r2" x="231.8" y="44.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-1)">]</text><text class="terminal-3657119390-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-1)"> -</text><text class="terminal-3657119390-r2" x="195.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3657119390-line-2)">[</text><text class="terminal-3657119390-r1" x="207.4" y="68.8" textLength="768.6" clip-path="url(#terminal-3657119390-line-2)">--commit-msg-file COMMIT_MSG_FILE | --rev-range REV_RANGE | -m </text><text class="terminal-3657119390-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3657119390-line-2)"> -</text><text class="terminal-3657119390-r1" x="0" y="93.2" textLength="85.4" clip-path="url(#terminal-3657119390-line-3)">MESSAGE</text><text class="terminal-3657119390-r2" x="85.4" y="93.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-3)">]</text><text class="terminal-3657119390-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-3)"> -</text><text class="terminal-3657119390-r2" x="195.2" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)">[</text><text class="terminal-3657119390-r1" x="207.4" y="117.6" textLength="158.6" clip-path="url(#terminal-3657119390-line-4)">--allow-abort</text><text class="terminal-3657119390-r2" x="366" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)">]</text><text class="terminal-3657119390-r2" x="390.4" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)">[</text><text class="terminal-3657119390-r1" x="402.6" y="117.6" textLength="231.8" clip-path="url(#terminal-3657119390-line-4)">--allowed-prefixes </text><text class="terminal-3657119390-r2" x="634.4" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)">[</text><text class="terminal-3657119390-r1" x="646.6" y="117.6" textLength="207.4" clip-path="url(#terminal-3657119390-line-4)">ALLOWED_PREFIXES </text><text class="terminal-3657119390-r3" x="854" y="117.6" textLength="36.6" clip-path="url(#terminal-3657119390-line-4)">...</text><text class="terminal-3657119390-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)">]</text><text class="terminal-3657119390-r2" x="902.8" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)">]</text><text class="terminal-3657119390-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-4)"> -</text><text class="terminal-3657119390-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3657119390-line-5)"> -</text><text class="terminal-3657119390-r1" x="0" y="166.4" textLength="744.2" clip-path="url(#terminal-3657119390-line-6)">validates that a commit message matches the commitizen schema</text><text class="terminal-3657119390-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-6)"> -</text><text class="terminal-3657119390-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3657119390-line-7)"> -</text><text class="terminal-3657119390-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-3657119390-line-8)">options:</text><text class="terminal-3657119390-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-8)"> -</text><text class="terminal-3657119390-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-3657119390-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-3657119390-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-9)"> -</text><text class="terminal-3657119390-r1" x="0" y="264" textLength="427" clip-path="url(#terminal-3657119390-line-10)">  --commit-msg-file COMMIT_MSG_FILE</text><text class="terminal-3657119390-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3657119390-line-10)"> -</text><text class="terminal-3657119390-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-3657119390-line-11)">                        ask for the name of the temporal file that contains</text><text class="terminal-3657119390-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-11)"> -</text><text class="terminal-3657119390-r1" x="0" y="312.8" textLength="902.8" clip-path="url(#terminal-3657119390-line-12)">                        the commit message. Using it in a git hook script:</text><text class="terminal-3657119390-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3657119390-line-12)"> -</text><text class="terminal-3657119390-r3" x="292.8" y="337.2" textLength="97.6" clip-path="url(#terminal-3657119390-line-13)">MSG_FILE</text><text class="terminal-3657119390-r1" x="390.4" y="337.2" textLength="24.4" clip-path="url(#terminal-3657119390-line-13)">=$</text><text class="terminal-3657119390-r4" x="414.8" y="337.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-13)">1</text><text class="terminal-3657119390-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-13)"> -</text><text class="terminal-3657119390-r1" x="0" y="361.6" textLength="280.6" clip-path="url(#terminal-3657119390-line-14)">  --rev-range REV_RANGE</text><text class="terminal-3657119390-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-14)"> -</text><text class="terminal-3657119390-r1" x="0" y="386" textLength="854" clip-path="url(#terminal-3657119390-line-15)">                        a range of git rev to check. e.g, master..HEAD</text><text class="terminal-3657119390-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3657119390-line-15)"> -</text><text class="terminal-3657119390-r1" x="0" y="410.4" textLength="378.2" clip-path="url(#terminal-3657119390-line-16)">  -m MESSAGE, --message MESSAGE</text><text class="terminal-3657119390-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-16)"> -</text><text class="terminal-3657119390-r1" x="0" y="434.8" textLength="768.6" clip-path="url(#terminal-3657119390-line-17)">                        commit message that needs to be checked</text><text class="terminal-3657119390-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3657119390-line-17)"> -</text><text class="terminal-3657119390-r1" x="0" y="459.2" textLength="927.2" clip-path="url(#terminal-3657119390-line-18)">  --allow-abort         allow empty commit messages, which typically abort a</text><text class="terminal-3657119390-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-18)"> -</text><text class="terminal-3657119390-r1" x="0" y="483.6" textLength="366" clip-path="url(#terminal-3657119390-line-19)">                        commit</text><text class="terminal-3657119390-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-19)"> -</text><text class="terminal-3657119390-r1" x="0" y="508" textLength="256.2" clip-path="url(#terminal-3657119390-line-20)">  --allowed-prefixes </text><text class="terminal-3657119390-r2" x="256.2" y="508" textLength="12.2" clip-path="url(#terminal-3657119390-line-20)">[</text><text class="terminal-3657119390-r1" x="268.4" y="508" textLength="207.4" clip-path="url(#terminal-3657119390-line-20)">ALLOWED_PREFIXES </text><text class="terminal-3657119390-r3" x="475.8" y="508" textLength="36.6" clip-path="url(#terminal-3657119390-line-20)">...</text><text class="terminal-3657119390-r2" x="512.4" y="508" textLength="12.2" clip-path="url(#terminal-3657119390-line-20)">]</text><text class="terminal-3657119390-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3657119390-line-20)"> -</text><text class="terminal-3657119390-r1" x="0" y="532.4" textLength="951.6" clip-path="url(#terminal-3657119390-line-21)">                        allowed commit message prefixes. If the message starts</text><text class="terminal-3657119390-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3657119390-line-21)"> -</text><text class="terminal-3657119390-r1" x="0" y="556.8" textLength="951.6" clip-path="url(#terminal-3657119390-line-22)">                        by one of these prefixes, the message won't be checked</text><text class="terminal-3657119390-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-3657119390-line-22)"> -</text><text class="terminal-3657119390-r1" x="0" y="581.2" textLength="500.2" clip-path="url(#terminal-3657119390-line-23)">                        against the regex</text><text class="terminal-3657119390-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-3657119390-line-23)"> -</text><text class="terminal-3657119390-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-3657119390-line-24)"> + <g class="terminal-1820510314-matrix"> + <text class="terminal-1820510314-r1" x="0" y="20" textLength="207.4" clip-path="url(#terminal-1820510314-line-0)">$ cz check --help</text><text class="terminal-1820510314-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1820510314-line-0)"> +</text><text class="terminal-1820510314-r1" x="0" y="44.4" textLength="195.2" clip-path="url(#terminal-1820510314-line-1)">usage: cz check </text><text class="terminal-1820510314-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-1)">[</text><text class="terminal-1820510314-r1" x="207.4" y="44.4" textLength="24.4" clip-path="url(#terminal-1820510314-line-1)">-h</text><text class="terminal-1820510314-r2" x="231.8" y="44.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-1)">]</text><text class="terminal-1820510314-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-1)"> +</text><text class="terminal-1820510314-r2" x="195.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-2)">[</text><text class="terminal-1820510314-r1" x="207.4" y="68.8" textLength="768.6" clip-path="url(#terminal-1820510314-line-2)">--commit-msg-file COMMIT_MSG_FILE | --rev-range REV_RANGE | -m </text><text class="terminal-1820510314-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-2)"> +</text><text class="terminal-1820510314-r1" x="0" y="93.2" textLength="85.4" clip-path="url(#terminal-1820510314-line-3)">MESSAGE</text><text class="terminal-1820510314-r2" x="85.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-3)">]</text><text class="terminal-1820510314-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-3)"> +</text><text class="terminal-1820510314-r2" x="195.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">[</text><text class="terminal-1820510314-r1" x="207.4" y="117.6" textLength="158.6" clip-path="url(#terminal-1820510314-line-4)">--allow-abort</text><text class="terminal-1820510314-r2" x="366" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">]</text><text class="terminal-1820510314-r2" x="390.4" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">[</text><text class="terminal-1820510314-r1" x="402.6" y="117.6" textLength="231.8" clip-path="url(#terminal-1820510314-line-4)">--allowed-prefixes </text><text class="terminal-1820510314-r2" x="634.4" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">[</text><text class="terminal-1820510314-r1" x="646.6" y="117.6" textLength="207.4" clip-path="url(#terminal-1820510314-line-4)">ALLOWED_PREFIXES </text><text class="terminal-1820510314-r3" x="854" y="117.6" textLength="36.6" clip-path="url(#terminal-1820510314-line-4)">...</text><text class="terminal-1820510314-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">]</text><text class="terminal-1820510314-r2" x="902.8" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">]</text><text class="terminal-1820510314-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)"> +</text><text class="terminal-1820510314-r2" x="195.2" y="142" textLength="12.2" clip-path="url(#terminal-1820510314-line-5)">[</text><text class="terminal-1820510314-r1" x="207.4" y="142" textLength="280.6" clip-path="url(#terminal-1820510314-line-5)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-1820510314-r2" x="488" y="142" textLength="12.2" clip-path="url(#terminal-1820510314-line-5)">]</text><text class="terminal-1820510314-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1820510314-line-5)"> +</text><text class="terminal-1820510314-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-6)"> +</text><text class="terminal-1820510314-r1" x="0" y="190.8" textLength="744.2" clip-path="url(#terminal-1820510314-line-7)">validates that a commit message matches the commitizen schema</text><text class="terminal-1820510314-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-7)"> +</text><text class="terminal-1820510314-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-8)"> +</text><text class="terminal-1820510314-r1" x="0" y="239.6" textLength="97.6" clip-path="url(#terminal-1820510314-line-9)">options:</text><text class="terminal-1820510314-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-9)"> +</text><text class="terminal-1820510314-r1" x="0" y="264" textLength="671" clip-path="url(#terminal-1820510314-line-10)">  -h, --help            show this help message and exit</text><text class="terminal-1820510314-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1820510314-line-10)"> +</text><text class="terminal-1820510314-r1" x="0" y="288.4" textLength="427" clip-path="url(#terminal-1820510314-line-11)">  --commit-msg-file COMMIT_MSG_FILE</text><text class="terminal-1820510314-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-11)"> +</text><text class="terminal-1820510314-r1" x="0" y="312.8" textLength="915" clip-path="url(#terminal-1820510314-line-12)">                        ask for the name of the temporal file that contains</text><text class="terminal-1820510314-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-12)"> +</text><text class="terminal-1820510314-r1" x="0" y="337.2" textLength="902.8" clip-path="url(#terminal-1820510314-line-13)">                        the commit message. Using it in a git hook script:</text><text class="terminal-1820510314-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-13)"> +</text><text class="terminal-1820510314-r3" x="292.8" y="361.6" textLength="97.6" clip-path="url(#terminal-1820510314-line-14)">MSG_FILE</text><text class="terminal-1820510314-r1" x="390.4" y="361.6" textLength="24.4" clip-path="url(#terminal-1820510314-line-14)">=$</text><text class="terminal-1820510314-r4" x="414.8" y="361.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-14)">1</text><text class="terminal-1820510314-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-14)"> +</text><text class="terminal-1820510314-r1" x="0" y="386" textLength="280.6" clip-path="url(#terminal-1820510314-line-15)">  --rev-range REV_RANGE</text><text class="terminal-1820510314-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1820510314-line-15)"> +</text><text class="terminal-1820510314-r1" x="0" y="410.4" textLength="854" clip-path="url(#terminal-1820510314-line-16)">                        a range of git rev to check. e.g, master..HEAD</text><text class="terminal-1820510314-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-16)"> +</text><text class="terminal-1820510314-r1" x="0" y="434.8" textLength="378.2" clip-path="url(#terminal-1820510314-line-17)">  -m MESSAGE, --message MESSAGE</text><text class="terminal-1820510314-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-17)"> +</text><text class="terminal-1820510314-r1" x="0" y="459.2" textLength="768.6" clip-path="url(#terminal-1820510314-line-18)">                        commit message that needs to be checked</text><text class="terminal-1820510314-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-18)"> +</text><text class="terminal-1820510314-r1" x="0" y="483.6" textLength="927.2" clip-path="url(#terminal-1820510314-line-19)">  --allow-abort         allow empty commit messages, which typically abort a</text><text class="terminal-1820510314-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-19)"> +</text><text class="terminal-1820510314-r1" x="0" y="508" textLength="366" clip-path="url(#terminal-1820510314-line-20)">                        commit</text><text class="terminal-1820510314-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1820510314-line-20)"> +</text><text class="terminal-1820510314-r1" x="0" y="532.4" textLength="256.2" clip-path="url(#terminal-1820510314-line-21)">  --allowed-prefixes </text><text class="terminal-1820510314-r2" x="256.2" y="532.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-21)">[</text><text class="terminal-1820510314-r1" x="268.4" y="532.4" textLength="207.4" clip-path="url(#terminal-1820510314-line-21)">ALLOWED_PREFIXES </text><text class="terminal-1820510314-r3" x="475.8" y="532.4" textLength="36.6" clip-path="url(#terminal-1820510314-line-21)">...</text><text class="terminal-1820510314-r2" x="512.4" y="532.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-21)">]</text><text class="terminal-1820510314-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-21)"> +</text><text class="terminal-1820510314-r1" x="0" y="556.8" textLength="951.6" clip-path="url(#terminal-1820510314-line-22)">                        allowed commit message prefixes. If the message starts</text><text class="terminal-1820510314-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-22)"> +</text><text class="terminal-1820510314-r1" x="0" y="581.2" textLength="951.6" clip-path="url(#terminal-1820510314-line-23)">                        by one of these prefixes, the message won't be checked</text><text class="terminal-1820510314-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-23)"> +</text><text class="terminal-1820510314-r1" x="0" y="605.6" textLength="500.2" clip-path="url(#terminal-1820510314-line-24)">                        against the regex</text><text class="terminal-1820510314-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-24)"> +</text><text class="terminal-1820510314-r1" x="0" y="630" textLength="854" clip-path="url(#terminal-1820510314-line-25)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-1820510314-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1820510314-line-25)"> +</text><text class="terminal-1820510314-r1" x="0" y="654.4" textLength="732" clip-path="url(#terminal-1820510314-line-26)">                        length limit of the commit message; </text><text class="terminal-1820510314-r4" x="732" y="654.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-26)">0</text><text class="terminal-1820510314-r1" x="744.2" y="654.4" textLength="158.6" clip-path="url(#terminal-1820510314-line-26)"> for no limit</text><text class="terminal-1820510314-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-26)"> +</text><text class="terminal-1820510314-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-27)"> </text> </g> </g> From 8f2f4e094af092277377c8b8890bbc6d9fa01e39 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:29:58 +0000 Subject: [PATCH 314/685] build(deps-dev): bump ruff from 0.5.2 to 0.5.3 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.2 to 0.5.3. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.5.2...0.5.3) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 384d060b63..1153cedfd3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1423,29 +1423,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.5.2" +version = "0.5.3" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.2-py3-none-linux_armv6l.whl", hash = "sha256:7bab8345df60f9368d5f4594bfb8b71157496b44c30ff035d1d01972e764d3be"}, - {file = "ruff-0.5.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:1aa7acad382ada0189dbe76095cf0a36cd0036779607c397ffdea16517f535b1"}, - {file = "ruff-0.5.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:aec618d5a0cdba5592c60c2dee7d9c865180627f1a4a691257dea14ac1aa264d"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b62adc5ce81780ff04077e88bac0986363e4a3260ad3ef11ae9c14aa0e67ef"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dc42ebf56ede83cb080a50eba35a06e636775649a1ffd03dc986533f878702a3"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c15c6e9f88c67ffa442681365d11df38afb11059fc44238e71a9d9f1fd51de70"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d3de9a5960f72c335ef00763d861fc5005ef0644cb260ba1b5a115a102157251"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe5a968ae933e8f7627a7b2fc8893336ac2be0eb0aace762d3421f6e8f7b7f83"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a04f54a9018f75615ae52f36ea1c5515e356e5d5e214b22609ddb546baef7132"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ed02fb52e3741f0738db5f93e10ae0fb5c71eb33a4f2ba87c9a2fa97462a649"}, - {file = "ruff-0.5.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3cf8fe659f6362530435d97d738eb413e9f090e7e993f88711b0377fbdc99f60"}, - {file = "ruff-0.5.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:237a37e673e9f3cbfff0d2243e797c4862a44c93d2f52a52021c1a1b0899f846"}, - {file = "ruff-0.5.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2a2949ce7c1cbd8317432ada80fe32156df825b2fd611688814c8557824ef060"}, - {file = "ruff-0.5.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:481af57c8e99da92ad168924fd82220266043c8255942a1cb87958b108ac9335"}, - {file = "ruff-0.5.2-py3-none-win32.whl", hash = "sha256:f1aea290c56d913e363066d83d3fc26848814a1fed3d72144ff9c930e8c7c718"}, - {file = "ruff-0.5.2-py3-none-win_amd64.whl", hash = "sha256:8532660b72b5d94d2a0a7a27ae7b9b40053662d00357bb2a6864dd7e38819084"}, - {file = "ruff-0.5.2-py3-none-win_arm64.whl", hash = "sha256:73439805c5cb68f364d826a5c5c4b6c798ded6b7ebaa4011f01ce6c94e4d5583"}, - {file = "ruff-0.5.2.tar.gz", hash = "sha256:2c0df2d2de685433794a14d8d2e240df619b748fbe3367346baa519d8e6f1ca2"}, + {file = "ruff-0.5.3-py3-none-linux_armv6l.whl", hash = "sha256:b12424d9db7347fa63c5ed9af010003338c63c629fb9c9c6adb2aa4f5699729b"}, + {file = "ruff-0.5.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b8d72c5684bbd4ed304a9a955ee2e67f57b35f6193222ade910cca8a805490e3"}, + {file = "ruff-0.5.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d2fc2cdb85ccac1e816cc9d5d8cedefd93661bd957756d902543af32a6b04a71"}, + {file = "ruff-0.5.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf4bc751240b2fab5d19254571bcacb315c7b0b00bf3c912d52226a82bbec073"}, + {file = "ruff-0.5.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc697ec874fdd7c7ba0a85ec76ab38f8595224868d67f097c5ffc21136e72fcd"}, + {file = "ruff-0.5.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e791d34d3557a3819b3704bc1f087293c821083fa206812842fa363f6018a192"}, + {file = "ruff-0.5.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:76bb5a87fd397520b91a83eae8a2f7985236d42dd9459f09eef58e7f5c1d8316"}, + {file = "ruff-0.5.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8cfc7a26422c78e94f1ec78ec02501bbad2df5834907e75afe474cc6b83a8c1"}, + {file = "ruff-0.5.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96066c4328a49fce2dd40e80f7117987369feec30ab771516cf95f1cc2db923c"}, + {file = "ruff-0.5.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03bfe9ab5bdc0b08470c3b261643ad54ea86edc32b64d1e080892d7953add3ad"}, + {file = "ruff-0.5.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7704582a026fa02cca83efd76671a98ee6eb412c4230209efe5e2a006c06db62"}, + {file = "ruff-0.5.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:08058d077e21b856d32ebf483443390e29dc44d927608dc8f092ff6776519da9"}, + {file = "ruff-0.5.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:77d49484429ed7c7e6e2e75a753f153b7b58f875bdb4158ad85af166a1ec1822"}, + {file = "ruff-0.5.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:642cbff6cbfa38d2566d8db086508d6f472edb136cbfcc4ea65997745368c29e"}, + {file = "ruff-0.5.3-py3-none-win32.whl", hash = "sha256:eafc45dd8bdc37a00b28e68cc038daf3ca8c233d73fea276dcd09defb1352841"}, + {file = "ruff-0.5.3-py3-none-win_amd64.whl", hash = "sha256:cbaec2ddf4f78e5e9ecf5456ea0f496991358a1d883862ed0b9e947e2b6aea93"}, + {file = "ruff-0.5.3-py3-none-win_arm64.whl", hash = "sha256:05fbd2cb404775d6cd7f2ff49504e2d20e13ef95fa203bd1ab22413af70d420b"}, + {file = "ruff-0.5.3.tar.gz", hash = "sha256:2a3eb4f1841771fa5b67a56be9c2d16fd3cc88e378bd86aaeaec2f7e6bcdd0a2"}, ] [[package]] From 2212a30753d7db47ea9bbf8abea03a5882632e34 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 01:58:12 +0000 Subject: [PATCH 315/685] build(deps-dev): bump pytest from 8.2.2 to 8.3.1 Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.2.2 to 8.3.1. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.2.2...8.3.1) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1153cedfd3..f274910486 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1054,13 +1054,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pytest" -version = "8.2.2" +version = "8.3.1" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"}, - {file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"}, + {file = "pytest-8.3.1-py3-none-any.whl", hash = "sha256:e9600ccf4f563976e2c99fa02c7624ab938296551f280835ee6516df8bc4ae8c"}, + {file = "pytest-8.3.1.tar.gz", hash = "sha256:7e8e5c5abd6e93cb1cc151f23e57adc31fcf8cfd2a3ff2da63e23f732de35db6"}, ] [package.dependencies] @@ -1068,7 +1068,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=1.5,<2.0" +pluggy = ">=1.5,<2" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] From 1f89fce78c9720aa25210873851f047d63678476 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 01:59:30 +0000 Subject: [PATCH 316/685] build(deps-dev): bump mypy from 1.10.1 to 1.11.0 Bumps [mypy](https://github.com/python/mypy) from 1.10.1 to 1.11.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.10.1...v1.11) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 58 ++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/poetry.lock b/poetry.lock index f274910486..38ef5928b0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -790,44 +790,44 @@ files = [ [[package]] name = "mypy" -version = "1.10.1" +version = "1.11.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e36f229acfe250dc660790840916eb49726c928e8ce10fbdf90715090fe4ae02"}, - {file = "mypy-1.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51a46974340baaa4145363b9e051812a2446cf583dfaeba124af966fa44593f7"}, - {file = "mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:901c89c2d67bba57aaaca91ccdb659aa3a312de67f23b9dfb059727cce2e2e0a"}, - {file = "mypy-1.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0cd62192a4a32b77ceb31272d9e74d23cd88c8060c34d1d3622db3267679a5d9"}, - {file = "mypy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a2cbc68cb9e943ac0814c13e2452d2046c2f2b23ff0278e26599224cf164e78d"}, - {file = "mypy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bd6f629b67bb43dc0d9211ee98b96d8dabc97b1ad38b9b25f5e4c4d7569a0c6a"}, - {file = "mypy-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1bbb3a6f5ff319d2b9d40b4080d46cd639abe3516d5a62c070cf0114a457d84"}, - {file = "mypy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8edd4e9bbbc9d7b79502eb9592cab808585516ae1bcc1446eb9122656c6066f"}, - {file = "mypy-1.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6166a88b15f1759f94a46fa474c7b1b05d134b1b61fca627dd7335454cc9aa6b"}, - {file = "mypy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bb9cd11c01c8606a9d0b83ffa91d0b236a0e91bc4126d9ba9ce62906ada868e"}, - {file = "mypy-1.10.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d8681909f7b44d0b7b86e653ca152d6dff0eb5eb41694e163c6092124f8246d7"}, - {file = "mypy-1.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:378c03f53f10bbdd55ca94e46ec3ba255279706a6aacaecac52ad248f98205d3"}, - {file = "mypy-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bacf8f3a3d7d849f40ca6caea5c055122efe70e81480c8328ad29c55c69e93e"}, - {file = "mypy-1.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:701b5f71413f1e9855566a34d6e9d12624e9e0a8818a5704d74d6b0402e66c04"}, - {file = "mypy-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:3c4c2992f6ea46ff7fce0072642cfb62af7a2484efe69017ed8b095f7b39ef31"}, - {file = "mypy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:604282c886497645ffb87b8f35a57ec773a4a2721161e709a4422c1636ddde5c"}, - {file = "mypy-1.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37fd87cab83f09842653f08de066ee68f1182b9b5282e4634cdb4b407266bade"}, - {file = "mypy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8addf6313777dbb92e9564c5d32ec122bf2c6c39d683ea64de6a1fd98b90fe37"}, - {file = "mypy-1.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cc3ca0a244eb9a5249c7c583ad9a7e881aa5d7b73c35652296ddcdb33b2b9c7"}, - {file = "mypy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:1b3a2ffce52cc4dbaeee4df762f20a2905aa171ef157b82192f2e2f368eec05d"}, - {file = "mypy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe85ed6836165d52ae8b88f99527d3d1b2362e0cb90b005409b8bed90e9059b3"}, - {file = "mypy-1.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2ae450d60d7d020d67ab440c6e3fae375809988119817214440033f26ddf7bf"}, - {file = "mypy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be84c06e6abd72f960ba9a71561c14137a583093ffcf9bbfaf5e613d63fa531"}, - {file = "mypy-1.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2189ff1e39db399f08205e22a797383613ce1cb0cb3b13d8bcf0170e45b96cc3"}, - {file = "mypy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:97a131ee36ac37ce9581f4220311247ab6cba896b4395b9c87af0675a13a755f"}, - {file = "mypy-1.10.1-py3-none-any.whl", hash = "sha256:71d8ac0b906354ebda8ef1673e5fde785936ac1f29ff6987c7483cfbd5a4235a"}, - {file = "mypy-1.10.1.tar.gz", hash = "sha256:1f8f492d7db9e3593ef42d4f115f04e556130f2819ad33ab84551403e97dd4c0"}, + {file = "mypy-1.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3824187c99b893f90c845bab405a585d1ced4ff55421fdf5c84cb7710995229"}, + {file = "mypy-1.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:96f8dbc2c85046c81bcddc246232d500ad729cb720da4e20fce3b542cab91287"}, + {file = "mypy-1.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a5d8d8dd8613a3e2be3eae829ee891b6b2de6302f24766ff06cb2875f5be9c6"}, + {file = "mypy-1.11.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72596a79bbfb195fd41405cffa18210af3811beb91ff946dbcb7368240eed6be"}, + {file = "mypy-1.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:35ce88b8ed3a759634cb4eb646d002c4cef0a38f20565ee82b5023558eb90c00"}, + {file = "mypy-1.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:98790025861cb2c3db8c2f5ad10fc8c336ed2a55f4daf1b8b3f877826b6ff2eb"}, + {file = "mypy-1.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25bcfa75b9b5a5f8d67147a54ea97ed63a653995a82798221cca2a315c0238c1"}, + {file = "mypy-1.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bea2a0e71c2a375c9fa0ede3d98324214d67b3cbbfcbd55ac8f750f85a414e3"}, + {file = "mypy-1.11.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2b3d36baac48e40e3064d2901f2fbd2a2d6880ec6ce6358825c85031d7c0d4d"}, + {file = "mypy-1.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:d8e2e43977f0e09f149ea69fd0556623919f816764e26d74da0c8a7b48f3e18a"}, + {file = "mypy-1.11.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d44c1e44a8be986b54b09f15f2c1a66368eb43861b4e82573026e04c48a9e20"}, + {file = "mypy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cea3d0fb69637944dd321f41bc896e11d0fb0b0aa531d887a6da70f6e7473aba"}, + {file = "mypy-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a83ec98ae12d51c252be61521aa5731f5512231d0b738b4cb2498344f0b840cd"}, + {file = "mypy-1.11.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7b73a856522417beb78e0fb6d33ef89474e7a622db2653bc1285af36e2e3e3d"}, + {file = "mypy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:f2268d9fcd9686b61ab64f077be7ffbc6fbcdfb4103e5dd0cc5eaab53a8886c2"}, + {file = "mypy-1.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:940bfff7283c267ae6522ef926a7887305945f716a7704d3344d6d07f02df850"}, + {file = "mypy-1.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:14f9294528b5f5cf96c721f231c9f5b2733164e02c1c018ed1a0eff8a18005ac"}, + {file = "mypy-1.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7b54c27783991399046837df5c7c9d325d921394757d09dbcbf96aee4649fe9"}, + {file = "mypy-1.11.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65f190a6349dec29c8d1a1cd4aa71284177aee5949e0502e6379b42873eddbe7"}, + {file = "mypy-1.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbe286303241fea8c2ea5466f6e0e6a046a135a7e7609167b07fd4e7baf151bf"}, + {file = "mypy-1.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:104e9c1620c2675420abd1f6c44bab7dd33cc85aea751c985006e83dcd001095"}, + {file = "mypy-1.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f006e955718ecd8d159cee9932b64fba8f86ee6f7728ca3ac66c3a54b0062abe"}, + {file = "mypy-1.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:becc9111ca572b04e7e77131bc708480cc88a911adf3d0239f974c034b78085c"}, + {file = "mypy-1.11.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6801319fe76c3f3a3833f2b5af7bd2c17bb93c00026a2a1b924e6762f5b19e13"}, + {file = "mypy-1.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:c1a184c64521dc549324ec6ef7cbaa6b351912be9cb5edb803c2808a0d7e85ac"}, + {file = "mypy-1.11.0-py3-none-any.whl", hash = "sha256:56913ec8c7638b0091ef4da6fcc9136896914a9d60d54670a75880c3e5b99ace"}, + {file = "mypy-1.11.0.tar.gz", hash = "sha256:93743608c7348772fdc717af4aeee1997293a1ad04bc0ea6efa15bf65385c538"}, ] [package.dependencies] mypy-extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.1.0" +typing-extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] From a3903fb8b7b1b159a88a4b1b3fe9e0e32ed32a0f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 01:58:39 +0000 Subject: [PATCH 317/685] build(deps-dev): bump ruff from 0.5.3 to 0.5.4 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.3 to 0.5.4. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.5.3...0.5.4) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 38ef5928b0..a75844b727 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1423,29 +1423,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.5.3" +version = "0.5.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.3-py3-none-linux_armv6l.whl", hash = "sha256:b12424d9db7347fa63c5ed9af010003338c63c629fb9c9c6adb2aa4f5699729b"}, - {file = "ruff-0.5.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b8d72c5684bbd4ed304a9a955ee2e67f57b35f6193222ade910cca8a805490e3"}, - {file = "ruff-0.5.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d2fc2cdb85ccac1e816cc9d5d8cedefd93661bd957756d902543af32a6b04a71"}, - {file = "ruff-0.5.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf4bc751240b2fab5d19254571bcacb315c7b0b00bf3c912d52226a82bbec073"}, - {file = "ruff-0.5.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc697ec874fdd7c7ba0a85ec76ab38f8595224868d67f097c5ffc21136e72fcd"}, - {file = "ruff-0.5.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e791d34d3557a3819b3704bc1f087293c821083fa206812842fa363f6018a192"}, - {file = "ruff-0.5.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:76bb5a87fd397520b91a83eae8a2f7985236d42dd9459f09eef58e7f5c1d8316"}, - {file = "ruff-0.5.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8cfc7a26422c78e94f1ec78ec02501bbad2df5834907e75afe474cc6b83a8c1"}, - {file = "ruff-0.5.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96066c4328a49fce2dd40e80f7117987369feec30ab771516cf95f1cc2db923c"}, - {file = "ruff-0.5.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03bfe9ab5bdc0b08470c3b261643ad54ea86edc32b64d1e080892d7953add3ad"}, - {file = "ruff-0.5.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7704582a026fa02cca83efd76671a98ee6eb412c4230209efe5e2a006c06db62"}, - {file = "ruff-0.5.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:08058d077e21b856d32ebf483443390e29dc44d927608dc8f092ff6776519da9"}, - {file = "ruff-0.5.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:77d49484429ed7c7e6e2e75a753f153b7b58f875bdb4158ad85af166a1ec1822"}, - {file = "ruff-0.5.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:642cbff6cbfa38d2566d8db086508d6f472edb136cbfcc4ea65997745368c29e"}, - {file = "ruff-0.5.3-py3-none-win32.whl", hash = "sha256:eafc45dd8bdc37a00b28e68cc038daf3ca8c233d73fea276dcd09defb1352841"}, - {file = "ruff-0.5.3-py3-none-win_amd64.whl", hash = "sha256:cbaec2ddf4f78e5e9ecf5456ea0f496991358a1d883862ed0b9e947e2b6aea93"}, - {file = "ruff-0.5.3-py3-none-win_arm64.whl", hash = "sha256:05fbd2cb404775d6cd7f2ff49504e2d20e13ef95fa203bd1ab22413af70d420b"}, - {file = "ruff-0.5.3.tar.gz", hash = "sha256:2a3eb4f1841771fa5b67a56be9c2d16fd3cc88e378bd86aaeaec2f7e6bcdd0a2"}, + {file = "ruff-0.5.4-py3-none-linux_armv6l.whl", hash = "sha256:82acef724fc639699b4d3177ed5cc14c2a5aacd92edd578a9e846d5b5ec18ddf"}, + {file = "ruff-0.5.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:da62e87637c8838b325e65beee485f71eb36202ce8e3cdbc24b9fcb8b99a37be"}, + {file = "ruff-0.5.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e98ad088edfe2f3b85a925ee96da652028f093d6b9b56b76fc242d8abb8e2059"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c55efbecc3152d614cfe6c2247a3054cfe358cefbf794f8c79c8575456efe19"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9b85eaa1f653abd0a70603b8b7008d9e00c9fa1bbd0bf40dad3f0c0bdd06793"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cf497a47751be8c883059c4613ba2f50dd06ec672692de2811f039432875278"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:09c14ed6a72af9ccc8d2e313d7acf7037f0faff43cde4b507e66f14e812e37f7"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:628f6b8f97b8bad2490240aa84f3e68f390e13fabc9af5c0d3b96b485921cd60"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3520a00c0563d7a7a7c324ad7e2cde2355733dafa9592c671fb2e9e3cd8194c1"}, + {file = "ruff-0.5.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93789f14ca2244fb91ed481456f6d0bb8af1f75a330e133b67d08f06ad85b516"}, + {file = "ruff-0.5.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:029454e2824eafa25b9df46882f7f7844d36fd8ce51c1b7f6d97e2615a57bbcc"}, + {file = "ruff-0.5.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9492320eed573a13a0bc09a2957f17aa733fff9ce5bf00e66e6d4a88ec33813f"}, + {file = "ruff-0.5.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a6e1f62a92c645e2919b65c02e79d1f61e78a58eddaebca6c23659e7c7cb4ac7"}, + {file = "ruff-0.5.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:768fa9208df2bec4b2ce61dbc7c2ddd6b1be9fb48f1f8d3b78b3332c7d71c1ff"}, + {file = "ruff-0.5.4-py3-none-win32.whl", hash = "sha256:e1e7393e9c56128e870b233c82ceb42164966f25b30f68acbb24ed69ce9c3a4e"}, + {file = "ruff-0.5.4-py3-none-win_amd64.whl", hash = "sha256:58b54459221fd3f661a7329f177f091eb35cf7a603f01d9eb3eb11cc348d38c4"}, + {file = "ruff-0.5.4-py3-none-win_arm64.whl", hash = "sha256:bd53da65f1085fb5b307c38fd3c0829e76acf7b2a912d8d79cadcdb4875c1eb7"}, + {file = "ruff-0.5.4.tar.gz", hash = "sha256:2795726d5f71c4f4e70653273d1c23a8182f07dd8e48c12de5d867bfb7557eed"}, ] [[package]] From 185b27806f7506500539572df3ea820dc27ea900 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Jul 2024 02:02:13 +0000 Subject: [PATCH 318/685] build(deps-dev): bump mkdocs-material from 9.5.29 to 9.5.30 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.29 to 9.5.30. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.29...9.5.30) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index a75844b727..abaeaf4f01 100644 --- a/poetry.lock +++ b/poetry.lock @@ -750,13 +750,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.29" +version = "9.5.30" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.29-py3-none-any.whl", hash = "sha256:afc1f508e2662ded95f0a35a329e8a5acd73ee88ca07ba73836eb6fcdae5d8b4"}, - {file = "mkdocs_material-9.5.29.tar.gz", hash = "sha256:3e977598ec15a4ddad5c4dfc9e08edab6023edb51e88f0729bd27be77e3d322a"}, + {file = "mkdocs_material-9.5.30-py3-none-any.whl", hash = "sha256:fc070689c5250a180e9b9d79d8491ef9a3a7acb240db0728728d6c31eeb131d4"}, + {file = "mkdocs_material-9.5.30.tar.gz", hash = "sha256:3fd417dd42d679e3ba08b9e2d72cd8b8af142cc4a3969676ad6b00993dd182ec"}, ] [package.dependencies] From ba5a19992b49a1055d82ed479c9e87facabaf2ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Jul 2024 02:02:36 +0000 Subject: [PATCH 319/685] build(deps): bump importlib-metadata from 8.0.0 to 8.1.0 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 8.0.0 to 8.1.0. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v8.0.0...v8.1.0) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index abaeaf4f01..ccf35f3b48 100644 --- a/poetry.lock +++ b/poetry.lock @@ -450,13 +450,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.0.0" +version = "8.1.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.0.0-py3-none-any.whl", hash = "sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f"}, - {file = "importlib_metadata-8.0.0.tar.gz", hash = "sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812"}, + {file = "importlib_metadata-8.1.0-py3-none-any.whl", hash = "sha256:3cd29f739ed65973840b068e3132135ce954c254d48b5b640484467ef7ab3c8c"}, + {file = "importlib_metadata-8.1.0.tar.gz", hash = "sha256:fcdcb1d5ead7bdf3dd32657bb94ebe9d2aabfe89a19782ddc32da5041d6ebfb4"}, ] [package.dependencies] From c858803e95a5872559979caea1d97ecc76110cbe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 01:15:50 +0000 Subject: [PATCH 320/685] build(deps-dev): bump types-pyyaml Bumps [types-pyyaml](https://github.com/python/typeshed) from 6.0.12.20240311 to 6.0.12.20240724. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-pyyaml dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index ccf35f3b48..544fecb492 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1568,13 +1568,13 @@ files = [ [[package]] name = "types-pyyaml" -version = "6.0.12.20240311" +version = "6.0.12.20240724" description = "Typing stubs for PyYAML" optional = false python-versions = ">=3.8" files = [ - {file = "types-PyYAML-6.0.12.20240311.tar.gz", hash = "sha256:a9e0f0f88dc835739b0c1ca51ee90d04ca2a897a71af79de9aec5f38cb0a5342"}, - {file = "types_PyYAML-6.0.12.20240311-py3-none-any.whl", hash = "sha256:b845b06a1c7e54b8e5b4c683043de0d9caf205e7434b3edc678ff2411979b8f6"}, + {file = "types-PyYAML-6.0.12.20240724.tar.gz", hash = "sha256:cf7b31ae67e0c5b2919c703d2affc415485099d3fe6666a6912f040fd05cb67f"}, + {file = "types_PyYAML-6.0.12.20240724-py3-none-any.whl", hash = "sha256:e5becec598f3aa3a2ddf671de4a75fa1c6856fbf73b2840286c9d50fae2d5d48"}, ] [[package]] From e9458b954b8013eae9374107656424bfb97f5b8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 01:15:07 +0000 Subject: [PATCH 321/685] build(deps): bump importlib-metadata from 8.1.0 to 8.2.0 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 8.1.0 to 8.2.0. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v8.1.0...v8.2.0) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 544fecb492..0073624b02 100644 --- a/poetry.lock +++ b/poetry.lock @@ -450,13 +450,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.1.0" +version = "8.2.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.1.0-py3-none-any.whl", hash = "sha256:3cd29f739ed65973840b068e3132135ce954c254d48b5b640484467ef7ab3c8c"}, - {file = "importlib_metadata-8.1.0.tar.gz", hash = "sha256:fcdcb1d5ead7bdf3dd32657bb94ebe9d2aabfe89a19782ddc32da5041d6ebfb4"}, + {file = "importlib_metadata-8.2.0-py3-none-any.whl", hash = "sha256:11901fa0c2f97919b288679932bb64febaeacf289d18ac84dd68cb2e74213369"}, + {file = "importlib_metadata-8.2.0.tar.gz", hash = "sha256:72e8d4399996132204f9a16dcc751af254a48f8d1b20b9ff0f98d4a8f901e73d"}, ] [package.dependencies] From f32093a7b6a5c29f911bd88ddb3defeb9b081a0b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Jul 2024 02:01:23 +0000 Subject: [PATCH 322/685] build(deps-dev): bump ruff from 0.5.4 to 0.5.5 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.4 to 0.5.5. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.5.4...0.5.5) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0073624b02..cf8d4735e0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1423,29 +1423,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.5.4" +version = "0.5.5" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.4-py3-none-linux_armv6l.whl", hash = "sha256:82acef724fc639699b4d3177ed5cc14c2a5aacd92edd578a9e846d5b5ec18ddf"}, - {file = "ruff-0.5.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:da62e87637c8838b325e65beee485f71eb36202ce8e3cdbc24b9fcb8b99a37be"}, - {file = "ruff-0.5.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e98ad088edfe2f3b85a925ee96da652028f093d6b9b56b76fc242d8abb8e2059"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c55efbecc3152d614cfe6c2247a3054cfe358cefbf794f8c79c8575456efe19"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9b85eaa1f653abd0a70603b8b7008d9e00c9fa1bbd0bf40dad3f0c0bdd06793"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cf497a47751be8c883059c4613ba2f50dd06ec672692de2811f039432875278"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:09c14ed6a72af9ccc8d2e313d7acf7037f0faff43cde4b507e66f14e812e37f7"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:628f6b8f97b8bad2490240aa84f3e68f390e13fabc9af5c0d3b96b485921cd60"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3520a00c0563d7a7a7c324ad7e2cde2355733dafa9592c671fb2e9e3cd8194c1"}, - {file = "ruff-0.5.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93789f14ca2244fb91ed481456f6d0bb8af1f75a330e133b67d08f06ad85b516"}, - {file = "ruff-0.5.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:029454e2824eafa25b9df46882f7f7844d36fd8ce51c1b7f6d97e2615a57bbcc"}, - {file = "ruff-0.5.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9492320eed573a13a0bc09a2957f17aa733fff9ce5bf00e66e6d4a88ec33813f"}, - {file = "ruff-0.5.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a6e1f62a92c645e2919b65c02e79d1f61e78a58eddaebca6c23659e7c7cb4ac7"}, - {file = "ruff-0.5.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:768fa9208df2bec4b2ce61dbc7c2ddd6b1be9fb48f1f8d3b78b3332c7d71c1ff"}, - {file = "ruff-0.5.4-py3-none-win32.whl", hash = "sha256:e1e7393e9c56128e870b233c82ceb42164966f25b30f68acbb24ed69ce9c3a4e"}, - {file = "ruff-0.5.4-py3-none-win_amd64.whl", hash = "sha256:58b54459221fd3f661a7329f177f091eb35cf7a603f01d9eb3eb11cc348d38c4"}, - {file = "ruff-0.5.4-py3-none-win_arm64.whl", hash = "sha256:bd53da65f1085fb5b307c38fd3c0829e76acf7b2a912d8d79cadcdb4875c1eb7"}, - {file = "ruff-0.5.4.tar.gz", hash = "sha256:2795726d5f71c4f4e70653273d1c23a8182f07dd8e48c12de5d867bfb7557eed"}, + {file = "ruff-0.5.5-py3-none-linux_armv6l.whl", hash = "sha256:605d589ec35d1da9213a9d4d7e7a9c761d90bba78fc8790d1c5e65026c1b9eaf"}, + {file = "ruff-0.5.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00817603822a3e42b80f7c3298c8269e09f889ee94640cd1fc7f9329788d7bf8"}, + {file = "ruff-0.5.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:187a60f555e9f865a2ff2c6984b9afeffa7158ba6e1eab56cb830404c942b0f3"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe26fc46fa8c6e0ae3f47ddccfbb136253c831c3289bba044befe68f467bfb16"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ad25dd9c5faac95c8e9efb13e15803cd8bbf7f4600645a60ffe17c73f60779b"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f70737c157d7edf749bcb952d13854e8f745cec695a01bdc6e29c29c288fc36e"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:cfd7de17cef6ab559e9f5ab859f0d3296393bc78f69030967ca4d87a541b97a0"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a09b43e02f76ac0145f86a08e045e2ea452066f7ba064fd6b0cdccb486f7c3e7"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0b856cb19c60cd40198be5d8d4b556228e3dcd545b4f423d1ad812bfdca5884"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3687d002f911e8a5faf977e619a034d159a8373514a587249cc00f211c67a091"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ac9dc814e510436e30d0ba535f435a7f3dc97f895f844f5b3f347ec8c228a523"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:af9bdf6c389b5add40d89b201425b531e0a5cceb3cfdcc69f04d3d531c6be74f"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d40a8533ed545390ef8315b8e25c4bb85739b90bd0f3fe1280a29ae364cc55d8"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:cab904683bf9e2ecbbe9ff235bfe056f0eba754d0168ad5407832928d579e7ab"}, + {file = "ruff-0.5.5-py3-none-win32.whl", hash = "sha256:696f18463b47a94575db635ebb4c178188645636f05e934fdf361b74edf1bb2d"}, + {file = "ruff-0.5.5-py3-none-win_amd64.whl", hash = "sha256:50f36d77f52d4c9c2f1361ccbfbd09099a1b2ea5d2b2222c586ab08885cf3445"}, + {file = "ruff-0.5.5-py3-none-win_arm64.whl", hash = "sha256:3191317d967af701f1b73a31ed5788795936e423b7acce82a2b63e26eb3e89d6"}, + {file = "ruff-0.5.5.tar.gz", hash = "sha256:cc5516bdb4858d972fbc31d246bdb390eab8df1a26e2353be2dbc0c2d7f5421a"}, ] [[package]] From 6f7ed3817ec686e82df0f01df6e74bdb4cfa062e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Jul 2024 02:01:45 +0000 Subject: [PATCH 323/685] build(deps-dev): bump pytest from 8.3.1 to 8.3.2 Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.3.1 to 8.3.2. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.3.1...8.3.2) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index cf8d4735e0..f8525e3f38 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1054,13 +1054,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pytest" -version = "8.3.1" +version = "8.3.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.3.1-py3-none-any.whl", hash = "sha256:e9600ccf4f563976e2c99fa02c7624ab938296551f280835ee6516df8bc4ae8c"}, - {file = "pytest-8.3.1.tar.gz", hash = "sha256:7e8e5c5abd6e93cb1cc151f23e57adc31fcf8cfd2a3ff2da63e23f732de35db6"}, + {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, + {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, ] [package.dependencies] From b07b70bbf71e23cef7b569691a97d42e86615d3d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Jul 2024 01:49:30 +0000 Subject: [PATCH 324/685] build(deps-dev): bump mypy from 1.11.0 to 1.11.1 Bumps [mypy](https://github.com/python/mypy) from 1.11.0 to 1.11.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.11...v1.11.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index f8525e3f38..5bfcc493c2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -790,38 +790,38 @@ files = [ [[package]] name = "mypy" -version = "1.11.0" +version = "1.11.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3824187c99b893f90c845bab405a585d1ced4ff55421fdf5c84cb7710995229"}, - {file = "mypy-1.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:96f8dbc2c85046c81bcddc246232d500ad729cb720da4e20fce3b542cab91287"}, - {file = "mypy-1.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a5d8d8dd8613a3e2be3eae829ee891b6b2de6302f24766ff06cb2875f5be9c6"}, - {file = "mypy-1.11.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72596a79bbfb195fd41405cffa18210af3811beb91ff946dbcb7368240eed6be"}, - {file = "mypy-1.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:35ce88b8ed3a759634cb4eb646d002c4cef0a38f20565ee82b5023558eb90c00"}, - {file = "mypy-1.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:98790025861cb2c3db8c2f5ad10fc8c336ed2a55f4daf1b8b3f877826b6ff2eb"}, - {file = "mypy-1.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25bcfa75b9b5a5f8d67147a54ea97ed63a653995a82798221cca2a315c0238c1"}, - {file = "mypy-1.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bea2a0e71c2a375c9fa0ede3d98324214d67b3cbbfcbd55ac8f750f85a414e3"}, - {file = "mypy-1.11.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2b3d36baac48e40e3064d2901f2fbd2a2d6880ec6ce6358825c85031d7c0d4d"}, - {file = "mypy-1.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:d8e2e43977f0e09f149ea69fd0556623919f816764e26d74da0c8a7b48f3e18a"}, - {file = "mypy-1.11.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d44c1e44a8be986b54b09f15f2c1a66368eb43861b4e82573026e04c48a9e20"}, - {file = "mypy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cea3d0fb69637944dd321f41bc896e11d0fb0b0aa531d887a6da70f6e7473aba"}, - {file = "mypy-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a83ec98ae12d51c252be61521aa5731f5512231d0b738b4cb2498344f0b840cd"}, - {file = "mypy-1.11.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7b73a856522417beb78e0fb6d33ef89474e7a622db2653bc1285af36e2e3e3d"}, - {file = "mypy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:f2268d9fcd9686b61ab64f077be7ffbc6fbcdfb4103e5dd0cc5eaab53a8886c2"}, - {file = "mypy-1.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:940bfff7283c267ae6522ef926a7887305945f716a7704d3344d6d07f02df850"}, - {file = "mypy-1.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:14f9294528b5f5cf96c721f231c9f5b2733164e02c1c018ed1a0eff8a18005ac"}, - {file = "mypy-1.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7b54c27783991399046837df5c7c9d325d921394757d09dbcbf96aee4649fe9"}, - {file = "mypy-1.11.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65f190a6349dec29c8d1a1cd4aa71284177aee5949e0502e6379b42873eddbe7"}, - {file = "mypy-1.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbe286303241fea8c2ea5466f6e0e6a046a135a7e7609167b07fd4e7baf151bf"}, - {file = "mypy-1.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:104e9c1620c2675420abd1f6c44bab7dd33cc85aea751c985006e83dcd001095"}, - {file = "mypy-1.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f006e955718ecd8d159cee9932b64fba8f86ee6f7728ca3ac66c3a54b0062abe"}, - {file = "mypy-1.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:becc9111ca572b04e7e77131bc708480cc88a911adf3d0239f974c034b78085c"}, - {file = "mypy-1.11.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6801319fe76c3f3a3833f2b5af7bd2c17bb93c00026a2a1b924e6762f5b19e13"}, - {file = "mypy-1.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:c1a184c64521dc549324ec6ef7cbaa6b351912be9cb5edb803c2808a0d7e85ac"}, - {file = "mypy-1.11.0-py3-none-any.whl", hash = "sha256:56913ec8c7638b0091ef4da6fcc9136896914a9d60d54670a75880c3e5b99ace"}, - {file = "mypy-1.11.0.tar.gz", hash = "sha256:93743608c7348772fdc717af4aeee1997293a1ad04bc0ea6efa15bf65385c538"}, + {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"}, + {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"}, + {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"}, + {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"}, + {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"}, + {file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"}, + {file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"}, + {file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"}, + {file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"}, + {file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"}, + {file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"}, + {file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"}, + {file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"}, + {file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"}, + {file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"}, + {file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"}, + {file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"}, + {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"}, + {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"}, ] [package.dependencies] From 87df5bb64faf5483294d3246f81e48e95565cf52 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2024 01:42:52 +0000 Subject: [PATCH 325/685] build(deps-dev): bump ruff from 0.5.5 to 0.5.6 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.5.5...0.5.6) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5bfcc493c2..300c7ceeb8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1423,29 +1423,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.5.5" +version = "0.5.6" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.5-py3-none-linux_armv6l.whl", hash = "sha256:605d589ec35d1da9213a9d4d7e7a9c761d90bba78fc8790d1c5e65026c1b9eaf"}, - {file = "ruff-0.5.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00817603822a3e42b80f7c3298c8269e09f889ee94640cd1fc7f9329788d7bf8"}, - {file = "ruff-0.5.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:187a60f555e9f865a2ff2c6984b9afeffa7158ba6e1eab56cb830404c942b0f3"}, - {file = "ruff-0.5.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe26fc46fa8c6e0ae3f47ddccfbb136253c831c3289bba044befe68f467bfb16"}, - {file = "ruff-0.5.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ad25dd9c5faac95c8e9efb13e15803cd8bbf7f4600645a60ffe17c73f60779b"}, - {file = "ruff-0.5.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f70737c157d7edf749bcb952d13854e8f745cec695a01bdc6e29c29c288fc36e"}, - {file = "ruff-0.5.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:cfd7de17cef6ab559e9f5ab859f0d3296393bc78f69030967ca4d87a541b97a0"}, - {file = "ruff-0.5.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a09b43e02f76ac0145f86a08e045e2ea452066f7ba064fd6b0cdccb486f7c3e7"}, - {file = "ruff-0.5.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0b856cb19c60cd40198be5d8d4b556228e3dcd545b4f423d1ad812bfdca5884"}, - {file = "ruff-0.5.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3687d002f911e8a5faf977e619a034d159a8373514a587249cc00f211c67a091"}, - {file = "ruff-0.5.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ac9dc814e510436e30d0ba535f435a7f3dc97f895f844f5b3f347ec8c228a523"}, - {file = "ruff-0.5.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:af9bdf6c389b5add40d89b201425b531e0a5cceb3cfdcc69f04d3d531c6be74f"}, - {file = "ruff-0.5.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d40a8533ed545390ef8315b8e25c4bb85739b90bd0f3fe1280a29ae364cc55d8"}, - {file = "ruff-0.5.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:cab904683bf9e2ecbbe9ff235bfe056f0eba754d0168ad5407832928d579e7ab"}, - {file = "ruff-0.5.5-py3-none-win32.whl", hash = "sha256:696f18463b47a94575db635ebb4c178188645636f05e934fdf361b74edf1bb2d"}, - {file = "ruff-0.5.5-py3-none-win_amd64.whl", hash = "sha256:50f36d77f52d4c9c2f1361ccbfbd09099a1b2ea5d2b2222c586ab08885cf3445"}, - {file = "ruff-0.5.5-py3-none-win_arm64.whl", hash = "sha256:3191317d967af701f1b73a31ed5788795936e423b7acce82a2b63e26eb3e89d6"}, - {file = "ruff-0.5.5.tar.gz", hash = "sha256:cc5516bdb4858d972fbc31d246bdb390eab8df1a26e2353be2dbc0c2d7f5421a"}, + {file = "ruff-0.5.6-py3-none-linux_armv6l.whl", hash = "sha256:a0ef5930799a05522985b9cec8290b185952f3fcd86c1772c3bdbd732667fdcd"}, + {file = "ruff-0.5.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b652dc14f6ef5d1552821e006f747802cc32d98d5509349e168f6bf0ee9f8f42"}, + {file = "ruff-0.5.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:80521b88d26a45e871f31e4b88938fd87db7011bb961d8afd2664982dfc3641a"}, + {file = "ruff-0.5.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9bc8f328a9f1309ae80e4d392836e7dbc77303b38ed4a7112699e63d3b066ab"}, + {file = "ruff-0.5.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d394940f61f7720ad371ddedf14722ee1d6250fd8d020f5ea5a86e7be217daf"}, + {file = "ruff-0.5.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111a99cdb02f69ddb2571e2756e017a1496c2c3a2aeefe7b988ddab38b416d36"}, + {file = "ruff-0.5.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e395daba77a79f6dc0d07311f94cc0560375ca20c06f354c7c99af3bf4560c5d"}, + {file = "ruff-0.5.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c476acb43c3c51e3c614a2e878ee1589655fa02dab19fe2db0423a06d6a5b1b6"}, + {file = "ruff-0.5.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2ff8003f5252fd68425fd53d27c1f08b201d7ed714bb31a55c9ac1d4c13e2eb"}, + {file = "ruff-0.5.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c94e084ba3eaa80c2172918c2ca2eb2230c3f15925f4ed8b6297260c6ef179ad"}, + {file = "ruff-0.5.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1f77c1c3aa0669fb230b06fb24ffa3e879391a3ba3f15e3d633a752da5a3e670"}, + {file = "ruff-0.5.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f908148c93c02873210a52cad75a6eda856b2cbb72250370ce3afef6fb99b1ed"}, + {file = "ruff-0.5.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:563a7ae61ad284187d3071d9041c08019975693ff655438d8d4be26e492760bd"}, + {file = "ruff-0.5.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:94fe60869bfbf0521e04fd62b74cbca21cbc5beb67cbb75ab33fe8c174f54414"}, + {file = "ruff-0.5.6-py3-none-win32.whl", hash = "sha256:e6a584c1de6f8591c2570e171cc7ce482bb983d49c70ddf014393cd39e9dfaed"}, + {file = "ruff-0.5.6-py3-none-win_amd64.whl", hash = "sha256:d7fe7dccb1a89dc66785d7aa0ac283b2269712d8ed19c63af908fdccca5ccc1a"}, + {file = "ruff-0.5.6-py3-none-win_arm64.whl", hash = "sha256:57c6c0dd997b31b536bff49b9eee5ed3194d60605a4427f735eeb1f9c1b8d264"}, + {file = "ruff-0.5.6.tar.gz", hash = "sha256:07c9e3c2a8e1fe377dd460371c3462671a728c981c3205a5217291422209f642"}, ] [[package]] From 0c01bfb98db5c1baca862aa5bfcf7f24033e3988 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2024 01:42:28 +0000 Subject: [PATCH 326/685] build(deps-dev): bump mkdocs-material from 9.5.30 to 9.5.31 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.30 to 9.5.31. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.30...9.5.31) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 300c7ceeb8..9ab78f9254 100644 --- a/poetry.lock +++ b/poetry.lock @@ -750,13 +750,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.30" +version = "9.5.31" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.30-py3-none-any.whl", hash = "sha256:fc070689c5250a180e9b9d79d8491ef9a3a7acb240db0728728d6c31eeb131d4"}, - {file = "mkdocs_material-9.5.30.tar.gz", hash = "sha256:3fd417dd42d679e3ba08b9e2d72cd8b8af142cc4a3969676ad6b00993dd182ec"}, + {file = "mkdocs_material-9.5.31-py3-none-any.whl", hash = "sha256:1b1f49066fdb3824c1e96d6bacd2d4375de4ac74580b47e79ff44c4d835c5fcb"}, + {file = "mkdocs_material-9.5.31.tar.gz", hash = "sha256:31833ec664772669f5856f4f276bf3fdf0e642a445e64491eda459249c3a1ca8"}, ] [package.dependencies] From 1b3a5070a0e8f969ba63f38ac0d7d982367a87bc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 01:28:28 +0000 Subject: [PATCH 327/685] build(deps): bump argcomplete from 3.4.0 to 3.5.0 Bumps [argcomplete](https://github.com/kislyuk/argcomplete) from 3.4.0 to 3.5.0. - [Release notes](https://github.com/kislyuk/argcomplete/releases) - [Changelog](https://github.com/kislyuk/argcomplete/blob/develop/Changes.rst) - [Commits](https://github.com/kislyuk/argcomplete/compare/v3.4.0...v3.5.0) --- updated-dependencies: - dependency-name: argcomplete dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9ab78f9254..8facb05de2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "argcomplete" -version = "3.4.0" +version = "3.5.0" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.4.0-py3-none-any.whl", hash = "sha256:69a79e083a716173e5532e0fa3bef45f793f4e61096cf52b5a42c0211c8b8aa5"}, - {file = "argcomplete-3.4.0.tar.gz", hash = "sha256:c2abcdfe1be8ace47ba777d4fce319eb13bf8ad9dace8d085dcad6eded88057f"}, + {file = "argcomplete-3.5.0-py3-none-any.whl", hash = "sha256:d4bcf3ff544f51e16e54228a7ac7f486ed70ebf2ecfe49a63a91171c76bf029b"}, + {file = "argcomplete-3.5.0.tar.gz", hash = "sha256:4349400469dccfb7950bb60334a680c58d88699bff6159df61251878dc6bf74b"}, ] [package.extras] @@ -1785,4 +1785,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "dc743cceaf8c8d472ebd6f824feb5955c09b64b24f84d916fc910def5f7637b5" +content-hash = "e1f15a3d1a61d77edf402dbb01fd18dbf23d1c39988307356726037da5ad00c4" diff --git a/pyproject.toml b/pyproject.toml index 643fb17d2d..ebce3037ff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,7 +47,7 @@ packaging = ">=19" tomlkit = ">=0.5.3,<1.0.0" jinja2 = ">=2.10.3" pyyaml = ">=3.08" -argcomplete = ">=1.12.1,<3.5" +argcomplete = ">=1.12.1,<3.6" typing-extensions = { version = "^4.0.1", python = "<3.8" } charset-normalizer = ">=2.1.0,<4" # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility From 4becd3c450fc81b38ef5595bf66551a2081f48d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 01:28:47 +0000 Subject: [PATCH 328/685] build(deps): bump pyyaml from 6.0.1 to 6.0.2 Bumps [pyyaml](https://github.com/yaml/pyyaml) from 6.0.1 to 6.0.2. - [Release notes](https://github.com/yaml/pyyaml/releases) - [Changelog](https://github.com/yaml/pyyaml/blob/main/CHANGES) - [Commits](https://github.com/yaml/pyyaml/compare/6.0.1...6.0.2) --- updated-dependencies: - dependency-name: pyyaml dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 108 ++++++++++++++++++++++++++-------------------------- 1 file changed, 55 insertions(+), 53 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8facb05de2..f3d302d194 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1207,62 +1207,64 @@ files = [ [[package]] name = "pyyaml" -version = "6.0.1" +version = "6.0.2" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] [[package]] From f0aa3a7df46fa628b2c675f40795ab6b2d83b332 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Aug 2024 01:15:02 +0000 Subject: [PATCH 329/685] build(deps-dev): bump types-pyyaml Bumps [types-pyyaml](https://github.com/python/typeshed) from 6.0.12.20240724 to 6.0.12.20240808. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-pyyaml dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index f3d302d194..932282bd86 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1570,13 +1570,13 @@ files = [ [[package]] name = "types-pyyaml" -version = "6.0.12.20240724" +version = "6.0.12.20240808" description = "Typing stubs for PyYAML" optional = false python-versions = ">=3.8" files = [ - {file = "types-PyYAML-6.0.12.20240724.tar.gz", hash = "sha256:cf7b31ae67e0c5b2919c703d2affc415485099d3fe6666a6912f040fd05cb67f"}, - {file = "types_PyYAML-6.0.12.20240724-py3-none-any.whl", hash = "sha256:e5becec598f3aa3a2ddf671de4a75fa1c6856fbf73b2840286c9d50fae2d5d48"}, + {file = "types-PyYAML-6.0.12.20240808.tar.gz", hash = "sha256:b8f76ddbd7f65440a8bda5526a9607e4c7a322dc2f8e1a8c405644f9a6f4b9af"}, + {file = "types_PyYAML-6.0.12.20240808-py3-none-any.whl", hash = "sha256:deda34c5c655265fc517b546c902aa6eed2ef8d3e921e4765fe606fe2afe8d35"}, ] [[package]] From 72ce1da176b82a8213b4062948d0815eb43d3e85 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Aug 2024 01:15:28 +0000 Subject: [PATCH 330/685] build(deps-dev): bump ruff from 0.5.6 to 0.5.7 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.6 to 0.5.7. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.5.6...0.5.7) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 932282bd86..2544df7c0d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1425,29 +1425,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.5.6" +version = "0.5.7" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.6-py3-none-linux_armv6l.whl", hash = "sha256:a0ef5930799a05522985b9cec8290b185952f3fcd86c1772c3bdbd732667fdcd"}, - {file = "ruff-0.5.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b652dc14f6ef5d1552821e006f747802cc32d98d5509349e168f6bf0ee9f8f42"}, - {file = "ruff-0.5.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:80521b88d26a45e871f31e4b88938fd87db7011bb961d8afd2664982dfc3641a"}, - {file = "ruff-0.5.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9bc8f328a9f1309ae80e4d392836e7dbc77303b38ed4a7112699e63d3b066ab"}, - {file = "ruff-0.5.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d394940f61f7720ad371ddedf14722ee1d6250fd8d020f5ea5a86e7be217daf"}, - {file = "ruff-0.5.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111a99cdb02f69ddb2571e2756e017a1496c2c3a2aeefe7b988ddab38b416d36"}, - {file = "ruff-0.5.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e395daba77a79f6dc0d07311f94cc0560375ca20c06f354c7c99af3bf4560c5d"}, - {file = "ruff-0.5.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c476acb43c3c51e3c614a2e878ee1589655fa02dab19fe2db0423a06d6a5b1b6"}, - {file = "ruff-0.5.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2ff8003f5252fd68425fd53d27c1f08b201d7ed714bb31a55c9ac1d4c13e2eb"}, - {file = "ruff-0.5.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c94e084ba3eaa80c2172918c2ca2eb2230c3f15925f4ed8b6297260c6ef179ad"}, - {file = "ruff-0.5.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1f77c1c3aa0669fb230b06fb24ffa3e879391a3ba3f15e3d633a752da5a3e670"}, - {file = "ruff-0.5.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f908148c93c02873210a52cad75a6eda856b2cbb72250370ce3afef6fb99b1ed"}, - {file = "ruff-0.5.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:563a7ae61ad284187d3071d9041c08019975693ff655438d8d4be26e492760bd"}, - {file = "ruff-0.5.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:94fe60869bfbf0521e04fd62b74cbca21cbc5beb67cbb75ab33fe8c174f54414"}, - {file = "ruff-0.5.6-py3-none-win32.whl", hash = "sha256:e6a584c1de6f8591c2570e171cc7ce482bb983d49c70ddf014393cd39e9dfaed"}, - {file = "ruff-0.5.6-py3-none-win_amd64.whl", hash = "sha256:d7fe7dccb1a89dc66785d7aa0ac283b2269712d8ed19c63af908fdccca5ccc1a"}, - {file = "ruff-0.5.6-py3-none-win_arm64.whl", hash = "sha256:57c6c0dd997b31b536bff49b9eee5ed3194d60605a4427f735eeb1f9c1b8d264"}, - {file = "ruff-0.5.6.tar.gz", hash = "sha256:07c9e3c2a8e1fe377dd460371c3462671a728c981c3205a5217291422209f642"}, + {file = "ruff-0.5.7-py3-none-linux_armv6l.whl", hash = "sha256:548992d342fc404ee2e15a242cdbea4f8e39a52f2e7752d0e4cbe88d2d2f416a"}, + {file = "ruff-0.5.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00cc8872331055ee017c4f1071a8a31ca0809ccc0657da1d154a1d2abac5c0be"}, + {file = "ruff-0.5.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf3d86a1fdac1aec8a3417a63587d93f906c678bb9ed0b796da7b59c1114a1e"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a01c34400097b06cf8a6e61b35d6d456d5bd1ae6961542de18ec81eaf33b4cb8"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcc8054f1a717e2213500edaddcf1dbb0abad40d98e1bd9d0ad364f75c763eea"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f70284e73f36558ef51602254451e50dd6cc479f8b6f8413a95fcb5db4a55fc"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a78ad870ae3c460394fc95437d43deb5c04b5c29297815a2a1de028903f19692"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ccd078c66a8e419475174bfe60a69adb36ce04f8d4e91b006f1329d5cd44bcf"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e31c9bad4ebf8fdb77b59cae75814440731060a09a0e0077d559a556453acbb"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d796327eed8e168164346b769dd9a27a70e0298d667b4ecee6877ce8095ec8e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a09ea2c3f7778cc635e7f6edf57d566a8ee8f485f3c4454db7771efb692c499"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a36d8dcf55b3a3bc353270d544fb170d75d2dff41eba5df57b4e0b67a95bb64e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9369c218f789eefbd1b8d82a8cf25017b523ac47d96b2f531eba73770971c9e5"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b88ca3db7eb377eb24fb7c82840546fb7acef75af4a74bd36e9ceb37a890257e"}, + {file = "ruff-0.5.7-py3-none-win32.whl", hash = "sha256:33d61fc0e902198a3e55719f4be6b375b28f860b09c281e4bdbf783c0566576a"}, + {file = "ruff-0.5.7-py3-none-win_amd64.whl", hash = "sha256:083bbcbe6fadb93cd86709037acc510f86eed5a314203079df174c40bbbca6b3"}, + {file = "ruff-0.5.7-py3-none-win_arm64.whl", hash = "sha256:2dca26154ff9571995107221d0aeaad0e75a77b5a682d6236cf89a58c70b76f4"}, + {file = "ruff-0.5.7.tar.gz", hash = "sha256:8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5"}, ] [[package]] From 9e18b632a8d4b88e2202378923575df80c9162f0 Mon Sep 17 00:00:00 2001 From: Marcel Blijleven <marcelblijleven@gmail.com> Date: Tue, 30 Jul 2024 13:10:58 +0200 Subject: [PATCH 331/685] feat(bump): add functionality to write the next version to stdout Adds a --get-next flag which determines the next version and writes it to stdout. --- commitizen/cli.py | 6 ++ commitizen/commands/bump.py | 31 ++++++++-- commitizen/exceptions.py | 4 ++ docs/commands/bump.md | 15 +++++ tests/commands/test_bump_command.py | 61 +++++++++++++++++++ ...shows_description_when_use_help_option.txt | 3 +- 6 files changed, 115 insertions(+), 5 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 00be6daf15..3c529e4210 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -353,6 +353,12 @@ def __call__( "help": "Add additional build-metadata to the version-number", "default": None, }, + { + "name": ["--get-next"], + "action": "store_true", + "help": "Determine the next version and write to stdout", + "default": False, + }, ], }, { diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 8497384665..a3682df8f3 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -14,6 +14,7 @@ BumpTagFailedError, DryRunExit, ExpectedExit, + GetNextExit, InvalidManualVersion, NoCommitsFoundError, NoneIncrementExit, @@ -159,6 +160,7 @@ def __call__(self) -> None: # noqa: C901 manual_version = self.arguments["manual_version"] build_metadata = self.arguments["build_metadata"] increment_mode: str = self.arguments["increment_mode"] + get_next: bool = self.arguments["get_next"] if manual_version: if increment: @@ -190,6 +192,9 @@ def __call__(self) -> None: # noqa: C901 "--prerelease-offset cannot be combined with MANUAL_VERSION" ) + if get_next: + raise NotAllowed("--get-next cannot be combined with MANUAL_VERSION") + if major_version_zero: if not current_version.release[0] == 0: raise NotAllowed( @@ -202,6 +207,18 @@ def __call__(self) -> None: # noqa: C901 "--local-version cannot be combined with --build-metadata" ) + # If user specified changelog_to_stdout, they probably want the + # changelog to be generated as well, this is the most intuitive solution + self.changelog = self.changelog or bool(self.changelog_to_stdout) + + if get_next: + if self.changelog: + raise NotAllowed( + "--changelog or --changelog-to-stdout is not allowed with --get-next" + ) + # Setting dry_run to prevent any unwanted changes to the repo or files + self.dry_run = True + current_tag_version: str = bump.normalize_tag( current_version, tag_format=tag_format, @@ -210,10 +227,6 @@ def __call__(self) -> None: # noqa: C901 is_initial = self.is_initial_tag(current_tag_version, is_yes) - # If user specified changelog_to_stdout, they probably want the - # changelog to be generated as well, this is the most intuitive solution - self.changelog = self.changelog or bool(self.changelog_to_stdout) - if manual_version: try: new_version = self.scheme(manual_version) @@ -266,6 +279,16 @@ def __call__(self) -> None: # noqa: C901 current_version, new_version, bump_commit_message ) + if get_next: + if increment is None and new_tag_version == current_tag_version: + raise NoneIncrementExit( + "[NO_COMMITS_TO_BUMP]\n" + "The commits found are not eligible to be bumped" + ) + + out.write(str(new_version)) + raise GetNextExit() + # Report found information information = f"{message}\n" f"tag to create: {new_tag_version}\n" if increment: diff --git a/commitizen/exceptions.py b/commitizen/exceptions.py index b0fc4e382d..c96803b5fb 100644 --- a/commitizen/exceptions.py +++ b/commitizen/exceptions.py @@ -67,6 +67,10 @@ class DryRunExit(ExpectedExit): pass +class GetNextExit(ExpectedExit): + pass + + class NoneIncrementExit(CommitizenException): exit_code = ExitCode.NO_INCREMENT diff --git a/docs/commands/bump.md b/docs/commands/bump.md index 4d370a6a1f..1bd85025bb 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -285,6 +285,21 @@ You should normally not use this functionality, but if you decide to do, keep in * Version `1.2.3+a`, and `1.2.3+b` are the same version! Tools should not use the string after `+` for version calculation. This is probably not a guarantee (example in helm) even tho it is in the spec. * It might be problematic having the metadata in place when doing upgrades depending on what tool you use. +### `--get-next` + +Provides a way to determine the next version and write it to stdout. This parameter is not compatible with `--changelog` +and `manual version`. + +```bash +cz bump --get-next +``` + +Will output the next version, e.g. `1.2.3`. This can be useful for determining the next version based in CI for non +production environments/builds. + +It will raise a `NoneIncrementExit` if the commits found are not eligible for a version bump. +See [avoid raising errors](#avoid-raising-errors) for information on suppressing this exit. + ## Avoid raising errors Some situations from commitizen raise an exit code different than 0. diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index a0271c322e..90bca62070 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -21,6 +21,7 @@ DryRunExit, ExitCode, ExpectedExit, + GetNextExit, InvalidManualVersion, NoCommitsFoundError, NoneIncrementExit, @@ -1462,3 +1463,63 @@ def test_bump_command_shows_description_when_use_help_option( out, _ = capsys.readouterr() file_regression.check(out, extension=".txt") + + +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_bump_get_next(mocker: MockFixture, capsys): + create_file_and_commit("feat: new file") + + testargs = ["cz", "bump", "--yes", "--get-next"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(GetNextExit): + cli.main() + + out, _ = capsys.readouterr() + assert "0.2.0" in out + + tag_exists = git.tag_exist("0.2.0") + assert tag_exists is False + + +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_bump_get_next__changelog_is_not_allowed(mocker: MockFixture): + create_file_and_commit("feat: new file") + + testargs = ["cz", "bump", "--yes", "--get-next", "--changelog"] + mocker.patch.object(sys, "argv", testargs) + + with pytest.raises(NotAllowed): + cli.main() + + +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_bump_get_next__changelog_to_stdout_is_not_allowed(mocker: MockFixture): + create_file_and_commit("feat: new file") + + testargs = ["cz", "bump", "--yes", "--get-next", "--changelog-to-stdout"] + mocker.patch.object(sys, "argv", testargs) + + with pytest.raises(NotAllowed): + cli.main() + + +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_bump_get_next__manual_version_is_not_allowed(mocker: MockFixture): + create_file_and_commit("feat: new file") + + testargs = ["cz", "bump", "--yes", "--get-next", "0.2.1"] + mocker.patch.object(sys, "argv", testargs) + + with pytest.raises(NotAllowed): + cli.main() + + +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_bump_get_next__no_eligible_commits_raises(mocker: MockFixture): + create_file_and_commit("chore: new commit") + + testargs = ["cz", "bump", "--yes", "--get-next"] + mocker.patch.object(sys, "argv", testargs) + + with pytest.raises(NoneIncrementExit): + cli.main() diff --git a/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt b/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt index de76f2efcf..7c3f8ac805 100644 --- a/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt @@ -10,7 +10,7 @@ usage: cz bump [-h] [--dry-run] [--files-only] [--local-version] [--changelog] [--file-name FILE_NAME] [--prerelease-offset PRERELEASE_OFFSET] [--version-scheme {pep440,semver,semver2}] [--version-type {pep440,semver,semver2}] - [--build-metadata BUILD_METADATA] + [--build-metadata BUILD_METADATA] [--get-next] [MANUAL_VERSION] bump semantic version based on the git log @@ -77,3 +77,4 @@ options: Deprecated, use --version-scheme --build-metadata BUILD_METADATA Add additional build-metadata to the version-number + --get-next Determine the next version and write to stdout From d6e394a8e4949b832a15ac18466b99e46daa63d1 Mon Sep 17 00:00:00 2001 From: Marcel Blijleven <marcelblijleven@gmail.com> Date: Thu, 1 Aug 2024 22:01:54 +0200 Subject: [PATCH 332/685] docs(bump): add comparison between --get-next and --dry-run --- docs/commands/bump.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/commands/bump.md b/docs/commands/bump.md index 1bd85025bb..fabae48940 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -297,8 +297,26 @@ cz bump --get-next Will output the next version, e.g. `1.2.3`. This can be useful for determining the next version based in CI for non production environments/builds. -It will raise a `NoneIncrementExit` if the commits found are not eligible for a version bump. -See [avoid raising errors](#avoid-raising-errors) for information on suppressing this exit. +This behavior differs from the `--dry-run` flag. The `--dry-run` flag provides a more detailed output and can also show +the changes as they would appear in the changelog file. + +The following output is the result of `cz bump --dry-run`: + +``` +bump: version 3.28.0 → 3.29.0 +tag to create: v3.29.0 +increment detected: MINOR +``` + +The following output is the result of `cz bump --get-next`: + +``` +3.29.0 +``` + +The `--get-next` flag will raise a `NoneIncrementExit` if the found commits are not eligible for a version bump. + +For information on how to suppress this exit, see [avoid raising errors](#avoid-raising-errors). ## Avoid raising errors From b84a83b483a6db3d5a8d17091a8189bc13d63234 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 11 Aug 2024 10:40:11 +0800 Subject: [PATCH 333/685] docs(bump): reword "--get-next" description --- docs/commands/bump.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/commands/bump.md b/docs/commands/bump.md index fabae48940..efb5b0881d 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -294,7 +294,7 @@ and `manual version`. cz bump --get-next ``` -Will output the next version, e.g. `1.2.3`. This can be useful for determining the next version based in CI for non +Will output the next version, e.g., `1.2.3`. This can be useful for determining the next version based on CI for non production environments/builds. This behavior differs from the `--dry-run` flag. The `--dry-run` flag provides a more detailed output and can also show From d7e01aa9b0cfe3c1b732e66d523bbd0656221127 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sun, 11 Aug 2024 14:09:19 +0000 Subject: [PATCH 334/685] =?UTF-8?q?bump:=20version=203.28.0=20=E2=86=92=20?= =?UTF-8?q?3.29.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8d0cf55529..6cdbcc90e6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v3.28.0 # automatically updated by Commitizen + rev: v3.29.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ec2dd2d8e..b621d9e5dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v3.29.0 (2024-08-11) + +### Feat + +- **bump**: add functionality to write the next version to stdout + ## v3.28.0 (2024-07-17) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 87dca02966..c13e81a875 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.28.0" +__version__ = "3.29.0" diff --git a/pyproject.toml b/pyproject.toml index ebce3037ff..f3574a1826 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.28.0" +version = "3.29.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.28.0" +version = "3.29.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From b3add85acc37e2a277473452922f1dd36500ee05 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sun, 11 Aug 2024 14:09:52 +0000 Subject: [PATCH 335/685] docs(cli/screenshots): update CLI screenshots [skip ci] --- docs/images/cli_help/cz_bump___help.svg | 350 ++++++++++++------------ 1 file changed, 177 insertions(+), 173 deletions(-) diff --git a/docs/images/cli_help/cz_bump___help.svg b/docs/images/cli_help/cz_bump___help.svg index 96db25a964..7af2aa8c27 100644 --- a/docs/images/cli_help/cz_bump___help.svg +++ b/docs/images/cli_help/cz_bump___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 2026.3999999999999" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 2050.8" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,362 +19,366 @@ font-weight: 700; } - .terminal-509574676-matrix { + .terminal-440648439-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-509574676-title { + .terminal-440648439-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-509574676-r1 { fill: #c5c8c6 } -.terminal-509574676-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-509574676-r3 { fill: #68a0b3;font-weight: bold } -.terminal-509574676-r4 { fill: #98a84b } + .terminal-440648439-r1 { fill: #c5c8c6 } +.terminal-440648439-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-440648439-r3 { fill: #68a0b3;font-weight: bold } +.terminal-440648439-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-509574676-clip-terminal"> - <rect x="0" y="0" width="975.0" height="1975.3999999999999" /> + <clipPath id="terminal-440648439-clip-terminal"> + <rect x="0" y="0" width="975.0" height="1999.8" /> </clipPath> - <clipPath id="terminal-509574676-line-0"> + <clipPath id="terminal-440648439-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-1"> +<clipPath id="terminal-440648439-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-2"> +<clipPath id="terminal-440648439-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-3"> +<clipPath id="terminal-440648439-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-4"> +<clipPath id="terminal-440648439-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-5"> +<clipPath id="terminal-440648439-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-6"> +<clipPath id="terminal-440648439-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-7"> +<clipPath id="terminal-440648439-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-8"> +<clipPath id="terminal-440648439-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-9"> +<clipPath id="terminal-440648439-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-10"> +<clipPath id="terminal-440648439-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-11"> +<clipPath id="terminal-440648439-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-12"> +<clipPath id="terminal-440648439-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-13"> +<clipPath id="terminal-440648439-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-14"> +<clipPath id="terminal-440648439-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-15"> +<clipPath id="terminal-440648439-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-16"> +<clipPath id="terminal-440648439-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-17"> +<clipPath id="terminal-440648439-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-18"> +<clipPath id="terminal-440648439-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-19"> +<clipPath id="terminal-440648439-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-20"> +<clipPath id="terminal-440648439-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-21"> +<clipPath id="terminal-440648439-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-22"> +<clipPath id="terminal-440648439-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-23"> +<clipPath id="terminal-440648439-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-24"> +<clipPath id="terminal-440648439-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-25"> +<clipPath id="terminal-440648439-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-26"> +<clipPath id="terminal-440648439-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-27"> +<clipPath id="terminal-440648439-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-28"> +<clipPath id="terminal-440648439-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-29"> +<clipPath id="terminal-440648439-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-30"> +<clipPath id="terminal-440648439-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-31"> +<clipPath id="terminal-440648439-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-32"> +<clipPath id="terminal-440648439-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-33"> +<clipPath id="terminal-440648439-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-34"> +<clipPath id="terminal-440648439-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-35"> +<clipPath id="terminal-440648439-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-36"> +<clipPath id="terminal-440648439-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-37"> +<clipPath id="terminal-440648439-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-38"> +<clipPath id="terminal-440648439-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-39"> +<clipPath id="terminal-440648439-line-39"> <rect x="0" y="953.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-40"> +<clipPath id="terminal-440648439-line-40"> <rect x="0" y="977.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-41"> +<clipPath id="terminal-440648439-line-41"> <rect x="0" y="1001.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-42"> +<clipPath id="terminal-440648439-line-42"> <rect x="0" y="1026.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-43"> +<clipPath id="terminal-440648439-line-43"> <rect x="0" y="1050.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-44"> +<clipPath id="terminal-440648439-line-44"> <rect x="0" y="1075.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-45"> +<clipPath id="terminal-440648439-line-45"> <rect x="0" y="1099.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-46"> +<clipPath id="terminal-440648439-line-46"> <rect x="0" y="1123.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-47"> +<clipPath id="terminal-440648439-line-47"> <rect x="0" y="1148.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-48"> +<clipPath id="terminal-440648439-line-48"> <rect x="0" y="1172.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-49"> +<clipPath id="terminal-440648439-line-49"> <rect x="0" y="1197.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-50"> +<clipPath id="terminal-440648439-line-50"> <rect x="0" y="1221.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-51"> +<clipPath id="terminal-440648439-line-51"> <rect x="0" y="1245.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-52"> +<clipPath id="terminal-440648439-line-52"> <rect x="0" y="1270.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-53"> +<clipPath id="terminal-440648439-line-53"> <rect x="0" y="1294.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-54"> +<clipPath id="terminal-440648439-line-54"> <rect x="0" y="1319.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-55"> +<clipPath id="terminal-440648439-line-55"> <rect x="0" y="1343.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-56"> +<clipPath id="terminal-440648439-line-56"> <rect x="0" y="1367.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-57"> +<clipPath id="terminal-440648439-line-57"> <rect x="0" y="1392.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-58"> +<clipPath id="terminal-440648439-line-58"> <rect x="0" y="1416.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-59"> +<clipPath id="terminal-440648439-line-59"> <rect x="0" y="1441.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-60"> +<clipPath id="terminal-440648439-line-60"> <rect x="0" y="1465.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-61"> +<clipPath id="terminal-440648439-line-61"> <rect x="0" y="1489.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-62"> +<clipPath id="terminal-440648439-line-62"> <rect x="0" y="1514.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-63"> +<clipPath id="terminal-440648439-line-63"> <rect x="0" y="1538.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-64"> +<clipPath id="terminal-440648439-line-64"> <rect x="0" y="1563.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-65"> +<clipPath id="terminal-440648439-line-65"> <rect x="0" y="1587.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-66"> +<clipPath id="terminal-440648439-line-66"> <rect x="0" y="1611.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-67"> +<clipPath id="terminal-440648439-line-67"> <rect x="0" y="1636.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-68"> +<clipPath id="terminal-440648439-line-68"> <rect x="0" y="1660.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-69"> +<clipPath id="terminal-440648439-line-69"> <rect x="0" y="1685.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-70"> +<clipPath id="terminal-440648439-line-70"> <rect x="0" y="1709.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-71"> +<clipPath id="terminal-440648439-line-71"> <rect x="0" y="1733.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-72"> +<clipPath id="terminal-440648439-line-72"> <rect x="0" y="1758.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-73"> +<clipPath id="terminal-440648439-line-73"> <rect x="0" y="1782.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-74"> +<clipPath id="terminal-440648439-line-74"> <rect x="0" y="1807.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-75"> +<clipPath id="terminal-440648439-line-75"> <rect x="0" y="1831.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-76"> +<clipPath id="terminal-440648439-line-76"> <rect x="0" y="1855.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-77"> +<clipPath id="terminal-440648439-line-77"> <rect x="0" y="1880.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-78"> +<clipPath id="terminal-440648439-line-78"> <rect x="0" y="1904.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-509574676-line-79"> +<clipPath id="terminal-440648439-line-79"> <rect x="0" y="1929.1" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-440648439-line-80"> + <rect x="0" y="1953.5" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="2024.4" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="2048.8" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-509574676-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-440648439-clip-terminal)"> - <g class="terminal-509574676-matrix"> - <text class="terminal-509574676-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-509574676-line-0)">$ cz bump --help</text><text class="terminal-509574676-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-509574676-line-0)"> -</text><text class="terminal-509574676-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-509574676-line-1)">usage: cz bump </text><text class="terminal-509574676-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">[</text><text class="terminal-509574676-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-509574676-line-1)">-h</text><text class="terminal-509574676-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">]</text><text class="terminal-509574676-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">[</text><text class="terminal-509574676-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-509574676-line-1)">--dry-run</text><text class="terminal-509574676-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">]</text><text class="terminal-509574676-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">[</text><text class="terminal-509574676-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-509574676-line-1)">--files-only</text><text class="terminal-509574676-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">]</text><text class="terminal-509574676-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">[</text><text class="terminal-509574676-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-509574676-line-1)">--local-version</text><text class="terminal-509574676-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">]</text><text class="terminal-509574676-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">[</text><text class="terminal-509574676-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-509574676-line-1)">--changelog</text><text class="terminal-509574676-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)">]</text><text class="terminal-509574676-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-509574676-line-1)"> -</text><text class="terminal-509574676-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)">[</text><text class="terminal-509574676-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-509574676-line-2)">--no-verify</text><text class="terminal-509574676-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)">]</text><text class="terminal-509574676-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)">[</text><text class="terminal-509574676-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-509574676-line-2)">--yes</text><text class="terminal-509574676-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)">]</text><text class="terminal-509574676-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)">[</text><text class="terminal-509574676-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-509574676-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-509574676-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)">]</text><text class="terminal-509574676-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-509574676-line-2)"> -</text><text class="terminal-509574676-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)">[</text><text class="terminal-509574676-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-509574676-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-509574676-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)">]</text><text class="terminal-509574676-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)">[</text><text class="terminal-509574676-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-509574676-line-3)">--prerelease </text><text class="terminal-509574676-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)">{</text><text class="terminal-509574676-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-509574676-line-3)">alpha,beta,rc</text><text class="terminal-509574676-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)">}</text><text class="terminal-509574676-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)">]</text><text class="terminal-509574676-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-509574676-line-3)"> -</text><text class="terminal-509574676-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)">[</text><text class="terminal-509574676-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-509574676-line-4)">--devrelease DEVRELEASE</text><text class="terminal-509574676-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)">]</text><text class="terminal-509574676-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)">[</text><text class="terminal-509574676-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-509574676-line-4)">--increment </text><text class="terminal-509574676-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)">{</text><text class="terminal-509574676-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-509574676-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-509574676-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)">}</text><text class="terminal-509574676-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)">]</text><text class="terminal-509574676-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-509574676-line-4)"> -</text><text class="terminal-509574676-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)">[</text><text class="terminal-509574676-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-509574676-line-5)">--increment-mode </text><text class="terminal-509574676-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)">{</text><text class="terminal-509574676-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-509574676-line-5)">linear,exact</text><text class="terminal-509574676-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)">}</text><text class="terminal-509574676-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)">]</text><text class="terminal-509574676-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)">[</text><text class="terminal-509574676-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-509574676-line-5)">--check-consistency</text><text class="terminal-509574676-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)">]</text><text class="terminal-509574676-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-509574676-line-5)"> -</text><text class="terminal-509574676-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-509574676-line-6)">[</text><text class="terminal-509574676-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-509574676-line-6)">--annotated-tag</text><text class="terminal-509574676-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-509574676-line-6)">]</text><text class="terminal-509574676-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-509574676-line-6)"> -</text><text class="terminal-509574676-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-509574676-line-7)">[</text><text class="terminal-509574676-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-509574676-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-509574676-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-509574676-line-7)">]</text><text class="terminal-509574676-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-509574676-line-7)">[</text><text class="terminal-509574676-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-509574676-line-7)">--gpg-sign</text><text class="terminal-509574676-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-509574676-line-7)">]</text><text class="terminal-509574676-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-509574676-line-7)"> -</text><text class="terminal-509574676-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)">[</text><text class="terminal-509574676-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-509574676-line-8)">--changelog-to-stdout</text><text class="terminal-509574676-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)">]</text><text class="terminal-509574676-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)">[</text><text class="terminal-509574676-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-509574676-line-8)">--git-output-to-stderr</text><text class="terminal-509574676-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)">]</text><text class="terminal-509574676-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)">[</text><text class="terminal-509574676-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-509574676-line-8)">--retry</text><text class="terminal-509574676-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)">]</text><text class="terminal-509574676-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-509574676-line-8)"> -</text><text class="terminal-509574676-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)">[</text><text class="terminal-509574676-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-509574676-line-9)">--major-version-zero</text><text class="terminal-509574676-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)">]</text><text class="terminal-509574676-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)">[</text><text class="terminal-509574676-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-509574676-line-9)">--template TEMPLATE</text><text class="terminal-509574676-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)">]</text><text class="terminal-509574676-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)">[</text><text class="terminal-509574676-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-509574676-line-9)">--extra EXTRA</text><text class="terminal-509574676-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)">]</text><text class="terminal-509574676-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-509574676-line-9)"> -</text><text class="terminal-509574676-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-509574676-line-10)">[</text><text class="terminal-509574676-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-509574676-line-10)">--file-name FILE_NAME</text><text class="terminal-509574676-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-509574676-line-10)">]</text><text class="terminal-509574676-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-509574676-line-10)">[</text><text class="terminal-509574676-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-509574676-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-509574676-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-509574676-line-10)">]</text><text class="terminal-509574676-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-509574676-line-10)"> -</text><text class="terminal-509574676-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-509574676-line-11)">[</text><text class="terminal-509574676-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-509574676-line-11)">--version-scheme </text><text class="terminal-509574676-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-509574676-line-11)">{</text><text class="terminal-509574676-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-509574676-line-11)">pep440,semver,semver2</text><text class="terminal-509574676-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-509574676-line-11)">}</text><text class="terminal-509574676-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-509574676-line-11)">]</text><text class="terminal-509574676-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-509574676-line-11)"> -</text><text class="terminal-509574676-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-509574676-line-12)">[</text><text class="terminal-509574676-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-509574676-line-12)">--version-type </text><text class="terminal-509574676-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-509574676-line-12)">{</text><text class="terminal-509574676-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-509574676-line-12)">pep440,semver,semver2</text><text class="terminal-509574676-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-509574676-line-12)">}</text><text class="terminal-509574676-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-509574676-line-12)">]</text><text class="terminal-509574676-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-509574676-line-12)"> -</text><text class="terminal-509574676-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-509574676-line-13)">[</text><text class="terminal-509574676-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-509574676-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-509574676-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-509574676-line-13)">]</text><text class="terminal-509574676-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-509574676-line-13)"> -</text><text class="terminal-509574676-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-509574676-line-14)">[</text><text class="terminal-509574676-r1" x="195.2" y="361.6" textLength="170.8" clip-path="url(#terminal-509574676-line-14)">MANUAL_VERSION</text><text class="terminal-509574676-r2" x="366" y="361.6" textLength="12.2" clip-path="url(#terminal-509574676-line-14)">]</text><text class="terminal-509574676-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-509574676-line-14)"> -</text><text class="terminal-509574676-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-509574676-line-15)"> -</text><text class="terminal-509574676-r1" x="0" y="410.4" textLength="512.4" clip-path="url(#terminal-509574676-line-16)">bump semantic version based on the git log</text><text class="terminal-509574676-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-509574676-line-16)"> -</text><text class="terminal-509574676-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-509574676-line-17)"> -</text><text class="terminal-509574676-r1" x="0" y="459.2" textLength="256.2" clip-path="url(#terminal-509574676-line-18)">positional arguments:</text><text class="terminal-509574676-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-509574676-line-18)"> -</text><text class="terminal-509574676-r1" x="0" y="483.6" textLength="610" clip-path="url(#terminal-509574676-line-19)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-509574676-r2" x="610" y="483.6" textLength="12.2" clip-path="url(#terminal-509574676-line-19)">(</text><text class="terminal-509574676-r1" x="622.2" y="483.6" textLength="61" clip-path="url(#terminal-509574676-line-19)">e.g: </text><text class="terminal-509574676-r3" x="683.2" y="483.6" textLength="36.6" clip-path="url(#terminal-509574676-line-19)">1.5</text><text class="terminal-509574676-r1" x="719.8" y="483.6" textLength="12.2" clip-path="url(#terminal-509574676-line-19)">.</text><text class="terminal-509574676-r3" x="732" y="483.6" textLength="12.2" clip-path="url(#terminal-509574676-line-19)">3</text><text class="terminal-509574676-r2" x="744.2" y="483.6" textLength="12.2" clip-path="url(#terminal-509574676-line-19)">)</text><text class="terminal-509574676-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-509574676-line-19)"> -</text><text class="terminal-509574676-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-509574676-line-20)"> -</text><text class="terminal-509574676-r1" x="0" y="532.4" textLength="97.6" clip-path="url(#terminal-509574676-line-21)">options:</text><text class="terminal-509574676-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-509574676-line-21)"> -</text><text class="terminal-509574676-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-509574676-line-22)">  -h, --help            show this help message and exit</text><text class="terminal-509574676-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-509574676-line-22)"> -</text><text class="terminal-509574676-r1" x="0" y="581.2" textLength="915" clip-path="url(#terminal-509574676-line-23)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-509574676-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-509574676-line-23)"> -</text><text class="terminal-509574676-r1" x="0" y="605.6" textLength="793" clip-path="url(#terminal-509574676-line-24)">  --files-only          bump version in the files from the config</text><text class="terminal-509574676-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-509574676-line-24)"> -</text><text class="terminal-509574676-r1" x="0" y="630" textLength="719.8" clip-path="url(#terminal-509574676-line-25)">  --local-version       bump only the local version portion</text><text class="terminal-509574676-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-509574676-line-25)"> -</text><text class="terminal-509574676-r1" x="0" y="654.4" textLength="841.8" clip-path="url(#terminal-509574676-line-26)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-509574676-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-509574676-line-26)"> -</text><text class="terminal-509574676-r1" x="0" y="678.8" textLength="902.8" clip-path="url(#terminal-509574676-line-27)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-509574676-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-509574676-line-27)"> -</text><text class="terminal-509574676-r1" x="0" y="703.2" textLength="353.8" clip-path="url(#terminal-509574676-line-28)">                        hooks</text><text class="terminal-509574676-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-509574676-line-28)"> -</text><text class="terminal-509574676-r1" x="0" y="727.6" textLength="719.8" clip-path="url(#terminal-509574676-line-29)">  --yes                 accept automatically questions done</text><text class="terminal-509574676-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-509574676-line-29)"> -</text><text class="terminal-509574676-r1" x="0" y="752" textLength="305" clip-path="url(#terminal-509574676-line-30)">  --tag-format TAG_FORMAT</text><text class="terminal-509574676-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-509574676-line-30)"> -</text><text class="terminal-509574676-r1" x="0" y="776.4" textLength="939.4" clip-path="url(#terminal-509574676-line-31)">                        the format used to tag the commit and read it, use it</text><text class="terminal-509574676-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-509574676-line-31)"> -</text><text class="terminal-509574676-r1" x="0" y="800.8" textLength="866.2" clip-path="url(#terminal-509574676-line-32)">                        in existing projects, wrap around simple quotes</text><text class="terminal-509574676-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-509574676-line-32)"> -</text><text class="terminal-509574676-r1" x="0" y="825.2" textLength="353.8" clip-path="url(#terminal-509574676-line-33)">  --bump-message BUMP_MESSAGE</text><text class="terminal-509574676-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-509574676-line-33)"> -</text><text class="terminal-509574676-r1" x="0" y="849.6" textLength="902.8" clip-path="url(#terminal-509574676-line-34)">                        template used to create the release commit, useful</text><text class="terminal-509574676-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-509574676-line-34)"> -</text><text class="terminal-509574676-r1" x="0" y="874" textLength="536.8" clip-path="url(#terminal-509574676-line-35)">                        when working with CI</text><text class="terminal-509574676-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-509574676-line-35)"> -</text><text class="terminal-509574676-r1" x="0" y="898.4" textLength="183" clip-path="url(#terminal-509574676-line-36)">  --prerelease </text><text class="terminal-509574676-r2" x="183" y="898.4" textLength="12.2" clip-path="url(#terminal-509574676-line-36)">{</text><text class="terminal-509574676-r1" x="195.2" y="898.4" textLength="158.6" clip-path="url(#terminal-509574676-line-36)">alpha,beta,rc</text><text class="terminal-509574676-r2" x="353.8" y="898.4" textLength="12.2" clip-path="url(#terminal-509574676-line-36)">}</text><text class="terminal-509574676-r1" x="366" y="898.4" textLength="73.2" clip-path="url(#terminal-509574676-line-36)">, -pr </text><text class="terminal-509574676-r2" x="439.2" y="898.4" textLength="12.2" clip-path="url(#terminal-509574676-line-36)">{</text><text class="terminal-509574676-r1" x="451.4" y="898.4" textLength="158.6" clip-path="url(#terminal-509574676-line-36)">alpha,beta,rc</text><text class="terminal-509574676-r2" x="610" y="898.4" textLength="12.2" clip-path="url(#terminal-509574676-line-36)">}</text><text class="terminal-509574676-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-509574676-line-36)"> -</text><text class="terminal-509574676-r1" x="0" y="922.8" textLength="597.8" clip-path="url(#terminal-509574676-line-37)">                        choose type of prerelease</text><text class="terminal-509574676-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-509574676-line-37)"> -</text><text class="terminal-509574676-r1" x="0" y="947.2" textLength="488" clip-path="url(#terminal-509574676-line-38)">  --devrelease DEVRELEASE, -d DEVRELEASE</text><text class="terminal-509574676-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-509574676-line-38)"> -</text><text class="terminal-509574676-r1" x="0" y="971.6" textLength="841.8" clip-path="url(#terminal-509574676-line-39)">                        specify non-negative integer for dev. release</text><text class="terminal-509574676-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-509574676-line-39)"> -</text><text class="terminal-509574676-r1" x="0" y="996" textLength="170.8" clip-path="url(#terminal-509574676-line-40)">  --increment </text><text class="terminal-509574676-r2" x="170.8" y="996" textLength="12.2" clip-path="url(#terminal-509574676-line-40)">{</text><text class="terminal-509574676-r1" x="183" y="996" textLength="207.4" clip-path="url(#terminal-509574676-line-40)">MAJOR,MINOR,PATCH</text><text class="terminal-509574676-r2" x="390.4" y="996" textLength="12.2" clip-path="url(#terminal-509574676-line-40)">}</text><text class="terminal-509574676-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-509574676-line-40)"> -</text><text class="terminal-509574676-r1" x="0" y="1020.4" textLength="756.4" clip-path="url(#terminal-509574676-line-41)">                        manually specify the desired increment</text><text class="terminal-509574676-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-509574676-line-41)"> -</text><text class="terminal-509574676-r1" x="0" y="1044.8" textLength="231.8" clip-path="url(#terminal-509574676-line-42)">  --increment-mode </text><text class="terminal-509574676-r2" x="231.8" y="1044.8" textLength="12.2" clip-path="url(#terminal-509574676-line-42)">{</text><text class="terminal-509574676-r1" x="244" y="1044.8" textLength="146.4" clip-path="url(#terminal-509574676-line-42)">linear,exact</text><text class="terminal-509574676-r2" x="390.4" y="1044.8" textLength="12.2" clip-path="url(#terminal-509574676-line-42)">}</text><text class="terminal-509574676-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-509574676-line-42)"> -</text><text class="terminal-509574676-r1" x="0" y="1069.2" textLength="902.8" clip-path="url(#terminal-509574676-line-43)">                        set the method by which the new version is chosen.</text><text class="terminal-509574676-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-509574676-line-43)"> -</text><text class="terminal-509574676-r4" x="292.8" y="1093.6" textLength="97.6" clip-path="url(#terminal-509574676-line-44)">'linear'</text><text class="terminal-509574676-r2" x="402.6" y="1093.6" textLength="12.2" clip-path="url(#terminal-509574676-line-44)">(</text><text class="terminal-509574676-r1" x="414.8" y="1093.6" textLength="85.4" clip-path="url(#terminal-509574676-line-44)">default</text><text class="terminal-509574676-r2" x="500.2" y="1093.6" textLength="12.2" clip-path="url(#terminal-509574676-line-44)">)</text><text class="terminal-509574676-r1" x="512.4" y="1093.6" textLength="414.8" clip-path="url(#terminal-509574676-line-44)"> guesses the next version based on</text><text class="terminal-509574676-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-509574676-line-44)"> -</text><text class="terminal-509574676-r1" x="0" y="1118" textLength="939.4" clip-path="url(#terminal-509574676-line-45)">                        typical linear version progression, such that bumping</text><text class="terminal-509574676-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-509574676-line-45)"> -</text><text class="terminal-509574676-r1" x="0" y="1142.4" textLength="866.2" clip-path="url(#terminal-509574676-line-46)">                        of a pre-release with lower precedence than the</text><text class="terminal-509574676-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-509574676-line-46)"> -</text><text class="terminal-509574676-r1" x="0" y="1166.8" textLength="939.4" clip-path="url(#terminal-509574676-line-47)">                        current pre-release phase maintains the current phase</text><text class="terminal-509574676-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-509574676-line-47)"> -</text><text class="terminal-509574676-r1" x="0" y="1191.2" textLength="561.2" clip-path="url(#terminal-509574676-line-48)">                        of higher precedence. </text><text class="terminal-509574676-r4" x="561.2" y="1191.2" textLength="85.4" clip-path="url(#terminal-509574676-line-48)">'exact'</text><text class="terminal-509574676-r1" x="646.6" y="1191.2" textLength="305" clip-path="url(#terminal-509574676-line-48)"> applies the changes that</text><text class="terminal-509574676-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-509574676-line-48)"> -</text><text class="terminal-509574676-r1" x="0" y="1215.6" textLength="536.8" clip-path="url(#terminal-509574676-line-49)">                        have been specified </text><text class="terminal-509574676-r2" x="536.8" y="1215.6" textLength="12.2" clip-path="url(#terminal-509574676-line-49)">(</text><text class="terminal-509574676-r1" x="549" y="1215.6" textLength="353.8" clip-path="url(#terminal-509574676-line-49)">or determined from the commit</text><text class="terminal-509574676-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-509574676-line-49)"> -</text><text class="terminal-509574676-r1" x="0" y="1240" textLength="329.4" clip-path="url(#terminal-509574676-line-50)">                        log</text><text class="terminal-509574676-r2" x="329.4" y="1240" textLength="12.2" clip-path="url(#terminal-509574676-line-50)">)</text><text class="terminal-509574676-r1" x="341.6" y="1240" textLength="585.6" clip-path="url(#terminal-509574676-line-50)"> without interpretation, such that the increment</text><text class="terminal-509574676-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-509574676-line-50)"> -</text><text class="terminal-509574676-r1" x="0" y="1264.4" textLength="707.6" clip-path="url(#terminal-509574676-line-51)">                        and pre-release are always honored</text><text class="terminal-509574676-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-509574676-line-51)"> -</text><text class="terminal-509574676-r1" x="0" y="1288.8" textLength="317.2" clip-path="url(#terminal-509574676-line-52)">  --check-consistency, -cc</text><text class="terminal-509574676-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-509574676-line-52)"> -</text><text class="terminal-509574676-r1" x="0" y="1313.2" textLength="951.6" clip-path="url(#terminal-509574676-line-53)">                        check consistency among versions defined in commitizen</text><text class="terminal-509574676-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-509574676-line-53)"> -</text><text class="terminal-509574676-r1" x="0" y="1337.6" textLength="671" clip-path="url(#terminal-509574676-line-54)">                        configuration and version_files</text><text class="terminal-509574676-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-509574676-line-54)"> -</text><text class="terminal-509574676-r1" x="0" y="1362" textLength="866.2" clip-path="url(#terminal-509574676-line-55)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-509574676-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-509574676-line-55)"> -</text><text class="terminal-509574676-r1" x="0" y="1386.4" textLength="915" clip-path="url(#terminal-509574676-line-56)">  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-509574676-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-509574676-line-56)"> -</text><text class="terminal-509574676-r1" x="0" y="1410.8" textLength="634.4" clip-path="url(#terminal-509574676-line-57)">                        create annotated tag message</text><text class="terminal-509574676-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-509574676-line-57)"> -</text><text class="terminal-509574676-r1" x="0" y="1435.2" textLength="719.8" clip-path="url(#terminal-509574676-line-58)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-509574676-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-509574676-line-58)"> -</text><text class="terminal-509574676-r1" x="0" y="1459.6" textLength="280.6" clip-path="url(#terminal-509574676-line-59)">  --changelog-to-stdout</text><text class="terminal-509574676-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-509574676-line-59)"> -</text><text class="terminal-509574676-r1" x="0" y="1484" textLength="658.8" clip-path="url(#terminal-509574676-line-60)">                        Output changelog to the stdout</text><text class="terminal-509574676-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-509574676-line-60)"> -</text><text class="terminal-509574676-r1" x="0" y="1508.4" textLength="292.8" clip-path="url(#terminal-509574676-line-61)">  --git-output-to-stderr</text><text class="terminal-509574676-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-509574676-line-61)"> -</text><text class="terminal-509574676-r1" x="0" y="1532.8" textLength="646.6" clip-path="url(#terminal-509574676-line-62)">                        Redirect git output to stderr</text><text class="terminal-509574676-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-509574676-line-62)"> -</text><text class="terminal-509574676-r1" x="0" y="1557.2" textLength="744.2" clip-path="url(#terminal-509574676-line-63)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-509574676-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-509574676-line-63)"> -</text><text class="terminal-509574676-r1" x="0" y="1581.6" textLength="939.4" clip-path="url(#terminal-509574676-line-64)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-509574676-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-509574676-line-64)"> -</text><text class="terminal-509574676-r1" x="0" y="1606" textLength="414.8" clip-path="url(#terminal-509574676-line-65)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-509574676-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-509574676-line-65)"> -</text><text class="terminal-509574676-r1" x="0" y="1630.4" textLength="646.6" clip-path="url(#terminal-509574676-line-66)">                        changelog template file name </text><text class="terminal-509574676-r2" x="646.6" y="1630.4" textLength="12.2" clip-path="url(#terminal-509574676-line-66)">(</text><text class="terminal-509574676-r1" x="658.8" y="1630.4" textLength="280.6" clip-path="url(#terminal-509574676-line-66)">relative to the current</text><text class="terminal-509574676-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-509574676-line-66)"> -</text><text class="terminal-509574676-r1" x="0" y="1654.8" textLength="500.2" clip-path="url(#terminal-509574676-line-67)">                        working directory</text><text class="terminal-509574676-r2" x="500.2" y="1654.8" textLength="12.2" clip-path="url(#terminal-509574676-line-67)">)</text><text class="terminal-509574676-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-509574676-line-67)"> -</text><text class="terminal-509574676-r1" x="0" y="1679.2" textLength="305" clip-path="url(#terminal-509574676-line-68)">  --extra EXTRA, -e EXTRA</text><text class="terminal-509574676-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-509574676-line-68)"> -</text><text class="terminal-509574676-r1" x="0" y="1703.6" textLength="622.2" clip-path="url(#terminal-509574676-line-69)">                        a changelog extra variable </text><text class="terminal-509574676-r2" x="622.2" y="1703.6" textLength="12.2" clip-path="url(#terminal-509574676-line-69)">(</text><text class="terminal-509574676-r1" x="634.4" y="1703.6" textLength="146.4" clip-path="url(#terminal-509574676-line-69)">in the form </text><text class="terminal-509574676-r4" x="780.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-509574676-line-69)">'</text><text class="terminal-509574676-r4" x="793" y="1703.6" textLength="36.6" clip-path="url(#terminal-509574676-line-69)">key</text><text class="terminal-509574676-r4" x="829.6" y="1703.6" textLength="12.2" clip-path="url(#terminal-509574676-line-69)">=</text><text class="terminal-509574676-r4" x="841.8" y="1703.6" textLength="61" clip-path="url(#terminal-509574676-line-69)">value</text><text class="terminal-509574676-r4" x="902.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-509574676-line-69)">'</text><text class="terminal-509574676-r2" x="915" y="1703.6" textLength="12.2" clip-path="url(#terminal-509574676-line-69)">)</text><text class="terminal-509574676-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-509574676-line-69)"> -</text><text class="terminal-509574676-r1" x="0" y="1728" textLength="280.6" clip-path="url(#terminal-509574676-line-70)">  --file-name FILE_NAME</text><text class="terminal-509574676-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-509574676-line-70)"> -</text><text class="terminal-509574676-r1" x="0" y="1752.4" textLength="573.4" clip-path="url(#terminal-509574676-line-71)">                        file name of changelog </text><text class="terminal-509574676-r2" x="573.4" y="1752.4" textLength="12.2" clip-path="url(#terminal-509574676-line-71)">(</text><text class="terminal-509574676-r1" x="585.6" y="1752.4" textLength="109.8" clip-path="url(#terminal-509574676-line-71)">default: </text><text class="terminal-509574676-r4" x="695.4" y="1752.4" textLength="170.8" clip-path="url(#terminal-509574676-line-71)">'CHANGELOG.md'</text><text class="terminal-509574676-r2" x="866.2" y="1752.4" textLength="12.2" clip-path="url(#terminal-509574676-line-71)">)</text><text class="terminal-509574676-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-509574676-line-71)"> -</text><text class="terminal-509574676-r1" x="0" y="1776.8" textLength="475.8" clip-path="url(#terminal-509574676-line-72)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-509574676-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-509574676-line-72)"> -</text><text class="terminal-509574676-r1" x="0" y="1801.2" textLength="719.8" clip-path="url(#terminal-509574676-line-73)">                        start pre-releases with this offset</text><text class="terminal-509574676-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-509574676-line-73)"> -</text><text class="terminal-509574676-r1" x="0" y="1825.6" textLength="231.8" clip-path="url(#terminal-509574676-line-74)">  --version-scheme </text><text class="terminal-509574676-r2" x="231.8" y="1825.6" textLength="12.2" clip-path="url(#terminal-509574676-line-74)">{</text><text class="terminal-509574676-r1" x="244" y="1825.6" textLength="256.2" clip-path="url(#terminal-509574676-line-74)">pep440,semver,semver2</text><text class="terminal-509574676-r2" x="500.2" y="1825.6" textLength="12.2" clip-path="url(#terminal-509574676-line-74)">}</text><text class="terminal-509574676-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-509574676-line-74)"> -</text><text class="terminal-509574676-r1" x="0" y="1850" textLength="549" clip-path="url(#terminal-509574676-line-75)">                        choose version scheme</text><text class="terminal-509574676-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-509574676-line-75)"> -</text><text class="terminal-509574676-r1" x="0" y="1874.4" textLength="207.4" clip-path="url(#terminal-509574676-line-76)">  --version-type </text><text class="terminal-509574676-r2" x="207.4" y="1874.4" textLength="12.2" clip-path="url(#terminal-509574676-line-76)">{</text><text class="terminal-509574676-r1" x="219.6" y="1874.4" textLength="256.2" clip-path="url(#terminal-509574676-line-76)">pep440,semver,semver2</text><text class="terminal-509574676-r2" x="475.8" y="1874.4" textLength="12.2" clip-path="url(#terminal-509574676-line-76)">}</text><text class="terminal-509574676-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-509574676-line-76)"> -</text><text class="terminal-509574676-r1" x="0" y="1898.8" textLength="683.2" clip-path="url(#terminal-509574676-line-77)">                        Deprecated, use --version-scheme</text><text class="terminal-509574676-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-509574676-line-77)"> -</text><text class="terminal-509574676-r1" x="0" y="1923.2" textLength="402.6" clip-path="url(#terminal-509574676-line-78)">  --build-metadata BUILD_METADATA</text><text class="terminal-509574676-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-509574676-line-78)"> -</text><text class="terminal-509574676-r1" x="0" y="1947.6" textLength="915" clip-path="url(#terminal-509574676-line-79)">                        Add additional build-metadata to the version-number</text><text class="terminal-509574676-r1" x="976" y="1947.6" textLength="12.2" clip-path="url(#terminal-509574676-line-79)"> -</text><text class="terminal-509574676-r1" x="976" y="1972" textLength="12.2" clip-path="url(#terminal-509574676-line-80)"> + <g class="terminal-440648439-matrix"> + <text class="terminal-440648439-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-440648439-line-0)">$ cz bump --help</text><text class="terminal-440648439-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-440648439-line-0)"> +</text><text class="terminal-440648439-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-440648439-line-1)">usage: cz bump </text><text class="terminal-440648439-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">[</text><text class="terminal-440648439-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-440648439-line-1)">-h</text><text class="terminal-440648439-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">]</text><text class="terminal-440648439-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">[</text><text class="terminal-440648439-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-440648439-line-1)">--dry-run</text><text class="terminal-440648439-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">]</text><text class="terminal-440648439-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">[</text><text class="terminal-440648439-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-440648439-line-1)">--files-only</text><text class="terminal-440648439-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">]</text><text class="terminal-440648439-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">[</text><text class="terminal-440648439-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-440648439-line-1)">--local-version</text><text class="terminal-440648439-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">]</text><text class="terminal-440648439-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">[</text><text class="terminal-440648439-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-440648439-line-1)">--changelog</text><text class="terminal-440648439-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">]</text><text class="terminal-440648439-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)"> +</text><text class="terminal-440648439-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)">[</text><text class="terminal-440648439-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-440648439-line-2)">--no-verify</text><text class="terminal-440648439-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)">]</text><text class="terminal-440648439-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)">[</text><text class="terminal-440648439-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-440648439-line-2)">--yes</text><text class="terminal-440648439-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)">]</text><text class="terminal-440648439-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)">[</text><text class="terminal-440648439-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-440648439-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-440648439-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)">]</text><text class="terminal-440648439-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)"> +</text><text class="terminal-440648439-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)">[</text><text class="terminal-440648439-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-440648439-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-440648439-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)">]</text><text class="terminal-440648439-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)">[</text><text class="terminal-440648439-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-440648439-line-3)">--prerelease </text><text class="terminal-440648439-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)">{</text><text class="terminal-440648439-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-440648439-line-3)">alpha,beta,rc</text><text class="terminal-440648439-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)">}</text><text class="terminal-440648439-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)">]</text><text class="terminal-440648439-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)"> +</text><text class="terminal-440648439-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)">[</text><text class="terminal-440648439-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-440648439-line-4)">--devrelease DEVRELEASE</text><text class="terminal-440648439-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)">]</text><text class="terminal-440648439-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)">[</text><text class="terminal-440648439-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-440648439-line-4)">--increment </text><text class="terminal-440648439-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)">{</text><text class="terminal-440648439-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-440648439-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-440648439-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)">}</text><text class="terminal-440648439-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)">]</text><text class="terminal-440648439-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)"> +</text><text class="terminal-440648439-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)">[</text><text class="terminal-440648439-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-440648439-line-5)">--increment-mode </text><text class="terminal-440648439-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)">{</text><text class="terminal-440648439-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-440648439-line-5)">linear,exact</text><text class="terminal-440648439-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)">}</text><text class="terminal-440648439-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)">]</text><text class="terminal-440648439-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)">[</text><text class="terminal-440648439-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-440648439-line-5)">--check-consistency</text><text class="terminal-440648439-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)">]</text><text class="terminal-440648439-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)"> +</text><text class="terminal-440648439-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-440648439-line-6)">[</text><text class="terminal-440648439-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-440648439-line-6)">--annotated-tag</text><text class="terminal-440648439-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-440648439-line-6)">]</text><text class="terminal-440648439-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-440648439-line-6)"> +</text><text class="terminal-440648439-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-440648439-line-7)">[</text><text class="terminal-440648439-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-440648439-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-440648439-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-440648439-line-7)">]</text><text class="terminal-440648439-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-440648439-line-7)">[</text><text class="terminal-440648439-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-440648439-line-7)">--gpg-sign</text><text class="terminal-440648439-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-440648439-line-7)">]</text><text class="terminal-440648439-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-440648439-line-7)"> +</text><text class="terminal-440648439-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)">[</text><text class="terminal-440648439-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-440648439-line-8)">--changelog-to-stdout</text><text class="terminal-440648439-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)">]</text><text class="terminal-440648439-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)">[</text><text class="terminal-440648439-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-440648439-line-8)">--git-output-to-stderr</text><text class="terminal-440648439-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)">]</text><text class="terminal-440648439-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)">[</text><text class="terminal-440648439-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-440648439-line-8)">--retry</text><text class="terminal-440648439-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)">]</text><text class="terminal-440648439-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)"> +</text><text class="terminal-440648439-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)">[</text><text class="terminal-440648439-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-440648439-line-9)">--major-version-zero</text><text class="terminal-440648439-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)">]</text><text class="terminal-440648439-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)">[</text><text class="terminal-440648439-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-440648439-line-9)">--template TEMPLATE</text><text class="terminal-440648439-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)">]</text><text class="terminal-440648439-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)">[</text><text class="terminal-440648439-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-440648439-line-9)">--extra EXTRA</text><text class="terminal-440648439-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)">]</text><text class="terminal-440648439-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)"> +</text><text class="terminal-440648439-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-440648439-line-10)">[</text><text class="terminal-440648439-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-440648439-line-10)">--file-name FILE_NAME</text><text class="terminal-440648439-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-440648439-line-10)">]</text><text class="terminal-440648439-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-440648439-line-10)">[</text><text class="terminal-440648439-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-440648439-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-440648439-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-440648439-line-10)">]</text><text class="terminal-440648439-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-440648439-line-10)"> +</text><text class="terminal-440648439-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-440648439-line-11)">[</text><text class="terminal-440648439-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-440648439-line-11)">--version-scheme </text><text class="terminal-440648439-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-440648439-line-11)">{</text><text class="terminal-440648439-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-440648439-line-11)">pep440,semver,semver2</text><text class="terminal-440648439-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-440648439-line-11)">}</text><text class="terminal-440648439-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-440648439-line-11)">]</text><text class="terminal-440648439-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-440648439-line-11)"> +</text><text class="terminal-440648439-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-440648439-line-12)">[</text><text class="terminal-440648439-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-440648439-line-12)">--version-type </text><text class="terminal-440648439-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-440648439-line-12)">{</text><text class="terminal-440648439-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-440648439-line-12)">pep440,semver,semver2</text><text class="terminal-440648439-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-440648439-line-12)">}</text><text class="terminal-440648439-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-440648439-line-12)">]</text><text class="terminal-440648439-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-440648439-line-12)"> +</text><text class="terminal-440648439-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-440648439-line-13)">[</text><text class="terminal-440648439-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-440648439-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-440648439-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-440648439-line-13)">]</text><text class="terminal-440648439-r2" x="597.8" y="337.2" textLength="12.2" clip-path="url(#terminal-440648439-line-13)">[</text><text class="terminal-440648439-r1" x="610" y="337.2" textLength="122" clip-path="url(#terminal-440648439-line-13)">--get-next</text><text class="terminal-440648439-r2" x="732" y="337.2" textLength="12.2" clip-path="url(#terminal-440648439-line-13)">]</text><text class="terminal-440648439-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-440648439-line-13)"> +</text><text class="terminal-440648439-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-440648439-line-14)">[</text><text class="terminal-440648439-r1" x="195.2" y="361.6" textLength="170.8" clip-path="url(#terminal-440648439-line-14)">MANUAL_VERSION</text><text class="terminal-440648439-r2" x="366" y="361.6" textLength="12.2" clip-path="url(#terminal-440648439-line-14)">]</text><text class="terminal-440648439-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-440648439-line-14)"> +</text><text class="terminal-440648439-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-440648439-line-15)"> +</text><text class="terminal-440648439-r1" x="0" y="410.4" textLength="512.4" clip-path="url(#terminal-440648439-line-16)">bump semantic version based on the git log</text><text class="terminal-440648439-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-440648439-line-16)"> +</text><text class="terminal-440648439-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-440648439-line-17)"> +</text><text class="terminal-440648439-r1" x="0" y="459.2" textLength="256.2" clip-path="url(#terminal-440648439-line-18)">positional arguments:</text><text class="terminal-440648439-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-440648439-line-18)"> +</text><text class="terminal-440648439-r1" x="0" y="483.6" textLength="610" clip-path="url(#terminal-440648439-line-19)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-440648439-r2" x="610" y="483.6" textLength="12.2" clip-path="url(#terminal-440648439-line-19)">(</text><text class="terminal-440648439-r1" x="622.2" y="483.6" textLength="61" clip-path="url(#terminal-440648439-line-19)">e.g: </text><text class="terminal-440648439-r3" x="683.2" y="483.6" textLength="36.6" clip-path="url(#terminal-440648439-line-19)">1.5</text><text class="terminal-440648439-r1" x="719.8" y="483.6" textLength="12.2" clip-path="url(#terminal-440648439-line-19)">.</text><text class="terminal-440648439-r3" x="732" y="483.6" textLength="12.2" clip-path="url(#terminal-440648439-line-19)">3</text><text class="terminal-440648439-r2" x="744.2" y="483.6" textLength="12.2" clip-path="url(#terminal-440648439-line-19)">)</text><text class="terminal-440648439-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-440648439-line-19)"> +</text><text class="terminal-440648439-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-440648439-line-20)"> +</text><text class="terminal-440648439-r1" x="0" y="532.4" textLength="97.6" clip-path="url(#terminal-440648439-line-21)">options:</text><text class="terminal-440648439-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-440648439-line-21)"> +</text><text class="terminal-440648439-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-440648439-line-22)">  -h, --help            show this help message and exit</text><text class="terminal-440648439-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-440648439-line-22)"> +</text><text class="terminal-440648439-r1" x="0" y="581.2" textLength="915" clip-path="url(#terminal-440648439-line-23)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-440648439-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-440648439-line-23)"> +</text><text class="terminal-440648439-r1" x="0" y="605.6" textLength="793" clip-path="url(#terminal-440648439-line-24)">  --files-only          bump version in the files from the config</text><text class="terminal-440648439-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-440648439-line-24)"> +</text><text class="terminal-440648439-r1" x="0" y="630" textLength="719.8" clip-path="url(#terminal-440648439-line-25)">  --local-version       bump only the local version portion</text><text class="terminal-440648439-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-440648439-line-25)"> +</text><text class="terminal-440648439-r1" x="0" y="654.4" textLength="841.8" clip-path="url(#terminal-440648439-line-26)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-440648439-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-440648439-line-26)"> +</text><text class="terminal-440648439-r1" x="0" y="678.8" textLength="902.8" clip-path="url(#terminal-440648439-line-27)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-440648439-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-440648439-line-27)"> +</text><text class="terminal-440648439-r1" x="0" y="703.2" textLength="353.8" clip-path="url(#terminal-440648439-line-28)">                        hooks</text><text class="terminal-440648439-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-440648439-line-28)"> +</text><text class="terminal-440648439-r1" x="0" y="727.6" textLength="719.8" clip-path="url(#terminal-440648439-line-29)">  --yes                 accept automatically questions done</text><text class="terminal-440648439-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-440648439-line-29)"> +</text><text class="terminal-440648439-r1" x="0" y="752" textLength="305" clip-path="url(#terminal-440648439-line-30)">  --tag-format TAG_FORMAT</text><text class="terminal-440648439-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-440648439-line-30)"> +</text><text class="terminal-440648439-r1" x="0" y="776.4" textLength="939.4" clip-path="url(#terminal-440648439-line-31)">                        the format used to tag the commit and read it, use it</text><text class="terminal-440648439-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-440648439-line-31)"> +</text><text class="terminal-440648439-r1" x="0" y="800.8" textLength="866.2" clip-path="url(#terminal-440648439-line-32)">                        in existing projects, wrap around simple quotes</text><text class="terminal-440648439-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-440648439-line-32)"> +</text><text class="terminal-440648439-r1" x="0" y="825.2" textLength="353.8" clip-path="url(#terminal-440648439-line-33)">  --bump-message BUMP_MESSAGE</text><text class="terminal-440648439-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-440648439-line-33)"> +</text><text class="terminal-440648439-r1" x="0" y="849.6" textLength="902.8" clip-path="url(#terminal-440648439-line-34)">                        template used to create the release commit, useful</text><text class="terminal-440648439-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-440648439-line-34)"> +</text><text class="terminal-440648439-r1" x="0" y="874" textLength="536.8" clip-path="url(#terminal-440648439-line-35)">                        when working with CI</text><text class="terminal-440648439-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-440648439-line-35)"> +</text><text class="terminal-440648439-r1" x="0" y="898.4" textLength="183" clip-path="url(#terminal-440648439-line-36)">  --prerelease </text><text class="terminal-440648439-r2" x="183" y="898.4" textLength="12.2" clip-path="url(#terminal-440648439-line-36)">{</text><text class="terminal-440648439-r1" x="195.2" y="898.4" textLength="158.6" clip-path="url(#terminal-440648439-line-36)">alpha,beta,rc</text><text class="terminal-440648439-r2" x="353.8" y="898.4" textLength="12.2" clip-path="url(#terminal-440648439-line-36)">}</text><text class="terminal-440648439-r1" x="366" y="898.4" textLength="73.2" clip-path="url(#terminal-440648439-line-36)">, -pr </text><text class="terminal-440648439-r2" x="439.2" y="898.4" textLength="12.2" clip-path="url(#terminal-440648439-line-36)">{</text><text class="terminal-440648439-r1" x="451.4" y="898.4" textLength="158.6" clip-path="url(#terminal-440648439-line-36)">alpha,beta,rc</text><text class="terminal-440648439-r2" x="610" y="898.4" textLength="12.2" clip-path="url(#terminal-440648439-line-36)">}</text><text class="terminal-440648439-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-440648439-line-36)"> +</text><text class="terminal-440648439-r1" x="0" y="922.8" textLength="597.8" clip-path="url(#terminal-440648439-line-37)">                        choose type of prerelease</text><text class="terminal-440648439-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-440648439-line-37)"> +</text><text class="terminal-440648439-r1" x="0" y="947.2" textLength="488" clip-path="url(#terminal-440648439-line-38)">  --devrelease DEVRELEASE, -d DEVRELEASE</text><text class="terminal-440648439-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-440648439-line-38)"> +</text><text class="terminal-440648439-r1" x="0" y="971.6" textLength="841.8" clip-path="url(#terminal-440648439-line-39)">                        specify non-negative integer for dev. release</text><text class="terminal-440648439-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-440648439-line-39)"> +</text><text class="terminal-440648439-r1" x="0" y="996" textLength="170.8" clip-path="url(#terminal-440648439-line-40)">  --increment </text><text class="terminal-440648439-r2" x="170.8" y="996" textLength="12.2" clip-path="url(#terminal-440648439-line-40)">{</text><text class="terminal-440648439-r1" x="183" y="996" textLength="207.4" clip-path="url(#terminal-440648439-line-40)">MAJOR,MINOR,PATCH</text><text class="terminal-440648439-r2" x="390.4" y="996" textLength="12.2" clip-path="url(#terminal-440648439-line-40)">}</text><text class="terminal-440648439-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-440648439-line-40)"> +</text><text class="terminal-440648439-r1" x="0" y="1020.4" textLength="756.4" clip-path="url(#terminal-440648439-line-41)">                        manually specify the desired increment</text><text class="terminal-440648439-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-440648439-line-41)"> +</text><text class="terminal-440648439-r1" x="0" y="1044.8" textLength="231.8" clip-path="url(#terminal-440648439-line-42)">  --increment-mode </text><text class="terminal-440648439-r2" x="231.8" y="1044.8" textLength="12.2" clip-path="url(#terminal-440648439-line-42)">{</text><text class="terminal-440648439-r1" x="244" y="1044.8" textLength="146.4" clip-path="url(#terminal-440648439-line-42)">linear,exact</text><text class="terminal-440648439-r2" x="390.4" y="1044.8" textLength="12.2" clip-path="url(#terminal-440648439-line-42)">}</text><text class="terminal-440648439-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-440648439-line-42)"> +</text><text class="terminal-440648439-r1" x="0" y="1069.2" textLength="902.8" clip-path="url(#terminal-440648439-line-43)">                        set the method by which the new version is chosen.</text><text class="terminal-440648439-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-440648439-line-43)"> +</text><text class="terminal-440648439-r4" x="292.8" y="1093.6" textLength="97.6" clip-path="url(#terminal-440648439-line-44)">'linear'</text><text class="terminal-440648439-r2" x="402.6" y="1093.6" textLength="12.2" clip-path="url(#terminal-440648439-line-44)">(</text><text class="terminal-440648439-r1" x="414.8" y="1093.6" textLength="85.4" clip-path="url(#terminal-440648439-line-44)">default</text><text class="terminal-440648439-r2" x="500.2" y="1093.6" textLength="12.2" clip-path="url(#terminal-440648439-line-44)">)</text><text class="terminal-440648439-r1" x="512.4" y="1093.6" textLength="414.8" clip-path="url(#terminal-440648439-line-44)"> guesses the next version based on</text><text class="terminal-440648439-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-440648439-line-44)"> +</text><text class="terminal-440648439-r1" x="0" y="1118" textLength="939.4" clip-path="url(#terminal-440648439-line-45)">                        typical linear version progression, such that bumping</text><text class="terminal-440648439-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-440648439-line-45)"> +</text><text class="terminal-440648439-r1" x="0" y="1142.4" textLength="866.2" clip-path="url(#terminal-440648439-line-46)">                        of a pre-release with lower precedence than the</text><text class="terminal-440648439-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-440648439-line-46)"> +</text><text class="terminal-440648439-r1" x="0" y="1166.8" textLength="939.4" clip-path="url(#terminal-440648439-line-47)">                        current pre-release phase maintains the current phase</text><text class="terminal-440648439-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-440648439-line-47)"> +</text><text class="terminal-440648439-r1" x="0" y="1191.2" textLength="561.2" clip-path="url(#terminal-440648439-line-48)">                        of higher precedence. </text><text class="terminal-440648439-r4" x="561.2" y="1191.2" textLength="85.4" clip-path="url(#terminal-440648439-line-48)">'exact'</text><text class="terminal-440648439-r1" x="646.6" y="1191.2" textLength="305" clip-path="url(#terminal-440648439-line-48)"> applies the changes that</text><text class="terminal-440648439-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-440648439-line-48)"> +</text><text class="terminal-440648439-r1" x="0" y="1215.6" textLength="536.8" clip-path="url(#terminal-440648439-line-49)">                        have been specified </text><text class="terminal-440648439-r2" x="536.8" y="1215.6" textLength="12.2" clip-path="url(#terminal-440648439-line-49)">(</text><text class="terminal-440648439-r1" x="549" y="1215.6" textLength="353.8" clip-path="url(#terminal-440648439-line-49)">or determined from the commit</text><text class="terminal-440648439-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-440648439-line-49)"> +</text><text class="terminal-440648439-r1" x="0" y="1240" textLength="329.4" clip-path="url(#terminal-440648439-line-50)">                        log</text><text class="terminal-440648439-r2" x="329.4" y="1240" textLength="12.2" clip-path="url(#terminal-440648439-line-50)">)</text><text class="terminal-440648439-r1" x="341.6" y="1240" textLength="585.6" clip-path="url(#terminal-440648439-line-50)"> without interpretation, such that the increment</text><text class="terminal-440648439-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-440648439-line-50)"> +</text><text class="terminal-440648439-r1" x="0" y="1264.4" textLength="707.6" clip-path="url(#terminal-440648439-line-51)">                        and pre-release are always honored</text><text class="terminal-440648439-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-440648439-line-51)"> +</text><text class="terminal-440648439-r1" x="0" y="1288.8" textLength="317.2" clip-path="url(#terminal-440648439-line-52)">  --check-consistency, -cc</text><text class="terminal-440648439-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-440648439-line-52)"> +</text><text class="terminal-440648439-r1" x="0" y="1313.2" textLength="951.6" clip-path="url(#terminal-440648439-line-53)">                        check consistency among versions defined in commitizen</text><text class="terminal-440648439-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-440648439-line-53)"> +</text><text class="terminal-440648439-r1" x="0" y="1337.6" textLength="671" clip-path="url(#terminal-440648439-line-54)">                        configuration and version_files</text><text class="terminal-440648439-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-440648439-line-54)"> +</text><text class="terminal-440648439-r1" x="0" y="1362" textLength="866.2" clip-path="url(#terminal-440648439-line-55)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-440648439-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-440648439-line-55)"> +</text><text class="terminal-440648439-r1" x="0" y="1386.4" textLength="915" clip-path="url(#terminal-440648439-line-56)">  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-440648439-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-440648439-line-56)"> +</text><text class="terminal-440648439-r1" x="0" y="1410.8" textLength="634.4" clip-path="url(#terminal-440648439-line-57)">                        create annotated tag message</text><text class="terminal-440648439-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-440648439-line-57)"> +</text><text class="terminal-440648439-r1" x="0" y="1435.2" textLength="719.8" clip-path="url(#terminal-440648439-line-58)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-440648439-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-440648439-line-58)"> +</text><text class="terminal-440648439-r1" x="0" y="1459.6" textLength="280.6" clip-path="url(#terminal-440648439-line-59)">  --changelog-to-stdout</text><text class="terminal-440648439-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-440648439-line-59)"> +</text><text class="terminal-440648439-r1" x="0" y="1484" textLength="658.8" clip-path="url(#terminal-440648439-line-60)">                        Output changelog to the stdout</text><text class="terminal-440648439-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-440648439-line-60)"> +</text><text class="terminal-440648439-r1" x="0" y="1508.4" textLength="292.8" clip-path="url(#terminal-440648439-line-61)">  --git-output-to-stderr</text><text class="terminal-440648439-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-440648439-line-61)"> +</text><text class="terminal-440648439-r1" x="0" y="1532.8" textLength="646.6" clip-path="url(#terminal-440648439-line-62)">                        Redirect git output to stderr</text><text class="terminal-440648439-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-440648439-line-62)"> +</text><text class="terminal-440648439-r1" x="0" y="1557.2" textLength="744.2" clip-path="url(#terminal-440648439-line-63)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-440648439-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-440648439-line-63)"> +</text><text class="terminal-440648439-r1" x="0" y="1581.6" textLength="939.4" clip-path="url(#terminal-440648439-line-64)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-440648439-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-440648439-line-64)"> +</text><text class="terminal-440648439-r1" x="0" y="1606" textLength="414.8" clip-path="url(#terminal-440648439-line-65)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-440648439-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-440648439-line-65)"> +</text><text class="terminal-440648439-r1" x="0" y="1630.4" textLength="646.6" clip-path="url(#terminal-440648439-line-66)">                        changelog template file name </text><text class="terminal-440648439-r2" x="646.6" y="1630.4" textLength="12.2" clip-path="url(#terminal-440648439-line-66)">(</text><text class="terminal-440648439-r1" x="658.8" y="1630.4" textLength="280.6" clip-path="url(#terminal-440648439-line-66)">relative to the current</text><text class="terminal-440648439-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-440648439-line-66)"> +</text><text class="terminal-440648439-r1" x="0" y="1654.8" textLength="500.2" clip-path="url(#terminal-440648439-line-67)">                        working directory</text><text class="terminal-440648439-r2" x="500.2" y="1654.8" textLength="12.2" clip-path="url(#terminal-440648439-line-67)">)</text><text class="terminal-440648439-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-440648439-line-67)"> +</text><text class="terminal-440648439-r1" x="0" y="1679.2" textLength="305" clip-path="url(#terminal-440648439-line-68)">  --extra EXTRA, -e EXTRA</text><text class="terminal-440648439-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-440648439-line-68)"> +</text><text class="terminal-440648439-r1" x="0" y="1703.6" textLength="622.2" clip-path="url(#terminal-440648439-line-69)">                        a changelog extra variable </text><text class="terminal-440648439-r2" x="622.2" y="1703.6" textLength="12.2" clip-path="url(#terminal-440648439-line-69)">(</text><text class="terminal-440648439-r1" x="634.4" y="1703.6" textLength="146.4" clip-path="url(#terminal-440648439-line-69)">in the form </text><text class="terminal-440648439-r4" x="780.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-440648439-line-69)">'</text><text class="terminal-440648439-r4" x="793" y="1703.6" textLength="36.6" clip-path="url(#terminal-440648439-line-69)">key</text><text class="terminal-440648439-r4" x="829.6" y="1703.6" textLength="12.2" clip-path="url(#terminal-440648439-line-69)">=</text><text class="terminal-440648439-r4" x="841.8" y="1703.6" textLength="61" clip-path="url(#terminal-440648439-line-69)">value</text><text class="terminal-440648439-r4" x="902.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-440648439-line-69)">'</text><text class="terminal-440648439-r2" x="915" y="1703.6" textLength="12.2" clip-path="url(#terminal-440648439-line-69)">)</text><text class="terminal-440648439-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-440648439-line-69)"> +</text><text class="terminal-440648439-r1" x="0" y="1728" textLength="280.6" clip-path="url(#terminal-440648439-line-70)">  --file-name FILE_NAME</text><text class="terminal-440648439-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-440648439-line-70)"> +</text><text class="terminal-440648439-r1" x="0" y="1752.4" textLength="573.4" clip-path="url(#terminal-440648439-line-71)">                        file name of changelog </text><text class="terminal-440648439-r2" x="573.4" y="1752.4" textLength="12.2" clip-path="url(#terminal-440648439-line-71)">(</text><text class="terminal-440648439-r1" x="585.6" y="1752.4" textLength="109.8" clip-path="url(#terminal-440648439-line-71)">default: </text><text class="terminal-440648439-r4" x="695.4" y="1752.4" textLength="170.8" clip-path="url(#terminal-440648439-line-71)">'CHANGELOG.md'</text><text class="terminal-440648439-r2" x="866.2" y="1752.4" textLength="12.2" clip-path="url(#terminal-440648439-line-71)">)</text><text class="terminal-440648439-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-440648439-line-71)"> +</text><text class="terminal-440648439-r1" x="0" y="1776.8" textLength="475.8" clip-path="url(#terminal-440648439-line-72)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-440648439-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-440648439-line-72)"> +</text><text class="terminal-440648439-r1" x="0" y="1801.2" textLength="719.8" clip-path="url(#terminal-440648439-line-73)">                        start pre-releases with this offset</text><text class="terminal-440648439-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-440648439-line-73)"> +</text><text class="terminal-440648439-r1" x="0" y="1825.6" textLength="231.8" clip-path="url(#terminal-440648439-line-74)">  --version-scheme </text><text class="terminal-440648439-r2" x="231.8" y="1825.6" textLength="12.2" clip-path="url(#terminal-440648439-line-74)">{</text><text class="terminal-440648439-r1" x="244" y="1825.6" textLength="256.2" clip-path="url(#terminal-440648439-line-74)">pep440,semver,semver2</text><text class="terminal-440648439-r2" x="500.2" y="1825.6" textLength="12.2" clip-path="url(#terminal-440648439-line-74)">}</text><text class="terminal-440648439-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-440648439-line-74)"> +</text><text class="terminal-440648439-r1" x="0" y="1850" textLength="549" clip-path="url(#terminal-440648439-line-75)">                        choose version scheme</text><text class="terminal-440648439-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-440648439-line-75)"> +</text><text class="terminal-440648439-r1" x="0" y="1874.4" textLength="207.4" clip-path="url(#terminal-440648439-line-76)">  --version-type </text><text class="terminal-440648439-r2" x="207.4" y="1874.4" textLength="12.2" clip-path="url(#terminal-440648439-line-76)">{</text><text class="terminal-440648439-r1" x="219.6" y="1874.4" textLength="256.2" clip-path="url(#terminal-440648439-line-76)">pep440,semver,semver2</text><text class="terminal-440648439-r2" x="475.8" y="1874.4" textLength="12.2" clip-path="url(#terminal-440648439-line-76)">}</text><text class="terminal-440648439-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-440648439-line-76)"> +</text><text class="terminal-440648439-r1" x="0" y="1898.8" textLength="683.2" clip-path="url(#terminal-440648439-line-77)">                        Deprecated, use --version-scheme</text><text class="terminal-440648439-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-440648439-line-77)"> +</text><text class="terminal-440648439-r1" x="0" y="1923.2" textLength="402.6" clip-path="url(#terminal-440648439-line-78)">  --build-metadata BUILD_METADATA</text><text class="terminal-440648439-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-440648439-line-78)"> +</text><text class="terminal-440648439-r1" x="0" y="1947.6" textLength="915" clip-path="url(#terminal-440648439-line-79)">                        Add additional build-metadata to the version-number</text><text class="terminal-440648439-r1" x="976" y="1947.6" textLength="12.2" clip-path="url(#terminal-440648439-line-79)"> +</text><text class="terminal-440648439-r1" x="0" y="1972" textLength="854" clip-path="url(#terminal-440648439-line-80)">  --get-next            Determine the next version and write to stdout</text><text class="terminal-440648439-r1" x="976" y="1972" textLength="12.2" clip-path="url(#terminal-440648439-line-80)"> +</text><text class="terminal-440648439-r1" x="976" y="1996.4" textLength="12.2" clip-path="url(#terminal-440648439-line-81)"> </text> </g> </g> From 6a01e9734440d24dfcd4cee66ccee924cf72370f Mon Sep 17 00:00:00 2001 From: Jakob Keller <57402305+jakob-keller@users.noreply.github.com> Date: Wed, 26 Jun 2024 21:52:35 +0200 Subject: [PATCH 336/685] ci(github-actions): add "3.13-dev" to Python tests (#1145) --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 3b5d5305a3..f0a517686f 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -6,7 +6,7 @@ jobs: python-check: strategy: matrix: - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13-dev"] platform: [ubuntu-20.04, macos-latest, windows-latest] runs-on: ${{ matrix.platform }} steps: From 8335f6bb1746ffef1e1702ed89b5440c7e3cfa12 Mon Sep 17 00:00:00 2001 From: Jakob Keller <57402305+jakob-keller@users.noreply.github.com> Date: Thu, 8 Aug 2024 23:17:44 +0200 Subject: [PATCH 337/685] test: fix typo --- tests/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/utils.py b/tests/utils.py index 971ff91820..efd3c38570 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -12,7 +12,7 @@ skip_below_py_3_10 = pytest.mark.skipif( sys.version_info < (3, 10), - reason="The output meesage of argparse is different between Python 3.10 and lower than Python 3.10", + reason="The output message of argparse is different between Python 3.10 and lower than Python 3.10", ) From b06c8b603b079d5a397b3036cf617e28c8eb8702 Mon Sep 17 00:00:00 2001 From: Jakob Keller <57402305+jakob-keller@users.noreply.github.com> Date: Thu, 8 Aug 2024 23:26:01 +0200 Subject: [PATCH 338/685] test: update tests with less redundant output generated by argparse --help in Python 3.13 --- tests/commands/test_bump_command.py | 4 ++-- ...command_shows_description_when_use_help_option.txt | 11 +++++------ tests/commands/test_changelog_command.py | 4 ++-- ...command_shows_description_when_use_help_option.txt | 5 ++--- tests/commands/test_check_command.py | 4 ++-- ...command_shows_description_when_use_help_option.txt | 4 ++-- tests/commands/test_commit_command.py | 4 ++-- ...command_shows_description_when_use_help_option.txt | 2 +- tests/utils.py | 5 +++++ 9 files changed, 23 insertions(+), 20 deletions(-) diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 90bca62070..81273764dd 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -30,7 +30,7 @@ NotAllowed, NoVersionSpecifiedError, ) -from tests.utils import create_file_and_commit, create_tag, skip_below_py_3_10 +from tests.utils import create_file_and_commit, create_tag, skip_below_py_3_13 @pytest.mark.parametrize( @@ -1452,7 +1452,7 @@ def test_bump_changelog_contains_increment_only(mocker, tmp_commitizen_project, assert "2.0.0" not in out -@skip_below_py_3_10 +@skip_below_py_3_13 def test_bump_command_shows_description_when_use_help_option( mocker: MockFixture, capsys, file_regression ): diff --git a/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt b/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt index 7c3f8ac805..ab73bd4491 100644 --- a/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt @@ -33,9 +33,9 @@ options: --bump-message BUMP_MESSAGE template used to create the release commit, useful when working with CI - --prerelease {alpha,beta,rc}, -pr {alpha,beta,rc} + --prerelease, -pr {alpha,beta,rc} choose type of prerelease - --devrelease DEVRELEASE, -d DEVRELEASE + --devrelease, -d DEVRELEASE specify non-negative integer for dev. release --increment {MAJOR,MINOR,PATCH} manually specify the desired increment @@ -53,7 +53,7 @@ options: check consistency among versions defined in commitizen configuration and version_files --annotated-tag, -at create annotated tag instead of lightweight one - --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE + --annotated-tag-message, -atm ANNOTATED_TAG_MESSAGE create annotated tag message --gpg-sign, -s sign tag instead of lightweight one --changelog-to-stdout @@ -62,11 +62,10 @@ options: Redirect git output to stderr --retry retry commit if it fails the 1st time --major-version-zero keep major version at zero, even for breaking changes - --template TEMPLATE, -t TEMPLATE + --template, -t TEMPLATE changelog template file name (relative to the current working directory) - --extra EXTRA, -e EXTRA - a changelog extra variable (in the form 'key=value') + --extra, -e EXTRA a changelog extra variable (in the form 'key=value') --file-name FILE_NAME file name of changelog (default: 'CHANGELOG.md') --prerelease-offset PRERELEASE_OFFSET diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index 4694d33305..3d9a5c5c48 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -29,7 +29,7 @@ create_tag, get_current_branch, merge_branch, - skip_below_py_3_10, + skip_below_py_3_13, switch_branch, wait_for_tag, ) @@ -1640,7 +1640,7 @@ def test_export_changelog_template_from_plugin( assert target.read_text() == tpl -@skip_below_py_3_10 +@skip_below_py_3_13 def test_changelog_command_shows_description_when_use_help_option( mocker: MockFixture, capsys, file_regression ): diff --git a/tests/commands/test_changelog_command/test_changelog_command_shows_description_when_use_help_option.txt b/tests/commands/test_changelog_command/test_changelog_command_shows_description_when_use_help_option.txt index dae438ca24..461eb2edd6 100644 --- a/tests/commands/test_changelog_command/test_changelog_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_changelog_command/test_changelog_command_shows_description_when_use_help_option.txt @@ -33,8 +33,7 @@ options: --export-template EXPORT_TEMPLATE Export the changelog template into this file instead of rendering it - --template TEMPLATE, -t TEMPLATE + --template, -t TEMPLATE changelog template file name (relative to the current working directory) - --extra EXTRA, -e EXTRA - a changelog extra variable (in the form 'key=value') + --extra, -e EXTRA a changelog extra variable (in the form 'key=value') diff --git a/tests/commands/test_check_command.py b/tests/commands/test_check_command.py index 328ebd78a9..57bfe3f10a 100644 --- a/tests/commands/test_check_command.py +++ b/tests/commands/test_check_command.py @@ -12,7 +12,7 @@ InvalidCommitMessageError, NoCommitsFoundError, ) -from tests.utils import create_file_and_commit, skip_below_py_3_10 +from tests.utils import create_file_and_commit, skip_below_py_3_13 COMMIT_LOG = [ "refactor: A code change that neither fixes a bug nor adds a feature", @@ -416,7 +416,7 @@ def test_check_conventional_commit_succeed_with_git_diff(mocker, capsys): assert "Commit validation: successful!" in out -@skip_below_py_3_10 +@skip_below_py_3_13 def test_check_command_shows_description_when_use_help_option( mocker: MockFixture, capsys, file_regression ): diff --git a/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt b/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt index 74b9df7196..2ccf97270e 100644 --- a/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt @@ -13,7 +13,7 @@ options: MSG_FILE=$1 --rev-range REV_RANGE a range of git rev to check. e.g, master..HEAD - -m MESSAGE, --message MESSAGE + -m, --message MESSAGE commit message that needs to be checked --allow-abort allow empty commit messages, which typically abort a commit @@ -21,5 +21,5 @@ options: allowed commit message prefixes. If the message starts by one of these prefixes, the message won't be checked against the regex - -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT + -l, --message-length-limit MESSAGE_LENGTH_LIMIT length limit of the commit message; 0 for no limit diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index 8ae7568a9d..03ff51c42c 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -19,7 +19,7 @@ NotAllowed, NothingToCommitError, ) -from tests.utils import skip_below_py_3_10 +from tests.utils import skip_below_py_3_13 @pytest.fixture @@ -410,7 +410,7 @@ def test_commit_command_with_message_length_limit(config, mocker: MockFixture): commands.Commit(config, {"message_length_limit": message_length - 1})() -@skip_below_py_3_10 +@skip_below_py_3_13 def test_commit_command_shows_description_when_use_help_option( mocker: MockFixture, capsys, file_regression ): diff --git a/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt index ebdb68446e..92f3cf5e87 100644 --- a/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt @@ -16,5 +16,5 @@ options: -a, --all Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected. - -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT + -l, --message-length-limit MESSAGE_LENGTH_LIMIT length limit of the commit message; 0 for no limit diff --git a/tests/utils.py b/tests/utils.py index efd3c38570..5e26b2d70a 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -15,6 +15,11 @@ reason="The output message of argparse is different between Python 3.10 and lower than Python 3.10", ) +skip_below_py_3_13 = pytest.mark.skipif( + sys.version_info < (3, 13), + reason="The output message of argparse is different between Python 3.13 and lower than Python 3.13", +) + class FakeCommand: def __init__(self, out=None, err=None, return_code=0): From 01fd0426677b4db07988103d3a0ebd0d10763886 Mon Sep 17 00:00:00 2001 From: Jakob Keller <57402305+jakob-keller@users.noreply.github.com> Date: Fri, 9 Aug 2024 00:24:53 +0200 Subject: [PATCH 339/685] test: skip test on Python 3.13 due to incompatible pre-commit hook `mirrors-prettier` --- tests/test_bump_create_commit_message.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tests/test_bump_create_commit_message.py b/tests/test_bump_create_commit_message.py index 517c7a0459..0002659396 100644 --- a/tests/test_bump_create_commit_message.py +++ b/tests/test_bump_create_commit_message.py @@ -24,7 +24,19 @@ def test_create_tag(test_input, expected): assert new_tag == expected -@pytest.mark.parametrize("retry", (True, False)) +@pytest.mark.parametrize( + "retry", + ( + pytest.param( + True, + marks=pytest.mark.skipif( + sys.version_info >= (3, 13), + reason="mirrors-prettier is not supported with Python 3.13 or higher", + ), + ), + False, + ), +) @pytest.mark.usefixtures("tmp_commitizen_project") def test_bump_pre_commit_changelog(mocker: MockFixture, freezer, retry): freezer.move_to("2022-04-01") From ac6d5a45d5c400a3e87914b34cebf772627ecbe9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 01:43:52 +0000 Subject: [PATCH 340/685] build(deps): bump tomlkit from 0.13.0 to 0.13.2 Bumps [tomlkit](https://github.com/sdispater/tomlkit) from 0.13.0 to 0.13.2. - [Release notes](https://github.com/sdispater/tomlkit/releases) - [Changelog](https://github.com/python-poetry/tomlkit/blob/master/CHANGELOG.md) - [Commits](https://github.com/sdispater/tomlkit/compare/0.13.0...0.13.2) --- updated-dependencies: - dependency-name: tomlkit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2544df7c0d..147d365c49 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1522,13 +1522,13 @@ files = [ [[package]] name = "tomlkit" -version = "0.13.0" +version = "0.13.2" description = "Style preserving TOML library" optional = false python-versions = ">=3.8" files = [ - {file = "tomlkit-0.13.0-py3-none-any.whl", hash = "sha256:7075d3042d03b80f603482d69bf0c8f345c2b30e41699fd8883227f89972b264"}, - {file = "tomlkit-0.13.0.tar.gz", hash = "sha256:08ad192699734149f5b97b45f1f18dad7eb1b6d16bc72ad0c2335772650d7b72"}, + {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, + {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, ] [[package]] From b39b0676a32777601d8201c8219c2a03570e9c35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 01:21:25 +0000 Subject: [PATCH 341/685] build(deps-dev): bump ruff from 0.5.7 to 0.6.0 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.7 to 0.6.0. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.5.7...0.6.0) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 40 ++++++++++++++++++++-------------------- pyproject.toml | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/poetry.lock b/poetry.lock index 147d365c49..57aa375d6b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1425,29 +1425,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.5.7" +version = "0.6.0" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.7-py3-none-linux_armv6l.whl", hash = "sha256:548992d342fc404ee2e15a242cdbea4f8e39a52f2e7752d0e4cbe88d2d2f416a"}, - {file = "ruff-0.5.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00cc8872331055ee017c4f1071a8a31ca0809ccc0657da1d154a1d2abac5c0be"}, - {file = "ruff-0.5.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf3d86a1fdac1aec8a3417a63587d93f906c678bb9ed0b796da7b59c1114a1e"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a01c34400097b06cf8a6e61b35d6d456d5bd1ae6961542de18ec81eaf33b4cb8"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcc8054f1a717e2213500edaddcf1dbb0abad40d98e1bd9d0ad364f75c763eea"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f70284e73f36558ef51602254451e50dd6cc479f8b6f8413a95fcb5db4a55fc"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a78ad870ae3c460394fc95437d43deb5c04b5c29297815a2a1de028903f19692"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ccd078c66a8e419475174bfe60a69adb36ce04f8d4e91b006f1329d5cd44bcf"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e31c9bad4ebf8fdb77b59cae75814440731060a09a0e0077d559a556453acbb"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d796327eed8e168164346b769dd9a27a70e0298d667b4ecee6877ce8095ec8e"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a09ea2c3f7778cc635e7f6edf57d566a8ee8f485f3c4454db7771efb692c499"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a36d8dcf55b3a3bc353270d544fb170d75d2dff41eba5df57b4e0b67a95bb64e"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9369c218f789eefbd1b8d82a8cf25017b523ac47d96b2f531eba73770971c9e5"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b88ca3db7eb377eb24fb7c82840546fb7acef75af4a74bd36e9ceb37a890257e"}, - {file = "ruff-0.5.7-py3-none-win32.whl", hash = "sha256:33d61fc0e902198a3e55719f4be6b375b28f860b09c281e4bdbf783c0566576a"}, - {file = "ruff-0.5.7-py3-none-win_amd64.whl", hash = "sha256:083bbcbe6fadb93cd86709037acc510f86eed5a314203079df174c40bbbca6b3"}, - {file = "ruff-0.5.7-py3-none-win_arm64.whl", hash = "sha256:2dca26154ff9571995107221d0aeaad0e75a77b5a682d6236cf89a58c70b76f4"}, - {file = "ruff-0.5.7.tar.gz", hash = "sha256:8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5"}, + {file = "ruff-0.6.0-py3-none-linux_armv6l.whl", hash = "sha256:92dcce923e5df265781e5fc76f9a1edad52201a7aafe56e586b90988d5239013"}, + {file = "ruff-0.6.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:31b90ff9dc79ed476c04e957ba7e2b95c3fceb76148f2079d0d68a908d2cfae7"}, + {file = "ruff-0.6.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6d834a9ec9f8287dd6c3297058b3a265ed6b59233db22593379ee38ebc4b9768"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2089267692696aba342179471831a085043f218706e642564812145df8b8d0d"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa62b423ee4bbd8765f2c1dbe8f6aac203e0583993a91453dc0a449d465c84da"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7344e1a964b16b1137ea361d6516ce4ee61a0403fa94252a1913ecc1311adcae"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:487f3a35c3f33bf82be212ce15dc6278ea854e35573a3f809442f73bec8b2760"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75db409984077a793cf344d499165298a6f65449e905747ac65983b12e3e64b1"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84908bd603533ecf1db456d8fc2665d1f4335d722e84bc871d3bbd2d1116c272"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f1749a0aef3ec41ed91a0e2127a6ae97d2e2853af16dbd4f3c00d7a3af726c5"}, + {file = "ruff-0.6.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:016fea751e2bcfbbd2f8cb19b97b37b3fd33148e4df45b526e87096f4e17354f"}, + {file = "ruff-0.6.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6ae80f141b53b2e36e230017e64f5ea2def18fac14334ffceaae1b780d70c4f7"}, + {file = "ruff-0.6.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:eaaaf33ea4b3f63fd264d6a6f4a73fa224bbfda4b438ffea59a5340f4afa2bb5"}, + {file = "ruff-0.6.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7667ddd1fc688150a7ca4137140867584c63309695a30016880caf20831503a0"}, + {file = "ruff-0.6.0-py3-none-win32.whl", hash = "sha256:ae48365aae60d40865a412356f8c6f2c0be1c928591168111eaf07eaefa6bea3"}, + {file = "ruff-0.6.0-py3-none-win_amd64.whl", hash = "sha256:774032b507c96f0c803c8237ce7d2ef3934df208a09c40fa809c2931f957fe5e"}, + {file = "ruff-0.6.0-py3-none-win_arm64.whl", hash = "sha256:a5366e8c3ae6b2dc32821749b532606c42e609a99b0ae1472cf601da931a048c"}, + {file = "ruff-0.6.0.tar.gz", hash = "sha256:272a81830f68f9bd19d49eaf7fa01a5545c5a2e86f32a9935bb0e4bb9a1db5b8"}, ] [[package]] @@ -1787,4 +1787,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "e1f15a3d1a61d77edf402dbb01fd18dbf23d1c39988307356726037da5ad00c4" +content-hash = "67940b1bdb20630081a00248b6a51f093a44a2da76048873c722c97689a2a31c" diff --git a/pyproject.toml b/pyproject.toml index f3574a1826..79c2f849b3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,7 @@ pytest-regressions = "^2.4.0" pytest-freezer = "^0.4.6" pytest-xdist = "^3.1.0" # linter -ruff = ">=0.5.0,<0.6.0" +ruff = ">=0.5.0,<0.7.0" pre-commit = ">=2.18,<4.0" mypy = "^1.4" types-PyYAML = ">=5.4.3,<7.0.0" From f8d66e60e97af4c4d7adcdb6307f44509ff79865 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 01:35:33 +0000 Subject: [PATCH 342/685] build(deps-dev): bump ruff from 0.6.0 to 0.6.1 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.0 to 0.6.1. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.6.0...0.6.1) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 57aa375d6b..0a16298ccb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1425,29 +1425,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.6.0" +version = "0.6.1" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.0-py3-none-linux_armv6l.whl", hash = "sha256:92dcce923e5df265781e5fc76f9a1edad52201a7aafe56e586b90988d5239013"}, - {file = "ruff-0.6.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:31b90ff9dc79ed476c04e957ba7e2b95c3fceb76148f2079d0d68a908d2cfae7"}, - {file = "ruff-0.6.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6d834a9ec9f8287dd6c3297058b3a265ed6b59233db22593379ee38ebc4b9768"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2089267692696aba342179471831a085043f218706e642564812145df8b8d0d"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa62b423ee4bbd8765f2c1dbe8f6aac203e0583993a91453dc0a449d465c84da"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7344e1a964b16b1137ea361d6516ce4ee61a0403fa94252a1913ecc1311adcae"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:487f3a35c3f33bf82be212ce15dc6278ea854e35573a3f809442f73bec8b2760"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75db409984077a793cf344d499165298a6f65449e905747ac65983b12e3e64b1"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84908bd603533ecf1db456d8fc2665d1f4335d722e84bc871d3bbd2d1116c272"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f1749a0aef3ec41ed91a0e2127a6ae97d2e2853af16dbd4f3c00d7a3af726c5"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:016fea751e2bcfbbd2f8cb19b97b37b3fd33148e4df45b526e87096f4e17354f"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6ae80f141b53b2e36e230017e64f5ea2def18fac14334ffceaae1b780d70c4f7"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:eaaaf33ea4b3f63fd264d6a6f4a73fa224bbfda4b438ffea59a5340f4afa2bb5"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7667ddd1fc688150a7ca4137140867584c63309695a30016880caf20831503a0"}, - {file = "ruff-0.6.0-py3-none-win32.whl", hash = "sha256:ae48365aae60d40865a412356f8c6f2c0be1c928591168111eaf07eaefa6bea3"}, - {file = "ruff-0.6.0-py3-none-win_amd64.whl", hash = "sha256:774032b507c96f0c803c8237ce7d2ef3934df208a09c40fa809c2931f957fe5e"}, - {file = "ruff-0.6.0-py3-none-win_arm64.whl", hash = "sha256:a5366e8c3ae6b2dc32821749b532606c42e609a99b0ae1472cf601da931a048c"}, - {file = "ruff-0.6.0.tar.gz", hash = "sha256:272a81830f68f9bd19d49eaf7fa01a5545c5a2e86f32a9935bb0e4bb9a1db5b8"}, + {file = "ruff-0.6.1-py3-none-linux_armv6l.whl", hash = "sha256:b4bb7de6a24169dc023f992718a9417380301b0c2da0fe85919f47264fb8add9"}, + {file = "ruff-0.6.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:45efaae53b360c81043e311cdec8a7696420b3d3e8935202c2846e7a97d4edae"}, + {file = "ruff-0.6.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:bc60c7d71b732c8fa73cf995efc0c836a2fd8b9810e115be8babb24ae87e0850"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c7477c3b9da822e2db0b4e0b59e61b8a23e87886e727b327e7dcaf06213c5cf"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a0af7ab3f86e3dc9f157a928e08e26c4b40707d0612b01cd577cc84b8905cc9"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:392688dbb50fecf1bf7126731c90c11a9df1c3a4cdc3f481b53e851da5634fa5"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5278d3e095ccc8c30430bcc9bc550f778790acc211865520f3041910a28d0024"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe6d5f65d6f276ee7a0fc50a0cecaccb362d30ef98a110f99cac1c7872df2f18"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2e0dd11e2ae553ee5c92a81731d88a9883af8db7408db47fc81887c1f8b672e"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d812615525a34ecfc07fd93f906ef5b93656be01dfae9a819e31caa6cfe758a1"}, + {file = "ruff-0.6.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:faaa4060f4064c3b7aaaa27328080c932fa142786f8142aff095b42b6a2eb631"}, + {file = "ruff-0.6.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:99d7ae0df47c62729d58765c593ea54c2546d5de213f2af2a19442d50a10cec9"}, + {file = "ruff-0.6.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9eb18dfd7b613eec000e3738b3f0e4398bf0153cb80bfa3e351b3c1c2f6d7b15"}, + {file = "ruff-0.6.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c62bc04c6723a81e25e71715aa59489f15034d69bf641df88cb38bdc32fd1dbb"}, + {file = "ruff-0.6.1-py3-none-win32.whl", hash = "sha256:9fb4c4e8b83f19c9477a8745e56d2eeef07a7ff50b68a6998f7d9e2e3887bdc4"}, + {file = "ruff-0.6.1-py3-none-win_amd64.whl", hash = "sha256:c2ebfc8f51ef4aca05dad4552bbcf6fe8d1f75b2f6af546cc47cc1c1ca916b5b"}, + {file = "ruff-0.6.1-py3-none-win_arm64.whl", hash = "sha256:3bc81074971b0ffad1bd0c52284b22411f02a11a012082a76ac6da153536e014"}, + {file = "ruff-0.6.1.tar.gz", hash = "sha256:af3ffd8c6563acb8848d33cd19a69b9bfe943667f0419ca083f8ebe4224a3436"}, ] [[package]] From 44a79f5d3e04610baff4e5591753b20fc75cb985 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 01:19:17 +0000 Subject: [PATCH 343/685] build(deps-dev): bump mkdocs-material from 9.5.31 to 9.5.32 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.31 to 9.5.32. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.31...9.5.32) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0a16298ccb..c474cf6680 100644 --- a/poetry.lock +++ b/poetry.lock @@ -750,13 +750,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.31" +version = "9.5.32" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.31-py3-none-any.whl", hash = "sha256:1b1f49066fdb3824c1e96d6bacd2d4375de4ac74580b47e79ff44c4d835c5fcb"}, - {file = "mkdocs_material-9.5.31.tar.gz", hash = "sha256:31833ec664772669f5856f4f276bf3fdf0e642a445e64491eda459249c3a1ca8"}, + {file = "mkdocs_material-9.5.32-py3-none-any.whl", hash = "sha256:f3704f46b63d31b3cd35c0055a72280bed825786eccaf19c655b44e0cd2c6b3f"}, + {file = "mkdocs_material-9.5.32.tar.gz", hash = "sha256:38ed66e6d6768dde4edde022554553e48b2db0d26d1320b19e2e2b9da0be1120"}, ] [package.dependencies] From 8696fba70fb02bd4b9081cd2e7492c03871f5785 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 01:18:39 +0000 Subject: [PATCH 344/685] build(deps): bump importlib-metadata from 8.2.0 to 8.3.0 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 8.2.0 to 8.3.0. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v8.2.0...v8.3.0) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index c474cf6680..d37a121e27 100644 --- a/poetry.lock +++ b/poetry.lock @@ -450,13 +450,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.2.0" +version = "8.3.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.2.0-py3-none-any.whl", hash = "sha256:11901fa0c2f97919b288679932bb64febaeacf289d18ac84dd68cb2e74213369"}, - {file = "importlib_metadata-8.2.0.tar.gz", hash = "sha256:72e8d4399996132204f9a16dcc751af254a48f8d1b20b9ff0f98d4a8f901e73d"}, + {file = "importlib_metadata-8.3.0-py3-none-any.whl", hash = "sha256:42817a4a0be5845d22c6e212db66a94ad261e2318d80b3e0d363894a79df2b67"}, + {file = "importlib_metadata-8.3.0.tar.gz", hash = "sha256:9c8fa6e8ea0f9516ad5c8db9246a731c948193c7754d3babb0114a05b27dd364"}, ] [package.dependencies] From 1847e1db01e29f5454137fbd6b546420aa9080bc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Aug 2024 01:32:28 +0000 Subject: [PATCH 345/685] build(deps): bump importlib-metadata from 8.3.0 to 8.4.0 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 8.3.0 to 8.4.0. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v8.3.0...v8.4.0) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index d37a121e27..c953605cf2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -450,13 +450,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.3.0" +version = "8.4.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.3.0-py3-none-any.whl", hash = "sha256:42817a4a0be5845d22c6e212db66a94ad261e2318d80b3e0d363894a79df2b67"}, - {file = "importlib_metadata-8.3.0.tar.gz", hash = "sha256:9c8fa6e8ea0f9516ad5c8db9246a731c948193c7754d3babb0114a05b27dd364"}, + {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, + {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, ] [package.dependencies] From 43299877e9210d19f45e8fe1ecfc4e6183eff962 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 01:13:21 +0000 Subject: [PATCH 346/685] build(deps-dev): bump types-python-dateutil Bumps [types-python-dateutil](https://github.com/python/typeshed) from 2.9.0.20240316 to 2.9.0.20240821. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-python-dateutil dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index c953605cf2..46e0de015b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1559,13 +1559,13 @@ files = [ [[package]] name = "types-python-dateutil" -version = "2.9.0.20240316" +version = "2.9.0.20240821" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, - {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, + {file = "types-python-dateutil-2.9.0.20240821.tar.gz", hash = "sha256:9649d1dcb6fef1046fb18bebe9ea2aa0028b160918518c34589a46045f6ebd98"}, + {file = "types_python_dateutil-2.9.0.20240821-py3-none-any.whl", hash = "sha256:f5889fcb4e63ed4aaa379b44f93c32593d50b9a94c9a60a0c854d8cc3511cd57"}, ] [[package]] From 54e16156d8158969aa019068bb438e2ff89881ca Mon Sep 17 00:00:00 2001 From: Adrian DC <radian.dc@gmail.com> Date: Sun, 18 Aug 2024 14:23:15 +0200 Subject: [PATCH 347/685] docs(readme): fix 'pip install Commitizen' to 'commitizen' Signed-off-by: Adrian DC <radian.dc@gmail.com> --- docs/README.md | 2 +- docs/tutorials/gitlab_ci.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index b4fa13eb2c..8c760be235 100644 --- a/docs/README.md +++ b/docs/README.md @@ -49,7 +49,7 @@ descriptive commits. To make commitizen available in your system ```bash -pip install --user -U Commitizen +pip install --user -U commitizen ``` ### Python project diff --git a/docs/tutorials/gitlab_ci.md b/docs/tutorials/gitlab_ci.md index de1336b675..d29bf994bd 100644 --- a/docs/tutorials/gitlab_ci.md +++ b/docs/tutorials/gitlab_ci.md @@ -79,7 +79,7 @@ auto-bump: - "which ssh-agent || ( apt-get update -qy && apt-get install openssh-client -qqy )" - eval `ssh-agent -s` - echo "${SSH_PRIVATE_KEY}" | tr -d '\r' | ssh-add - > /dev/null # add ssh key - - pip3 install -U Commitizen # install commitizen + - pip3 install -U commitizen # install commitizen - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo "$SSH_PUBLIC_KEY" >> ~/.ssh/id_rsa.pub From 737c24cc0a168de3e64588616338f76cd7af384f Mon Sep 17 00:00:00 2001 From: Adrian DC <radian.dc@gmail.com> Date: Thu, 22 Aug 2024 02:21:37 +0200 Subject: [PATCH 348/685] docs(readme): document 'pipx' alternative installation steps Issue: #1113 --- Signed-off-by: Adrian DC <radian.dc@gmail.com> --- docs/README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 8c760be235..3f729ebcbc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -46,7 +46,15 @@ descriptive commits. ## Installation -To make commitizen available in your system +Install commitizen in your system using `pipx` (Recommended, <https://pypa.github.io/pipx/installation/>): + +```bash +pipx ensurepath +pipx install commitizen +pipx upgrade commitizen +``` + +Install commitizen using `pip` with `--user` flag: ```bash pip install --user -U commitizen From 9f085a1933d2d2993856e34f51d0782e7bd99076 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 01:05:39 +0000 Subject: [PATCH 349/685] build(deps-dev): bump ruff from 0.6.1 to 0.6.2 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.1 to 0.6.2. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.6.1...0.6.2) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 46e0de015b..e9db8f1e9f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1425,29 +1425,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.6.1" +version = "0.6.2" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.1-py3-none-linux_armv6l.whl", hash = "sha256:b4bb7de6a24169dc023f992718a9417380301b0c2da0fe85919f47264fb8add9"}, - {file = "ruff-0.6.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:45efaae53b360c81043e311cdec8a7696420b3d3e8935202c2846e7a97d4edae"}, - {file = "ruff-0.6.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:bc60c7d71b732c8fa73cf995efc0c836a2fd8b9810e115be8babb24ae87e0850"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c7477c3b9da822e2db0b4e0b59e61b8a23e87886e727b327e7dcaf06213c5cf"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a0af7ab3f86e3dc9f157a928e08e26c4b40707d0612b01cd577cc84b8905cc9"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:392688dbb50fecf1bf7126731c90c11a9df1c3a4cdc3f481b53e851da5634fa5"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5278d3e095ccc8c30430bcc9bc550f778790acc211865520f3041910a28d0024"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe6d5f65d6f276ee7a0fc50a0cecaccb362d30ef98a110f99cac1c7872df2f18"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2e0dd11e2ae553ee5c92a81731d88a9883af8db7408db47fc81887c1f8b672e"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d812615525a34ecfc07fd93f906ef5b93656be01dfae9a819e31caa6cfe758a1"}, - {file = "ruff-0.6.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:faaa4060f4064c3b7aaaa27328080c932fa142786f8142aff095b42b6a2eb631"}, - {file = "ruff-0.6.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:99d7ae0df47c62729d58765c593ea54c2546d5de213f2af2a19442d50a10cec9"}, - {file = "ruff-0.6.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9eb18dfd7b613eec000e3738b3f0e4398bf0153cb80bfa3e351b3c1c2f6d7b15"}, - {file = "ruff-0.6.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c62bc04c6723a81e25e71715aa59489f15034d69bf641df88cb38bdc32fd1dbb"}, - {file = "ruff-0.6.1-py3-none-win32.whl", hash = "sha256:9fb4c4e8b83f19c9477a8745e56d2eeef07a7ff50b68a6998f7d9e2e3887bdc4"}, - {file = "ruff-0.6.1-py3-none-win_amd64.whl", hash = "sha256:c2ebfc8f51ef4aca05dad4552bbcf6fe8d1f75b2f6af546cc47cc1c1ca916b5b"}, - {file = "ruff-0.6.1-py3-none-win_arm64.whl", hash = "sha256:3bc81074971b0ffad1bd0c52284b22411f02a11a012082a76ac6da153536e014"}, - {file = "ruff-0.6.1.tar.gz", hash = "sha256:af3ffd8c6563acb8848d33cd19a69b9bfe943667f0419ca083f8ebe4224a3436"}, + {file = "ruff-0.6.2-py3-none-linux_armv6l.whl", hash = "sha256:5c8cbc6252deb3ea840ad6a20b0f8583caab0c5ef4f9cca21adc5a92b8f79f3c"}, + {file = "ruff-0.6.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:17002fe241e76544448a8e1e6118abecbe8cd10cf68fde635dad480dba594570"}, + {file = "ruff-0.6.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3dbeac76ed13456f8158b8f4fe087bf87882e645c8e8b606dd17b0b66c2c1158"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:094600ee88cda325988d3f54e3588c46de5c18dae09d683ace278b11f9d4d534"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:316d418fe258c036ba05fbf7dfc1f7d3d4096db63431546163b472285668132b"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d72b8b3abf8a2d51b7b9944a41307d2f442558ccb3859bbd87e6ae9be1694a5d"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2aed7e243be68487aa8982e91c6e260982d00da3f38955873aecd5a9204b1d66"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d371f7fc9cec83497fe7cf5eaf5b76e22a8efce463de5f775a1826197feb9df8"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8f310d63af08f583363dfb844ba8f9417b558199c58a5999215082036d795a1"}, + {file = "ruff-0.6.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7db6880c53c56addb8638fe444818183385ec85eeada1d48fc5abe045301b2f1"}, + {file = "ruff-0.6.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1175d39faadd9a50718f478d23bfc1d4da5743f1ab56af81a2b6caf0a2394f23"}, + {file = "ruff-0.6.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5b939f9c86d51635fe486585389f54582f0d65b8238e08c327c1534844b3bb9a"}, + {file = "ruff-0.6.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d0d62ca91219f906caf9b187dea50d17353f15ec9bb15aae4a606cd697b49b4c"}, + {file = "ruff-0.6.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7438a7288f9d67ed3c8ce4d059e67f7ed65e9fe3aa2ab6f5b4b3610e57e3cb56"}, + {file = "ruff-0.6.2-py3-none-win32.whl", hash = "sha256:279d5f7d86696df5f9549b56b9b6a7f6c72961b619022b5b7999b15db392a4da"}, + {file = "ruff-0.6.2-py3-none-win_amd64.whl", hash = "sha256:d9f3469c7dd43cd22eb1c3fc16926fb8258d50cb1b216658a07be95dd117b0f2"}, + {file = "ruff-0.6.2-py3-none-win_arm64.whl", hash = "sha256:f28fcd2cd0e02bdf739297516d5643a945cc7caf09bd9bcb4d932540a5ea4fa9"}, + {file = "ruff-0.6.2.tar.gz", hash = "sha256:239ee6beb9e91feb8e0ec384204a763f36cb53fb895a1a364618c6abb076b3be"}, ] [[package]] From 3333275afbd08516ef01a4ca660d8ec8d5698ff3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 01:32:47 +0000 Subject: [PATCH 350/685] build(deps-dev): bump mypy from 1.11.1 to 1.11.2 Bumps [mypy](https://github.com/python/mypy) from 1.11.1 to 1.11.2. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.11.1...v1.11.2) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index e9db8f1e9f..cf1b3596b1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -790,38 +790,38 @@ files = [ [[package]] name = "mypy" -version = "1.11.1" +version = "1.11.2" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"}, - {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"}, - {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"}, - {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"}, - {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"}, - {file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"}, - {file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"}, - {file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"}, - {file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"}, - {file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"}, - {file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"}, - {file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"}, - {file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"}, - {file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"}, - {file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"}, - {file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"}, - {file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"}, - {file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"}, - {file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"}, - {file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"}, - {file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"}, - {file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"}, - {file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"}, - {file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"}, - {file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"}, - {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"}, - {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"}, + {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, + {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, + {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, + {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, + {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, + {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, + {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, + {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, + {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, + {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, + {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, + {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, + {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, + {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, + {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, + {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, + {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, + {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, + {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, + {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, + {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, + {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, + {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, + {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, + {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, + {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, + {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, ] [package.dependencies] From ef57d1491d3681fe2a8a62dff5a822b2263c2e0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 01:33:16 +0000 Subject: [PATCH 351/685] build(deps-dev): bump mkdocs-material from 9.5.32 to 9.5.33 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.32 to 9.5.33. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.32...9.5.33) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index cf1b3596b1..bb5fc1a348 100644 --- a/poetry.lock +++ b/poetry.lock @@ -750,13 +750,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.32" +version = "9.5.33" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.32-py3-none-any.whl", hash = "sha256:f3704f46b63d31b3cd35c0055a72280bed825786eccaf19c655b44e0cd2c6b3f"}, - {file = "mkdocs_material-9.5.32.tar.gz", hash = "sha256:38ed66e6d6768dde4edde022554553e48b2db0d26d1320b19e2e2b9da0be1120"}, + {file = "mkdocs_material-9.5.33-py3-none-any.whl", hash = "sha256:dbc79cf0fdc6e2c366aa987de8b0c9d4e2bb9f156e7466786ba2fd0f9bf7ffca"}, + {file = "mkdocs_material-9.5.33.tar.gz", hash = "sha256:d23a8b5e3243c9b2f29cdfe83051104a8024b767312dc8fde05ebe91ad55d89d"}, ] [package.dependencies] From 7c02669c59d201d1d83ae31810aba5207d81d23d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2024 01:09:54 +0000 Subject: [PATCH 352/685] build(deps-dev): bump rich from 13.7.1 to 13.8.0 Bumps [rich](https://github.com/Textualize/rich) from 13.7.1 to 13.8.0. - [Release notes](https://github.com/Textualize/rich/releases) - [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md) - [Commits](https://github.com/Textualize/rich/compare/v13.7.1...v13.8.0) --- updated-dependencies: - dependency-name: rich dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index bb5fc1a348..18d5623d51 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1406,13 +1406,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rich" -version = "13.7.1" +version = "13.8.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, - {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, + {file = "rich-13.8.0-py3-none-any.whl", hash = "sha256:2e85306a063b9492dffc86278197a60cbece75bcb766022f3436f567cae11bdc"}, + {file = "rich-13.8.0.tar.gz", hash = "sha256:a5ac1f1cd448ade0d59cc3356f7db7a7ccda2c8cbae9c7a90c28ff463d3e91f4"}, ] [package.dependencies] From 100936b86380c2e16989da67fa71102cc5ba401e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2024 01:08:48 +0000 Subject: [PATCH 353/685] build(deps-dev): bump ruff from 0.6.2 to 0.6.3 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.2 to 0.6.3. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.6.2...0.6.3) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 18d5623d51..ca1417dab8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1425,29 +1425,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.6.2" +version = "0.6.3" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.2-py3-none-linux_armv6l.whl", hash = "sha256:5c8cbc6252deb3ea840ad6a20b0f8583caab0c5ef4f9cca21adc5a92b8f79f3c"}, - {file = "ruff-0.6.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:17002fe241e76544448a8e1e6118abecbe8cd10cf68fde635dad480dba594570"}, - {file = "ruff-0.6.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3dbeac76ed13456f8158b8f4fe087bf87882e645c8e8b606dd17b0b66c2c1158"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:094600ee88cda325988d3f54e3588c46de5c18dae09d683ace278b11f9d4d534"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:316d418fe258c036ba05fbf7dfc1f7d3d4096db63431546163b472285668132b"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d72b8b3abf8a2d51b7b9944a41307d2f442558ccb3859bbd87e6ae9be1694a5d"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2aed7e243be68487aa8982e91c6e260982d00da3f38955873aecd5a9204b1d66"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d371f7fc9cec83497fe7cf5eaf5b76e22a8efce463de5f775a1826197feb9df8"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8f310d63af08f583363dfb844ba8f9417b558199c58a5999215082036d795a1"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7db6880c53c56addb8638fe444818183385ec85eeada1d48fc5abe045301b2f1"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1175d39faadd9a50718f478d23bfc1d4da5743f1ab56af81a2b6caf0a2394f23"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5b939f9c86d51635fe486585389f54582f0d65b8238e08c327c1534844b3bb9a"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d0d62ca91219f906caf9b187dea50d17353f15ec9bb15aae4a606cd697b49b4c"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7438a7288f9d67ed3c8ce4d059e67f7ed65e9fe3aa2ab6f5b4b3610e57e3cb56"}, - {file = "ruff-0.6.2-py3-none-win32.whl", hash = "sha256:279d5f7d86696df5f9549b56b9b6a7f6c72961b619022b5b7999b15db392a4da"}, - {file = "ruff-0.6.2-py3-none-win_amd64.whl", hash = "sha256:d9f3469c7dd43cd22eb1c3fc16926fb8258d50cb1b216658a07be95dd117b0f2"}, - {file = "ruff-0.6.2-py3-none-win_arm64.whl", hash = "sha256:f28fcd2cd0e02bdf739297516d5643a945cc7caf09bd9bcb4d932540a5ea4fa9"}, - {file = "ruff-0.6.2.tar.gz", hash = "sha256:239ee6beb9e91feb8e0ec384204a763f36cb53fb895a1a364618c6abb076b3be"}, + {file = "ruff-0.6.3-py3-none-linux_armv6l.whl", hash = "sha256:97f58fda4e309382ad30ede7f30e2791d70dd29ea17f41970119f55bdb7a45c3"}, + {file = "ruff-0.6.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3b061e49b5cf3a297b4d1c27ac5587954ccb4ff601160d3d6b2f70b1622194dc"}, + {file = "ruff-0.6.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:34e2824a13bb8c668c71c1760a6ac7d795ccbd8d38ff4a0d8471fdb15de910b1"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bddfbb8d63c460f4b4128b6a506e7052bad4d6f3ff607ebbb41b0aa19c2770d1"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ced3eeb44df75353e08ab3b6a9e113b5f3f996bea48d4f7c027bc528ba87b672"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47021dff5445d549be954eb275156dfd7c37222acc1e8014311badcb9b4ec8c1"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7d7bd20dc07cebd68cc8bc7b3f5ada6d637f42d947c85264f94b0d1cd9d87384"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:500f166d03fc6d0e61c8e40a3ff853fa8a43d938f5d14c183c612df1b0d6c58a"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42844ff678f9b976366b262fa2d1d1a3fe76f6e145bd92c84e27d172e3c34500"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70452a10eb2d66549de8e75f89ae82462159855e983ddff91bc0bce6511d0470"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:65a533235ed55f767d1fc62193a21cbf9e3329cf26d427b800fdeacfb77d296f"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d2e2c23cef30dc3cbe9cc5d04f2899e7f5e478c40d2e0a633513ad081f7361b5"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d8a136aa7d228975a6aee3dd8bea9b28e2b43e9444aa678fb62aeb1956ff2351"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f92fe93bc72e262b7b3f2bba9879897e2d58a989b4714ba6a5a7273e842ad2f8"}, + {file = "ruff-0.6.3-py3-none-win32.whl", hash = "sha256:7a62d3b5b0d7f9143d94893f8ba43aa5a5c51a0ffc4a401aa97a81ed76930521"}, + {file = "ruff-0.6.3-py3-none-win_amd64.whl", hash = "sha256:746af39356fee2b89aada06c7376e1aa274a23493d7016059c3a72e3b296befb"}, + {file = "ruff-0.6.3-py3-none-win_arm64.whl", hash = "sha256:14a9528a8b70ccc7a847637c29e56fd1f9183a9db743bbc5b8e0c4ad60592a82"}, + {file = "ruff-0.6.3.tar.gz", hash = "sha256:183b99e9edd1ef63be34a3b51fee0a9f4ab95add123dbf89a71f7b1f0c991983"}, ] [[package]] From d90c8a86ce4ee39ff2d90e858f4fb48bca8508bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 01:29:43 +0000 Subject: [PATCH 354/685] build(deps-dev): bump mkdocs from 1.6.0 to 1.6.1 Bumps [mkdocs](https://github.com/mkdocs/mkdocs) from 1.6.0 to 1.6.1. - [Release notes](https://github.com/mkdocs/mkdocs/releases) - [Commits](https://github.com/mkdocs/mkdocs/compare/1.6.0...1.6.1) --- updated-dependencies: - dependency-name: mkdocs dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index ca1417dab8..8e2cfedfea 100644 --- a/poetry.lock +++ b/poetry.lock @@ -702,13 +702,13 @@ files = [ [[package]] name = "mkdocs" -version = "1.6.0" +version = "1.6.1" description = "Project documentation with Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs-1.6.0-py3-none-any.whl", hash = "sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7"}, - {file = "mkdocs-1.6.0.tar.gz", hash = "sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512"}, + {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, + {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, ] [package.dependencies] From d874e7174a42eea808fd7c34328ca575ea6e5d47 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 01:30:12 +0000 Subject: [PATCH 355/685] build(deps-dev): bump mkdocs-material from 9.5.33 to 9.5.34 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.33 to 9.5.34. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.33...9.5.34) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8e2cfedfea..ecdbbaf9f3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -750,13 +750,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.33" +version = "9.5.34" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.33-py3-none-any.whl", hash = "sha256:dbc79cf0fdc6e2c366aa987de8b0c9d4e2bb9f156e7466786ba2fd0f9bf7ffca"}, - {file = "mkdocs_material-9.5.33.tar.gz", hash = "sha256:d23a8b5e3243c9b2f29cdfe83051104a8024b767312dc8fde05ebe91ad55d89d"}, + {file = "mkdocs_material-9.5.34-py3-none-any.whl", hash = "sha256:54caa8be708de2b75167fd4d3b9f3d949579294f49cb242515d4653dbee9227e"}, + {file = "mkdocs_material-9.5.34.tar.gz", hash = "sha256:1e60ddf716cfb5679dfd65900b8a25d277064ed82d9a53cd5190e3f894df7840"}, ] [package.dependencies] From 74f66d194dcaf15a522f5c834374f58abc468d4e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Sep 2024 01:55:01 +0000 Subject: [PATCH 356/685] build(deps-dev): bump ruff from 0.6.3 to 0.6.4 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.3 to 0.6.4. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.6.3...0.6.4) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index ecdbbaf9f3..9792958a2d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1425,29 +1425,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.6.3" +version = "0.6.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.3-py3-none-linux_armv6l.whl", hash = "sha256:97f58fda4e309382ad30ede7f30e2791d70dd29ea17f41970119f55bdb7a45c3"}, - {file = "ruff-0.6.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3b061e49b5cf3a297b4d1c27ac5587954ccb4ff601160d3d6b2f70b1622194dc"}, - {file = "ruff-0.6.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:34e2824a13bb8c668c71c1760a6ac7d795ccbd8d38ff4a0d8471fdb15de910b1"}, - {file = "ruff-0.6.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bddfbb8d63c460f4b4128b6a506e7052bad4d6f3ff607ebbb41b0aa19c2770d1"}, - {file = "ruff-0.6.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ced3eeb44df75353e08ab3b6a9e113b5f3f996bea48d4f7c027bc528ba87b672"}, - {file = "ruff-0.6.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47021dff5445d549be954eb275156dfd7c37222acc1e8014311badcb9b4ec8c1"}, - {file = "ruff-0.6.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7d7bd20dc07cebd68cc8bc7b3f5ada6d637f42d947c85264f94b0d1cd9d87384"}, - {file = "ruff-0.6.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:500f166d03fc6d0e61c8e40a3ff853fa8a43d938f5d14c183c612df1b0d6c58a"}, - {file = "ruff-0.6.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42844ff678f9b976366b262fa2d1d1a3fe76f6e145bd92c84e27d172e3c34500"}, - {file = "ruff-0.6.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70452a10eb2d66549de8e75f89ae82462159855e983ddff91bc0bce6511d0470"}, - {file = "ruff-0.6.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:65a533235ed55f767d1fc62193a21cbf9e3329cf26d427b800fdeacfb77d296f"}, - {file = "ruff-0.6.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d2e2c23cef30dc3cbe9cc5d04f2899e7f5e478c40d2e0a633513ad081f7361b5"}, - {file = "ruff-0.6.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d8a136aa7d228975a6aee3dd8bea9b28e2b43e9444aa678fb62aeb1956ff2351"}, - {file = "ruff-0.6.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f92fe93bc72e262b7b3f2bba9879897e2d58a989b4714ba6a5a7273e842ad2f8"}, - {file = "ruff-0.6.3-py3-none-win32.whl", hash = "sha256:7a62d3b5b0d7f9143d94893f8ba43aa5a5c51a0ffc4a401aa97a81ed76930521"}, - {file = "ruff-0.6.3-py3-none-win_amd64.whl", hash = "sha256:746af39356fee2b89aada06c7376e1aa274a23493d7016059c3a72e3b296befb"}, - {file = "ruff-0.6.3-py3-none-win_arm64.whl", hash = "sha256:14a9528a8b70ccc7a847637c29e56fd1f9183a9db743bbc5b8e0c4ad60592a82"}, - {file = "ruff-0.6.3.tar.gz", hash = "sha256:183b99e9edd1ef63be34a3b51fee0a9f4ab95add123dbf89a71f7b1f0c991983"}, + {file = "ruff-0.6.4-py3-none-linux_armv6l.whl", hash = "sha256:c4b153fc152af51855458e79e835fb6b933032921756cec9af7d0ba2aa01a258"}, + {file = "ruff-0.6.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:bedff9e4f004dad5f7f76a9d39c4ca98af526c9b1695068198b3bda8c085ef60"}, + {file = "ruff-0.6.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d02a4127a86de23002e694d7ff19f905c51e338c72d8e09b56bfb60e1681724f"}, + {file = "ruff-0.6.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7862f42fc1a4aca1ea3ffe8a11f67819d183a5693b228f0bb3a531f5e40336fc"}, + {file = "ruff-0.6.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebe4ff1967c838a1a9618a5a59a3b0a00406f8d7eefee97c70411fefc353617"}, + {file = "ruff-0.6.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:932063a03bac394866683e15710c25b8690ccdca1cf192b9a98260332ca93408"}, + {file = "ruff-0.6.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:50e30b437cebef547bd5c3edf9ce81343e5dd7c737cb36ccb4fe83573f3d392e"}, + {file = "ruff-0.6.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c44536df7b93a587de690e124b89bd47306fddd59398a0fb12afd6133c7b3818"}, + {file = "ruff-0.6.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ea086601b22dc5e7693a78f3fcfc460cceabfdf3bdc36dc898792aba48fbad6"}, + {file = "ruff-0.6.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b52387d3289ccd227b62102c24714ed75fbba0b16ecc69a923a37e3b5e0aaaa"}, + {file = "ruff-0.6.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0308610470fcc82969082fc83c76c0d362f562e2f0cdab0586516f03a4e06ec6"}, + {file = "ruff-0.6.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:803b96dea21795a6c9d5bfa9e96127cc9c31a1987802ca68f35e5c95aed3fc0d"}, + {file = "ruff-0.6.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:66dbfea86b663baab8fcae56c59f190caba9398df1488164e2df53e216248baa"}, + {file = "ruff-0.6.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:34d5efad480193c046c86608dbba2bccdc1c5fd11950fb271f8086e0c763a5d1"}, + {file = "ruff-0.6.4-py3-none-win32.whl", hash = "sha256:f0f8968feea5ce3777c0d8365653d5e91c40c31a81d95824ba61d871a11b8523"}, + {file = "ruff-0.6.4-py3-none-win_amd64.whl", hash = "sha256:549daccee5227282289390b0222d0fbee0275d1db6d514550d65420053021a58"}, + {file = "ruff-0.6.4-py3-none-win_arm64.whl", hash = "sha256:ac4b75e898ed189b3708c9ab3fc70b79a433219e1e87193b4f2b77251d058d14"}, + {file = "ruff-0.6.4.tar.gz", hash = "sha256:ac3b5bfbee99973f80aa1b7cbd1c9cbce200883bdd067300c22a6cc1c7fba212"}, ] [[package]] From 31975566eb02c5f373224c86c3e4bf3f687f9075 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2024 01:16:49 +0000 Subject: [PATCH 357/685] build(deps-dev): bump types-python-dateutil Bumps [types-python-dateutil](https://github.com/python/typeshed) from 2.9.0.20240821 to 2.9.0.20240906. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-python-dateutil dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9792958a2d..a61503d276 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1559,13 +1559,13 @@ files = [ [[package]] name = "types-python-dateutil" -version = "2.9.0.20240821" +version = "2.9.0.20240906" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.9.0.20240821.tar.gz", hash = "sha256:9649d1dcb6fef1046fb18bebe9ea2aa0028b160918518c34589a46045f6ebd98"}, - {file = "types_python_dateutil-2.9.0.20240821-py3-none-any.whl", hash = "sha256:f5889fcb4e63ed4aaa379b44f93c32593d50b9a94c9a60a0c854d8cc3511cd57"}, + {file = "types-python-dateutil-2.9.0.20240906.tar.gz", hash = "sha256:9706c3b68284c25adffc47319ecc7947e5bb86b3773f843c73906fd598bc176e"}, + {file = "types_python_dateutil-2.9.0.20240906-py3-none-any.whl", hash = "sha256:27c8cc2d058ccb14946eebcaaa503088f4f6dbc4fb6093d3d456a49aef2753f6"}, ] [[package]] From d6547c12b1abaddc2cb9cd743f4e424c328e6773 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Wed, 11 Sep 2024 22:47:21 -0700 Subject: [PATCH 358/685] test(check): Python 3.13 help text format has been changed. Change the test accordingly --- ...check_command_shows_description_when_use_help_option.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt b/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt index 2ccf97270e..85f42f6d2a 100644 --- a/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_check_command/test_check_command_shows_description_when_use_help_option.txt @@ -1,6 +1,6 @@ -usage: cz check [-h] - [--commit-msg-file COMMIT_MSG_FILE | --rev-range REV_RANGE | -m MESSAGE] - [--allow-abort] [--allowed-prefixes [ALLOWED_PREFIXES ...]] +usage: cz check [-h] [--commit-msg-file COMMIT_MSG_FILE | + --rev-range REV_RANGE | -m MESSAGE] [--allow-abort] + [--allowed-prefixes [ALLOWED_PREFIXES ...]] [-l MESSAGE_LENGTH_LIMIT] validates that a commit message matches the commitizen schema From 6a5c1b132755668f1363293e704f10ff14b02687 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 02:01:06 +0000 Subject: [PATCH 359/685] build(deps-dev): bump ruff from 0.6.4 to 0.6.5 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.4 to 0.6.5. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.6.4...0.6.5) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index a61503d276..470b07fd1c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1425,29 +1425,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.6.4" +version = "0.6.5" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.4-py3-none-linux_armv6l.whl", hash = "sha256:c4b153fc152af51855458e79e835fb6b933032921756cec9af7d0ba2aa01a258"}, - {file = "ruff-0.6.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:bedff9e4f004dad5f7f76a9d39c4ca98af526c9b1695068198b3bda8c085ef60"}, - {file = "ruff-0.6.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d02a4127a86de23002e694d7ff19f905c51e338c72d8e09b56bfb60e1681724f"}, - {file = "ruff-0.6.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7862f42fc1a4aca1ea3ffe8a11f67819d183a5693b228f0bb3a531f5e40336fc"}, - {file = "ruff-0.6.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebe4ff1967c838a1a9618a5a59a3b0a00406f8d7eefee97c70411fefc353617"}, - {file = "ruff-0.6.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:932063a03bac394866683e15710c25b8690ccdca1cf192b9a98260332ca93408"}, - {file = "ruff-0.6.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:50e30b437cebef547bd5c3edf9ce81343e5dd7c737cb36ccb4fe83573f3d392e"}, - {file = "ruff-0.6.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c44536df7b93a587de690e124b89bd47306fddd59398a0fb12afd6133c7b3818"}, - {file = "ruff-0.6.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ea086601b22dc5e7693a78f3fcfc460cceabfdf3bdc36dc898792aba48fbad6"}, - {file = "ruff-0.6.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b52387d3289ccd227b62102c24714ed75fbba0b16ecc69a923a37e3b5e0aaaa"}, - {file = "ruff-0.6.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0308610470fcc82969082fc83c76c0d362f562e2f0cdab0586516f03a4e06ec6"}, - {file = "ruff-0.6.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:803b96dea21795a6c9d5bfa9e96127cc9c31a1987802ca68f35e5c95aed3fc0d"}, - {file = "ruff-0.6.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:66dbfea86b663baab8fcae56c59f190caba9398df1488164e2df53e216248baa"}, - {file = "ruff-0.6.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:34d5efad480193c046c86608dbba2bccdc1c5fd11950fb271f8086e0c763a5d1"}, - {file = "ruff-0.6.4-py3-none-win32.whl", hash = "sha256:f0f8968feea5ce3777c0d8365653d5e91c40c31a81d95824ba61d871a11b8523"}, - {file = "ruff-0.6.4-py3-none-win_amd64.whl", hash = "sha256:549daccee5227282289390b0222d0fbee0275d1db6d514550d65420053021a58"}, - {file = "ruff-0.6.4-py3-none-win_arm64.whl", hash = "sha256:ac4b75e898ed189b3708c9ab3fc70b79a433219e1e87193b4f2b77251d058d14"}, - {file = "ruff-0.6.4.tar.gz", hash = "sha256:ac3b5bfbee99973f80aa1b7cbd1c9cbce200883bdd067300c22a6cc1c7fba212"}, + {file = "ruff-0.6.5-py3-none-linux_armv6l.whl", hash = "sha256:7e4e308f16e07c95fc7753fc1aaac690a323b2bb9f4ec5e844a97bb7fbebd748"}, + {file = "ruff-0.6.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:932cd69eefe4daf8c7d92bd6689f7e8182571cb934ea720af218929da7bd7d69"}, + {file = "ruff-0.6.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3a8d42d11fff8d3143ff4da41742a98f8f233bf8890e9fe23077826818f8d680"}, + {file = "ruff-0.6.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a50af6e828ee692fb10ff2dfe53f05caecf077f4210fae9677e06a808275754f"}, + {file = "ruff-0.6.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:794ada3400a0d0b89e3015f1a7e01f4c97320ac665b7bc3ade24b50b54cb2972"}, + {file = "ruff-0.6.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:381413ec47f71ce1d1c614f7779d88886f406f1fd53d289c77e4e533dc6ea200"}, + {file = "ruff-0.6.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:52e75a82bbc9b42e63c08d22ad0ac525117e72aee9729a069d7c4f235fc4d276"}, + {file = "ruff-0.6.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09c72a833fd3551135ceddcba5ebdb68ff89225d30758027280968c9acdc7810"}, + {file = "ruff-0.6.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:800c50371bdcb99b3c1551d5691e14d16d6f07063a518770254227f7f6e8c178"}, + {file = "ruff-0.6.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e25ddd9cd63ba1f3bd51c1f09903904a6adf8429df34f17d728a8fa11174253"}, + {file = "ruff-0.6.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7291e64d7129f24d1b0c947ec3ec4c0076e958d1475c61202497c6aced35dd19"}, + {file = "ruff-0.6.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9ad7dfbd138d09d9a7e6931e6a7e797651ce29becd688be8a0d4d5f8177b4b0c"}, + {file = "ruff-0.6.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:005256d977021790cc52aa23d78f06bb5090dc0bfbd42de46d49c201533982ae"}, + {file = "ruff-0.6.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:482c1e6bfeb615eafc5899127b805d28e387bd87db38b2c0c41d271f5e58d8cc"}, + {file = "ruff-0.6.5-py3-none-win32.whl", hash = "sha256:cf4d3fa53644137f6a4a27a2b397381d16454a1566ae5335855c187fbf67e4f5"}, + {file = "ruff-0.6.5-py3-none-win_amd64.whl", hash = "sha256:3e42a57b58e3612051a636bc1ac4e6b838679530235520e8f095f7c44f706ff9"}, + {file = "ruff-0.6.5-py3-none-win_arm64.whl", hash = "sha256:51935067740773afdf97493ba9b8231279e9beef0f2a8079188c4776c25688e0"}, + {file = "ruff-0.6.5.tar.gz", hash = "sha256:4d32d87fab433c0cf285c3683dd4dae63be05fd7a1d65b3f5bf7cdd05a6b96fb"}, ] [[package]] From 7e881da545ec976fc803af67b0ad0f5c509ab1f2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:44:00 +0000 Subject: [PATCH 360/685] build(deps-dev): bump pytest from 8.3.2 to 8.3.3 Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.3.2 to 8.3.3. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.3.2...8.3.3) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 470b07fd1c..7da50be4d3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1054,13 +1054,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pytest" -version = "8.3.2" +version = "8.3.3" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, - {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, + {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, + {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, ] [package.dependencies] From 620b9757004f07c3620a59bf3388c48321dfaafd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:44:37 +0000 Subject: [PATCH 361/685] build(deps-dev): bump rich from 13.8.0 to 13.8.1 Bumps [rich](https://github.com/Textualize/rich) from 13.8.0 to 13.8.1. - [Release notes](https://github.com/Textualize/rich/releases) - [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md) - [Commits](https://github.com/Textualize/rich/compare/v13.8.0...v13.8.1) --- updated-dependencies: - dependency-name: rich dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7da50be4d3..b900f88911 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1406,13 +1406,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rich" -version = "13.8.0" +version = "13.8.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.8.0-py3-none-any.whl", hash = "sha256:2e85306a063b9492dffc86278197a60cbece75bcb766022f3436f567cae11bdc"}, - {file = "rich-13.8.0.tar.gz", hash = "sha256:a5ac1f1cd448ade0d59cc3356f7db7a7ccda2c8cbae9c7a90c28ff463d3e91f4"}, + {file = "rich-13.8.1-py3-none-any.whl", hash = "sha256:1760a3c0848469b97b558fc61c85233e3dafb69c7a071b4d60c38099d3cd4c06"}, + {file = "rich-13.8.1.tar.gz", hash = "sha256:8260cda28e3db6bf04d2d1ef4dbc03ba80a824c88b0e7668a0f23126a424844a"}, ] [package.dependencies] From a4ef250c2f41e9f8a51d55e49dbccf596a826d77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 01:28:03 +0000 Subject: [PATCH 362/685] build(deps-dev): bump types-pyyaml Bumps [types-pyyaml](https://github.com/python/typeshed) from 6.0.12.20240808 to 6.0.12.20240917. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-pyyaml dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index b900f88911..4145f4d30d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1570,13 +1570,13 @@ files = [ [[package]] name = "types-pyyaml" -version = "6.0.12.20240808" +version = "6.0.12.20240917" description = "Typing stubs for PyYAML" optional = false python-versions = ">=3.8" files = [ - {file = "types-PyYAML-6.0.12.20240808.tar.gz", hash = "sha256:b8f76ddbd7f65440a8bda5526a9607e4c7a322dc2f8e1a8c405644f9a6f4b9af"}, - {file = "types_PyYAML-6.0.12.20240808-py3-none-any.whl", hash = "sha256:deda34c5c655265fc517b546c902aa6eed2ef8d3e921e4765fe606fe2afe8d35"}, + {file = "types-PyYAML-6.0.12.20240917.tar.gz", hash = "sha256:d1405a86f9576682234ef83bcb4e6fff7c9305c8b1fbad5e0bcd4f7dbdc9c587"}, + {file = "types_PyYAML-6.0.12.20240917-py3-none-any.whl", hash = "sha256:392b267f1c0fe6022952462bf5d6523f31e37f6cea49b14cee7ad634b6301570"}, ] [[package]] From 90a454aa8209577cc1c488e79d3cd17f5e5bbb91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:44:52 +0000 Subject: [PATCH 363/685] build(deps): bump importlib-metadata from 8.4.0 to 8.5.0 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 8.4.0 to 8.5.0. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v8.4.0...v8.5.0) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4145f4d30d..94ec30294f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -450,22 +450,26 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.4.0" +version = "8.5.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, - {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, + {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, + {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, ] [package.dependencies] -zipp = ">=0.5" +zipp = ">=3.20" [package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] [[package]] name = "iniconfig" @@ -1771,18 +1775,22 @@ files = [ [[package]] name = "zipp" -version = "3.19.1" +version = "3.20.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.19.1-py3-none-any.whl", hash = "sha256:2828e64edb5386ea6a52e7ba7cdb17bb30a73a858f5eb6eb93d8d36f5ea26091"}, - {file = "zipp-3.19.1.tar.gz", hash = "sha256:35427f6d5594f4acf82d25541438348c26736fa9b3afa2754bcd63cdb99d8e8f"}, + {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, + {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, ] [package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] [metadata] lock-version = "2.0" From 31212bac3ee59b33050feec25bf60c567e740267 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 02:03:22 +0000 Subject: [PATCH 364/685] build(deps-dev): bump mkdocs-material from 9.5.34 to 9.5.35 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.34 to 9.5.35. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.34...9.5.35) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 94ec30294f..8a3aaed388 100644 --- a/poetry.lock +++ b/poetry.lock @@ -754,13 +754,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.34" +version = "9.5.35" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.34-py3-none-any.whl", hash = "sha256:54caa8be708de2b75167fd4d3b9f3d949579294f49cb242515d4653dbee9227e"}, - {file = "mkdocs_material-9.5.34.tar.gz", hash = "sha256:1e60ddf716cfb5679dfd65900b8a25d277064ed82d9a53cd5190e3f894df7840"}, + {file = "mkdocs_material-9.5.35-py3-none-any.whl", hash = "sha256:44e069d87732d29f4a2533ae0748fa0e67e270043270c71f04d0fba11a357b24"}, + {file = "mkdocs_material-9.5.35.tar.gz", hash = "sha256:0d233d7db067ac896bf22ee7950eebf2b1eaf26c155bb27382bf4174021cc117"}, ] [package.dependencies] From d151e9e02b1ea167aadde29bc6682e0b39d1fece Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 01:10:14 +0000 Subject: [PATCH 365/685] build(deps-dev): bump ruff from 0.6.5 to 0.6.7 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.5 to 0.6.7. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.6.5...0.6.7) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8a3aaed388..abd8c7d0bb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1429,29 +1429,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.6.5" +version = "0.6.7" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.5-py3-none-linux_armv6l.whl", hash = "sha256:7e4e308f16e07c95fc7753fc1aaac690a323b2bb9f4ec5e844a97bb7fbebd748"}, - {file = "ruff-0.6.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:932cd69eefe4daf8c7d92bd6689f7e8182571cb934ea720af218929da7bd7d69"}, - {file = "ruff-0.6.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3a8d42d11fff8d3143ff4da41742a98f8f233bf8890e9fe23077826818f8d680"}, - {file = "ruff-0.6.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a50af6e828ee692fb10ff2dfe53f05caecf077f4210fae9677e06a808275754f"}, - {file = "ruff-0.6.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:794ada3400a0d0b89e3015f1a7e01f4c97320ac665b7bc3ade24b50b54cb2972"}, - {file = "ruff-0.6.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:381413ec47f71ce1d1c614f7779d88886f406f1fd53d289c77e4e533dc6ea200"}, - {file = "ruff-0.6.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:52e75a82bbc9b42e63c08d22ad0ac525117e72aee9729a069d7c4f235fc4d276"}, - {file = "ruff-0.6.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09c72a833fd3551135ceddcba5ebdb68ff89225d30758027280968c9acdc7810"}, - {file = "ruff-0.6.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:800c50371bdcb99b3c1551d5691e14d16d6f07063a518770254227f7f6e8c178"}, - {file = "ruff-0.6.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e25ddd9cd63ba1f3bd51c1f09903904a6adf8429df34f17d728a8fa11174253"}, - {file = "ruff-0.6.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7291e64d7129f24d1b0c947ec3ec4c0076e958d1475c61202497c6aced35dd19"}, - {file = "ruff-0.6.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9ad7dfbd138d09d9a7e6931e6a7e797651ce29becd688be8a0d4d5f8177b4b0c"}, - {file = "ruff-0.6.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:005256d977021790cc52aa23d78f06bb5090dc0bfbd42de46d49c201533982ae"}, - {file = "ruff-0.6.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:482c1e6bfeb615eafc5899127b805d28e387bd87db38b2c0c41d271f5e58d8cc"}, - {file = "ruff-0.6.5-py3-none-win32.whl", hash = "sha256:cf4d3fa53644137f6a4a27a2b397381d16454a1566ae5335855c187fbf67e4f5"}, - {file = "ruff-0.6.5-py3-none-win_amd64.whl", hash = "sha256:3e42a57b58e3612051a636bc1ac4e6b838679530235520e8f095f7c44f706ff9"}, - {file = "ruff-0.6.5-py3-none-win_arm64.whl", hash = "sha256:51935067740773afdf97493ba9b8231279e9beef0f2a8079188c4776c25688e0"}, - {file = "ruff-0.6.5.tar.gz", hash = "sha256:4d32d87fab433c0cf285c3683dd4dae63be05fd7a1d65b3f5bf7cdd05a6b96fb"}, + {file = "ruff-0.6.7-py3-none-linux_armv6l.whl", hash = "sha256:08277b217534bfdcc2e1377f7f933e1c7957453e8a79764d004e44c40db923f2"}, + {file = "ruff-0.6.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c6707a32e03b791f4448dc0dce24b636cbcdee4dd5607adc24e5ee73fd86c00a"}, + {file = "ruff-0.6.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:533d66b7774ef224e7cf91506a7dafcc9e8ec7c059263ec46629e54e7b1f90ab"}, + {file = "ruff-0.6.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17a86aac6f915932d259f7bec79173e356165518859f94649d8c50b81ff087e9"}, + {file = "ruff-0.6.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3f8822defd260ae2460ea3832b24d37d203c3577f48b055590a426a722d50ef"}, + {file = "ruff-0.6.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ba4efe5c6dbbb58be58dd83feedb83b5e95c00091bf09987b4baf510fee5c99"}, + {file = "ruff-0.6.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:525201b77f94d2b54868f0cbe5edc018e64c22563da6c5c2e5c107a4e85c1c0d"}, + {file = "ruff-0.6.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8854450839f339e1049fdbe15d875384242b8e85d5c6947bb2faad33c651020b"}, + {file = "ruff-0.6.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f0b62056246234d59cbf2ea66e84812dc9ec4540518e37553513392c171cb18"}, + {file = "ruff-0.6.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b1462fa56c832dc0cea5b4041cfc9c97813505d11cce74ebc6d1aae068de36b"}, + {file = "ruff-0.6.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:02b083770e4cdb1495ed313f5694c62808e71764ec6ee5db84eedd82fd32d8f5"}, + {file = "ruff-0.6.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0c05fd37013de36dfa883a3854fae57b3113aaa8abf5dea79202675991d48624"}, + {file = "ruff-0.6.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f49c9caa28d9bbfac4a637ae10327b3db00f47d038f3fbb2195c4d682e925b14"}, + {file = "ruff-0.6.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a0e1655868164e114ba43a908fd2d64a271a23660195017c17691fb6355d59bb"}, + {file = "ruff-0.6.7-py3-none-win32.whl", hash = "sha256:a939ca435b49f6966a7dd64b765c9df16f1faed0ca3b6f16acdf7731969deb35"}, + {file = "ruff-0.6.7-py3-none-win_amd64.whl", hash = "sha256:590445eec5653f36248584579c06252ad2e110a5d1f32db5420de35fb0e1c977"}, + {file = "ruff-0.6.7-py3-none-win_arm64.whl", hash = "sha256:b28f0d5e2f771c1fe3c7a45d3f53916fc74a480698c4b5731f0bea61e52137c8"}, + {file = "ruff-0.6.7.tar.gz", hash = "sha256:44e52129d82266fa59b587e2cd74def5637b730a69c4542525dfdecfaae38bd5"}, ] [[package]] From ee41af27f88c9e718c2a3e18ed7c8c10ef290d25 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 01:09:43 +0000 Subject: [PATCH 366/685] build(deps-dev): bump mkdocs-material from 9.5.35 to 9.5.36 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.35 to 9.5.36. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.35...9.5.36) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index abd8c7d0bb..393b8b3222 100644 --- a/poetry.lock +++ b/poetry.lock @@ -754,13 +754,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.35" +version = "9.5.36" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.35-py3-none-any.whl", hash = "sha256:44e069d87732d29f4a2533ae0748fa0e67e270043270c71f04d0fba11a357b24"}, - {file = "mkdocs_material-9.5.35.tar.gz", hash = "sha256:0d233d7db067ac896bf22ee7950eebf2b1eaf26c155bb27382bf4174021cc117"}, + {file = "mkdocs_material-9.5.36-py3-none-any.whl", hash = "sha256:36734c1fd9404bea74236242ba3359b267fc930c7233b9fd086b0898825d0ac9"}, + {file = "mkdocs_material-9.5.36.tar.gz", hash = "sha256:140456f761320f72b399effc073fa3f8aac744c77b0970797c201cae2f6c967f"}, ] [package.dependencies] From 88f1e218e31f8a2d1c968fe50d38bd9f42828480 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 01:44:36 +0000 Subject: [PATCH 367/685] build(deps-dev): bump mkdocs-material from 9.5.36 to 9.5.37 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.36 to 9.5.37. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.36...9.5.37) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 393b8b3222..0b371d1a9c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -754,13 +754,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.36" +version = "9.5.37" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.36-py3-none-any.whl", hash = "sha256:36734c1fd9404bea74236242ba3359b267fc930c7233b9fd086b0898825d0ac9"}, - {file = "mkdocs_material-9.5.36.tar.gz", hash = "sha256:140456f761320f72b399effc073fa3f8aac744c77b0970797c201cae2f6c967f"}, + {file = "mkdocs_material-9.5.37-py3-none-any.whl", hash = "sha256:6e8a986abad77be5edec3dd77cf1ddf2480963fb297a8e971f87a82fd464b070"}, + {file = "mkdocs_material-9.5.37.tar.gz", hash = "sha256:2c31607431ec234db124031255b0a9d4f3e1c3ecc2c47ad97ecfff0460471941"}, ] [package.dependencies] From db095386563cce8460ca8a0663067de3c15bc52d Mon Sep 17 00:00:00 2001 From: grahamhar <grahamhar@users.noreply.github.com> Date: Mon, 26 Feb 2024 20:50:59 +0000 Subject: [PATCH 368/685] fix(changelog): handle custom tag_format in changelog generation When the tag_format does not follow the allowed schemas patterns then changlog generation fails. --- commitizen/changelog.py | 33 +++++++++++++++++------ commitizen/changelog_formats/base.py | 22 ++++++++++++++- commitizen/commands/changelog.py | 9 +++---- commitizen/providers/scm_provider.py | 6 +++++ docs/tutorials/monorepo_guidance.md | 40 ++++++++++++++++++++++++++++ 5 files changed, 96 insertions(+), 14 deletions(-) create mode 100644 docs/tutorials/monorepo_guidance.md diff --git a/commitizen/changelog.py b/commitizen/changelog.py index 12d52f7b08..7da4c7a4df 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -93,16 +93,34 @@ def tag_included_in_changelog( return True -def get_version_tags(scheme: type[BaseVersion], tags: list[GitTag]) -> list[GitTag]: +def get_version_tags( + scheme: type[BaseVersion], tags: list[GitTag], tag_format: str +) -> list[GitTag]: valid_tags: list[GitTag] = [] + TAG_FORMAT_REGEXS = { + "$version": str(scheme.parser.pattern), + "$major": r"(?P<major>\d+)", + "$minor": r"(?P<minor>\d+)", + "$patch": r"(?P<patch>\d+)", + "$prerelease": r"(?P<prerelease>\w+\d+)?", + "$devrelease": r"(?P<devrelease>\.dev\d+)?", + "${version}": str(scheme.parser.pattern), + "${major}": r"(?P<major>\d+)", + "${minor}": r"(?P<minor>\d+)", + "${patch}": r"(?P<patch>\d+)", + "${prerelease}": r"(?P<prerelease>\w+\d+)?", + "${devrelease}": r"(?P<devrelease>\.dev\d+)?", + } + tag_format_regex = tag_format + for pattern, regex in TAG_FORMAT_REGEXS.items(): + tag_format_regex = tag_format_regex.replace(pattern, regex) for tag in tags: - try: - scheme(tag.name) - except InvalidVersion: - out.warn(f"InvalidVersion {tag}") - else: + if re.match(tag_format_regex, tag.name): valid_tags.append(tag) - + else: + out.warn( + f"InvalidVersion {tag.name} doesn't match configured tag format {tag_format}" + ) return valid_tags @@ -351,7 +369,6 @@ def get_oldest_and_newest_rev( oldest, newest = version.split("..") except ValueError: newest = version - newest_tag = normalize_tag(newest, tag_format=tag_format, scheme=scheme) oldest_tag = None diff --git a/commitizen/changelog_formats/base.py b/commitizen/changelog_formats/base.py index 7c802d63d4..807b3658cb 100644 --- a/commitizen/changelog_formats/base.py +++ b/commitizen/changelog_formats/base.py @@ -25,10 +25,30 @@ def __init__(self, config: BaseConfig): # See: https://bugs.python.org/issue44807 self.config = config self.encoding = self.config.settings["encoding"] + self.tag_format = self.config.settings.get("tag_format") @property def version_parser(self) -> Pattern: - return get_version_scheme(self.config).parser + version_regex = get_version_scheme(self.config).parser.pattern + if self.tag_format != "$version": + TAG_FORMAT_REGEXS = { + "$version": version_regex, + "$major": "(?P<major>\d+)", + "$minor": "(?P<minor>\d+)", + "$patch": "(?P<patch>\d+)", + "$prerelease": "(?P<prerelease>\w+\d+)?", + "$devrelease": "(?P<devrelease>\.dev\d+)?", + "${version}": version_regex, + "${major}": "(?P<major>\d+)", + "${minor}": "(?P<minor>\d+)", + "${patch}": "(?P<patch>\d+)", + "${prerelease}": "(?P<prerelease>\w+\d+)?", + "${devrelease}": "(?P<devrelease>\.dev\d+)?", + } + version_regex = self.tag_format + for pattern, regex in TAG_FORMAT_REGEXS.items(): + version_regex = version_regex.replace(pattern, regex) + return rf"{version_regex}" def get_metadata(self, filepath: str) -> Metadata: if not os.path.isfile(filepath): diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index bda7a1844f..25e644aaef 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -168,8 +168,10 @@ def __call__(self): # Don't continue if no `file_name` specified. assert self.file_name - tags = changelog.get_version_tags(self.scheme, git.get_tags()) or [] - + tags = ( + changelog.get_version_tags(self.scheme, git.get_tags(), self.tag_format) + or [] + ) end_rev = "" if self.incremental: changelog_meta = self.changelog_format.get_metadata(self.file_name) @@ -182,7 +184,6 @@ def __call__(self): start_rev = self._find_incremental_rev( strip_local_version(latest_tag_version), tags ) - if self.rev_range: start_rev, end_rev = changelog.get_oldest_and_newest_rev( tags, @@ -190,13 +191,11 @@ def __call__(self): tag_format=self.tag_format, scheme=self.scheme, ) - commits = git.get_commits(start=start_rev, end=end_rev, args="--topo-order") if not commits and ( self.current_version is None or not self.current_version.is_prerelease ): raise NoCommitsFoundError("No commits found") - tree = changelog.generate_tree_from_commits( commits, tags, diff --git a/commitizen/providers/scm_provider.py b/commitizen/providers/scm_provider.py index 00df3e4153..26ca593d27 100644 --- a/commitizen/providers/scm_provider.py +++ b/commitizen/providers/scm_provider.py @@ -29,6 +29,12 @@ class ScmProvider(VersionProvider): "$patch": r"(?P<patch>\d+)", "$prerelease": r"(?P<prerelease>\w+\d+)?", "$devrelease": r"(?P<devrelease>\.dev\d+)?", + "${version}": r"(?P<version>.+)", + "${major}": r"(?P<major>\d+)", + "${minor}": r"(?P<minor>\d+)", + "${patch}": r"(?P<patch>\d+)", + "${prerelease}": r"(?P<prerelease>\w+\d+)?", + "${devrelease}": r"(?P<devrelease>\.dev\d+)?", } def _tag_format_matcher(self) -> Callable[[str], VersionProtocol | None]: diff --git a/docs/tutorials/monorepo_guidance.md b/docs/tutorials/monorepo_guidance.md new file mode 100644 index 0000000000..5bb334d725 --- /dev/null +++ b/docs/tutorials/monorepo_guidance.md @@ -0,0 +1,40 @@ +# Configuring commitizen in a monorepo + +This tutorial assumes the monorepo layout is designed with multiple components that can be released independently of each other, +some suggested layouts: + +``` +library-a + .cz.toml +library-b + .cz.toml +``` + +``` +src + library-b + .cz.toml + library-z + .cz.toml +``` + +Each component will have its own changelog, commits will need to use scopes so only relevant commits are included in the +appropriate change log for a given component. Example config and commit for `library-b` + +```toml +[tool.commitizen] +name = "cz_customize" +version = "0.0.0" +tag_format = "${version}-library-b" # the component name can be a prefix or suffix with or without a separator +update_changelog_on_bump = true + +[tool.commitizen.customize] +changelog_pattern = "^(feat|fix)\\(library-b\\)(!)?:" #the pattern on types can be a wild card or any types you wish to include +``` + +example commit message for the above + +`fix:(library-b) Some awesome message` + +If the above is followed and the `cz bump --changelog` is run in the directory containing the component the changelog +should be generated in the same directory with only commits scoped to the component. From b0237119b0579fe3f5e42e31d2d9997954045da1 Mon Sep 17 00:00:00 2001 From: grahamhar <grahamhar@users.noreply.github.com> Date: Sat, 2 Mar 2024 14:03:36 +0000 Subject: [PATCH 369/685] test(changelog): handle custom tag_format in changelog generation --- tests/commands/test_changelog_command.py | 114 +++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index 3d9a5c5c48..5c7a8a9faa 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -1523,6 +1523,120 @@ def test_changelog_template_extras_precedance( assert changelog.read_text() == "from-command - from-config - from-plugin" +@pytest.mark.usefixtures("tmp_commitizen_project") +@pytest.mark.freeze_time("2021-06-11") +def test_changelog_only_tag_matching_tag_format_included_prefix( + mocker: MockFixture, + changelog_path: Path, + config_path: Path, +): + with open(config_path, "a", encoding="utf-8") as f: + f.write('\ntag_format = "custom${version}"\n') + create_file_and_commit("feat: new file") + git.tag("v0.2.0") + create_file_and_commit("feat: another new file") + git.tag("0.2.0") + git.tag("random0.2.0") + testargs = ["cz", "bump", "--changelog", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + wait_for_tag() + create_file_and_commit("feat: another new file") + cli.main() + with open(changelog_path) as f: + out = f.read() + assert out.startswith("## custom0.3.0 (2021-06-11)") + assert "## v0.2.0 (2021-06-11)" not in out + assert "## 0.2.0 (2021-06-11)" not in out + + +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_changelog_only_tag_matching_tag_format_included_prefix_sep( + mocker: MockFixture, + changelog_path: Path, + config_path: Path, +): + with open(config_path, "a", encoding="utf-8") as f: + f.write('\ntag_format = "custom-${version}"\n') + create_file_and_commit("feat: new file") + git.tag("v0.2.0") + create_file_and_commit("feat: another new file") + git.tag("0.2.0") + git.tag("random0.2.0") + wait_for_tag() + testargs = ["cz", "bump", "--changelog", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + with open(changelog_path) as f: + out = f.read() + create_file_and_commit("feat: new version another new file") + create_file_and_commit("feat: new version some new file") + testargs = ["cz", "bump", "--changelog"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + with open(changelog_path) as f: + out = f.read() + assert out.startswith("## custom-0.3.0") + assert "## v0.2.0" not in out + assert "## 0.2.0" not in out + + +@pytest.mark.usefixtures("tmp_commitizen_project") +@pytest.mark.freeze_time("2021-06-11") +def test_changelog_only_tag_matching_tag_format_included_suffix( + mocker: MockFixture, + changelog_path: Path, + config_path: Path, +): + with open(config_path, "a", encoding="utf-8") as f: + f.write('\ntag_format = "${version}custom"\n') + create_file_and_commit("feat: new file") + git.tag("v0.2.0") + create_file_and_commit("feat: another new file") + git.tag("0.2.0") + git.tag("random0.2.0") + testargs = ["cz", "bump", "--changelog", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + wait_for_tag() + create_file_and_commit("feat: another new file") + cli.main() + wait_for_tag() + with open(changelog_path) as f: + out = f.read() + assert out.startswith("## 0.3.0custom (2021-06-11)") + assert "## v0.2.0 (2021-06-11)" not in out + assert "## 0.2.0 (2021-06-11)" not in out + + +@pytest.mark.usefixtures("tmp_commitizen_project") +@pytest.mark.freeze_time("2021-06-11") +def test_changelog_only_tag_matching_tag_format_included_suffix_sep( + mocker: MockFixture, + changelog_path: Path, + config_path: Path, +): + with open(config_path, "a", encoding="utf-8") as f: + f.write('\ntag_format = "${version}-custom"\n') + create_file_and_commit("feat: new file") + git.tag("v0.2.0") + create_file_and_commit("feat: another new file") + git.tag("0.2.0") + git.tag("random0.2.0") + testargs = ["cz", "bump", "--changelog", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + wait_for_tag() + create_file_and_commit("feat: another new file") + cli.main() + wait_for_tag() + with open(changelog_path) as f: + out = f.read() + assert out.startswith("## 0.3.0-custom (2021-06-11)") + assert "## v0.2.0 (2021-06-11)" not in out + assert "## 0.2.0 (2021-06-11)" not in out + + def test_changelog_template_extra_quotes( mocker: MockFixture, tmp_commitizen_project: Path, From 12c3f311f52b87b8d607b2e12319dca18fe466a4 Mon Sep 17 00:00:00 2001 From: grahamhar <grahamhar@users.noreply.github.com> Date: Mon, 1 Apr 2024 18:38:40 +0100 Subject: [PATCH 370/685] fix(changelog): Handle tag format without version pattern --- commitizen/changelog.py | 4 +- commitizen/changelog_formats/asciidoc.py | 14 +++- commitizen/changelog_formats/base.py | 40 +++++------ commitizen/changelog_formats/markdown.py | 16 ++++- .../changelog_formats/restructuredtext.py | 24 +++++-- commitizen/changelog_formats/textile.py | 16 ++++- tests/test_changelog_format_asciidoc.py | 61 +++++++++++++++++ tests/test_changelog_format_markdown.py | 67 +++++++++++++++++++ .../test_changelog_format_restructuredtext.py | 66 ++++++++++++++++++ tests/test_changelog_format_textile.py | 55 +++++++++++++++ 10 files changed, 333 insertions(+), 30 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index 7da4c7a4df..fc9d567002 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -98,13 +98,13 @@ def get_version_tags( ) -> list[GitTag]: valid_tags: list[GitTag] = [] TAG_FORMAT_REGEXS = { - "$version": str(scheme.parser.pattern), + "$version": scheme.parser.pattern, "$major": r"(?P<major>\d+)", "$minor": r"(?P<minor>\d+)", "$patch": r"(?P<patch>\d+)", "$prerelease": r"(?P<prerelease>\w+\d+)?", "$devrelease": r"(?P<devrelease>\.dev\d+)?", - "${version}": str(scheme.parser.pattern), + "${version}": scheme.parser.pattern, "${major}": r"(?P<major>\d+)", "${minor}": r"(?P<minor>\d+)", "${patch}": r"(?P<patch>\d+)", diff --git a/commitizen/changelog_formats/asciidoc.py b/commitizen/changelog_formats/asciidoc.py index d738926f6e..bca7464b06 100644 --- a/commitizen/changelog_formats/asciidoc.py +++ b/commitizen/changelog_formats/asciidoc.py @@ -18,7 +18,19 @@ def parse_version_from_title(self, line: str) -> str | None: matches = list(re.finditer(self.version_parser, m.group("title"))) if not matches: return None - return matches[-1].group("version") + if "version" in matches[-1].groupdict(): + return matches[-1].group("version") + partial_matches = matches[-1].groupdict() + try: + partial_version = f"{partial_matches['major']}.{partial_matches['minor']}.{partial_matches['patch']}" + except KeyError: + return None + + if partial_matches.get("prerelease"): + partial_version += f"-{partial_matches['prerelease']}" + if partial_matches.get("devrelease"): + partial_version += f"{partial_matches['devrelease']}" + return partial_version def parse_title_level(self, line: str) -> int | None: m = self.RE_TITLE.match(line) diff --git a/commitizen/changelog_formats/base.py b/commitizen/changelog_formats/base.py index 807b3658cb..8c41c7136a 100644 --- a/commitizen/changelog_formats/base.py +++ b/commitizen/changelog_formats/base.py @@ -1,6 +1,7 @@ from __future__ import annotations import os +import re from abc import ABCMeta from re import Pattern from typing import IO, Any, ClassVar @@ -25,30 +26,29 @@ def __init__(self, config: BaseConfig): # See: https://bugs.python.org/issue44807 self.config = config self.encoding = self.config.settings["encoding"] - self.tag_format = self.config.settings.get("tag_format") + self.tag_format = self.config.settings["tag_format"] @property def version_parser(self) -> Pattern: + tag_regex: str = self.tag_format version_regex = get_version_scheme(self.config).parser.pattern - if self.tag_format != "$version": - TAG_FORMAT_REGEXS = { - "$version": version_regex, - "$major": "(?P<major>\d+)", - "$minor": "(?P<minor>\d+)", - "$patch": "(?P<patch>\d+)", - "$prerelease": "(?P<prerelease>\w+\d+)?", - "$devrelease": "(?P<devrelease>\.dev\d+)?", - "${version}": version_regex, - "${major}": "(?P<major>\d+)", - "${minor}": "(?P<minor>\d+)", - "${patch}": "(?P<patch>\d+)", - "${prerelease}": "(?P<prerelease>\w+\d+)?", - "${devrelease}": "(?P<devrelease>\.dev\d+)?", - } - version_regex = self.tag_format - for pattern, regex in TAG_FORMAT_REGEXS.items(): - version_regex = version_regex.replace(pattern, regex) - return rf"{version_regex}" + TAG_FORMAT_REGEXS = { + "$version": version_regex, + "$major": r"(?P<major>\d+)", + "$minor": r"(?P<minor>\d+)", + "$patch": r"(?P<patch>\d+)", + "$prerelease": r"(?P<prerelease>\w+\d+)?", + "$devrelease": r"(?P<devrelease>\.dev\d+)?", + "${version}": version_regex, + "${major}": r"(?P<major>\d+)", + "${minor}": r"(?P<minor>\d+)", + "${patch}": r"(?P<patch>\d+)", + "${prerelease}": r"(?P<prerelease>\w+\d+)?", + "${devrelease}": r"(?P<devrelease>\.dev\d+)?", + } + for pattern, regex in TAG_FORMAT_REGEXS.items(): + tag_regex = tag_regex.replace(pattern, regex) + return re.compile(tag_regex) def get_metadata(self, filepath: str) -> Metadata: if not os.path.isfile(filepath): diff --git a/commitizen/changelog_formats/markdown.py b/commitizen/changelog_formats/markdown.py index a5a0f42de3..2e9aa23663 100644 --- a/commitizen/changelog_formats/markdown.py +++ b/commitizen/changelog_formats/markdown.py @@ -19,7 +19,21 @@ def parse_version_from_title(self, line: str) -> str | None: m = re.search(self.version_parser, m.group("title")) if not m: return None - return m.group("version") + if "version" in m.groupdict(): + return m.group("version") + matches = m.groupdict() + try: + partial_version = ( + f"{matches['major']}.{matches['minor']}.{matches['patch']}" + ) + except KeyError: + return None + + if matches.get("prerelease"): + partial_version += f"-{matches['prerelease']}" + if matches.get("devrelease"): + partial_version += f"{matches['devrelease']}" + return partial_version def parse_title_level(self, line: str) -> int | None: m = self.RE_TITLE.match(line) diff --git a/commitizen/changelog_formats/restructuredtext.py b/commitizen/changelog_formats/restructuredtext.py index 37acf81ef3..be07322c9b 100644 --- a/commitizen/changelog_formats/restructuredtext.py +++ b/commitizen/changelog_formats/restructuredtext.py @@ -46,7 +46,6 @@ def get_metadata_from_file(self, file: IO[Any]) -> Metadata: third = third.strip().lower() title: str | None = None kind: TitleKind | None = None - if self.is_overlined_title(first, second, third): title = second kind = (first[0], third[0]) @@ -67,10 +66,25 @@ def get_metadata_from_file(self, file: IO[Any]) -> Metadata: # Try to find the latest release done m = re.search(self.version_parser, title) if m: - version = m.group("version") - meta.latest_version = version - meta.latest_version_position = index - break # there's no need for more info + matches = m.groupdict() + if "version" in matches: + version = m.group("version") + meta.latest_version = version + meta.latest_version_position = index + break # there's no need for more info + try: + partial_version = ( + f"{matches['major']}.{matches['minor']}.{matches['patch']}" + ) + if matches.get("prerelease"): + partial_version += f"-{matches['prerelease']}" + if matches.get("devrelease"): + partial_version += f"{matches['devrelease']}" + meta.latest_version = partial_version + meta.latest_version_position = index + break + except KeyError: + pass if meta.unreleased_start is not None and meta.unreleased_end is None: meta.unreleased_end = ( meta.latest_version_position if meta.latest_version else index + 1 diff --git a/commitizen/changelog_formats/textile.py b/commitizen/changelog_formats/textile.py index 80118cdb3c..4f34b522fa 100644 --- a/commitizen/changelog_formats/textile.py +++ b/commitizen/changelog_formats/textile.py @@ -16,7 +16,21 @@ def parse_version_from_title(self, line: str) -> str | None: m = re.search(self.version_parser, line) if not m: return None - return m.group("version") + if "version" in m.groupdict(): + return m.group("version") + matches = m.groupdict() + try: + partial_version = ( + f"{matches['major']}.{matches['minor']}.{matches['patch']}" + ) + except KeyError: + return None + + if matches.get("prerelease"): + partial_version += f"-{matches['prerelease']}" + if matches.get("devrelease"): + partial_version += f"{matches['devrelease']}" + return partial_version def parse_title_level(self, line: str) -> int | None: m = self.RE_TITLE.match(line) diff --git a/tests/test_changelog_format_asciidoc.py b/tests/test_changelog_format_asciidoc.py index 89740d2147..0c5930df46 100644 --- a/tests/test_changelog_format_asciidoc.py +++ b/tests/test_changelog_format_asciidoc.py @@ -72,12 +72,42 @@ unreleased_start=1, ) +CHANGELOG_E = """ += Changelog + +All notable changes to this project will be documented in this file. + +The format is based on https://keepachangelog.com/en/1.0.0/[Keep a Changelog], +and this project adheres to https://semver.org/spec/v2.0.0.html[Semantic Versioning]. + +== [Unreleased] +* Start using "changelog" over "change log" since it's the common usage. + +== [{tag_formatted_version}] - 2017-06-20 +=== Added +* New visual identity by https://github.com/tylerfortune8[@tylerfortune8]. +* Version navigation. +""".strip() + +EXPECTED_E = Metadata( + latest_version="1.0.0", + latest_version_position=10, + unreleased_end=10, + unreleased_start=7, +) + @pytest.fixture def format(config: BaseConfig) -> AsciiDoc: return AsciiDoc(config) +@pytest.fixture +def format_with_tags(config: BaseConfig, request) -> AsciiDoc: + config.settings["tag_format"] = request.param + return AsciiDoc(config) + + VERSIONS_EXAMPLES = [ ("== [1.0.0] - 2017-06-20", "1.0.0"), ( @@ -135,3 +165,34 @@ def test_get_matadata( changelog.write_text(content) assert format.get_metadata(str(changelog)) == expected + + +@pytest.mark.parametrize( + "format_with_tags, tag_string, expected, ", + ( + pytest.param("${version}-example", "1.0.0-example", "1.0.0"), + pytest.param("${version}example", "1.0.0example", "1.0.0"), + pytest.param("example${version}", "example1.0.0", "1.0.0"), + pytest.param("example-${version}", "example-1.0.0", "1.0.0"), + pytest.param("example-${major}-${minor}-${patch}", "example-1-0-0", "1.0.0"), + pytest.param("example-${major}-${minor}", "example-1-0-0", None), + pytest.param( + "${major}-${minor}-${patch}-${prerelease}-example", + "1-0-0-rc1-example", + "1.0.0-rc1", + ), + pytest.param( + "${major}-${minor}-${patch}-${prerelease}${devrelease}-example", + "1-0-0-a1.dev1-example", + "1.0.0-a1.dev1", + ), + ), + indirect=["format_with_tags"], +) +def test_get_metadata_custom_tag_format( + tmp_path: Path, format_with_tags: AsciiDoc, tag_string: str, expected: Metadata +): + content = CHANGELOG_E.format(tag_formatted_version=tag_string) + changelog = tmp_path / format_with_tags.default_changelog_file + changelog.write_text(content) + assert format_with_tags.get_metadata(str(changelog)).latest_version == expected diff --git a/tests/test_changelog_format_markdown.py b/tests/test_changelog_format_markdown.py index ab7c65453c..52612b8e2b 100644 --- a/tests/test_changelog_format_markdown.py +++ b/tests/test_changelog_format_markdown.py @@ -72,12 +72,42 @@ unreleased_start=1, ) +CHANGELOG_E = """ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] +- Start using "changelog" over "change log" since it's the common usage. + +## {tag_formatted_version} - 2017-06-20 +### Added +- New visual identity by [@tylerfortune8](https://github.com/tylerfortune8). +- Version navigation. +""".strip() + +EXPECTED_E = Metadata( + latest_version="1.0.0", + latest_version_position=10, + unreleased_end=10, + unreleased_start=7, +) + @pytest.fixture def format(config: BaseConfig) -> Markdown: return Markdown(config) +@pytest.fixture +def format_with_tags(config: BaseConfig, request) -> Markdown: + config.settings["tag_format"] = request.param + return Markdown(config) + + VERSIONS_EXAMPLES = [ ("## [1.0.0] - 2017-06-20", "1.0.0"), ( @@ -135,3 +165,40 @@ def test_get_matadata( changelog.write_text(content) assert format.get_metadata(str(changelog)) == expected + + +@pytest.mark.parametrize( + "format_with_tags, tag_string, expected, ", + ( + pytest.param("${version}-example", "1.0.0-example", "1.0.0"), + pytest.param("${version}example", "1.0.0example", "1.0.0"), + pytest.param("example${version}", "example1.0.0", "1.0.0"), + pytest.param("example-${version}", "example-1.0.0", "1.0.0"), + pytest.param("example-${major}-${minor}-${patch}", "example-1-0-0", "1.0.0"), + pytest.param("example-${major}-${minor}", "example-1-0-0", None), + pytest.param( + "${major}-${minor}-${patch}-${prerelease}-example", + "1-0-0-rc1-example", + "1.0.0-rc1", + ), + pytest.param( + "${major}-${minor}-${patch}-${prerelease}-example", + "1-0-0-a1-example", + "1.0.0-a1", + ), + pytest.param( + "${major}-${minor}-${patch}-${prerelease}${devrelease}-example", + "1-0-0-a1.dev1-example", + "1.0.0-a1.dev1", + ), + ), + indirect=["format_with_tags"], +) +def test_get_metadata_custom_tag_format( + tmp_path: Path, format_with_tags: Markdown, tag_string: str, expected: Metadata +): + content = CHANGELOG_E.format(tag_formatted_version=tag_string) + changelog = tmp_path / format_with_tags.default_changelog_file + changelog.write_text(content) + + assert format_with_tags.get_metadata(str(changelog)).latest_version == expected diff --git a/tests/test_changelog_format_restructuredtext.py b/tests/test_changelog_format_restructuredtext.py index 46a11ebcdf..11356ae28f 100644 --- a/tests/test_changelog_format_restructuredtext.py +++ b/tests/test_changelog_format_restructuredtext.py @@ -273,12 +273,39 @@ def case( """, ) +CHANGELOG = """ +Changelog + ######### + + All notable changes to this project will be documented in this file. + + The format is based on `Keep a Changelog <https://keepachangelog.com/en/1.0.0/>`, + and this project adheres to `Semantic Versioning <https://semver.org/spec/v2.0.0.html>`. + + Unreleased + ========== + * Start using "changelog" over "change log" since it's the common usage. + + {tag_formatted_version} - 2017-06-20 + {underline} + Added + ----- + * New visual identity by `@tylerfortune8 <https://github.com/tylerfortune8>`. + * Version navigation. +""".strip() + @pytest.fixture def format(config: BaseConfig) -> RestructuredText: return RestructuredText(config) +@pytest.fixture +def format_with_tags(config: BaseConfig, request) -> RestructuredText: + config.settings["tag_format"] = request.param + return RestructuredText(config) + + @pytest.mark.parametrize("content, expected", CASES) def test_get_matadata( tmp_path: Path, format: RestructuredText, content: str, expected: Metadata @@ -308,3 +335,42 @@ def test_is_overlined_title(format: RestructuredText, text: str, expected: bool) _, first, second, third = dedent(text).splitlines() assert format.is_overlined_title(first, second, third) is expected + + +@pytest.mark.parametrize( + "format_with_tags, tag_string, expected, ", + ( + pytest.param("${version}-example", "1.0.0-example", "1.0.0"), + pytest.param("${version}", "1.0.0", "1.0.0"), + pytest.param("${version}example", "1.0.0example", "1.0.0"), + pytest.param("example${version}", "example1.0.0", "1.0.0"), + pytest.param("example-${version}", "example-1.0.0", "1.0.0"), + pytest.param("example-${major}-${minor}-${patch}", "example-1-0-0", "1.0.0"), + pytest.param("example-${major}-${minor}", "example-1-0-0", None), + pytest.param( + "${major}-${minor}-${patch}-${prerelease}-example", + "1-0-0-rc1-example", + "1.0.0-rc1", + ), + pytest.param( + "${major}-${minor}-${patch}-${prerelease}${devrelease}-example", + "1-0-0-a1.dev1-example", + "1.0.0-a1.dev1", + ), + ), + indirect=["format_with_tags"], +) +def test_get_metadata_custom_tag_format( + tmp_path: Path, + format_with_tags: RestructuredText, + tag_string: str, + expected: Metadata, +): + content = CHANGELOG.format( + tag_formatted_version=tag_string, + underline="=" * len(tag_string) + "=============", + ) + changelog = tmp_path / format_with_tags.default_changelog_file + changelog.write_text(content) + + assert format_with_tags.get_metadata(str(changelog)).latest_version == expected diff --git a/tests/test_changelog_format_textile.py b/tests/test_changelog_format_textile.py index e382e1c746..3fac5c1756 100644 --- a/tests/test_changelog_format_textile.py +++ b/tests/test_changelog_format_textile.py @@ -72,12 +72,35 @@ unreleased_start=1, ) +CHANGELOG_E = """ +h1. Changelog + +All notable changes to this project will be documented in this file. + +The format is based on "Keep a Changelog":https://keepachangelog.com/en/1.0.0/, +and this project adheres to "Semantic Versioning":https://semver.org/spec/v2.0.0.html. + +h2. [Unreleased] +- Start using "changelog" over "change log" since it's the common usage. + +h2. [{tag_formatted_version}] - 2017-06-20 +h3. Added +* New visual identity by [@tylerfortune8](https://github.com/tylerfortune8). +* Version navigation. +""".strip() + @pytest.fixture def format(config: BaseConfig) -> Textile: return Textile(config) +@pytest.fixture +def format_with_tags(config: BaseConfig, request) -> Textile: + config.settings["tag_format"] = request.param + return Textile(config) + + VERSIONS_EXAMPLES = [ ("h2. [1.0.0] - 2017-06-20", "1.0.0"), ( @@ -135,3 +158,35 @@ def test_get_matadata( changelog.write_text(content) assert format.get_metadata(str(changelog)) == expected + + +@pytest.mark.parametrize( + "format_with_tags, tag_string, expected, ", + ( + pytest.param("${version}-example", "1.0.0-example", "1.0.0"), + pytest.param("${version}example", "1.0.0example", "1.0.0"), + pytest.param("example${version}", "example1.0.0", "1.0.0"), + pytest.param("example-${version}", "example-1.0.0", "1.0.0"), + pytest.param("example-${major}-${minor}-${patch}", "example-1-0-0", "1.0.0"), + pytest.param("example-${major}-${minor}", "example-1-0-0", None), + pytest.param( + "${major}-${minor}-${patch}-${prerelease}-example", + "1-0-0-rc1-example", + "1.0.0-rc1", + ), + pytest.param( + "${major}-${minor}-${patch}-${prerelease}${devrelease}-example", + "1-0-0-a1.dev1-example", + "1.0.0-a1.dev1", + ), + ), + indirect=["format_with_tags"], +) +def test_get_metadata_custom_tag_format( + tmp_path: Path, format_with_tags: Textile, tag_string: str, expected: Metadata +): + content = CHANGELOG_E.format(tag_formatted_version=tag_string) + changelog = tmp_path / format_with_tags.default_changelog_file + changelog.write_text(content) + + assert format_with_tags.get_metadata(str(changelog)).latest_version == expected From ca3865f143fc116d10ef2a12ed677ba43158c9ae Mon Sep 17 00:00:00 2001 From: grahamhar <grahamhar@users.noreply.github.com> Date: Sat, 20 Apr 2024 11:21:18 +0100 Subject: [PATCH 371/685] fix(changelog): Factorized TAG_FORMAT_REGEXES --- commitizen/changelog.py | 16 ++-------------- commitizen/changelog_formats/base.py | 16 ++-------------- commitizen/defaults.py | 17 +++++++++++++++++ commitizen/providers/scm_provider.py | 16 ++-------------- 4 files changed, 23 insertions(+), 42 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index fc9d567002..32a66c47eb 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -44,6 +44,7 @@ from commitizen import out from commitizen.bump import normalize_tag from commitizen.cz.base import ChangelogReleaseHook +from commitizen.defaults import get_tag_regexes from commitizen.exceptions import InvalidConfigurationError, NoCommitsFoundError from commitizen.git import GitCommit, GitTag from commitizen.version_schemes import ( @@ -97,20 +98,7 @@ def get_version_tags( scheme: type[BaseVersion], tags: list[GitTag], tag_format: str ) -> list[GitTag]: valid_tags: list[GitTag] = [] - TAG_FORMAT_REGEXS = { - "$version": scheme.parser.pattern, - "$major": r"(?P<major>\d+)", - "$minor": r"(?P<minor>\d+)", - "$patch": r"(?P<patch>\d+)", - "$prerelease": r"(?P<prerelease>\w+\d+)?", - "$devrelease": r"(?P<devrelease>\.dev\d+)?", - "${version}": scheme.parser.pattern, - "${major}": r"(?P<major>\d+)", - "${minor}": r"(?P<minor>\d+)", - "${patch}": r"(?P<patch>\d+)", - "${prerelease}": r"(?P<prerelease>\w+\d+)?", - "${devrelease}": r"(?P<devrelease>\.dev\d+)?", - } + TAG_FORMAT_REGEXS = get_tag_regexes(scheme.parser.pattern) tag_format_regex = tag_format for pattern, regex in TAG_FORMAT_REGEXS.items(): tag_format_regex = tag_format_regex.replace(pattern, regex) diff --git a/commitizen/changelog_formats/base.py b/commitizen/changelog_formats/base.py index 8c41c7136a..415c404c91 100644 --- a/commitizen/changelog_formats/base.py +++ b/commitizen/changelog_formats/base.py @@ -9,6 +9,7 @@ from commitizen.changelog import Metadata from commitizen.config.base_config import BaseConfig from commitizen.version_schemes import get_version_scheme +from commitizen.defaults import get_tag_regexes from . import ChangelogFormat @@ -32,20 +33,7 @@ def __init__(self, config: BaseConfig): def version_parser(self) -> Pattern: tag_regex: str = self.tag_format version_regex = get_version_scheme(self.config).parser.pattern - TAG_FORMAT_REGEXS = { - "$version": version_regex, - "$major": r"(?P<major>\d+)", - "$minor": r"(?P<minor>\d+)", - "$patch": r"(?P<patch>\d+)", - "$prerelease": r"(?P<prerelease>\w+\d+)?", - "$devrelease": r"(?P<devrelease>\.dev\d+)?", - "${version}": version_regex, - "${major}": r"(?P<major>\d+)", - "${minor}": r"(?P<minor>\d+)", - "${patch}": r"(?P<patch>\d+)", - "${prerelease}": r"(?P<prerelease>\w+\d+)?", - "${devrelease}": r"(?P<devrelease>\.dev\d+)?", - } + TAG_FORMAT_REGEXS = get_tag_regexes(version_regex) for pattern, regex in TAG_FORMAT_REGEXS.items(): tag_regex = tag_regex.replace(pattern, regex) return re.compile(tag_regex) diff --git a/commitizen/defaults.py b/commitizen/defaults.py index e4363f4ab0..0f857f264a 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -132,3 +132,20 @@ class Settings(TypedDict, total=False): ) change_type_order = ["BREAKING CHANGE", "Feat", "Fix", "Refactor", "Perf"] bump_message = "bump: version $current_version → $new_version" + + +def get_tag_regexes(version_regex: str) -> dict[str | Any, str | Any]: + return { + "$version": version_regex, + "$major": r"(?P<major>\d+)", + "$minor": r"(?P<minor>\d+)", + "$patch": r"(?P<patch>\d+)", + "$prerelease": r"(?P<prerelease>\w+\d+)?", + "$devrelease": r"(?P<devrelease>\.dev\d+)?", + "${version}": version_regex, + "${major}": r"(?P<major>\d+)", + "${minor}": r"(?P<minor>\d+)", + "${patch}": r"(?P<patch>\d+)", + "${prerelease}": r"(?P<prerelease>\w+\d+)?", + "${devrelease}": r"(?P<devrelease>\.dev\d+)?", + } diff --git a/commitizen/providers/scm_provider.py b/commitizen/providers/scm_provider.py index 26ca593d27..33e470cfc6 100644 --- a/commitizen/providers/scm_provider.py +++ b/commitizen/providers/scm_provider.py @@ -3,6 +3,7 @@ import re from typing import Callable +from commitizen.defaults import get_tag_regexes from commitizen.git import get_tags from commitizen.providers.base_provider import VersionProvider from commitizen.version_schemes import ( @@ -22,20 +23,7 @@ class ScmProvider(VersionProvider): It is meant for `setuptools-scm` or any package manager `*-scm` provider. """ - TAG_FORMAT_REGEXS = { - "$version": r"(?P<version>.+)", - "$major": r"(?P<major>\d+)", - "$minor": r"(?P<minor>\d+)", - "$patch": r"(?P<patch>\d+)", - "$prerelease": r"(?P<prerelease>\w+\d+)?", - "$devrelease": r"(?P<devrelease>\.dev\d+)?", - "${version}": r"(?P<version>.+)", - "${major}": r"(?P<major>\d+)", - "${minor}": r"(?P<minor>\d+)", - "${patch}": r"(?P<patch>\d+)", - "${prerelease}": r"(?P<prerelease>\w+\d+)?", - "${devrelease}": r"(?P<devrelease>\.dev\d+)?", - } + TAG_FORMAT_REGEXS = get_tag_regexes(r"(?P<version>.+)") def _tag_format_matcher(self) -> Callable[[str], VersionProtocol | None]: version_scheme = get_version_scheme(self.config) From 76f7fcb86f3298cc861488e6a64d5720bb462883 Mon Sep 17 00:00:00 2001 From: grahamhar <grahamhar@users.noreply.github.com> Date: Sat, 20 Apr 2024 11:23:52 +0100 Subject: [PATCH 372/685] docs(bump): Document the use of tag_format variables with curly brackets --- docs/commands/bump.md | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/docs/commands/bump.md b/docs/commands/bump.md index efb5b0881d..ed00193241 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -414,18 +414,24 @@ In your `pyproject.toml` or `.cz.toml` tag_format = "v$major.$minor.$patch$prerelease" ``` -The variables must be preceded by a `$` sign. Default is `$version`. +The variables must be preceded by a `$` sign and optionally can be wrapped in `{}` . Default is `$version`. Supported variables: -| Variable | Description | -| ------------- | ------------------------------------------- | -| `$version` | full generated version | -| `$major` | MAJOR increment | -| `$minor` | MINOR increment | -| `$patch` | PATCH increment | -| `$prerelease` | Prerelease (alpha, beta, release candidate) | -| `$devrelease` | Development release | +| Variable | Description | +|-----------------|---------------------------------------------| +| `$version` | full generated version | +| `$major` | MAJOR increment | +| `$minor` | MINOR increment | +| `$patch` | PATCH increment | +| `$prerelease` | Prerelease (alpha, beta, release candidate) | +| `$devrelease` | Development release | +| `${version}` | full generated version | +| `${major}` | MAJOR increment | +| `${minor}` | MINOR increment | +| `${patch}` | PATCH increment | +| `${prerelease}` | Prerelease (alpha, beta, release candidate) | +| `${devrelease}` | Development release | --- From 916b5aa675f2219a3ca773602907274783e18686 Mon Sep 17 00:00:00 2001 From: Graham Hargreaves <grahamhar@users.noreply.github.com> Date: Sat, 27 Apr 2024 12:45:29 +0100 Subject: [PATCH 373/685] refactor: Use format strings Co-authored-by: Wei Lee <weilee.rx@gmail.com> --- commitizen/changelog_formats/asciidoc.py | 4 ++-- commitizen/changelog_formats/base.py | 2 +- commitizen/changelog_formats/markdown.py | 4 ++-- .../changelog_formats/restructuredtext.py | 8 +++++-- commitizen/changelog_formats/textile.py | 17 ++++++++------ commitizen/defaults.py | 4 +++- docs/commands/bump.md | 22 +++++++------------ docs/tutorials/monorepo_guidance.md | 21 +++++++++--------- tests/commands/test_changelog_command.py | 2 ++ 9 files changed, 45 insertions(+), 39 deletions(-) diff --git a/commitizen/changelog_formats/asciidoc.py b/commitizen/changelog_formats/asciidoc.py index bca7464b06..6007a56d16 100644 --- a/commitizen/changelog_formats/asciidoc.py +++ b/commitizen/changelog_formats/asciidoc.py @@ -27,9 +27,9 @@ def parse_version_from_title(self, line: str) -> str | None: return None if partial_matches.get("prerelease"): - partial_version += f"-{partial_matches['prerelease']}" + partial_version = f"{partial_version}-{partial_matches['prerelease']}" if partial_matches.get("devrelease"): - partial_version += f"{partial_matches['devrelease']}" + partial_version = f"{partial_version}{partial_matches['devrelease']}" return partial_version def parse_title_level(self, line: str) -> int | None: diff --git a/commitizen/changelog_formats/base.py b/commitizen/changelog_formats/base.py index 415c404c91..53527a060c 100644 --- a/commitizen/changelog_formats/base.py +++ b/commitizen/changelog_formats/base.py @@ -8,8 +8,8 @@ from commitizen.changelog import Metadata from commitizen.config.base_config import BaseConfig -from commitizen.version_schemes import get_version_scheme from commitizen.defaults import get_tag_regexes +from commitizen.version_schemes import get_version_scheme from . import ChangelogFormat diff --git a/commitizen/changelog_formats/markdown.py b/commitizen/changelog_formats/markdown.py index 2e9aa23663..29c1cce54a 100644 --- a/commitizen/changelog_formats/markdown.py +++ b/commitizen/changelog_formats/markdown.py @@ -30,9 +30,9 @@ def parse_version_from_title(self, line: str) -> str | None: return None if matches.get("prerelease"): - partial_version += f"-{matches['prerelease']}" + partial_version = f"{partial_version}-{matches['prerelease']}" if matches.get("devrelease"): - partial_version += f"{matches['devrelease']}" + partial_version = f"{partial_version}{matches['devrelease']}" return partial_version def parse_title_level(self, line: str) -> int | None: diff --git a/commitizen/changelog_formats/restructuredtext.py b/commitizen/changelog_formats/restructuredtext.py index be07322c9b..09d032400c 100644 --- a/commitizen/changelog_formats/restructuredtext.py +++ b/commitizen/changelog_formats/restructuredtext.py @@ -77,9 +77,13 @@ def get_metadata_from_file(self, file: IO[Any]) -> Metadata: f"{matches['major']}.{matches['minor']}.{matches['patch']}" ) if matches.get("prerelease"): - partial_version += f"-{matches['prerelease']}" + partial_version = ( + f"{partial_version}-{matches['prerelease']}" + ) if matches.get("devrelease"): - partial_version += f"{matches['devrelease']}" + partial_version = ( + f"{partial_version}{matches['devrelease']}" + ) meta.latest_version = partial_version meta.latest_version_position = index break diff --git a/commitizen/changelog_formats/textile.py b/commitizen/changelog_formats/textile.py index 4f34b522fa..8750f0056c 100644 --- a/commitizen/changelog_formats/textile.py +++ b/commitizen/changelog_formats/textile.py @@ -19,17 +19,20 @@ def parse_version_from_title(self, line: str) -> str | None: if "version" in m.groupdict(): return m.group("version") matches = m.groupdict() - try: - partial_version = ( - f"{matches['major']}.{matches['minor']}.{matches['patch']}" - ) - except KeyError: + if not all( + [ + version_segment in matches + for version_segment in ("major", "minor", "patch") + ] + ): return None + partial_version = f"{matches['major']}.{matches['minor']}.{matches['patch']}" + if matches.get("prerelease"): - partial_version += f"-{matches['prerelease']}" + partial_version = f"{partial_version}-{matches['prerelease']}" if matches.get("devrelease"): - partial_version += f"{matches['devrelease']}" + partial_version = f"{partial_version}{matches['devrelease']}" return partial_version def parse_title_level(self, line: str) -> int | None: diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 0f857f264a..2d092d5004 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -134,7 +134,9 @@ class Settings(TypedDict, total=False): bump_message = "bump: version $current_version → $new_version" -def get_tag_regexes(version_regex: str) -> dict[str | Any, str | Any]: +def get_tag_regexes( + version_regex: str, +) -> dict[str, str]: return { "$version": version_regex, "$major": r"(?P<major>\d+)", diff --git a/docs/commands/bump.md b/docs/commands/bump.md index ed00193241..afb43230e4 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -418,20 +418,14 @@ The variables must be preceded by a `$` sign and optionally can be wrapped in `{ Supported variables: -| Variable | Description | -|-----------------|---------------------------------------------| -| `$version` | full generated version | -| `$major` | MAJOR increment | -| `$minor` | MINOR increment | -| `$patch` | PATCH increment | -| `$prerelease` | Prerelease (alpha, beta, release candidate) | -| `$devrelease` | Development release | -| `${version}` | full generated version | -| `${major}` | MAJOR increment | -| `${minor}` | MINOR increment | -| `${patch}` | PATCH increment | -| `${prerelease}` | Prerelease (alpha, beta, release candidate) | -| `${devrelease}` | Development release | +| Variable | Description | +|--------------------------------|---------------------------------------------| +| `$version`, `${version}` | full generated version | +| `$major`, `${major}` | MAJOR increment | +| `$minor`, `${minor}` | MINOR increment | +| `$patch`, `${patch}` | PATCH increment | +| `$prerelease`, `${prerelease}` | Prerelease (alpha, beta, release candidate) | +| `$devrelease`, ${devrelease}` | Development release | --- diff --git a/docs/tutorials/monorepo_guidance.md b/docs/tutorials/monorepo_guidance.md index 5bb334d725..c4345d6bc2 100644 --- a/docs/tutorials/monorepo_guidance.md +++ b/docs/tutorials/monorepo_guidance.md @@ -1,21 +1,22 @@ # Configuring commitizen in a monorepo -This tutorial assumes the monorepo layout is designed with multiple components that can be released independently of each other, -some suggested layouts: +This tutorial assumes the monorepo layout is designed with multiple components that can be released independently of each +other, it also assumes that conventional commits with scopes are in use. Some suggested layouts: ``` -library-a - .cz.toml -library-b - .cz.toml +. +├── library-b +│   └── .cz.toml +└── library-z + └── .cz.toml ``` ``` src - library-b - .cz.toml - library-z - .cz.toml +├── library-b +│   └── .cz.toml +└── library-z + └── .cz.toml ``` Each component will have its own changelog, commits will need to use scopes so only relevant commits are included in the diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index 5c7a8a9faa..bc0d6c6a28 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -1597,9 +1597,11 @@ def test_changelog_only_tag_matching_tag_format_included_suffix( git.tag("random0.2.0") testargs = ["cz", "bump", "--changelog", "--yes"] mocker.patch.object(sys, "argv", testargs) + # bump to 0.2.0custom cli.main() wait_for_tag() create_file_and_commit("feat: another new file") + # bump to 0.3.0custom cli.main() wait_for_tag() with open(changelog_path) as f: From a3498aba5e94c9f7c4acb529b5e7eb6df65fd053 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:08:26 +0000 Subject: [PATCH 374/685] =?UTF-8?q?bump:=20version=203.29.0=20=E2=86=92=20?= =?UTF-8?q?3.29.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 12 ++++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6cdbcc90e6..9b5027b93d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v3.29.0 # automatically updated by Commitizen + rev: v3.29.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index b621d9e5dc..fd591be06d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +## v3.29.1 (2024-09-26) + +### Fix + +- **changelog**: Factorized TAG_FORMAT_REGEXES +- **changelog**: Handle tag format without version pattern +- **changelog**: handle custom tag_format in changelog generation + +### Refactor + +- Use format strings + ## v3.29.0 (2024-08-11) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index c13e81a875..ca267c56e1 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.29.0" +__version__ = "3.29.1" diff --git a/pyproject.toml b/pyproject.toml index 79c2f849b3..35a5f119a5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.29.0" +version = "3.29.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.29.0" +version = "3.29.1" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 41ca7304968f65305b939348f697d62699c79282 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 01:38:52 +0000 Subject: [PATCH 375/685] build(deps-dev): bump mkdocs-material from 9.5.37 to 9.5.38 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.37 to 9.5.38. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.37...9.5.38) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0b371d1a9c..e2202c2fa4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -754,13 +754,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.37" +version = "9.5.38" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.37-py3-none-any.whl", hash = "sha256:6e8a986abad77be5edec3dd77cf1ddf2480963fb297a8e971f87a82fd464b070"}, - {file = "mkdocs_material-9.5.37.tar.gz", hash = "sha256:2c31607431ec234db124031255b0a9d4f3e1c3ecc2c47ad97ecfff0460471941"}, + {file = "mkdocs_material-9.5.38-py3-none-any.whl", hash = "sha256:d4779051d52ba9f1e7e344b34de95449c7c366c212b388e4a2db9a3db043c228"}, + {file = "mkdocs_material-9.5.38.tar.gz", hash = "sha256:1843c5171ad6b489550aeaf7358e5b7128cc03ddcf0fb4d91d19aa1e691a63b8"}, ] [package.dependencies] From 881695784114ecfa92517d63dfc9e970f3e7dc86 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 01:38:06 +0000 Subject: [PATCH 376/685] build(deps-dev): bump ruff from 0.6.7 to 0.6.8 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.7 to 0.6.8. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.6.7...0.6.8) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index e2202c2fa4..81dbf204e6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1429,29 +1429,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.6.7" +version = "0.6.8" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.7-py3-none-linux_armv6l.whl", hash = "sha256:08277b217534bfdcc2e1377f7f933e1c7957453e8a79764d004e44c40db923f2"}, - {file = "ruff-0.6.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c6707a32e03b791f4448dc0dce24b636cbcdee4dd5607adc24e5ee73fd86c00a"}, - {file = "ruff-0.6.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:533d66b7774ef224e7cf91506a7dafcc9e8ec7c059263ec46629e54e7b1f90ab"}, - {file = "ruff-0.6.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17a86aac6f915932d259f7bec79173e356165518859f94649d8c50b81ff087e9"}, - {file = "ruff-0.6.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3f8822defd260ae2460ea3832b24d37d203c3577f48b055590a426a722d50ef"}, - {file = "ruff-0.6.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ba4efe5c6dbbb58be58dd83feedb83b5e95c00091bf09987b4baf510fee5c99"}, - {file = "ruff-0.6.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:525201b77f94d2b54868f0cbe5edc018e64c22563da6c5c2e5c107a4e85c1c0d"}, - {file = "ruff-0.6.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8854450839f339e1049fdbe15d875384242b8e85d5c6947bb2faad33c651020b"}, - {file = "ruff-0.6.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f0b62056246234d59cbf2ea66e84812dc9ec4540518e37553513392c171cb18"}, - {file = "ruff-0.6.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b1462fa56c832dc0cea5b4041cfc9c97813505d11cce74ebc6d1aae068de36b"}, - {file = "ruff-0.6.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:02b083770e4cdb1495ed313f5694c62808e71764ec6ee5db84eedd82fd32d8f5"}, - {file = "ruff-0.6.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0c05fd37013de36dfa883a3854fae57b3113aaa8abf5dea79202675991d48624"}, - {file = "ruff-0.6.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f49c9caa28d9bbfac4a637ae10327b3db00f47d038f3fbb2195c4d682e925b14"}, - {file = "ruff-0.6.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a0e1655868164e114ba43a908fd2d64a271a23660195017c17691fb6355d59bb"}, - {file = "ruff-0.6.7-py3-none-win32.whl", hash = "sha256:a939ca435b49f6966a7dd64b765c9df16f1faed0ca3b6f16acdf7731969deb35"}, - {file = "ruff-0.6.7-py3-none-win_amd64.whl", hash = "sha256:590445eec5653f36248584579c06252ad2e110a5d1f32db5420de35fb0e1c977"}, - {file = "ruff-0.6.7-py3-none-win_arm64.whl", hash = "sha256:b28f0d5e2f771c1fe3c7a45d3f53916fc74a480698c4b5731f0bea61e52137c8"}, - {file = "ruff-0.6.7.tar.gz", hash = "sha256:44e52129d82266fa59b587e2cd74def5637b730a69c4542525dfdecfaae38bd5"}, + {file = "ruff-0.6.8-py3-none-linux_armv6l.whl", hash = "sha256:77944bca110ff0a43b768f05a529fecd0706aac7bcce36d7f1eeb4cbfca5f0f2"}, + {file = "ruff-0.6.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:27b87e1801e786cd6ede4ada3faa5e254ce774de835e6723fd94551464c56b8c"}, + {file = "ruff-0.6.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:cd48f945da2a6334f1793d7f701725a76ba93bf3d73c36f6b21fb04d5338dcf5"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:677e03c00f37c66cea033274295a983c7c546edea5043d0c798833adf4cf4c6f"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9f1476236b3eacfacfc0f66aa9e6cd39f2a624cb73ea99189556015f27c0bdeb"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f5a2f17c7d32991169195d52a04c95b256378bbf0de8cb98478351eb70d526f"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5fd0d4b7b1457c49e435ee1e437900ced9b35cb8dc5178921dfb7d98d65a08d0"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8034b19b993e9601f2ddf2c517451e17a6ab5cdb1c13fdff50c1442a7171d87"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6cfb227b932ba8ef6e56c9f875d987973cd5e35bc5d05f5abf045af78ad8e098"}, + {file = "ruff-0.6.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef0411eccfc3909269fed47c61ffebdcb84a04504bafa6b6df9b85c27e813b0"}, + {file = "ruff-0.6.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:007dee844738c3d2e6c24ab5bc7d43c99ba3e1943bd2d95d598582e9c1b27750"}, + {file = "ruff-0.6.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ce60058d3cdd8490e5e5471ef086b3f1e90ab872b548814e35930e21d848c9ce"}, + {file = "ruff-0.6.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1085c455d1b3fdb8021ad534379c60353b81ba079712bce7a900e834859182fa"}, + {file = "ruff-0.6.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:70edf6a93b19481affd287d696d9e311388d808671bc209fb8907b46a8c3af44"}, + {file = "ruff-0.6.8-py3-none-win32.whl", hash = "sha256:792213f7be25316f9b46b854df80a77e0da87ec66691e8f012f887b4a671ab5a"}, + {file = "ruff-0.6.8-py3-none-win_amd64.whl", hash = "sha256:ec0517dc0f37cad14a5319ba7bba6e7e339d03fbf967a6d69b0907d61be7a263"}, + {file = "ruff-0.6.8-py3-none-win_arm64.whl", hash = "sha256:8d3bb2e3fbb9875172119021a13eed38849e762499e3cfde9588e4b4d70968dc"}, + {file = "ruff-0.6.8.tar.gz", hash = "sha256:a5bf44b1aa0adaf6d9d20f86162b34f7c593bfedabc51239953e446aefc8ce18"}, ] [[package]] From 4db164f627027df8275fbb8446e2907882f7569a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 01:51:33 +0000 Subject: [PATCH 377/685] build(deps-dev): bump mkdocs-material from 9.5.38 to 9.5.39 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.38 to 9.5.39. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.38...9.5.39) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 81dbf204e6..b80dedcb45 100644 --- a/poetry.lock +++ b/poetry.lock @@ -754,13 +754,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.38" +version = "9.5.39" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.38-py3-none-any.whl", hash = "sha256:d4779051d52ba9f1e7e344b34de95449c7c366c212b388e4a2db9a3db043c228"}, - {file = "mkdocs_material-9.5.38.tar.gz", hash = "sha256:1843c5171ad6b489550aeaf7358e5b7128cc03ddcf0fb4d91d19aa1e691a63b8"}, + {file = "mkdocs_material-9.5.39-py3-none-any.whl", hash = "sha256:0f2f68c8db89523cb4a59705cd01b4acd62b2f71218ccb67e1e004e560410d2b"}, + {file = "mkdocs_material-9.5.39.tar.gz", hash = "sha256:25faa06142afa38549d2b781d475a86fb61de93189f532b88e69bf11e5e5c3be"}, ] [package.dependencies] From 15f08123fb8faadb0d0d6d7be06bcd67f5dda360 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 01:08:42 +0000 Subject: [PATCH 378/685] build(deps-dev): bump rich from 13.8.1 to 13.9.1 Bumps [rich](https://github.com/Textualize/rich) from 13.8.1 to 13.9.1. - [Release notes](https://github.com/Textualize/rich/releases) - [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md) - [Commits](https://github.com/Textualize/rich/compare/v13.8.1...v13.9.1) --- updated-dependencies: - dependency-name: rich dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index b80dedcb45..45f45e2d6b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1410,19 +1410,19 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rich" -version = "13.8.1" +version = "13.9.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "rich-13.8.1-py3-none-any.whl", hash = "sha256:1760a3c0848469b97b558fc61c85233e3dafb69c7a071b4d60c38099d3cd4c06"}, - {file = "rich-13.8.1.tar.gz", hash = "sha256:8260cda28e3db6bf04d2d1ef4dbc03ba80a824c88b0e7668a0f23126a424844a"}, + {file = "rich-13.9.1-py3-none-any.whl", hash = "sha256:b340e739f30aa58921dc477b8adaa9ecdb7cecc217be01d93730ee1bc8aa83be"}, + {file = "rich-13.9.1.tar.gz", hash = "sha256:097cffdf85db1babe30cc7deba5ab3a29e1b9885047dab24c57e9a7f8a9c1466"}, ] [package.dependencies] markdown-it-py = ">=2.2.0" pygments = ">=2.13.0,<3.0.0" -typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""} [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] From eafcef63a6ff813162695dd120964dd3a61b37b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 01:24:22 +0000 Subject: [PATCH 379/685] build(deps-dev): bump types-python-dateutil Bumps [types-python-dateutil](https://github.com/python/typeshed) from 2.9.0.20240906 to 2.9.0.20241003. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-python-dateutil dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 45f45e2d6b..6d1b22b2d6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1563,13 +1563,13 @@ files = [ [[package]] name = "types-python-dateutil" -version = "2.9.0.20240906" +version = "2.9.0.20241003" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.9.0.20240906.tar.gz", hash = "sha256:9706c3b68284c25adffc47319ecc7947e5bb86b3773f843c73906fd598bc176e"}, - {file = "types_python_dateutil-2.9.0.20240906-py3-none-any.whl", hash = "sha256:27c8cc2d058ccb14946eebcaaa503088f4f6dbc4fb6093d3d456a49aef2753f6"}, + {file = "types-python-dateutil-2.9.0.20241003.tar.gz", hash = "sha256:58cb85449b2a56d6684e41aeefb4c4280631246a0da1a719bdbe6f3fb0317446"}, + {file = "types_python_dateutil-2.9.0.20241003-py3-none-any.whl", hash = "sha256:250e1d8e80e7bbc3a6c99b907762711d1a1cdd00e978ad39cb5940f6f0a87f3d"}, ] [[package]] From 1f857754d4ded507f9d35fdeb8e6fe2e7afea6bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 01:29:58 +0000 Subject: [PATCH 380/685] build(deps-dev): bump rich from 13.9.1 to 13.9.2 Bumps [rich](https://github.com/Textualize/rich) from 13.9.1 to 13.9.2. - [Release notes](https://github.com/Textualize/rich/releases) - [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md) - [Commits](https://github.com/Textualize/rich/compare/v13.9.1...v13.9.2) --- updated-dependencies: - dependency-name: rich dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6d1b22b2d6..08fae00d1c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1410,13 +1410,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rich" -version = "13.9.1" +version = "13.9.2" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" files = [ - {file = "rich-13.9.1-py3-none-any.whl", hash = "sha256:b340e739f30aa58921dc477b8adaa9ecdb7cecc217be01d93730ee1bc8aa83be"}, - {file = "rich-13.9.1.tar.gz", hash = "sha256:097cffdf85db1babe30cc7deba5ab3a29e1b9885047dab24c57e9a7f8a9c1466"}, + {file = "rich-13.9.2-py3-none-any.whl", hash = "sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1"}, + {file = "rich-13.9.2.tar.gz", hash = "sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c"}, ] [package.dependencies] From 1c14b02e1057e67ae2f89388e447eeefe4feb962 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 01:30:23 +0000 Subject: [PATCH 381/685] build(deps-dev): bump ruff from 0.6.8 to 0.6.9 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.8 to 0.6.9. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.6.8...0.6.9) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 08fae00d1c..66127b1df5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1429,29 +1429,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.6.8" +version = "0.6.9" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.8-py3-none-linux_armv6l.whl", hash = "sha256:77944bca110ff0a43b768f05a529fecd0706aac7bcce36d7f1eeb4cbfca5f0f2"}, - {file = "ruff-0.6.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:27b87e1801e786cd6ede4ada3faa5e254ce774de835e6723fd94551464c56b8c"}, - {file = "ruff-0.6.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:cd48f945da2a6334f1793d7f701725a76ba93bf3d73c36f6b21fb04d5338dcf5"}, - {file = "ruff-0.6.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:677e03c00f37c66cea033274295a983c7c546edea5043d0c798833adf4cf4c6f"}, - {file = "ruff-0.6.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9f1476236b3eacfacfc0f66aa9e6cd39f2a624cb73ea99189556015f27c0bdeb"}, - {file = "ruff-0.6.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f5a2f17c7d32991169195d52a04c95b256378bbf0de8cb98478351eb70d526f"}, - {file = "ruff-0.6.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5fd0d4b7b1457c49e435ee1e437900ced9b35cb8dc5178921dfb7d98d65a08d0"}, - {file = "ruff-0.6.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8034b19b993e9601f2ddf2c517451e17a6ab5cdb1c13fdff50c1442a7171d87"}, - {file = "ruff-0.6.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6cfb227b932ba8ef6e56c9f875d987973cd5e35bc5d05f5abf045af78ad8e098"}, - {file = "ruff-0.6.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef0411eccfc3909269fed47c61ffebdcb84a04504bafa6b6df9b85c27e813b0"}, - {file = "ruff-0.6.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:007dee844738c3d2e6c24ab5bc7d43c99ba3e1943bd2d95d598582e9c1b27750"}, - {file = "ruff-0.6.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ce60058d3cdd8490e5e5471ef086b3f1e90ab872b548814e35930e21d848c9ce"}, - {file = "ruff-0.6.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1085c455d1b3fdb8021ad534379c60353b81ba079712bce7a900e834859182fa"}, - {file = "ruff-0.6.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:70edf6a93b19481affd287d696d9e311388d808671bc209fb8907b46a8c3af44"}, - {file = "ruff-0.6.8-py3-none-win32.whl", hash = "sha256:792213f7be25316f9b46b854df80a77e0da87ec66691e8f012f887b4a671ab5a"}, - {file = "ruff-0.6.8-py3-none-win_amd64.whl", hash = "sha256:ec0517dc0f37cad14a5319ba7bba6e7e339d03fbf967a6d69b0907d61be7a263"}, - {file = "ruff-0.6.8-py3-none-win_arm64.whl", hash = "sha256:8d3bb2e3fbb9875172119021a13eed38849e762499e3cfde9588e4b4d70968dc"}, - {file = "ruff-0.6.8.tar.gz", hash = "sha256:a5bf44b1aa0adaf6d9d20f86162b34f7c593bfedabc51239953e446aefc8ce18"}, + {file = "ruff-0.6.9-py3-none-linux_armv6l.whl", hash = "sha256:064df58d84ccc0ac0fcd63bc3090b251d90e2a372558c0f057c3f75ed73e1ccd"}, + {file = "ruff-0.6.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:140d4b5c9f5fc7a7b074908a78ab8d384dd7f6510402267bc76c37195c02a7ec"}, + {file = "ruff-0.6.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53fd8ca5e82bdee8da7f506d7b03a261f24cd43d090ea9db9a1dc59d9313914c"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645d7d8761f915e48a00d4ecc3686969761df69fb561dd914a773c1a8266e14e"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eae02b700763e3847595b9d2891488989cac00214da7f845f4bcf2989007d577"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d5ccc9e58112441de8ad4b29dcb7a86dc25c5f770e3c06a9d57e0e5eba48829"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:417b81aa1c9b60b2f8edc463c58363075412866ae4e2b9ab0f690dc1e87ac1b5"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c866b631f5fbce896a74a6e4383407ba7507b815ccc52bcedabb6810fdb3ef7"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b118afbb3202f5911486ad52da86d1d52305b59e7ef2031cea3425142b97d6f"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67267654edc23c97335586774790cde402fb6bbdb3c2314f1fc087dee320bfa"}, + {file = "ruff-0.6.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3ef0cc774b00fec123f635ce5c547dac263f6ee9fb9cc83437c5904183b55ceb"}, + {file = "ruff-0.6.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:12edd2af0c60fa61ff31cefb90aef4288ac4d372b4962c2864aeea3a1a2460c0"}, + {file = "ruff-0.6.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:55bb01caeaf3a60b2b2bba07308a02fca6ab56233302406ed5245180a05c5625"}, + {file = "ruff-0.6.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:925d26471fa24b0ce5a6cdfab1bb526fb4159952385f386bdcc643813d472039"}, + {file = "ruff-0.6.9-py3-none-win32.whl", hash = "sha256:eb61ec9bdb2506cffd492e05ac40e5bc6284873aceb605503d8494180d6fc84d"}, + {file = "ruff-0.6.9-py3-none-win_amd64.whl", hash = "sha256:785d31851c1ae91f45b3d8fe23b8ae4b5170089021fbb42402d811135f0b7117"}, + {file = "ruff-0.6.9-py3-none-win_arm64.whl", hash = "sha256:a9641e31476d601f83cd602608739a0840e348bda93fec9f1ee816f8b6798b93"}, + {file = "ruff-0.6.9.tar.gz", hash = "sha256:b076ef717a8e5bc819514ee1d602bbdca5b4420ae13a9cf61a0c0a4f53a2baa2"}, ] [[package]] From ebb6a2cb9ab4f0ee26f5dfeee3adc63c6e893e4c Mon Sep 17 00:00:00 2001 From: Santiago Fraire Willemoes <santiwilly@gmail.com> Date: Fri, 27 Sep 2024 09:15:12 +0200 Subject: [PATCH 382/685] docs: improve monorepo docs --- docs/tutorials/monorepo_guidance.md | 56 ++++++++++++++++++++++++----- mkdocs.yml | 1 + 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/docs/tutorials/monorepo_guidance.md b/docs/tutorials/monorepo_guidance.md index c4345d6bc2..78e37fd71f 100644 --- a/docs/tutorials/monorepo_guidance.md +++ b/docs/tutorials/monorepo_guidance.md @@ -3,7 +3,7 @@ This tutorial assumes the monorepo layout is designed with multiple components that can be released independently of each other, it also assumes that conventional commits with scopes are in use. Some suggested layouts: -``` +```sh . ├── library-b │   └── .cz.toml @@ -11,7 +11,7 @@ other, it also assumes that conventional commits with scopes are in use. Some su └── .cz.toml ``` -``` +```sh src ├── library-b │   └── .cz.toml @@ -19,23 +19,61 @@ src └── .cz.toml ``` -Each component will have its own changelog, commits will need to use scopes so only relevant commits are included in the -appropriate change log for a given component. Example config and commit for `library-b` +Sample `.cz.toml` for each component: ```toml +# library-b/.cz.toml [tool.commitizen] name = "cz_customize" version = "0.0.0" tag_format = "${version}-library-b" # the component name can be a prefix or suffix with or without a separator update_changelog_on_bump = true +``` + +```toml +# library-z/.cz.toml +[tool.commitizen] +name = "cz_customize" +version = "0.0.0" +tag_format = "${version}-library-z" +update_changelog_on_bump = true +``` + +And finally, to bump each of these: + +```sh +cz --config library-b/.cz.toml bump --yes +cz --config library-z/.cz.toml bump --yes +``` + +## Changelog per component + +In order to filter the correct commits for each component, you'll have to come up with a strategy. + +For example: + +- Trigger the pipeline based on the changed path, which can have some downsides, as you'll rely on the developer not including files from other files + - [github actions](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore) uses `path` + - [Jenkins](https://www.jenkins.io/doc/book/pipeline/syntax/#built-in-conditions) uses `changeset` + - [Gitlab](https://docs.gitlab.com/ee/ci/yaml/#ruleschanges) uses `rules:changes` +- Filter certain pattern of the commit message (recommended) + + +### Example with scope in conventional commits + +For this example, to include the message in the changelog, we will require commits to use a specific scope. +This way, only relevant commits will be included in the appropriate change log for a given component, and any other commit will be ignored. + +Example config and commit for `library-b`: + +```toml [tool.commitizen.customize] changelog_pattern = "^(feat|fix)\\(library-b\\)(!)?:" #the pattern on types can be a wild card or any types you wish to include ``` -example commit message for the above +A commit message looking like this, would be included: -`fix:(library-b) Some awesome message` - -If the above is followed and the `cz bump --changelog` is run in the directory containing the component the changelog -should be generated in the same directory with only commits scoped to the component. +``` +fix:(library-b) Some awesome message +``` diff --git a/mkdocs.yml b/mkdocs.yml index a0fb57fde2..f6a7eaa421 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -53,6 +53,7 @@ nav: - Github Actions: "tutorials/github_actions.md" - Jenkins pipeline: "tutorials/jenkins_pipeline.md" - Developmental releases: "tutorials/dev_releases.md" + - Monorepo support: "tutorials/monorepo_guidance.md" - FAQ: "faq.md" - Exit Codes: "exit_codes.md" - Third-Party Commitizen Templates: "third-party-commitizen.md" From d755de919631c755dfe36340e87db63a287d501b Mon Sep 17 00:00:00 2001 From: Santiago Fraire Willemoes <santiwilly@gmail.com> Date: Mon, 7 Oct 2024 11:27:20 +0200 Subject: [PATCH 383/685] docs: update docs/tutorials/monorepo_guidance.md Co-authored-by: Wei Lee <weilee.rx@gmail.com> --- docs/tutorials/monorepo_guidance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/monorepo_guidance.md b/docs/tutorials/monorepo_guidance.md index 78e37fd71f..a943b70bb5 100644 --- a/docs/tutorials/monorepo_guidance.md +++ b/docs/tutorials/monorepo_guidance.md @@ -3,7 +3,7 @@ This tutorial assumes the monorepo layout is designed with multiple components that can be released independently of each other, it also assumes that conventional commits with scopes are in use. Some suggested layouts: -```sh +```shell-session . ├── library-b │   └── .cz.toml From 5aeb1df34bf3f72af6c3140e12e9ea186d59db90 Mon Sep 17 00:00:00 2001 From: Santiago Fraire Willemoes <santiwilly@gmail.com> Date: Mon, 7 Oct 2024 11:27:29 +0200 Subject: [PATCH 384/685] docs: update docs/tutorials/monorepo_guidance.md Co-authored-by: Wei Lee <weilee.rx@gmail.com> --- docs/tutorials/monorepo_guidance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/monorepo_guidance.md b/docs/tutorials/monorepo_guidance.md index a943b70bb5..ba6d70fd82 100644 --- a/docs/tutorials/monorepo_guidance.md +++ b/docs/tutorials/monorepo_guidance.md @@ -11,7 +11,7 @@ other, it also assumes that conventional commits with scopes are in use. Some su └── .cz.toml ``` -```sh +```shell-session src ├── library-b │   └── .cz.toml From fad5e828d53342a9e34f3662def842bc88fefdc4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 01:38:16 +0000 Subject: [PATCH 385/685] build(deps): bump argcomplete from 3.5.0 to 3.5.1 Bumps [argcomplete](https://github.com/kislyuk/argcomplete) from 3.5.0 to 3.5.1. - [Release notes](https://github.com/kislyuk/argcomplete/releases) - [Changelog](https://github.com/kislyuk/argcomplete/blob/develop/Changes.rst) - [Commits](https://github.com/kislyuk/argcomplete/compare/v3.5.0...v3.5.1) --- updated-dependencies: - dependency-name: argcomplete dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 66127b1df5..1e62dc1b07 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "argcomplete" -version = "3.5.0" +version = "3.5.1" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.5.0-py3-none-any.whl", hash = "sha256:d4bcf3ff544f51e16e54228a7ac7f486ed70ebf2ecfe49a63a91171c76bf029b"}, - {file = "argcomplete-3.5.0.tar.gz", hash = "sha256:4349400469dccfb7950bb60334a680c58d88699bff6159df61251878dc6bf74b"}, + {file = "argcomplete-3.5.1-py3-none-any.whl", hash = "sha256:1a1d148bdaa3e3b93454900163403df41448a248af01b6e849edc5ac08e6c363"}, + {file = "argcomplete-3.5.1.tar.gz", hash = "sha256:eb1ee355aa2557bd3d0145de7b06b2a45b0ce461e1e7813f5d066039ab4177b4"}, ] [package.extras] From a54bf542012257a338edb54ca16d11ba6beef0ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 01:55:53 +0000 Subject: [PATCH 386/685] build(deps): bump charset-normalizer from 3.3.2 to 3.4.0 Bumps [charset-normalizer](https://github.com/Ousret/charset_normalizer) from 3.3.2 to 3.4.0. - [Release notes](https://github.com/Ousret/charset_normalizer/releases) - [Changelog](https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md) - [Commits](https://github.com/Ousret/charset_normalizer/compare/3.3.2...3.4.0) --- updated-dependencies: - dependency-name: charset-normalizer dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 197 ++++++++++++++++++++++++++++------------------------ 1 file changed, 106 insertions(+), 91 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1e62dc1b07..bee73ac15c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -95,101 +95,116 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] [[package]] From 1a1ddd2fde4054f40d1f5c9ecc31272b9a9903a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 01:49:45 +0000 Subject: [PATCH 387/685] build(deps-dev): bump mkdocs-material from 9.5.39 to 9.5.40 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.39 to 9.5.40. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.39...9.5.40) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index bee73ac15c..79d260ca50 100644 --- a/poetry.lock +++ b/poetry.lock @@ -769,13 +769,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.39" +version = "9.5.40" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.39-py3-none-any.whl", hash = "sha256:0f2f68c8db89523cb4a59705cd01b4acd62b2f71218ccb67e1e004e560410d2b"}, - {file = "mkdocs_material-9.5.39.tar.gz", hash = "sha256:25faa06142afa38549d2b781d475a86fb61de93189f532b88e69bf11e5e5c3be"}, + {file = "mkdocs_material-9.5.40-py3-none-any.whl", hash = "sha256:8e7a16ada34e79a7b6459ff2602584222f522c738b6a023d1bea853d5049da6f"}, + {file = "mkdocs_material-9.5.40.tar.gz", hash = "sha256:b69d70e667ec51fc41f65e006a3184dd00d95b2439d982cb1586e4c018943156"}, ] [package.dependencies] From 59c7e7bf70e859be0c7ba19ebac153a3d4bf740a Mon Sep 17 00:00:00 2001 From: Kimoon Han <khan@kaist.ac.kr> Date: Mon, 14 Oct 2024 20:09:17 +0900 Subject: [PATCH 388/685] docs: update README to include conda --- docs/README.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index 3f729ebcbc..9a071d5676 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,6 +3,7 @@ [![PyPI Package latest release](https://img.shields.io/pypi/v/commitizen.svg?style=flat-square)](https://pypi.org/project/commitizen/) [![PyPI Package download count (per month)](https://img.shields.io/pypi/dm/commitizen?style=flat-square)](https://pypi.org/project/commitizen/) [![Supported versions](https://img.shields.io/pypi/pyversions/commitizen.svg?style=flat-square)](https://pypi.org/project/commitizen/) +[![Conda Version](https://img.shields.io/conda/vn/conda-forge/commitizen?style=flat-square)](https://anaconda.org/conda-forge/commitizen) [![homebrew](https://img.shields.io/homebrew/v/commitizen?color=teal&style=flat-square)](https://formulae.brew.sh/formula/commitizen) [![Codecov](https://img.shields.io/codecov/c/github/commitizen-tools/commitizen.svg?style=flat-square)](https://codecov.io/gh/commitizen-tools/commitizen) [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?style=flat-square&logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit) @@ -62,19 +63,27 @@ pip install --user -U commitizen ### Python project -You can add it to your local project using one of these: +You can add it to your local project using one of the following. + +With `pip`: ```bash pip install -U commitizen ``` -for Poetry >= 1.2.0: +With `conda`: + +```bash +conda install -c conda-forge commitizen +``` + +With Poetry >= 1.2.0: ```bash poetry add commitizen --group dev ``` -for Poetry < 1.2.0: +With Poetry < 1.2.0: ```bash poetry add commitizen --dev From c95404b7845cd661d78e19d0b248b07055526884 Mon Sep 17 00:00:00 2001 From: gbaian10 <gbaian10@gmail.com> Date: Mon, 14 Oct 2024 02:45:20 +0800 Subject: [PATCH 389/685] docs: `Allowed Prefixes` default value typo https://commitizen-tools.github.io/commitizen/config/#allowed_prefixes --- docs/commands/check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/commands/check.md b/docs/commands/check.md index 751a47aa2f..e45ecd86c8 100644 --- a/docs/commands/check.md +++ b/docs/commands/check.md @@ -70,7 +70,7 @@ permit them. Since `git commit` accepts an `--allow-empty-message` flag (primari ### Allowed Prefixes If the commit message starts by some specific prefixes, `cz check` returns `True` without checkign the regex. -By default, the the following prefixes are allowed: `Merge`, `Revert`, `Pull Request`, `fixup!` and `squash!`. +By default, the the following prefixes are allowed: `Merge`, `Revert`, `Pull request`, `fixup!` and `squash!`. ```bash cz check --message MESSAGE --allowed-prefixes 'Merge' 'Revert' 'Custom Prefix' From 00d2d967337c7357dbd5043c42db5aa647644c45 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 01:20:55 +0000 Subject: [PATCH 390/685] build(deps-dev): bump mypy from 1.11.2 to 1.12.0 Bumps [mypy](https://github.com/python/mypy) from 1.11.2 to 1.12.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.11.2...v1.12.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 61 +++++++++++++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index 79d260ca50..63ea1dab1d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -809,38 +809,43 @@ files = [ [[package]] name = "mypy" -version = "1.11.2" +version = "1.12.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, - {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, - {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, - {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, - {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, - {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, - {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, - {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, - {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, - {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, - {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, - {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, - {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, - {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, - {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, - {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, - {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, - {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, - {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, + {file = "mypy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4397081e620dc4dc18e2f124d5e1d2c288194c2c08df6bdb1db31c38cd1fe1ed"}, + {file = "mypy-1.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:684a9c508a283f324804fea3f0effeb7858eb03f85c4402a967d187f64562469"}, + {file = "mypy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cabe4cda2fa5eca7ac94854c6c37039324baaa428ecbf4de4567279e9810f9e"}, + {file = "mypy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:060a07b10e999ac9e7fa249ce2bdcfa9183ca2b70756f3bce9df7a92f78a3c0a"}, + {file = "mypy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:0eff042d7257f39ba4ca06641d110ca7d2ad98c9c1fb52200fe6b1c865d360ff"}, + {file = "mypy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b86de37a0da945f6d48cf110d5206c5ed514b1ca2614d7ad652d4bf099c7de7"}, + {file = "mypy-1.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20c7c5ce0c1be0b0aea628374e6cf68b420bcc772d85c3c974f675b88e3e6e57"}, + {file = "mypy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a64ee25f05fc2d3d8474985c58042b6759100a475f8237da1f4faf7fcd7e6309"}, + {file = "mypy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:faca7ab947c9f457a08dcb8d9a8664fd438080e002b0fa3e41b0535335edcf7f"}, + {file = "mypy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:5bc81701d52cc8767005fdd2a08c19980de9ec61a25dbd2a937dfb1338a826f9"}, + {file = "mypy-1.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8462655b6694feb1c99e433ea905d46c478041a8b8f0c33f1dab00ae881b2164"}, + {file = "mypy-1.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:923ea66d282d8af9e0f9c21ffc6653643abb95b658c3a8a32dca1eff09c06475"}, + {file = "mypy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1ebf9e796521f99d61864ed89d1fb2926d9ab6a5fab421e457cd9c7e4dd65aa9"}, + {file = "mypy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e478601cc3e3fa9d6734d255a59c7a2e5c2934da4378f3dd1e3411ea8a248642"}, + {file = "mypy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:c72861b7139a4f738344faa0e150834467521a3fba42dc98264e5aa9507dd601"}, + {file = "mypy-1.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52b9e1492e47e1790360a43755fa04101a7ac72287b1a53ce817f35899ba0521"}, + {file = "mypy-1.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:48d3e37dd7d9403e38fa86c46191de72705166d40b8c9f91a3de77350daa0893"}, + {file = "mypy-1.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f106db5ccb60681b622ac768455743ee0e6a857724d648c9629a9bd2ac3f721"}, + {file = "mypy-1.12.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:233e11b3f73ee1f10efada2e6da0f555b2f3a5316e9d8a4a1224acc10e7181d3"}, + {file = "mypy-1.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:4ae8959c21abcf9d73aa6c74a313c45c0b5a188752bf37dace564e29f06e9c1b"}, + {file = "mypy-1.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eafc1b7319b40ddabdc3db8d7d48e76cfc65bbeeafaa525a4e0fa6b76175467f"}, + {file = "mypy-1.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9b9ce1ad8daeb049c0b55fdb753d7414260bad8952645367e70ac91aec90e07e"}, + {file = "mypy-1.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfe012b50e1491d439172c43ccb50db66d23fab714d500b57ed52526a1020bb7"}, + {file = "mypy-1.12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c40658d4fa1ab27cb53d9e2f1066345596af2f8fe4827defc398a09c7c9519b"}, + {file = "mypy-1.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:dee78a8b9746c30c1e617ccb1307b351ded57f0de0d287ca6276378d770006c0"}, + {file = "mypy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b5df6c8a8224f6b86746bda716bbe4dbe0ce89fd67b1fa4661e11bfe38e8ec8"}, + {file = "mypy-1.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5feee5c74eb9749e91b77f60b30771563327329e29218d95bedbe1257e2fe4b0"}, + {file = "mypy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:77278e8c6ffe2abfba6db4125de55f1024de9a323be13d20e4f73b8ed3402bd1"}, + {file = "mypy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dcfb754dea911039ac12434d1950d69a2f05acd4d56f7935ed402be09fad145e"}, + {file = "mypy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:06de0498798527451ffb60f68db0d368bd2bae2bbfb5237eae616d4330cc87aa"}, + {file = "mypy-1.12.0-py3-none-any.whl", hash = "sha256:fd313226af375d52e1e36c383f39bf3836e1f192801116b31b090dfcd3ec5266"}, + {file = "mypy-1.12.0.tar.gz", hash = "sha256:65a22d87e757ccd95cbbf6f7e181e6caa87128255eb2b6be901bb71b26d8a99d"}, ] [package.dependencies] From a9aacec7e84b67f0bd894e8e952b1074a3c0da20 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 01:11:26 +0000 Subject: [PATCH 391/685] ci(deps): bump dawidd6/action-homebrew-bump-formula from 3 to 4 Bumps [dawidd6/action-homebrew-bump-formula](https://github.com/dawidd6/action-homebrew-bump-formula) from 3 to 4. - [Release notes](https://github.com/dawidd6/action-homebrew-bump-formula/releases) - [Commits](https://github.com/dawidd6/action-homebrew-bump-formula/compare/v3...v4) --- updated-dependencies: - dependency-name: dawidd6/action-homebrew-bump-formula dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- .github/workflows/homebrewpublish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/homebrewpublish.yml b/.github/workflows/homebrewpublish.yml index 84c2ca6ca0..443a13b1ba 100644 --- a/.github/workflows/homebrewpublish.yml +++ b/.github/workflows/homebrewpublish.yml @@ -24,7 +24,7 @@ jobs: run: | echo "project_version=$(cz version --project)" >> $GITHUB_ENV - name: Update Homebrew formula - uses: dawidd6/action-homebrew-bump-formula@v3 + uses: dawidd6/action-homebrew-bump-formula@v4 with: token: ${{secrets.PERSONAL_ACCESS_TOKEN}} formula: commitizen From e1784c633e5efdb00f019d5d833b528d2f6d0826 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 02:00:35 +0000 Subject: [PATCH 392/685] build(deps-dev): bump mkdocs-material from 9.5.40 to 9.5.41 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.40 to 9.5.41. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.40...9.5.41) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 63ea1dab1d..4259c11698 100644 --- a/poetry.lock +++ b/poetry.lock @@ -769,13 +769,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.40" +version = "9.5.41" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.40-py3-none-any.whl", hash = "sha256:8e7a16ada34e79a7b6459ff2602584222f522c738b6a023d1bea853d5049da6f"}, - {file = "mkdocs_material-9.5.40.tar.gz", hash = "sha256:b69d70e667ec51fc41f65e006a3184dd00d95b2439d982cb1586e4c018943156"}, + {file = "mkdocs_material-9.5.41-py3-none-any.whl", hash = "sha256:990bc138c33342b5b73e7545915ebc0136e501bfbd8e365735144f5120891d83"}, + {file = "mkdocs_material-9.5.41.tar.gz", hash = "sha256:30fa5d459b4b8130848ecd8e1c908878345d9d8268f7ddbc31eebe88d462d97b"}, ] [package.dependencies] From 16b80d34c552f02c51f6edba15383f299d3344c2 Mon Sep 17 00:00:00 2001 From: Dimitri Masson <5263585+dhmmasson@users.noreply.github.com> Date: Mon, 14 Oct 2024 19:53:49 +0000 Subject: [PATCH 393/685] docs(third-party-commitizen): add commitizen-deno-provider to the third party docs --- docs/third-party-commitizen.md | 40 +++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/docs/third-party-commitizen.md b/docs/third-party-commitizen.md index dbbd879434..61a1cb3d58 100644 --- a/docs/third-party-commitizen.md +++ b/docs/third-party-commitizen.md @@ -5,7 +5,7 @@ are available as PyPI packages (installable with `pip`). ### [Conventional JIRA](https://pypi.org/project/conventional-JIRA/) -Just like *conventional commit* format, but the scope has been restricted to a +Just like _conventional commit_ format, but the scope has been restricted to a JIRA issue format, i.e. `project-issueNumber`. This standardises scopes in a meaningful way. @@ -18,6 +18,7 @@ pip install conventional-JIRA ### [GitHub JIRA Conventional](https://pypi.org/project/cz-github-jira-conventional/) This plugin extends the commitizen tools by: + - requiring a JIRA issue id in the commit message - creating links to GitHub commits in the CHANGELOG.md - creating links to JIRA issues in the CHANGELOG.md @@ -32,7 +33,7 @@ For installation instructions (configuration and pre-commit) please visit https: ### [cz-emoji](https://github.com/adam-grant-hendry/cz-emoji) -*conventional commit* format, but with emojis +_conventional commit_ format, but with emojis ### Installation @@ -64,10 +65,9 @@ pip install cz-conventional-gitmoji cz --name cz_gitmoji commit ``` - ### [Commitizen emoji](https://pypi.org/project/commitizen-emoji/) (Unmaintained) -Just like *conventional commit* format, but with emojis and optionally time spent and related tasks. +Just like _conventional commit_ format, but with emojis and optionally time spent and related tasks. It can be installed with `pip install commitizen-emoji`. @@ -75,7 +75,7 @@ Usage: `cz --name cz_commitizen_emoji commit`. ### [Conventional Legacy (cz_legacy)][1] -An extension of the *conventional commit* format to include user-specified +An extension of the _conventional commit_ format to include user-specified legacy change types in the `CHANGELOG` while preventing the legacy change types from being used in new commit messages @@ -83,4 +83,32 @@ from being used in new commit messages See the [README][1] for instructions on configuration - [1]: https://pypi.org/project/cz_legacy +[1]: https://pypi.org/project/cz_legacy + +### [commitizen-deno-provider](https://pypi.org/project/commitizen-deno-provider/) + +A provider for Deno projects. The provider updates the version in deno.json, deno.lock and jsr.json files. + +#### Installation + + +``` +pip install commitizen-deno-provider +``` + +#### Usage + +Add `deno-provider` to your configuration file. + +Example for `.cz.yaml`: + +```yml +--- +commitizen: + major_version_zero: true + name: cz_conventional_commits + tag_format: $version + update_changelog_on_bump: true + version_provider: deno-provider + version_scheme: semver +``` From e8215699ac742fc198684dee52c0eb4a0b4b2072 Mon Sep 17 00:00:00 2001 From: Dimitri Masson <5263585+dhmmasson@users.noreply.github.com> Date: Tue, 15 Oct 2024 11:13:41 +0000 Subject: [PATCH 394/685] docs(third-party-commitizen): update deno-provider code block syntax highlighting --- docs/third-party-commitizen.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/third-party-commitizen.md b/docs/third-party-commitizen.md index 61a1cb3d58..245e35a1da 100644 --- a/docs/third-party-commitizen.md +++ b/docs/third-party-commitizen.md @@ -87,12 +87,12 @@ See the [README][1] for instructions on configuration ### [commitizen-deno-provider](https://pypi.org/project/commitizen-deno-provider/) -A provider for Deno projects. The provider updates the version in deno.json, deno.lock and jsr.json files. +A provider for Deno projects. The provider updates the version in deno.json and jsr.json files. #### Installation -``` +```sh pip install commitizen-deno-provider ``` @@ -102,7 +102,7 @@ Add `deno-provider` to your configuration file. Example for `.cz.yaml`: -```yml +```yaml --- commitizen: major_version_zero: true From 1d5f2955c407540130f437b98c0a54a388ee2b5e Mon Sep 17 00:00:00 2001 From: Dimitri Masson <5263585+dhmmasson@users.noreply.github.com> Date: Tue, 15 Oct 2024 11:28:26 +0000 Subject: [PATCH 395/685] docs(third-party-commitizen): uniformize the third party page - Create a top level heading for provider to mirror the template heading - Uniformize the installation/usage sub-heading for each template/provider - Uniformize the code-block syntax highlighting --- docs/third-party-commitizen.md | 45 +++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/docs/third-party-commitizen.md b/docs/third-party-commitizen.md index 245e35a1da..1c8ef8a183 100644 --- a/docs/third-party-commitizen.md +++ b/docs/third-party-commitizen.md @@ -9,7 +9,7 @@ Just like _conventional commit_ format, but the scope has been restricted to a JIRA issue format, i.e. `project-issueNumber`. This standardises scopes in a meaningful way. -### Installation +#### Installation ```sh pip install conventional-JIRA @@ -23,25 +23,25 @@ This plugin extends the commitizen tools by: - creating links to GitHub commits in the CHANGELOG.md - creating links to JIRA issues in the CHANGELOG.md -### Installation +#### Installation ```sh pip install cz-github-jira-conventional ``` -For installation instructions (configuration and pre-commit) please visit https://github.com/apheris/cz-github-jira-conventional +For installation instructions (configuration and pre-commit) please visit [https://github.com/apheris/cz-github-jira-conventional](https://github.com/apheris/cz-github-jira-conventional) ### [cz-emoji](https://github.com/adam-grant-hendry/cz-emoji) _conventional commit_ format, but with emojis -### Installation +#### Installation ```sh pip install cz-emoji ``` -### Usage +#### Usage ```sh cz --name cz_emoji commit @@ -53,15 +53,15 @@ cz --name cz_emoji commit Includes a pre-commit hook that automatically adds the correct gitmoji to the commit message based on the conventional type. -### Installation +#### Installation -```bash +```sh pip install cz-conventional-gitmoji ``` -### Usage +#### Usage -```bash +```sh cz --name cz_gitmoji commit ``` @@ -69,9 +69,17 @@ cz --name cz_gitmoji commit Just like _conventional commit_ format, but with emojis and optionally time spent and related tasks. -It can be installed with `pip install commitizen-emoji`. +#### Installation + +```sh +pip install commitizen-emoji +``` -Usage: `cz --name cz_commitizen_emoji commit`. +#### Usage + +```sh +cz --name cz_commitizen_emoji commit +``` ### [Conventional Legacy (cz_legacy)][1] @@ -79,19 +87,28 @@ An extension of the _conventional commit_ format to include user-specified legacy change types in the `CHANGELOG` while preventing the legacy change types from being used in new commit messages -`cz_legacy` can be installed with `pip install cz_legacy` +#### Installation + +```sh +pip install cz_legacy +``` + +#### Usage See the [README][1] for instructions on configuration [1]: https://pypi.org/project/cz_legacy +## Third-Party Commitizen Providers + +Commitizen can read and write version from different sources. In addition to the native providers, some alternative version sources are available as PyPI packages (installable with `pip`). + ### [commitizen-deno-provider](https://pypi.org/project/commitizen-deno-provider/) -A provider for Deno projects. The provider updates the version in deno.json and jsr.json files. +A provider for **Deno** projects. The provider updates the version in deno.json and jsr.json files. #### Installation - ```sh pip install commitizen-deno-provider ``` From 36cfcab746fd9a5c1bc495332fc3dcd11db967ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 18 Oct 2024 01:08:39 +0000 Subject: [PATCH 396/685] build(deps-dev): bump ruff from 0.6.9 to 0.7.0 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.9 to 0.7.0. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.6.9...0.7.0) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 40 ++++++++++++++++++++-------------------- pyproject.toml | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4259c11698..131b803d13 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1449,29 +1449,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.6.9" +version = "0.7.0" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.9-py3-none-linux_armv6l.whl", hash = "sha256:064df58d84ccc0ac0fcd63bc3090b251d90e2a372558c0f057c3f75ed73e1ccd"}, - {file = "ruff-0.6.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:140d4b5c9f5fc7a7b074908a78ab8d384dd7f6510402267bc76c37195c02a7ec"}, - {file = "ruff-0.6.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53fd8ca5e82bdee8da7f506d7b03a261f24cd43d090ea9db9a1dc59d9313914c"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645d7d8761f915e48a00d4ecc3686969761df69fb561dd914a773c1a8266e14e"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eae02b700763e3847595b9d2891488989cac00214da7f845f4bcf2989007d577"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d5ccc9e58112441de8ad4b29dcb7a86dc25c5f770e3c06a9d57e0e5eba48829"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:417b81aa1c9b60b2f8edc463c58363075412866ae4e2b9ab0f690dc1e87ac1b5"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c866b631f5fbce896a74a6e4383407ba7507b815ccc52bcedabb6810fdb3ef7"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b118afbb3202f5911486ad52da86d1d52305b59e7ef2031cea3425142b97d6f"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67267654edc23c97335586774790cde402fb6bbdb3c2314f1fc087dee320bfa"}, - {file = "ruff-0.6.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3ef0cc774b00fec123f635ce5c547dac263f6ee9fb9cc83437c5904183b55ceb"}, - {file = "ruff-0.6.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:12edd2af0c60fa61ff31cefb90aef4288ac4d372b4962c2864aeea3a1a2460c0"}, - {file = "ruff-0.6.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:55bb01caeaf3a60b2b2bba07308a02fca6ab56233302406ed5245180a05c5625"}, - {file = "ruff-0.6.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:925d26471fa24b0ce5a6cdfab1bb526fb4159952385f386bdcc643813d472039"}, - {file = "ruff-0.6.9-py3-none-win32.whl", hash = "sha256:eb61ec9bdb2506cffd492e05ac40e5bc6284873aceb605503d8494180d6fc84d"}, - {file = "ruff-0.6.9-py3-none-win_amd64.whl", hash = "sha256:785d31851c1ae91f45b3d8fe23b8ae4b5170089021fbb42402d811135f0b7117"}, - {file = "ruff-0.6.9-py3-none-win_arm64.whl", hash = "sha256:a9641e31476d601f83cd602608739a0840e348bda93fec9f1ee816f8b6798b93"}, - {file = "ruff-0.6.9.tar.gz", hash = "sha256:b076ef717a8e5bc819514ee1d602bbdca5b4420ae13a9cf61a0c0a4f53a2baa2"}, + {file = "ruff-0.7.0-py3-none-linux_armv6l.whl", hash = "sha256:0cdf20c2b6ff98e37df47b2b0bd3a34aaa155f59a11182c1303cce79be715628"}, + {file = "ruff-0.7.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:496494d350c7fdeb36ca4ef1c9f21d80d182423718782222c29b3e72b3512737"}, + {file = "ruff-0.7.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:214b88498684e20b6b2b8852c01d50f0651f3cc6118dfa113b4def9f14faaf06"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630fce3fefe9844e91ea5bbf7ceadab4f9981f42b704fae011bb8efcaf5d84be"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:211d877674e9373d4bb0f1c80f97a0201c61bcd1e9d045b6e9726adc42c156aa"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:194d6c46c98c73949a106425ed40a576f52291c12bc21399eb8f13a0f7073495"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:82c2579b82b9973a110fab281860403b397c08c403de92de19568f32f7178598"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9af971fe85dcd5eaed8f585ddbc6bdbe8c217fb8fcf510ea6bca5bdfff56040e"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b641c7f16939b7d24b7bfc0be4102c56562a18281f84f635604e8a6989948914"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d71672336e46b34e0c90a790afeac8a31954fd42872c1f6adaea1dff76fd44f9"}, + {file = "ruff-0.7.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ab7d98c7eed355166f367597e513a6c82408df4181a937628dbec79abb2a1fe4"}, + {file = "ruff-0.7.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1eb54986f770f49edb14f71d33312d79e00e629a57387382200b1ef12d6a4ef9"}, + {file = "ruff-0.7.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:dc452ba6f2bb9cf8726a84aa877061a2462afe9ae0ea1d411c53d226661c601d"}, + {file = "ruff-0.7.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:4b406c2dce5be9bad59f2de26139a86017a517e6bcd2688da515481c05a2cb11"}, + {file = "ruff-0.7.0-py3-none-win32.whl", hash = "sha256:f6c968509f767776f524a8430426539587d5ec5c662f6addb6aa25bc2e8195ec"}, + {file = "ruff-0.7.0-py3-none-win_amd64.whl", hash = "sha256:ff4aabfbaaba880e85d394603b9e75d32b0693152e16fa659a3064a85df7fce2"}, + {file = "ruff-0.7.0-py3-none-win_arm64.whl", hash = "sha256:10842f69c245e78d6adec7e1db0a7d9ddc2fff0621d730e61657b64fa36f207e"}, + {file = "ruff-0.7.0.tar.gz", hash = "sha256:47a86360cf62d9cd53ebfb0b5eb0e882193fc191c6d717e8bef4462bc3b9ea2b"}, ] [[package]] @@ -1815,4 +1815,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.8" -content-hash = "67940b1bdb20630081a00248b6a51f093a44a2da76048873c722c97689a2a31c" +content-hash = "9f70911e2e4764b623fece710f5c545e7313fa9e5a03fdeec8266faf3c5b7c26" diff --git a/pyproject.toml b/pyproject.toml index 35a5f119a5..997136f6e2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,7 @@ pytest-regressions = "^2.4.0" pytest-freezer = "^0.4.6" pytest-xdist = "^3.1.0" # linter -ruff = ">=0.5.0,<0.7.0" +ruff = ">=0.5.0,<0.8.0" pre-commit = ">=2.18,<4.0" mypy = "^1.4" types-PyYAML = ">=5.4.3,<7.0.0" From 4968868b7d036eda01fd2d1fec738115a6e88941 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 01:37:05 +0000 Subject: [PATCH 397/685] build(deps-dev): bump mypy from 1.12.0 to 1.12.1 Bumps [mypy](https://github.com/python/mypy) from 1.12.0 to 1.12.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.12.0...v1.12.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 66 ++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/poetry.lock b/poetry.lock index 131b803d13..d039066213 100644 --- a/poetry.lock +++ b/poetry.lock @@ -809,43 +809,43 @@ files = [ [[package]] name = "mypy" -version = "1.12.0" +version = "1.12.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4397081e620dc4dc18e2f124d5e1d2c288194c2c08df6bdb1db31c38cd1fe1ed"}, - {file = "mypy-1.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:684a9c508a283f324804fea3f0effeb7858eb03f85c4402a967d187f64562469"}, - {file = "mypy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cabe4cda2fa5eca7ac94854c6c37039324baaa428ecbf4de4567279e9810f9e"}, - {file = "mypy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:060a07b10e999ac9e7fa249ce2bdcfa9183ca2b70756f3bce9df7a92f78a3c0a"}, - {file = "mypy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:0eff042d7257f39ba4ca06641d110ca7d2ad98c9c1fb52200fe6b1c865d360ff"}, - {file = "mypy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b86de37a0da945f6d48cf110d5206c5ed514b1ca2614d7ad652d4bf099c7de7"}, - {file = "mypy-1.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20c7c5ce0c1be0b0aea628374e6cf68b420bcc772d85c3c974f675b88e3e6e57"}, - {file = "mypy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a64ee25f05fc2d3d8474985c58042b6759100a475f8237da1f4faf7fcd7e6309"}, - {file = "mypy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:faca7ab947c9f457a08dcb8d9a8664fd438080e002b0fa3e41b0535335edcf7f"}, - {file = "mypy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:5bc81701d52cc8767005fdd2a08c19980de9ec61a25dbd2a937dfb1338a826f9"}, - {file = "mypy-1.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8462655b6694feb1c99e433ea905d46c478041a8b8f0c33f1dab00ae881b2164"}, - {file = "mypy-1.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:923ea66d282d8af9e0f9c21ffc6653643abb95b658c3a8a32dca1eff09c06475"}, - {file = "mypy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1ebf9e796521f99d61864ed89d1fb2926d9ab6a5fab421e457cd9c7e4dd65aa9"}, - {file = "mypy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e478601cc3e3fa9d6734d255a59c7a2e5c2934da4378f3dd1e3411ea8a248642"}, - {file = "mypy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:c72861b7139a4f738344faa0e150834467521a3fba42dc98264e5aa9507dd601"}, - {file = "mypy-1.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52b9e1492e47e1790360a43755fa04101a7ac72287b1a53ce817f35899ba0521"}, - {file = "mypy-1.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:48d3e37dd7d9403e38fa86c46191de72705166d40b8c9f91a3de77350daa0893"}, - {file = "mypy-1.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f106db5ccb60681b622ac768455743ee0e6a857724d648c9629a9bd2ac3f721"}, - {file = "mypy-1.12.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:233e11b3f73ee1f10efada2e6da0f555b2f3a5316e9d8a4a1224acc10e7181d3"}, - {file = "mypy-1.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:4ae8959c21abcf9d73aa6c74a313c45c0b5a188752bf37dace564e29f06e9c1b"}, - {file = "mypy-1.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eafc1b7319b40ddabdc3db8d7d48e76cfc65bbeeafaa525a4e0fa6b76175467f"}, - {file = "mypy-1.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9b9ce1ad8daeb049c0b55fdb753d7414260bad8952645367e70ac91aec90e07e"}, - {file = "mypy-1.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfe012b50e1491d439172c43ccb50db66d23fab714d500b57ed52526a1020bb7"}, - {file = "mypy-1.12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c40658d4fa1ab27cb53d9e2f1066345596af2f8fe4827defc398a09c7c9519b"}, - {file = "mypy-1.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:dee78a8b9746c30c1e617ccb1307b351ded57f0de0d287ca6276378d770006c0"}, - {file = "mypy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b5df6c8a8224f6b86746bda716bbe4dbe0ce89fd67b1fa4661e11bfe38e8ec8"}, - {file = "mypy-1.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5feee5c74eb9749e91b77f60b30771563327329e29218d95bedbe1257e2fe4b0"}, - {file = "mypy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:77278e8c6ffe2abfba6db4125de55f1024de9a323be13d20e4f73b8ed3402bd1"}, - {file = "mypy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dcfb754dea911039ac12434d1950d69a2f05acd4d56f7935ed402be09fad145e"}, - {file = "mypy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:06de0498798527451ffb60f68db0d368bd2bae2bbfb5237eae616d4330cc87aa"}, - {file = "mypy-1.12.0-py3-none-any.whl", hash = "sha256:fd313226af375d52e1e36c383f39bf3836e1f192801116b31b090dfcd3ec5266"}, - {file = "mypy-1.12.0.tar.gz", hash = "sha256:65a22d87e757ccd95cbbf6f7e181e6caa87128255eb2b6be901bb71b26d8a99d"}, + {file = "mypy-1.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3d7d4371829184e22fda4015278fbfdef0327a4b955a483012bd2d423a788801"}, + {file = "mypy-1.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f59f1dfbf497d473201356966e353ef09d4daec48caeacc0254db8ef633a28a5"}, + {file = "mypy-1.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b947097fae68004b8328c55161ac9db7d3566abfef72d9d41b47a021c2fba6b1"}, + {file = "mypy-1.12.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96af62050971c5241afb4701c15189ea9507db89ad07794a4ee7b4e092dc0627"}, + {file = "mypy-1.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:d90da248f4c2dba6c44ddcfea94bb361e491962f05f41990ff24dbd09969ce20"}, + {file = "mypy-1.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1230048fec1380faf240be6385e709c8570604d2d27ec6ca7e573e3bc09c3735"}, + {file = "mypy-1.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02dcfe270c6ea13338210908f8cadc8d31af0f04cee8ca996438fe6a97b4ec66"}, + {file = "mypy-1.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5a437c9102a6a252d9e3a63edc191a3aed5f2fcb786d614722ee3f4472e33f6"}, + {file = "mypy-1.12.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:186e0c8346efc027ee1f9acf5ca734425fc4f7dc2b60144f0fbe27cc19dc7931"}, + {file = "mypy-1.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:673ba1140a478b50e6d265c03391702fa11a5c5aff3f54d69a62a48da32cb811"}, + {file = "mypy-1.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9fb83a7be97c498176fb7486cafbb81decccaef1ac339d837c377b0ce3743a7f"}, + {file = "mypy-1.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:389e307e333879c571029d5b93932cf838b811d3f5395ed1ad05086b52148fb0"}, + {file = "mypy-1.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94b2048a95a21f7a9ebc9fbd075a4fcd310410d078aa0228dbbad7f71335e042"}, + {file = "mypy-1.12.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ee5932370ccf7ebf83f79d1c157a5929d7ea36313027b0d70a488493dc1b179"}, + {file = "mypy-1.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:19bf51f87a295e7ab2894f1d8167622b063492d754e69c3c2fed6563268cb42a"}, + {file = "mypy-1.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d34167d43613ffb1d6c6cdc0cc043bb106cac0aa5d6a4171f77ab92a3c758bcc"}, + {file = "mypy-1.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:427878aa54f2e2c5d8db31fa9010c599ed9f994b3b49e64ae9cd9990c40bd635"}, + {file = "mypy-1.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5fcde63ea2c9f69d6be859a1e6dd35955e87fa81de95bc240143cf00de1f7f81"}, + {file = "mypy-1.12.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d54d840f6c052929f4a3d2aab2066af0f45a020b085fe0e40d4583db52aab4e4"}, + {file = "mypy-1.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:20db6eb1ca3d1de8ece00033b12f793f1ea9da767334b7e8c626a4872090cf02"}, + {file = "mypy-1.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b16fe09f9c741d85a2e3b14a5257a27a4f4886c171d562bc5a5e90d8591906b8"}, + {file = "mypy-1.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0dcc1e843d58f444fce19da4cce5bd35c282d4bde232acdeca8279523087088a"}, + {file = "mypy-1.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e10ba7de5c616e44ad21005fa13450cd0de7caaa303a626147d45307492e4f2d"}, + {file = "mypy-1.12.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0e6fe449223fa59fbee351db32283838a8fee8059e0028e9e6494a03802b4004"}, + {file = "mypy-1.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:dc6e2a2195a290a7fd5bac3e60b586d77fc88e986eba7feced8b778c373f9afe"}, + {file = "mypy-1.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:de5b2a8988b4e1269a98beaf0e7cc71b510d050dce80c343b53b4955fff45f19"}, + {file = "mypy-1.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843826966f1d65925e8b50d2b483065c51fc16dc5d72647e0236aae51dc8d77e"}, + {file = "mypy-1.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fe20f89da41a95e14c34b1ddb09c80262edcc295ad891f22cc4b60013e8f78d"}, + {file = "mypy-1.12.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8135ffec02121a75f75dc97c81af7c14aa4ae0dda277132cfcd6abcd21551bfd"}, + {file = "mypy-1.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:a7b76fa83260824300cc4834a3ab93180db19876bce59af921467fd03e692810"}, + {file = "mypy-1.12.1-py3-none-any.whl", hash = "sha256:ce561a09e3bb9863ab77edf29ae3a50e65685ad74bba1431278185b7e5d5486e"}, + {file = "mypy-1.12.1.tar.gz", hash = "sha256:f5b3936f7a6d0e8280c9bdef94c7ce4847f5cdfc258fbb2c29a8c1711e8bb96d"}, ] [package.dependencies] From 29d6e64bfed337aeb734714a019dd38473457690 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 01:36:14 +0000 Subject: [PATCH 398/685] build(deps-dev): bump mkdocs-material from 9.5.41 to 9.5.42 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.41 to 9.5.42. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.41...9.5.42) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index d039066213..38e07d51f1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -769,13 +769,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.41" +version = "9.5.42" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.41-py3-none-any.whl", hash = "sha256:990bc138c33342b5b73e7545915ebc0136e501bfbd8e365735144f5120891d83"}, - {file = "mkdocs_material-9.5.41.tar.gz", hash = "sha256:30fa5d459b4b8130848ecd8e1c908878345d9d8268f7ddbc31eebe88d462d97b"}, + {file = "mkdocs_material-9.5.42-py3-none-any.whl", hash = "sha256:452a7c5d21284b373f36b981a2cbebfff59263feebeede1bc28652e9c5bbe316"}, + {file = "mkdocs_material-9.5.42.tar.gz", hash = "sha256:92779b5e9b5934540c574c11647131d217dc540dce72b05feeda088c8eb1b8f2"}, ] [package.dependencies] From af3553b2a5b92bb2afab3f068d47fdcabe0857a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Oct 2024 01:17:32 +0000 Subject: [PATCH 399/685] build(deps-dev): bump rich from 13.9.2 to 13.9.3 Bumps [rich](https://github.com/Textualize/rich) from 13.9.2 to 13.9.3. - [Release notes](https://github.com/Textualize/rich/releases) - [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md) - [Commits](https://github.com/Textualize/rich/compare/v13.9.2...v13.9.3) --- updated-dependencies: - dependency-name: rich dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 38e07d51f1..77d7277d7c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1430,13 +1430,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rich" -version = "13.9.2" +version = "13.9.3" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" files = [ - {file = "rich-13.9.2-py3-none-any.whl", hash = "sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1"}, - {file = "rich-13.9.2.tar.gz", hash = "sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c"}, + {file = "rich-13.9.3-py3-none-any.whl", hash = "sha256:9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283"}, + {file = "rich-13.9.3.tar.gz", hash = "sha256:bc1e01b899537598cf02579d2b9f4a415104d3fc439313a7a2c165d76557a08e"}, ] [package.dependencies] From e5aaec47b51c44285de67b3302438fc7e411d20a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Oct 2024 01:18:07 +0000 Subject: [PATCH 400/685] build(deps-dev): bump mypy from 1.12.1 to 1.13.0 Bumps [mypy](https://github.com/python/mypy) from 1.12.1 to 1.13.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.12.1...v1.13.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 67 +++++++++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/poetry.lock b/poetry.lock index 77d7277d7c..93f9915ac9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -809,43 +809,43 @@ files = [ [[package]] name = "mypy" -version = "1.12.1" +version = "1.13.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3d7d4371829184e22fda4015278fbfdef0327a4b955a483012bd2d423a788801"}, - {file = "mypy-1.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f59f1dfbf497d473201356966e353ef09d4daec48caeacc0254db8ef633a28a5"}, - {file = "mypy-1.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b947097fae68004b8328c55161ac9db7d3566abfef72d9d41b47a021c2fba6b1"}, - {file = "mypy-1.12.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96af62050971c5241afb4701c15189ea9507db89ad07794a4ee7b4e092dc0627"}, - {file = "mypy-1.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:d90da248f4c2dba6c44ddcfea94bb361e491962f05f41990ff24dbd09969ce20"}, - {file = "mypy-1.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1230048fec1380faf240be6385e709c8570604d2d27ec6ca7e573e3bc09c3735"}, - {file = "mypy-1.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02dcfe270c6ea13338210908f8cadc8d31af0f04cee8ca996438fe6a97b4ec66"}, - {file = "mypy-1.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5a437c9102a6a252d9e3a63edc191a3aed5f2fcb786d614722ee3f4472e33f6"}, - {file = "mypy-1.12.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:186e0c8346efc027ee1f9acf5ca734425fc4f7dc2b60144f0fbe27cc19dc7931"}, - {file = "mypy-1.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:673ba1140a478b50e6d265c03391702fa11a5c5aff3f54d69a62a48da32cb811"}, - {file = "mypy-1.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9fb83a7be97c498176fb7486cafbb81decccaef1ac339d837c377b0ce3743a7f"}, - {file = "mypy-1.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:389e307e333879c571029d5b93932cf838b811d3f5395ed1ad05086b52148fb0"}, - {file = "mypy-1.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94b2048a95a21f7a9ebc9fbd075a4fcd310410d078aa0228dbbad7f71335e042"}, - {file = "mypy-1.12.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ee5932370ccf7ebf83f79d1c157a5929d7ea36313027b0d70a488493dc1b179"}, - {file = "mypy-1.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:19bf51f87a295e7ab2894f1d8167622b063492d754e69c3c2fed6563268cb42a"}, - {file = "mypy-1.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d34167d43613ffb1d6c6cdc0cc043bb106cac0aa5d6a4171f77ab92a3c758bcc"}, - {file = "mypy-1.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:427878aa54f2e2c5d8db31fa9010c599ed9f994b3b49e64ae9cd9990c40bd635"}, - {file = "mypy-1.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5fcde63ea2c9f69d6be859a1e6dd35955e87fa81de95bc240143cf00de1f7f81"}, - {file = "mypy-1.12.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d54d840f6c052929f4a3d2aab2066af0f45a020b085fe0e40d4583db52aab4e4"}, - {file = "mypy-1.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:20db6eb1ca3d1de8ece00033b12f793f1ea9da767334b7e8c626a4872090cf02"}, - {file = "mypy-1.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b16fe09f9c741d85a2e3b14a5257a27a4f4886c171d562bc5a5e90d8591906b8"}, - {file = "mypy-1.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0dcc1e843d58f444fce19da4cce5bd35c282d4bde232acdeca8279523087088a"}, - {file = "mypy-1.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e10ba7de5c616e44ad21005fa13450cd0de7caaa303a626147d45307492e4f2d"}, - {file = "mypy-1.12.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0e6fe449223fa59fbee351db32283838a8fee8059e0028e9e6494a03802b4004"}, - {file = "mypy-1.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:dc6e2a2195a290a7fd5bac3e60b586d77fc88e986eba7feced8b778c373f9afe"}, - {file = "mypy-1.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:de5b2a8988b4e1269a98beaf0e7cc71b510d050dce80c343b53b4955fff45f19"}, - {file = "mypy-1.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843826966f1d65925e8b50d2b483065c51fc16dc5d72647e0236aae51dc8d77e"}, - {file = "mypy-1.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fe20f89da41a95e14c34b1ddb09c80262edcc295ad891f22cc4b60013e8f78d"}, - {file = "mypy-1.12.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8135ffec02121a75f75dc97c81af7c14aa4ae0dda277132cfcd6abcd21551bfd"}, - {file = "mypy-1.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:a7b76fa83260824300cc4834a3ab93180db19876bce59af921467fd03e692810"}, - {file = "mypy-1.12.1-py3-none-any.whl", hash = "sha256:ce561a09e3bb9863ab77edf29ae3a50e65685ad74bba1431278185b7e5d5486e"}, - {file = "mypy-1.12.1.tar.gz", hash = "sha256:f5b3936f7a6d0e8280c9bdef94c7ce4847f5cdfc258fbb2c29a8c1711e8bb96d"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, + {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, + {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, + {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, + {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, + {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, + {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, + {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, + {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, + {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, + {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, + {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, + {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, + {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, + {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, + {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, + {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, + {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, + {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, + {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, + {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, ] [package.dependencies] @@ -855,6 +855,7 @@ typing-extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] install-types = ["pip"] mypyc = ["setuptools (>=50)"] reports = ["lxml"] From 78dc765f057025b2f87ace7e39ab383844e01e50 Mon Sep 17 00:00:00 2001 From: Arne Schwerdt <arneschwerdt@gmail.com> Date: Thu, 17 Oct 2024 17:40:21 +0200 Subject: [PATCH 401/685] docs(commit): add multiline option `questions` content table --- docs/customization.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/customization.md b/docs/customization.md index e8f233fce1..c6829b5daf 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -168,14 +168,15 @@ commitizen: #### Detailed `questions` content -| Parameter | Type | Default | Description | -| --------- | ------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `type` | `str` | `None` | The type of questions. Valid type: `list`, `input` and etc. [See More][different-question-types] | -| `name` | `str` | `None` | The key for the value answered by user. It's used in `message_template` | -| `message` | `str` | `None` | Detail description for the question. | -| `choices` | `list` | `None` | (OPTIONAL) The choices when `type = list`. Either use a list of values or a list of dictionaries with `name` and `value` keys. Keyboard shortcuts can be defined via `key`. See examples above. | -| `default` | `Any` | `None` | (OPTIONAL) The default value for this question. | -| `filter` | `str` | `None` | (Optional) Validator for user's answer. **(Work in Progress)** | +| Parameter | Type | Default | Description | +| ----------- | ------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | `str` | `None` | The type of questions. Valid type: `list`, `input` and etc. [See More][different-question-types] | +| `name` | `str` | `None` | The key for the value answered by user. It's used in `message_template` | +| `message` | `str` | `None` | Detail description for the question. | +| `choices` | `list` | `None` | (OPTIONAL) The choices when `type = list`. Either use a list of values or a list of dictionaries with `name` and `value` keys. Keyboard shortcuts can be defined via `key`. See examples above. | +| `default` | `Any` | `None` | (OPTIONAL) The default value for this question. | +| `filter` | `str` | `None` | (Optional) Validator for user's answer. **(Work in Progress)** | +| `multiline` | `bool` | `False` | (OPTIONAL) Enable multiline support when `type = input`. | [different-question-types]: https://github.com/tmbo/questionary#different-question-types #### Shortcut keys From 2f6b7ccf30da38dcd76af01f6498c54918d4d985 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Wed, 23 Oct 2024 09:41:18 +0800 Subject: [PATCH 402/685] docs(customization): Unify capitalization --- docs/customization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/customization.md b/docs/customization.md index c6829b5daf..3ba0bf6f3c 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -175,7 +175,7 @@ commitizen: | `message` | `str` | `None` | Detail description for the question. | | `choices` | `list` | `None` | (OPTIONAL) The choices when `type = list`. Either use a list of values or a list of dictionaries with `name` and `value` keys. Keyboard shortcuts can be defined via `key`. See examples above. | | `default` | `Any` | `None` | (OPTIONAL) The default value for this question. | -| `filter` | `str` | `None` | (Optional) Validator for user's answer. **(Work in Progress)** | +| `filter` | `str` | `None` | (OPTIONAL) Validator for user's answer. **(Work in Progress)** | | `multiline` | `bool` | `False` | (OPTIONAL) Enable multiline support when `type = input`. | [different-question-types]: https://github.com/tmbo/questionary#different-question-types From 08a259d2de99138035c08af35ec515fb8455aa83 Mon Sep 17 00:00:00 2001 From: josix <josixwang@gmail.com> Date: Tue, 15 Oct 2024 19:04:42 +0800 Subject: [PATCH 403/685] feat(commands/commit): add force-edit functionality after answering questions refactor: remove redundant return None Co-authored-by: Wei Lee <weilee.rx@gmail.com> Update test_commit_command.py Co-authored-by: Wei Lee <weilee.rx@gmail.com> --- commitizen/cli.py | 6 + commitizen/commands/commit.py | 24 ++++ commitizen/git.py | 7 ++ docs/contributing.md | 2 +- docs/images/cli_help/cz_commit___help.svg | 112 +++++++++--------- tests/commands/test_commit_command.py | 30 +++++ ...shows_description_when_use_help_option.txt | 3 +- tests/test_git.py | 20 ++++ 8 files changed, 148 insertions(+), 56 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 3c529e4210..e911b6da58 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -156,6 +156,12 @@ def __call__( "action": "store_true", "help": "Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.", }, + { + "name": ["-e", "--edit"], + "action": "store_true", + "default": False, + "help": "edit the commit message before committing", + }, { "name": ["-l", "--message-length-limit"], "type": int, diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 0816b2e508..c955d02a51 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -2,6 +2,9 @@ import contextlib import os +import shutil +import subprocess +import tempfile import questionary @@ -72,9 +75,27 @@ def prompt_commit_questions(self) -> str: return message + def manual_edit(self, message: str) -> str: + editor = git.get_core_editor() + if editor is None: + raise RuntimeError("No 'editor' value given and no default available.") + exec_path = shutil.which(editor) + if exec_path is None: + raise RuntimeError(f"Editor '{editor}' not found.") + with tempfile.NamedTemporaryFile(mode="w", delete=False) as file: + file.write(message) + file_path = file.name + argv = [exec_path, file_path] + subprocess.call(argv) + with open(file_path) as temp_file: + message = temp_file.read().strip() + file.unlink() + return message + def __call__(self): dry_run: bool = self.arguments.get("dry_run") write_message_to_file: bool = self.arguments.get("write_message_to_file") + manual_edit: bool = self.arguments.get("edit") is_all: bool = self.arguments.get("all") if is_all: @@ -101,6 +122,9 @@ def __call__(self): else: m = self.prompt_commit_questions() + if manual_edit: + m = self.manual_edit(m) + out.info(f"\n{m}\n") if write_message_to_file: diff --git a/commitizen/git.py b/commitizen/git.py index 1f758889ed..7de8e1f1c8 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -271,6 +271,13 @@ def get_eol_style() -> EOLTypes: return map["native"] +def get_core_editor() -> str | None: + c = cmd.run("git var GIT_EDITOR") + if c.out: + return c.out.strip() + return None + + def smart_open(*args, **kargs): """Open a file with the EOL style determined from Git.""" return open(*args, newline=get_eol_style().get_eol_for_open(), **kargs) diff --git a/docs/contributing.md b/docs/contributing.md index a41843d753..a49196277e 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -22,7 +22,7 @@ If you're a first-time contributor, you can check the issues with [good first is (We use [CodeCov](https://codecov.io/) to ensure our test coverage does not drop.) 7. Use [commitizen](https://github.com/commitizen-tools/commitizen) to do git commit. We follow [conventional commits](https://www.conventionalcommits.org/). 8. Run `./scripts/format` and `./scripts/test` to ensure you follow the coding style and the tests pass. -9. Optionally, update the `./docs/README.md`. +9. Optionally, update the `./docs/README.md` or `docs/images/cli_help` (through running `scripts/gen_cli_help_screenshots.py`). 9. **Do not** update the `CHANGELOG.md`, it will be automatically created after merging to `master`. 10. **Do not** update the versions in the project, they will be automatically updated. 10. If your changes are about documentation. Run `poetry run mkdocs serve` to serve documentation locally and check whether there is any warning or error. diff --git a/docs/images/cli_help/cz_commit___help.svg b/docs/images/cli_help/cz_commit___help.svg index 1b7c98953c..452e419908 100644 --- a/docs/images/cli_help/cz_commit___help.svg +++ b/docs/images/cli_help/cz_commit___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 586.8" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 611.1999999999999" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,125 +19,129 @@ font-weight: 700; } - .terminal-3906085552-matrix { + .terminal-4094976563-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3906085552-title { + .terminal-4094976563-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3906085552-r1 { fill: #c5c8c6 } -.terminal-3906085552-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-3906085552-r3 { fill: #68a0b3;font-weight: bold } + .terminal-4094976563-r1 { fill: #c5c8c6 } +.terminal-4094976563-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-4094976563-r3 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-3906085552-clip-terminal"> - <rect x="0" y="0" width="975.0" height="535.8" /> + <clipPath id="terminal-4094976563-clip-terminal"> + <rect x="0" y="0" width="975.0" height="560.1999999999999" /> </clipPath> - <clipPath id="terminal-3906085552-line-0"> + <clipPath id="terminal-4094976563-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-1"> +<clipPath id="terminal-4094976563-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-2"> +<clipPath id="terminal-4094976563-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-3"> +<clipPath id="terminal-4094976563-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-4"> +<clipPath id="terminal-4094976563-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-5"> +<clipPath id="terminal-4094976563-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-6"> +<clipPath id="terminal-4094976563-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-7"> +<clipPath id="terminal-4094976563-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-8"> +<clipPath id="terminal-4094976563-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-9"> +<clipPath id="terminal-4094976563-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-10"> +<clipPath id="terminal-4094976563-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-11"> +<clipPath id="terminal-4094976563-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-12"> +<clipPath id="terminal-4094976563-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-13"> +<clipPath id="terminal-4094976563-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-14"> +<clipPath id="terminal-4094976563-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-15"> +<clipPath id="terminal-4094976563-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-16"> +<clipPath id="terminal-4094976563-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-17"> +<clipPath id="terminal-4094976563-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-18"> +<clipPath id="terminal-4094976563-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-19"> +<clipPath id="terminal-4094976563-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3906085552-line-20"> +<clipPath id="terminal-4094976563-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-4094976563-line-21"> + <rect x="0" y="513.9" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="584.8" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="609.2" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-3906085552-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-4094976563-clip-terminal)"> - <g class="terminal-3906085552-matrix"> - <text class="terminal-3906085552-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-3906085552-line-0)">$ cz commit --help</text><text class="terminal-3906085552-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3906085552-line-0)"> -</text><text class="terminal-3906085552-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-3906085552-line-1)">usage: cz commit </text><text class="terminal-3906085552-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">[</text><text class="terminal-3906085552-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-3906085552-line-1)">-h</text><text class="terminal-3906085552-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">]</text><text class="terminal-3906085552-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">[</text><text class="terminal-3906085552-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-3906085552-line-1)">--retry</text><text class="terminal-3906085552-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">]</text><text class="terminal-3906085552-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">[</text><text class="terminal-3906085552-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-3906085552-line-1)">--no-retry</text><text class="terminal-3906085552-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">]</text><text class="terminal-3906085552-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">[</text><text class="terminal-3906085552-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-3906085552-line-1)">--dry-run</text><text class="terminal-3906085552-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)">]</text><text class="terminal-3906085552-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-1)"> -</text><text class="terminal-3906085552-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)">[</text><text class="terminal-3906085552-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-3906085552-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-3906085552-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)">]</text><text class="terminal-3906085552-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)">[</text><text class="terminal-3906085552-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-3906085552-line-2)">-s</text><text class="terminal-3906085552-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)">]</text><text class="terminal-3906085552-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)">[</text><text class="terminal-3906085552-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-3906085552-line-2)">-a</text><text class="terminal-3906085552-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)">]</text><text class="terminal-3906085552-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-2)"> -</text><text class="terminal-3906085552-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-3)">[</text><text class="terminal-3906085552-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-3906085552-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-3906085552-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-3)">]</text><text class="terminal-3906085552-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-3)"> -</text><text class="terminal-3906085552-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3906085552-line-4)"> -</text><text class="terminal-3906085552-r1" x="0" y="142" textLength="207.4" clip-path="url(#terminal-3906085552-line-5)">create new commit</text><text class="terminal-3906085552-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3906085552-line-5)"> -</text><text class="terminal-3906085552-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-6)"> -</text><text class="terminal-3906085552-r1" x="0" y="190.8" textLength="97.6" clip-path="url(#terminal-3906085552-line-7)">options:</text><text class="terminal-3906085552-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-7)"> -</text><text class="terminal-3906085552-r1" x="0" y="215.2" textLength="671" clip-path="url(#terminal-3906085552-line-8)">  -h, --help            show this help message and exit</text><text class="terminal-3906085552-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-8)"> -</text><text class="terminal-3906085552-r1" x="0" y="239.6" textLength="500.2" clip-path="url(#terminal-3906085552-line-9)">  --retry               retry last commit</text><text class="terminal-3906085552-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3906085552-line-9)"> -</text><text class="terminal-3906085552-r1" x="0" y="264" textLength="878.4" clip-path="url(#terminal-3906085552-line-10)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-3906085552-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3906085552-line-10)"> -</text><text class="terminal-3906085552-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-3906085552-line-11)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-3906085552-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-11)"> -</text><text class="terminal-3906085552-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-3906085552-line-12)">  --write-message-to-file FILE_PATH</text><text class="terminal-3906085552-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-12)"> -</text><text class="terminal-3906085552-r1" x="0" y="337.2" textLength="780.8" clip-path="url(#terminal-3906085552-line-13)">                        write message to file before committing </text><text class="terminal-3906085552-r2" x="780.8" y="337.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-13)">(</text><text class="terminal-3906085552-r1" x="793" y="337.2" textLength="73.2" clip-path="url(#terminal-3906085552-line-13)">can be</text><text class="terminal-3906085552-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-13)"> -</text><text class="terminal-3906085552-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-3906085552-line-14)">                        combined with --dry-run</text><text class="terminal-3906085552-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-3906085552-line-14)">)</text><text class="terminal-3906085552-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3906085552-line-14)"> -</text><text class="terminal-3906085552-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-3906085552-line-15)">  -s, --signoff         sign off the commit</text><text class="terminal-3906085552-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3906085552-line-15)"> -</text><text class="terminal-3906085552-r1" x="0" y="410.4" textLength="902.8" clip-path="url(#terminal-3906085552-line-16)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-3906085552-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-16)"> -</text><text class="terminal-3906085552-r1" x="0" y="434.8" textLength="951.6" clip-path="url(#terminal-3906085552-line-17)">                        have been modified and deleted, but new files you have</text><text class="terminal-3906085552-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3906085552-line-17)"> -</text><text class="terminal-3906085552-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-3906085552-line-18)">                        not told Git about are not affected.</text><text class="terminal-3906085552-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3906085552-line-18)"> -</text><text class="terminal-3906085552-r1" x="0" y="483.6" textLength="854" clip-path="url(#terminal-3906085552-line-19)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-3906085552-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3906085552-line-19)"> -</text><text class="terminal-3906085552-r1" x="0" y="508" textLength="732" clip-path="url(#terminal-3906085552-line-20)">                        length limit of the commit message; </text><text class="terminal-3906085552-r3" x="732" y="508" textLength="12.2" clip-path="url(#terminal-3906085552-line-20)">0</text><text class="terminal-3906085552-r1" x="744.2" y="508" textLength="158.6" clip-path="url(#terminal-3906085552-line-20)"> for no limit</text><text class="terminal-3906085552-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3906085552-line-20)"> -</text><text class="terminal-3906085552-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3906085552-line-21)"> + <g class="terminal-4094976563-matrix"> + <text class="terminal-4094976563-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-4094976563-line-0)">$ cz commit --help</text><text class="terminal-4094976563-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-4094976563-line-0)"> +</text><text class="terminal-4094976563-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-4094976563-line-1)">usage: cz commit </text><text class="terminal-4094976563-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">[</text><text class="terminal-4094976563-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-4094976563-line-1)">-h</text><text class="terminal-4094976563-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">]</text><text class="terminal-4094976563-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">[</text><text class="terminal-4094976563-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-4094976563-line-1)">--retry</text><text class="terminal-4094976563-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">]</text><text class="terminal-4094976563-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">[</text><text class="terminal-4094976563-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-4094976563-line-1)">--no-retry</text><text class="terminal-4094976563-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">]</text><text class="terminal-4094976563-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">[</text><text class="terminal-4094976563-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-4094976563-line-1)">--dry-run</text><text class="terminal-4094976563-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">]</text><text class="terminal-4094976563-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)"> +</text><text class="terminal-4094976563-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">[</text><text class="terminal-4094976563-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-4094976563-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-4094976563-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">]</text><text class="terminal-4094976563-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">[</text><text class="terminal-4094976563-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-4094976563-line-2)">-s</text><text class="terminal-4094976563-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">]</text><text class="terminal-4094976563-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">[</text><text class="terminal-4094976563-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-4094976563-line-2)">-a</text><text class="terminal-4094976563-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">]</text><text class="terminal-4094976563-r2" x="768.6" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">[</text><text class="terminal-4094976563-r1" x="780.8" y="68.8" textLength="24.4" clip-path="url(#terminal-4094976563-line-2)">-e</text><text class="terminal-4094976563-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">]</text><text class="terminal-4094976563-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)"> +</text><text class="terminal-4094976563-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-3)">[</text><text class="terminal-4094976563-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-4094976563-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-4094976563-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-3)">]</text><text class="terminal-4094976563-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-3)"> +</text><text class="terminal-4094976563-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-4094976563-line-4)"> +</text><text class="terminal-4094976563-r1" x="0" y="142" textLength="207.4" clip-path="url(#terminal-4094976563-line-5)">create new commit</text><text class="terminal-4094976563-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-4094976563-line-5)"> +</text><text class="terminal-4094976563-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-6)"> +</text><text class="terminal-4094976563-r1" x="0" y="190.8" textLength="97.6" clip-path="url(#terminal-4094976563-line-7)">options:</text><text class="terminal-4094976563-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-7)"> +</text><text class="terminal-4094976563-r1" x="0" y="215.2" textLength="671" clip-path="url(#terminal-4094976563-line-8)">  -h, --help            show this help message and exit</text><text class="terminal-4094976563-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-8)"> +</text><text class="terminal-4094976563-r1" x="0" y="239.6" textLength="500.2" clip-path="url(#terminal-4094976563-line-9)">  --retry               retry last commit</text><text class="terminal-4094976563-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-4094976563-line-9)"> +</text><text class="terminal-4094976563-r1" x="0" y="264" textLength="878.4" clip-path="url(#terminal-4094976563-line-10)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-4094976563-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-4094976563-line-10)"> +</text><text class="terminal-4094976563-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-4094976563-line-11)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-4094976563-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-11)"> +</text><text class="terminal-4094976563-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-4094976563-line-12)">  --write-message-to-file FILE_PATH</text><text class="terminal-4094976563-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-12)"> +</text><text class="terminal-4094976563-r1" x="0" y="337.2" textLength="780.8" clip-path="url(#terminal-4094976563-line-13)">                        write message to file before committing </text><text class="terminal-4094976563-r2" x="780.8" y="337.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-13)">(</text><text class="terminal-4094976563-r1" x="793" y="337.2" textLength="73.2" clip-path="url(#terminal-4094976563-line-13)">can be</text><text class="terminal-4094976563-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-13)"> +</text><text class="terminal-4094976563-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-4094976563-line-14)">                        combined with --dry-run</text><text class="terminal-4094976563-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-4094976563-line-14)">)</text><text class="terminal-4094976563-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-4094976563-line-14)"> +</text><text class="terminal-4094976563-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-4094976563-line-15)">  -s, --signoff         sign off the commit</text><text class="terminal-4094976563-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-4094976563-line-15)"> +</text><text class="terminal-4094976563-r1" x="0" y="410.4" textLength="902.8" clip-path="url(#terminal-4094976563-line-16)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-4094976563-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-16)"> +</text><text class="terminal-4094976563-r1" x="0" y="434.8" textLength="951.6" clip-path="url(#terminal-4094976563-line-17)">                        have been modified and deleted, but new files you have</text><text class="terminal-4094976563-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-17)"> +</text><text class="terminal-4094976563-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-4094976563-line-18)">                        not told Git about are not affected.</text><text class="terminal-4094976563-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-18)"> +</text><text class="terminal-4094976563-r1" x="0" y="483.6" textLength="793" clip-path="url(#terminal-4094976563-line-19)">  -e, --edit            edit the commit message before committing</text><text class="terminal-4094976563-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-4094976563-line-19)"> +</text><text class="terminal-4094976563-r1" x="0" y="508" textLength="854" clip-path="url(#terminal-4094976563-line-20)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-4094976563-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-4094976563-line-20)"> +</text><text class="terminal-4094976563-r1" x="0" y="532.4" textLength="732" clip-path="url(#terminal-4094976563-line-21)">                        length limit of the commit message; </text><text class="terminal-4094976563-r3" x="732" y="532.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-21)">0</text><text class="terminal-4094976563-r1" x="744.2" y="532.4" textLength="158.6" clip-path="url(#terminal-4094976563-line-21)"> for no limit</text><text class="terminal-4094976563-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-21)"> +</text><text class="terminal-4094976563-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-22)"> </text> </g> </g> diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index 03ff51c42c..91a75e0970 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -410,6 +410,36 @@ def test_commit_command_with_message_length_limit(config, mocker: MockFixture): commands.Commit(config, {"message_length_limit": message_length - 1})() +@pytest.mark.usefixtures("staging_is_clean") +@pytest.mark.parametrize("editor", ["vim", None]) +def test_manual_edit(editor, config, mocker: MockFixture, tmp_path): + mocker.patch("commitizen.git.get_core_editor", return_value=editor) + subprocess_mock = mocker.patch("subprocess.call") + + mocker.patch("shutil.which", return_value=editor) + + test_message = "Initial commit message" + temp_file = tmp_path / "temp_commit_message" + temp_file.write_text(test_message) + + mock_temp_file = mocker.patch("tempfile.NamedTemporaryFile") + mock_temp_file.return_value.__enter__.return_value.name = str(temp_file) + + commit_cmd = commands.Commit(config, {"edit": True}) + + if editor is None: + with pytest.raises(RuntimeError): + commit_cmd.manual_edit(test_message) + else: + edited_message = commit_cmd.manual_edit(test_message) + + subprocess_mock.assert_called_once_with(["vim", str(temp_file)]) + + assert edited_message == test_message.strip() + + temp_file.unlink() + + @skip_below_py_3_13 def test_commit_command_shows_description_when_use_help_option( mocker: MockFixture, capsys, file_regression diff --git a/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt index 92f3cf5e87..955b3d8fd7 100644 --- a/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt @@ -1,5 +1,5 @@ usage: cz commit [-h] [--retry] [--no-retry] [--dry-run] - [--write-message-to-file FILE_PATH] [-s] [-a] + [--write-message-to-file FILE_PATH] [-s] [-a] [-e] [-l MESSAGE_LENGTH_LIMIT] create new commit @@ -16,5 +16,6 @@ options: -a, --all Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected. + -e, --edit edit the commit message before committing -l, --message-length-limit MESSAGE_LENGTH_LIMIT length limit of the commit message; 0 for no limit diff --git a/tests/test_git.py b/tests/test_git.py index 6ada76be6d..8bf995e8a8 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -283,6 +283,26 @@ def test_eoltypes_get_eol_for_open(): assert git.EOLTypes.get_eol_for_open(git.EOLTypes.CRLF) == "\r\n" +def test_get_core_editor(mocker): + mocker.patch.dict(os.environ, {"GIT_EDITOR": "nano"}) + assert git.get_core_editor() == "nano" + + mocker.patch.dict(os.environ, clear=True) + mocker.patch( + "commitizen.cmd.run", + return_value=cmd.Command( + out="vim", err="", stdout=b"", stderr=b"", return_code=0 + ), + ) + assert git.get_core_editor() == "vim" + + mocker.patch( + "commitizen.cmd.run", + return_value=cmd.Command(out="", err="", stdout=b"", stderr=b"", return_code=1), + ) + assert git.get_core_editor() is None + + def test_create_tag_with_message(tmp_commitizen_project): with tmp_commitizen_project.as_cwd(): create_file_and_commit("feat(test): test") From bfe422faef54a78ff8c0ce5dea0da053159c9f9d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Wed, 23 Oct 2024 13:51:04 +0000 Subject: [PATCH 404/685] =?UTF-8?q?bump:=20version=203.29.1=20=E2=86=92=20?= =?UTF-8?q?3.30.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 10 ++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9b5027b93d..a83ba0dcf6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v3.29.1 # automatically updated by Commitizen + rev: v3.30.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index fd591be06d..b93413fd4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## v3.30.0 (2024-10-23) + +### Feat + +- **commands/commit**: add force-edit functionality after answering questions + +### Refactor + +- remove redundant return None + ## v3.29.1 (2024-09-26) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index ca267c56e1..1df56e3df4 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.29.1" +__version__ = "3.30.0" diff --git a/pyproject.toml b/pyproject.toml index 997136f6e2..c4230d8edf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.29.1" +version = "3.30.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.29.1" +version = "3.30.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From a368e75a4ce958992bc3570748d5b8342136783a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Oct 2024 01:28:42 +0000 Subject: [PATCH 405/685] build(deps-dev): bump ruff from 0.7.0 to 0.7.1 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.7.0 to 0.7.1. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.7.0...0.7.1) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 93f9915ac9..255a6a0356 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1450,29 +1450,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.7.0" +version = "0.7.1" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.7.0-py3-none-linux_armv6l.whl", hash = "sha256:0cdf20c2b6ff98e37df47b2b0bd3a34aaa155f59a11182c1303cce79be715628"}, - {file = "ruff-0.7.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:496494d350c7fdeb36ca4ef1c9f21d80d182423718782222c29b3e72b3512737"}, - {file = "ruff-0.7.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:214b88498684e20b6b2b8852c01d50f0651f3cc6118dfa113b4def9f14faaf06"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630fce3fefe9844e91ea5bbf7ceadab4f9981f42b704fae011bb8efcaf5d84be"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:211d877674e9373d4bb0f1c80f97a0201c61bcd1e9d045b6e9726adc42c156aa"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:194d6c46c98c73949a106425ed40a576f52291c12bc21399eb8f13a0f7073495"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:82c2579b82b9973a110fab281860403b397c08c403de92de19568f32f7178598"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9af971fe85dcd5eaed8f585ddbc6bdbe8c217fb8fcf510ea6bca5bdfff56040e"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b641c7f16939b7d24b7bfc0be4102c56562a18281f84f635604e8a6989948914"}, - {file = "ruff-0.7.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d71672336e46b34e0c90a790afeac8a31954fd42872c1f6adaea1dff76fd44f9"}, - {file = "ruff-0.7.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ab7d98c7eed355166f367597e513a6c82408df4181a937628dbec79abb2a1fe4"}, - {file = "ruff-0.7.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1eb54986f770f49edb14f71d33312d79e00e629a57387382200b1ef12d6a4ef9"}, - {file = "ruff-0.7.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:dc452ba6f2bb9cf8726a84aa877061a2462afe9ae0ea1d411c53d226661c601d"}, - {file = "ruff-0.7.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:4b406c2dce5be9bad59f2de26139a86017a517e6bcd2688da515481c05a2cb11"}, - {file = "ruff-0.7.0-py3-none-win32.whl", hash = "sha256:f6c968509f767776f524a8430426539587d5ec5c662f6addb6aa25bc2e8195ec"}, - {file = "ruff-0.7.0-py3-none-win_amd64.whl", hash = "sha256:ff4aabfbaaba880e85d394603b9e75d32b0693152e16fa659a3064a85df7fce2"}, - {file = "ruff-0.7.0-py3-none-win_arm64.whl", hash = "sha256:10842f69c245e78d6adec7e1db0a7d9ddc2fff0621d730e61657b64fa36f207e"}, - {file = "ruff-0.7.0.tar.gz", hash = "sha256:47a86360cf62d9cd53ebfb0b5eb0e882193fc191c6d717e8bef4462bc3b9ea2b"}, + {file = "ruff-0.7.1-py3-none-linux_armv6l.whl", hash = "sha256:cb1bc5ed9403daa7da05475d615739cc0212e861b7306f314379d958592aaa89"}, + {file = "ruff-0.7.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:27c1c52a8d199a257ff1e5582d078eab7145129aa02721815ca8fa4f9612dc35"}, + {file = "ruff-0.7.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:588a34e1ef2ea55b4ddfec26bbe76bc866e92523d8c6cdec5e8aceefeff02d99"}, + {file = "ruff-0.7.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94fc32f9cdf72dc75c451e5f072758b118ab8100727168a3df58502b43a599ca"}, + {file = "ruff-0.7.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:985818742b833bffa543a84d1cc11b5e6871de1b4e0ac3060a59a2bae3969250"}, + {file = "ruff-0.7.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32f1e8a192e261366c702c5fb2ece9f68d26625f198a25c408861c16dc2dea9c"}, + {file = "ruff-0.7.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:699085bf05819588551b11751eff33e9ca58b1b86a6843e1b082a7de40da1565"}, + {file = "ruff-0.7.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:344cc2b0814047dc8c3a8ff2cd1f3d808bb23c6658db830d25147339d9bf9ea7"}, + {file = "ruff-0.7.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4316bbf69d5a859cc937890c7ac7a6551252b6a01b1d2c97e8fc96e45a7c8b4a"}, + {file = "ruff-0.7.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79d3af9dca4c56043e738a4d6dd1e9444b6d6c10598ac52d146e331eb155a8ad"}, + {file = "ruff-0.7.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c5c121b46abde94a505175524e51891f829414e093cd8326d6e741ecfc0a9112"}, + {file = "ruff-0.7.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8422104078324ea250886954e48f1373a8fe7de59283d747c3a7eca050b4e378"}, + {file = "ruff-0.7.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:56aad830af8a9db644e80098fe4984a948e2b6fc2e73891538f43bbe478461b8"}, + {file = "ruff-0.7.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:658304f02f68d3a83c998ad8bf91f9b4f53e93e5412b8f2388359d55869727fd"}, + {file = "ruff-0.7.1-py3-none-win32.whl", hash = "sha256:b517a2011333eb7ce2d402652ecaa0ac1a30c114fbbd55c6b8ee466a7f600ee9"}, + {file = "ruff-0.7.1-py3-none-win_amd64.whl", hash = "sha256:f38c41fcde1728736b4eb2b18850f6d1e3eedd9678c914dede554a70d5241307"}, + {file = "ruff-0.7.1-py3-none-win_arm64.whl", hash = "sha256:19aa200ec824c0f36d0c9114c8ec0087082021732979a359d6f3c390a6ff2a37"}, + {file = "ruff-0.7.1.tar.gz", hash = "sha256:9d8a41d4aa2dad1575adb98a82870cf5db5f76b2938cf2206c22c940034a36f4"}, ] [[package]] From ffb26fb524e46916736bd08cab49c1dd663d7111 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 01:50:54 +0000 Subject: [PATCH 406/685] build(deps-dev): bump mkdocs-material from 9.5.42 to 9.5.43 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.42 to 9.5.43. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.42...9.5.43) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 255a6a0356..f54f032e0c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -769,13 +769,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.42" +version = "9.5.43" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.42-py3-none-any.whl", hash = "sha256:452a7c5d21284b373f36b981a2cbebfff59263feebeede1bc28652e9c5bbe316"}, - {file = "mkdocs_material-9.5.42.tar.gz", hash = "sha256:92779b5e9b5934540c574c11647131d217dc540dce72b05feeda088c8eb1b8f2"}, + {file = "mkdocs_material-9.5.43-py3-none-any.whl", hash = "sha256:4aae0664c456fd12837a3192e0225c17960ba8bf55d7f0a7daef7e4b0b914a34"}, + {file = "mkdocs_material-9.5.43.tar.gz", hash = "sha256:83be7ff30b65a1e4930dfa4ab911e75780a3afc9583d162692e434581cb46979"}, ] [package.dependencies] From d785b3c2c92ff5c6d4d796b28ace1c7dd8b563fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 01:17:32 +0000 Subject: [PATCH 407/685] build(deps-dev): bump ruff from 0.7.1 to 0.7.2 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.7.1 to 0.7.2. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.7.1...0.7.2) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index f54f032e0c..8c852e59db 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1450,29 +1450,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.7.1" +version = "0.7.2" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.7.1-py3-none-linux_armv6l.whl", hash = "sha256:cb1bc5ed9403daa7da05475d615739cc0212e861b7306f314379d958592aaa89"}, - {file = "ruff-0.7.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:27c1c52a8d199a257ff1e5582d078eab7145129aa02721815ca8fa4f9612dc35"}, - {file = "ruff-0.7.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:588a34e1ef2ea55b4ddfec26bbe76bc866e92523d8c6cdec5e8aceefeff02d99"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94fc32f9cdf72dc75c451e5f072758b118ab8100727168a3df58502b43a599ca"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:985818742b833bffa543a84d1cc11b5e6871de1b4e0ac3060a59a2bae3969250"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32f1e8a192e261366c702c5fb2ece9f68d26625f198a25c408861c16dc2dea9c"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:699085bf05819588551b11751eff33e9ca58b1b86a6843e1b082a7de40da1565"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:344cc2b0814047dc8c3a8ff2cd1f3d808bb23c6658db830d25147339d9bf9ea7"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4316bbf69d5a859cc937890c7ac7a6551252b6a01b1d2c97e8fc96e45a7c8b4a"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79d3af9dca4c56043e738a4d6dd1e9444b6d6c10598ac52d146e331eb155a8ad"}, - {file = "ruff-0.7.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c5c121b46abde94a505175524e51891f829414e093cd8326d6e741ecfc0a9112"}, - {file = "ruff-0.7.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8422104078324ea250886954e48f1373a8fe7de59283d747c3a7eca050b4e378"}, - {file = "ruff-0.7.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:56aad830af8a9db644e80098fe4984a948e2b6fc2e73891538f43bbe478461b8"}, - {file = "ruff-0.7.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:658304f02f68d3a83c998ad8bf91f9b4f53e93e5412b8f2388359d55869727fd"}, - {file = "ruff-0.7.1-py3-none-win32.whl", hash = "sha256:b517a2011333eb7ce2d402652ecaa0ac1a30c114fbbd55c6b8ee466a7f600ee9"}, - {file = "ruff-0.7.1-py3-none-win_amd64.whl", hash = "sha256:f38c41fcde1728736b4eb2b18850f6d1e3eedd9678c914dede554a70d5241307"}, - {file = "ruff-0.7.1-py3-none-win_arm64.whl", hash = "sha256:19aa200ec824c0f36d0c9114c8ec0087082021732979a359d6f3c390a6ff2a37"}, - {file = "ruff-0.7.1.tar.gz", hash = "sha256:9d8a41d4aa2dad1575adb98a82870cf5db5f76b2938cf2206c22c940034a36f4"}, + {file = "ruff-0.7.2-py3-none-linux_armv6l.whl", hash = "sha256:b73f873b5f52092e63ed540adefc3c36f1f803790ecf2590e1df8bf0a9f72cb8"}, + {file = "ruff-0.7.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5b813ef26db1015953daf476202585512afd6a6862a02cde63f3bafb53d0b2d4"}, + {file = "ruff-0.7.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:853277dbd9675810c6826dad7a428d52a11760744508340e66bf46f8be9701d9"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21aae53ab1490a52bf4e3bf520c10ce120987b047c494cacf4edad0ba0888da2"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ccc7e0fc6e0cb3168443eeadb6445285abaae75142ee22b2b72c27d790ab60ba"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd77877a4e43b3a98e5ef4715ba3862105e299af0c48942cc6d51ba3d97dc859"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e00163fb897d35523c70d71a46fbaa43bf7bf9af0f4534c53ea5b96b2e03397b"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3c54b538633482dc342e9b634d91168fe8cc56b30a4b4f99287f4e339103e88"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b792468e9804a204be221b14257566669d1db5c00d6bb335996e5cd7004ba80"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dba53ed84ac19ae4bfb4ea4bf0172550a2285fa27fbb13e3746f04c80f7fa088"}, + {file = "ruff-0.7.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b19fafe261bf741bca2764c14cbb4ee1819b67adb63ebc2db6401dcd652e3748"}, + {file = "ruff-0.7.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:28bd8220f4d8f79d590db9e2f6a0674f75ddbc3847277dd44ac1f8d30684b828"}, + {file = "ruff-0.7.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9fd67094e77efbea932e62b5d2483006154794040abb3a5072e659096415ae1e"}, + {file = "ruff-0.7.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:576305393998b7bd6c46018f8104ea3a9cb3fa7908c21d8580e3274a3b04b691"}, + {file = "ruff-0.7.2-py3-none-win32.whl", hash = "sha256:fa993cfc9f0ff11187e82de874dfc3611df80852540331bc85c75809c93253a8"}, + {file = "ruff-0.7.2-py3-none-win_amd64.whl", hash = "sha256:dd8800cbe0254e06b8fec585e97554047fb82c894973f7ff18558eee33d1cb88"}, + {file = "ruff-0.7.2-py3-none-win_arm64.whl", hash = "sha256:bb8368cd45bba3f57bb29cbb8d64b4a33f8415d0149d2655c5c8539452ce7760"}, + {file = "ruff-0.7.2.tar.gz", hash = "sha256:2b14e77293380e475b4e3a7a368e14549288ed2931fce259a6f99978669e844f"}, ] [[package]] From fc929208abe0ceda456f7203a61f28ea0afef9ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 01:18:08 +0000 Subject: [PATCH 408/685] build(deps-dev): bump rich from 13.9.3 to 13.9.4 Bumps [rich](https://github.com/Textualize/rich) from 13.9.3 to 13.9.4. - [Release notes](https://github.com/Textualize/rich/releases) - [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md) - [Commits](https://github.com/Textualize/rich/compare/v13.9.3...v13.9.4) --- updated-dependencies: - dependency-name: rich dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8c852e59db..2bd5a56b56 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1431,13 +1431,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rich" -version = "13.9.3" +version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" files = [ - {file = "rich-13.9.3-py3-none-any.whl", hash = "sha256:9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283"}, - {file = "rich-13.9.3.tar.gz", hash = "sha256:bc1e01b899537598cf02579d2b9f4a415104d3fc439313a7a2c165d76557a08e"}, + {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, + {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, ] [package.dependencies] From 7dd33eadc0f5d1a3dbcf9e92598510bf7c4a9ce4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 01:29:54 +0000 Subject: [PATCH 409/685] build(deps-dev): bump mkdocs-material from 9.5.43 to 9.5.44 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.43 to 9.5.44. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.43...9.5.44) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2bd5a56b56..5da51c321a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -769,13 +769,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.43" +version = "9.5.44" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.43-py3-none-any.whl", hash = "sha256:4aae0664c456fd12837a3192e0225c17960ba8bf55d7f0a7daef7e4b0b914a34"}, - {file = "mkdocs_material-9.5.43.tar.gz", hash = "sha256:83be7ff30b65a1e4930dfa4ab911e75780a3afc9583d162692e434581cb46979"}, + {file = "mkdocs_material-9.5.44-py3-none-any.whl", hash = "sha256:47015f9c167d58a5ff5e682da37441fc4d66a1c79334bfc08d774763cacf69ca"}, + {file = "mkdocs_material-9.5.44.tar.gz", hash = "sha256:f3a6c968e524166b3f3ed1fb97d3ed3e0091183b0545cedf7156a2a6804c56c0"}, ] [package.dependencies] From c49e7a250ef0af6fe09cdd7f4ef3fa36efaf0f91 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 5 Apr 2024 23:24:40 +0800 Subject: [PATCH 410/685] refactor(cz_customize): return empty string for info, example, schema and schema_pattern if not provided --- commitizen/cz/base.py | 10 +++++----- commitizen/cz/customize/customize.py | 16 ++++++++-------- commitizen/exceptions.py | 2 +- docs/customization.md | 10 +++++----- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index bd116ceb02..70929e2f83 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -61,7 +61,7 @@ class BaseCommitizen(metaclass=ABCMeta): template_loader: BaseLoader = PackageLoader("commitizen", "templates") template_extras: dict[str, Any] = {} - def __init__(self, config: BaseConfig): + def __init__(self, config: BaseConfig) -> None: self.config = config if not self.config.settings.get("style"): self.config.settings.update({"style": BaseCommitizen.default_style_config}) @@ -83,19 +83,19 @@ def style(self): ] ) - def example(self) -> str | None: + def example(self) -> str: """Example of the commit message.""" raise NotImplementedError("Not Implemented yet") - def schema(self) -> str | None: + def schema(self) -> str: """Schema definition of the commit message.""" raise NotImplementedError("Not Implemented yet") - def schema_pattern(self) -> str | None: + def schema_pattern(self) -> str: """Regex matching the schema used for message validation.""" raise NotImplementedError("Not Implemented yet") - def info(self) -> str | None: + def info(self) -> str: """Information about the standardized commit message.""" raise NotImplementedError("Not Implemented yet") diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index 5c3b4e76b4..b7f49f28db 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -68,16 +68,16 @@ def message(self, answers: dict) -> str: else: return message_template.render(**answers) - def example(self) -> str | None: - return self.custom_settings.get("example") + def example(self) -> str: + return self.custom_settings.get("example") or "" - def schema_pattern(self) -> str | None: - return self.custom_settings.get("schema_pattern") + def schema_pattern(self) -> str: + return self.custom_settings.get("schema_pattern") or "" - def schema(self) -> str | None: - return self.custom_settings.get("schema") + def schema(self) -> str: + return self.custom_settings.get("schema") or "" - def info(self) -> str | None: + def info(self) -> str: info_path = self.custom_settings.get("info_path") info = self.custom_settings.get("info") if info_path: @@ -86,4 +86,4 @@ def info(self) -> str | None: return content elif info: return info - return None + return "" diff --git a/commitizen/exceptions.py b/commitizen/exceptions.py index c96803b5fb..29733b624b 100644 --- a/commitizen/exceptions.py +++ b/commitizen/exceptions.py @@ -42,7 +42,7 @@ class ExitCode(enum.IntEnum): class CommitizenException(Exception): def __init__(self, *args, **kwargs): self.output_method = kwargs.get("output_method") or out.error - self.exit_code = self.__class__.exit_code + self.exit_code: ExitCode = self.__class__.exit_code if args: self.message = args[0] elif hasattr(self.__class__, "message"): diff --git a/docs/customization.md b/docs/customization.md index 3ba0bf6f3c..16ba588f10 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -151,11 +151,11 @@ commitizen: | ------------------- | ------ | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `questions` | `Questions` | `None` | Questions regarding the commit message. Detailed below. The type `Questions` is an alias to `Iterable[MutableMapping[str, Any]]` which is defined in `commitizen.defaults`. It expects a list of dictionaries. | | `message_template` | `str` | `None` | The template for generating message from the given answers. `message_template` should either follow [Jinja2][jinja2] formatting specification, and all the variables in this template should be defined in `name` in `questions` | -| `example` | `str` | `None` | (OPTIONAL) Provide an example to help understand the style. Used by `cz example`. | -| `schema` | `str` | `None` | (OPTIONAL) Show the schema used. Used by `cz schema`. | -| `schema_pattern` | `str` | `None` | (OPTIONAL) The regular expression used to do commit message validation. Used by `cz check`. | -| `info_path` | `str` | `None` | (OPTIONAL) The path to the file that contains explanation of the commit rules. Used by `cz info`. If not provided `cz info`, will load `info` instead. | -| `info` | `str` | `None` | (OPTIONAL) Explanation of the commit rules. Used by `cz info`. | +| `example` | `str` | `""` | (OPTIONAL) Provide an example to help understand the style. Used by `cz example`. | +| `schema` | `str` | `""` | (OPTIONAL) Show the schema used. Used by `cz schema`. | +| `schema_pattern` | `str` | `""` | (OPTIONAL) The regular expression used to do commit message validation. Used by `cz check`. | +| `info_path` | `str` | `""` | (OPTIONAL) The path to the file that contains explanation of the commit rules. Used by `cz info`. If not provided `cz info`, will load `info` instead. | +| `info` | `str` | `""` | (OPTIONAL) Explanation of the commit rules. Used by `cz info`. | | `bump_map` | `dict` | `None` | (OPTIONAL) Dictionary mapping the extracted information to a `SemVer` increment type (`MAJOR`, `MINOR`, `PATCH`) | | `bump_pattern` | `str` | `None` | (OPTIONAL) Regex to extract information from commit (subject and body) | | `change_type_order`| `str` | `None` | (OPTIONAL) List of strings used to order the Changelog. All other types will be sorted alphabetically. Default is `["BREAKING CHANGE", "Feat", "Fix", "Refactor", "Perf"]` | From 632ab4ff6cfbebac94223f04988c42d5d7b56b69 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 5 Apr 2024 23:28:32 +0800 Subject: [PATCH 411/685] refactor(defaults): disallow style as None --- commitizen/defaults.py | 2 +- tests/test_cz_customize.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 2d092d5004..996c243196 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -45,7 +45,7 @@ class Settings(TypedDict, total=False): changelog_merge_prerelease: bool update_changelog_on_bump: bool use_shortcuts: bool - style: list[tuple[str, str]] | None + style: list[tuple[str, str]] customize: CzSettings major_version_zero: bool pre_bump_hooks: list[str] | None diff --git a/tests/test_cz_customize.py b/tests/test_cz_customize.py index 20a17b3d9c..210c8b6774 100644 --- a/tests/test_cz_customize.py +++ b/tests/test_cz_customize.py @@ -564,7 +564,7 @@ def test_info_with_info_path(tmpdir, config_info): def test_info_without_info(config_without_info): cz = CustomizeCommitsCz(config_without_info) - assert cz.info() is None + assert cz.info() == "" def test_commit_parser(config): From c8af618ba97b6cc42b797d865acee91f02e0e25f Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 5 Apr 2024 23:36:23 +0800 Subject: [PATCH 412/685] refactor(cli): replace magic number 0 with ExitCode.EXPECTED_EXIT --- commitizen/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index e911b6da58..df082467f6 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -547,7 +547,7 @@ def commitizen_excepthook( original_excepthook(type, value, traceback) exit_code = value.exit_code if exit_code in no_raise: - exit_code = 0 + exit_code = ExitCode.EXPECTED_EXIT sys.exit(exit_code) else: original_excepthook(type, value, traceback) From 82db67dab1f18a9e257d5d533a4e1dbbfd6a9e6d Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 5 Apr 2024 23:53:48 +0800 Subject: [PATCH 413/685] style(check): fix mypy issues --- commitizen/commands/check.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index 13b8555b6d..e22155cf78 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -54,7 +54,7 @@ def _valid_command_argument(self): for arg in (self.commit_msg_file, self.commit_msg, self.rev_range) ) if num_exclusive_args_provided == 0 and not sys.stdin.isatty(): - self.commit_msg: str | None = sys.stdin.read() + self.commit_msg = sys.stdin.read() elif num_exclusive_args_provided != 1: raise InvalidCommandArgumentError( "Only one of --rev-range, --message, and --commit-msg-file is permitted by check command! " @@ -107,7 +107,9 @@ def _get_commits(self): return [git.GitCommit(rev="", title="", body=msg)] # Get commit messages from git log (--rev-range) - return git.get_commits(end=self.rev_range) + if self.rev_range: + return git.get_commits(end=self.rev_range) + return git.get_commits() @staticmethod def _filter_comments(msg: str) -> str: From 1806fe8a288048a1a2cb9c764ecf9de530d20b10 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 10 Nov 2024 11:05:42 +0800 Subject: [PATCH 414/685] style(mypy): rewrite import to avoid unnecessary type ignore --- commitizen/cz/customize/customize.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index b7f49f28db..d53ae29f1b 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -1,9 +1,14 @@ from __future__ import annotations -try: +from typing import TYPE_CHECKING + +if TYPE_CHECKING: from jinja2 import Template -except ImportError: - from string import Template # type: ignore +else: + try: + from jinja2 import Template + except ImportError: + from string import Template from commitizen import defaults From 665aa59a2794b47de0cae6fe51886d6366268194 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sun, 10 Nov 2024 03:22:52 +0000 Subject: [PATCH 415/685] =?UTF-8?q?bump:=20version=203.30.0=20=E2=86=92=20?= =?UTF-8?q?3.30.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 8 ++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a83ba0dcf6..c53fb361ec 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v3.30.0 # automatically updated by Commitizen + rev: v3.30.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index b93413fd4e..3bbc280c46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## v3.30.1 (2024-11-10) + +### Refactor + +- **cli**: replace magic number 0 with ExitCode.EXPECTED_EXIT +- **defaults**: disallow style as None +- **cz_customize**: return empty string for info, example, schema and schema_pattern if not provided + ## v3.30.0 (2024-10-23) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 1df56e3df4..677d3b117e 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.30.0" +__version__ = "3.30.1" diff --git a/pyproject.toml b/pyproject.toml index c4230d8edf..66d17eb3c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.30.0" +version = "3.30.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.30.0" +version = "3.30.1" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From e75b83767e2c7373793c1ae503d55dade8daee26 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 10 Nov 2024 11:16:03 +0800 Subject: [PATCH 416/685] build(pre-commit): migrate pre-commit config When running `pre-commit run --all-files`, the following error was encountered. ``` [WARNING] hook id `commitizen-branch` uses deprecated stage names (push) which will be removed in a future version. run: `pre-commit migrate-config` to automatically fix this. [WARNING] hook id `linter and test` uses deprecated stage names (push) which will be removed in a future version. run: `pre-commit migrate-config` to automatically fix this. [WARNING] top-level `default_stages` uses deprecated stage names (commit, push) which will be removed in a future version. run: `pre-commit migrate-config` to automatically fix this. ``` This commit only only migrates the pre-commit config to the latest version. --- .pre-commit-config.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c53fb361ec..195d92096d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,8 +4,8 @@ default_install_hook_types: - pre-push default_stages: - - commit - - push + - pre-commit + - pre-push repos: - repo: meta @@ -55,7 +55,7 @@ repos: - id: commitizen-branch stages: - post-commit - - push + - pre-push - repo: local hooks: @@ -70,6 +70,6 @@ repos: name: linter and test language: system pass_filenames: false - stages: [ push ] + stages: [ pre-push ] entry: ./scripts/test types: [ python ] From f41a88e6562952caa915f4c6246ff34acb8018bd Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 10 Nov 2024 11:25:47 +0800 Subject: [PATCH 417/685] ci(github-actions): use 3.13 instead of 3.13-dev as Python 3.13 has already been released --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index f0a517686f..24728e45dd 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -6,7 +6,7 @@ jobs: python-check: strategy: matrix: - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13-dev"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] platform: [ubuntu-20.04, macos-latest, windows-latest] runs-on: ${{ matrix.platform }} steps: From e4cab6cb598cba8418a60fbc310129ce81731c47 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:53:21 +0000 Subject: [PATCH 418/685] build(deps): bump packaging from 24.1 to 24.2 Bumps [packaging](https://github.com/pypa/packaging) from 24.1 to 24.2. - [Release notes](https://github.com/pypa/packaging/releases) - [Changelog](https://github.com/pypa/packaging/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pypa/packaging/compare/24.1...24.2) --- updated-dependencies: - dependency-name: packaging dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5da51c321a..9c849bb9fb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -887,13 +887,13 @@ setuptools = "*" [[package]] name = "packaging" -version = "24.1" +version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] From 4d6f610fcf1a3a41864c333f215e8631a0cf7f1a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:52:54 +0000 Subject: [PATCH 419/685] build(deps-dev): bump ruff from 0.7.2 to 0.7.3 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.7.2 to 0.7.3. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.7.2...0.7.3) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9c849bb9fb..42dabc2e01 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1450,29 +1450,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.7.2" +version = "0.7.3" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.7.2-py3-none-linux_armv6l.whl", hash = "sha256:b73f873b5f52092e63ed540adefc3c36f1f803790ecf2590e1df8bf0a9f72cb8"}, - {file = "ruff-0.7.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5b813ef26db1015953daf476202585512afd6a6862a02cde63f3bafb53d0b2d4"}, - {file = "ruff-0.7.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:853277dbd9675810c6826dad7a428d52a11760744508340e66bf46f8be9701d9"}, - {file = "ruff-0.7.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21aae53ab1490a52bf4e3bf520c10ce120987b047c494cacf4edad0ba0888da2"}, - {file = "ruff-0.7.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ccc7e0fc6e0cb3168443eeadb6445285abaae75142ee22b2b72c27d790ab60ba"}, - {file = "ruff-0.7.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd77877a4e43b3a98e5ef4715ba3862105e299af0c48942cc6d51ba3d97dc859"}, - {file = "ruff-0.7.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e00163fb897d35523c70d71a46fbaa43bf7bf9af0f4534c53ea5b96b2e03397b"}, - {file = "ruff-0.7.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3c54b538633482dc342e9b634d91168fe8cc56b30a4b4f99287f4e339103e88"}, - {file = "ruff-0.7.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b792468e9804a204be221b14257566669d1db5c00d6bb335996e5cd7004ba80"}, - {file = "ruff-0.7.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dba53ed84ac19ae4bfb4ea4bf0172550a2285fa27fbb13e3746f04c80f7fa088"}, - {file = "ruff-0.7.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b19fafe261bf741bca2764c14cbb4ee1819b67adb63ebc2db6401dcd652e3748"}, - {file = "ruff-0.7.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:28bd8220f4d8f79d590db9e2f6a0674f75ddbc3847277dd44ac1f8d30684b828"}, - {file = "ruff-0.7.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9fd67094e77efbea932e62b5d2483006154794040abb3a5072e659096415ae1e"}, - {file = "ruff-0.7.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:576305393998b7bd6c46018f8104ea3a9cb3fa7908c21d8580e3274a3b04b691"}, - {file = "ruff-0.7.2-py3-none-win32.whl", hash = "sha256:fa993cfc9f0ff11187e82de874dfc3611df80852540331bc85c75809c93253a8"}, - {file = "ruff-0.7.2-py3-none-win_amd64.whl", hash = "sha256:dd8800cbe0254e06b8fec585e97554047fb82c894973f7ff18558eee33d1cb88"}, - {file = "ruff-0.7.2-py3-none-win_arm64.whl", hash = "sha256:bb8368cd45bba3f57bb29cbb8d64b4a33f8415d0149d2655c5c8539452ce7760"}, - {file = "ruff-0.7.2.tar.gz", hash = "sha256:2b14e77293380e475b4e3a7a368e14549288ed2931fce259a6f99978669e844f"}, + {file = "ruff-0.7.3-py3-none-linux_armv6l.whl", hash = "sha256:34f2339dc22687ec7e7002792d1f50712bf84a13d5152e75712ac08be565d344"}, + {file = "ruff-0.7.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:fb397332a1879b9764a3455a0bb1087bda876c2db8aca3a3cbb67b3dbce8cda0"}, + {file = "ruff-0.7.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:37d0b619546103274e7f62643d14e1adcbccb242efda4e4bdb9544d7764782e9"}, + {file = "ruff-0.7.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59f0c3ee4d1a6787614e7135b72e21024875266101142a09a61439cb6e38a5"}, + {file = "ruff-0.7.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:44eb93c2499a169d49fafd07bc62ac89b1bc800b197e50ff4633aed212569299"}, + {file = "ruff-0.7.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d0242ce53f3a576c35ee32d907475a8d569944c0407f91d207c8af5be5dae4e"}, + {file = "ruff-0.7.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:6b6224af8b5e09772c2ecb8dc9f3f344c1aa48201c7f07e7315367f6dd90ac29"}, + {file = "ruff-0.7.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c50f95a82b94421c964fae4c27c0242890a20fe67d203d127e84fbb8013855f5"}, + {file = "ruff-0.7.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f3eff9961b5d2644bcf1616c606e93baa2d6b349e8aa8b035f654df252c8c67"}, + {file = "ruff-0.7.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8963cab06d130c4df2fd52c84e9f10d297826d2e8169ae0c798b6221be1d1d2"}, + {file = "ruff-0.7.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:61b46049d6edc0e4317fb14b33bd693245281a3007288b68a3f5b74a22a0746d"}, + {file = "ruff-0.7.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:10ebce7696afe4644e8c1a23b3cf8c0f2193a310c18387c06e583ae9ef284de2"}, + {file = "ruff-0.7.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3f36d56326b3aef8eeee150b700e519880d1aab92f471eefdef656fd57492aa2"}, + {file = "ruff-0.7.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5d024301109a0007b78d57ab0ba190087b43dce852e552734ebf0b0b85e4fb16"}, + {file = "ruff-0.7.3-py3-none-win32.whl", hash = "sha256:4ba81a5f0c5478aa61674c5a2194de8b02652f17addf8dfc40c8937e6e7d79fc"}, + {file = "ruff-0.7.3-py3-none-win_amd64.whl", hash = "sha256:588a9ff2fecf01025ed065fe28809cd5a53b43505f48b69a1ac7707b1b7e4088"}, + {file = "ruff-0.7.3-py3-none-win_arm64.whl", hash = "sha256:1713e2c5545863cdbfe2cbce21f69ffaf37b813bfd1fb3b90dc9a6f1963f5a8c"}, + {file = "ruff-0.7.3.tar.gz", hash = "sha256:e1d1ba2e40b6e71a61b063354d04be669ab0d39c352461f3d789cac68b54a313"}, ] [[package]] From d017869164ea746ffab774c2b706602e61c3fb25 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Nov 2024 01:22:30 +0000 Subject: [PATCH 420/685] ci(deps): bump codecov/codecov-action from 4 to 5 Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 5. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v4...v5) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 24728e45dd..3a7907fa5b 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -30,7 +30,7 @@ jobs: shell: bash - name: Upload coverage to Codecov if: runner.os == 'Linux' - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage.xml From 26be522194cc1710f31f328a62dbf320c27c680a Mon Sep 17 00:00:00 2001 From: Adrian DC <radian.dc@gmail.com> Date: Tue, 13 Aug 2024 12:04:02 +0200 Subject: [PATCH 421/685] fix(commit): resolve 'always_signoff' configuration and '-s' CLI issues If 'always_signoff' is enabled in configurations, or '-s' is used alone on the CLI, the following errors arise due to 'git commit' argument failures : > signoff mechanic is deprecated, please use `cz commit -- -s` instead. > fatal: /tmp/...: '/tmp/... is outside repository at '...' Signed-off-by: Adrian DC <radian.dc@gmail.com> --- commitizen/commands/commit.py | 6 +++--- tests/commands/test_commit_command.py | 29 +++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index c955d02a51..1c7278ddfa 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -138,13 +138,13 @@ def __call__(self): self.arguments.get("signoff") or self.config.settings["always_signoff"] ) + extra_args = self.arguments.get("extra_cli_args", "") + if signoff: out.warn( "signoff mechanic is deprecated, please use `cz commit -- -s` instead." ) - extra_args = self.arguments.get("extra_cli_args", "--") + " -s" - else: - extra_args = self.arguments.get("extra_cli_args", "") + extra_args = f"{extra_args} -s".strip() c = git.commit(m, args=extra_args) diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index 91a75e0970..85959abe33 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -260,7 +260,7 @@ def test_commit_command_with_signoff_option(config, mocker: MockFixture): commands.Commit(config, {"signoff": True})() - commit_mock.assert_called_once_with(ANY, args="-- -s") + commit_mock.assert_called_once_with(ANY, args="-s") success_mock.assert_called_once() @@ -283,7 +283,32 @@ def test_commit_command_with_always_signoff_enabled(config, mocker: MockFixture) config.settings["always_signoff"] = True commands.Commit(config, {})() - commit_mock.assert_called_once_with(ANY, args="-- -s") + commit_mock.assert_called_once_with(ANY, args="-s") + success_mock.assert_called_once() + + +@pytest.mark.usefixtures("staging_is_clean") +def test_commit_command_with_gpgsign_and_always_signoff_enabled( + config, mocker: MockFixture +): + prompt_mock = mocker.patch("questionary.prompt") + prompt_mock.return_value = { + "prefix": "feat", + "subject": "user created", + "scope": "", + "is_breaking_change": False, + "body": "", + "footer": "", + } + + commit_mock = mocker.patch("commitizen.git.commit") + commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) + success_mock = mocker.patch("commitizen.out.success") + + config.settings["always_signoff"] = True + commands.Commit(config, {"extra_cli_args": "-S"})() + + commit_mock.assert_called_once_with(ANY, args="-S -s") success_mock.assert_called_once() From 18e4928bdcfc156e9f1e39291c9b1faaab8d7f71 Mon Sep 17 00:00:00 2001 From: Adrian DC <radian.dc@gmail.com> Date: Tue, 13 Aug 2024 12:07:48 +0200 Subject: [PATCH 422/685] fix(commit): avoid warnings with 'always_signoff' configuration Signed-off-by: Adrian DC <radian.dc@gmail.com> --- commitizen/commands/commit.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 1c7278ddfa..9b13a020b6 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -134,9 +134,8 @@ def __call__(self): if dry_run: raise DryRunExit() - signoff: bool = ( - self.arguments.get("signoff") or self.config.settings["always_signoff"] - ) + always_signoff: bool = self.config.settings["always_signoff"] + signoff: bool = self.arguments.get("signoff") extra_args = self.arguments.get("extra_cli_args", "") @@ -144,6 +143,8 @@ def __call__(self): out.warn( "signoff mechanic is deprecated, please use `cz commit -- -s` instead." ) + + if always_signoff or signoff: extra_args = f"{extra_args} -s".strip() c = git.commit(m, args=extra_args) From 02dd9d0557deab04d911723acb16e3ca929060cb Mon Sep 17 00:00:00 2001 From: Adrian DC <radian.dc@gmail.com> Date: Fri, 23 Aug 2024 00:55:16 +0200 Subject: [PATCH 423/685] docs(gettings_started): migrate to 'cz commmit -- -s' syntaxes Signed-off-by: Adrian DC <radian.dc@gmail.com> --- docs/getting_started.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/getting_started.md b/docs/getting_started.md index 81da513e0b..378b819192 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -51,13 +51,13 @@ cz c Run in the terminal ```bash -cz commit --signoff +cz commit -- --signoff ``` or the shortcut ```bash -cz commit -s +cz commit -- -s ``` ### Get project version From 9aa307688ec99098c60dbf2b2d5eaad1b6ae0ac7 Mon Sep 17 00:00:00 2001 From: Adrian DC <radian.dc@gmail.com> Date: Fri, 23 Aug 2024 01:03:23 +0200 Subject: [PATCH 424/685] feat(commitizen): document '--' double dash in '--help' Signed-off-by: Adrian DC <radian.dc@gmail.com> --- commitizen/cli.py | 6 ++++++ ...ommit_command_shows_description_when_use_help_option.txt | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index df082467f6..1e0b1c6276 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -168,6 +168,12 @@ def __call__( "default": 0, "help": "length limit of the commit message; 0 for no limit", }, + { + "name": ["--"], + "action": "store_true", + "dest": "double_dash", + "help": "Positional arguments separator (recommended)", + }, ], }, { diff --git a/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt index 955b3d8fd7..dd1f53f3da 100644 --- a/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt @@ -1,6 +1,6 @@ usage: cz commit [-h] [--retry] [--no-retry] [--dry-run] [--write-message-to-file FILE_PATH] [-s] [-a] [-e] - [-l MESSAGE_LENGTH_LIMIT] + [-l MESSAGE_LENGTH_LIMIT] [--] create new commit @@ -19,3 +19,4 @@ options: -e, --edit edit the commit message before committing -l, --message-length-limit MESSAGE_LENGTH_LIMIT length limit of the commit message; 0 for no limit + -- Positional arguments separator (recommended) From 9c891d6a2bc35372c5588e5ba2cbec6404959a3d Mon Sep 17 00:00:00 2001 From: Adrian DC <radian.dc@gmail.com> Date: Sat, 17 Aug 2024 00:25:55 +0200 Subject: [PATCH 425/685] test(conftest): disable 'safe.directory' Git config for container bound sources Details: The git sources folder ownership may be detected as dubious if running in a container with sources mounted to work on fixes and tests, breaking 'test_find_git_project_root' and 'test_get_commits_with_signature' > commitizen.exceptions.GitCommandError: fatal: detected dubious ownership in repository at '...' --- Signed-off-by: Adrian DC <radian.dc@gmail.com> --- tests/conftest.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index cc306ac6d4..95f3df3b20 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -35,12 +35,19 @@ def git_sandbox(monkeypatch: pytest.MonkeyPatch, tmp_path: Path): gitconfig = tmp_path / ".git" / "config" if not gitconfig.parent.exists(): gitconfig.parent.mkdir() + monkeypatch.setenv("GIT_CONFIG_GLOBAL", str(gitconfig)) + r = cmd.run(f"git config --file {gitconfig} user.name {SIGNER}") assert r.return_code == 0, r.err r = cmd.run(f"git config --file {gitconfig} user.email {SIGNER_MAIL}") assert r.return_code == 0, r.err - cmd.run("git config --global init.defaultBranch master") + + r = cmd.run(f"git config --file {gitconfig} safe.directory '*'") + assert r.return_code == 0, r.err + + r = cmd.run("git config --global init.defaultBranch master") + assert r.return_code == 0, r.err @pytest.fixture From d3f092d98dc7585ce9cb3295bafb942ca5be1886 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sat, 16 Nov 2024 07:59:08 +0000 Subject: [PATCH 426/685] =?UTF-8?q?bump:=20version=203.30.1=20=E2=86=92=20?= =?UTF-8?q?3.31.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 11 +++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 195d92096d..7765ffe359 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v3.30.1 # automatically updated by Commitizen + rev: v3.31.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bbc280c46..d728143c42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +## v3.31.0 (2024-11-16) + +### Feat + +- **commitizen**: document '--' double dash in '--help' + +### Fix + +- **commit**: avoid warnings with 'always_signoff' configuration +- **commit**: resolve 'always_signoff' configuration and '-s' CLI issues + ## v3.30.1 (2024-11-10) ### Refactor diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 677d3b117e..0cba0fb82a 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.30.1" +__version__ = "3.31.0" diff --git a/pyproject.toml b/pyproject.toml index 66d17eb3c9..15943c93de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.30.1" +version = "3.31.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.30.1" +version = "3.31.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From a9d35d161323713d6e2f44f07c907659b663319b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sat, 16 Nov 2024 07:59:44 +0000 Subject: [PATCH 427/685] docs(cli/screenshots): update CLI screenshots [skip ci] --- docs/images/cli_help/cz_commit___help.svg | 116 +++++++++++----------- 1 file changed, 60 insertions(+), 56 deletions(-) diff --git a/docs/images/cli_help/cz_commit___help.svg b/docs/images/cli_help/cz_commit___help.svg index 452e419908..0346c40588 100644 --- a/docs/images/cli_help/cz_commit___help.svg +++ b/docs/images/cli_help/cz_commit___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 611.1999999999999" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 635.5999999999999" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,129 +19,133 @@ font-weight: 700; } - .terminal-4094976563-matrix { + .terminal-1670560432-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-4094976563-title { + .terminal-1670560432-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-4094976563-r1 { fill: #c5c8c6 } -.terminal-4094976563-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-4094976563-r3 { fill: #68a0b3;font-weight: bold } + .terminal-1670560432-r1 { fill: #c5c8c6 } +.terminal-1670560432-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-1670560432-r3 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-4094976563-clip-terminal"> - <rect x="0" y="0" width="975.0" height="560.1999999999999" /> + <clipPath id="terminal-1670560432-clip-terminal"> + <rect x="0" y="0" width="975.0" height="584.5999999999999" /> </clipPath> - <clipPath id="terminal-4094976563-line-0"> + <clipPath id="terminal-1670560432-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-1"> +<clipPath id="terminal-1670560432-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-2"> +<clipPath id="terminal-1670560432-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-3"> +<clipPath id="terminal-1670560432-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-4"> +<clipPath id="terminal-1670560432-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-5"> +<clipPath id="terminal-1670560432-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-6"> +<clipPath id="terminal-1670560432-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-7"> +<clipPath id="terminal-1670560432-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-8"> +<clipPath id="terminal-1670560432-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-9"> +<clipPath id="terminal-1670560432-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-10"> +<clipPath id="terminal-1670560432-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-11"> +<clipPath id="terminal-1670560432-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-12"> +<clipPath id="terminal-1670560432-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-13"> +<clipPath id="terminal-1670560432-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-14"> +<clipPath id="terminal-1670560432-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-15"> +<clipPath id="terminal-1670560432-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-16"> +<clipPath id="terminal-1670560432-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-17"> +<clipPath id="terminal-1670560432-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-18"> +<clipPath id="terminal-1670560432-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-19"> +<clipPath id="terminal-1670560432-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-20"> +<clipPath id="terminal-1670560432-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4094976563-line-21"> +<clipPath id="terminal-1670560432-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-1670560432-line-22"> + <rect x="0" y="538.3" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="609.2" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="633.6" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-4094976563-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1670560432-clip-terminal)"> - <g class="terminal-4094976563-matrix"> - <text class="terminal-4094976563-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-4094976563-line-0)">$ cz commit --help</text><text class="terminal-4094976563-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-4094976563-line-0)"> -</text><text class="terminal-4094976563-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-4094976563-line-1)">usage: cz commit </text><text class="terminal-4094976563-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">[</text><text class="terminal-4094976563-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-4094976563-line-1)">-h</text><text class="terminal-4094976563-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">]</text><text class="terminal-4094976563-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">[</text><text class="terminal-4094976563-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-4094976563-line-1)">--retry</text><text class="terminal-4094976563-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">]</text><text class="terminal-4094976563-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">[</text><text class="terminal-4094976563-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-4094976563-line-1)">--no-retry</text><text class="terminal-4094976563-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">]</text><text class="terminal-4094976563-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">[</text><text class="terminal-4094976563-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-4094976563-line-1)">--dry-run</text><text class="terminal-4094976563-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)">]</text><text class="terminal-4094976563-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-1)"> -</text><text class="terminal-4094976563-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">[</text><text class="terminal-4094976563-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-4094976563-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-4094976563-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">]</text><text class="terminal-4094976563-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">[</text><text class="terminal-4094976563-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-4094976563-line-2)">-s</text><text class="terminal-4094976563-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">]</text><text class="terminal-4094976563-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">[</text><text class="terminal-4094976563-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-4094976563-line-2)">-a</text><text class="terminal-4094976563-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">]</text><text class="terminal-4094976563-r2" x="768.6" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">[</text><text class="terminal-4094976563-r1" x="780.8" y="68.8" textLength="24.4" clip-path="url(#terminal-4094976563-line-2)">-e</text><text class="terminal-4094976563-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)">]</text><text class="terminal-4094976563-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-2)"> -</text><text class="terminal-4094976563-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-3)">[</text><text class="terminal-4094976563-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-4094976563-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-4094976563-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-3)">]</text><text class="terminal-4094976563-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-3)"> -</text><text class="terminal-4094976563-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-4094976563-line-4)"> -</text><text class="terminal-4094976563-r1" x="0" y="142" textLength="207.4" clip-path="url(#terminal-4094976563-line-5)">create new commit</text><text class="terminal-4094976563-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-4094976563-line-5)"> -</text><text class="terminal-4094976563-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-6)"> -</text><text class="terminal-4094976563-r1" x="0" y="190.8" textLength="97.6" clip-path="url(#terminal-4094976563-line-7)">options:</text><text class="terminal-4094976563-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-7)"> -</text><text class="terminal-4094976563-r1" x="0" y="215.2" textLength="671" clip-path="url(#terminal-4094976563-line-8)">  -h, --help            show this help message and exit</text><text class="terminal-4094976563-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-8)"> -</text><text class="terminal-4094976563-r1" x="0" y="239.6" textLength="500.2" clip-path="url(#terminal-4094976563-line-9)">  --retry               retry last commit</text><text class="terminal-4094976563-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-4094976563-line-9)"> -</text><text class="terminal-4094976563-r1" x="0" y="264" textLength="878.4" clip-path="url(#terminal-4094976563-line-10)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-4094976563-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-4094976563-line-10)"> -</text><text class="terminal-4094976563-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-4094976563-line-11)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-4094976563-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-11)"> -</text><text class="terminal-4094976563-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-4094976563-line-12)">  --write-message-to-file FILE_PATH</text><text class="terminal-4094976563-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-12)"> -</text><text class="terminal-4094976563-r1" x="0" y="337.2" textLength="780.8" clip-path="url(#terminal-4094976563-line-13)">                        write message to file before committing </text><text class="terminal-4094976563-r2" x="780.8" y="337.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-13)">(</text><text class="terminal-4094976563-r1" x="793" y="337.2" textLength="73.2" clip-path="url(#terminal-4094976563-line-13)">can be</text><text class="terminal-4094976563-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-13)"> -</text><text class="terminal-4094976563-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-4094976563-line-14)">                        combined with --dry-run</text><text class="terminal-4094976563-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-4094976563-line-14)">)</text><text class="terminal-4094976563-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-4094976563-line-14)"> -</text><text class="terminal-4094976563-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-4094976563-line-15)">  -s, --signoff         sign off the commit</text><text class="terminal-4094976563-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-4094976563-line-15)"> -</text><text class="terminal-4094976563-r1" x="0" y="410.4" textLength="902.8" clip-path="url(#terminal-4094976563-line-16)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-4094976563-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-16)"> -</text><text class="terminal-4094976563-r1" x="0" y="434.8" textLength="951.6" clip-path="url(#terminal-4094976563-line-17)">                        have been modified and deleted, but new files you have</text><text class="terminal-4094976563-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-17)"> -</text><text class="terminal-4094976563-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-4094976563-line-18)">                        not told Git about are not affected.</text><text class="terminal-4094976563-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-4094976563-line-18)"> -</text><text class="terminal-4094976563-r1" x="0" y="483.6" textLength="793" clip-path="url(#terminal-4094976563-line-19)">  -e, --edit            edit the commit message before committing</text><text class="terminal-4094976563-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-4094976563-line-19)"> -</text><text class="terminal-4094976563-r1" x="0" y="508" textLength="854" clip-path="url(#terminal-4094976563-line-20)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-4094976563-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-4094976563-line-20)"> -</text><text class="terminal-4094976563-r1" x="0" y="532.4" textLength="732" clip-path="url(#terminal-4094976563-line-21)">                        length limit of the commit message; </text><text class="terminal-4094976563-r3" x="732" y="532.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-21)">0</text><text class="terminal-4094976563-r1" x="744.2" y="532.4" textLength="158.6" clip-path="url(#terminal-4094976563-line-21)"> for no limit</text><text class="terminal-4094976563-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-4094976563-line-21)"> -</text><text class="terminal-4094976563-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-4094976563-line-22)"> + <g class="terminal-1670560432-matrix"> + <text class="terminal-1670560432-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-1670560432-line-0)">$ cz commit --help</text><text class="terminal-1670560432-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1670560432-line-0)"> +</text><text class="terminal-1670560432-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-1670560432-line-1)">usage: cz commit </text><text class="terminal-1670560432-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-1670560432-line-1)">-h</text><text class="terminal-1670560432-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-1670560432-line-1)">--retry</text><text class="terminal-1670560432-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-1670560432-line-1)">--no-retry</text><text class="terminal-1670560432-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-1670560432-line-1)">--dry-run</text><text class="terminal-1670560432-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)"> +</text><text class="terminal-1670560432-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-1670560432-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-1670560432-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1670560432-line-2)">-s</text><text class="terminal-1670560432-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1670560432-line-2)">-a</text><text class="terminal-1670560432-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r2" x="768.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="780.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1670560432-line-2)">-e</text><text class="terminal-1670560432-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)"> +</text><text class="terminal-1670560432-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">[</text><text class="terminal-1670560432-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-1670560432-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-1670560432-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">]</text><text class="terminal-1670560432-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">[</text><text class="terminal-1670560432-r1" x="536.8" y="93.2" textLength="24.4" clip-path="url(#terminal-1670560432-line-3)">--</text><text class="terminal-1670560432-r2" x="561.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">]</text><text class="terminal-1670560432-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)"> +</text><text class="terminal-1670560432-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-4)"> +</text><text class="terminal-1670560432-r1" x="0" y="142" textLength="207.4" clip-path="url(#terminal-1670560432-line-5)">create new commit</text><text class="terminal-1670560432-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1670560432-line-5)"> +</text><text class="terminal-1670560432-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-6)"> +</text><text class="terminal-1670560432-r1" x="0" y="190.8" textLength="97.6" clip-path="url(#terminal-1670560432-line-7)">options:</text><text class="terminal-1670560432-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-7)"> +</text><text class="terminal-1670560432-r1" x="0" y="215.2" textLength="671" clip-path="url(#terminal-1670560432-line-8)">  -h, --help            show this help message and exit</text><text class="terminal-1670560432-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-8)"> +</text><text class="terminal-1670560432-r1" x="0" y="239.6" textLength="500.2" clip-path="url(#terminal-1670560432-line-9)">  --retry               retry last commit</text><text class="terminal-1670560432-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-9)"> +</text><text class="terminal-1670560432-r1" x="0" y="264" textLength="878.4" clip-path="url(#terminal-1670560432-line-10)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-1670560432-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1670560432-line-10)"> +</text><text class="terminal-1670560432-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-1670560432-line-11)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-1670560432-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-11)"> +</text><text class="terminal-1670560432-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-1670560432-line-12)">  --write-message-to-file FILE_PATH</text><text class="terminal-1670560432-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-12)"> +</text><text class="terminal-1670560432-r1" x="0" y="337.2" textLength="780.8" clip-path="url(#terminal-1670560432-line-13)">                        write message to file before committing </text><text class="terminal-1670560432-r2" x="780.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-13)">(</text><text class="terminal-1670560432-r1" x="793" y="337.2" textLength="73.2" clip-path="url(#terminal-1670560432-line-13)">can be</text><text class="terminal-1670560432-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-13)"> +</text><text class="terminal-1670560432-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-1670560432-line-14)">                        combined with --dry-run</text><text class="terminal-1670560432-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-14)">)</text><text class="terminal-1670560432-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-14)"> +</text><text class="terminal-1670560432-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-1670560432-line-15)">  -s, --signoff         sign off the commit</text><text class="terminal-1670560432-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1670560432-line-15)"> +</text><text class="terminal-1670560432-r1" x="0" y="410.4" textLength="902.8" clip-path="url(#terminal-1670560432-line-16)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-1670560432-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-16)"> +</text><text class="terminal-1670560432-r1" x="0" y="434.8" textLength="951.6" clip-path="url(#terminal-1670560432-line-17)">                        have been modified and deleted, but new files you have</text><text class="terminal-1670560432-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-17)"> +</text><text class="terminal-1670560432-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-1670560432-line-18)">                        not told Git about are not affected.</text><text class="terminal-1670560432-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-18)"> +</text><text class="terminal-1670560432-r1" x="0" y="483.6" textLength="793" clip-path="url(#terminal-1670560432-line-19)">  -e, --edit            edit the commit message before committing</text><text class="terminal-1670560432-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-19)"> +</text><text class="terminal-1670560432-r1" x="0" y="508" textLength="854" clip-path="url(#terminal-1670560432-line-20)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-1670560432-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1670560432-line-20)"> +</text><text class="terminal-1670560432-r1" x="0" y="532.4" textLength="732" clip-path="url(#terminal-1670560432-line-21)">                        length limit of the commit message; </text><text class="terminal-1670560432-r3" x="732" y="532.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-21)">0</text><text class="terminal-1670560432-r1" x="744.2" y="532.4" textLength="158.6" clip-path="url(#terminal-1670560432-line-21)"> for no limit</text><text class="terminal-1670560432-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-21)"> +</text><text class="terminal-1670560432-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-1670560432-line-22)">  --                    Positional arguments separator </text><text class="terminal-1670560432-r2" x="671" y="556.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-22)">(</text><text class="terminal-1670560432-r1" x="683.2" y="556.8" textLength="134.2" clip-path="url(#terminal-1670560432-line-22)">recommended</text><text class="terminal-1670560432-r2" x="817.4" y="556.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-22)">)</text><text class="terminal-1670560432-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-22)"> +</text><text class="terminal-1670560432-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-23)"> </text> </g> </g> From f63a4acc931e9441a8ce11f4eba29044988cc2c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 01:08:31 +0000 Subject: [PATCH 428/685] build(deps-dev): bump ruff from 0.7.3 to 0.7.4 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.7.3 to 0.7.4. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.7.3...0.7.4) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 42dabc2e01..44e51dba5b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1450,29 +1450,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.7.3" +version = "0.7.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.7.3-py3-none-linux_armv6l.whl", hash = "sha256:34f2339dc22687ec7e7002792d1f50712bf84a13d5152e75712ac08be565d344"}, - {file = "ruff-0.7.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:fb397332a1879b9764a3455a0bb1087bda876c2db8aca3a3cbb67b3dbce8cda0"}, - {file = "ruff-0.7.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:37d0b619546103274e7f62643d14e1adcbccb242efda4e4bdb9544d7764782e9"}, - {file = "ruff-0.7.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59f0c3ee4d1a6787614e7135b72e21024875266101142a09a61439cb6e38a5"}, - {file = "ruff-0.7.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:44eb93c2499a169d49fafd07bc62ac89b1bc800b197e50ff4633aed212569299"}, - {file = "ruff-0.7.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d0242ce53f3a576c35ee32d907475a8d569944c0407f91d207c8af5be5dae4e"}, - {file = "ruff-0.7.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:6b6224af8b5e09772c2ecb8dc9f3f344c1aa48201c7f07e7315367f6dd90ac29"}, - {file = "ruff-0.7.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c50f95a82b94421c964fae4c27c0242890a20fe67d203d127e84fbb8013855f5"}, - {file = "ruff-0.7.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f3eff9961b5d2644bcf1616c606e93baa2d6b349e8aa8b035f654df252c8c67"}, - {file = "ruff-0.7.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8963cab06d130c4df2fd52c84e9f10d297826d2e8169ae0c798b6221be1d1d2"}, - {file = "ruff-0.7.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:61b46049d6edc0e4317fb14b33bd693245281a3007288b68a3f5b74a22a0746d"}, - {file = "ruff-0.7.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:10ebce7696afe4644e8c1a23b3cf8c0f2193a310c18387c06e583ae9ef284de2"}, - {file = "ruff-0.7.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3f36d56326b3aef8eeee150b700e519880d1aab92f471eefdef656fd57492aa2"}, - {file = "ruff-0.7.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5d024301109a0007b78d57ab0ba190087b43dce852e552734ebf0b0b85e4fb16"}, - {file = "ruff-0.7.3-py3-none-win32.whl", hash = "sha256:4ba81a5f0c5478aa61674c5a2194de8b02652f17addf8dfc40c8937e6e7d79fc"}, - {file = "ruff-0.7.3-py3-none-win_amd64.whl", hash = "sha256:588a9ff2fecf01025ed065fe28809cd5a53b43505f48b69a1ac7707b1b7e4088"}, - {file = "ruff-0.7.3-py3-none-win_arm64.whl", hash = "sha256:1713e2c5545863cdbfe2cbce21f69ffaf37b813bfd1fb3b90dc9a6f1963f5a8c"}, - {file = "ruff-0.7.3.tar.gz", hash = "sha256:e1d1ba2e40b6e71a61b063354d04be669ab0d39c352461f3d789cac68b54a313"}, + {file = "ruff-0.7.4-py3-none-linux_armv6l.whl", hash = "sha256:a4919925e7684a3f18e18243cd6bea7cfb8e968a6eaa8437971f681b7ec51478"}, + {file = "ruff-0.7.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfb365c135b830778dda8c04fb7d4280ed0b984e1aec27f574445231e20d6c63"}, + {file = "ruff-0.7.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:63a569b36bc66fbadec5beaa539dd81e0527cb258b94e29e0531ce41bacc1f20"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d06218747d361d06fd2fdac734e7fa92df36df93035db3dc2ad7aa9852cb109"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0cea28d0944f74ebc33e9f934238f15c758841f9f5edd180b5315c203293452"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80094ecd4793c68b2571b128f91754d60f692d64bc0d7272ec9197fdd09bf9ea"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:997512325c6620d1c4c2b15db49ef59543ef9cd0f4aa8065ec2ae5103cedc7e7"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00b4cf3a6b5fad6d1a66e7574d78956bbd09abfd6c8a997798f01f5da3d46a05"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7dbdc7d8274e1422722933d1edddfdc65b4336abf0b16dfcb9dedd6e6a517d06"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e92dfb5f00eaedb1501b2f906ccabfd67b2355bdf117fea9719fc99ac2145bc"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3bd726099f277d735dc38900b6a8d6cf070f80828877941983a57bca1cd92172"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2e32829c429dd081ee5ba39aef436603e5b22335c3d3fff013cd585806a6486a"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:662a63b4971807623f6f90c1fb664613f67cc182dc4d991471c23c541fee62dd"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:876f5e09eaae3eb76814c1d3b68879891d6fde4824c015d48e7a7da4cf066a3a"}, + {file = "ruff-0.7.4-py3-none-win32.whl", hash = "sha256:75c53f54904be42dd52a548728a5b572344b50d9b2873d13a3f8c5e3b91f5cac"}, + {file = "ruff-0.7.4-py3-none-win_amd64.whl", hash = "sha256:745775c7b39f914238ed1f1b0bebed0b9155a17cd8bc0b08d3c87e4703b990d6"}, + {file = "ruff-0.7.4-py3-none-win_arm64.whl", hash = "sha256:11bff065102c3ae9d3ea4dc9ecdfe5a5171349cdd0787c1fc64761212fc9cf1f"}, + {file = "ruff-0.7.4.tar.gz", hash = "sha256:cd12e35031f5af6b9b93715d8c4f40360070b2041f81273d0527683d5708fce2"}, ] [[package]] From 58a0acb5fcccaaf83a8525b91124cd2160090bc7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 01:08:49 +0000 Subject: [PATCH 429/685] build(deps-dev): bump deprecated from 1.2.14 to 1.2.15 Bumps [deprecated](https://github.com/laurent-laporte-pro/deprecated) from 1.2.14 to 1.2.15. - [Release notes](https://github.com/laurent-laporte-pro/deprecated/releases) - [Changelog](https://github.com/laurent-laporte-pro/deprecated/blob/master/CHANGELOG.rst) - [Commits](https://github.com/laurent-laporte-pro/deprecated/compare/v1.2.14...v1.2.15) --- updated-dependencies: - dependency-name: deprecated dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 44e51dba5b..0a0655707f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -323,20 +323,20 @@ files = [ [[package]] name = "deprecated" -version = "1.2.14" +version = "1.2.15" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ - {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, - {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, + {file = "Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320"}, + {file = "deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d"}, ] [package.dependencies] wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "setuptools", "sphinx (<2)", "tox"] [[package]] name = "distlib" From 3e21ac576e76cd45103f3dcbcde216a9394a6247 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 01:09:08 +0000 Subject: [PATCH 430/685] build(deps-dev): bump types-deprecated Bumps [types-deprecated](https://github.com/python/typeshed) from 1.2.9.20240311 to 1.2.15.20241117. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-deprecated dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0a0655707f..63a14ff2bf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1573,13 +1573,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "types-deprecated" -version = "1.2.9.20240311" +version = "1.2.15.20241117" description = "Typing stubs for Deprecated" optional = false python-versions = ">=3.8" files = [ - {file = "types-Deprecated-1.2.9.20240311.tar.gz", hash = "sha256:0680e89989a8142707de8103f15d182445a533c1047fd9b7e8c5459101e9b90a"}, - {file = "types_Deprecated-1.2.9.20240311-py3-none-any.whl", hash = "sha256:d7793aaf32ff8f7e49a8ac781de4872248e0694c4b75a7a8a186c51167463f9d"}, + {file = "types-Deprecated-1.2.15.20241117.tar.gz", hash = "sha256:924002c8b7fddec51ba4949788a702411a2e3636cd9b2a33abd8ee119701d77e"}, + {file = "types_Deprecated-1.2.15.20241117-py3-none-any.whl", hash = "sha256:a0cc5e39f769fc54089fd8e005416b55d74aa03f6964d2ed1a0b0b2e28751884"}, ] [[package]] From 1c44c753e12569209c7fc528fa93c865aae557ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 01:41:52 +0000 Subject: [PATCH 431/685] build(deps-dev): bump mkdocs-material from 9.5.44 to 9.5.45 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.44 to 9.5.45. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.44...9.5.45) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 63a14ff2bf..0863fa0b7e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -769,13 +769,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.44" +version = "9.5.45" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.44-py3-none-any.whl", hash = "sha256:47015f9c167d58a5ff5e682da37441fc4d66a1c79334bfc08d774763cacf69ca"}, - {file = "mkdocs_material-9.5.44.tar.gz", hash = "sha256:f3a6c968e524166b3f3ed1fb97d3ed3e0091183b0545cedf7156a2a6804c56c0"}, + {file = "mkdocs_material-9.5.45-py3-none-any.whl", hash = "sha256:a9be237cfd0be14be75f40f1726d83aa3a81ce44808dc3594d47a7a592f44547"}, + {file = "mkdocs_material-9.5.45.tar.gz", hash = "sha256:286489cf0beca4a129d91d59d6417419c63bceed1ce5cd0ec1fc7e1ebffb8189"}, ] [package.dependencies] From 64cb9b6ce76a248bae662eda6efe3c254af0f044 Mon Sep 17 00:00:00 2001 From: "Axel H." <noirbizarre@gmail.com> Date: Tue, 26 Nov 2024 01:00:20 +0100 Subject: [PATCH 432/685] build(python)!: Drop support for Python 3.8 (EOL) and expose support for 3.13 --- .github/workflows/pythonpackage.yml | 2 +- docs/README.md | 2 +- docs/tutorials/gitlab_ci.md | 2 +- poetry.lock | 895 +++++++++++++--------------- pyproject.toml | 6 +- 5 files changed, 435 insertions(+), 472 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 3a7907fa5b..4f99a595c7 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -6,7 +6,7 @@ jobs: python-check: strategy: matrix: - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] platform: [ubuntu-20.04, macos-latest, windows-latest] runs-on: ${{ matrix.platform }} steps: diff --git a/docs/README.md b/docs/README.md index 9a071d5676..128602dfb3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -41,7 +41,7 @@ descriptive commits. ## Requirements -[Python](https://www.python.org/downloads/) `3.8+` +[Python](https://www.python.org/downloads/) `3.9+` [Git][gitscm] `1.8.5.2+` diff --git a/docs/tutorials/gitlab_ci.md b/docs/tutorials/gitlab_ci.md index d29bf994bd..85abb3fe6d 100644 --- a/docs/tutorials/gitlab_ci.md +++ b/docs/tutorials/gitlab_ci.md @@ -74,7 +74,7 @@ test: auto-bump: stage: auto-bump - image: python:3.8 + image: python:3.9 before_script: - "which ssh-agent || ( apt-get update -qy && apt-get install openssh-client -qqy )" - eval `ssh-agent -s` diff --git a/poetry.lock b/poetry.lock index 0863fa0b7e..ad3607415b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,15 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. - -[[package]] -name = "appnope" -version = "0.1.4" -description = "Disable App Nap on macOS >= 10.9" -optional = false -python-versions = ">=3.6" -files = [ - {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, - {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, -] +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. [[package]] name = "argcomplete" @@ -45,41 +34,27 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] [[package]] name = "babel" -version = "2.15.0" +version = "2.16.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" files = [ - {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"}, - {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"}, + {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, + {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, ] -[package.dependencies] -pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} - [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -optional = false -python-versions = "*" -files = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] - [[package]] name = "certifi" -version = "2024.7.4" +version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, - {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] @@ -234,63 +209,73 @@ files = [ [[package]] name = "coverage" -version = "7.5.1" +version = "7.6.8" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.8" -files = [ - {file = "coverage-7.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0884920835a033b78d1c73b6d3bbcda8161a900f38a488829a83982925f6c2e"}, - {file = "coverage-7.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:39afcd3d4339329c5f58de48a52f6e4e50f6578dd6099961cf22228feb25f38f"}, - {file = "coverage-7.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7b0ceee8147444347da6a66be737c9d78f3353b0681715b668b72e79203e4a"}, - {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a9ca3f2fae0088c3c71d743d85404cec8df9be818a005ea065495bedc33da35"}, - {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd215c0c7d7aab005221608a3c2b46f58c0285a819565887ee0b718c052aa4e"}, - {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4bf0655ab60d754491004a5efd7f9cccefcc1081a74c9ef2da4735d6ee4a6223"}, - {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:61c4bf1ba021817de12b813338c9be9f0ad5b1e781b9b340a6d29fc13e7c1b5e"}, - {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:db66fc317a046556a96b453a58eced5024af4582a8dbdc0c23ca4dbc0d5b3146"}, - {file = "coverage-7.5.1-cp310-cp310-win32.whl", hash = "sha256:b016ea6b959d3b9556cb401c55a37547135a587db0115635a443b2ce8f1c7228"}, - {file = "coverage-7.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:df4e745a81c110e7446b1cc8131bf986157770fa405fe90e15e850aaf7619bc8"}, - {file = "coverage-7.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:796a79f63eca8814ca3317a1ea443645c9ff0d18b188de470ed7ccd45ae79428"}, - {file = "coverage-7.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4fc84a37bfd98db31beae3c2748811a3fa72bf2007ff7902f68746d9757f3746"}, - {file = "coverage-7.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6175d1a0559986c6ee3f7fccfc4a90ecd12ba0a383dcc2da30c2b9918d67d8a3"}, - {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fc81d5878cd6274ce971e0a3a18a8803c3fe25457165314271cf78e3aae3aa2"}, - {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:556cf1a7cbc8028cb60e1ff0be806be2eded2daf8129b8811c63e2b9a6c43bca"}, - {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9981706d300c18d8b220995ad22627647be11a4276721c10911e0e9fa44c83e8"}, - {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d7fed867ee50edf1a0b4a11e8e5d0895150e572af1cd6d315d557758bfa9c057"}, - {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef48e2707fb320c8f139424a596f5b69955a85b178f15af261bab871873bb987"}, - {file = "coverage-7.5.1-cp311-cp311-win32.whl", hash = "sha256:9314d5678dcc665330df5b69c1e726a0e49b27df0461c08ca12674bcc19ef136"}, - {file = "coverage-7.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:5fa567e99765fe98f4e7d7394ce623e794d7cabb170f2ca2ac5a4174437e90dd"}, - {file = "coverage-7.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b6cf3764c030e5338e7f61f95bd21147963cf6aa16e09d2f74f1fa52013c1206"}, - {file = "coverage-7.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ec92012fefebee89a6b9c79bc39051a6cb3891d562b9270ab10ecfdadbc0c34"}, - {file = "coverage-7.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16db7f26000a07efcf6aea00316f6ac57e7d9a96501e990a36f40c965ec7a95d"}, - {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beccf7b8a10b09c4ae543582c1319c6df47d78fd732f854ac68d518ee1fb97fa"}, - {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8748731ad392d736cc9ccac03c9845b13bb07d020a33423fa5b3a36521ac6e4e"}, - {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7352b9161b33fd0b643ccd1f21f3a3908daaddf414f1c6cb9d3a2fd618bf2572"}, - {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a588d39e0925f6a2bff87154752481273cdb1736270642aeb3635cb9b4cad07"}, - {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:68f962d9b72ce69ea8621f57551b2fa9c70509af757ee3b8105d4f51b92b41a7"}, - {file = "coverage-7.5.1-cp312-cp312-win32.whl", hash = "sha256:f152cbf5b88aaeb836127d920dd0f5e7edff5a66f10c079157306c4343d86c19"}, - {file = "coverage-7.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:5a5740d1fb60ddf268a3811bcd353de34eb56dc24e8f52a7f05ee513b2d4f596"}, - {file = "coverage-7.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e2213def81a50519d7cc56ed643c9e93e0247f5bbe0d1247d15fa520814a7cd7"}, - {file = "coverage-7.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5037f8fcc2a95b1f0e80585bd9d1ec31068a9bcb157d9750a172836e98bc7a90"}, - {file = "coverage-7.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3721c2c9e4c4953a41a26c14f4cef64330392a6d2d675c8b1db3b645e31f0e"}, - {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca498687ca46a62ae590253fba634a1fe9836bc56f626852fb2720f334c9e4e5"}, - {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cdcbc320b14c3e5877ee79e649677cb7d89ef588852e9583e6b24c2e5072661"}, - {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:57e0204b5b745594e5bc14b9b50006da722827f0b8c776949f1135677e88d0b8"}, - {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fe7502616b67b234482c3ce276ff26f39ffe88adca2acf0261df4b8454668b4"}, - {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9e78295f4144f9dacfed4f92935fbe1780021247c2fabf73a819b17f0ccfff8d"}, - {file = "coverage-7.5.1-cp38-cp38-win32.whl", hash = "sha256:1434e088b41594baa71188a17533083eabf5609e8e72f16ce8c186001e6b8c41"}, - {file = "coverage-7.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:0646599e9b139988b63704d704af8e8df7fa4cbc4a1f33df69d97f36cb0a38de"}, - {file = "coverage-7.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4cc37def103a2725bc672f84bd939a6fe4522310503207aae4d56351644682f1"}, - {file = "coverage-7.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc0b4d8bfeabd25ea75e94632f5b6e047eef8adaed0c2161ada1e922e7f7cece"}, - {file = "coverage-7.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d0a0f5e06881ecedfe6f3dd2f56dcb057b6dbeb3327fd32d4b12854df36bf26"}, - {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9735317685ba6ec7e3754798c8871c2f49aa5e687cc794a0b1d284b2389d1bd5"}, - {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d21918e9ef11edf36764b93101e2ae8cc82aa5efdc7c5a4e9c6c35a48496d601"}, - {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c3e757949f268364b96ca894b4c342b41dc6f8f8b66c37878aacef5930db61be"}, - {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:79afb6197e2f7f60c4824dd4b2d4c2ec5801ceb6ba9ce5d2c3080e5660d51a4f"}, - {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1d0d98d95dd18fe29dc66808e1accf59f037d5716f86a501fc0256455219668"}, - {file = "coverage-7.5.1-cp39-cp39-win32.whl", hash = "sha256:1cc0fe9b0b3a8364093c53b0b4c0c2dd4bb23acbec4c9240b5f284095ccf7981"}, - {file = "coverage-7.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:dde0070c40ea8bb3641e811c1cfbf18e265d024deff6de52c5950677a8fb1e0f"}, - {file = "coverage-7.5.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:6537e7c10cc47c595828b8a8be04c72144725c383c4702703ff4e42e44577312"}, - {file = "coverage-7.5.1.tar.gz", hash = "sha256:54de9ef3a9da981f7af93eafde4ede199e0846cd819eb27c88e2b712aae9708c"}, +python-versions = ">=3.9" +files = [ + {file = "coverage-7.6.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b39e6011cd06822eb964d038d5dff5da5d98652b81f5ecd439277b32361a3a50"}, + {file = "coverage-7.6.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:63c19702db10ad79151a059d2d6336fe0c470f2e18d0d4d1a57f7f9713875dcf"}, + {file = "coverage-7.6.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3985b9be361d8fb6b2d1adc9924d01dec575a1d7453a14cccd73225cb79243ee"}, + {file = "coverage-7.6.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:644ec81edec0f4ad17d51c838a7d01e42811054543b76d4ba2c5d6af741ce2a6"}, + {file = "coverage-7.6.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f188a2402f8359cf0c4b1fe89eea40dc13b52e7b4fd4812450da9fcd210181d"}, + {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e19122296822deafce89a0c5e8685704c067ae65d45e79718c92df7b3ec3d331"}, + {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13618bed0c38acc418896005732e565b317aa9e98d855a0e9f211a7ffc2d6638"}, + {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:193e3bffca48ad74b8c764fb4492dd875038a2f9925530cb094db92bb5e47bed"}, + {file = "coverage-7.6.8-cp310-cp310-win32.whl", hash = "sha256:3988665ee376abce49613701336544041f2117de7b7fbfe91b93d8ff8b151c8e"}, + {file = "coverage-7.6.8-cp310-cp310-win_amd64.whl", hash = "sha256:f56f49b2553d7dd85fd86e029515a221e5c1f8cb3d9c38b470bc38bde7b8445a"}, + {file = "coverage-7.6.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:86cffe9c6dfcfe22e28027069725c7f57f4b868a3f86e81d1c62462764dc46d4"}, + {file = "coverage-7.6.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d82ab6816c3277dc962cfcdc85b1efa0e5f50fb2c449432deaf2398a2928ab94"}, + {file = "coverage-7.6.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13690e923a3932e4fad4c0ebfb9cb5988e03d9dcb4c5150b5fcbf58fd8bddfc4"}, + {file = "coverage-7.6.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4be32da0c3827ac9132bb488d331cb32e8d9638dd41a0557c5569d57cf22c9c1"}, + {file = "coverage-7.6.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44e6c85bbdc809383b509d732b06419fb4544dca29ebe18480379633623baafb"}, + {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:768939f7c4353c0fac2f7c37897e10b1414b571fd85dd9fc49e6a87e37a2e0d8"}, + {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e44961e36cb13c495806d4cac67640ac2866cb99044e210895b506c26ee63d3a"}, + {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ea8bb1ab9558374c0ab591783808511d135a833c3ca64a18ec927f20c4030f0"}, + {file = "coverage-7.6.8-cp311-cp311-win32.whl", hash = "sha256:629a1ba2115dce8bf75a5cce9f2486ae483cb89c0145795603d6554bdc83e801"}, + {file = "coverage-7.6.8-cp311-cp311-win_amd64.whl", hash = "sha256:fb9fc32399dca861584d96eccd6c980b69bbcd7c228d06fb74fe53e007aa8ef9"}, + {file = "coverage-7.6.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e683e6ecc587643f8cde8f5da6768e9d165cd31edf39ee90ed7034f9ca0eefee"}, + {file = "coverage-7.6.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1defe91d41ce1bd44b40fabf071e6a01a5aa14de4a31b986aa9dfd1b3e3e414a"}, + {file = "coverage-7.6.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7ad66e8e50225ebf4236368cc43c37f59d5e6728f15f6e258c8639fa0dd8e6d"}, + {file = "coverage-7.6.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fe47da3e4fda5f1abb5709c156eca207eacf8007304ce3019eb001e7a7204cb"}, + {file = "coverage-7.6.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:202a2d645c5a46b84992f55b0a3affe4f0ba6b4c611abec32ee88358db4bb649"}, + {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4674f0daa1823c295845b6a740d98a840d7a1c11df00d1fd62614545c1583787"}, + {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:74610105ebd6f33d7c10f8907afed696e79c59e3043c5f20eaa3a46fddf33b4c"}, + {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37cda8712145917105e07aab96388ae76e787270ec04bcb9d5cc786d7cbb8443"}, + {file = "coverage-7.6.8-cp312-cp312-win32.whl", hash = "sha256:9e89d5c8509fbd6c03d0dd1972925b22f50db0792ce06324ba069f10787429ad"}, + {file = "coverage-7.6.8-cp312-cp312-win_amd64.whl", hash = "sha256:379c111d3558272a2cae3d8e57e6b6e6f4fe652905692d54bad5ea0ca37c5ad4"}, + {file = "coverage-7.6.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b0c69f4f724c64dfbfe79f5dfb503b42fe6127b8d479b2677f2b227478db2eb"}, + {file = "coverage-7.6.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c15b32a7aca8038ed7644f854bf17b663bc38e1671b5d6f43f9a2b2bd0c46f63"}, + {file = "coverage-7.6.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63068a11171e4276f6ece913bde059e77c713b48c3a848814a6537f35afb8365"}, + {file = "coverage-7.6.8-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f4548c5ead23ad13fb7a2c8ea541357474ec13c2b736feb02e19a3085fac002"}, + {file = "coverage-7.6.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4b4299dd0d2c67caaaf286d58aef5e75b125b95615dda4542561a5a566a1e3"}, + {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c9ebfb2507751f7196995142f057d1324afdab56db1d9743aab7f50289abd022"}, + {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c1b4474beee02ede1eef86c25ad4600a424fe36cff01a6103cb4533c6bf0169e"}, + {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d9fd2547e6decdbf985d579cf3fc78e4c1d662b9b0ff7cc7862baaab71c9cc5b"}, + {file = "coverage-7.6.8-cp313-cp313-win32.whl", hash = "sha256:8aae5aea53cbfe024919715eca696b1a3201886ce83790537d1c3668459c7146"}, + {file = "coverage-7.6.8-cp313-cp313-win_amd64.whl", hash = "sha256:ae270e79f7e169ccfe23284ff5ea2d52a6f401dc01b337efb54b3783e2ce3f28"}, + {file = "coverage-7.6.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:de38add67a0af869b0d79c525d3e4588ac1ffa92f39116dbe0ed9753f26eba7d"}, + {file = "coverage-7.6.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b07c25d52b1c16ce5de088046cd2432b30f9ad5e224ff17c8f496d9cb7d1d451"}, + {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a66ff235e4c2e37ed3b6104d8b478d767ff73838d1222132a7a026aa548764"}, + {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09b9f848b28081e7b975a3626e9081574a7b9196cde26604540582da60235fdf"}, + {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:093896e530c38c8e9c996901858ac63f3d4171268db2c9c8b373a228f459bbc5"}, + {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9a7b8ac36fd688c8361cbc7bf1cb5866977ece6e0b17c34aa0df58bda4fa18a4"}, + {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:38c51297b35b3ed91670e1e4efb702b790002e3245a28c76e627478aa3c10d83"}, + {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2e4e0f60cb4bd7396108823548e82fdab72d4d8a65e58e2c19bbbc2f1e2bfa4b"}, + {file = "coverage-7.6.8-cp313-cp313t-win32.whl", hash = "sha256:6535d996f6537ecb298b4e287a855f37deaf64ff007162ec0afb9ab8ba3b8b71"}, + {file = "coverage-7.6.8-cp313-cp313t-win_amd64.whl", hash = "sha256:c79c0685f142ca53256722a384540832420dff4ab15fec1863d7e5bc8691bdcc"}, + {file = "coverage-7.6.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ac47fa29d8d41059ea3df65bd3ade92f97ee4910ed638e87075b8e8ce69599e"}, + {file = "coverage-7.6.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:24eda3a24a38157eee639ca9afe45eefa8d2420d49468819ac5f88b10de84f4c"}, + {file = "coverage-7.6.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4c81ed2820b9023a9a90717020315e63b17b18c274a332e3b6437d7ff70abe0"}, + {file = "coverage-7.6.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd55f8fc8fa494958772a2a7302b0354ab16e0b9272b3c3d83cdb5bec5bd1779"}, + {file = "coverage-7.6.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f39e2f3530ed1626c66e7493be7a8423b023ca852aacdc91fb30162c350d2a92"}, + {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:716a78a342679cd1177bc8c2fe957e0ab91405bd43a17094324845200b2fddf4"}, + {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:177f01eeaa3aee4a5ffb0d1439c5952b53d5010f86e9d2667963e632e30082cc"}, + {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:912e95017ff51dc3d7b6e2be158dedc889d9a5cc3382445589ce554f1a34c0ea"}, + {file = "coverage-7.6.8-cp39-cp39-win32.whl", hash = "sha256:4db3ed6a907b555e57cc2e6f14dc3a4c2458cdad8919e40b5357ab9b6db6c43e"}, + {file = "coverage-7.6.8-cp39-cp39-win_amd64.whl", hash = "sha256:428ac484592f780e8cd7b6b14eb568f7c85460c92e2a37cb0c0e5186e1a0d076"}, + {file = "coverage-7.6.8-pp39.pp310-none-any.whl", hash = "sha256:5c52a036535d12590c32c49209e79cabaad9f9ad8aa4cbd875b68c4d67a9cbce"}, + {file = "coverage-7.6.8.tar.gz", hash = "sha256:8b2b8503edb06822c86d82fa64a4a5cb0760bb8f31f26e138ec743f422f37cfc"}, ] [package.dependencies] @@ -340,24 +325,24 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", " [[package]] name = "distlib" -version = "0.3.8" +version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, - {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, ] [[package]] name = "exceptiongroup" -version = "1.2.1" +version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] [package.extras] @@ -379,13 +364,13 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "executing" -version = "2.0.1" +version = "2.1.0" description = "Get the currently executing AST node of a frame, and other information" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, - {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, + {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, + {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, ] [package.extras] @@ -393,19 +378,19 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "filelock" -version = "3.14.0" +version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, - {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, + {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, + {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] -typing = ["typing-extensions (>=4.8)"] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +typing = ["typing-extensions (>=4.12.2)"] [[package]] name = "freezegun" @@ -440,13 +425,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "identify" -version = "2.5.36" +version = "2.6.3" description = "File identification library for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, - {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, + {file = "identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"}, + {file = "identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02"}, ] [package.extras] @@ -454,15 +439,18 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.7" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + [[package]] name = "importlib-metadata" version = "8.5.0" @@ -499,24 +487,22 @@ files = [ [[package]] name = "ipython" -version = "8.12.3" +version = "8.18.0" description = "IPython: Productive Interactive Computing" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "ipython-8.12.3-py3-none-any.whl", hash = "sha256:b0340d46a933d27c657b211a329d0be23793c36595acf9e6ef4164bc01a1804c"}, - {file = "ipython-8.12.3.tar.gz", hash = "sha256:3910c4b54543c2ad73d06579aa771041b7d5707b033bd488669b4cf544e3b363"}, + {file = "ipython-8.18.0-py3-none-any.whl", hash = "sha256:d538a7a98ad9b7e018926447a5f35856113a85d08fd68a165d7871ab5175f6e0"}, + {file = "ipython-8.18.0.tar.gz", hash = "sha256:4feb61210160f75e229ce932dbf8b719bff37af123c0b985fd038b14233daa16"}, ] [package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" colorama = {version = "*", markers = "sys_platform == \"win32\""} decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" pygments = ">=2.4.0" stack-data = "*" @@ -524,36 +510,36 @@ traitlets = ">=5" typing-extensions = {version = "*", markers = "python_version < \"3.10\""} [package.extras] -all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] black = ["black"] -doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] [[package]] name = "jedi" -version = "0.19.1" +version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, - {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, + {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, + {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, ] [package.dependencies] -parso = ">=0.8.3,<0.9.0" +parso = ">=0.8.4,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jinja2" @@ -574,13 +560,13 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "markdown" -version = "3.6" +version = "3.7" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "Markdown-3.6-py3-none-any.whl", hash = "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f"}, - {file = "Markdown-3.6.tar.gz", hash = "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"}, + {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, + {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, ] [package.dependencies] @@ -616,71 +602,72 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.5" +version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, +python-versions = ">=3.9" +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] [[package]] @@ -769,13 +756,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.45" +version = "9.5.46" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.45-py3-none-any.whl", hash = "sha256:a9be237cfd0be14be75f40f1726d83aa3a81ce44808dc3594d47a7a592f44547"}, - {file = "mkdocs_material-9.5.45.tar.gz", hash = "sha256:286489cf0beca4a129d91d59d6417419c63bceed1ce5cd0ec1fc7e1ebffb8189"}, + {file = "mkdocs_material-9.5.46-py3-none-any.whl", hash = "sha256:98f0a2039c62e551a68aad0791a8d41324ff90c03a6e6cea381a384b84908b83"}, + {file = "mkdocs_material-9.5.46.tar.gz", hash = "sha256:ae2043f4238e572f9a40e0b577f50400d6fc31e2fef8ea141800aebf3bd273d7"}, ] [package.dependencies] @@ -873,18 +860,15 @@ files = [ [[package]] name = "nodeenv" -version = "1.8.0" +version = "1.9.1" description = "Node.js virtual environment builder" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, ] -[package.dependencies] -setuptools = "*" - [[package]] name = "packaging" version = "24.2" @@ -898,14 +882,19 @@ files = [ [[package]] name = "paginate" -version = "0.5.6" +version = "0.5.7" description = "Divides large result sets into pages for easier browsing" optional = false python-versions = "*" files = [ - {file = "paginate-0.5.6.tar.gz", hash = "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d"}, + {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, + {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, ] +[package.extras] +dev = ["pytest", "tox"] +lint = ["black"] + [[package]] name = "parso" version = "0.8.4" @@ -946,32 +935,21 @@ files = [ [package.dependencies] ptyprocess = ">=0.5" -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -optional = false -python-versions = "*" -files = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] - [[package]] name = "platformdirs" -version = "4.2.2" +version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, - {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] -type = ["mypy (>=1.8)"] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] [[package]] name = "pluggy" @@ -990,13 +968,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "3.5.0" +version = "3.8.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pre_commit-3.5.0-py2.py3-none-any.whl", hash = "sha256:841dc9aef25daba9a0238cd27984041fa0467b4199fc4852e27950664919f660"}, - {file = "pre_commit-3.5.0.tar.gz", hash = "sha256:5804465c675b659b0862f07907f96295d490822a450c4c40e747d0b1c6ebcb32"}, + {file = "pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"}, + {file = "pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af"}, ] [package.dependencies] @@ -1033,13 +1011,13 @@ files = [ [[package]] name = "pure-eval" -version = "0.2.2" +version = "0.2.3" description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" files = [ - {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, - {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, + {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, + {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, ] [package.extras] @@ -1061,13 +1039,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.8.1" +version = "10.12" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.8.1-py3-none-any.whl", hash = "sha256:f938326115884f48c6059c67377c46cf631c733ef3629b6eed1349989d1b30cb"}, - {file = "pymdown_extensions-10.8.1.tar.gz", hash = "sha256:3ab1db5c9e21728dabf75192d71471f8e50f216627e9a1fa9535ecb0231b9940"}, + {file = "pymdown_extensions-10.12-py3-none-any.whl", hash = "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77"}, + {file = "pymdown_extensions-10.12.tar.gz", hash = "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7"}, ] [package.dependencies] @@ -1219,17 +1197,6 @@ files = [ [package.dependencies] six = ">=1.5" -[[package]] -name = "pytz" -version = "2024.1" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, - {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, -] - [[package]] name = "pyyaml" version = "6.0.2" @@ -1322,101 +1289,116 @@ prompt_toolkit = ">=2.0,<=3.0.36" [[package]] name = "regex" -version = "2024.5.15" +version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" files = [ - {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f"}, - {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6"}, - {file = "regex-2024.5.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53"}, - {file = "regex-2024.5.15-cp310-cp310-win32.whl", hash = "sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3"}, - {file = "regex-2024.5.15-cp310-cp310-win_amd64.whl", hash = "sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145"}, - {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a"}, - {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656"}, - {file = "regex-2024.5.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68"}, - {file = "regex-2024.5.15-cp311-cp311-win32.whl", hash = "sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa"}, - {file = "regex-2024.5.15-cp311-cp311-win_amd64.whl", hash = "sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201"}, - {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014"}, - {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e"}, - {file = "regex-2024.5.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80"}, - {file = "regex-2024.5.15-cp312-cp312-win32.whl", hash = "sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe"}, - {file = "regex-2024.5.15-cp312-cp312-win_amd64.whl", hash = "sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2"}, - {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835"}, - {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850"}, - {file = "regex-2024.5.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741"}, - {file = "regex-2024.5.15-cp38-cp38-win32.whl", hash = "sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9"}, - {file = "regex-2024.5.15-cp38-cp38-win_amd64.whl", hash = "sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569"}, - {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133"}, - {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1"}, - {file = "regex-2024.5.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456"}, - {file = "regex-2024.5.15-cp39-cp39-win32.whl", hash = "sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694"}, - {file = "regex-2024.5.15-cp39-cp39-win_amd64.whl", hash = "sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388"}, - {file = "regex-2024.5.15.tar.gz", hash = "sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, + {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, + {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, + {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, + {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, + {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, + {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, + {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, + {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, + {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, + {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, + {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, + {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, + {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, ] [[package]] name = "requests" -version = "2.32.1" +version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" files = [ - {file = "requests-2.32.1-py3-none-any.whl", hash = "sha256:21ac9465cdf8c1650fe1ecde8a71669a93d4e6f147550483a2967d08396a56a5"}, - {file = "requests-2.32.1.tar.gz", hash = "sha256:eb97e87e64c79e64e5b8ac75cee9dd1f97f49e289b083ee6be96268930725685"}, + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] [package.dependencies] @@ -1475,21 +1457,6 @@ files = [ {file = "ruff-0.7.4.tar.gz", hash = "sha256:cd12e35031f5af6b9b93715d8c4f40360070b2041f81273d0527683d5708fce2"}, ] -[[package]] -name = "setuptools" -version = "70.0.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, - {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] - [[package]] name = "six" version = "1.16.0" @@ -1522,13 +1489,13 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "termcolor" -version = "2.4.0" +version = "2.5.0" description = "ANSI color formatting for output in terminal" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, - {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, + {file = "termcolor-2.5.0-py3-none-any.whl", hash = "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8"}, + {file = "termcolor-2.5.0.tar.gz", hash = "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f"}, ] [package.extras] @@ -1536,13 +1503,13 @@ tests = ["pytest", "pytest-cov"] [[package]] name = "tomli" -version = "2.0.1" +version = "2.1.0" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, + {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, ] [[package]] @@ -1628,13 +1595,13 @@ files = [ [[package]] name = "urllib3" -version = "2.2.2" +version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, - {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] [package.extras] @@ -1645,13 +1612,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.26.2" +version = "20.27.1" description = "Virtual Python Environment builder" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, - {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, + {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, + {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, ] [package.dependencies] @@ -1665,40 +1632,41 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "watchdog" -version = "4.0.0" +version = "6.0.0" description = "Filesystem events monitoring" optional = false -python-versions = ">=3.8" -files = [ - {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b"}, - {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b"}, - {file = "watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c"}, - {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b"}, - {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935"}, - {file = "watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b"}, - {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257"}, - {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19"}, - {file = "watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b"}, - {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85"}, - {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4"}, - {file = "watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605"}, - {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101"}, - {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca"}, - {file = "watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8"}, - {file = "watchdog-4.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b"}, - {file = "watchdog-4.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92"}, - {file = "watchdog-4.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269"}, - {file = "watchdog-4.0.0-py3-none-win32.whl", hash = "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c"}, - {file = "watchdog-4.0.0-py3-none-win_amd64.whl", hash = "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245"}, - {file = "watchdog-4.0.0-py3-none-win_ia64.whl", hash = "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7"}, - {file = "watchdog-4.0.0.tar.gz", hash = "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec"}, +python-versions = ">=3.9" +files = [ + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2"}, + {file = "watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a"}, + {file = "watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"}, + {file = "watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f"}, + {file = "watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282"}, ] [package.extras] @@ -1717,92 +1685,87 @@ files = [ [[package]] name = "wrapt" -version = "1.16.0" +version = "1.17.0" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, - {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, - {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, - {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, - {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, - {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, - {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, - {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, - {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, - {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, - {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, - {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, - {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, - {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, - {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, - {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, - {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, - {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, + {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301"}, + {file = "wrapt-1.17.0-cp310-cp310-win32.whl", hash = "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22"}, + {file = "wrapt-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575"}, + {file = "wrapt-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b"}, + {file = "wrapt-1.17.0-cp311-cp311-win32.whl", hash = "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346"}, + {file = "wrapt-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a"}, + {file = "wrapt-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4"}, + {file = "wrapt-1.17.0-cp312-cp312-win32.whl", hash = "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635"}, + {file = "wrapt-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7"}, + {file = "wrapt-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a"}, + {file = "wrapt-1.17.0-cp313-cp313-win32.whl", hash = "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045"}, + {file = "wrapt-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838"}, + {file = "wrapt-1.17.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab"}, + {file = "wrapt-1.17.0-cp313-cp313t-win32.whl", hash = "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf"}, + {file = "wrapt-1.17.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a"}, + {file = "wrapt-1.17.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f"}, + {file = "wrapt-1.17.0-cp38-cp38-win32.whl", hash = "sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea"}, + {file = "wrapt-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed"}, + {file = "wrapt-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0"}, + {file = "wrapt-1.17.0-cp39-cp39-win32.whl", hash = "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88"}, + {file = "wrapt-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977"}, + {file = "wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371"}, + {file = "wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801"}, ] [[package]] name = "zipp" -version = "3.20.2" +version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, - {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] [package.extras] @@ -1815,5 +1778,5 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" -python-versions = ">=3.8" -content-hash = "9f70911e2e4764b623fece710f5c545e7313fa9e5a03fdeec8266faf3c5b7c26" +python-versions = ">=3.9" +content-hash = "a26dd45789ef8d0cc79465fe620060d29bde139d45a70885a80c413dd668dc81" diff --git a/pyproject.toml b/pyproject.toml index 15943c93de..d4f1f55b5b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,11 +25,11 @@ classifiers = [ "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", ] packages = [ @@ -38,7 +38,7 @@ packages = [ ] [tool.poetry.dependencies] -python = ">=3.8" +python = ">=3.9" questionary = "^2.0" decli = "^0.6.0" colorama = "^0.4.1" @@ -48,7 +48,7 @@ tomlkit = ">=0.5.3,<1.0.0" jinja2 = ">=2.10.3" pyyaml = ">=3.08" argcomplete = ">=1.12.1,<3.6" -typing-extensions = { version = "^4.0.1", python = "<3.8" } +typing-extensions = { version = "^4.0.1", python = "<3.11" } charset-normalizer = ">=2.1.0,<4" # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility importlib_metadata = { version = ">=8.0.0,<9", python = "<3.10"} From 76efedd776e04c9604a1d54fef389a292cbf7768 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Tue, 26 Nov 2024 01:36:55 +0000 Subject: [PATCH 433/685] =?UTF-8?q?bump:=20version=203.31.0=20=E2=86=92=20?= =?UTF-8?q?4.0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 2 ++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7765ffe359..52049e967f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v3.31.0 # automatically updated by Commitizen + rev: v4.0.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index d728143c42..c6556ab016 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +## v4.0.0 (2024-11-26) + ## v3.31.0 (2024-11-16) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 0cba0fb82a..ce1305bf4e 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.31.0" +__version__ = "4.0.0" diff --git a/pyproject.toml b/pyproject.toml index d4f1f55b5b..b15581952e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.31.0" +version = "4.0.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.31.0" +version = "4.0.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 7e23626055328f00c3582cf78c6e64913e95621a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 01:27:09 +0000 Subject: [PATCH 434/685] build(deps-dev): bump ruff from 0.7.4 to 0.8.0 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.7.4 to 0.8.0. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.7.4...0.8.0) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 46 +++++++++++++++++++++++----------------------- pyproject.toml | 2 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/poetry.lock b/poetry.lock index ad3607415b..05909045e3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1432,29 +1432,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.7.4" +version = "0.8.0" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.7.4-py3-none-linux_armv6l.whl", hash = "sha256:a4919925e7684a3f18e18243cd6bea7cfb8e968a6eaa8437971f681b7ec51478"}, - {file = "ruff-0.7.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfb365c135b830778dda8c04fb7d4280ed0b984e1aec27f574445231e20d6c63"}, - {file = "ruff-0.7.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:63a569b36bc66fbadec5beaa539dd81e0527cb258b94e29e0531ce41bacc1f20"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d06218747d361d06fd2fdac734e7fa92df36df93035db3dc2ad7aa9852cb109"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0cea28d0944f74ebc33e9f934238f15c758841f9f5edd180b5315c203293452"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80094ecd4793c68b2571b128f91754d60f692d64bc0d7272ec9197fdd09bf9ea"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:997512325c6620d1c4c2b15db49ef59543ef9cd0f4aa8065ec2ae5103cedc7e7"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00b4cf3a6b5fad6d1a66e7574d78956bbd09abfd6c8a997798f01f5da3d46a05"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7dbdc7d8274e1422722933d1edddfdc65b4336abf0b16dfcb9dedd6e6a517d06"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e92dfb5f00eaedb1501b2f906ccabfd67b2355bdf117fea9719fc99ac2145bc"}, - {file = "ruff-0.7.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3bd726099f277d735dc38900b6a8d6cf070f80828877941983a57bca1cd92172"}, - {file = "ruff-0.7.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2e32829c429dd081ee5ba39aef436603e5b22335c3d3fff013cd585806a6486a"}, - {file = "ruff-0.7.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:662a63b4971807623f6f90c1fb664613f67cc182dc4d991471c23c541fee62dd"}, - {file = "ruff-0.7.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:876f5e09eaae3eb76814c1d3b68879891d6fde4824c015d48e7a7da4cf066a3a"}, - {file = "ruff-0.7.4-py3-none-win32.whl", hash = "sha256:75c53f54904be42dd52a548728a5b572344b50d9b2873d13a3f8c5e3b91f5cac"}, - {file = "ruff-0.7.4-py3-none-win_amd64.whl", hash = "sha256:745775c7b39f914238ed1f1b0bebed0b9155a17cd8bc0b08d3c87e4703b990d6"}, - {file = "ruff-0.7.4-py3-none-win_arm64.whl", hash = "sha256:11bff065102c3ae9d3ea4dc9ecdfe5a5171349cdd0787c1fc64761212fc9cf1f"}, - {file = "ruff-0.7.4.tar.gz", hash = "sha256:cd12e35031f5af6b9b93715d8c4f40360070b2041f81273d0527683d5708fce2"}, + {file = "ruff-0.8.0-py3-none-linux_armv6l.whl", hash = "sha256:fcb1bf2cc6706adae9d79c8d86478677e3bbd4ced796ccad106fd4776d395fea"}, + {file = "ruff-0.8.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:295bb4c02d58ff2ef4378a1870c20af30723013f441c9d1637a008baaf928c8b"}, + {file = "ruff-0.8.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7b1f1c76b47c18fa92ee78b60d2d20d7e866c55ee603e7d19c1e991fad933a9a"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb0d4f250a7711b67ad513fde67e8870109e5ce590a801c3722580fe98c33a99"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e55cce9aa93c5d0d4e3937e47b169035c7e91c8655b0974e61bb79cf398d49c"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f4cd64916d8e732ce6b87f3f5296a8942d285bbbc161acee7fe561134af64f9"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c5c1466be2a2ebdf7c5450dd5d980cc87c8ba6976fb82582fea18823da6fa362"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2dabfd05b96b7b8f2da00d53c514eea842bff83e41e1cceb08ae1966254a51df"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:facebdfe5a5af6b1588a1d26d170635ead6892d0e314477e80256ef4a8470cf3"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87a8e86bae0dbd749c815211ca11e3a7bd559b9710746c559ed63106d382bd9c"}, + {file = "ruff-0.8.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:85e654f0ded7befe2d61eeaf3d3b1e4ef3894469cd664ffa85006c7720f1e4a2"}, + {file = "ruff-0.8.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:83a55679c4cb449fa527b8497cadf54f076603cc36779b2170b24f704171ce70"}, + {file = "ruff-0.8.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:812e2052121634cf13cd6fddf0c1871d0ead1aad40a1a258753c04c18bb71bbd"}, + {file = "ruff-0.8.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:780d5d8523c04202184405e60c98d7595bdb498c3c6abba3b6d4cdf2ca2af426"}, + {file = "ruff-0.8.0-py3-none-win32.whl", hash = "sha256:5fdb6efecc3eb60bba5819679466471fd7d13c53487df7248d6e27146e985468"}, + {file = "ruff-0.8.0-py3-none-win_amd64.whl", hash = "sha256:582891c57b96228d146725975fbb942e1f30a0c4ba19722e692ca3eb25cc9b4f"}, + {file = "ruff-0.8.0-py3-none-win_arm64.whl", hash = "sha256:ba93e6294e9a737cd726b74b09a6972e36bb511f9a102f1d9a7e1ce94dd206a6"}, + {file = "ruff-0.8.0.tar.gz", hash = "sha256:a7ccfe6331bf8c8dad715753e157457faf7351c2b69f62f32c165c2dbcbacd44"}, ] [[package]] @@ -1612,13 +1612,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.27.1" +version = "20.27.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ - {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, - {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, + {file = "virtualenv-20.27.2-py3-none-any.whl", hash = "sha256:a9ebd6adbf08c99583133b61e7491f8a4bc8d5fb34361abaa5ede3fff903a0f0"}, + {file = "virtualenv-20.27.2.tar.gz", hash = "sha256:99c89daeeaf15918880c73c99f41dc05eb39055e43231a4d76fc6b9fc2cf019d"}, ] [package.dependencies] @@ -1779,4 +1779,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.9" -content-hash = "a26dd45789ef8d0cc79465fe620060d29bde139d45a70885a80c413dd668dc81" +content-hash = "7e04dd9aa4799765e49b74f26cd66a1d5a8cf334d9b3eabf35d89c4660d518c2" diff --git a/pyproject.toml b/pyproject.toml index b15581952e..2662b80040 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,7 @@ pytest-regressions = "^2.4.0" pytest-freezer = "^0.4.6" pytest-xdist = "^3.1.0" # linter -ruff = ">=0.5.0,<0.8.0" +ruff = ">=0.5.0,<0.9.0" pre-commit = ">=2.18,<4.0" mypy = "^1.4" types-PyYAML = ">=5.4.3,<7.0.0" From bb2f8a79afc586f782f3728aa09665dcc509fbb3 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Tue, 26 Nov 2024 09:36:45 +0800 Subject: [PATCH 435/685] style: fix ruff warned style --- commitizen/changelog.py | 3 ++- commitizen/changelog_formats/restructuredtext.py | 4 ++-- commitizen/cli.py | 3 ++- commitizen/cz/__init__.py | 2 +- commitizen/cz/base.py | 3 ++- commitizen/defaults.py | 3 ++- commitizen/version_schemes.py | 3 +-- tests/conftest.py | 2 +- tests/providers/conftest.py | 2 +- 9 files changed, 14 insertions(+), 11 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index 32a66c47eb..7f300354b6 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -29,9 +29,10 @@ import re from collections import OrderedDict, defaultdict +from collections.abc import Iterable from dataclasses import dataclass from datetime import date -from typing import TYPE_CHECKING, Iterable +from typing import TYPE_CHECKING from jinja2 import ( BaseLoader, diff --git a/commitizen/changelog_formats/restructuredtext.py b/commitizen/changelog_formats/restructuredtext.py index 09d032400c..8bcf9a4a4f 100644 --- a/commitizen/changelog_formats/restructuredtext.py +++ b/commitizen/changelog_formats/restructuredtext.py @@ -3,7 +3,7 @@ import re import sys from itertools import zip_longest -from typing import IO, TYPE_CHECKING, Any, Tuple, Union +from typing import IO, TYPE_CHECKING, Any, Union from commitizen.changelog import Metadata @@ -18,7 +18,7 @@ # Can't use `|` operator and native type because of https://bugs.python.org/issue42233 only fixed in 3.10 -TitleKind: TypeAlias = Union[str, Tuple[str, str]] +TitleKind: TypeAlias = Union[str, tuple[str, str]] class RestructuredText(BaseFormat): diff --git a/commitizen/cli.py b/commitizen/cli.py index 1e0b1c6276..2ee7d41eba 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -3,11 +3,12 @@ import argparse import logging import sys +from collections.abc import Sequence from copy import deepcopy from functools import partial from pathlib import Path from types import TracebackType -from typing import Any, Sequence +from typing import Any import argcomplete from decli import cli diff --git a/commitizen/cz/__init__.py b/commitizen/cz/__init__.py index 04603a9ec4..cb17fe32cd 100644 --- a/commitizen/cz/__init__.py +++ b/commitizen/cz/__init__.py @@ -4,7 +4,7 @@ import pkgutil import sys import warnings -from typing import Iterable +from collections.abc import Iterable if sys.version_info >= (3, 10): from importlib import metadata diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index 70929e2f83..43455a74ca 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -1,7 +1,8 @@ from __future__ import annotations from abc import ABCMeta, abstractmethod -from typing import Any, Callable, Iterable, Protocol +from collections.abc import Iterable +from typing import Any, Callable, Protocol from jinja2 import BaseLoader, PackageLoader from prompt_toolkit.styles import Style, merge_styles diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 996c243196..d776e38d7a 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -2,7 +2,8 @@ import pathlib from collections import OrderedDict -from typing import Any, Iterable, MutableMapping, TypedDict +from collections.abc import Iterable, MutableMapping +from typing import Any, TypedDict # Type Questions = Iterable[MutableMapping[str, Any]] diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index 346287a065..554864e3bf 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -10,7 +10,6 @@ ClassVar, Literal, Protocol, - Type, cast, runtime_checkable, ) @@ -150,7 +149,7 @@ def bump( # With PEP 440 and SemVer semantic, Scheme is the type, Version is an instance Version: TypeAlias = VersionProtocol -VersionScheme: TypeAlias = Type[VersionProtocol] +VersionScheme: TypeAlias = type[VersionProtocol] class BaseVersion(_BaseVersion): diff --git a/tests/conftest.py b/tests/conftest.py index 95f3df3b20..1e6bc15f0c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,8 +3,8 @@ import os import re import tempfile +from collections.abc import Iterator from pathlib import Path -from typing import Iterator import pytest from pytest_mock import MockerFixture diff --git a/tests/providers/conftest.py b/tests/providers/conftest.py index b4432ca524..f73cdb72a5 100644 --- a/tests/providers/conftest.py +++ b/tests/providers/conftest.py @@ -1,8 +1,8 @@ from __future__ import annotations import os +from collections.abc import Iterator from pathlib import Path -from typing import Iterator import pytest From 42e639902a341d2db39c9fdd6dc2020240b2e7f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Nov 2024 01:54:32 +0000 Subject: [PATCH 436/685] build(deps-dev): bump pytest-cov from 5.0.0 to 6.0.0 Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 5.0.0 to 6.0.0. - [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v6.0.0) --- updated-dependencies: - dependency-name: pytest-cov dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 18 +++++++++--------- pyproject.toml | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/poetry.lock b/poetry.lock index 05909045e3..fec1cca1c4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1079,17 +1079,17 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments [[package]] name = "pytest-cov" -version = "5.0.0" +version = "6.0.0" description = "Pytest plugin for measuring coverage." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, - {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, + {file = "pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0"}, + {file = "pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35"}, ] [package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} +coverage = {version = ">=7.5", extras = ["toml"]} pytest = ">=4.6" [package.extras] @@ -1612,13 +1612,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.27.2" +version = "20.27.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ - {file = "virtualenv-20.27.2-py3-none-any.whl", hash = "sha256:a9ebd6adbf08c99583133b61e7491f8a4bc8d5fb34361abaa5ede3fff903a0f0"}, - {file = "virtualenv-20.27.2.tar.gz", hash = "sha256:99c89daeeaf15918880c73c99f41dc05eb39055e43231a4d76fc6b9fc2cf019d"}, + {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, + {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, ] [package.dependencies] @@ -1779,4 +1779,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.9" -content-hash = "7e04dd9aa4799765e49b74f26cd66a1d5a8cf334d9b3eabf35d89c4660d518c2" +content-hash = "67d0ae972c7570988ffe085a48e959f140575f959535bc087e0ea57dc74d83c3" diff --git a/pyproject.toml b/pyproject.toml index 2662b80040..3153af36ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,7 +58,7 @@ importlib_metadata = { version = ">=8.0.0,<9", python = "<3.10"} ipython = "^8.0" # test pytest = ">=7.2,<9.0" -pytest-cov = ">=4,<6" +pytest-cov = ">=4,<7" pytest-mock = "^3.10" pytest-regressions = "^2.4.0" pytest-freezer = "^0.4.6" From a6b84d101a202a8225d6c9824e6308021b0fb141 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Nov 2024 01:54:52 +0000 Subject: [PATCH 437/685] build(deps-dev): bump pre-commit from 3.8.0 to 4.0.1 Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.8.0 to 4.0.1. - [Release notes](https://github.com/pre-commit/pre-commit/releases) - [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) - [Commits](https://github.com/pre-commit/pre-commit/compare/v3.8.0...v4.0.1) --- updated-dependencies: - dependency-name: pre-commit dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 +++--- pyproject.toml | 77 +++++++++++++++++++++++--------------------------- 2 files changed, 39 insertions(+), 46 deletions(-) diff --git a/poetry.lock b/poetry.lock index fec1cca1c4..0f146aba25 100644 --- a/poetry.lock +++ b/poetry.lock @@ -968,13 +968,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "3.8.0" +version = "4.0.1" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" files = [ - {file = "pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"}, - {file = "pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af"}, + {file = "pre_commit-4.0.1-py2.py3-none-any.whl", hash = "sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878"}, + {file = "pre_commit-4.0.1.tar.gz", hash = "sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2"}, ] [package.dependencies] @@ -1779,4 +1779,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.9" -content-hash = "67d0ae972c7570988ffe085a48e959f140575f959535bc087e0ea57dc74d83c3" +content-hash = "36ac305c62f5139da82126a1b3bc71f86320af1abab5c473b3c0d21c81e214bd" diff --git a/pyproject.toml b/pyproject.toml index 3153af36ca..8737b86f28 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,9 +2,9 @@ version = "4.0.0" tag_format = "v$version" version_files = [ - "pyproject.toml:version", - "commitizen/__version__.py", - ".pre-commit-config.yaml:rev:.+Commitizen", + "pyproject.toml:version", + "commitizen/__version__.py", + ".pre-commit-config.yaml:rev:.+Commitizen", ] [tool.poetry] @@ -32,10 +32,7 @@ classifiers = [ "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", ] -packages = [ - {include = "commitizen"}, - {include = "commitizen/py.typed"}, -] +packages = [{ include = "commitizen" }, { include = "commitizen/py.typed" }] [tool.poetry.dependencies] python = ">=3.9" @@ -51,7 +48,7 @@ argcomplete = ">=1.12.1,<3.6" typing-extensions = { version = "^4.0.1", python = "<3.11" } charset-normalizer = ">=2.1.0,<4" # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility -importlib_metadata = { version = ">=8.0.0,<9", python = "<3.10"} +importlib_metadata = { version = ">=8.0.0,<9", python = "<3.10" } [tool.poetry.group.dev.dependencies] # dev tool @@ -65,7 +62,7 @@ pytest-freezer = "^0.4.6" pytest-xdist = "^3.1.0" # linter ruff = ">=0.5.0,<0.9.0" -pre-commit = ">=2.18,<4.0" +pre-commit = ">=2.18,<5.0" mypy = "^1.4" types-PyYAML = ">=5.4.3,<7.0.0" types-termcolor = "^0.1.1" @@ -108,33 +105,33 @@ semver = "commitizen.version_schemes:SemVer" semver2 = "commitizen.version_schemes:SemVer2" [tool.coverage] - [tool.coverage.report] - show_missing = true - exclude_lines = [ - # Have to re-enable the standard pragma - 'pragma: no cover', - - # Don't complain about missing debug-only code: - 'def __repr__', - 'if self\.debug', - - # Don't complain if tests don't hit defensive assertion code: - 'raise AssertionError', - 'raise NotImplementedError', - - # Don't complain if non-runnable code isn't run: - 'if 0:', - 'if __name__ == .__main__.:', - 'if TYPE_CHECKING:', - ] - omit = [ - 'env/*', - 'venv/*', - '.venv/*', - '*/virtualenv/*', - '*/virtualenvs/*', - '*/tests/*', - ] +[tool.coverage.report] +show_missing = true +exclude_lines = [ + # Have to re-enable the standard pragma + 'pragma: no cover', + + # Don't complain about missing debug-only code: + 'def __repr__', + 'if self\.debug', + + # Don't complain if tests don't hit defensive assertion code: + 'raise AssertionError', + 'raise NotImplementedError', + + # Don't complain if non-runnable code isn't run: + 'if 0:', + 'if __name__ == .__main__.:', + 'if TYPE_CHECKING:', +] +omit = [ + 'env/*', + 'venv/*', + '.venv/*', + '*/virtualenv/*', + '*/virtualenvs/*', + '*/tests/*', +] [build-system] requires = ["poetry_core>=1.0.0"] @@ -157,11 +154,7 @@ select = [ # isort "I", ] -ignore = [ - "E501", - "D1", - "D415" -] +ignore = ["E501", "D1", "D415"] [tool.ruff.lint.isort] known-first-party = ["commitizen", "tests"] @@ -179,7 +172,7 @@ warn_unused_ignores = true warn_unused_configs = true [[tool.mypy.overrides]] -module = "py.*" # Legacy pytest dependencies +module = "py.*" # Legacy pytest dependencies ignore_missing_imports = true [tool.codespell] From 69403dd9ccacc3e7bdce3a43d6e77a80ab41be41 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 01:36:39 +0000 Subject: [PATCH 438/685] build(deps-dev): bump mkdocs-material from 9.5.46 to 9.5.47 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.46 to 9.5.47. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.46...9.5.47) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0f146aba25..116dfbaa3b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "argcomplete" @@ -756,13 +756,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.46" +version = "9.5.47" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.46-py3-none-any.whl", hash = "sha256:98f0a2039c62e551a68aad0791a8d41324ff90c03a6e6cea381a384b84908b83"}, - {file = "mkdocs_material-9.5.46.tar.gz", hash = "sha256:ae2043f4238e572f9a40e0b577f50400d6fc31e2fef8ea141800aebf3bd273d7"}, + {file = "mkdocs_material-9.5.47-py3-none-any.whl", hash = "sha256:53fb9c9624e7865da6ec807d116cd7be24b3cb36ab31b1d1d1a9af58c56009a2"}, + {file = "mkdocs_material-9.5.47.tar.gz", hash = "sha256:fc3b7a8e00ad896660bd3a5cc12ca0cb28bdc2bcbe2a946b5714c23ac91b0ede"}, ] [package.dependencies] From 6436b155b735c6f6f5a40ff99b4beee1eb0481b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 01:36:59 +0000 Subject: [PATCH 439/685] build(deps-dev): bump pytest from 8.3.3 to 8.3.4 Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.3.3 to 8.3.4. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.3.3...8.3.4) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 116dfbaa3b..348b686cac 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1057,13 +1057,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pytest" -version = "8.3.3" +version = "8.3.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, - {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, + {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, + {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, ] [package.dependencies] From 619575faf2724dc6f28214cc7d3264fc2e3717e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 01:37:29 +0000 Subject: [PATCH 440/685] build(deps-dev): bump ruff from 0.8.0 to 0.8.1 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.8.0 to 0.8.1. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.8.0...0.8.1) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 348b686cac..16ef1b4a9c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1432,29 +1432,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.8.0" +version = "0.8.1" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.8.0-py3-none-linux_armv6l.whl", hash = "sha256:fcb1bf2cc6706adae9d79c8d86478677e3bbd4ced796ccad106fd4776d395fea"}, - {file = "ruff-0.8.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:295bb4c02d58ff2ef4378a1870c20af30723013f441c9d1637a008baaf928c8b"}, - {file = "ruff-0.8.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7b1f1c76b47c18fa92ee78b60d2d20d7e866c55ee603e7d19c1e991fad933a9a"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb0d4f250a7711b67ad513fde67e8870109e5ce590a801c3722580fe98c33a99"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e55cce9aa93c5d0d4e3937e47b169035c7e91c8655b0974e61bb79cf398d49c"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f4cd64916d8e732ce6b87f3f5296a8942d285bbbc161acee7fe561134af64f9"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c5c1466be2a2ebdf7c5450dd5d980cc87c8ba6976fb82582fea18823da6fa362"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2dabfd05b96b7b8f2da00d53c514eea842bff83e41e1cceb08ae1966254a51df"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:facebdfe5a5af6b1588a1d26d170635ead6892d0e314477e80256ef4a8470cf3"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87a8e86bae0dbd749c815211ca11e3a7bd559b9710746c559ed63106d382bd9c"}, - {file = "ruff-0.8.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:85e654f0ded7befe2d61eeaf3d3b1e4ef3894469cd664ffa85006c7720f1e4a2"}, - {file = "ruff-0.8.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:83a55679c4cb449fa527b8497cadf54f076603cc36779b2170b24f704171ce70"}, - {file = "ruff-0.8.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:812e2052121634cf13cd6fddf0c1871d0ead1aad40a1a258753c04c18bb71bbd"}, - {file = "ruff-0.8.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:780d5d8523c04202184405e60c98d7595bdb498c3c6abba3b6d4cdf2ca2af426"}, - {file = "ruff-0.8.0-py3-none-win32.whl", hash = "sha256:5fdb6efecc3eb60bba5819679466471fd7d13c53487df7248d6e27146e985468"}, - {file = "ruff-0.8.0-py3-none-win_amd64.whl", hash = "sha256:582891c57b96228d146725975fbb942e1f30a0c4ba19722e692ca3eb25cc9b4f"}, - {file = "ruff-0.8.0-py3-none-win_arm64.whl", hash = "sha256:ba93e6294e9a737cd726b74b09a6972e36bb511f9a102f1d9a7e1ce94dd206a6"}, - {file = "ruff-0.8.0.tar.gz", hash = "sha256:a7ccfe6331bf8c8dad715753e157457faf7351c2b69f62f32c165c2dbcbacd44"}, + {file = "ruff-0.8.1-py3-none-linux_armv6l.whl", hash = "sha256:fae0805bd514066f20309f6742f6ee7904a773eb9e6c17c45d6b1600ca65c9b5"}, + {file = "ruff-0.8.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b8a4f7385c2285c30f34b200ca5511fcc865f17578383db154e098150ce0a087"}, + {file = "ruff-0.8.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:cd054486da0c53e41e0086e1730eb77d1f698154f910e0cd9e0d64274979a209"}, + {file = "ruff-0.8.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2029b8c22da147c50ae577e621a5bfbc5d1fed75d86af53643d7a7aee1d23871"}, + {file = "ruff-0.8.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2666520828dee7dfc7e47ee4ea0d928f40de72056d929a7c5292d95071d881d1"}, + {file = "ruff-0.8.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:333c57013ef8c97a53892aa56042831c372e0bb1785ab7026187b7abd0135ad5"}, + {file = "ruff-0.8.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:288326162804f34088ac007139488dcb43de590a5ccfec3166396530b58fb89d"}, + {file = "ruff-0.8.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b12c39b9448632284561cbf4191aa1b005882acbc81900ffa9f9f471c8ff7e26"}, + {file = "ruff-0.8.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:364e6674450cbac8e998f7b30639040c99d81dfb5bbc6dfad69bc7a8f916b3d1"}, + {file = "ruff-0.8.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b22346f845fec132aa39cd29acb94451d030c10874408dbf776af3aaeb53284c"}, + {file = "ruff-0.8.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b2f2f7a7e7648a2bfe6ead4e0a16745db956da0e3a231ad443d2a66a105c04fa"}, + {file = "ruff-0.8.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:adf314fc458374c25c5c4a4a9270c3e8a6a807b1bec018cfa2813d6546215540"}, + {file = "ruff-0.8.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a885d68342a231b5ba4d30b8c6e1b1ee3a65cf37e3d29b3c74069cdf1ee1e3c9"}, + {file = "ruff-0.8.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d2c16e3508c8cc73e96aa5127d0df8913d2290098f776416a4b157657bee44c5"}, + {file = "ruff-0.8.1-py3-none-win32.whl", hash = "sha256:93335cd7c0eaedb44882d75a7acb7df4b77cd7cd0d2255c93b28791716e81790"}, + {file = "ruff-0.8.1-py3-none-win_amd64.whl", hash = "sha256:2954cdbe8dfd8ab359d4a30cd971b589d335a44d444b6ca2cb3d1da21b75e4b6"}, + {file = "ruff-0.8.1-py3-none-win_arm64.whl", hash = "sha256:55873cc1a473e5ac129d15eccb3c008c096b94809d693fc7053f588b67822737"}, + {file = "ruff-0.8.1.tar.gz", hash = "sha256:3583db9a6450364ed5ca3f3b4225958b24f78178908d5c4bc0f46251ccca898f"}, ] [[package]] From 26152c5af043143e47a0574d3b59621e535e1952 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 01:43:14 +0000 Subject: [PATCH 441/685] build(deps-dev): bump ruff from 0.8.1 to 0.8.2 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.8.1 to 0.8.2. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.8.1...0.8.2) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 16ef1b4a9c..973f01720b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1432,29 +1432,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.8.1" +version = "0.8.2" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.8.1-py3-none-linux_armv6l.whl", hash = "sha256:fae0805bd514066f20309f6742f6ee7904a773eb9e6c17c45d6b1600ca65c9b5"}, - {file = "ruff-0.8.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b8a4f7385c2285c30f34b200ca5511fcc865f17578383db154e098150ce0a087"}, - {file = "ruff-0.8.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:cd054486da0c53e41e0086e1730eb77d1f698154f910e0cd9e0d64274979a209"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2029b8c22da147c50ae577e621a5bfbc5d1fed75d86af53643d7a7aee1d23871"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2666520828dee7dfc7e47ee4ea0d928f40de72056d929a7c5292d95071d881d1"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:333c57013ef8c97a53892aa56042831c372e0bb1785ab7026187b7abd0135ad5"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:288326162804f34088ac007139488dcb43de590a5ccfec3166396530b58fb89d"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b12c39b9448632284561cbf4191aa1b005882acbc81900ffa9f9f471c8ff7e26"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:364e6674450cbac8e998f7b30639040c99d81dfb5bbc6dfad69bc7a8f916b3d1"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b22346f845fec132aa39cd29acb94451d030c10874408dbf776af3aaeb53284c"}, - {file = "ruff-0.8.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b2f2f7a7e7648a2bfe6ead4e0a16745db956da0e3a231ad443d2a66a105c04fa"}, - {file = "ruff-0.8.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:adf314fc458374c25c5c4a4a9270c3e8a6a807b1bec018cfa2813d6546215540"}, - {file = "ruff-0.8.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a885d68342a231b5ba4d30b8c6e1b1ee3a65cf37e3d29b3c74069cdf1ee1e3c9"}, - {file = "ruff-0.8.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d2c16e3508c8cc73e96aa5127d0df8913d2290098f776416a4b157657bee44c5"}, - {file = "ruff-0.8.1-py3-none-win32.whl", hash = "sha256:93335cd7c0eaedb44882d75a7acb7df4b77cd7cd0d2255c93b28791716e81790"}, - {file = "ruff-0.8.1-py3-none-win_amd64.whl", hash = "sha256:2954cdbe8dfd8ab359d4a30cd971b589d335a44d444b6ca2cb3d1da21b75e4b6"}, - {file = "ruff-0.8.1-py3-none-win_arm64.whl", hash = "sha256:55873cc1a473e5ac129d15eccb3c008c096b94809d693fc7053f588b67822737"}, - {file = "ruff-0.8.1.tar.gz", hash = "sha256:3583db9a6450364ed5ca3f3b4225958b24f78178908d5c4bc0f46251ccca898f"}, + {file = "ruff-0.8.2-py3-none-linux_armv6l.whl", hash = "sha256:c49ab4da37e7c457105aadfd2725e24305ff9bc908487a9bf8d548c6dad8bb3d"}, + {file = "ruff-0.8.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ec016beb69ac16be416c435828be702ee694c0d722505f9c1f35e1b9c0cc1bf5"}, + {file = "ruff-0.8.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f05cdf8d050b30e2ba55c9b09330b51f9f97d36d4673213679b965d25a785f3c"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60f578c11feb1d3d257b2fb043ddb47501ab4816e7e221fbb0077f0d5d4e7b6f"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cbd5cf9b0ae8f30eebc7b360171bd50f59ab29d39f06a670b3e4501a36ba5897"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b402ddee3d777683de60ff76da801fa7e5e8a71038f57ee53e903afbcefdaa58"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:705832cd7d85605cb7858d8a13d75993c8f3ef1397b0831289109e953d833d29"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32096b41aaf7a5cc095fa45b4167b890e4c8d3fd217603f3634c92a541de7248"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e769083da9439508833cfc7c23e351e1809e67f47c50248250ce1ac52c21fb93"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fe716592ae8a376c2673fdfc1f5c0c193a6d0411f90a496863c99cd9e2ae25d"}, + {file = "ruff-0.8.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:81c148825277e737493242b44c5388a300584d73d5774defa9245aaef55448b0"}, + {file = "ruff-0.8.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d261d7850c8367704874847d95febc698a950bf061c9475d4a8b7689adc4f7fa"}, + {file = "ruff-0.8.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1ca4e3a87496dc07d2427b7dd7ffa88a1e597c28dad65ae6433ecb9f2e4f022f"}, + {file = "ruff-0.8.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:729850feed82ef2440aa27946ab39c18cb4a8889c1128a6d589ffa028ddcfc22"}, + {file = "ruff-0.8.2-py3-none-win32.whl", hash = "sha256:ac42caaa0411d6a7d9594363294416e0e48fc1279e1b0e948391695db2b3d5b1"}, + {file = "ruff-0.8.2-py3-none-win_amd64.whl", hash = "sha256:2aae99ec70abf43372612a838d97bfe77d45146254568d94926e8ed5bbb409ea"}, + {file = "ruff-0.8.2-py3-none-win_arm64.whl", hash = "sha256:fb88e2a506b70cfbc2de6fae6681c4f944f7dd5f2fe87233a7233d888bad73e8"}, + {file = "ruff-0.8.2.tar.gz", hash = "sha256:b84f4f414dda8ac7f75075c1fa0b905ac0ff25361f42e6d5da681a465e0f78e5"}, ] [[package]] From 636a0696ea1f76acff94eca16d945845907ee581 Mon Sep 17 00:00:00 2001 From: Adrian DC <radian.dc@gmail.com> Date: Sun, 25 Aug 2024 03:12:42 +0200 Subject: [PATCH 442/685] feat(commit): allow '-- --allow-empty' to create empty commits Signed-off-by: Adrian DC <radian.dc@gmail.com> --- commitizen/commands/commit.py | 8 +++-- tests/commands/test_commit_command.py | 49 +++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 9b13a020b6..abecb3b3ca 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -93,6 +93,10 @@ def manual_edit(self, message: str) -> str: return message def __call__(self): + extra_args: str = self.arguments.get("extra_cli_args", "") + + allow_empty: bool = "--allow-empty" in extra_args + dry_run: bool = self.arguments.get("dry_run") write_message_to_file: bool = self.arguments.get("write_message_to_file") manual_edit: bool = self.arguments.get("edit") @@ -101,7 +105,7 @@ def __call__(self): if is_all: c = git.add("-u") - if git.is_staging_clean() and not dry_run: + if git.is_staging_clean() and not (dry_run or allow_empty): raise NothingToCommitError("No files added to staging!") if write_message_to_file is not None and write_message_to_file.is_dir(): @@ -137,8 +141,6 @@ def __call__(self): always_signoff: bool = self.config.settings["always_signoff"] signoff: bool = self.arguments.get("signoff") - extra_args = self.arguments.get("extra_cli_args", "") - if signoff: out.warn( "signoff mechanic is deprecated, please use `cz commit -- -s` instead." diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index 85959abe33..55751f6902 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -324,6 +324,55 @@ def test_commit_when_nothing_to_commit(config, mocker: MockFixture): assert "No files added to staging!" in str(excinfo.value) +@pytest.mark.usefixtures("staging_is_clean") +def test_commit_with_allow_empty(config, mocker: MockFixture): + prompt_mock = mocker.patch("questionary.prompt") + prompt_mock.return_value = { + "prefix": "feat", + "subject": "user created", + "scope": "", + "is_breaking_change": False, + "body": "closes #21", + "footer": "", + } + + commit_mock = mocker.patch("commitizen.git.commit") + commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) + success_mock = mocker.patch("commitizen.out.success") + + commands.Commit(config, {"extra_cli_args": "--allow-empty"})() + + commit_mock.assert_called_with( + "feat: user created\n\ncloses #21", args="--allow-empty" + ) + success_mock.assert_called_once() + + +@pytest.mark.usefixtures("staging_is_clean") +def test_commit_with_signoff_and_allow_empty(config, mocker: MockFixture): + prompt_mock = mocker.patch("questionary.prompt") + prompt_mock.return_value = { + "prefix": "feat", + "subject": "user created", + "scope": "", + "is_breaking_change": False, + "body": "closes #21", + "footer": "", + } + + commit_mock = mocker.patch("commitizen.git.commit") + commit_mock.return_value = cmd.Command("success", "", b"", b"", 0) + success_mock = mocker.patch("commitizen.out.success") + + config.settings["always_signoff"] = True + commands.Commit(config, {"extra_cli_args": "--allow-empty"})() + + commit_mock.assert_called_with( + "feat: user created\n\ncloses #21", args="--allow-empty -s" + ) + success_mock.assert_called_once() + + @pytest.mark.usefixtures("staging_is_clean") def test_commit_when_customized_expected_raised(config, mocker: MockFixture, capsys): _err = ValueError() From 27499d727f5ceff802bda34bbda314644824ce06 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 15:13:16 +0000 Subject: [PATCH 443/685] =?UTF-8?q?bump:=20version=204.0.0=20=E2=86=92=204?= =?UTF-8?q?.1.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 52049e967f..986b63f875 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.0.0 # automatically updated by Commitizen + rev: v4.1.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index c6556ab016..858f7d7181 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v4.1.0 (2024-12-06) + +### Feat + +- **commit**: allow '-- --allow-empty' to create empty commits + ## v4.0.0 (2024-11-26) ## v3.31.0 (2024-11-16) diff --git a/commitizen/__version__.py b/commitizen/__version__.py index ce1305bf4e..7039708762 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.0.0" +__version__ = "4.1.0" diff --git a/pyproject.toml b/pyproject.toml index 8737b86f28..e1b884f479 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "4.0.0" +version = "4.1.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "4.0.0" +version = "4.1.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 2eda7dd90b40498f61ca63009a5f907ee56513c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 01:34:36 +0000 Subject: [PATCH 444/685] build(deps-dev): bump types-python-dateutil Bumps [types-python-dateutil](https://github.com/python/typeshed) from 2.9.0.20241003 to 2.9.0.20241206. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-python-dateutil dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 973f01720b..78da53d281 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1551,13 +1551,13 @@ files = [ [[package]] name = "types-python-dateutil" -version = "2.9.0.20241003" +version = "2.9.0.20241206" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.9.0.20241003.tar.gz", hash = "sha256:58cb85449b2a56d6684e41aeefb4c4280631246a0da1a719bdbe6f3fb0317446"}, - {file = "types_python_dateutil-2.9.0.20241003-py3-none-any.whl", hash = "sha256:250e1d8e80e7bbc3a6c99b907762711d1a1cdd00e978ad39cb5940f6f0a87f3d"}, + {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, + {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, ] [[package]] From ec9e911a690aa7b11ceae3d0b6c63ae9b6736825 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 01:34:55 +0000 Subject: [PATCH 445/685] build(deps): bump argcomplete from 3.5.1 to 3.5.2 Bumps [argcomplete](https://github.com/kislyuk/argcomplete) from 3.5.1 to 3.5.2. - [Release notes](https://github.com/kislyuk/argcomplete/releases) - [Changelog](https://github.com/kislyuk/argcomplete/blob/develop/Changes.rst) - [Commits](https://github.com/kislyuk/argcomplete/compare/v3.5.1...v3.5.2) --- updated-dependencies: - dependency-name: argcomplete dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 78da53d281..7cd09373f8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,13 +2,13 @@ [[package]] name = "argcomplete" -version = "3.5.1" +version = "3.5.2" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.5.1-py3-none-any.whl", hash = "sha256:1a1d148bdaa3e3b93454900163403df41448a248af01b6e849edc5ac08e6c363"}, - {file = "argcomplete-3.5.1.tar.gz", hash = "sha256:eb1ee355aa2557bd3d0145de7b06b2a45b0ce461e1e7813f5d066039ab4177b4"}, + {file = "argcomplete-3.5.2-py3-none-any.whl", hash = "sha256:036d020d79048a5d525bc63880d7a4b8d1668566b8a76daf1144c0bbe0f63472"}, + {file = "argcomplete-3.5.2.tar.gz", hash = "sha256:23146ed7ac4403b70bd6026402468942ceba34a6732255b9edf5b7354f68a6bb"}, ] [package.extras] From a60407addee791eef67cca7e6ca91b9bea565de0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 14 Dec 2024 20:43:24 +0100 Subject: [PATCH 446/685] build(deps-dev): bump pytest-freezer from 0.4.8 to 0.4.9 (#1311) Bumps [pytest-freezer](https://github.com/pytest-dev/pytest-freezer) from 0.4.8 to 0.4.9. - [Release notes](https://github.com/pytest-dev/pytest-freezer/releases) - [Commits](https://github.com/pytest-dev/pytest-freezer/compare/0.4.8...0.4.9) --- updated-dependencies: - dependency-name: pytest-freezer dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7cd09373f8..9a384ddc37 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "argcomplete" @@ -1111,17 +1111,17 @@ pytest = ">=5.0" [[package]] name = "pytest-freezer" -version = "0.4.8" +version = "0.4.9" description = "Pytest plugin providing a fixture interface for spulec/freezegun" optional = false -python-versions = ">= 3.6" +python-versions = ">=3.6" files = [ - {file = "pytest_freezer-0.4.8-py3-none-any.whl", hash = "sha256:644ce7ddb8ba52b92a1df0a80a699bad2b93514c55cf92e9f2517b68ebe74814"}, - {file = "pytest_freezer-0.4.8.tar.gz", hash = "sha256:8ee2f724b3ff3540523fa355958a22e6f4c1c819928b78a7a183ae4248ce6ee6"}, + {file = "pytest_freezer-0.4.9-py3-none-any.whl", hash = "sha256:8b6c50523b7d4aec4590b52bfa5ff766d772ce506e2bf4846c88041ea9ccae59"}, + {file = "pytest_freezer-0.4.9.tar.gz", hash = "sha256:21bf16bc9cc46bf98f94382c4b5c3c389be7056ff0be33029111ae11b3f1c82a"}, ] [package.dependencies] -freezegun = ">=1.0" +freezegun = ">=1.1" pytest = ">=3.6" [[package]] From 166e634a4e29e6450d103249b54eff16c3d075ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 14 Dec 2024 20:44:15 +0100 Subject: [PATCH 447/685] build(deps-dev): bump ruff from 0.8.2 to 0.8.3 (#1310) Bumps [ruff](https://github.com/astral-sh/ruff) from 0.8.2 to 0.8.3. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.8.2...0.8.3) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9a384ddc37..2f571b012d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1432,29 +1432,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.8.2" +version = "0.8.3" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.8.2-py3-none-linux_armv6l.whl", hash = "sha256:c49ab4da37e7c457105aadfd2725e24305ff9bc908487a9bf8d548c6dad8bb3d"}, - {file = "ruff-0.8.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ec016beb69ac16be416c435828be702ee694c0d722505f9c1f35e1b9c0cc1bf5"}, - {file = "ruff-0.8.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f05cdf8d050b30e2ba55c9b09330b51f9f97d36d4673213679b965d25a785f3c"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60f578c11feb1d3d257b2fb043ddb47501ab4816e7e221fbb0077f0d5d4e7b6f"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cbd5cf9b0ae8f30eebc7b360171bd50f59ab29d39f06a670b3e4501a36ba5897"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b402ddee3d777683de60ff76da801fa7e5e8a71038f57ee53e903afbcefdaa58"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:705832cd7d85605cb7858d8a13d75993c8f3ef1397b0831289109e953d833d29"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32096b41aaf7a5cc095fa45b4167b890e4c8d3fd217603f3634c92a541de7248"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e769083da9439508833cfc7c23e351e1809e67f47c50248250ce1ac52c21fb93"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fe716592ae8a376c2673fdfc1f5c0c193a6d0411f90a496863c99cd9e2ae25d"}, - {file = "ruff-0.8.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:81c148825277e737493242b44c5388a300584d73d5774defa9245aaef55448b0"}, - {file = "ruff-0.8.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d261d7850c8367704874847d95febc698a950bf061c9475d4a8b7689adc4f7fa"}, - {file = "ruff-0.8.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1ca4e3a87496dc07d2427b7dd7ffa88a1e597c28dad65ae6433ecb9f2e4f022f"}, - {file = "ruff-0.8.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:729850feed82ef2440aa27946ab39c18cb4a8889c1128a6d589ffa028ddcfc22"}, - {file = "ruff-0.8.2-py3-none-win32.whl", hash = "sha256:ac42caaa0411d6a7d9594363294416e0e48fc1279e1b0e948391695db2b3d5b1"}, - {file = "ruff-0.8.2-py3-none-win_amd64.whl", hash = "sha256:2aae99ec70abf43372612a838d97bfe77d45146254568d94926e8ed5bbb409ea"}, - {file = "ruff-0.8.2-py3-none-win_arm64.whl", hash = "sha256:fb88e2a506b70cfbc2de6fae6681c4f944f7dd5f2fe87233a7233d888bad73e8"}, - {file = "ruff-0.8.2.tar.gz", hash = "sha256:b84f4f414dda8ac7f75075c1fa0b905ac0ff25361f42e6d5da681a465e0f78e5"}, + {file = "ruff-0.8.3-py3-none-linux_armv6l.whl", hash = "sha256:8d5d273ffffff0acd3db5bf626d4b131aa5a5ada1276126231c4174543ce20d6"}, + {file = "ruff-0.8.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e4d66a21de39f15c9757d00c50c8cdd20ac84f55684ca56def7891a025d7e939"}, + {file = "ruff-0.8.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c356e770811858bd20832af696ff6c7e884701115094f427b64b25093d6d932d"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c0a60a825e3e177116c84009d5ebaa90cf40dfab56e1358d1df4e29a9a14b13"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:75fb782f4db39501210ac093c79c3de581d306624575eddd7e4e13747e61ba18"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f26bc76a133ecb09a38b7868737eded6941b70a6d34ef53a4027e83913b6502"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:01b14b2f72a37390c1b13477c1c02d53184f728be2f3ffc3ace5b44e9e87b90d"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53babd6e63e31f4e96ec95ea0d962298f9f0d9cc5990a1bbb023a6baf2503a82"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ae441ce4cf925b7f363d33cd6570c51435972d697e3e58928973994e56e1452"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7c65bc0cadce32255e93c57d57ecc2cca23149edd52714c0c5d6fa11ec328cd"}, + {file = "ruff-0.8.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5be450bb18f23f0edc5a4e5585c17a56ba88920d598f04a06bd9fd76d324cb20"}, + {file = "ruff-0.8.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8faeae3827eaa77f5721f09b9472a18c749139c891dbc17f45e72d8f2ca1f8fc"}, + {file = "ruff-0.8.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:db503486e1cf074b9808403991663e4277f5c664d3fe237ee0d994d1305bb060"}, + {file = "ruff-0.8.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6567be9fb62fbd7a099209257fef4ad2c3153b60579818b31a23c886ed4147ea"}, + {file = "ruff-0.8.3-py3-none-win32.whl", hash = "sha256:19048f2f878f3ee4583fc6cb23fb636e48c2635e30fb2022b3a1cd293402f964"}, + {file = "ruff-0.8.3-py3-none-win_amd64.whl", hash = "sha256:f7df94f57d7418fa7c3ffb650757e0c2b96cf2501a0b192c18e4fb5571dfada9"}, + {file = "ruff-0.8.3-py3-none-win_arm64.whl", hash = "sha256:fe2756edf68ea79707c8d68b78ca9a58ed9af22e430430491ee03e718b5e4936"}, + {file = "ruff-0.8.3.tar.gz", hash = "sha256:5e7558304353b84279042fc584a4f4cb8a07ae79b2bf3da1a7551d960b5626d3"}, ] [[package]] From 069c503eb56cf1f07eb1eead6446511bc05fd8e0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 14 Dec 2024 20:44:58 +0100 Subject: [PATCH 448/685] build(deps-dev): bump mkdocs-material from 9.5.47 to 9.5.48 (#1309) Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.47 to 9.5.48. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.47...9.5.48) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2f571b012d..23a33ed85b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -756,13 +756,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.47" +version = "9.5.48" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.47-py3-none-any.whl", hash = "sha256:53fb9c9624e7865da6ec807d116cd7be24b3cb36ab31b1d1d1a9af58c56009a2"}, - {file = "mkdocs_material-9.5.47.tar.gz", hash = "sha256:fc3b7a8e00ad896660bd3a5cc12ca0cb28bdc2bcbe2a946b5714c23ac91b0ede"}, + {file = "mkdocs_material-9.5.48-py3-none-any.whl", hash = "sha256:b695c998f4b939ce748adbc0d3bff73fa886a670ece948cf27818fa115dc16f8"}, + {file = "mkdocs_material-9.5.48.tar.gz", hash = "sha256:a582531e8b34f4c7ed38c29d5c44763053832cf2a32f7409567e0c74749a47db"}, ] [package.dependencies] From c1ec4d9b6efa2661e5298aa1930323e096de4820 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 22 Dec 2024 19:11:07 +0100 Subject: [PATCH 449/685] build(deps-dev): bump ruff from 0.8.3 to 0.8.4 (#1314) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 23a33ed85b..a302b921b5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1432,29 +1432,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.8.3" +version = "0.8.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.8.3-py3-none-linux_armv6l.whl", hash = "sha256:8d5d273ffffff0acd3db5bf626d4b131aa5a5ada1276126231c4174543ce20d6"}, - {file = "ruff-0.8.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e4d66a21de39f15c9757d00c50c8cdd20ac84f55684ca56def7891a025d7e939"}, - {file = "ruff-0.8.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c356e770811858bd20832af696ff6c7e884701115094f427b64b25093d6d932d"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c0a60a825e3e177116c84009d5ebaa90cf40dfab56e1358d1df4e29a9a14b13"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:75fb782f4db39501210ac093c79c3de581d306624575eddd7e4e13747e61ba18"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f26bc76a133ecb09a38b7868737eded6941b70a6d34ef53a4027e83913b6502"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:01b14b2f72a37390c1b13477c1c02d53184f728be2f3ffc3ace5b44e9e87b90d"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53babd6e63e31f4e96ec95ea0d962298f9f0d9cc5990a1bbb023a6baf2503a82"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ae441ce4cf925b7f363d33cd6570c51435972d697e3e58928973994e56e1452"}, - {file = "ruff-0.8.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7c65bc0cadce32255e93c57d57ecc2cca23149edd52714c0c5d6fa11ec328cd"}, - {file = "ruff-0.8.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5be450bb18f23f0edc5a4e5585c17a56ba88920d598f04a06bd9fd76d324cb20"}, - {file = "ruff-0.8.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8faeae3827eaa77f5721f09b9472a18c749139c891dbc17f45e72d8f2ca1f8fc"}, - {file = "ruff-0.8.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:db503486e1cf074b9808403991663e4277f5c664d3fe237ee0d994d1305bb060"}, - {file = "ruff-0.8.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6567be9fb62fbd7a099209257fef4ad2c3153b60579818b31a23c886ed4147ea"}, - {file = "ruff-0.8.3-py3-none-win32.whl", hash = "sha256:19048f2f878f3ee4583fc6cb23fb636e48c2635e30fb2022b3a1cd293402f964"}, - {file = "ruff-0.8.3-py3-none-win_amd64.whl", hash = "sha256:f7df94f57d7418fa7c3ffb650757e0c2b96cf2501a0b192c18e4fb5571dfada9"}, - {file = "ruff-0.8.3-py3-none-win_arm64.whl", hash = "sha256:fe2756edf68ea79707c8d68b78ca9a58ed9af22e430430491ee03e718b5e4936"}, - {file = "ruff-0.8.3.tar.gz", hash = "sha256:5e7558304353b84279042fc584a4f4cb8a07ae79b2bf3da1a7551d960b5626d3"}, + {file = "ruff-0.8.4-py3-none-linux_armv6l.whl", hash = "sha256:58072f0c06080276804c6a4e21a9045a706584a958e644353603d36ca1eb8a60"}, + {file = "ruff-0.8.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ffb60904651c00a1e0b8df594591770018a0f04587f7deeb3838344fe3adabac"}, + {file = "ruff-0.8.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6ddf5d654ac0d44389f6bf05cee4caeefc3132a64b58ea46738111d687352296"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e248b1f0fa2749edd3350a2a342b67b43a2627434c059a063418e3d375cfe643"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf197b98ed86e417412ee3b6c893f44c8864f816451441483253d5ff22c0e81e"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c41319b85faa3aadd4d30cb1cffdd9ac6b89704ff79f7664b853785b48eccdf3"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:9f8402b7c4f96463f135e936d9ab77b65711fcd5d72e5d67597b543bbb43cf3f"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4e56b3baa9c23d324ead112a4fdf20db9a3f8f29eeabff1355114dd96014604"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:736272574e97157f7edbbb43b1d046125fce9e7d8d583d5d65d0c9bf2c15addf"}, + {file = "ruff-0.8.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5fe710ab6061592521f902fca7ebcb9fabd27bc7c57c764298b1c1f15fff720"}, + {file = "ruff-0.8.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:13e9ec6d6b55f6da412d59953d65d66e760d583dd3c1c72bf1f26435b5bfdbae"}, + {file = "ruff-0.8.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:97d9aefef725348ad77d6db98b726cfdb075a40b936c7984088804dfd38268a7"}, + {file = "ruff-0.8.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ab78e33325a6f5374e04c2ab924a3367d69a0da36f8c9cb6b894a62017506111"}, + {file = "ruff-0.8.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8ef06f66f4a05c3ddbc9121a8b0cecccd92c5bf3dd43b5472ffe40b8ca10f0f8"}, + {file = "ruff-0.8.4-py3-none-win32.whl", hash = "sha256:552fb6d861320958ca5e15f28b20a3d071aa83b93caee33a87b471f99a6c0835"}, + {file = "ruff-0.8.4-py3-none-win_amd64.whl", hash = "sha256:f21a1143776f8656d7f364bd264a9d60f01b7f52243fbe90e7670c0dfe0cf65d"}, + {file = "ruff-0.8.4-py3-none-win_arm64.whl", hash = "sha256:9183dd615d8df50defa8b1d9a074053891ba39025cf5ae88e8bcb52edcc4bf08"}, + {file = "ruff-0.8.4.tar.gz", hash = "sha256:0d5f89f254836799af1615798caa5f80b7f935d7a670fad66c5007928e57ace8"}, ] [[package]] From 32271c143d711b77d26a1e7208701aafc5bfaabe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 22 Dec 2024 19:11:59 +0100 Subject: [PATCH 450/685] build(deps-dev): bump pytest-regressions from 2.5.0 to 2.6.0 (#1313) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index a302b921b5..fcc4896ff1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1143,13 +1143,13 @@ dev = ["pre-commit", "pytest-asyncio", "tox"] [[package]] name = "pytest-regressions" -version = "2.5.0" +version = "2.6.0" description = "Easy to use fixtures to write regression tests." optional = false python-versions = ">=3.8" files = [ - {file = "pytest-regressions-2.5.0.tar.gz", hash = "sha256:818c7884c1cff3babf89eebb02cbc27b307856b1985427c24d52cb812a106fd9"}, - {file = "pytest_regressions-2.5.0-py3-none-any.whl", hash = "sha256:8c4e5c4037325fdb0825bc1fdcb75e17e03adf3407049f0cb704bb996d496255"}, + {file = "pytest_regressions-2.6.0-py3-none-any.whl", hash = "sha256:5c4a4763415f765770449190097a99b3a8a6ebf20b24e6d90a32da6644e5d041"}, + {file = "pytest_regressions-2.6.0.tar.gz", hash = "sha256:e3dce521fac11199a2a91a1b8837974d708c7e8665b8c9668b3a721b556c8183"}, ] [package.dependencies] @@ -1159,7 +1159,7 @@ pyyaml = "*" [package.extras] dataframe = ["numpy", "pandas"] -dev = ["matplotlib", "mypy", "numpy", "pandas", "pillow", "pre-commit", "restructuredtext-lint", "tox"] +dev = ["matplotlib", "mypy", "numpy", "pandas", "pillow", "pre-commit", "pyarrow", "restructuredtext-lint", "tox"] image = ["numpy", "pillow"] num = ["numpy", "pandas"] From d335cdf753512c17f281866332868de513c87ddc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 22 Dec 2024 19:12:39 +0100 Subject: [PATCH 451/685] build(deps-dev): bump mkdocs-material from 9.5.48 to 9.5.49 (#1312) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index fcc4896ff1..5d45dcf0f8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -756,13 +756,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.48" +version = "9.5.49" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.48-py3-none-any.whl", hash = "sha256:b695c998f4b939ce748adbc0d3bff73fa886a670ece948cf27818fa115dc16f8"}, - {file = "mkdocs_material-9.5.48.tar.gz", hash = "sha256:a582531e8b34f4c7ed38c29d5c44763053832cf2a32f7409567e0c74749a47db"}, + {file = "mkdocs_material-9.5.49-py3-none-any.whl", hash = "sha256:c3c2d8176b18198435d3a3e119011922f3e11424074645c24019c2dcf08a360e"}, + {file = "mkdocs_material-9.5.49.tar.gz", hash = "sha256:3671bb282b4f53a1c72e08adbe04d2481a98f85fed392530051f80ff94a9621d"}, ] [package.dependencies] From 218a32e7981104086b1c99e0da655c3477bd73e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 01:51:12 +0000 Subject: [PATCH 452/685] build(deps): bump jinja2 from 3.1.4 to 3.1.5 Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.4 to 3.1.5. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/jinja/compare/3.1.4...3.1.5) --- updated-dependencies: - dependency-name: jinja2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5d45dcf0f8..1a2acc0446 100644 --- a/poetry.lock +++ b/poetry.lock @@ -543,13 +543,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jinja2" -version = "3.1.4" +version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, + {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, + {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] From a699f647426c6c7f5a5b9e859a50bcf7cf330ca8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 01:51:32 +0000 Subject: [PATCH 453/685] build(deps-dev): bump mypy from 1.13.0 to 1.14.0 Bumps [mypy](https://github.com/python/mypy) from 1.13.0 to 1.14.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.13.0...v1.14.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 70 ++++++++++++++++++++++++++--------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1a2acc0446..d926888c18 100644 --- a/poetry.lock +++ b/poetry.lock @@ -796,49 +796,49 @@ files = [ [[package]] name = "mypy" -version = "1.13.0" +version = "1.14.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, - {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, - {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, - {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, - {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, - {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, - {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, - {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, - {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, - {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, - {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, - {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, - {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, - {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, - {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, - {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, - {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, - {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, - {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, - {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, - {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, - {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, - {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, - {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, - {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, - {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, - {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, - {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, - {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, - {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, - {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, - {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, + {file = "mypy-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e971c1c667007f9f2b397ffa80fa8e1e0adccff336e5e77e74cb5f22868bee87"}, + {file = "mypy-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e86aaeaa3221a278c66d3d673b297232947d873773d61ca3ee0e28b2ff027179"}, + {file = "mypy-1.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1628c5c3ce823d296e41e2984ff88c5861499041cb416a8809615d0c1f41740e"}, + {file = "mypy-1.14.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fadb29b77fc14a0dd81304ed73c828c3e5cde0016c7e668a86a3e0dfc9f3af3"}, + {file = "mypy-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:3fa76988dc760da377c1e5069200a50d9eaaccf34f4ea18428a3337034ab5a44"}, + {file = "mypy-1.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6e73c8a154eed31db3445fe28f63ad2d97b674b911c00191416cf7f6459fd49a"}, + {file = "mypy-1.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:273e70fcb2e38c5405a188425aa60b984ffdcef65d6c746ea5813024b68c73dc"}, + {file = "mypy-1.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1daca283d732943731a6a9f20fdbcaa927f160bc51602b1d4ef880a6fb252015"}, + {file = "mypy-1.14.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7e68047bedb04c1c25bba9901ea46ff60d5eaac2d71b1f2161f33107e2b368eb"}, + {file = "mypy-1.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:7a52f26b9c9b1664a60d87675f3bae00b5c7f2806e0c2800545a32c325920bcc"}, + {file = "mypy-1.14.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d5326ab70a6db8e856d59ad4cb72741124950cbbf32e7b70e30166ba7bbf61dd"}, + {file = "mypy-1.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bf4ec4980bec1e0e24e5075f449d014011527ae0055884c7e3abc6a99cd2c7f1"}, + {file = "mypy-1.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:390dfb898239c25289495500f12fa73aa7f24a4c6d90ccdc165762462b998d63"}, + {file = "mypy-1.14.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7e026d55ddcd76e29e87865c08cbe2d0104e2b3153a523c529de584759379d3d"}, + {file = "mypy-1.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:585ed36031d0b3ee362e5107ef449a8b5dfd4e9c90ccbe36414ee405ee6b32ba"}, + {file = "mypy-1.14.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9f6f4c0b27401d14c483c622bc5105eff3911634d576bbdf6695b9a7c1ba741"}, + {file = "mypy-1.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56b2280cedcb312c7a79f5001ae5325582d0d339bce684e4a529069d0e7ca1e7"}, + {file = "mypy-1.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:342de51c48bab326bfc77ce056ba08c076d82ce4f5a86621f972ed39970f94d8"}, + {file = "mypy-1.14.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:00df23b42e533e02a6f0055e54de9a6ed491cd8b7ea738647364fd3a39ea7efc"}, + {file = "mypy-1.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:e8c8387e5d9dff80e7daf961df357c80e694e942d9755f3ad77d69b0957b8e3f"}, + {file = "mypy-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b16738b1d80ec4334654e89e798eb705ac0c36c8a5c4798496cd3623aa02286"}, + {file = "mypy-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10065fcebb7c66df04b05fc799a854b1ae24d9963c8bb27e9064a9bdb43aa8ad"}, + {file = "mypy-1.14.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fbb7d683fa6bdecaa106e8368aa973ecc0ddb79a9eaeb4b821591ecd07e9e03c"}, + {file = "mypy-1.14.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3498cb55448dc5533e438cd13d6ddd28654559c8c4d1fd4b5ca57a31b81bac01"}, + {file = "mypy-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:c7b243408ea43755f3a21a0a08e5c5ae30eddb4c58a80f415ca6b118816e60aa"}, + {file = "mypy-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:14117b9da3305b39860d0aa34b8f1ff74d209a368829a584eb77524389a9c13e"}, + {file = "mypy-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af98c5a958f9c37404bd4eef2f920b94874507e146ed6ee559f185b8809c44cc"}, + {file = "mypy-1.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0b343a1d3989547024377c2ba0dca9c74a2428ad6ed24283c213af8dbb0710b"}, + {file = "mypy-1.14.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cdb5563c1726c85fb201be383168f8c866032db95e1095600806625b3a648cb7"}, + {file = "mypy-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:74e925649c1ee0a79aa7448baf2668d81cc287dc5782cff6a04ee93f40fb8d3f"}, + {file = "mypy-1.14.0-py3-none-any.whl", hash = "sha256:2238d7f93fc4027ed1efc944507683df3ba406445a2b6c96e79666a045aadfab"}, + {file = "mypy-1.14.0.tar.gz", hash = "sha256:822dbd184d4a9804df5a7d5335a68cf7662930e70b8c1bc976645d1509f9a9d6"}, ] [package.dependencies] -mypy-extensions = ">=1.0.0" +mypy_extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.6.0" +typing_extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] From c2aaff4569fd16da9ac6e4ba262171b1072c6927 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 01:51:46 +0000 Subject: [PATCH 454/685] build(deps-dev): bump types-pyyaml Bumps [types-pyyaml](https://github.com/python/typeshed) from 6.0.12.20240917 to 6.0.12.20241221. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-pyyaml dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index d926888c18..57e8390ca0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1562,13 +1562,13 @@ files = [ [[package]] name = "types-pyyaml" -version = "6.0.12.20240917" +version = "6.0.12.20241221" description = "Typing stubs for PyYAML" optional = false python-versions = ">=3.8" files = [ - {file = "types-PyYAML-6.0.12.20240917.tar.gz", hash = "sha256:d1405a86f9576682234ef83bcb4e6fff7c9305c8b1fbad5e0bcd4f7dbdc9c587"}, - {file = "types_PyYAML-6.0.12.20240917-py3-none-any.whl", hash = "sha256:392b267f1c0fe6022952462bf5d6523f31e37f6cea49b14cee7ad634b6301570"}, + {file = "types_PyYAML-6.0.12.20241221-py3-none-any.whl", hash = "sha256:0657a4ff8411a030a2116a196e8e008ea679696b5b1a8e1a6aa8ebb737b34688"}, + {file = "types_pyyaml-6.0.12.20241221.tar.gz", hash = "sha256:4f149aa893ff6a46889a30af4c794b23833014c469cc57cbc3ad77498a58996f"}, ] [[package]] From 7a8907151df7fa8611b066fc51735e289eff8d57 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Dec 2024 02:00:39 +0000 Subject: [PATCH 455/685] build(deps): bump charset-normalizer from 3.4.0 to 3.4.1 Bumps [charset-normalizer](https://github.com/jawah/charset_normalizer) from 3.4.0 to 3.4.1. - [Release notes](https://github.com/jawah/charset_normalizer/releases) - [Changelog](https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md) - [Commits](https://github.com/jawah/charset_normalizer/compare/3.4.0...3.4.1) --- updated-dependencies: - dependency-name: charset-normalizer dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 203 ++++++++++++++++++++++++---------------------------- 1 file changed, 95 insertions(+), 108 deletions(-) diff --git a/poetry.lock b/poetry.lock index 57e8390ca0..b9d5210294 100644 --- a/poetry.lock +++ b/poetry.lock @@ -70,116 +70,103 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.4.0" +version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, - {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, - {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, +python-versions = ">=3.7" +files = [ + {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, + {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, + {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, ] [[package]] From 526e76154503beb5c8e28a1d235b536a32b54f77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Dec 2024 02:04:20 +0000 Subject: [PATCH 456/685] build(deps): bump questionary from 2.0.1 to 2.1.0 Bumps [questionary](https://github.com/tmbo/questionary) from 2.0.1 to 2.1.0. - [Commits](https://github.com/tmbo/questionary/compare/2.0.1...2.1.0) --- updated-dependencies: - dependency-name: questionary dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index b9d5210294..bc24fb5b11 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1262,17 +1262,17 @@ pyyaml = "*" [[package]] name = "questionary" -version = "2.0.1" +version = "2.1.0" description = "Python library to build pretty command line user prompts ⭐️" optional = false python-versions = ">=3.8" files = [ - {file = "questionary-2.0.1-py3-none-any.whl", hash = "sha256:8ab9a01d0b91b68444dff7f6652c1e754105533f083cbe27597c8110ecc230a2"}, - {file = "questionary-2.0.1.tar.gz", hash = "sha256:bcce898bf3dbb446ff62830c86c5c6fb9a22a54146f0f5597d3da43b10d8fc8b"}, + {file = "questionary-2.1.0-py3-none-any.whl", hash = "sha256:44174d237b68bc828e4878c763a9ad6790ee61990e0ae72927694ead57bab8ec"}, + {file = "questionary-2.1.0.tar.gz", hash = "sha256:6302cdd645b19667d8f6e6634774e9538bfcd1aad9be287e743d96cacaf95587"}, ] [package.dependencies] -prompt_toolkit = ">=2.0,<=3.0.36" +prompt_toolkit = ">=2.0,<4.0" [[package]] name = "regex" From 09faa018a3067e325920f14d2f073548057c3bb7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Dec 2024 02:01:50 +0000 Subject: [PATCH 457/685] build(deps-dev): bump types-pyyaml Bumps [types-pyyaml](https://github.com/python/typeshed) from 6.0.12.20241221 to 6.0.12.20241230. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-pyyaml dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index bc24fb5b11..0e98fb0efd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1549,13 +1549,13 @@ files = [ [[package]] name = "types-pyyaml" -version = "6.0.12.20241221" +version = "6.0.12.20241230" description = "Typing stubs for PyYAML" optional = false python-versions = ">=3.8" files = [ - {file = "types_PyYAML-6.0.12.20241221-py3-none-any.whl", hash = "sha256:0657a4ff8411a030a2116a196e8e008ea679696b5b1a8e1a6aa8ebb737b34688"}, - {file = "types_pyyaml-6.0.12.20241221.tar.gz", hash = "sha256:4f149aa893ff6a46889a30af4c794b23833014c469cc57cbc3ad77498a58996f"}, + {file = "types_PyYAML-6.0.12.20241230-py3-none-any.whl", hash = "sha256:fa4d32565219b68e6dee5f67534c722e53c00d1cfc09c435ef04d7353e1e96e6"}, + {file = "types_pyyaml-6.0.12.20241230.tar.gz", hash = "sha256:7f07622dbd34bb9c8b264fe860a17e0efcad00d50b5f27e93984909d9363498c"}, ] [[package]] From 8e36610ab3440d54dbf52d6e34a0c44ef4f392a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Dec 2024 02:01:38 +0000 Subject: [PATCH 458/685] build(deps-dev): bump mypy from 1.14.0 to 1.14.1 Bumps [mypy](https://github.com/python/mypy) from 1.14.0 to 1.14.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.14.0...v1.14.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 72 +++++++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 33 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0e98fb0efd..ff1f4d34e6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -783,43 +783,49 @@ files = [ [[package]] name = "mypy" -version = "1.14.0" +version = "1.14.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e971c1c667007f9f2b397ffa80fa8e1e0adccff336e5e77e74cb5f22868bee87"}, - {file = "mypy-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e86aaeaa3221a278c66d3d673b297232947d873773d61ca3ee0e28b2ff027179"}, - {file = "mypy-1.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1628c5c3ce823d296e41e2984ff88c5861499041cb416a8809615d0c1f41740e"}, - {file = "mypy-1.14.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fadb29b77fc14a0dd81304ed73c828c3e5cde0016c7e668a86a3e0dfc9f3af3"}, - {file = "mypy-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:3fa76988dc760da377c1e5069200a50d9eaaccf34f4ea18428a3337034ab5a44"}, - {file = "mypy-1.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6e73c8a154eed31db3445fe28f63ad2d97b674b911c00191416cf7f6459fd49a"}, - {file = "mypy-1.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:273e70fcb2e38c5405a188425aa60b984ffdcef65d6c746ea5813024b68c73dc"}, - {file = "mypy-1.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1daca283d732943731a6a9f20fdbcaa927f160bc51602b1d4ef880a6fb252015"}, - {file = "mypy-1.14.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7e68047bedb04c1c25bba9901ea46ff60d5eaac2d71b1f2161f33107e2b368eb"}, - {file = "mypy-1.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:7a52f26b9c9b1664a60d87675f3bae00b5c7f2806e0c2800545a32c325920bcc"}, - {file = "mypy-1.14.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d5326ab70a6db8e856d59ad4cb72741124950cbbf32e7b70e30166ba7bbf61dd"}, - {file = "mypy-1.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bf4ec4980bec1e0e24e5075f449d014011527ae0055884c7e3abc6a99cd2c7f1"}, - {file = "mypy-1.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:390dfb898239c25289495500f12fa73aa7f24a4c6d90ccdc165762462b998d63"}, - {file = "mypy-1.14.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7e026d55ddcd76e29e87865c08cbe2d0104e2b3153a523c529de584759379d3d"}, - {file = "mypy-1.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:585ed36031d0b3ee362e5107ef449a8b5dfd4e9c90ccbe36414ee405ee6b32ba"}, - {file = "mypy-1.14.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9f6f4c0b27401d14c483c622bc5105eff3911634d576bbdf6695b9a7c1ba741"}, - {file = "mypy-1.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56b2280cedcb312c7a79f5001ae5325582d0d339bce684e4a529069d0e7ca1e7"}, - {file = "mypy-1.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:342de51c48bab326bfc77ce056ba08c076d82ce4f5a86621f972ed39970f94d8"}, - {file = "mypy-1.14.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:00df23b42e533e02a6f0055e54de9a6ed491cd8b7ea738647364fd3a39ea7efc"}, - {file = "mypy-1.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:e8c8387e5d9dff80e7daf961df357c80e694e942d9755f3ad77d69b0957b8e3f"}, - {file = "mypy-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b16738b1d80ec4334654e89e798eb705ac0c36c8a5c4798496cd3623aa02286"}, - {file = "mypy-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10065fcebb7c66df04b05fc799a854b1ae24d9963c8bb27e9064a9bdb43aa8ad"}, - {file = "mypy-1.14.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fbb7d683fa6bdecaa106e8368aa973ecc0ddb79a9eaeb4b821591ecd07e9e03c"}, - {file = "mypy-1.14.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3498cb55448dc5533e438cd13d6ddd28654559c8c4d1fd4b5ca57a31b81bac01"}, - {file = "mypy-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:c7b243408ea43755f3a21a0a08e5c5ae30eddb4c58a80f415ca6b118816e60aa"}, - {file = "mypy-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:14117b9da3305b39860d0aa34b8f1ff74d209a368829a584eb77524389a9c13e"}, - {file = "mypy-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af98c5a958f9c37404bd4eef2f920b94874507e146ed6ee559f185b8809c44cc"}, - {file = "mypy-1.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0b343a1d3989547024377c2ba0dca9c74a2428ad6ed24283c213af8dbb0710b"}, - {file = "mypy-1.14.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cdb5563c1726c85fb201be383168f8c866032db95e1095600806625b3a648cb7"}, - {file = "mypy-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:74e925649c1ee0a79aa7448baf2668d81cc287dc5782cff6a04ee93f40fb8d3f"}, - {file = "mypy-1.14.0-py3-none-any.whl", hash = "sha256:2238d7f93fc4027ed1efc944507683df3ba406445a2b6c96e79666a045aadfab"}, - {file = "mypy-1.14.0.tar.gz", hash = "sha256:822dbd184d4a9804df5a7d5335a68cf7662930e70b8c1bc976645d1509f9a9d6"}, + {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, + {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, + {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d"}, + {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b"}, + {file = "mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427"}, + {file = "mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f"}, + {file = "mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c"}, + {file = "mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1"}, + {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8"}, + {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f"}, + {file = "mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1"}, + {file = "mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae"}, + {file = "mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14"}, + {file = "mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9"}, + {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11"}, + {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e"}, + {file = "mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89"}, + {file = "mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b"}, + {file = "mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255"}, + {file = "mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34"}, + {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a"}, + {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9"}, + {file = "mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd"}, + {file = "mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107"}, + {file = "mypy-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31"}, + {file = "mypy-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6"}, + {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319"}, + {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac"}, + {file = "mypy-1.14.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b"}, + {file = "mypy-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837"}, + {file = "mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35"}, + {file = "mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc"}, + {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9"}, + {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb"}, + {file = "mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60"}, + {file = "mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c"}, + {file = "mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1"}, + {file = "mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6"}, ] [package.dependencies] From 2b0bcdd1f17b70815b6d75166dd2163c7d6580d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Dec 2024 02:02:11 +0000 Subject: [PATCH 459/685] build(deps-dev): bump ipython from 8.18.0 to 8.18.1 Bumps [ipython](https://github.com/ipython/ipython) from 8.18.0 to 8.18.1. - [Release notes](https://github.com/ipython/ipython/releases) - [Commits](https://github.com/ipython/ipython/compare/8.18.0...8.18.1) --- updated-dependencies: - dependency-name: ipython dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index ff1f4d34e6..a4618fecc6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -474,13 +474,13 @@ files = [ [[package]] name = "ipython" -version = "8.18.0" +version = "8.18.1" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.9" files = [ - {file = "ipython-8.18.0-py3-none-any.whl", hash = "sha256:d538a7a98ad9b7e018926447a5f35856113a85d08fd68a165d7871ab5175f6e0"}, - {file = "ipython-8.18.0.tar.gz", hash = "sha256:4feb61210160f75e229ce932dbf8b719bff37af123c0b985fd038b14233daa16"}, + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, ] [package.dependencies] @@ -490,7 +490,7 @@ exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" +prompt-toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5" @@ -979,13 +979,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prompt-toolkit" -version = "3.0.36" +version = "3.0.48" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, - {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, + {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, + {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, ] [package.dependencies] From 1d8b5312753887e62fd91f0531bd1d51fb4fdc25 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Jan 2025 01:13:32 +0000 Subject: [PATCH 460/685] build(deps-dev): bump ruff from 0.8.4 to 0.8.5 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.8.4 to 0.8.5. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.8.4...0.8.5) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index a4618fecc6..41ca91754f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1425,29 +1425,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.8.4" +version = "0.8.5" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.8.4-py3-none-linux_armv6l.whl", hash = "sha256:58072f0c06080276804c6a4e21a9045a706584a958e644353603d36ca1eb8a60"}, - {file = "ruff-0.8.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ffb60904651c00a1e0b8df594591770018a0f04587f7deeb3838344fe3adabac"}, - {file = "ruff-0.8.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6ddf5d654ac0d44389f6bf05cee4caeefc3132a64b58ea46738111d687352296"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e248b1f0fa2749edd3350a2a342b67b43a2627434c059a063418e3d375cfe643"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf197b98ed86e417412ee3b6c893f44c8864f816451441483253d5ff22c0e81e"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c41319b85faa3aadd4d30cb1cffdd9ac6b89704ff79f7664b853785b48eccdf3"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:9f8402b7c4f96463f135e936d9ab77b65711fcd5d72e5d67597b543bbb43cf3f"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4e56b3baa9c23d324ead112a4fdf20db9a3f8f29eeabff1355114dd96014604"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:736272574e97157f7edbbb43b1d046125fce9e7d8d583d5d65d0c9bf2c15addf"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5fe710ab6061592521f902fca7ebcb9fabd27bc7c57c764298b1c1f15fff720"}, - {file = "ruff-0.8.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:13e9ec6d6b55f6da412d59953d65d66e760d583dd3c1c72bf1f26435b5bfdbae"}, - {file = "ruff-0.8.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:97d9aefef725348ad77d6db98b726cfdb075a40b936c7984088804dfd38268a7"}, - {file = "ruff-0.8.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ab78e33325a6f5374e04c2ab924a3367d69a0da36f8c9cb6b894a62017506111"}, - {file = "ruff-0.8.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8ef06f66f4a05c3ddbc9121a8b0cecccd92c5bf3dd43b5472ffe40b8ca10f0f8"}, - {file = "ruff-0.8.4-py3-none-win32.whl", hash = "sha256:552fb6d861320958ca5e15f28b20a3d071aa83b93caee33a87b471f99a6c0835"}, - {file = "ruff-0.8.4-py3-none-win_amd64.whl", hash = "sha256:f21a1143776f8656d7f364bd264a9d60f01b7f52243fbe90e7670c0dfe0cf65d"}, - {file = "ruff-0.8.4-py3-none-win_arm64.whl", hash = "sha256:9183dd615d8df50defa8b1d9a074053891ba39025cf5ae88e8bcb52edcc4bf08"}, - {file = "ruff-0.8.4.tar.gz", hash = "sha256:0d5f89f254836799af1615798caa5f80b7f935d7a670fad66c5007928e57ace8"}, + {file = "ruff-0.8.5-py3-none-linux_armv6l.whl", hash = "sha256:5ad11a5e3868a73ca1fa4727fe7e33735ea78b416313f4368c504dbeb69c0f88"}, + {file = "ruff-0.8.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f69ab37771ea7e0715fead8624ec42996d101269a96e31f4d31be6fc33aa19b7"}, + {file = "ruff-0.8.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b5462d7804558ccff9c08fe8cbf6c14b7efe67404316696a2dde48297b1925bb"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d56de7220a35607f9fe59f8a6d018e14504f7b71d784d980835e20fc0611cd50"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9d99cf80b0429cbebf31cbbf6f24f05a29706f0437c40413d950e67e2d4faca4"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b75ac29715ac60d554a049dbb0ef3b55259076181c3369d79466cb130eb5afd"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c9d526a62c9eda211b38463528768fd0ada25dad524cb33c0e99fcff1c67b5dc"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:587c5e95007612c26509f30acc506c874dab4c4abbacd0357400bd1aa799931b"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:622b82bf3429ff0e346835ec213aec0a04d9730480cbffbb6ad9372014e31bbd"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f99be814d77a5dac8a8957104bdd8c359e85c86b0ee0e38dca447cb1095f70fb"}, + {file = "ruff-0.8.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c01c048f9c3385e0fd7822ad0fd519afb282af9cf1778f3580e540629df89725"}, + {file = "ruff-0.8.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7512e8cb038db7f5db6aae0e24735ff9ea03bb0ed6ae2ce534e9baa23c1dc9ea"}, + {file = "ruff-0.8.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:762f113232acd5b768d6b875d16aad6b00082add40ec91c927f0673a8ec4ede8"}, + {file = "ruff-0.8.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:03a90200c5dfff49e4c967b405f27fdfa81594cbb7c5ff5609e42d7fe9680da5"}, + {file = "ruff-0.8.5-py3-none-win32.whl", hash = "sha256:8710ffd57bdaa6690cbf6ecff19884b8629ec2a2a2a2f783aa94b1cc795139ed"}, + {file = "ruff-0.8.5-py3-none-win_amd64.whl", hash = "sha256:4020d8bf8d3a32325c77af452a9976a9ad6455773bcb94991cf15bd66b347e47"}, + {file = "ruff-0.8.5-py3-none-win_arm64.whl", hash = "sha256:134ae019ef13e1b060ab7136e7828a6d83ea727ba123381307eb37c6bd5e01cb"}, + {file = "ruff-0.8.5.tar.gz", hash = "sha256:1098d36f69831f7ff2a1da3e6407d5fbd6dfa2559e4f74ff2d260c5588900317"}, ] [[package]] From fc96f9c9fb8582634d1b291731109649294a91a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 01:33:13 +0000 Subject: [PATCH 461/685] build(deps-dev): bump mkdocs-material from 9.5.49 to 9.5.50 Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.49 to 9.5.50. - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.49...9.5.50) --- updated-dependencies: - dependency-name: mkdocs-material dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 41ca91754f..9d747b8735 100644 --- a/poetry.lock +++ b/poetry.lock @@ -743,13 +743,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.49" +version = "9.5.50" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.49-py3-none-any.whl", hash = "sha256:c3c2d8176b18198435d3a3e119011922f3e11424074645c24019c2dcf08a360e"}, - {file = "mkdocs_material-9.5.49.tar.gz", hash = "sha256:3671bb282b4f53a1c72e08adbe04d2481a98f85fed392530051f80ff94a9621d"}, + {file = "mkdocs_material-9.5.50-py3-none-any.whl", hash = "sha256:f24100f234741f4d423a9d672a909d859668a4f404796be3cf035f10d6050385"}, + {file = "mkdocs_material-9.5.50.tar.gz", hash = "sha256:ae5fe16f3d7c9ccd05bb6916a7da7420cf99a9ce5e33debd9d40403a090d5825"}, ] [package.dependencies] @@ -766,7 +766,7 @@ regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<3)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] From f810b2c9a4b6671eabfec21ae3d24b1bc71aa821 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 01:08:34 +0000 Subject: [PATCH 462/685] build(deps): bump importlib-metadata from 8.5.0 to 8.6.1 Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 8.5.0 to 8.6.1. - [Release notes](https://github.com/python/importlib_metadata/releases) - [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst) - [Commits](https://github.com/python/importlib_metadata/compare/v8.5.0...v8.6.1) --- updated-dependencies: - dependency-name: importlib-metadata dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9d747b8735..7c85f4c137 100644 --- a/poetry.lock +++ b/poetry.lock @@ -440,13 +440,13 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 [[package]] name = "importlib-metadata" -version = "8.5.0" +version = "8.6.1" description = "Read metadata from Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, - {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, + {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, + {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, ] [package.dependencies] @@ -458,7 +458,7 @@ cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +test = ["flufl.flake8", "importlib_resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] type = ["pytest-mypy"] [[package]] From 2902d5a0b18084c5a297676752ddc66512883c7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 01:08:21 +0000 Subject: [PATCH 463/685] build(deps-dev): bump pre-commit from 4.0.1 to 4.1.0 Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 4.0.1 to 4.1.0. - [Release notes](https://github.com/pre-commit/pre-commit/releases) - [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) - [Commits](https://github.com/pre-commit/pre-commit/compare/v4.0.1...v4.1.0) --- updated-dependencies: - dependency-name: pre-commit dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7c85f4c137..23deba7a24 100644 --- a/poetry.lock +++ b/poetry.lock @@ -961,13 +961,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "4.0.1" +version = "4.1.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" files = [ - {file = "pre_commit-4.0.1-py2.py3-none-any.whl", hash = "sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878"}, - {file = "pre_commit-4.0.1.tar.gz", hash = "sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2"}, + {file = "pre_commit-4.1.0-py2.py3-none-any.whl", hash = "sha256:d29e7cb346295bcc1cc75fc3e92e343495e3ea0196c9ec6ba53f49f10ab6ae7b"}, + {file = "pre_commit-4.1.0.tar.gz", hash = "sha256:ae3f018575a588e30dfddfab9a05448bfbd6b73d78709617b5a2b853549716d4"}, ] [package.dependencies] From 15c29df50e161ebce154b573f3c882fee32521d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 02:02:14 +0000 Subject: [PATCH 464/685] build(deps-dev): bump pytest-regressions from 2.6.0 to 2.7.0 Bumps [pytest-regressions](https://github.com/ESSS/pytest-regressions) from 2.6.0 to 2.7.0. - [Release notes](https://github.com/ESSS/pytest-regressions/releases) - [Changelog](https://github.com/ESSS/pytest-regressions/blob/master/CHANGELOG.rst) - [Commits](https://github.com/ESSS/pytest-regressions/compare/v2.6.0...v2.7.0) --- updated-dependencies: - dependency-name: pytest-regressions dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 23deba7a24..956eb75ffb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1136,13 +1136,13 @@ dev = ["pre-commit", "pytest-asyncio", "tox"] [[package]] name = "pytest-regressions" -version = "2.6.0" +version = "2.7.0" description = "Easy to use fixtures to write regression tests." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pytest_regressions-2.6.0-py3-none-any.whl", hash = "sha256:5c4a4763415f765770449190097a99b3a8a6ebf20b24e6d90a32da6644e5d041"}, - {file = "pytest_regressions-2.6.0.tar.gz", hash = "sha256:e3dce521fac11199a2a91a1b8837974d708c7e8665b8c9668b3a721b556c8183"}, + {file = "pytest_regressions-2.7.0-py3-none-any.whl", hash = "sha256:69f5e3f03493cf0ef84d96d23e50a546617c198b1d7746f2e2b9e441cbab4847"}, + {file = "pytest_regressions-2.7.0.tar.gz", hash = "sha256:4c30064e0923929012c94f5d6f35205be06fd8709c7f0dba0228e05c460af05e"}, ] [package.dependencies] From ed8f0831ef822bf5be22ccd437504f0aa0280a59 Mon Sep 17 00:00:00 2001 From: Lyonel Martinez <lyonel.martinez@numberly.com> Date: Fri, 29 Nov 2024 16:09:07 +0100 Subject: [PATCH 465/685] fix(get-next-bump): fix to permit usage of --get-next options even when update_changelog_on_bump is set to true --- commitizen/commands/bump.py | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index a3682df8f3..1f98c19954 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -66,9 +66,8 @@ def __init__(self, config: BaseConfig, arguments: dict): }, } self.cz = factory.commiter_factory(self.config) - self.changelog = arguments["changelog"] or self.config.settings.get( - "update_changelog_on_bump" - ) + self.changelog_flag = arguments["changelog"] + self.changelog_config = self.config.settings.get("update_changelog_on_bump") self.changelog_to_stdout = arguments["changelog_to_stdout"] self.git_output_to_stderr = arguments["git_output_to_stderr"] self.no_verify = arguments["no_verify"] @@ -207,17 +206,24 @@ def __call__(self) -> None: # noqa: C901 "--local-version cannot be combined with --build-metadata" ) - # If user specified changelog_to_stdout, they probably want the - # changelog to be generated as well, this is the most intuitive solution - self.changelog = self.changelog or bool(self.changelog_to_stdout) - if get_next: - if self.changelog: + # if trying to use --get-next, we should not allow --changelog or --changelog-to-stdout + if self.changelog_flag or bool(self.changelog_to_stdout): raise NotAllowed( "--changelog or --changelog-to-stdout is not allowed with --get-next" ) + # --get-next is a special case, taking precedence over config for 'update_changelog_on_bump' + self.changelog_config = False # Setting dry_run to prevent any unwanted changes to the repo or files self.dry_run = True + else: + # If user specified changelog_to_stdout, they probably want the + # changelog to be generated as well, this is the most intuitive solution + self.changelog_flag = ( + self.changelog_flag + or bool(self.changelog_to_stdout) + or self.changelog_config + ) current_tag_version: str = bump.normalize_tag( current_version, @@ -309,7 +315,7 @@ def __call__(self) -> None: # noqa: C901 ) files: list[str] = [] - if self.changelog: + if self.changelog_flag: args = { "unreleased_version": new_tag_version, "template": self.template, @@ -356,7 +362,9 @@ def __call__(self) -> None: # noqa: C901 new_tag_version=new_tag_version, message=message, increment=increment, - changelog_file_name=changelog_cmd.file_name if self.changelog else None, + changelog_file_name=changelog_cmd.file_name + if self.changelog_flag + else None, ) if is_files_only: @@ -365,7 +373,7 @@ def __call__(self) -> None: # noqa: C901 # FIXME: check if any changes have been staged git.add(*files) c = git.commit(message, args=self._get_commit_args()) - if self.retry and c.return_code != 0 and self.changelog: + if self.retry and c.return_code != 0 and self.changelog_flag: # Maybe pre-commit reformatted some files? Retry once logger.debug("1st git.commit error: %s", c.err) logger.info("1st commit attempt failed; retrying once") @@ -410,7 +418,9 @@ def __call__(self) -> None: # noqa: C901 current_tag_version=new_tag_version, message=message, increment=increment, - changelog_file_name=changelog_cmd.file_name if self.changelog else None, + changelog_file_name=changelog_cmd.file_name + if self.changelog_flag + else None, ) # TODO: For v3 output this only as diagnostic and remove this if From d20580dda697c83bd7427704490c958cd73cd565 Mon Sep 17 00:00:00 2001 From: Lyonel Martinez <lyonel.martinez@numberly.com> Date: Fri, 29 Nov 2024 16:27:21 +0100 Subject: [PATCH 466/685] fix(get-next-bump): add a test case --- tests/commands/test_bump_command.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 81273764dd..8acb5143c7 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -1481,6 +1481,26 @@ def test_bump_get_next(mocker: MockFixture, capsys): assert tag_exists is False +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_bump_get_next_update_changelog_on_bump( + mocker: MockFixture, capsys, config_path +): + create_file_and_commit("feat: new file") + with open(config_path, "a", encoding="utf-8") as fp: + fp.write("update_changelog_on_bump = true\n") + + testargs = ["cz", "bump", "--yes", "--get-next"] + mocker.patch.object(sys, "argv", testargs) + with pytest.raises(GetNextExit): + cli.main() + + out, _ = capsys.readouterr() + assert "0.2.0" in out + + tag_exists = git.tag_exist("0.2.0") + assert tag_exists is False + + @pytest.mark.usefixtures("tmp_commitizen_project") def test_bump_get_next__changelog_is_not_allowed(mocker: MockFixture): create_file_and_commit("feat: new file") From c6119812f7c21e6b2b01583025e2664945c550a3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sun, 26 Jan 2025 10:49:23 +0000 Subject: [PATCH 467/685] =?UTF-8?q?bump:=20version=204.1.0=20=E2=86=92=204?= =?UTF-8?q?.1.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 7 +++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 986b63f875..5ee5c84c96 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.1.0 # automatically updated by Commitizen + rev: v4.1.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 858f7d7181..3687908b19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## v4.1.1 (2025-01-26) + +### Fix + +- **get-next-bump**: add a test case +- **get-next-bump**: fix to permit usage of --get-next options even when update_changelog_on_bump is set to true + ## v4.1.0 (2024-12-06) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 7039708762..72aa75832f 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.1.0" +__version__ = "4.1.1" diff --git a/pyproject.toml b/pyproject.toml index e1b884f479..094d6fca0b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "4.1.0" +version = "4.1.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "4.1.0" +version = "4.1.1" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT" From 0d093b83596fb320a5ee0533d53e5cee0bdc6daf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 01:24:58 +0000 Subject: [PATCH 468/685] build(deps-dev): bump deprecated from 1.2.15 to 1.2.17 Bumps [deprecated](https://github.com/laurent-laporte-pro/deprecated) from 1.2.15 to 1.2.17. - [Release notes](https://github.com/laurent-laporte-pro/deprecated/releases) - [Changelog](https://github.com/laurent-laporte-pro/deprecated/blob/master/CHANGELOG.rst) - [Commits](https://github.com/laurent-laporte-pro/deprecated/compare/v1.2.15...v1.2.17) --- updated-dependencies: - dependency-name: deprecated dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 956eb75ffb..4779c42af8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -295,20 +295,20 @@ files = [ [[package]] name = "deprecated" -version = "1.2.15" +version = "1.2.17" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ - {file = "Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320"}, - {file = "deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d"}, + {file = "Deprecated-1.2.17-py2.py3-none-any.whl", hash = "sha256:69cdc0a751671183f569495e2efb14baee4344b0236342eec29f1fde25d61818"}, + {file = "deprecated-1.2.17.tar.gz", hash = "sha256:0114a10f0bbb750b90b2c2296c90cf7e9eaeb0abb5cf06c80de2c60138de0a82"}, ] [package.dependencies] wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "setuptools", "sphinx (<2)", "tox"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools", "tox"] [[package]] name = "distlib" From fda99f82aa822380bbcd9eb7fcce240b2c4fe00c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jan 2025 01:32:53 +0000 Subject: [PATCH 469/685] build(deps-dev): bump deprecated from 1.2.17 to 1.2.18 Bumps [deprecated](https://github.com/laurent-laporte-pro/deprecated) from 1.2.17 to 1.2.18. - [Release notes](https://github.com/laurent-laporte-pro/deprecated/releases) - [Changelog](https://github.com/laurent-laporte-pro/deprecated/blob/master/CHANGELOG.rst) - [Commits](https://github.com/laurent-laporte-pro/deprecated/compare/v1.2.17...v1.2.18) --- updated-dependencies: - dependency-name: deprecated dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4779c42af8..2da5e39cf8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -295,13 +295,13 @@ files = [ [[package]] name = "deprecated" -version = "1.2.17" +version = "1.2.18" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ - {file = "Deprecated-1.2.17-py2.py3-none-any.whl", hash = "sha256:69cdc0a751671183f569495e2efb14baee4344b0236342eec29f1fde25d61818"}, - {file = "deprecated-1.2.17.tar.gz", hash = "sha256:0114a10f0bbb750b90b2c2296c90cf7e9eaeb0abb5cf06c80de2c60138de0a82"}, + {file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"}, + {file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"}, ] [package.dependencies] From 62f482e6187534d20030cd7cbb698c0cb4f55759 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Jan 2025 01:46:15 +0000 Subject: [PATCH 470/685] build(deps): bump argcomplete from 3.5.2 to 3.5.3 Bumps [argcomplete](https://github.com/kislyuk/argcomplete) from 3.5.2 to 3.5.3. - [Release notes](https://github.com/kislyuk/argcomplete/releases) - [Changelog](https://github.com/kislyuk/argcomplete/blob/main/Changes.rst) - [Commits](https://github.com/kislyuk/argcomplete/compare/v3.5.2...v3.5.3) --- updated-dependencies: - dependency-name: argcomplete dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2da5e39cf8..5698043093 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,13 +2,13 @@ [[package]] name = "argcomplete" -version = "3.5.2" +version = "3.5.3" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.5.2-py3-none-any.whl", hash = "sha256:036d020d79048a5d525bc63880d7a4b8d1668566b8a76daf1144c0bbe0f63472"}, - {file = "argcomplete-3.5.2.tar.gz", hash = "sha256:23146ed7ac4403b70bd6026402468942ceba34a6732255b9edf5b7354f68a6bb"}, + {file = "argcomplete-3.5.3-py3-none-any.whl", hash = "sha256:2ab2c4a215c59fd6caaff41a869480a23e8f6a5f910b266c1808037f4e375b61"}, + {file = "argcomplete-3.5.3.tar.gz", hash = "sha256:c12bf50eded8aebb298c7b7da7a5ff3ee24dffd9f5281867dfe1424b58c55392"}, ] [package.extras] From f6db6a934597a08547201eb8952fd2c85f166d65 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 10:02:18 +0000 Subject: [PATCH 471/685] docs(cli/screenshots): update CLI screenshots [skip ci] --- docs/images/cli_help/cz___help.svg | 162 ++++----- docs/images/cli_help/cz_bump___help.svg | 350 +++++++++---------- docs/images/cli_help/cz_changelog___help.svg | 190 +++++----- docs/images/cli_help/cz_check___help.svg | 134 ++++--- docs/images/cli_help/cz_commit___help.svg | 110 +++--- 5 files changed, 467 insertions(+), 479 deletions(-) diff --git a/docs/images/cli_help/cz___help.svg b/docs/images/cli_help/cz___help.svg index 22a9e4d0e7..098e7df70d 100644 --- a/docs/images/cli_help/cz___help.svg +++ b/docs/images/cli_help/cz___help.svg @@ -19,133 +19,133 @@ font-weight: 700; } - .terminal-4198725382-matrix { + .terminal-2205183093-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-4198725382-title { + .terminal-2205183093-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-4198725382-r1 { fill: #c5c8c6 } -.terminal-4198725382-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-4198725382-r3 { fill: #d0b344 } -.terminal-4198725382-r4 { fill: #1984e9;text-decoration: underline; } -.terminal-4198725382-r5 { fill: #68a0b3;font-weight: bold } + .terminal-2205183093-r1 { fill: #c5c8c6 } +.terminal-2205183093-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-2205183093-r3 { fill: #d0b344 } +.terminal-2205183093-r4 { fill: #1984e9;text-decoration: underline; } +.terminal-2205183093-r5 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-4198725382-clip-terminal"> + <clipPath id="terminal-2205183093-clip-terminal"> <rect x="0" y="0" width="975.0" height="877.4" /> </clipPath> - <clipPath id="terminal-4198725382-line-0"> + <clipPath id="terminal-2205183093-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-1"> +<clipPath id="terminal-2205183093-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-2"> +<clipPath id="terminal-2205183093-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-3"> +<clipPath id="terminal-2205183093-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-4"> +<clipPath id="terminal-2205183093-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-5"> +<clipPath id="terminal-2205183093-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-6"> +<clipPath id="terminal-2205183093-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-7"> +<clipPath id="terminal-2205183093-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-8"> +<clipPath id="terminal-2205183093-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-9"> +<clipPath id="terminal-2205183093-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-10"> +<clipPath id="terminal-2205183093-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-11"> +<clipPath id="terminal-2205183093-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-12"> +<clipPath id="terminal-2205183093-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-13"> +<clipPath id="terminal-2205183093-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-14"> +<clipPath id="terminal-2205183093-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-15"> +<clipPath id="terminal-2205183093-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-16"> +<clipPath id="terminal-2205183093-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-17"> +<clipPath id="terminal-2205183093-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-18"> +<clipPath id="terminal-2205183093-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-19"> +<clipPath id="terminal-2205183093-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-20"> +<clipPath id="terminal-2205183093-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-21"> +<clipPath id="terminal-2205183093-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-22"> +<clipPath id="terminal-2205183093-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-23"> +<clipPath id="terminal-2205183093-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-24"> +<clipPath id="terminal-2205183093-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-25"> +<clipPath id="terminal-2205183093-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-26"> +<clipPath id="terminal-2205183093-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-27"> +<clipPath id="terminal-2205183093-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-28"> +<clipPath id="terminal-2205183093-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-29"> +<clipPath id="terminal-2205183093-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-30"> +<clipPath id="terminal-2205183093-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-31"> +<clipPath id="terminal-2205183093-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-32"> +<clipPath id="terminal-2205183093-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-33"> +<clipPath id="terminal-2205183093-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-34"> +<clipPath id="terminal-2205183093-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> </defs> @@ -157,45 +157,45 @@ <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-4198725382-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-2205183093-clip-terminal)"> - <g class="terminal-4198725382-matrix"> - <text class="terminal-4198725382-r1" x="0" y="20" textLength="134.2" clip-path="url(#terminal-4198725382-line-0)">$ cz --help</text><text class="terminal-4198725382-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-4198725382-line-0)"> -</text><text class="terminal-4198725382-r1" x="0" y="44.4" textLength="122" clip-path="url(#terminal-4198725382-line-1)">usage: cz </text><text class="terminal-4198725382-r2" x="122" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="134.2" y="44.4" textLength="24.4" clip-path="url(#terminal-4198725382-line-1)">-h</text><text class="terminal-4198725382-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="195.2" y="44.4" textLength="183" clip-path="url(#terminal-4198725382-line-1)">--config CONFIG</text><text class="terminal-4198725382-r2" x="378.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="402.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="414.8" y="44.4" textLength="85.4" clip-path="url(#terminal-4198725382-line-1)">--debug</text><text class="terminal-4198725382-r2" x="500.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="536.8" y="44.4" textLength="85.4" clip-path="url(#terminal-4198725382-line-1)">-n NAME</text><text class="terminal-4198725382-r2" x="622.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="646.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="658.8" y="44.4" textLength="146.4" clip-path="url(#terminal-4198725382-line-1)">-nr NO_RAISE</text><text class="terminal-4198725382-r2" x="805.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)"> -</text><text class="terminal-4198725382-r2" x="122" y="68.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-2)">{</text><text class="terminal-4198725382-r1" x="134.2" y="68.8" textLength="829.6" clip-path="url(#terminal-4198725382-line-2)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-4198725382-r2" x="963.8" y="68.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-2)">}</text><text class="terminal-4198725382-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-2)"> -</text><text class="terminal-4198725382-r3" x="122" y="93.2" textLength="36.6" clip-path="url(#terminal-4198725382-line-3)">...</text><text class="terminal-4198725382-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-3)"> -</text><text class="terminal-4198725382-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-4)"> -</text><text class="terminal-4198725382-r1" x="0" y="142" textLength="707.6" clip-path="url(#terminal-4198725382-line-5)">Commitizen is a cli tool to generate conventional commits.</text><text class="terminal-4198725382-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-4198725382-line-5)"> -</text><text class="terminal-4198725382-r1" x="0" y="166.4" textLength="524.6" clip-path="url(#terminal-4198725382-line-6)">For more information about the topic go to </text><text class="terminal-4198725382-r4" x="524.6" y="166.4" textLength="390.4" clip-path="url(#terminal-4198725382-line-6)">https://conventionalcommits.org/</text><text class="terminal-4198725382-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-6)"> -</text><text class="terminal-4198725382-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-7)"> -</text><text class="terminal-4198725382-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-4198725382-line-8)">options:</text><text class="terminal-4198725382-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-8)"> -</text><text class="terminal-4198725382-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-4198725382-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-4198725382-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-9)"> -</text><text class="terminal-4198725382-r1" x="0" y="264" textLength="658.8" clip-path="url(#terminal-4198725382-line-10)">  --config CONFIG       the path of configuration file</text><text class="terminal-4198725382-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-4198725382-line-10)"> -</text><text class="terminal-4198725382-r1" x="0" y="288.4" textLength="463.6" clip-path="url(#terminal-4198725382-line-11)">  --debug               use debug mode</text><text class="terminal-4198725382-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-11)"> -</text><text class="terminal-4198725382-r1" x="0" y="312.8" textLength="597.8" clip-path="url(#terminal-4198725382-line-12)">  -n NAME, --name NAME  use the given commitizen </text><text class="terminal-4198725382-r2" x="597.8" y="312.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-12)">(</text><text class="terminal-4198725382-r1" x="610" y="312.8" textLength="97.6" clip-path="url(#terminal-4198725382-line-12)">default:</text><text class="terminal-4198725382-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-12)"> -</text><text class="terminal-4198725382-r1" x="0" y="337.2" textLength="573.4" clip-path="url(#terminal-4198725382-line-13)">                        cz_conventional_commits</text><text class="terminal-4198725382-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-13)">)</text><text class="terminal-4198725382-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-13)"> -</text><text class="terminal-4198725382-r1" x="0" y="361.6" textLength="427" clip-path="url(#terminal-4198725382-line-14)">  -nr NO_RAISE, --no-raise NO_RAISE</text><text class="terminal-4198725382-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-14)"> -</text><text class="terminal-4198725382-r1" x="0" y="386" textLength="902.8" clip-path="url(#terminal-4198725382-line-15)">                        comma separated error codes that won't rise error,</text><text class="terminal-4198725382-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-4198725382-line-15)"> -</text><text class="terminal-4198725382-r1" x="0" y="410.4" textLength="439.2" clip-path="url(#terminal-4198725382-line-16)">                        e.g: cz -nr </text><text class="terminal-4198725382-r5" x="439.2" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">1</text><text class="terminal-4198725382-r1" x="451.4" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">,</text><text class="terminal-4198725382-r5" x="463.6" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">2</text><text class="terminal-4198725382-r1" x="475.8" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">,</text><text class="terminal-4198725382-r5" x="488" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">3</text><text class="terminal-4198725382-r1" x="500.2" y="410.4" textLength="231.8" clip-path="url(#terminal-4198725382-line-16)"> bump. See codes at</text><text class="terminal-4198725382-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)"> -</text><text class="terminal-4198725382-r4" x="292.8" y="434.8" textLength="231.8" clip-path="url(#terminal-4198725382-line-17)">https://commitizen-</text><text class="terminal-4198725382-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-17)"> -</text><text class="terminal-4198725382-r1" x="0" y="459.2" textLength="756.4" clip-path="url(#terminal-4198725382-line-18)">                        tools.github.io/commitizen/exit_codes/</text><text class="terminal-4198725382-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-18)"> -</text><text class="terminal-4198725382-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-19)"> -</text><text class="terminal-4198725382-r1" x="0" y="508" textLength="109.8" clip-path="url(#terminal-4198725382-line-20)">commands:</text><text class="terminal-4198725382-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-4198725382-line-20)"> -</text><text class="terminal-4198725382-r2" x="24.4" y="532.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-21)">{</text><text class="terminal-4198725382-r1" x="36.6" y="532.4" textLength="829.6" clip-path="url(#terminal-4198725382-line-21)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-4198725382-r2" x="866.2" y="532.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-21)">}</text><text class="terminal-4198725382-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-21)"> -</text><text class="terminal-4198725382-r1" x="0" y="556.8" textLength="646.6" clip-path="url(#terminal-4198725382-line-22)">    init                init commitizen configuration</text><text class="terminal-4198725382-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-22)"> -</text><text class="terminal-4198725382-r1" x="0" y="581.2" textLength="134.2" clip-path="url(#terminal-4198725382-line-23)">    commit </text><text class="terminal-4198725382-r2" x="134.2" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)">(</text><text class="terminal-4198725382-r1" x="146.4" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)">c</text><text class="terminal-4198725382-r2" x="158.6" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)">)</text><text class="terminal-4198725382-r1" x="170.8" y="581.2" textLength="329.4" clip-path="url(#terminal-4198725382-line-23)">          create new commit</text><text class="terminal-4198725382-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)"> -</text><text class="terminal-4198725382-r1" x="0" y="605.6" textLength="610" clip-path="url(#terminal-4198725382-line-24)">    ls                  show available commitizens</text><text class="terminal-4198725382-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-24)"> -</text><text class="terminal-4198725382-r1" x="0" y="630" textLength="524.6" clip-path="url(#terminal-4198725382-line-25)">    example             show commit example</text><text class="terminal-4198725382-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-4198725382-line-25)"> -</text><text class="terminal-4198725382-r1" x="0" y="654.4" textLength="646.6" clip-path="url(#terminal-4198725382-line-26)">    info                show information about the cz</text><text class="terminal-4198725382-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-26)"> -</text><text class="terminal-4198725382-r1" x="0" y="678.8" textLength="512.4" clip-path="url(#terminal-4198725382-line-27)">    schema              show commit schema</text><text class="terminal-4198725382-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-27)"> -</text><text class="terminal-4198725382-r1" x="0" y="703.2" textLength="805.2" clip-path="url(#terminal-4198725382-line-28)">    bump                bump semantic version based on the git log</text><text class="terminal-4198725382-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-28)"> -</text><text class="terminal-4198725382-r1" x="0" y="727.6" textLength="170.8" clip-path="url(#terminal-4198725382-line-29)">    changelog </text><text class="terminal-4198725382-r2" x="170.8" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)">(</text><text class="terminal-4198725382-r1" x="183" y="727.6" textLength="24.4" clip-path="url(#terminal-4198725382-line-29)">ch</text><text class="terminal-4198725382-r2" x="207.4" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)">)</text><text class="terminal-4198725382-r1" x="219.6" y="727.6" textLength="305" clip-path="url(#terminal-4198725382-line-29)">      generate changelog </text><text class="terminal-4198725382-r2" x="524.6" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)">(</text><text class="terminal-4198725382-r1" x="536.8" y="727.6" textLength="329.4" clip-path="url(#terminal-4198725382-line-29)">note that it will overwrite</text><text class="terminal-4198725382-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)"> -</text><text class="terminal-4198725382-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-4198725382-line-30)">                        existing file</text><text class="terminal-4198725382-r2" x="451.4" y="752" textLength="12.2" clip-path="url(#terminal-4198725382-line-30)">)</text><text class="terminal-4198725382-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-4198725382-line-30)"> -</text><text class="terminal-4198725382-r1" x="0" y="776.4" textLength="951.6" clip-path="url(#terminal-4198725382-line-31)">    check               validates that a commit message matches the commitizen</text><text class="terminal-4198725382-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-31)"> -</text><text class="terminal-4198725382-r1" x="0" y="800.8" textLength="366" clip-path="url(#terminal-4198725382-line-32)">                        schema</text><text class="terminal-4198725382-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-32)"> -</text><text class="terminal-4198725382-r1" x="0" y="825.2" textLength="902.8" clip-path="url(#terminal-4198725382-line-33)">    version             get the version of the installed commitizen or the</text><text class="terminal-4198725382-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-33)"> -</text><text class="terminal-4198725382-r1" x="0" y="849.6" textLength="488" clip-path="url(#terminal-4198725382-line-34)">                        current project </text><text class="terminal-4198725382-r2" x="488" y="849.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-34)">(</text><text class="terminal-4198725382-r1" x="500.2" y="849.6" textLength="353.8" clip-path="url(#terminal-4198725382-line-34)">default: installed commitizen</text><text class="terminal-4198725382-r2" x="854" y="849.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-34)">)</text><text class="terminal-4198725382-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-34)"> -</text><text class="terminal-4198725382-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-4198725382-line-35)"> + <g class="terminal-2205183093-matrix"> + <text class="terminal-2205183093-r1" x="0" y="20" textLength="134.2" clip-path="url(#terminal-2205183093-line-0)">$ cz --help</text><text class="terminal-2205183093-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2205183093-line-0)"> +</text><text class="terminal-2205183093-r1" x="0" y="44.4" textLength="122" clip-path="url(#terminal-2205183093-line-1)">usage: cz </text><text class="terminal-2205183093-r2" x="122" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="134.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2205183093-line-1)">-h</text><text class="terminal-2205183093-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="195.2" y="44.4" textLength="183" clip-path="url(#terminal-2205183093-line-1)">--config CONFIG</text><text class="terminal-2205183093-r2" x="378.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="402.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="414.8" y="44.4" textLength="85.4" clip-path="url(#terminal-2205183093-line-1)">--debug</text><text class="terminal-2205183093-r2" x="500.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="536.8" y="44.4" textLength="85.4" clip-path="url(#terminal-2205183093-line-1)">-n NAME</text><text class="terminal-2205183093-r2" x="622.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="646.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="658.8" y="44.4" textLength="146.4" clip-path="url(#terminal-2205183093-line-1)">-nr NO_RAISE</text><text class="terminal-2205183093-r2" x="805.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)"> +</text><text class="terminal-2205183093-r2" x="122" y="68.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-2)">{</text><text class="terminal-2205183093-r1" x="134.2" y="68.8" textLength="829.6" clip-path="url(#terminal-2205183093-line-2)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-2205183093-r2" x="963.8" y="68.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-2)">}</text><text class="terminal-2205183093-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-2)"> +</text><text class="terminal-2205183093-r3" x="0" y="93.2" textLength="36.6" clip-path="url(#terminal-2205183093-line-3)">...</text><text class="terminal-2205183093-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-3)"> +</text><text class="terminal-2205183093-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-4)"> +</text><text class="terminal-2205183093-r1" x="0" y="142" textLength="707.6" clip-path="url(#terminal-2205183093-line-5)">Commitizen is a cli tool to generate conventional commits.</text><text class="terminal-2205183093-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2205183093-line-5)"> +</text><text class="terminal-2205183093-r1" x="0" y="166.4" textLength="524.6" clip-path="url(#terminal-2205183093-line-6)">For more information about the topic go to </text><text class="terminal-2205183093-r4" x="524.6" y="166.4" textLength="390.4" clip-path="url(#terminal-2205183093-line-6)">https://conventionalcommits.org/</text><text class="terminal-2205183093-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-6)"> +</text><text class="terminal-2205183093-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-7)"> +</text><text class="terminal-2205183093-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-2205183093-line-8)">options:</text><text class="terminal-2205183093-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-8)"> +</text><text class="terminal-2205183093-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-2205183093-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-2205183093-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-9)"> +</text><text class="terminal-2205183093-r1" x="0" y="264" textLength="658.8" clip-path="url(#terminal-2205183093-line-10)">  --config CONFIG       the path of configuration file</text><text class="terminal-2205183093-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2205183093-line-10)"> +</text><text class="terminal-2205183093-r1" x="0" y="288.4" textLength="463.6" clip-path="url(#terminal-2205183093-line-11)">  --debug               use debug mode</text><text class="terminal-2205183093-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-11)"> +</text><text class="terminal-2205183093-r1" x="0" y="312.8" textLength="597.8" clip-path="url(#terminal-2205183093-line-12)">  -n, --name NAME       use the given commitizen </text><text class="terminal-2205183093-r2" x="597.8" y="312.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-12)">(</text><text class="terminal-2205183093-r1" x="610" y="312.8" textLength="97.6" clip-path="url(#terminal-2205183093-line-12)">default:</text><text class="terminal-2205183093-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-12)"> +</text><text class="terminal-2205183093-r1" x="0" y="337.2" textLength="573.4" clip-path="url(#terminal-2205183093-line-13)">                        cz_conventional_commits</text><text class="terminal-2205183093-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-13)">)</text><text class="terminal-2205183093-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-13)"> +</text><text class="terminal-2205183093-r1" x="0" y="361.6" textLength="317.2" clip-path="url(#terminal-2205183093-line-14)">  -nr, --no-raise NO_RAISE</text><text class="terminal-2205183093-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-14)"> +</text><text class="terminal-2205183093-r1" x="0" y="386" textLength="902.8" clip-path="url(#terminal-2205183093-line-15)">                        comma separated error codes that won't rise error,</text><text class="terminal-2205183093-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2205183093-line-15)"> +</text><text class="terminal-2205183093-r1" x="0" y="410.4" textLength="439.2" clip-path="url(#terminal-2205183093-line-16)">                        e.g: cz -nr </text><text class="terminal-2205183093-r5" x="439.2" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">1</text><text class="terminal-2205183093-r1" x="451.4" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">,</text><text class="terminal-2205183093-r5" x="463.6" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">2</text><text class="terminal-2205183093-r1" x="475.8" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">,</text><text class="terminal-2205183093-r5" x="488" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">3</text><text class="terminal-2205183093-r1" x="500.2" y="410.4" textLength="231.8" clip-path="url(#terminal-2205183093-line-16)"> bump. See codes at</text><text class="terminal-2205183093-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)"> +</text><text class="terminal-2205183093-r4" x="292.8" y="434.8" textLength="231.8" clip-path="url(#terminal-2205183093-line-17)">https://commitizen-</text><text class="terminal-2205183093-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-17)"> +</text><text class="terminal-2205183093-r1" x="0" y="459.2" textLength="756.4" clip-path="url(#terminal-2205183093-line-18)">                        tools.github.io/commitizen/exit_codes/</text><text class="terminal-2205183093-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-18)"> +</text><text class="terminal-2205183093-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-19)"> +</text><text class="terminal-2205183093-r1" x="0" y="508" textLength="109.8" clip-path="url(#terminal-2205183093-line-20)">commands:</text><text class="terminal-2205183093-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2205183093-line-20)"> +</text><text class="terminal-2205183093-r2" x="24.4" y="532.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-21)">{</text><text class="terminal-2205183093-r1" x="36.6" y="532.4" textLength="829.6" clip-path="url(#terminal-2205183093-line-21)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-2205183093-r2" x="866.2" y="532.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-21)">}</text><text class="terminal-2205183093-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-21)"> +</text><text class="terminal-2205183093-r1" x="0" y="556.8" textLength="646.6" clip-path="url(#terminal-2205183093-line-22)">    init                init commitizen configuration</text><text class="terminal-2205183093-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-22)"> +</text><text class="terminal-2205183093-r1" x="0" y="581.2" textLength="134.2" clip-path="url(#terminal-2205183093-line-23)">    commit </text><text class="terminal-2205183093-r2" x="134.2" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)">(</text><text class="terminal-2205183093-r1" x="146.4" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)">c</text><text class="terminal-2205183093-r2" x="158.6" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)">)</text><text class="terminal-2205183093-r1" x="170.8" y="581.2" textLength="329.4" clip-path="url(#terminal-2205183093-line-23)">          create new commit</text><text class="terminal-2205183093-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)"> +</text><text class="terminal-2205183093-r1" x="0" y="605.6" textLength="610" clip-path="url(#terminal-2205183093-line-24)">    ls                  show available commitizens</text><text class="terminal-2205183093-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-24)"> +</text><text class="terminal-2205183093-r1" x="0" y="630" textLength="524.6" clip-path="url(#terminal-2205183093-line-25)">    example             show commit example</text><text class="terminal-2205183093-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2205183093-line-25)"> +</text><text class="terminal-2205183093-r1" x="0" y="654.4" textLength="646.6" clip-path="url(#terminal-2205183093-line-26)">    info                show information about the cz</text><text class="terminal-2205183093-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-26)"> +</text><text class="terminal-2205183093-r1" x="0" y="678.8" textLength="512.4" clip-path="url(#terminal-2205183093-line-27)">    schema              show commit schema</text><text class="terminal-2205183093-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-27)"> +</text><text class="terminal-2205183093-r1" x="0" y="703.2" textLength="805.2" clip-path="url(#terminal-2205183093-line-28)">    bump                bump semantic version based on the git log</text><text class="terminal-2205183093-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-28)"> +</text><text class="terminal-2205183093-r1" x="0" y="727.6" textLength="170.8" clip-path="url(#terminal-2205183093-line-29)">    changelog </text><text class="terminal-2205183093-r2" x="170.8" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)">(</text><text class="terminal-2205183093-r1" x="183" y="727.6" textLength="24.4" clip-path="url(#terminal-2205183093-line-29)">ch</text><text class="terminal-2205183093-r2" x="207.4" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)">)</text><text class="terminal-2205183093-r1" x="219.6" y="727.6" textLength="305" clip-path="url(#terminal-2205183093-line-29)">      generate changelog </text><text class="terminal-2205183093-r2" x="524.6" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)">(</text><text class="terminal-2205183093-r1" x="536.8" y="727.6" textLength="329.4" clip-path="url(#terminal-2205183093-line-29)">note that it will overwrite</text><text class="terminal-2205183093-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)"> +</text><text class="terminal-2205183093-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-2205183093-line-30)">                        existing file</text><text class="terminal-2205183093-r2" x="451.4" y="752" textLength="12.2" clip-path="url(#terminal-2205183093-line-30)">)</text><text class="terminal-2205183093-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-2205183093-line-30)"> +</text><text class="terminal-2205183093-r1" x="0" y="776.4" textLength="951.6" clip-path="url(#terminal-2205183093-line-31)">    check               validates that a commit message matches the commitizen</text><text class="terminal-2205183093-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-31)"> +</text><text class="terminal-2205183093-r1" x="0" y="800.8" textLength="366" clip-path="url(#terminal-2205183093-line-32)">                        schema</text><text class="terminal-2205183093-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-32)"> +</text><text class="terminal-2205183093-r1" x="0" y="825.2" textLength="902.8" clip-path="url(#terminal-2205183093-line-33)">    version             get the version of the installed commitizen or the</text><text class="terminal-2205183093-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-33)"> +</text><text class="terminal-2205183093-r1" x="0" y="849.6" textLength="488" clip-path="url(#terminal-2205183093-line-34)">                        current project </text><text class="terminal-2205183093-r2" x="488" y="849.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-34)">(</text><text class="terminal-2205183093-r1" x="500.2" y="849.6" textLength="353.8" clip-path="url(#terminal-2205183093-line-34)">default: installed commitizen</text><text class="terminal-2205183093-r2" x="854" y="849.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-34)">)</text><text class="terminal-2205183093-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-34)"> +</text><text class="terminal-2205183093-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-2205183093-line-35)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_bump___help.svg b/docs/images/cli_help/cz_bump___help.svg index 7af2aa8c27..4030b1ba90 100644 --- a/docs/images/cli_help/cz_bump___help.svg +++ b/docs/images/cli_help/cz_bump___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 2050.8" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 2026.3999999999999" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,366 +19,362 @@ font-weight: 700; } - .terminal-440648439-matrix { + .terminal-3254289243-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-440648439-title { + .terminal-3254289243-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-440648439-r1 { fill: #c5c8c6 } -.terminal-440648439-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-440648439-r3 { fill: #68a0b3;font-weight: bold } -.terminal-440648439-r4 { fill: #98a84b } + .terminal-3254289243-r1 { fill: #c5c8c6 } +.terminal-3254289243-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-3254289243-r3 { fill: #68a0b3;font-weight: bold } +.terminal-3254289243-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-440648439-clip-terminal"> - <rect x="0" y="0" width="975.0" height="1999.8" /> + <clipPath id="terminal-3254289243-clip-terminal"> + <rect x="0" y="0" width="975.0" height="1975.3999999999999" /> </clipPath> - <clipPath id="terminal-440648439-line-0"> + <clipPath id="terminal-3254289243-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-1"> +<clipPath id="terminal-3254289243-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-2"> +<clipPath id="terminal-3254289243-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-3"> +<clipPath id="terminal-3254289243-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-4"> +<clipPath id="terminal-3254289243-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-5"> +<clipPath id="terminal-3254289243-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-6"> +<clipPath id="terminal-3254289243-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-7"> +<clipPath id="terminal-3254289243-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-8"> +<clipPath id="terminal-3254289243-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-9"> +<clipPath id="terminal-3254289243-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-10"> +<clipPath id="terminal-3254289243-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-11"> +<clipPath id="terminal-3254289243-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-12"> +<clipPath id="terminal-3254289243-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-13"> +<clipPath id="terminal-3254289243-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-14"> +<clipPath id="terminal-3254289243-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-15"> +<clipPath id="terminal-3254289243-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-16"> +<clipPath id="terminal-3254289243-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-17"> +<clipPath id="terminal-3254289243-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-18"> +<clipPath id="terminal-3254289243-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-19"> +<clipPath id="terminal-3254289243-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-20"> +<clipPath id="terminal-3254289243-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-21"> +<clipPath id="terminal-3254289243-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-22"> +<clipPath id="terminal-3254289243-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-23"> +<clipPath id="terminal-3254289243-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-24"> +<clipPath id="terminal-3254289243-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-25"> +<clipPath id="terminal-3254289243-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-26"> +<clipPath id="terminal-3254289243-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-27"> +<clipPath id="terminal-3254289243-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-28"> +<clipPath id="terminal-3254289243-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-29"> +<clipPath id="terminal-3254289243-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-30"> +<clipPath id="terminal-3254289243-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-31"> +<clipPath id="terminal-3254289243-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-32"> +<clipPath id="terminal-3254289243-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-33"> +<clipPath id="terminal-3254289243-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-34"> +<clipPath id="terminal-3254289243-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-35"> +<clipPath id="terminal-3254289243-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-36"> +<clipPath id="terminal-3254289243-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-37"> +<clipPath id="terminal-3254289243-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-38"> +<clipPath id="terminal-3254289243-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-39"> +<clipPath id="terminal-3254289243-line-39"> <rect x="0" y="953.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-40"> +<clipPath id="terminal-3254289243-line-40"> <rect x="0" y="977.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-41"> +<clipPath id="terminal-3254289243-line-41"> <rect x="0" y="1001.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-42"> +<clipPath id="terminal-3254289243-line-42"> <rect x="0" y="1026.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-43"> +<clipPath id="terminal-3254289243-line-43"> <rect x="0" y="1050.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-44"> +<clipPath id="terminal-3254289243-line-44"> <rect x="0" y="1075.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-45"> +<clipPath id="terminal-3254289243-line-45"> <rect x="0" y="1099.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-46"> +<clipPath id="terminal-3254289243-line-46"> <rect x="0" y="1123.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-47"> +<clipPath id="terminal-3254289243-line-47"> <rect x="0" y="1148.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-48"> +<clipPath id="terminal-3254289243-line-48"> <rect x="0" y="1172.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-49"> +<clipPath id="terminal-3254289243-line-49"> <rect x="0" y="1197.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-50"> +<clipPath id="terminal-3254289243-line-50"> <rect x="0" y="1221.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-51"> +<clipPath id="terminal-3254289243-line-51"> <rect x="0" y="1245.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-52"> +<clipPath id="terminal-3254289243-line-52"> <rect x="0" y="1270.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-53"> +<clipPath id="terminal-3254289243-line-53"> <rect x="0" y="1294.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-54"> +<clipPath id="terminal-3254289243-line-54"> <rect x="0" y="1319.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-55"> +<clipPath id="terminal-3254289243-line-55"> <rect x="0" y="1343.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-56"> +<clipPath id="terminal-3254289243-line-56"> <rect x="0" y="1367.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-57"> +<clipPath id="terminal-3254289243-line-57"> <rect x="0" y="1392.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-58"> +<clipPath id="terminal-3254289243-line-58"> <rect x="0" y="1416.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-59"> +<clipPath id="terminal-3254289243-line-59"> <rect x="0" y="1441.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-60"> +<clipPath id="terminal-3254289243-line-60"> <rect x="0" y="1465.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-61"> +<clipPath id="terminal-3254289243-line-61"> <rect x="0" y="1489.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-62"> +<clipPath id="terminal-3254289243-line-62"> <rect x="0" y="1514.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-63"> +<clipPath id="terminal-3254289243-line-63"> <rect x="0" y="1538.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-64"> +<clipPath id="terminal-3254289243-line-64"> <rect x="0" y="1563.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-65"> +<clipPath id="terminal-3254289243-line-65"> <rect x="0" y="1587.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-66"> +<clipPath id="terminal-3254289243-line-66"> <rect x="0" y="1611.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-67"> +<clipPath id="terminal-3254289243-line-67"> <rect x="0" y="1636.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-68"> +<clipPath id="terminal-3254289243-line-68"> <rect x="0" y="1660.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-69"> +<clipPath id="terminal-3254289243-line-69"> <rect x="0" y="1685.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-70"> +<clipPath id="terminal-3254289243-line-70"> <rect x="0" y="1709.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-71"> +<clipPath id="terminal-3254289243-line-71"> <rect x="0" y="1733.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-72"> +<clipPath id="terminal-3254289243-line-72"> <rect x="0" y="1758.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-73"> +<clipPath id="terminal-3254289243-line-73"> <rect x="0" y="1782.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-74"> +<clipPath id="terminal-3254289243-line-74"> <rect x="0" y="1807.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-75"> +<clipPath id="terminal-3254289243-line-75"> <rect x="0" y="1831.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-76"> +<clipPath id="terminal-3254289243-line-76"> <rect x="0" y="1855.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-77"> +<clipPath id="terminal-3254289243-line-77"> <rect x="0" y="1880.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-78"> +<clipPath id="terminal-3254289243-line-78"> <rect x="0" y="1904.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-79"> +<clipPath id="terminal-3254289243-line-79"> <rect x="0" y="1929.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-440648439-line-80"> - <rect x="0" y="1953.5" width="976" height="24.65"/> - </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="2048.8" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="2024.4" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-440648439-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-3254289243-clip-terminal)"> - <g class="terminal-440648439-matrix"> - <text class="terminal-440648439-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-440648439-line-0)">$ cz bump --help</text><text class="terminal-440648439-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-440648439-line-0)"> -</text><text class="terminal-440648439-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-440648439-line-1)">usage: cz bump </text><text class="terminal-440648439-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">[</text><text class="terminal-440648439-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-440648439-line-1)">-h</text><text class="terminal-440648439-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">]</text><text class="terminal-440648439-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">[</text><text class="terminal-440648439-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-440648439-line-1)">--dry-run</text><text class="terminal-440648439-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">]</text><text class="terminal-440648439-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">[</text><text class="terminal-440648439-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-440648439-line-1)">--files-only</text><text class="terminal-440648439-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">]</text><text class="terminal-440648439-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">[</text><text class="terminal-440648439-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-440648439-line-1)">--local-version</text><text class="terminal-440648439-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">]</text><text class="terminal-440648439-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">[</text><text class="terminal-440648439-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-440648439-line-1)">--changelog</text><text class="terminal-440648439-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)">]</text><text class="terminal-440648439-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-440648439-line-1)"> -</text><text class="terminal-440648439-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)">[</text><text class="terminal-440648439-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-440648439-line-2)">--no-verify</text><text class="terminal-440648439-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)">]</text><text class="terminal-440648439-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)">[</text><text class="terminal-440648439-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-440648439-line-2)">--yes</text><text class="terminal-440648439-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)">]</text><text class="terminal-440648439-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)">[</text><text class="terminal-440648439-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-440648439-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-440648439-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)">]</text><text class="terminal-440648439-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-440648439-line-2)"> -</text><text class="terminal-440648439-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)">[</text><text class="terminal-440648439-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-440648439-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-440648439-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)">]</text><text class="terminal-440648439-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)">[</text><text class="terminal-440648439-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-440648439-line-3)">--prerelease </text><text class="terminal-440648439-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)">{</text><text class="terminal-440648439-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-440648439-line-3)">alpha,beta,rc</text><text class="terminal-440648439-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)">}</text><text class="terminal-440648439-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)">]</text><text class="terminal-440648439-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-440648439-line-3)"> -</text><text class="terminal-440648439-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)">[</text><text class="terminal-440648439-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-440648439-line-4)">--devrelease DEVRELEASE</text><text class="terminal-440648439-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)">]</text><text class="terminal-440648439-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)">[</text><text class="terminal-440648439-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-440648439-line-4)">--increment </text><text class="terminal-440648439-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)">{</text><text class="terminal-440648439-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-440648439-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-440648439-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)">}</text><text class="terminal-440648439-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)">]</text><text class="terminal-440648439-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-440648439-line-4)"> -</text><text class="terminal-440648439-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)">[</text><text class="terminal-440648439-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-440648439-line-5)">--increment-mode </text><text class="terminal-440648439-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)">{</text><text class="terminal-440648439-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-440648439-line-5)">linear,exact</text><text class="terminal-440648439-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)">}</text><text class="terminal-440648439-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)">]</text><text class="terminal-440648439-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)">[</text><text class="terminal-440648439-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-440648439-line-5)">--check-consistency</text><text class="terminal-440648439-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)">]</text><text class="terminal-440648439-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-440648439-line-5)"> -</text><text class="terminal-440648439-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-440648439-line-6)">[</text><text class="terminal-440648439-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-440648439-line-6)">--annotated-tag</text><text class="terminal-440648439-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-440648439-line-6)">]</text><text class="terminal-440648439-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-440648439-line-6)"> -</text><text class="terminal-440648439-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-440648439-line-7)">[</text><text class="terminal-440648439-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-440648439-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-440648439-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-440648439-line-7)">]</text><text class="terminal-440648439-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-440648439-line-7)">[</text><text class="terminal-440648439-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-440648439-line-7)">--gpg-sign</text><text class="terminal-440648439-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-440648439-line-7)">]</text><text class="terminal-440648439-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-440648439-line-7)"> -</text><text class="terminal-440648439-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)">[</text><text class="terminal-440648439-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-440648439-line-8)">--changelog-to-stdout</text><text class="terminal-440648439-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)">]</text><text class="terminal-440648439-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)">[</text><text class="terminal-440648439-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-440648439-line-8)">--git-output-to-stderr</text><text class="terminal-440648439-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)">]</text><text class="terminal-440648439-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)">[</text><text class="terminal-440648439-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-440648439-line-8)">--retry</text><text class="terminal-440648439-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)">]</text><text class="terminal-440648439-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-440648439-line-8)"> -</text><text class="terminal-440648439-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)">[</text><text class="terminal-440648439-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-440648439-line-9)">--major-version-zero</text><text class="terminal-440648439-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)">]</text><text class="terminal-440648439-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)">[</text><text class="terminal-440648439-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-440648439-line-9)">--template TEMPLATE</text><text class="terminal-440648439-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)">]</text><text class="terminal-440648439-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)">[</text><text class="terminal-440648439-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-440648439-line-9)">--extra EXTRA</text><text class="terminal-440648439-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)">]</text><text class="terminal-440648439-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-440648439-line-9)"> -</text><text class="terminal-440648439-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-440648439-line-10)">[</text><text class="terminal-440648439-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-440648439-line-10)">--file-name FILE_NAME</text><text class="terminal-440648439-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-440648439-line-10)">]</text><text class="terminal-440648439-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-440648439-line-10)">[</text><text class="terminal-440648439-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-440648439-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-440648439-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-440648439-line-10)">]</text><text class="terminal-440648439-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-440648439-line-10)"> -</text><text class="terminal-440648439-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-440648439-line-11)">[</text><text class="terminal-440648439-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-440648439-line-11)">--version-scheme </text><text class="terminal-440648439-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-440648439-line-11)">{</text><text class="terminal-440648439-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-440648439-line-11)">pep440,semver,semver2</text><text class="terminal-440648439-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-440648439-line-11)">}</text><text class="terminal-440648439-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-440648439-line-11)">]</text><text class="terminal-440648439-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-440648439-line-11)"> -</text><text class="terminal-440648439-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-440648439-line-12)">[</text><text class="terminal-440648439-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-440648439-line-12)">--version-type </text><text class="terminal-440648439-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-440648439-line-12)">{</text><text class="terminal-440648439-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-440648439-line-12)">pep440,semver,semver2</text><text class="terminal-440648439-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-440648439-line-12)">}</text><text class="terminal-440648439-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-440648439-line-12)">]</text><text class="terminal-440648439-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-440648439-line-12)"> -</text><text class="terminal-440648439-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-440648439-line-13)">[</text><text class="terminal-440648439-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-440648439-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-440648439-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-440648439-line-13)">]</text><text class="terminal-440648439-r2" x="597.8" y="337.2" textLength="12.2" clip-path="url(#terminal-440648439-line-13)">[</text><text class="terminal-440648439-r1" x="610" y="337.2" textLength="122" clip-path="url(#terminal-440648439-line-13)">--get-next</text><text class="terminal-440648439-r2" x="732" y="337.2" textLength="12.2" clip-path="url(#terminal-440648439-line-13)">]</text><text class="terminal-440648439-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-440648439-line-13)"> -</text><text class="terminal-440648439-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-440648439-line-14)">[</text><text class="terminal-440648439-r1" x="195.2" y="361.6" textLength="170.8" clip-path="url(#terminal-440648439-line-14)">MANUAL_VERSION</text><text class="terminal-440648439-r2" x="366" y="361.6" textLength="12.2" clip-path="url(#terminal-440648439-line-14)">]</text><text class="terminal-440648439-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-440648439-line-14)"> -</text><text class="terminal-440648439-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-440648439-line-15)"> -</text><text class="terminal-440648439-r1" x="0" y="410.4" textLength="512.4" clip-path="url(#terminal-440648439-line-16)">bump semantic version based on the git log</text><text class="terminal-440648439-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-440648439-line-16)"> -</text><text class="terminal-440648439-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-440648439-line-17)"> -</text><text class="terminal-440648439-r1" x="0" y="459.2" textLength="256.2" clip-path="url(#terminal-440648439-line-18)">positional arguments:</text><text class="terminal-440648439-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-440648439-line-18)"> -</text><text class="terminal-440648439-r1" x="0" y="483.6" textLength="610" clip-path="url(#terminal-440648439-line-19)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-440648439-r2" x="610" y="483.6" textLength="12.2" clip-path="url(#terminal-440648439-line-19)">(</text><text class="terminal-440648439-r1" x="622.2" y="483.6" textLength="61" clip-path="url(#terminal-440648439-line-19)">e.g: </text><text class="terminal-440648439-r3" x="683.2" y="483.6" textLength="36.6" clip-path="url(#terminal-440648439-line-19)">1.5</text><text class="terminal-440648439-r1" x="719.8" y="483.6" textLength="12.2" clip-path="url(#terminal-440648439-line-19)">.</text><text class="terminal-440648439-r3" x="732" y="483.6" textLength="12.2" clip-path="url(#terminal-440648439-line-19)">3</text><text class="terminal-440648439-r2" x="744.2" y="483.6" textLength="12.2" clip-path="url(#terminal-440648439-line-19)">)</text><text class="terminal-440648439-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-440648439-line-19)"> -</text><text class="terminal-440648439-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-440648439-line-20)"> -</text><text class="terminal-440648439-r1" x="0" y="532.4" textLength="97.6" clip-path="url(#terminal-440648439-line-21)">options:</text><text class="terminal-440648439-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-440648439-line-21)"> -</text><text class="terminal-440648439-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-440648439-line-22)">  -h, --help            show this help message and exit</text><text class="terminal-440648439-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-440648439-line-22)"> -</text><text class="terminal-440648439-r1" x="0" y="581.2" textLength="915" clip-path="url(#terminal-440648439-line-23)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-440648439-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-440648439-line-23)"> -</text><text class="terminal-440648439-r1" x="0" y="605.6" textLength="793" clip-path="url(#terminal-440648439-line-24)">  --files-only          bump version in the files from the config</text><text class="terminal-440648439-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-440648439-line-24)"> -</text><text class="terminal-440648439-r1" x="0" y="630" textLength="719.8" clip-path="url(#terminal-440648439-line-25)">  --local-version       bump only the local version portion</text><text class="terminal-440648439-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-440648439-line-25)"> -</text><text class="terminal-440648439-r1" x="0" y="654.4" textLength="841.8" clip-path="url(#terminal-440648439-line-26)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-440648439-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-440648439-line-26)"> -</text><text class="terminal-440648439-r1" x="0" y="678.8" textLength="902.8" clip-path="url(#terminal-440648439-line-27)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-440648439-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-440648439-line-27)"> -</text><text class="terminal-440648439-r1" x="0" y="703.2" textLength="353.8" clip-path="url(#terminal-440648439-line-28)">                        hooks</text><text class="terminal-440648439-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-440648439-line-28)"> -</text><text class="terminal-440648439-r1" x="0" y="727.6" textLength="719.8" clip-path="url(#terminal-440648439-line-29)">  --yes                 accept automatically questions done</text><text class="terminal-440648439-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-440648439-line-29)"> -</text><text class="terminal-440648439-r1" x="0" y="752" textLength="305" clip-path="url(#terminal-440648439-line-30)">  --tag-format TAG_FORMAT</text><text class="terminal-440648439-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-440648439-line-30)"> -</text><text class="terminal-440648439-r1" x="0" y="776.4" textLength="939.4" clip-path="url(#terminal-440648439-line-31)">                        the format used to tag the commit and read it, use it</text><text class="terminal-440648439-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-440648439-line-31)"> -</text><text class="terminal-440648439-r1" x="0" y="800.8" textLength="866.2" clip-path="url(#terminal-440648439-line-32)">                        in existing projects, wrap around simple quotes</text><text class="terminal-440648439-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-440648439-line-32)"> -</text><text class="terminal-440648439-r1" x="0" y="825.2" textLength="353.8" clip-path="url(#terminal-440648439-line-33)">  --bump-message BUMP_MESSAGE</text><text class="terminal-440648439-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-440648439-line-33)"> -</text><text class="terminal-440648439-r1" x="0" y="849.6" textLength="902.8" clip-path="url(#terminal-440648439-line-34)">                        template used to create the release commit, useful</text><text class="terminal-440648439-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-440648439-line-34)"> -</text><text class="terminal-440648439-r1" x="0" y="874" textLength="536.8" clip-path="url(#terminal-440648439-line-35)">                        when working with CI</text><text class="terminal-440648439-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-440648439-line-35)"> -</text><text class="terminal-440648439-r1" x="0" y="898.4" textLength="183" clip-path="url(#terminal-440648439-line-36)">  --prerelease </text><text class="terminal-440648439-r2" x="183" y="898.4" textLength="12.2" clip-path="url(#terminal-440648439-line-36)">{</text><text class="terminal-440648439-r1" x="195.2" y="898.4" textLength="158.6" clip-path="url(#terminal-440648439-line-36)">alpha,beta,rc</text><text class="terminal-440648439-r2" x="353.8" y="898.4" textLength="12.2" clip-path="url(#terminal-440648439-line-36)">}</text><text class="terminal-440648439-r1" x="366" y="898.4" textLength="73.2" clip-path="url(#terminal-440648439-line-36)">, -pr </text><text class="terminal-440648439-r2" x="439.2" y="898.4" textLength="12.2" clip-path="url(#terminal-440648439-line-36)">{</text><text class="terminal-440648439-r1" x="451.4" y="898.4" textLength="158.6" clip-path="url(#terminal-440648439-line-36)">alpha,beta,rc</text><text class="terminal-440648439-r2" x="610" y="898.4" textLength="12.2" clip-path="url(#terminal-440648439-line-36)">}</text><text class="terminal-440648439-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-440648439-line-36)"> -</text><text class="terminal-440648439-r1" x="0" y="922.8" textLength="597.8" clip-path="url(#terminal-440648439-line-37)">                        choose type of prerelease</text><text class="terminal-440648439-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-440648439-line-37)"> -</text><text class="terminal-440648439-r1" x="0" y="947.2" textLength="488" clip-path="url(#terminal-440648439-line-38)">  --devrelease DEVRELEASE, -d DEVRELEASE</text><text class="terminal-440648439-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-440648439-line-38)"> -</text><text class="terminal-440648439-r1" x="0" y="971.6" textLength="841.8" clip-path="url(#terminal-440648439-line-39)">                        specify non-negative integer for dev. release</text><text class="terminal-440648439-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-440648439-line-39)"> -</text><text class="terminal-440648439-r1" x="0" y="996" textLength="170.8" clip-path="url(#terminal-440648439-line-40)">  --increment </text><text class="terminal-440648439-r2" x="170.8" y="996" textLength="12.2" clip-path="url(#terminal-440648439-line-40)">{</text><text class="terminal-440648439-r1" x="183" y="996" textLength="207.4" clip-path="url(#terminal-440648439-line-40)">MAJOR,MINOR,PATCH</text><text class="terminal-440648439-r2" x="390.4" y="996" textLength="12.2" clip-path="url(#terminal-440648439-line-40)">}</text><text class="terminal-440648439-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-440648439-line-40)"> -</text><text class="terminal-440648439-r1" x="0" y="1020.4" textLength="756.4" clip-path="url(#terminal-440648439-line-41)">                        manually specify the desired increment</text><text class="terminal-440648439-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-440648439-line-41)"> -</text><text class="terminal-440648439-r1" x="0" y="1044.8" textLength="231.8" clip-path="url(#terminal-440648439-line-42)">  --increment-mode </text><text class="terminal-440648439-r2" x="231.8" y="1044.8" textLength="12.2" clip-path="url(#terminal-440648439-line-42)">{</text><text class="terminal-440648439-r1" x="244" y="1044.8" textLength="146.4" clip-path="url(#terminal-440648439-line-42)">linear,exact</text><text class="terminal-440648439-r2" x="390.4" y="1044.8" textLength="12.2" clip-path="url(#terminal-440648439-line-42)">}</text><text class="terminal-440648439-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-440648439-line-42)"> -</text><text class="terminal-440648439-r1" x="0" y="1069.2" textLength="902.8" clip-path="url(#terminal-440648439-line-43)">                        set the method by which the new version is chosen.</text><text class="terminal-440648439-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-440648439-line-43)"> -</text><text class="terminal-440648439-r4" x="292.8" y="1093.6" textLength="97.6" clip-path="url(#terminal-440648439-line-44)">'linear'</text><text class="terminal-440648439-r2" x="402.6" y="1093.6" textLength="12.2" clip-path="url(#terminal-440648439-line-44)">(</text><text class="terminal-440648439-r1" x="414.8" y="1093.6" textLength="85.4" clip-path="url(#terminal-440648439-line-44)">default</text><text class="terminal-440648439-r2" x="500.2" y="1093.6" textLength="12.2" clip-path="url(#terminal-440648439-line-44)">)</text><text class="terminal-440648439-r1" x="512.4" y="1093.6" textLength="414.8" clip-path="url(#terminal-440648439-line-44)"> guesses the next version based on</text><text class="terminal-440648439-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-440648439-line-44)"> -</text><text class="terminal-440648439-r1" x="0" y="1118" textLength="939.4" clip-path="url(#terminal-440648439-line-45)">                        typical linear version progression, such that bumping</text><text class="terminal-440648439-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-440648439-line-45)"> -</text><text class="terminal-440648439-r1" x="0" y="1142.4" textLength="866.2" clip-path="url(#terminal-440648439-line-46)">                        of a pre-release with lower precedence than the</text><text class="terminal-440648439-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-440648439-line-46)"> -</text><text class="terminal-440648439-r1" x="0" y="1166.8" textLength="939.4" clip-path="url(#terminal-440648439-line-47)">                        current pre-release phase maintains the current phase</text><text class="terminal-440648439-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-440648439-line-47)"> -</text><text class="terminal-440648439-r1" x="0" y="1191.2" textLength="561.2" clip-path="url(#terminal-440648439-line-48)">                        of higher precedence. </text><text class="terminal-440648439-r4" x="561.2" y="1191.2" textLength="85.4" clip-path="url(#terminal-440648439-line-48)">'exact'</text><text class="terminal-440648439-r1" x="646.6" y="1191.2" textLength="305" clip-path="url(#terminal-440648439-line-48)"> applies the changes that</text><text class="terminal-440648439-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-440648439-line-48)"> -</text><text class="terminal-440648439-r1" x="0" y="1215.6" textLength="536.8" clip-path="url(#terminal-440648439-line-49)">                        have been specified </text><text class="terminal-440648439-r2" x="536.8" y="1215.6" textLength="12.2" clip-path="url(#terminal-440648439-line-49)">(</text><text class="terminal-440648439-r1" x="549" y="1215.6" textLength="353.8" clip-path="url(#terminal-440648439-line-49)">or determined from the commit</text><text class="terminal-440648439-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-440648439-line-49)"> -</text><text class="terminal-440648439-r1" x="0" y="1240" textLength="329.4" clip-path="url(#terminal-440648439-line-50)">                        log</text><text class="terminal-440648439-r2" x="329.4" y="1240" textLength="12.2" clip-path="url(#terminal-440648439-line-50)">)</text><text class="terminal-440648439-r1" x="341.6" y="1240" textLength="585.6" clip-path="url(#terminal-440648439-line-50)"> without interpretation, such that the increment</text><text class="terminal-440648439-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-440648439-line-50)"> -</text><text class="terminal-440648439-r1" x="0" y="1264.4" textLength="707.6" clip-path="url(#terminal-440648439-line-51)">                        and pre-release are always honored</text><text class="terminal-440648439-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-440648439-line-51)"> -</text><text class="terminal-440648439-r1" x="0" y="1288.8" textLength="317.2" clip-path="url(#terminal-440648439-line-52)">  --check-consistency, -cc</text><text class="terminal-440648439-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-440648439-line-52)"> -</text><text class="terminal-440648439-r1" x="0" y="1313.2" textLength="951.6" clip-path="url(#terminal-440648439-line-53)">                        check consistency among versions defined in commitizen</text><text class="terminal-440648439-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-440648439-line-53)"> -</text><text class="terminal-440648439-r1" x="0" y="1337.6" textLength="671" clip-path="url(#terminal-440648439-line-54)">                        configuration and version_files</text><text class="terminal-440648439-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-440648439-line-54)"> -</text><text class="terminal-440648439-r1" x="0" y="1362" textLength="866.2" clip-path="url(#terminal-440648439-line-55)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-440648439-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-440648439-line-55)"> -</text><text class="terminal-440648439-r1" x="0" y="1386.4" textLength="915" clip-path="url(#terminal-440648439-line-56)">  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-440648439-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-440648439-line-56)"> -</text><text class="terminal-440648439-r1" x="0" y="1410.8" textLength="634.4" clip-path="url(#terminal-440648439-line-57)">                        create annotated tag message</text><text class="terminal-440648439-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-440648439-line-57)"> -</text><text class="terminal-440648439-r1" x="0" y="1435.2" textLength="719.8" clip-path="url(#terminal-440648439-line-58)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-440648439-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-440648439-line-58)"> -</text><text class="terminal-440648439-r1" x="0" y="1459.6" textLength="280.6" clip-path="url(#terminal-440648439-line-59)">  --changelog-to-stdout</text><text class="terminal-440648439-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-440648439-line-59)"> -</text><text class="terminal-440648439-r1" x="0" y="1484" textLength="658.8" clip-path="url(#terminal-440648439-line-60)">                        Output changelog to the stdout</text><text class="terminal-440648439-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-440648439-line-60)"> -</text><text class="terminal-440648439-r1" x="0" y="1508.4" textLength="292.8" clip-path="url(#terminal-440648439-line-61)">  --git-output-to-stderr</text><text class="terminal-440648439-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-440648439-line-61)"> -</text><text class="terminal-440648439-r1" x="0" y="1532.8" textLength="646.6" clip-path="url(#terminal-440648439-line-62)">                        Redirect git output to stderr</text><text class="terminal-440648439-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-440648439-line-62)"> -</text><text class="terminal-440648439-r1" x="0" y="1557.2" textLength="744.2" clip-path="url(#terminal-440648439-line-63)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-440648439-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-440648439-line-63)"> -</text><text class="terminal-440648439-r1" x="0" y="1581.6" textLength="939.4" clip-path="url(#terminal-440648439-line-64)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-440648439-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-440648439-line-64)"> -</text><text class="terminal-440648439-r1" x="0" y="1606" textLength="414.8" clip-path="url(#terminal-440648439-line-65)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-440648439-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-440648439-line-65)"> -</text><text class="terminal-440648439-r1" x="0" y="1630.4" textLength="646.6" clip-path="url(#terminal-440648439-line-66)">                        changelog template file name </text><text class="terminal-440648439-r2" x="646.6" y="1630.4" textLength="12.2" clip-path="url(#terminal-440648439-line-66)">(</text><text class="terminal-440648439-r1" x="658.8" y="1630.4" textLength="280.6" clip-path="url(#terminal-440648439-line-66)">relative to the current</text><text class="terminal-440648439-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-440648439-line-66)"> -</text><text class="terminal-440648439-r1" x="0" y="1654.8" textLength="500.2" clip-path="url(#terminal-440648439-line-67)">                        working directory</text><text class="terminal-440648439-r2" x="500.2" y="1654.8" textLength="12.2" clip-path="url(#terminal-440648439-line-67)">)</text><text class="terminal-440648439-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-440648439-line-67)"> -</text><text class="terminal-440648439-r1" x="0" y="1679.2" textLength="305" clip-path="url(#terminal-440648439-line-68)">  --extra EXTRA, -e EXTRA</text><text class="terminal-440648439-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-440648439-line-68)"> -</text><text class="terminal-440648439-r1" x="0" y="1703.6" textLength="622.2" clip-path="url(#terminal-440648439-line-69)">                        a changelog extra variable </text><text class="terminal-440648439-r2" x="622.2" y="1703.6" textLength="12.2" clip-path="url(#terminal-440648439-line-69)">(</text><text class="terminal-440648439-r1" x="634.4" y="1703.6" textLength="146.4" clip-path="url(#terminal-440648439-line-69)">in the form </text><text class="terminal-440648439-r4" x="780.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-440648439-line-69)">'</text><text class="terminal-440648439-r4" x="793" y="1703.6" textLength="36.6" clip-path="url(#terminal-440648439-line-69)">key</text><text class="terminal-440648439-r4" x="829.6" y="1703.6" textLength="12.2" clip-path="url(#terminal-440648439-line-69)">=</text><text class="terminal-440648439-r4" x="841.8" y="1703.6" textLength="61" clip-path="url(#terminal-440648439-line-69)">value</text><text class="terminal-440648439-r4" x="902.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-440648439-line-69)">'</text><text class="terminal-440648439-r2" x="915" y="1703.6" textLength="12.2" clip-path="url(#terminal-440648439-line-69)">)</text><text class="terminal-440648439-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-440648439-line-69)"> -</text><text class="terminal-440648439-r1" x="0" y="1728" textLength="280.6" clip-path="url(#terminal-440648439-line-70)">  --file-name FILE_NAME</text><text class="terminal-440648439-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-440648439-line-70)"> -</text><text class="terminal-440648439-r1" x="0" y="1752.4" textLength="573.4" clip-path="url(#terminal-440648439-line-71)">                        file name of changelog </text><text class="terminal-440648439-r2" x="573.4" y="1752.4" textLength="12.2" clip-path="url(#terminal-440648439-line-71)">(</text><text class="terminal-440648439-r1" x="585.6" y="1752.4" textLength="109.8" clip-path="url(#terminal-440648439-line-71)">default: </text><text class="terminal-440648439-r4" x="695.4" y="1752.4" textLength="170.8" clip-path="url(#terminal-440648439-line-71)">'CHANGELOG.md'</text><text class="terminal-440648439-r2" x="866.2" y="1752.4" textLength="12.2" clip-path="url(#terminal-440648439-line-71)">)</text><text class="terminal-440648439-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-440648439-line-71)"> -</text><text class="terminal-440648439-r1" x="0" y="1776.8" textLength="475.8" clip-path="url(#terminal-440648439-line-72)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-440648439-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-440648439-line-72)"> -</text><text class="terminal-440648439-r1" x="0" y="1801.2" textLength="719.8" clip-path="url(#terminal-440648439-line-73)">                        start pre-releases with this offset</text><text class="terminal-440648439-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-440648439-line-73)"> -</text><text class="terminal-440648439-r1" x="0" y="1825.6" textLength="231.8" clip-path="url(#terminal-440648439-line-74)">  --version-scheme </text><text class="terminal-440648439-r2" x="231.8" y="1825.6" textLength="12.2" clip-path="url(#terminal-440648439-line-74)">{</text><text class="terminal-440648439-r1" x="244" y="1825.6" textLength="256.2" clip-path="url(#terminal-440648439-line-74)">pep440,semver,semver2</text><text class="terminal-440648439-r2" x="500.2" y="1825.6" textLength="12.2" clip-path="url(#terminal-440648439-line-74)">}</text><text class="terminal-440648439-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-440648439-line-74)"> -</text><text class="terminal-440648439-r1" x="0" y="1850" textLength="549" clip-path="url(#terminal-440648439-line-75)">                        choose version scheme</text><text class="terminal-440648439-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-440648439-line-75)"> -</text><text class="terminal-440648439-r1" x="0" y="1874.4" textLength="207.4" clip-path="url(#terminal-440648439-line-76)">  --version-type </text><text class="terminal-440648439-r2" x="207.4" y="1874.4" textLength="12.2" clip-path="url(#terminal-440648439-line-76)">{</text><text class="terminal-440648439-r1" x="219.6" y="1874.4" textLength="256.2" clip-path="url(#terminal-440648439-line-76)">pep440,semver,semver2</text><text class="terminal-440648439-r2" x="475.8" y="1874.4" textLength="12.2" clip-path="url(#terminal-440648439-line-76)">}</text><text class="terminal-440648439-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-440648439-line-76)"> -</text><text class="terminal-440648439-r1" x="0" y="1898.8" textLength="683.2" clip-path="url(#terminal-440648439-line-77)">                        Deprecated, use --version-scheme</text><text class="terminal-440648439-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-440648439-line-77)"> -</text><text class="terminal-440648439-r1" x="0" y="1923.2" textLength="402.6" clip-path="url(#terminal-440648439-line-78)">  --build-metadata BUILD_METADATA</text><text class="terminal-440648439-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-440648439-line-78)"> -</text><text class="terminal-440648439-r1" x="0" y="1947.6" textLength="915" clip-path="url(#terminal-440648439-line-79)">                        Add additional build-metadata to the version-number</text><text class="terminal-440648439-r1" x="976" y="1947.6" textLength="12.2" clip-path="url(#terminal-440648439-line-79)"> -</text><text class="terminal-440648439-r1" x="0" y="1972" textLength="854" clip-path="url(#terminal-440648439-line-80)">  --get-next            Determine the next version and write to stdout</text><text class="terminal-440648439-r1" x="976" y="1972" textLength="12.2" clip-path="url(#terminal-440648439-line-80)"> -</text><text class="terminal-440648439-r1" x="976" y="1996.4" textLength="12.2" clip-path="url(#terminal-440648439-line-81)"> + <g class="terminal-3254289243-matrix"> + <text class="terminal-3254289243-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-3254289243-line-0)">$ cz bump --help</text><text class="terminal-3254289243-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3254289243-line-0)"> +</text><text class="terminal-3254289243-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-3254289243-line-1)">usage: cz bump </text><text class="terminal-3254289243-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">[</text><text class="terminal-3254289243-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-3254289243-line-1)">-h</text><text class="terminal-3254289243-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">]</text><text class="terminal-3254289243-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">[</text><text class="terminal-3254289243-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-3254289243-line-1)">--dry-run</text><text class="terminal-3254289243-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">]</text><text class="terminal-3254289243-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">[</text><text class="terminal-3254289243-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-3254289243-line-1)">--files-only</text><text class="terminal-3254289243-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">]</text><text class="terminal-3254289243-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">[</text><text class="terminal-3254289243-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-3254289243-line-1)">--local-version</text><text class="terminal-3254289243-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">]</text><text class="terminal-3254289243-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">[</text><text class="terminal-3254289243-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-3254289243-line-1)">--changelog</text><text class="terminal-3254289243-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">]</text><text class="terminal-3254289243-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)"> +</text><text class="terminal-3254289243-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)">[</text><text class="terminal-3254289243-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-3254289243-line-2)">--no-verify</text><text class="terminal-3254289243-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)">]</text><text class="terminal-3254289243-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)">[</text><text class="terminal-3254289243-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-3254289243-line-2)">--yes</text><text class="terminal-3254289243-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)">]</text><text class="terminal-3254289243-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)">[</text><text class="terminal-3254289243-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-3254289243-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-3254289243-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)">]</text><text class="terminal-3254289243-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)"> +</text><text class="terminal-3254289243-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)">[</text><text class="terminal-3254289243-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-3254289243-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-3254289243-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)">]</text><text class="terminal-3254289243-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)">[</text><text class="terminal-3254289243-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-3254289243-line-3)">--prerelease </text><text class="terminal-3254289243-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)">{</text><text class="terminal-3254289243-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-3254289243-line-3)">alpha,beta,rc</text><text class="terminal-3254289243-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)">}</text><text class="terminal-3254289243-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)">]</text><text class="terminal-3254289243-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)"> +</text><text class="terminal-3254289243-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)">[</text><text class="terminal-3254289243-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-3254289243-line-4)">--devrelease DEVRELEASE</text><text class="terminal-3254289243-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)">]</text><text class="terminal-3254289243-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)">[</text><text class="terminal-3254289243-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-3254289243-line-4)">--increment </text><text class="terminal-3254289243-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)">{</text><text class="terminal-3254289243-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-3254289243-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-3254289243-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)">}</text><text class="terminal-3254289243-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)">]</text><text class="terminal-3254289243-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)"> +</text><text class="terminal-3254289243-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)">[</text><text class="terminal-3254289243-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-3254289243-line-5)">--increment-mode </text><text class="terminal-3254289243-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)">{</text><text class="terminal-3254289243-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-3254289243-line-5)">linear,exact</text><text class="terminal-3254289243-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)">}</text><text class="terminal-3254289243-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)">]</text><text class="terminal-3254289243-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)">[</text><text class="terminal-3254289243-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-3254289243-line-5)">--check-consistency</text><text class="terminal-3254289243-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)">]</text><text class="terminal-3254289243-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)"> +</text><text class="terminal-3254289243-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-6)">[</text><text class="terminal-3254289243-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-3254289243-line-6)">--annotated-tag</text><text class="terminal-3254289243-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-6)">]</text><text class="terminal-3254289243-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-6)"> +</text><text class="terminal-3254289243-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-7)">[</text><text class="terminal-3254289243-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-3254289243-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-3254289243-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-7)">]</text><text class="terminal-3254289243-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-7)">[</text><text class="terminal-3254289243-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-3254289243-line-7)">--gpg-sign</text><text class="terminal-3254289243-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-7)">]</text><text class="terminal-3254289243-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-7)"> +</text><text class="terminal-3254289243-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)">[</text><text class="terminal-3254289243-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-3254289243-line-8)">--changelog-to-stdout</text><text class="terminal-3254289243-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)">]</text><text class="terminal-3254289243-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)">[</text><text class="terminal-3254289243-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-3254289243-line-8)">--git-output-to-stderr</text><text class="terminal-3254289243-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)">]</text><text class="terminal-3254289243-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)">[</text><text class="terminal-3254289243-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-3254289243-line-8)">--retry</text><text class="terminal-3254289243-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)">]</text><text class="terminal-3254289243-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)"> +</text><text class="terminal-3254289243-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)">[</text><text class="terminal-3254289243-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-3254289243-line-9)">--major-version-zero</text><text class="terminal-3254289243-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)">]</text><text class="terminal-3254289243-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)">[</text><text class="terminal-3254289243-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-3254289243-line-9)">--template TEMPLATE</text><text class="terminal-3254289243-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)">]</text><text class="terminal-3254289243-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)">[</text><text class="terminal-3254289243-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-3254289243-line-9)">--extra EXTRA</text><text class="terminal-3254289243-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)">]</text><text class="terminal-3254289243-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)"> +</text><text class="terminal-3254289243-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-3254289243-line-10)">[</text><text class="terminal-3254289243-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-3254289243-line-10)">--file-name FILE_NAME</text><text class="terminal-3254289243-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-3254289243-line-10)">]</text><text class="terminal-3254289243-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-3254289243-line-10)">[</text><text class="terminal-3254289243-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-3254289243-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-3254289243-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-3254289243-line-10)">]</text><text class="terminal-3254289243-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3254289243-line-10)"> +</text><text class="terminal-3254289243-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-11)">[</text><text class="terminal-3254289243-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-3254289243-line-11)">--version-scheme </text><text class="terminal-3254289243-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-11)">{</text><text class="terminal-3254289243-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-3254289243-line-11)">pep440,semver,semver2</text><text class="terminal-3254289243-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-11)">}</text><text class="terminal-3254289243-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-11)">]</text><text class="terminal-3254289243-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-11)"> +</text><text class="terminal-3254289243-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-12)">[</text><text class="terminal-3254289243-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-3254289243-line-12)">--version-type </text><text class="terminal-3254289243-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-12)">{</text><text class="terminal-3254289243-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-3254289243-line-12)">pep440,semver,semver2</text><text class="terminal-3254289243-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-12)">}</text><text class="terminal-3254289243-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-12)">]</text><text class="terminal-3254289243-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-12)"> +</text><text class="terminal-3254289243-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-13)">[</text><text class="terminal-3254289243-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-3254289243-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-3254289243-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-13)">]</text><text class="terminal-3254289243-r2" x="597.8" y="337.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-13)">[</text><text class="terminal-3254289243-r1" x="610" y="337.2" textLength="122" clip-path="url(#terminal-3254289243-line-13)">--get-next</text><text class="terminal-3254289243-r2" x="732" y="337.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-13)">]</text><text class="terminal-3254289243-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-13)"> +</text><text class="terminal-3254289243-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-14)">[</text><text class="terminal-3254289243-r1" x="195.2" y="361.6" textLength="170.8" clip-path="url(#terminal-3254289243-line-14)">MANUAL_VERSION</text><text class="terminal-3254289243-r2" x="366" y="361.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-14)">]</text><text class="terminal-3254289243-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-14)"> +</text><text class="terminal-3254289243-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3254289243-line-15)"> +</text><text class="terminal-3254289243-r1" x="0" y="410.4" textLength="512.4" clip-path="url(#terminal-3254289243-line-16)">bump semantic version based on the git log</text><text class="terminal-3254289243-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-16)"> +</text><text class="terminal-3254289243-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-17)"> +</text><text class="terminal-3254289243-r1" x="0" y="459.2" textLength="256.2" clip-path="url(#terminal-3254289243-line-18)">positional arguments:</text><text class="terminal-3254289243-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-18)"> +</text><text class="terminal-3254289243-r1" x="0" y="483.6" textLength="610" clip-path="url(#terminal-3254289243-line-19)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-3254289243-r2" x="610" y="483.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-19)">(</text><text class="terminal-3254289243-r1" x="622.2" y="483.6" textLength="61" clip-path="url(#terminal-3254289243-line-19)">e.g: </text><text class="terminal-3254289243-r3" x="683.2" y="483.6" textLength="36.6" clip-path="url(#terminal-3254289243-line-19)">1.5</text><text class="terminal-3254289243-r1" x="719.8" y="483.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-19)">.</text><text class="terminal-3254289243-r3" x="732" y="483.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-19)">3</text><text class="terminal-3254289243-r2" x="744.2" y="483.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-19)">)</text><text class="terminal-3254289243-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-19)"> +</text><text class="terminal-3254289243-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3254289243-line-20)"> +</text><text class="terminal-3254289243-r1" x="0" y="532.4" textLength="97.6" clip-path="url(#terminal-3254289243-line-21)">options:</text><text class="terminal-3254289243-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-21)"> +</text><text class="terminal-3254289243-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-3254289243-line-22)">  -h, --help            show this help message and exit</text><text class="terminal-3254289243-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-22)"> +</text><text class="terminal-3254289243-r1" x="0" y="581.2" textLength="915" clip-path="url(#terminal-3254289243-line-23)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-3254289243-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-23)"> +</text><text class="terminal-3254289243-r1" x="0" y="605.6" textLength="793" clip-path="url(#terminal-3254289243-line-24)">  --files-only          bump version in the files from the config</text><text class="terminal-3254289243-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-24)"> +</text><text class="terminal-3254289243-r1" x="0" y="630" textLength="719.8" clip-path="url(#terminal-3254289243-line-25)">  --local-version       bump only the local version portion</text><text class="terminal-3254289243-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-3254289243-line-25)"> +</text><text class="terminal-3254289243-r1" x="0" y="654.4" textLength="841.8" clip-path="url(#terminal-3254289243-line-26)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-3254289243-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-26)"> +</text><text class="terminal-3254289243-r1" x="0" y="678.8" textLength="902.8" clip-path="url(#terminal-3254289243-line-27)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-3254289243-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-27)"> +</text><text class="terminal-3254289243-r1" x="0" y="703.2" textLength="353.8" clip-path="url(#terminal-3254289243-line-28)">                        hooks</text><text class="terminal-3254289243-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-28)"> +</text><text class="terminal-3254289243-r1" x="0" y="727.6" textLength="719.8" clip-path="url(#terminal-3254289243-line-29)">  --yes                 accept automatically questions done</text><text class="terminal-3254289243-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-29)"> +</text><text class="terminal-3254289243-r1" x="0" y="752" textLength="305" clip-path="url(#terminal-3254289243-line-30)">  --tag-format TAG_FORMAT</text><text class="terminal-3254289243-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-3254289243-line-30)"> +</text><text class="terminal-3254289243-r1" x="0" y="776.4" textLength="939.4" clip-path="url(#terminal-3254289243-line-31)">                        the format used to tag the commit and read it, use it</text><text class="terminal-3254289243-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-31)"> +</text><text class="terminal-3254289243-r1" x="0" y="800.8" textLength="866.2" clip-path="url(#terminal-3254289243-line-32)">                        in existing projects, wrap around simple quotes</text><text class="terminal-3254289243-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-32)"> +</text><text class="terminal-3254289243-r1" x="0" y="825.2" textLength="353.8" clip-path="url(#terminal-3254289243-line-33)">  --bump-message BUMP_MESSAGE</text><text class="terminal-3254289243-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-33)"> +</text><text class="terminal-3254289243-r1" x="0" y="849.6" textLength="902.8" clip-path="url(#terminal-3254289243-line-34)">                        template used to create the release commit, useful</text><text class="terminal-3254289243-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-34)"> +</text><text class="terminal-3254289243-r1" x="0" y="874" textLength="536.8" clip-path="url(#terminal-3254289243-line-35)">                        when working with CI</text><text class="terminal-3254289243-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-3254289243-line-35)"> +</text><text class="terminal-3254289243-r1" x="0" y="898.4" textLength="244" clip-path="url(#terminal-3254289243-line-36)">  --prerelease, -pr </text><text class="terminal-3254289243-r2" x="244" y="898.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-36)">{</text><text class="terminal-3254289243-r1" x="256.2" y="898.4" textLength="158.6" clip-path="url(#terminal-3254289243-line-36)">alpha,beta,rc</text><text class="terminal-3254289243-r2" x="414.8" y="898.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-36)">}</text><text class="terminal-3254289243-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-36)"> +</text><text class="terminal-3254289243-r1" x="0" y="922.8" textLength="597.8" clip-path="url(#terminal-3254289243-line-37)">                        choose type of prerelease</text><text class="terminal-3254289243-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-37)"> +</text><text class="terminal-3254289243-r1" x="0" y="947.2" textLength="353.8" clip-path="url(#terminal-3254289243-line-38)">  --devrelease, -d DEVRELEASE</text><text class="terminal-3254289243-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-38)"> +</text><text class="terminal-3254289243-r1" x="0" y="971.6" textLength="841.8" clip-path="url(#terminal-3254289243-line-39)">                        specify non-negative integer for dev. release</text><text class="terminal-3254289243-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-39)"> +</text><text class="terminal-3254289243-r1" x="0" y="996" textLength="170.8" clip-path="url(#terminal-3254289243-line-40)">  --increment </text><text class="terminal-3254289243-r2" x="170.8" y="996" textLength="12.2" clip-path="url(#terminal-3254289243-line-40)">{</text><text class="terminal-3254289243-r1" x="183" y="996" textLength="207.4" clip-path="url(#terminal-3254289243-line-40)">MAJOR,MINOR,PATCH</text><text class="terminal-3254289243-r2" x="390.4" y="996" textLength="12.2" clip-path="url(#terminal-3254289243-line-40)">}</text><text class="terminal-3254289243-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-3254289243-line-40)"> +</text><text class="terminal-3254289243-r1" x="0" y="1020.4" textLength="756.4" clip-path="url(#terminal-3254289243-line-41)">                        manually specify the desired increment</text><text class="terminal-3254289243-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-41)"> +</text><text class="terminal-3254289243-r1" x="0" y="1044.8" textLength="231.8" clip-path="url(#terminal-3254289243-line-42)">  --increment-mode </text><text class="terminal-3254289243-r2" x="231.8" y="1044.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-42)">{</text><text class="terminal-3254289243-r1" x="244" y="1044.8" textLength="146.4" clip-path="url(#terminal-3254289243-line-42)">linear,exact</text><text class="terminal-3254289243-r2" x="390.4" y="1044.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-42)">}</text><text class="terminal-3254289243-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-42)"> +</text><text class="terminal-3254289243-r1" x="0" y="1069.2" textLength="902.8" clip-path="url(#terminal-3254289243-line-43)">                        set the method by which the new version is chosen.</text><text class="terminal-3254289243-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-43)"> +</text><text class="terminal-3254289243-r4" x="292.8" y="1093.6" textLength="97.6" clip-path="url(#terminal-3254289243-line-44)">'linear'</text><text class="terminal-3254289243-r2" x="402.6" y="1093.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-44)">(</text><text class="terminal-3254289243-r1" x="414.8" y="1093.6" textLength="85.4" clip-path="url(#terminal-3254289243-line-44)">default</text><text class="terminal-3254289243-r2" x="500.2" y="1093.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-44)">)</text><text class="terminal-3254289243-r1" x="512.4" y="1093.6" textLength="414.8" clip-path="url(#terminal-3254289243-line-44)"> guesses the next version based on</text><text class="terminal-3254289243-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-44)"> +</text><text class="terminal-3254289243-r1" x="0" y="1118" textLength="939.4" clip-path="url(#terminal-3254289243-line-45)">                        typical linear version progression, such that bumping</text><text class="terminal-3254289243-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-3254289243-line-45)"> +</text><text class="terminal-3254289243-r1" x="0" y="1142.4" textLength="866.2" clip-path="url(#terminal-3254289243-line-46)">                        of a pre-release with lower precedence than the</text><text class="terminal-3254289243-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-46)"> +</text><text class="terminal-3254289243-r1" x="0" y="1166.8" textLength="939.4" clip-path="url(#terminal-3254289243-line-47)">                        current pre-release phase maintains the current phase</text><text class="terminal-3254289243-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-47)"> +</text><text class="terminal-3254289243-r1" x="0" y="1191.2" textLength="561.2" clip-path="url(#terminal-3254289243-line-48)">                        of higher precedence. </text><text class="terminal-3254289243-r4" x="561.2" y="1191.2" textLength="85.4" clip-path="url(#terminal-3254289243-line-48)">'exact'</text><text class="terminal-3254289243-r1" x="646.6" y="1191.2" textLength="305" clip-path="url(#terminal-3254289243-line-48)"> applies the changes that</text><text class="terminal-3254289243-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-48)"> +</text><text class="terminal-3254289243-r1" x="0" y="1215.6" textLength="536.8" clip-path="url(#terminal-3254289243-line-49)">                        have been specified </text><text class="terminal-3254289243-r2" x="536.8" y="1215.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-49)">(</text><text class="terminal-3254289243-r1" x="549" y="1215.6" textLength="353.8" clip-path="url(#terminal-3254289243-line-49)">or determined from the commit</text><text class="terminal-3254289243-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-49)"> +</text><text class="terminal-3254289243-r1" x="0" y="1240" textLength="329.4" clip-path="url(#terminal-3254289243-line-50)">                        log</text><text class="terminal-3254289243-r2" x="329.4" y="1240" textLength="12.2" clip-path="url(#terminal-3254289243-line-50)">)</text><text class="terminal-3254289243-r1" x="341.6" y="1240" textLength="585.6" clip-path="url(#terminal-3254289243-line-50)"> without interpretation, such that the increment</text><text class="terminal-3254289243-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-3254289243-line-50)"> +</text><text class="terminal-3254289243-r1" x="0" y="1264.4" textLength="707.6" clip-path="url(#terminal-3254289243-line-51)">                        and pre-release are always honored</text><text class="terminal-3254289243-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-51)"> +</text><text class="terminal-3254289243-r1" x="0" y="1288.8" textLength="317.2" clip-path="url(#terminal-3254289243-line-52)">  --check-consistency, -cc</text><text class="terminal-3254289243-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-52)"> +</text><text class="terminal-3254289243-r1" x="0" y="1313.2" textLength="951.6" clip-path="url(#terminal-3254289243-line-53)">                        check consistency among versions defined in commitizen</text><text class="terminal-3254289243-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-53)"> +</text><text class="terminal-3254289243-r1" x="0" y="1337.6" textLength="671" clip-path="url(#terminal-3254289243-line-54)">                        configuration and version_files</text><text class="terminal-3254289243-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-54)"> +</text><text class="terminal-3254289243-r1" x="0" y="1362" textLength="866.2" clip-path="url(#terminal-3254289243-line-55)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-3254289243-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-3254289243-line-55)"> +</text><text class="terminal-3254289243-r1" x="0" y="1386.4" textLength="646.6" clip-path="url(#terminal-3254289243-line-56)">  --annotated-tag-message, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-3254289243-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-56)"> +</text><text class="terminal-3254289243-r1" x="0" y="1410.8" textLength="634.4" clip-path="url(#terminal-3254289243-line-57)">                        create annotated tag message</text><text class="terminal-3254289243-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-57)"> +</text><text class="terminal-3254289243-r1" x="0" y="1435.2" textLength="719.8" clip-path="url(#terminal-3254289243-line-58)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-3254289243-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-58)"> +</text><text class="terminal-3254289243-r1" x="0" y="1459.6" textLength="280.6" clip-path="url(#terminal-3254289243-line-59)">  --changelog-to-stdout</text><text class="terminal-3254289243-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-59)"> +</text><text class="terminal-3254289243-r1" x="0" y="1484" textLength="658.8" clip-path="url(#terminal-3254289243-line-60)">                        Output changelog to the stdout</text><text class="terminal-3254289243-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-3254289243-line-60)"> +</text><text class="terminal-3254289243-r1" x="0" y="1508.4" textLength="292.8" clip-path="url(#terminal-3254289243-line-61)">  --git-output-to-stderr</text><text class="terminal-3254289243-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-61)"> +</text><text class="terminal-3254289243-r1" x="0" y="1532.8" textLength="646.6" clip-path="url(#terminal-3254289243-line-62)">                        Redirect git output to stderr</text><text class="terminal-3254289243-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-62)"> +</text><text class="terminal-3254289243-r1" x="0" y="1557.2" textLength="744.2" clip-path="url(#terminal-3254289243-line-63)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-3254289243-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-63)"> +</text><text class="terminal-3254289243-r1" x="0" y="1581.6" textLength="939.4" clip-path="url(#terminal-3254289243-line-64)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-3254289243-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-64)"> +</text><text class="terminal-3254289243-r1" x="0" y="1606" textLength="305" clip-path="url(#terminal-3254289243-line-65)">  --template, -t TEMPLATE</text><text class="terminal-3254289243-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-3254289243-line-65)"> +</text><text class="terminal-3254289243-r1" x="0" y="1630.4" textLength="646.6" clip-path="url(#terminal-3254289243-line-66)">                        changelog template file name </text><text class="terminal-3254289243-r2" x="646.6" y="1630.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-66)">(</text><text class="terminal-3254289243-r1" x="658.8" y="1630.4" textLength="280.6" clip-path="url(#terminal-3254289243-line-66)">relative to the current</text><text class="terminal-3254289243-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-66)"> +</text><text class="terminal-3254289243-r1" x="0" y="1654.8" textLength="500.2" clip-path="url(#terminal-3254289243-line-67)">                        working directory</text><text class="terminal-3254289243-r2" x="500.2" y="1654.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-67)">)</text><text class="terminal-3254289243-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-67)"> +</text><text class="terminal-3254289243-r1" x="0" y="1679.2" textLength="622.2" clip-path="url(#terminal-3254289243-line-68)">  --extra, -e EXTRA     a changelog extra variable </text><text class="terminal-3254289243-r2" x="622.2" y="1679.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-68)">(</text><text class="terminal-3254289243-r1" x="634.4" y="1679.2" textLength="146.4" clip-path="url(#terminal-3254289243-line-68)">in the form </text><text class="terminal-3254289243-r4" x="780.8" y="1679.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-68)">'</text><text class="terminal-3254289243-r4" x="793" y="1679.2" textLength="36.6" clip-path="url(#terminal-3254289243-line-68)">key</text><text class="terminal-3254289243-r4" x="829.6" y="1679.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-68)">=</text><text class="terminal-3254289243-r4" x="841.8" y="1679.2" textLength="61" clip-path="url(#terminal-3254289243-line-68)">value</text><text class="terminal-3254289243-r4" x="902.8" y="1679.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-68)">'</text><text class="terminal-3254289243-r2" x="915" y="1679.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-68)">)</text><text class="terminal-3254289243-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-68)"> +</text><text class="terminal-3254289243-r1" x="0" y="1703.6" textLength="280.6" clip-path="url(#terminal-3254289243-line-69)">  --file-name FILE_NAME</text><text class="terminal-3254289243-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-69)"> +</text><text class="terminal-3254289243-r1" x="0" y="1728" textLength="573.4" clip-path="url(#terminal-3254289243-line-70)">                        file name of changelog </text><text class="terminal-3254289243-r2" x="573.4" y="1728" textLength="12.2" clip-path="url(#terminal-3254289243-line-70)">(</text><text class="terminal-3254289243-r1" x="585.6" y="1728" textLength="109.8" clip-path="url(#terminal-3254289243-line-70)">default: </text><text class="terminal-3254289243-r4" x="695.4" y="1728" textLength="170.8" clip-path="url(#terminal-3254289243-line-70)">'CHANGELOG.md'</text><text class="terminal-3254289243-r2" x="866.2" y="1728" textLength="12.2" clip-path="url(#terminal-3254289243-line-70)">)</text><text class="terminal-3254289243-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-3254289243-line-70)"> +</text><text class="terminal-3254289243-r1" x="0" y="1752.4" textLength="475.8" clip-path="url(#terminal-3254289243-line-71)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-3254289243-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-71)"> +</text><text class="terminal-3254289243-r1" x="0" y="1776.8" textLength="719.8" clip-path="url(#terminal-3254289243-line-72)">                        start pre-releases with this offset</text><text class="terminal-3254289243-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-72)"> +</text><text class="terminal-3254289243-r1" x="0" y="1801.2" textLength="231.8" clip-path="url(#terminal-3254289243-line-73)">  --version-scheme </text><text class="terminal-3254289243-r2" x="231.8" y="1801.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-73)">{</text><text class="terminal-3254289243-r1" x="244" y="1801.2" textLength="256.2" clip-path="url(#terminal-3254289243-line-73)">pep440,semver,semver2</text><text class="terminal-3254289243-r2" x="500.2" y="1801.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-73)">}</text><text class="terminal-3254289243-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-73)"> +</text><text class="terminal-3254289243-r1" x="0" y="1825.6" textLength="549" clip-path="url(#terminal-3254289243-line-74)">                        choose version scheme</text><text class="terminal-3254289243-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-74)"> +</text><text class="terminal-3254289243-r1" x="0" y="1850" textLength="207.4" clip-path="url(#terminal-3254289243-line-75)">  --version-type </text><text class="terminal-3254289243-r2" x="207.4" y="1850" textLength="12.2" clip-path="url(#terminal-3254289243-line-75)">{</text><text class="terminal-3254289243-r1" x="219.6" y="1850" textLength="256.2" clip-path="url(#terminal-3254289243-line-75)">pep440,semver,semver2</text><text class="terminal-3254289243-r2" x="475.8" y="1850" textLength="12.2" clip-path="url(#terminal-3254289243-line-75)">}</text><text class="terminal-3254289243-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-3254289243-line-75)"> +</text><text class="terminal-3254289243-r1" x="0" y="1874.4" textLength="683.2" clip-path="url(#terminal-3254289243-line-76)">                        Deprecated, use --version-scheme</text><text class="terminal-3254289243-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-76)"> +</text><text class="terminal-3254289243-r1" x="0" y="1898.8" textLength="402.6" clip-path="url(#terminal-3254289243-line-77)">  --build-metadata BUILD_METADATA</text><text class="terminal-3254289243-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-77)"> +</text><text class="terminal-3254289243-r1" x="0" y="1923.2" textLength="915" clip-path="url(#terminal-3254289243-line-78)">                        Add additional build-metadata to the version-number</text><text class="terminal-3254289243-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-78)"> +</text><text class="terminal-3254289243-r1" x="0" y="1947.6" textLength="854" clip-path="url(#terminal-3254289243-line-79)">  --get-next            Determine the next version and write to stdout</text><text class="terminal-3254289243-r1" x="976" y="1947.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-79)"> +</text><text class="terminal-3254289243-r1" x="976" y="1972" textLength="12.2" clip-path="url(#terminal-3254289243-line-80)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_changelog___help.svg b/docs/images/cli_help/cz_changelog___help.svg index 8cb3fcf2fe..1160ccf6cf 100644 --- a/docs/images/cli_help/cz_changelog___help.svg +++ b/docs/images/cli_help/cz_changelog___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 1074.8" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 1050.4" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,206 +19,202 @@ font-weight: 700; } - .terminal-2035912735-matrix { + .terminal-1106739011-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2035912735-title { + .terminal-1106739011-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2035912735-r1 { fill: #c5c8c6 } -.terminal-2035912735-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-2035912735-r3 { fill: #68a0b3;font-weight: bold } -.terminal-2035912735-r4 { fill: #98a84b } + .terminal-1106739011-r1 { fill: #c5c8c6 } +.terminal-1106739011-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-1106739011-r3 { fill: #68a0b3;font-weight: bold } +.terminal-1106739011-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-2035912735-clip-terminal"> - <rect x="0" y="0" width="975.0" height="1023.8" /> + <clipPath id="terminal-1106739011-clip-terminal"> + <rect x="0" y="0" width="975.0" height="999.4" /> </clipPath> - <clipPath id="terminal-2035912735-line-0"> + <clipPath id="terminal-1106739011-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-1"> +<clipPath id="terminal-1106739011-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-2"> +<clipPath id="terminal-1106739011-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-3"> +<clipPath id="terminal-1106739011-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-4"> +<clipPath id="terminal-1106739011-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-5"> +<clipPath id="terminal-1106739011-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-6"> +<clipPath id="terminal-1106739011-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-7"> +<clipPath id="terminal-1106739011-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-8"> +<clipPath id="terminal-1106739011-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-9"> +<clipPath id="terminal-1106739011-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-10"> +<clipPath id="terminal-1106739011-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-11"> +<clipPath id="terminal-1106739011-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-12"> +<clipPath id="terminal-1106739011-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-13"> +<clipPath id="terminal-1106739011-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-14"> +<clipPath id="terminal-1106739011-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-15"> +<clipPath id="terminal-1106739011-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-16"> +<clipPath id="terminal-1106739011-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-17"> +<clipPath id="terminal-1106739011-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-18"> +<clipPath id="terminal-1106739011-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-19"> +<clipPath id="terminal-1106739011-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-20"> +<clipPath id="terminal-1106739011-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-21"> +<clipPath id="terminal-1106739011-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-22"> +<clipPath id="terminal-1106739011-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-23"> +<clipPath id="terminal-1106739011-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-24"> +<clipPath id="terminal-1106739011-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-25"> +<clipPath id="terminal-1106739011-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-26"> +<clipPath id="terminal-1106739011-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-27"> +<clipPath id="terminal-1106739011-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-28"> +<clipPath id="terminal-1106739011-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-29"> +<clipPath id="terminal-1106739011-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-30"> +<clipPath id="terminal-1106739011-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-31"> +<clipPath id="terminal-1106739011-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-32"> +<clipPath id="terminal-1106739011-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-33"> +<clipPath id="terminal-1106739011-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-34"> +<clipPath id="terminal-1106739011-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-35"> +<clipPath id="terminal-1106739011-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-36"> +<clipPath id="terminal-1106739011-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-37"> +<clipPath id="terminal-1106739011-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-38"> +<clipPath id="terminal-1106739011-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-39"> +<clipPath id="terminal-1106739011-line-39"> <rect x="0" y="953.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-40"> - <rect x="0" y="977.5" width="976" height="24.65"/> - </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="1072.8" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="1048.4" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-2035912735-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1106739011-clip-terminal)"> - <g class="terminal-2035912735-matrix"> - <text class="terminal-2035912735-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-2035912735-line-0)">$ cz changelog --help</text><text class="terminal-2035912735-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2035912735-line-0)"> -</text><text class="terminal-2035912735-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-2035912735-line-1)">usage: cz changelog </text><text class="terminal-2035912735-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">[</text><text class="terminal-2035912735-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2035912735-line-1)">-h</text><text class="terminal-2035912735-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">]</text><text class="terminal-2035912735-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">[</text><text class="terminal-2035912735-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-2035912735-line-1)">--dry-run</text><text class="terminal-2035912735-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">]</text><text class="terminal-2035912735-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">[</text><text class="terminal-2035912735-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-2035912735-line-1)">--file-name FILE_NAME</text><text class="terminal-2035912735-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">]</text><text class="terminal-2035912735-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)"> -</text><text class="terminal-2035912735-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">[</text><text class="terminal-2035912735-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-2035912735-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-2035912735-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">]</text><text class="terminal-2035912735-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">[</text><text class="terminal-2035912735-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-2035912735-line-2)">--incremental</text><text class="terminal-2035912735-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">]</text><text class="terminal-2035912735-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)"> -</text><text class="terminal-2035912735-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">[</text><text class="terminal-2035912735-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-2035912735-line-3)">--start-rev START_REV</text><text class="terminal-2035912735-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">]</text><text class="terminal-2035912735-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">[</text><text class="terminal-2035912735-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-2035912735-line-3)">--merge-prerelease</text><text class="terminal-2035912735-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">]</text><text class="terminal-2035912735-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)"> -</text><text class="terminal-2035912735-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">[</text><text class="terminal-2035912735-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-2035912735-line-4)">--version-scheme </text><text class="terminal-2035912735-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">{</text><text class="terminal-2035912735-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-2035912735-line-4)">pep440,semver,semver2</text><text class="terminal-2035912735-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">}</text><text class="terminal-2035912735-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">]</text><text class="terminal-2035912735-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)"> -</text><text class="terminal-2035912735-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">[</text><text class="terminal-2035912735-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-2035912735-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-2035912735-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">]</text><text class="terminal-2035912735-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">[</text><text class="terminal-2035912735-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-2035912735-line-5)">--template TEMPLATE</text><text class="terminal-2035912735-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">]</text><text class="terminal-2035912735-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)"> -</text><text class="terminal-2035912735-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-6)">[</text><text class="terminal-2035912735-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-2035912735-line-6)">--extra EXTRA</text><text class="terminal-2035912735-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-6)">]</text><text class="terminal-2035912735-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-6)"> -</text><text class="terminal-2035912735-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-7)"> -</text><text class="terminal-2035912735-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-8)"> -</text><text class="terminal-2035912735-r1" x="0" y="239.6" textLength="231.8" clip-path="url(#terminal-2035912735-line-9)">generate changelog </text><text class="terminal-2035912735-r2" x="231.8" y="239.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-9)">(</text><text class="terminal-2035912735-r1" x="244" y="239.6" textLength="500.2" clip-path="url(#terminal-2035912735-line-9)">note that it will overwrite existing file</text><text class="terminal-2035912735-r2" x="744.2" y="239.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-9)">)</text><text class="terminal-2035912735-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-9)"> -</text><text class="terminal-2035912735-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2035912735-line-10)"> -</text><text class="terminal-2035912735-r1" x="0" y="288.4" textLength="256.2" clip-path="url(#terminal-2035912735-line-11)">positional arguments:</text><text class="terminal-2035912735-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-11)"> -</text><text class="terminal-2035912735-r1" x="0" y="312.8" textLength="805.2" clip-path="url(#terminal-2035912735-line-12)">  rev_range             generates changelog for the given version </text><text class="terminal-2035912735-r2" x="805.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">(</text><text class="terminal-2035912735-r1" x="817.4" y="312.8" textLength="61" clip-path="url(#terminal-2035912735-line-12)">e.g: </text><text class="terminal-2035912735-r3" x="878.4" y="312.8" textLength="36.6" clip-path="url(#terminal-2035912735-line-12)">1.5</text><text class="terminal-2035912735-r1" x="915" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">.</text><text class="terminal-2035912735-r3" x="927.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">3</text><text class="terminal-2035912735-r2" x="939.4" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">)</text><text class="terminal-2035912735-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)"> -</text><text class="terminal-2035912735-r1" x="0" y="337.2" textLength="500.2" clip-path="url(#terminal-2035912735-line-13)">                        or version range </text><text class="terminal-2035912735-r2" x="500.2" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">(</text><text class="terminal-2035912735-r1" x="512.4" y="337.2" textLength="61" clip-path="url(#terminal-2035912735-line-13)">e.g: </text><text class="terminal-2035912735-r3" x="573.4" y="337.2" textLength="36.6" clip-path="url(#terminal-2035912735-line-13)">1.5</text><text class="terminal-2035912735-r1" x="610" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">.</text><text class="terminal-2035912735-r3" x="622.2" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">3</text><text class="terminal-2035912735-r1" x="634.4" y="337.2" textLength="24.4" clip-path="url(#terminal-2035912735-line-13)">..</text><text class="terminal-2035912735-r3" x="658.8" y="337.2" textLength="36.6" clip-path="url(#terminal-2035912735-line-13)">1.7</text><text class="terminal-2035912735-r1" x="695.4" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">.</text><text class="terminal-2035912735-r3" x="707.6" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">9</text><text class="terminal-2035912735-r2" x="719.8" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">)</text><text class="terminal-2035912735-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)"> -</text><text class="terminal-2035912735-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-14)"> -</text><text class="terminal-2035912735-r1" x="0" y="386" textLength="97.6" clip-path="url(#terminal-2035912735-line-15)">options:</text><text class="terminal-2035912735-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2035912735-line-15)"> -</text><text class="terminal-2035912735-r1" x="0" y="410.4" textLength="671" clip-path="url(#terminal-2035912735-line-16)">  -h, --help            show this help message and exit</text><text class="terminal-2035912735-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-16)"> -</text><text class="terminal-2035912735-r1" x="0" y="434.8" textLength="585.6" clip-path="url(#terminal-2035912735-line-17)">  --dry-run             show changelog to stdout</text><text class="terminal-2035912735-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-17)"> -</text><text class="terminal-2035912735-r1" x="0" y="459.2" textLength="280.6" clip-path="url(#terminal-2035912735-line-18)">  --file-name FILE_NAME</text><text class="terminal-2035912735-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-18)"> -</text><text class="terminal-2035912735-r1" x="0" y="483.6" textLength="573.4" clip-path="url(#terminal-2035912735-line-19)">                        file name of changelog </text><text class="terminal-2035912735-r2" x="573.4" y="483.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-19)">(</text><text class="terminal-2035912735-r1" x="585.6" y="483.6" textLength="109.8" clip-path="url(#terminal-2035912735-line-19)">default: </text><text class="terminal-2035912735-r4" x="695.4" y="483.6" textLength="170.8" clip-path="url(#terminal-2035912735-line-19)">'CHANGELOG.md'</text><text class="terminal-2035912735-r2" x="866.2" y="483.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-19)">)</text><text class="terminal-2035912735-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-19)"> -</text><text class="terminal-2035912735-r1" x="0" y="508" textLength="500.2" clip-path="url(#terminal-2035912735-line-20)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-2035912735-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2035912735-line-20)"> -</text><text class="terminal-2035912735-r1" x="0" y="532.4" textLength="707.6" clip-path="url(#terminal-2035912735-line-21)">                        set the value for the new version </text><text class="terminal-2035912735-r2" x="707.6" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)">(</text><text class="terminal-2035912735-r1" x="719.8" y="532.4" textLength="207.4" clip-path="url(#terminal-2035912735-line-21)">use the tag value</text><text class="terminal-2035912735-r2" x="927.2" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)">)</text><text class="terminal-2035912735-r1" x="939.4" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)">,</text><text class="terminal-2035912735-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)"> -</text><text class="terminal-2035912735-r1" x="0" y="556.8" textLength="622.2" clip-path="url(#terminal-2035912735-line-22)">                        instead of using unreleased</text><text class="terminal-2035912735-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-22)"> -</text><text class="terminal-2035912735-r1" x="0" y="581.2" textLength="939.4" clip-path="url(#terminal-2035912735-line-23)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-2035912735-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-23)"> -</text><text class="terminal-2035912735-r1" x="0" y="605.6" textLength="817.4" clip-path="url(#terminal-2035912735-line-24)">                        if the changelog has been manually modified</text><text class="terminal-2035912735-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-24)"> -</text><text class="terminal-2035912735-r1" x="0" y="630" textLength="280.6" clip-path="url(#terminal-2035912735-line-25)">  --start-rev START_REV</text><text class="terminal-2035912735-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2035912735-line-25)"> -</text><text class="terminal-2035912735-r1" x="0" y="654.4" textLength="866.2" clip-path="url(#terminal-2035912735-line-26)">                        start rev of the changelog. If not set, it will</text><text class="terminal-2035912735-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-26)"> -</text><text class="terminal-2035912735-r1" x="0" y="678.8" textLength="695.4" clip-path="url(#terminal-2035912735-line-27)">                        generate changelog from the start</text><text class="terminal-2035912735-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-27)"> -</text><text class="terminal-2035912735-r1" x="0" y="703.2" textLength="915" clip-path="url(#terminal-2035912735-line-28)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-2035912735-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-28)"> -</text><text class="terminal-2035912735-r1" x="0" y="727.6" textLength="951.6" clip-path="url(#terminal-2035912735-line-29)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-2035912735-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-29)"> -</text><text class="terminal-2035912735-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-2035912735-line-30)">                        the changelog</text><text class="terminal-2035912735-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-2035912735-line-30)"> -</text><text class="terminal-2035912735-r1" x="0" y="776.4" textLength="231.8" clip-path="url(#terminal-2035912735-line-31)">  --version-scheme </text><text class="terminal-2035912735-r2" x="231.8" y="776.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-31)">{</text><text class="terminal-2035912735-r1" x="244" y="776.4" textLength="256.2" clip-path="url(#terminal-2035912735-line-31)">pep440,semver,semver2</text><text class="terminal-2035912735-r2" x="500.2" y="776.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-31)">}</text><text class="terminal-2035912735-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-31)"> -</text><text class="terminal-2035912735-r1" x="0" y="800.8" textLength="549" clip-path="url(#terminal-2035912735-line-32)">                        choose version scheme</text><text class="terminal-2035912735-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-32)"> -</text><text class="terminal-2035912735-r1" x="0" y="825.2" textLength="427" clip-path="url(#terminal-2035912735-line-33)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-2035912735-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-33)"> -</text><text class="terminal-2035912735-r1" x="0" y="849.6" textLength="927.2" clip-path="url(#terminal-2035912735-line-34)">                        Export the changelog template into this file instead</text><text class="terminal-2035912735-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-34)"> -</text><text class="terminal-2035912735-r1" x="0" y="874" textLength="475.8" clip-path="url(#terminal-2035912735-line-35)">                        of rendering it</text><text class="terminal-2035912735-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-2035912735-line-35)"> -</text><text class="terminal-2035912735-r1" x="0" y="898.4" textLength="414.8" clip-path="url(#terminal-2035912735-line-36)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-2035912735-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-36)"> -</text><text class="terminal-2035912735-r1" x="0" y="922.8" textLength="646.6" clip-path="url(#terminal-2035912735-line-37)">                        changelog template file name </text><text class="terminal-2035912735-r2" x="646.6" y="922.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-37)">(</text><text class="terminal-2035912735-r1" x="658.8" y="922.8" textLength="280.6" clip-path="url(#terminal-2035912735-line-37)">relative to the current</text><text class="terminal-2035912735-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-37)"> -</text><text class="terminal-2035912735-r1" x="0" y="947.2" textLength="500.2" clip-path="url(#terminal-2035912735-line-38)">                        working directory</text><text class="terminal-2035912735-r2" x="500.2" y="947.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-38)">)</text><text class="terminal-2035912735-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-38)"> -</text><text class="terminal-2035912735-r1" x="0" y="971.6" textLength="305" clip-path="url(#terminal-2035912735-line-39)">  --extra EXTRA, -e EXTRA</text><text class="terminal-2035912735-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-39)"> -</text><text class="terminal-2035912735-r1" x="0" y="996" textLength="622.2" clip-path="url(#terminal-2035912735-line-40)">                        a changelog extra variable </text><text class="terminal-2035912735-r2" x="622.2" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">(</text><text class="terminal-2035912735-r1" x="634.4" y="996" textLength="146.4" clip-path="url(#terminal-2035912735-line-40)">in the form </text><text class="terminal-2035912735-r4" x="780.8" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">'</text><text class="terminal-2035912735-r4" x="793" y="996" textLength="36.6" clip-path="url(#terminal-2035912735-line-40)">key</text><text class="terminal-2035912735-r4" x="829.6" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">=</text><text class="terminal-2035912735-r4" x="841.8" y="996" textLength="61" clip-path="url(#terminal-2035912735-line-40)">value</text><text class="terminal-2035912735-r4" x="902.8" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">'</text><text class="terminal-2035912735-r2" x="915" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">)</text><text class="terminal-2035912735-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)"> -</text><text class="terminal-2035912735-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-41)"> + <g class="terminal-1106739011-matrix"> + <text class="terminal-1106739011-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-1106739011-line-0)">$ cz changelog --help</text><text class="terminal-1106739011-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1106739011-line-0)"> +</text><text class="terminal-1106739011-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-1106739011-line-1)">usage: cz changelog </text><text class="terminal-1106739011-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">[</text><text class="terminal-1106739011-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-1106739011-line-1)">-h</text><text class="terminal-1106739011-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">]</text><text class="terminal-1106739011-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">[</text><text class="terminal-1106739011-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-1106739011-line-1)">--dry-run</text><text class="terminal-1106739011-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">]</text><text class="terminal-1106739011-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">[</text><text class="terminal-1106739011-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-1106739011-line-1)">--file-name FILE_NAME</text><text class="terminal-1106739011-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">]</text><text class="terminal-1106739011-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)"> +</text><text class="terminal-1106739011-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">[</text><text class="terminal-1106739011-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-1106739011-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-1106739011-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">]</text><text class="terminal-1106739011-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">[</text><text class="terminal-1106739011-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-1106739011-line-2)">--incremental</text><text class="terminal-1106739011-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">]</text><text class="terminal-1106739011-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)"> +</text><text class="terminal-1106739011-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">[</text><text class="terminal-1106739011-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-1106739011-line-3)">--start-rev START_REV</text><text class="terminal-1106739011-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">]</text><text class="terminal-1106739011-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">[</text><text class="terminal-1106739011-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-1106739011-line-3)">--merge-prerelease</text><text class="terminal-1106739011-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">]</text><text class="terminal-1106739011-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)"> +</text><text class="terminal-1106739011-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">[</text><text class="terminal-1106739011-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-1106739011-line-4)">--version-scheme </text><text class="terminal-1106739011-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">{</text><text class="terminal-1106739011-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-1106739011-line-4)">pep440,semver,semver2</text><text class="terminal-1106739011-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">}</text><text class="terminal-1106739011-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">]</text><text class="terminal-1106739011-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)"> +</text><text class="terminal-1106739011-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">[</text><text class="terminal-1106739011-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-1106739011-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-1106739011-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">]</text><text class="terminal-1106739011-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">[</text><text class="terminal-1106739011-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-1106739011-line-5)">--template TEMPLATE</text><text class="terminal-1106739011-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">]</text><text class="terminal-1106739011-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)"> +</text><text class="terminal-1106739011-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-6)">[</text><text class="terminal-1106739011-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-1106739011-line-6)">--extra EXTRA</text><text class="terminal-1106739011-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-6)">]</text><text class="terminal-1106739011-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-6)"> +</text><text class="terminal-1106739011-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-7)"> +</text><text class="terminal-1106739011-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-8)"> +</text><text class="terminal-1106739011-r1" x="0" y="239.6" textLength="231.8" clip-path="url(#terminal-1106739011-line-9)">generate changelog </text><text class="terminal-1106739011-r2" x="231.8" y="239.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-9)">(</text><text class="terminal-1106739011-r1" x="244" y="239.6" textLength="500.2" clip-path="url(#terminal-1106739011-line-9)">note that it will overwrite existing file</text><text class="terminal-1106739011-r2" x="744.2" y="239.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-9)">)</text><text class="terminal-1106739011-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-9)"> +</text><text class="terminal-1106739011-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1106739011-line-10)"> +</text><text class="terminal-1106739011-r1" x="0" y="288.4" textLength="256.2" clip-path="url(#terminal-1106739011-line-11)">positional arguments:</text><text class="terminal-1106739011-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-11)"> +</text><text class="terminal-1106739011-r1" x="0" y="312.8" textLength="805.2" clip-path="url(#terminal-1106739011-line-12)">  rev_range             generates changelog for the given version </text><text class="terminal-1106739011-r2" x="805.2" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">(</text><text class="terminal-1106739011-r1" x="817.4" y="312.8" textLength="61" clip-path="url(#terminal-1106739011-line-12)">e.g: </text><text class="terminal-1106739011-r3" x="878.4" y="312.8" textLength="36.6" clip-path="url(#terminal-1106739011-line-12)">1.5</text><text class="terminal-1106739011-r1" x="915" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">.</text><text class="terminal-1106739011-r3" x="927.2" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">3</text><text class="terminal-1106739011-r2" x="939.4" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">)</text><text class="terminal-1106739011-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)"> +</text><text class="terminal-1106739011-r1" x="0" y="337.2" textLength="500.2" clip-path="url(#terminal-1106739011-line-13)">                        or version range </text><text class="terminal-1106739011-r2" x="500.2" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">(</text><text class="terminal-1106739011-r1" x="512.4" y="337.2" textLength="61" clip-path="url(#terminal-1106739011-line-13)">e.g: </text><text class="terminal-1106739011-r3" x="573.4" y="337.2" textLength="36.6" clip-path="url(#terminal-1106739011-line-13)">1.5</text><text class="terminal-1106739011-r1" x="610" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">.</text><text class="terminal-1106739011-r3" x="622.2" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">3</text><text class="terminal-1106739011-r1" x="634.4" y="337.2" textLength="24.4" clip-path="url(#terminal-1106739011-line-13)">..</text><text class="terminal-1106739011-r3" x="658.8" y="337.2" textLength="36.6" clip-path="url(#terminal-1106739011-line-13)">1.7</text><text class="terminal-1106739011-r1" x="695.4" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">.</text><text class="terminal-1106739011-r3" x="707.6" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">9</text><text class="terminal-1106739011-r2" x="719.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">)</text><text class="terminal-1106739011-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)"> +</text><text class="terminal-1106739011-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-14)"> +</text><text class="terminal-1106739011-r1" x="0" y="386" textLength="97.6" clip-path="url(#terminal-1106739011-line-15)">options:</text><text class="terminal-1106739011-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1106739011-line-15)"> +</text><text class="terminal-1106739011-r1" x="0" y="410.4" textLength="671" clip-path="url(#terminal-1106739011-line-16)">  -h, --help            show this help message and exit</text><text class="terminal-1106739011-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-16)"> +</text><text class="terminal-1106739011-r1" x="0" y="434.8" textLength="585.6" clip-path="url(#terminal-1106739011-line-17)">  --dry-run             show changelog to stdout</text><text class="terminal-1106739011-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-17)"> +</text><text class="terminal-1106739011-r1" x="0" y="459.2" textLength="280.6" clip-path="url(#terminal-1106739011-line-18)">  --file-name FILE_NAME</text><text class="terminal-1106739011-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-18)"> +</text><text class="terminal-1106739011-r1" x="0" y="483.6" textLength="573.4" clip-path="url(#terminal-1106739011-line-19)">                        file name of changelog </text><text class="terminal-1106739011-r2" x="573.4" y="483.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-19)">(</text><text class="terminal-1106739011-r1" x="585.6" y="483.6" textLength="109.8" clip-path="url(#terminal-1106739011-line-19)">default: </text><text class="terminal-1106739011-r4" x="695.4" y="483.6" textLength="170.8" clip-path="url(#terminal-1106739011-line-19)">'CHANGELOG.md'</text><text class="terminal-1106739011-r2" x="866.2" y="483.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-19)">)</text><text class="terminal-1106739011-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-19)"> +</text><text class="terminal-1106739011-r1" x="0" y="508" textLength="500.2" clip-path="url(#terminal-1106739011-line-20)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-1106739011-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1106739011-line-20)"> +</text><text class="terminal-1106739011-r1" x="0" y="532.4" textLength="707.6" clip-path="url(#terminal-1106739011-line-21)">                        set the value for the new version </text><text class="terminal-1106739011-r2" x="707.6" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)">(</text><text class="terminal-1106739011-r1" x="719.8" y="532.4" textLength="207.4" clip-path="url(#terminal-1106739011-line-21)">use the tag value</text><text class="terminal-1106739011-r2" x="927.2" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)">)</text><text class="terminal-1106739011-r1" x="939.4" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)">,</text><text class="terminal-1106739011-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)"> +</text><text class="terminal-1106739011-r1" x="0" y="556.8" textLength="622.2" clip-path="url(#terminal-1106739011-line-22)">                        instead of using unreleased</text><text class="terminal-1106739011-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-22)"> +</text><text class="terminal-1106739011-r1" x="0" y="581.2" textLength="939.4" clip-path="url(#terminal-1106739011-line-23)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-1106739011-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-23)"> +</text><text class="terminal-1106739011-r1" x="0" y="605.6" textLength="817.4" clip-path="url(#terminal-1106739011-line-24)">                        if the changelog has been manually modified</text><text class="terminal-1106739011-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-24)"> +</text><text class="terminal-1106739011-r1" x="0" y="630" textLength="280.6" clip-path="url(#terminal-1106739011-line-25)">  --start-rev START_REV</text><text class="terminal-1106739011-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1106739011-line-25)"> +</text><text class="terminal-1106739011-r1" x="0" y="654.4" textLength="866.2" clip-path="url(#terminal-1106739011-line-26)">                        start rev of the changelog. If not set, it will</text><text class="terminal-1106739011-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-26)"> +</text><text class="terminal-1106739011-r1" x="0" y="678.8" textLength="695.4" clip-path="url(#terminal-1106739011-line-27)">                        generate changelog from the start</text><text class="terminal-1106739011-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-27)"> +</text><text class="terminal-1106739011-r1" x="0" y="703.2" textLength="915" clip-path="url(#terminal-1106739011-line-28)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-1106739011-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-28)"> +</text><text class="terminal-1106739011-r1" x="0" y="727.6" textLength="951.6" clip-path="url(#terminal-1106739011-line-29)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-1106739011-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-29)"> +</text><text class="terminal-1106739011-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-1106739011-line-30)">                        the changelog</text><text class="terminal-1106739011-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-1106739011-line-30)"> +</text><text class="terminal-1106739011-r1" x="0" y="776.4" textLength="231.8" clip-path="url(#terminal-1106739011-line-31)">  --version-scheme </text><text class="terminal-1106739011-r2" x="231.8" y="776.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-31)">{</text><text class="terminal-1106739011-r1" x="244" y="776.4" textLength="256.2" clip-path="url(#terminal-1106739011-line-31)">pep440,semver,semver2</text><text class="terminal-1106739011-r2" x="500.2" y="776.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-31)">}</text><text class="terminal-1106739011-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-31)"> +</text><text class="terminal-1106739011-r1" x="0" y="800.8" textLength="549" clip-path="url(#terminal-1106739011-line-32)">                        choose version scheme</text><text class="terminal-1106739011-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-32)"> +</text><text class="terminal-1106739011-r1" x="0" y="825.2" textLength="427" clip-path="url(#terminal-1106739011-line-33)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-1106739011-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-33)"> +</text><text class="terminal-1106739011-r1" x="0" y="849.6" textLength="927.2" clip-path="url(#terminal-1106739011-line-34)">                        Export the changelog template into this file instead</text><text class="terminal-1106739011-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-34)"> +</text><text class="terminal-1106739011-r1" x="0" y="874" textLength="475.8" clip-path="url(#terminal-1106739011-line-35)">                        of rendering it</text><text class="terminal-1106739011-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-1106739011-line-35)"> +</text><text class="terminal-1106739011-r1" x="0" y="898.4" textLength="305" clip-path="url(#terminal-1106739011-line-36)">  --template, -t TEMPLATE</text><text class="terminal-1106739011-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-36)"> +</text><text class="terminal-1106739011-r1" x="0" y="922.8" textLength="646.6" clip-path="url(#terminal-1106739011-line-37)">                        changelog template file name </text><text class="terminal-1106739011-r2" x="646.6" y="922.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-37)">(</text><text class="terminal-1106739011-r1" x="658.8" y="922.8" textLength="280.6" clip-path="url(#terminal-1106739011-line-37)">relative to the current</text><text class="terminal-1106739011-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-37)"> +</text><text class="terminal-1106739011-r1" x="0" y="947.2" textLength="500.2" clip-path="url(#terminal-1106739011-line-38)">                        working directory</text><text class="terminal-1106739011-r2" x="500.2" y="947.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-38)">)</text><text class="terminal-1106739011-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-38)"> +</text><text class="terminal-1106739011-r1" x="0" y="971.6" textLength="622.2" clip-path="url(#terminal-1106739011-line-39)">  --extra, -e EXTRA     a changelog extra variable </text><text class="terminal-1106739011-r2" x="622.2" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">(</text><text class="terminal-1106739011-r1" x="634.4" y="971.6" textLength="146.4" clip-path="url(#terminal-1106739011-line-39)">in the form </text><text class="terminal-1106739011-r4" x="780.8" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">'</text><text class="terminal-1106739011-r4" x="793" y="971.6" textLength="36.6" clip-path="url(#terminal-1106739011-line-39)">key</text><text class="terminal-1106739011-r4" x="829.6" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">=</text><text class="terminal-1106739011-r4" x="841.8" y="971.6" textLength="61" clip-path="url(#terminal-1106739011-line-39)">value</text><text class="terminal-1106739011-r4" x="902.8" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">'</text><text class="terminal-1106739011-r2" x="915" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">)</text><text class="terminal-1106739011-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)"> +</text><text class="terminal-1106739011-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-1106739011-line-40)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_check___help.svg b/docs/images/cli_help/cz_check___help.svg index 922a6458a6..690bfec684 100644 --- a/docs/images/cli_help/cz_check___help.svg +++ b/docs/images/cli_help/cz_check___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 733.1999999999999" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 708.8" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,150 +19,146 @@ font-weight: 700; } - .terminal-1820510314-matrix { + .terminal-1360575461-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1820510314-title { + .terminal-1360575461-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1820510314-r1 { fill: #c5c8c6 } -.terminal-1820510314-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-1820510314-r3 { fill: #d0b344 } -.terminal-1820510314-r4 { fill: #68a0b3;font-weight: bold } + .terminal-1360575461-r1 { fill: #c5c8c6 } +.terminal-1360575461-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-1360575461-r3 { fill: #d0b344 } +.terminal-1360575461-r4 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-1820510314-clip-terminal"> - <rect x="0" y="0" width="975.0" height="682.1999999999999" /> + <clipPath id="terminal-1360575461-clip-terminal"> + <rect x="0" y="0" width="975.0" height="657.8" /> </clipPath> - <clipPath id="terminal-1820510314-line-0"> + <clipPath id="terminal-1360575461-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-1"> +<clipPath id="terminal-1360575461-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-2"> +<clipPath id="terminal-1360575461-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-3"> +<clipPath id="terminal-1360575461-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-4"> +<clipPath id="terminal-1360575461-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-5"> +<clipPath id="terminal-1360575461-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-6"> +<clipPath id="terminal-1360575461-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-7"> +<clipPath id="terminal-1360575461-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-8"> +<clipPath id="terminal-1360575461-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-9"> +<clipPath id="terminal-1360575461-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-10"> +<clipPath id="terminal-1360575461-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-11"> +<clipPath id="terminal-1360575461-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-12"> +<clipPath id="terminal-1360575461-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-13"> +<clipPath id="terminal-1360575461-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-14"> +<clipPath id="terminal-1360575461-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-15"> +<clipPath id="terminal-1360575461-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-16"> +<clipPath id="terminal-1360575461-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-17"> +<clipPath id="terminal-1360575461-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-18"> +<clipPath id="terminal-1360575461-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-19"> +<clipPath id="terminal-1360575461-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-20"> +<clipPath id="terminal-1360575461-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-21"> +<clipPath id="terminal-1360575461-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-22"> +<clipPath id="terminal-1360575461-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-23"> +<clipPath id="terminal-1360575461-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-24"> +<clipPath id="terminal-1360575461-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-25"> +<clipPath id="terminal-1360575461-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-26"> - <rect x="0" y="635.9" width="976" height="24.65"/> - </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="731.2" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="706.8" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-1820510314-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1360575461-clip-terminal)"> - <g class="terminal-1820510314-matrix"> - <text class="terminal-1820510314-r1" x="0" y="20" textLength="207.4" clip-path="url(#terminal-1820510314-line-0)">$ cz check --help</text><text class="terminal-1820510314-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1820510314-line-0)"> -</text><text class="terminal-1820510314-r1" x="0" y="44.4" textLength="195.2" clip-path="url(#terminal-1820510314-line-1)">usage: cz check </text><text class="terminal-1820510314-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-1)">[</text><text class="terminal-1820510314-r1" x="207.4" y="44.4" textLength="24.4" clip-path="url(#terminal-1820510314-line-1)">-h</text><text class="terminal-1820510314-r2" x="231.8" y="44.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-1)">]</text><text class="terminal-1820510314-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-1)"> -</text><text class="terminal-1820510314-r2" x="195.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-2)">[</text><text class="terminal-1820510314-r1" x="207.4" y="68.8" textLength="768.6" clip-path="url(#terminal-1820510314-line-2)">--commit-msg-file COMMIT_MSG_FILE | --rev-range REV_RANGE | -m </text><text class="terminal-1820510314-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-2)"> -</text><text class="terminal-1820510314-r1" x="0" y="93.2" textLength="85.4" clip-path="url(#terminal-1820510314-line-3)">MESSAGE</text><text class="terminal-1820510314-r2" x="85.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-3)">]</text><text class="terminal-1820510314-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-3)"> -</text><text class="terminal-1820510314-r2" x="195.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">[</text><text class="terminal-1820510314-r1" x="207.4" y="117.6" textLength="158.6" clip-path="url(#terminal-1820510314-line-4)">--allow-abort</text><text class="terminal-1820510314-r2" x="366" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">]</text><text class="terminal-1820510314-r2" x="390.4" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">[</text><text class="terminal-1820510314-r1" x="402.6" y="117.6" textLength="231.8" clip-path="url(#terminal-1820510314-line-4)">--allowed-prefixes </text><text class="terminal-1820510314-r2" x="634.4" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">[</text><text class="terminal-1820510314-r1" x="646.6" y="117.6" textLength="207.4" clip-path="url(#terminal-1820510314-line-4)">ALLOWED_PREFIXES </text><text class="terminal-1820510314-r3" x="854" y="117.6" textLength="36.6" clip-path="url(#terminal-1820510314-line-4)">...</text><text class="terminal-1820510314-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">]</text><text class="terminal-1820510314-r2" x="902.8" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">]</text><text class="terminal-1820510314-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)"> -</text><text class="terminal-1820510314-r2" x="195.2" y="142" textLength="12.2" clip-path="url(#terminal-1820510314-line-5)">[</text><text class="terminal-1820510314-r1" x="207.4" y="142" textLength="280.6" clip-path="url(#terminal-1820510314-line-5)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-1820510314-r2" x="488" y="142" textLength="12.2" clip-path="url(#terminal-1820510314-line-5)">]</text><text class="terminal-1820510314-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1820510314-line-5)"> -</text><text class="terminal-1820510314-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-6)"> -</text><text class="terminal-1820510314-r1" x="0" y="190.8" textLength="744.2" clip-path="url(#terminal-1820510314-line-7)">validates that a commit message matches the commitizen schema</text><text class="terminal-1820510314-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-7)"> -</text><text class="terminal-1820510314-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-8)"> -</text><text class="terminal-1820510314-r1" x="0" y="239.6" textLength="97.6" clip-path="url(#terminal-1820510314-line-9)">options:</text><text class="terminal-1820510314-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-9)"> -</text><text class="terminal-1820510314-r1" x="0" y="264" textLength="671" clip-path="url(#terminal-1820510314-line-10)">  -h, --help            show this help message and exit</text><text class="terminal-1820510314-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1820510314-line-10)"> -</text><text class="terminal-1820510314-r1" x="0" y="288.4" textLength="427" clip-path="url(#terminal-1820510314-line-11)">  --commit-msg-file COMMIT_MSG_FILE</text><text class="terminal-1820510314-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-11)"> -</text><text class="terminal-1820510314-r1" x="0" y="312.8" textLength="915" clip-path="url(#terminal-1820510314-line-12)">                        ask for the name of the temporal file that contains</text><text class="terminal-1820510314-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-12)"> -</text><text class="terminal-1820510314-r1" x="0" y="337.2" textLength="902.8" clip-path="url(#terminal-1820510314-line-13)">                        the commit message. Using it in a git hook script:</text><text class="terminal-1820510314-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-13)"> -</text><text class="terminal-1820510314-r3" x="292.8" y="361.6" textLength="97.6" clip-path="url(#terminal-1820510314-line-14)">MSG_FILE</text><text class="terminal-1820510314-r1" x="390.4" y="361.6" textLength="24.4" clip-path="url(#terminal-1820510314-line-14)">=$</text><text class="terminal-1820510314-r4" x="414.8" y="361.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-14)">1</text><text class="terminal-1820510314-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-14)"> -</text><text class="terminal-1820510314-r1" x="0" y="386" textLength="280.6" clip-path="url(#terminal-1820510314-line-15)">  --rev-range REV_RANGE</text><text class="terminal-1820510314-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1820510314-line-15)"> -</text><text class="terminal-1820510314-r1" x="0" y="410.4" textLength="854" clip-path="url(#terminal-1820510314-line-16)">                        a range of git rev to check. e.g, master..HEAD</text><text class="terminal-1820510314-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-16)"> -</text><text class="terminal-1820510314-r1" x="0" y="434.8" textLength="378.2" clip-path="url(#terminal-1820510314-line-17)">  -m MESSAGE, --message MESSAGE</text><text class="terminal-1820510314-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-17)"> -</text><text class="terminal-1820510314-r1" x="0" y="459.2" textLength="768.6" clip-path="url(#terminal-1820510314-line-18)">                        commit message that needs to be checked</text><text class="terminal-1820510314-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-18)"> -</text><text class="terminal-1820510314-r1" x="0" y="483.6" textLength="927.2" clip-path="url(#terminal-1820510314-line-19)">  --allow-abort         allow empty commit messages, which typically abort a</text><text class="terminal-1820510314-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-19)"> -</text><text class="terminal-1820510314-r1" x="0" y="508" textLength="366" clip-path="url(#terminal-1820510314-line-20)">                        commit</text><text class="terminal-1820510314-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1820510314-line-20)"> -</text><text class="terminal-1820510314-r1" x="0" y="532.4" textLength="256.2" clip-path="url(#terminal-1820510314-line-21)">  --allowed-prefixes </text><text class="terminal-1820510314-r2" x="256.2" y="532.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-21)">[</text><text class="terminal-1820510314-r1" x="268.4" y="532.4" textLength="207.4" clip-path="url(#terminal-1820510314-line-21)">ALLOWED_PREFIXES </text><text class="terminal-1820510314-r3" x="475.8" y="532.4" textLength="36.6" clip-path="url(#terminal-1820510314-line-21)">...</text><text class="terminal-1820510314-r2" x="512.4" y="532.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-21)">]</text><text class="terminal-1820510314-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-21)"> -</text><text class="terminal-1820510314-r1" x="0" y="556.8" textLength="951.6" clip-path="url(#terminal-1820510314-line-22)">                        allowed commit message prefixes. If the message starts</text><text class="terminal-1820510314-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-22)"> -</text><text class="terminal-1820510314-r1" x="0" y="581.2" textLength="951.6" clip-path="url(#terminal-1820510314-line-23)">                        by one of these prefixes, the message won't be checked</text><text class="terminal-1820510314-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-23)"> -</text><text class="terminal-1820510314-r1" x="0" y="605.6" textLength="500.2" clip-path="url(#terminal-1820510314-line-24)">                        against the regex</text><text class="terminal-1820510314-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-24)"> -</text><text class="terminal-1820510314-r1" x="0" y="630" textLength="854" clip-path="url(#terminal-1820510314-line-25)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-1820510314-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1820510314-line-25)"> -</text><text class="terminal-1820510314-r1" x="0" y="654.4" textLength="732" clip-path="url(#terminal-1820510314-line-26)">                        length limit of the commit message; </text><text class="terminal-1820510314-r4" x="732" y="654.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-26)">0</text><text class="terminal-1820510314-r1" x="744.2" y="654.4" textLength="158.6" clip-path="url(#terminal-1820510314-line-26)"> for no limit</text><text class="terminal-1820510314-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-26)"> -</text><text class="terminal-1820510314-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-27)"> + <g class="terminal-1360575461-matrix"> + <text class="terminal-1360575461-r1" x="0" y="20" textLength="207.4" clip-path="url(#terminal-1360575461-line-0)">$ cz check --help</text><text class="terminal-1360575461-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1360575461-line-0)"> +</text><text class="terminal-1360575461-r1" x="0" y="44.4" textLength="195.2" clip-path="url(#terminal-1360575461-line-1)">usage: cz check </text><text class="terminal-1360575461-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-1)">[</text><text class="terminal-1360575461-r1" x="207.4" y="44.4" textLength="24.4" clip-path="url(#terminal-1360575461-line-1)">-h</text><text class="terminal-1360575461-r2" x="231.8" y="44.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-1)">]</text><text class="terminal-1360575461-r2" x="256.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-1)">[</text><text class="terminal-1360575461-r1" x="268.4" y="44.4" textLength="427" clip-path="url(#terminal-1360575461-line-1)">--commit-msg-file COMMIT_MSG_FILE |</text><text class="terminal-1360575461-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-1)"> +</text><text class="terminal-1360575461-r1" x="0" y="68.8" textLength="610" clip-path="url(#terminal-1360575461-line-2)">                --rev-range REV_RANGE | -m MESSAGE</text><text class="terminal-1360575461-r2" x="610" y="68.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-2)">]</text><text class="terminal-1360575461-r2" x="634.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-2)">[</text><text class="terminal-1360575461-r1" x="646.6" y="68.8" textLength="158.6" clip-path="url(#terminal-1360575461-line-2)">--allow-abort</text><text class="terminal-1360575461-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-2)">]</text><text class="terminal-1360575461-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-2)"> +</text><text class="terminal-1360575461-r2" x="195.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)">[</text><text class="terminal-1360575461-r1" x="207.4" y="93.2" textLength="231.8" clip-path="url(#terminal-1360575461-line-3)">--allowed-prefixes </text><text class="terminal-1360575461-r2" x="439.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)">[</text><text class="terminal-1360575461-r1" x="451.4" y="93.2" textLength="207.4" clip-path="url(#terminal-1360575461-line-3)">ALLOWED_PREFIXES </text><text class="terminal-1360575461-r3" x="658.8" y="93.2" textLength="36.6" clip-path="url(#terminal-1360575461-line-3)">...</text><text class="terminal-1360575461-r2" x="695.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)">]</text><text class="terminal-1360575461-r2" x="707.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)">]</text><text class="terminal-1360575461-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)"> +</text><text class="terminal-1360575461-r2" x="195.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-4)">[</text><text class="terminal-1360575461-r1" x="207.4" y="117.6" textLength="280.6" clip-path="url(#terminal-1360575461-line-4)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-1360575461-r2" x="488" y="117.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-4)">]</text><text class="terminal-1360575461-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-4)"> +</text><text class="terminal-1360575461-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1360575461-line-5)"> +</text><text class="terminal-1360575461-r1" x="0" y="166.4" textLength="744.2" clip-path="url(#terminal-1360575461-line-6)">validates that a commit message matches the commitizen schema</text><text class="terminal-1360575461-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-6)"> +</text><text class="terminal-1360575461-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-7)"> +</text><text class="terminal-1360575461-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-1360575461-line-8)">options:</text><text class="terminal-1360575461-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-8)"> +</text><text class="terminal-1360575461-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-1360575461-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-1360575461-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-9)"> +</text><text class="terminal-1360575461-r1" x="0" y="264" textLength="427" clip-path="url(#terminal-1360575461-line-10)">  --commit-msg-file COMMIT_MSG_FILE</text><text class="terminal-1360575461-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1360575461-line-10)"> +</text><text class="terminal-1360575461-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-1360575461-line-11)">                        ask for the name of the temporal file that contains</text><text class="terminal-1360575461-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-11)"> +</text><text class="terminal-1360575461-r1" x="0" y="312.8" textLength="902.8" clip-path="url(#terminal-1360575461-line-12)">                        the commit message. Using it in a git hook script:</text><text class="terminal-1360575461-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-12)"> +</text><text class="terminal-1360575461-r3" x="292.8" y="337.2" textLength="97.6" clip-path="url(#terminal-1360575461-line-13)">MSG_FILE</text><text class="terminal-1360575461-r1" x="390.4" y="337.2" textLength="24.4" clip-path="url(#terminal-1360575461-line-13)">=$</text><text class="terminal-1360575461-r4" x="414.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-13)">1</text><text class="terminal-1360575461-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-13)"> +</text><text class="terminal-1360575461-r1" x="0" y="361.6" textLength="280.6" clip-path="url(#terminal-1360575461-line-14)">  --rev-range REV_RANGE</text><text class="terminal-1360575461-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-14)"> +</text><text class="terminal-1360575461-r1" x="0" y="386" textLength="854" clip-path="url(#terminal-1360575461-line-15)">                        a range of git rev to check. e.g, master..HEAD</text><text class="terminal-1360575461-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1360575461-line-15)"> +</text><text class="terminal-1360575461-r1" x="0" y="410.4" textLength="280.6" clip-path="url(#terminal-1360575461-line-16)">  -m, --message MESSAGE</text><text class="terminal-1360575461-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-16)"> +</text><text class="terminal-1360575461-r1" x="0" y="434.8" textLength="768.6" clip-path="url(#terminal-1360575461-line-17)">                        commit message that needs to be checked</text><text class="terminal-1360575461-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-17)"> +</text><text class="terminal-1360575461-r1" x="0" y="459.2" textLength="927.2" clip-path="url(#terminal-1360575461-line-18)">  --allow-abort         allow empty commit messages, which typically abort a</text><text class="terminal-1360575461-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-18)"> +</text><text class="terminal-1360575461-r1" x="0" y="483.6" textLength="366" clip-path="url(#terminal-1360575461-line-19)">                        commit</text><text class="terminal-1360575461-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-19)"> +</text><text class="terminal-1360575461-r1" x="0" y="508" textLength="256.2" clip-path="url(#terminal-1360575461-line-20)">  --allowed-prefixes </text><text class="terminal-1360575461-r2" x="256.2" y="508" textLength="12.2" clip-path="url(#terminal-1360575461-line-20)">[</text><text class="terminal-1360575461-r1" x="268.4" y="508" textLength="207.4" clip-path="url(#terminal-1360575461-line-20)">ALLOWED_PREFIXES </text><text class="terminal-1360575461-r3" x="475.8" y="508" textLength="36.6" clip-path="url(#terminal-1360575461-line-20)">...</text><text class="terminal-1360575461-r2" x="512.4" y="508" textLength="12.2" clip-path="url(#terminal-1360575461-line-20)">]</text><text class="terminal-1360575461-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1360575461-line-20)"> +</text><text class="terminal-1360575461-r1" x="0" y="532.4" textLength="951.6" clip-path="url(#terminal-1360575461-line-21)">                        allowed commit message prefixes. If the message starts</text><text class="terminal-1360575461-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-21)"> +</text><text class="terminal-1360575461-r1" x="0" y="556.8" textLength="951.6" clip-path="url(#terminal-1360575461-line-22)">                        by one of these prefixes, the message won't be checked</text><text class="terminal-1360575461-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-22)"> +</text><text class="terminal-1360575461-r1" x="0" y="581.2" textLength="500.2" clip-path="url(#terminal-1360575461-line-23)">                        against the regex</text><text class="terminal-1360575461-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-23)"> +</text><text class="terminal-1360575461-r1" x="0" y="605.6" textLength="597.8" clip-path="url(#terminal-1360575461-line-24)">  -l, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-1360575461-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-24)"> +</text><text class="terminal-1360575461-r1" x="0" y="630" textLength="732" clip-path="url(#terminal-1360575461-line-25)">                        length limit of the commit message; </text><text class="terminal-1360575461-r4" x="732" y="630" textLength="12.2" clip-path="url(#terminal-1360575461-line-25)">0</text><text class="terminal-1360575461-r1" x="744.2" y="630" textLength="158.6" clip-path="url(#terminal-1360575461-line-25)"> for no limit</text><text class="terminal-1360575461-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1360575461-line-25)"> +</text><text class="terminal-1360575461-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-26)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_commit___help.svg b/docs/images/cli_help/cz_commit___help.svg index 0346c40588..5aea02232f 100644 --- a/docs/images/cli_help/cz_commit___help.svg +++ b/docs/images/cli_help/cz_commit___help.svg @@ -19,95 +19,95 @@ font-weight: 700; } - .terminal-1670560432-matrix { + .terminal-463778956-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1670560432-title { + .terminal-463778956-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1670560432-r1 { fill: #c5c8c6 } -.terminal-1670560432-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-1670560432-r3 { fill: #68a0b3;font-weight: bold } + .terminal-463778956-r1 { fill: #c5c8c6 } +.terminal-463778956-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-463778956-r3 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-1670560432-clip-terminal"> + <clipPath id="terminal-463778956-clip-terminal"> <rect x="0" y="0" width="975.0" height="584.5999999999999" /> </clipPath> - <clipPath id="terminal-1670560432-line-0"> + <clipPath id="terminal-463778956-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-1"> +<clipPath id="terminal-463778956-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-2"> +<clipPath id="terminal-463778956-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-3"> +<clipPath id="terminal-463778956-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-4"> +<clipPath id="terminal-463778956-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-5"> +<clipPath id="terminal-463778956-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-6"> +<clipPath id="terminal-463778956-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-7"> +<clipPath id="terminal-463778956-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-8"> +<clipPath id="terminal-463778956-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-9"> +<clipPath id="terminal-463778956-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-10"> +<clipPath id="terminal-463778956-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-11"> +<clipPath id="terminal-463778956-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-12"> +<clipPath id="terminal-463778956-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-13"> +<clipPath id="terminal-463778956-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-14"> +<clipPath id="terminal-463778956-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-15"> +<clipPath id="terminal-463778956-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-16"> +<clipPath id="terminal-463778956-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-17"> +<clipPath id="terminal-463778956-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-18"> +<clipPath id="terminal-463778956-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-19"> +<clipPath id="terminal-463778956-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-20"> +<clipPath id="terminal-463778956-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-21"> +<clipPath id="terminal-463778956-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-22"> +<clipPath id="terminal-463778956-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> </defs> @@ -119,33 +119,33 @@ <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-1670560432-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-463778956-clip-terminal)"> - <g class="terminal-1670560432-matrix"> - <text class="terminal-1670560432-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-1670560432-line-0)">$ cz commit --help</text><text class="terminal-1670560432-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1670560432-line-0)"> -</text><text class="terminal-1670560432-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-1670560432-line-1)">usage: cz commit </text><text class="terminal-1670560432-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-1670560432-line-1)">-h</text><text class="terminal-1670560432-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-1670560432-line-1)">--retry</text><text class="terminal-1670560432-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-1670560432-line-1)">--no-retry</text><text class="terminal-1670560432-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-1670560432-line-1)">--dry-run</text><text class="terminal-1670560432-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)"> -</text><text class="terminal-1670560432-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-1670560432-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-1670560432-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1670560432-line-2)">-s</text><text class="terminal-1670560432-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1670560432-line-2)">-a</text><text class="terminal-1670560432-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r2" x="768.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="780.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1670560432-line-2)">-e</text><text class="terminal-1670560432-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)"> -</text><text class="terminal-1670560432-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">[</text><text class="terminal-1670560432-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-1670560432-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-1670560432-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">]</text><text class="terminal-1670560432-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">[</text><text class="terminal-1670560432-r1" x="536.8" y="93.2" textLength="24.4" clip-path="url(#terminal-1670560432-line-3)">--</text><text class="terminal-1670560432-r2" x="561.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">]</text><text class="terminal-1670560432-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)"> -</text><text class="terminal-1670560432-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-4)"> -</text><text class="terminal-1670560432-r1" x="0" y="142" textLength="207.4" clip-path="url(#terminal-1670560432-line-5)">create new commit</text><text class="terminal-1670560432-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1670560432-line-5)"> -</text><text class="terminal-1670560432-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-6)"> -</text><text class="terminal-1670560432-r1" x="0" y="190.8" textLength="97.6" clip-path="url(#terminal-1670560432-line-7)">options:</text><text class="terminal-1670560432-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-7)"> -</text><text class="terminal-1670560432-r1" x="0" y="215.2" textLength="671" clip-path="url(#terminal-1670560432-line-8)">  -h, --help            show this help message and exit</text><text class="terminal-1670560432-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-8)"> -</text><text class="terminal-1670560432-r1" x="0" y="239.6" textLength="500.2" clip-path="url(#terminal-1670560432-line-9)">  --retry               retry last commit</text><text class="terminal-1670560432-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-9)"> -</text><text class="terminal-1670560432-r1" x="0" y="264" textLength="878.4" clip-path="url(#terminal-1670560432-line-10)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-1670560432-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1670560432-line-10)"> -</text><text class="terminal-1670560432-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-1670560432-line-11)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-1670560432-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-11)"> -</text><text class="terminal-1670560432-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-1670560432-line-12)">  --write-message-to-file FILE_PATH</text><text class="terminal-1670560432-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-12)"> -</text><text class="terminal-1670560432-r1" x="0" y="337.2" textLength="780.8" clip-path="url(#terminal-1670560432-line-13)">                        write message to file before committing </text><text class="terminal-1670560432-r2" x="780.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-13)">(</text><text class="terminal-1670560432-r1" x="793" y="337.2" textLength="73.2" clip-path="url(#terminal-1670560432-line-13)">can be</text><text class="terminal-1670560432-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-13)"> -</text><text class="terminal-1670560432-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-1670560432-line-14)">                        combined with --dry-run</text><text class="terminal-1670560432-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-14)">)</text><text class="terminal-1670560432-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-14)"> -</text><text class="terminal-1670560432-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-1670560432-line-15)">  -s, --signoff         sign off the commit</text><text class="terminal-1670560432-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1670560432-line-15)"> -</text><text class="terminal-1670560432-r1" x="0" y="410.4" textLength="902.8" clip-path="url(#terminal-1670560432-line-16)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-1670560432-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-16)"> -</text><text class="terminal-1670560432-r1" x="0" y="434.8" textLength="951.6" clip-path="url(#terminal-1670560432-line-17)">                        have been modified and deleted, but new files you have</text><text class="terminal-1670560432-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-17)"> -</text><text class="terminal-1670560432-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-1670560432-line-18)">                        not told Git about are not affected.</text><text class="terminal-1670560432-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-18)"> -</text><text class="terminal-1670560432-r1" x="0" y="483.6" textLength="793" clip-path="url(#terminal-1670560432-line-19)">  -e, --edit            edit the commit message before committing</text><text class="terminal-1670560432-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-19)"> -</text><text class="terminal-1670560432-r1" x="0" y="508" textLength="854" clip-path="url(#terminal-1670560432-line-20)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-1670560432-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1670560432-line-20)"> -</text><text class="terminal-1670560432-r1" x="0" y="532.4" textLength="732" clip-path="url(#terminal-1670560432-line-21)">                        length limit of the commit message; </text><text class="terminal-1670560432-r3" x="732" y="532.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-21)">0</text><text class="terminal-1670560432-r1" x="744.2" y="532.4" textLength="158.6" clip-path="url(#terminal-1670560432-line-21)"> for no limit</text><text class="terminal-1670560432-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-21)"> -</text><text class="terminal-1670560432-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-1670560432-line-22)">  --                    Positional arguments separator </text><text class="terminal-1670560432-r2" x="671" y="556.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-22)">(</text><text class="terminal-1670560432-r1" x="683.2" y="556.8" textLength="134.2" clip-path="url(#terminal-1670560432-line-22)">recommended</text><text class="terminal-1670560432-r2" x="817.4" y="556.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-22)">)</text><text class="terminal-1670560432-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-22)"> -</text><text class="terminal-1670560432-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-23)"> + <g class="terminal-463778956-matrix"> + <text class="terminal-463778956-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-463778956-line-0)">$ cz commit --help</text><text class="terminal-463778956-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-463778956-line-0)"> +</text><text class="terminal-463778956-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-463778956-line-1)">usage: cz commit </text><text class="terminal-463778956-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-463778956-line-1)">-h</text><text class="terminal-463778956-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-463778956-line-1)">--retry</text><text class="terminal-463778956-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-463778956-line-1)">--no-retry</text><text class="terminal-463778956-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-463778956-line-1)">--dry-run</text><text class="terminal-463778956-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)"> +</text><text class="terminal-463778956-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-463778956-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-463778956-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-463778956-line-2)">-s</text><text class="terminal-463778956-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-463778956-line-2)">-a</text><text class="terminal-463778956-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r2" x="768.6" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="780.8" y="68.8" textLength="24.4" clip-path="url(#terminal-463778956-line-2)">-e</text><text class="terminal-463778956-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)"> +</text><text class="terminal-463778956-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">[</text><text class="terminal-463778956-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-463778956-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-463778956-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">]</text><text class="terminal-463778956-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">[</text><text class="terminal-463778956-r1" x="536.8" y="93.2" textLength="24.4" clip-path="url(#terminal-463778956-line-3)">--</text><text class="terminal-463778956-r2" x="561.2" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">]</text><text class="terminal-463778956-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)"> +</text><text class="terminal-463778956-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-463778956-line-4)"> +</text><text class="terminal-463778956-r1" x="0" y="142" textLength="207.4" clip-path="url(#terminal-463778956-line-5)">create new commit</text><text class="terminal-463778956-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-463778956-line-5)"> +</text><text class="terminal-463778956-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-463778956-line-6)"> +</text><text class="terminal-463778956-r1" x="0" y="190.8" textLength="97.6" clip-path="url(#terminal-463778956-line-7)">options:</text><text class="terminal-463778956-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-463778956-line-7)"> +</text><text class="terminal-463778956-r1" x="0" y="215.2" textLength="671" clip-path="url(#terminal-463778956-line-8)">  -h, --help            show this help message and exit</text><text class="terminal-463778956-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-463778956-line-8)"> +</text><text class="terminal-463778956-r1" x="0" y="239.6" textLength="500.2" clip-path="url(#terminal-463778956-line-9)">  --retry               retry last commit</text><text class="terminal-463778956-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-463778956-line-9)"> +</text><text class="terminal-463778956-r1" x="0" y="264" textLength="878.4" clip-path="url(#terminal-463778956-line-10)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-463778956-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-463778956-line-10)"> +</text><text class="terminal-463778956-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-463778956-line-11)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-463778956-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-463778956-line-11)"> +</text><text class="terminal-463778956-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-463778956-line-12)">  --write-message-to-file FILE_PATH</text><text class="terminal-463778956-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-463778956-line-12)"> +</text><text class="terminal-463778956-r1" x="0" y="337.2" textLength="780.8" clip-path="url(#terminal-463778956-line-13)">                        write message to file before committing </text><text class="terminal-463778956-r2" x="780.8" y="337.2" textLength="12.2" clip-path="url(#terminal-463778956-line-13)">(</text><text class="terminal-463778956-r1" x="793" y="337.2" textLength="73.2" clip-path="url(#terminal-463778956-line-13)">can be</text><text class="terminal-463778956-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-463778956-line-13)"> +</text><text class="terminal-463778956-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-463778956-line-14)">                        combined with --dry-run</text><text class="terminal-463778956-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-463778956-line-14)">)</text><text class="terminal-463778956-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-463778956-line-14)"> +</text><text class="terminal-463778956-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-463778956-line-15)">  -s, --signoff         sign off the commit</text><text class="terminal-463778956-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-463778956-line-15)"> +</text><text class="terminal-463778956-r1" x="0" y="410.4" textLength="902.8" clip-path="url(#terminal-463778956-line-16)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-463778956-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-463778956-line-16)"> +</text><text class="terminal-463778956-r1" x="0" y="434.8" textLength="951.6" clip-path="url(#terminal-463778956-line-17)">                        have been modified and deleted, but new files you have</text><text class="terminal-463778956-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-463778956-line-17)"> +</text><text class="terminal-463778956-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-463778956-line-18)">                        not told Git about are not affected.</text><text class="terminal-463778956-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-463778956-line-18)"> +</text><text class="terminal-463778956-r1" x="0" y="483.6" textLength="793" clip-path="url(#terminal-463778956-line-19)">  -e, --edit            edit the commit message before committing</text><text class="terminal-463778956-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-463778956-line-19)"> +</text><text class="terminal-463778956-r1" x="0" y="508" textLength="597.8" clip-path="url(#terminal-463778956-line-20)">  -l, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-463778956-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-463778956-line-20)"> +</text><text class="terminal-463778956-r1" x="0" y="532.4" textLength="732" clip-path="url(#terminal-463778956-line-21)">                        length limit of the commit message; </text><text class="terminal-463778956-r3" x="732" y="532.4" textLength="12.2" clip-path="url(#terminal-463778956-line-21)">0</text><text class="terminal-463778956-r1" x="744.2" y="532.4" textLength="158.6" clip-path="url(#terminal-463778956-line-21)"> for no limit</text><text class="terminal-463778956-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-463778956-line-21)"> +</text><text class="terminal-463778956-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-463778956-line-22)">  --                    Positional arguments separator </text><text class="terminal-463778956-r2" x="671" y="556.8" textLength="12.2" clip-path="url(#terminal-463778956-line-22)">(</text><text class="terminal-463778956-r1" x="683.2" y="556.8" textLength="134.2" clip-path="url(#terminal-463778956-line-22)">recommended</text><text class="terminal-463778956-r2" x="817.4" y="556.8" textLength="12.2" clip-path="url(#terminal-463778956-line-22)">)</text><text class="terminal-463778956-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-463778956-line-22)"> +</text><text class="terminal-463778956-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-463778956-line-23)"> </text> </g> </g> From 646a9df524c887e4c043bbda03a4561df327c6ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Jan 2025 01:25:00 +0000 Subject: [PATCH 472/685] build(deps-dev): bump ruff from 0.8.5 to 0.9.3 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.8.5 to 0.9.3. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.8.5...0.9.3) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 40 ++++++++++++++++++++-------------------- pyproject.toml | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5698043093..aaf4e460a8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1425,29 +1425,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.8.5" +version = "0.9.3" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.8.5-py3-none-linux_armv6l.whl", hash = "sha256:5ad11a5e3868a73ca1fa4727fe7e33735ea78b416313f4368c504dbeb69c0f88"}, - {file = "ruff-0.8.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f69ab37771ea7e0715fead8624ec42996d101269a96e31f4d31be6fc33aa19b7"}, - {file = "ruff-0.8.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b5462d7804558ccff9c08fe8cbf6c14b7efe67404316696a2dde48297b1925bb"}, - {file = "ruff-0.8.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d56de7220a35607f9fe59f8a6d018e14504f7b71d784d980835e20fc0611cd50"}, - {file = "ruff-0.8.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9d99cf80b0429cbebf31cbbf6f24f05a29706f0437c40413d950e67e2d4faca4"}, - {file = "ruff-0.8.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b75ac29715ac60d554a049dbb0ef3b55259076181c3369d79466cb130eb5afd"}, - {file = "ruff-0.8.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c9d526a62c9eda211b38463528768fd0ada25dad524cb33c0e99fcff1c67b5dc"}, - {file = "ruff-0.8.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:587c5e95007612c26509f30acc506c874dab4c4abbacd0357400bd1aa799931b"}, - {file = "ruff-0.8.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:622b82bf3429ff0e346835ec213aec0a04d9730480cbffbb6ad9372014e31bbd"}, - {file = "ruff-0.8.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f99be814d77a5dac8a8957104bdd8c359e85c86b0ee0e38dca447cb1095f70fb"}, - {file = "ruff-0.8.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c01c048f9c3385e0fd7822ad0fd519afb282af9cf1778f3580e540629df89725"}, - {file = "ruff-0.8.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7512e8cb038db7f5db6aae0e24735ff9ea03bb0ed6ae2ce534e9baa23c1dc9ea"}, - {file = "ruff-0.8.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:762f113232acd5b768d6b875d16aad6b00082add40ec91c927f0673a8ec4ede8"}, - {file = "ruff-0.8.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:03a90200c5dfff49e4c967b405f27fdfa81594cbb7c5ff5609e42d7fe9680da5"}, - {file = "ruff-0.8.5-py3-none-win32.whl", hash = "sha256:8710ffd57bdaa6690cbf6ecff19884b8629ec2a2a2a2f783aa94b1cc795139ed"}, - {file = "ruff-0.8.5-py3-none-win_amd64.whl", hash = "sha256:4020d8bf8d3a32325c77af452a9976a9ad6455773bcb94991cf15bd66b347e47"}, - {file = "ruff-0.8.5-py3-none-win_arm64.whl", hash = "sha256:134ae019ef13e1b060ab7136e7828a6d83ea727ba123381307eb37c6bd5e01cb"}, - {file = "ruff-0.8.5.tar.gz", hash = "sha256:1098d36f69831f7ff2a1da3e6407d5fbd6dfa2559e4f74ff2d260c5588900317"}, + {file = "ruff-0.9.3-py3-none-linux_armv6l.whl", hash = "sha256:7f39b879064c7d9670197d91124a75d118d00b0990586549949aae80cdc16624"}, + {file = "ruff-0.9.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a187171e7c09efa4b4cc30ee5d0d55a8d6c5311b3e1b74ac5cb96cc89bafc43c"}, + {file = "ruff-0.9.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c59ab92f8e92d6725b7ded9d4a31be3ef42688a115c6d3da9457a5bda140e2b4"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc153c25e715be41bb228bc651c1e9b1a88d5c6e5ed0194fa0dfea02b026439"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:646909a1e25e0dc28fbc529eab8eb7bb583079628e8cbe738192853dbbe43af5"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a5a46e09355695fbdbb30ed9889d6cf1c61b77b700a9fafc21b41f097bfbba4"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c4bb09d2bbb394e3730d0918c00276e79b2de70ec2a5231cd4ebb51a57df9ba1"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96a87ec31dc1044d8c2da2ebbed1c456d9b561e7d087734336518181b26b3aa5"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bb7554aca6f842645022fe2d301c264e6925baa708b392867b7a62645304df4"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cabc332b7075a914ecea912cd1f3d4370489c8018f2c945a30bcc934e3bc06a6"}, + {file = "ruff-0.9.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:33866c3cc2a575cbd546f2cd02bdd466fed65118e4365ee538a3deffd6fcb730"}, + {file = "ruff-0.9.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:006e5de2621304c8810bcd2ee101587712fa93b4f955ed0985907a36c427e0c2"}, + {file = "ruff-0.9.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ba6eea4459dbd6b1be4e6bfc766079fb9b8dd2e5a35aff6baee4d9b1514ea519"}, + {file = "ruff-0.9.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:90230a6b8055ad47d3325e9ee8f8a9ae7e273078a66401ac66df68943ced029b"}, + {file = "ruff-0.9.3-py3-none-win32.whl", hash = "sha256:eabe5eb2c19a42f4808c03b82bd313fc84d4e395133fb3fc1b1516170a31213c"}, + {file = "ruff-0.9.3-py3-none-win_amd64.whl", hash = "sha256:040ceb7f20791dfa0e78b4230ee9dce23da3b64dd5848e40e3bf3ab76468dcf4"}, + {file = "ruff-0.9.3-py3-none-win_arm64.whl", hash = "sha256:800d773f6d4d33b0a3c60e2c6ae8f4c202ea2de056365acfa519aa48acf28e0b"}, + {file = "ruff-0.9.3.tar.gz", hash = "sha256:8293f89985a090ebc3ed1064df31f3b4b56320cdfcec8b60d3295bddb955c22a"}, ] [[package]] @@ -1772,4 +1772,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.9" -content-hash = "36ac305c62f5139da82126a1b3bc71f86320af1abab5c473b3c0d21c81e214bd" +content-hash = "ac79ae58b65962eac836910d2b1359591d1fd53c68afb354b4c549cdcdd4349c" diff --git a/pyproject.toml b/pyproject.toml index 094d6fca0b..8ee2cf8d58 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,7 +61,7 @@ pytest-regressions = "^2.4.0" pytest-freezer = "^0.4.6" pytest-xdist = "^3.1.0" # linter -ruff = ">=0.5.0,<0.9.0" +ruff = ">=0.5.0,<0.10.0" pre-commit = ">=2.18,<5.0" mypy = "^1.4" types-PyYAML = ">=5.4.3,<7.0.0" From e6dcdbc13bfa22db73bf97ca0ac5860f4a252490 Mon Sep 17 00:00:00 2001 From: "Axel H." <noirbizarre@gmail.com> Date: Wed, 29 Jan 2025 20:04:12 +0100 Subject: [PATCH 473/685] style: fix formatting for `ruff>=0.9` --- commitizen/cli.py | 3 +-- commitizen/commands/bump.py | 7 +++---- .../conventional_commits.py | 4 +--- tests/commands/test_bump_command.py | 20 +++++++++---------- tests/commands/test_changelog_command.py | 2 +- tests/commands/test_check_command.py | 2 +- tests/commands/test_version_command.py | 2 +- tests/conftest.py | 8 +++----- tests/test_changelog.py | 6 +++--- tests/test_conf.py | 2 +- tests/test_cz_conventional_commits.py | 2 +- tests/test_git.py | 2 +- 12 files changed, 27 insertions(+), 33 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 2ee7d41eba..0b411cba60 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -71,8 +71,7 @@ def __call__( { "name": ["--template", "-t"], "help": ( - "changelog template file name " - "(relative to the current working directory)" + "changelog template file name (relative to the current working directory)" ), }, { diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 1f98c19954..1b274061cb 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -252,7 +252,7 @@ def __call__(self) -> None: # noqa: C901 # Unless we previously had a prerelease. if not commits and not current_version.is_prerelease: raise NoCommitsFoundError( - "[NO_COMMITS_FOUND]\n" "No new commits found." + "[NO_COMMITS_FOUND]\nNo new commits found." ) increment = self.find_increment(commits) @@ -296,7 +296,7 @@ def __call__(self) -> None: # noqa: C901 raise GetNextExit() # Report found information - information = f"{message}\n" f"tag to create: {new_tag_version}\n" + information = f"{message}\ntag to create: {new_tag_version}\n" if increment: information += f"increment detected: {increment}\n" @@ -310,8 +310,7 @@ def __call__(self) -> None: # noqa: C901 if increment is None and new_tag_version == current_tag_version: raise NoneIncrementExit( - "[NO_COMMITS_TO_BUMP]\n" - "The commits found are not eligible to be bumped" + "[NO_COMMITS_TO_BUMP]\nThe commits found are not eligible to be bumped" ) files: list[str] = [] diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index dcfd7bab89..c7b88258cb 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -86,9 +86,7 @@ def questions(self) -> Questions: }, { "value": "test", - "name": ( - "test: Adding missing or correcting " "existing tests" - ), + "name": ("test: Adding missing or correcting existing tests"), "key": "t", }, { diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 8acb5143c7..728a424107 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -102,7 +102,7 @@ def test_bump_minor_increment_annotated_config_file( ): tmp_commitizen_cfg_file = tmp_commitizen_project.join("pyproject.toml") tmp_commitizen_cfg_file.write( - f"{tmp_commitizen_cfg_file.read()}\n" f"annotated_tag = 1" + f"{tmp_commitizen_cfg_file.read()}\nannotated_tag = 1" ) create_file_and_commit(commit_msg) testargs = ["cz", "bump", "--yes"] @@ -121,7 +121,7 @@ def test_bump_minor_increment_signed_config_file( commit_msg, mocker: MockFixture, tmp_commitizen_project_with_gpg ): tmp_commitizen_cfg_file = tmp_commitizen_project_with_gpg.join("pyproject.toml") - tmp_commitizen_cfg_file.write(f"{tmp_commitizen_cfg_file.read()}\n" f"gpg_sign = 1") + tmp_commitizen_cfg_file.write(f"{tmp_commitizen_cfg_file.read()}\ngpg_sign = 1") create_file_and_commit(commit_msg) testargs = ["cz", "bump", "--yes"] mocker.patch.object(sys, "argv", testargs) @@ -383,7 +383,7 @@ def test_bump_on_git_with_hooks_no_verify_disabled(mocker: MockFixture): """Bump commit without --no-verify""" cmd.run("mkdir .git/hooks") with open(".git/hooks/pre-commit", "w", encoding="utf-8") as f: - f.write("#!/usr/bin/env bash\n" 'echo "0.1.0"') + f.write('#!/usr/bin/env bash\necho "0.1.0"') cmd.run("chmod +x .git/hooks/pre-commit") # MINOR @@ -402,7 +402,7 @@ def test_bump_on_git_with_hooks_no_verify_disabled(mocker: MockFixture): def test_bump_tag_exists_raises_exception(mocker: MockFixture): cmd.run("mkdir .git/hooks") with open(".git/hooks/post-commit", "w", encoding="utf-8") as f: - f.write("#!/usr/bin/env bash\n" "exit 9") + f.write("#!/usr/bin/env bash\nexit 9") cmd.run("chmod +x .git/hooks/post-commit") # MINOR @@ -421,7 +421,7 @@ def test_bump_tag_exists_raises_exception(mocker: MockFixture): def test_bump_on_git_with_hooks_no_verify_enabled(mocker: MockFixture): cmd.run("mkdir .git/hooks") with open(".git/hooks/pre-commit", "w", encoding="utf-8") as f: - f.write("#!/usr/bin/env bash\n" 'echo "0.1.0"') + f.write('#!/usr/bin/env bash\necho "0.1.0"') cmd.run("chmod +x .git/hooks/pre-commit") # MINOR @@ -478,7 +478,7 @@ def test_bump_when_no_new_commit(mocker: MockFixture): with pytest.raises(NoCommitsFoundError) as excinfo: cli.main() - expected_error_message = "[NO_COMMITS_FOUND]\n" "No new commits found." + expected_error_message = "[NO_COMMITS_FOUND]\nNo new commits found." assert expected_error_message in str(excinfo.value) @@ -710,7 +710,7 @@ def test_prevent_prerelease_when_no_increment_detected(mocker: MockFixture, caps cli.main() expected_error_message = ( - "[NO_COMMITS_FOUND]\n" "No commits found to generate a pre-release." + "[NO_COMMITS_FOUND]\nNo commits found to generate a pre-release." ) assert expected_error_message in str(excinfo.value) @@ -862,7 +862,7 @@ def test_bump_changelog_command_commits_untracked_changelog_and_version_files( mode="a", encoding="utf-8", ) as commitizen_config: - commitizen_config.write(f"version_files = [\n" f"'{version_regex}'\n]") + commitizen_config.write(f"version_files = [\n'{version_regex}'\n]") with tmp_commitizen_project.join(version_filepath).open( mode="a+", encoding="utf-8" @@ -917,7 +917,7 @@ def test_bump_invalid_manual_version_raises_exception(mocker, manual_version): cli.main() expected_error_message = ( - "[INVALID_MANUAL_VERSION]\n" f"Invalid manual version: '{manual_version}'" + f"[INVALID_MANUAL_VERSION]\nInvalid manual version: '{manual_version}'" ) assert expected_error_message in str(excinfo.value) @@ -1425,7 +1425,7 @@ def test_bump_changelog_contains_increment_only(mocker, tmp_commitizen_project, project_root = Path(tmp_commitizen_project) tmp_commitizen_cfg_file = project_root / "pyproject.toml" tmp_commitizen_cfg_file.write_text( - "[tool.commitizen]\n" 'version="1.0.0"\n' "update_changelog_on_bump = true\n" + '[tool.commitizen]\nversion="1.0.0"\nupdate_changelog_on_bump = true\n' ) tmp_changelog_file = project_root / "CHANGELOG.md" tmp_changelog_file.write_text("## v1.0.0") diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index bc0d6c6a28..a6ff7db2d8 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -1295,7 +1295,7 @@ def test_changelog_prerelease_rev_with_use_scheme_semver( mocker.patch("commitizen.git.GitTag.date", "2022-02-13") with open(config_path, "a") as f: - f.write('tag_format = "$version"\n' 'version_scheme = "semver"') + f.write('tag_format = "$version"\nversion_scheme = "semver"') # create commit and tag create_file_and_commit("feat: new file") diff --git a/tests/commands/test_check_command.py b/tests/commands/test_check_command.py index 57bfe3f10a..f1db446190 100644 --- a/tests/commands/test_check_command.py +++ b/tests/commands/test_check_command.py @@ -238,7 +238,7 @@ def test_check_a_range_of_failed_git_commits(config, mocker: MockFixture): ill_formated_commits_msgs = [ "First commit does not follow rule", "Second commit does not follow rule", - ("Third commit does not follow rule\n" "Ill-formatted commit with body"), + ("Third commit does not follow rule\nIll-formatted commit with body"), ] mocker.patch( "commitizen.git.get_commits", diff --git a/tests/commands/test_version_command.py b/tests/commands/test_version_command.py index f7d38c202d..927cf55f25 100644 --- a/tests/commands/test_version_command.py +++ b/tests/commands/test_version_command.py @@ -61,7 +61,7 @@ def test_version_for_showing_both_versions(config, capsys): )() captured = capsys.readouterr() expected_out = ( - f"Installed Commitizen Version: {__version__}\n" f"Project Version: v0.0.1" + f"Installed Commitizen Version: {__version__}\nProject Version: v0.0.1" ) assert expected_out in captured.out diff --git a/tests/conftest.py b/tests/conftest.py index 1e6bc15f0c..3d88f19b12 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -69,7 +69,7 @@ def tmp_git_project(tmpdir): @pytest.fixture(scope="function") def tmp_commitizen_project(tmp_git_project): tmp_commitizen_cfg_file = tmp_git_project.join("pyproject.toml") - tmp_commitizen_cfg_file.write("[tool.commitizen]\n" 'version="0.1.0"\n') + tmp_commitizen_cfg_file.write('[tool.commitizen]\nversion="0.1.0"\n') yield tmp_git_project @@ -83,9 +83,7 @@ def _initial( ): with tmp_git_project.as_cwd(): tmp_commitizen_cfg_file = tmp_git_project.join("pyproject.toml") - tmp_commitizen_cfg_file.write( - f"[tool.commitizen]\n" f'version="{version}"\n' - ) + tmp_commitizen_cfg_file.write(f'[tool.commitizen]\nversion="{version}"\n') tmp_version_file = tmp_git_project.join("__version__.py") tmp_version_file.write(version) tmp_commitizen_cfg_file = tmp_git_project.join("pyproject.toml") @@ -251,7 +249,7 @@ def changelog_format( if "tmp_commitizen_project" in request.fixturenames: tmp_commitizen_project = request.getfixturevalue("tmp_commitizen_project") pyproject = tmp_commitizen_project / "pyproject.toml" - pyproject.write(f"{pyproject.read()}\n" f'changelog_format = "{format}"\n') + pyproject.write(f'{pyproject.read()}\nchangelog_format = "{format}"\n') return get_changelog_format(config) diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 20d59488d3..76ee80600b 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1413,9 +1413,9 @@ def changelog_message_builder_hook(message: dict, commit: git.GitCommit): for no, line in enumerate(result.splitlines()): if (line := line.strip()) and (match := RE_HEADER.match(line)): change_type = match.group("type") - assert ( - change_type == "overridden" - ), f"Line {no}: type {change_type} should have been overridden" + assert change_type == "overridden", ( + f"Line {no}: type {change_type} should have been overridden" + ) def test_render_changelog_with_changelog_release_hook( diff --git a/tests/test_conf.py b/tests/test_conf.py index 1cbbc57aca..3e0a44c7dd 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -235,7 +235,7 @@ def test_init_empty_config_content(self, tmpdir, config_file, exception_string): def test_init_empty_config_content_with_existing_content( self, tmpdir, config_file, exception_string ): - existing_content = "[tool.black]\n" "line-length = 88\n" + existing_content = "[tool.black]\nline-length = 88\n" path = tmpdir.mkdir("commitizen").join(config_file) path.write(existing_content) diff --git a/tests/test_cz_conventional_commits.py b/tests/test_cz_conventional_commits.py index 04d0522174..6d4e0f7435 100644 --- a/tests/test_cz_conventional_commits.py +++ b/tests/test_cz_conventional_commits.py @@ -7,7 +7,7 @@ ) from commitizen.cz.exceptions import AnswerRequiredError -valid_scopes = ["", "simple", "dash-separated", "camelCase" "UPPERCASE"] +valid_scopes = ["", "simple", "dash-separated", "camelCaseUPPERCASE"] scopes_transformations = [["with spaces", "with-spaces"], [None, ""]] diff --git a/tests/test_git.py b/tests/test_git.py index 8bf995e8a8..f929ba6a44 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -84,7 +84,7 @@ def test_get_reachable_tags_with_commits( def test_get_tag_names(mocker: MockFixture): - tag_str = "v1.0.0\n" "v0.5.0\n" "v0.0.1\n" + tag_str = "v1.0.0\nv0.5.0\nv0.0.1\n" mocker.patch("commitizen.cmd.run", return_value=FakeCommand(out=tag_str)) assert git.get_tag_names() == ["v1.0.0", "v0.5.0", "v0.0.1"] From b9febf5d223e01171e43d110b0e93b3e4c5543b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 31 Jan 2025 01:53:27 +0000 Subject: [PATCH 474/685] build(deps-dev): bump ruff from 0.9.3 to 0.9.4 Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.3 to 0.9.4. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.9.3...0.9.4) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index aaf4e460a8..73c2b9f618 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1425,29 +1425,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.9.3" +version = "0.9.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.9.3-py3-none-linux_armv6l.whl", hash = "sha256:7f39b879064c7d9670197d91124a75d118d00b0990586549949aae80cdc16624"}, - {file = "ruff-0.9.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a187171e7c09efa4b4cc30ee5d0d55a8d6c5311b3e1b74ac5cb96cc89bafc43c"}, - {file = "ruff-0.9.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c59ab92f8e92d6725b7ded9d4a31be3ef42688a115c6d3da9457a5bda140e2b4"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc153c25e715be41bb228bc651c1e9b1a88d5c6e5ed0194fa0dfea02b026439"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:646909a1e25e0dc28fbc529eab8eb7bb583079628e8cbe738192853dbbe43af5"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a5a46e09355695fbdbb30ed9889d6cf1c61b77b700a9fafc21b41f097bfbba4"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c4bb09d2bbb394e3730d0918c00276e79b2de70ec2a5231cd4ebb51a57df9ba1"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96a87ec31dc1044d8c2da2ebbed1c456d9b561e7d087734336518181b26b3aa5"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bb7554aca6f842645022fe2d301c264e6925baa708b392867b7a62645304df4"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cabc332b7075a914ecea912cd1f3d4370489c8018f2c945a30bcc934e3bc06a6"}, - {file = "ruff-0.9.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:33866c3cc2a575cbd546f2cd02bdd466fed65118e4365ee538a3deffd6fcb730"}, - {file = "ruff-0.9.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:006e5de2621304c8810bcd2ee101587712fa93b4f955ed0985907a36c427e0c2"}, - {file = "ruff-0.9.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ba6eea4459dbd6b1be4e6bfc766079fb9b8dd2e5a35aff6baee4d9b1514ea519"}, - {file = "ruff-0.9.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:90230a6b8055ad47d3325e9ee8f8a9ae7e273078a66401ac66df68943ced029b"}, - {file = "ruff-0.9.3-py3-none-win32.whl", hash = "sha256:eabe5eb2c19a42f4808c03b82bd313fc84d4e395133fb3fc1b1516170a31213c"}, - {file = "ruff-0.9.3-py3-none-win_amd64.whl", hash = "sha256:040ceb7f20791dfa0e78b4230ee9dce23da3b64dd5848e40e3bf3ab76468dcf4"}, - {file = "ruff-0.9.3-py3-none-win_arm64.whl", hash = "sha256:800d773f6d4d33b0a3c60e2c6ae8f4c202ea2de056365acfa519aa48acf28e0b"}, - {file = "ruff-0.9.3.tar.gz", hash = "sha256:8293f89985a090ebc3ed1064df31f3b4b56320cdfcec8b60d3295bddb955c22a"}, + {file = "ruff-0.9.4-py3-none-linux_armv6l.whl", hash = "sha256:64e73d25b954f71ff100bb70f39f1ee09e880728efb4250c632ceed4e4cdf706"}, + {file = "ruff-0.9.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6ce6743ed64d9afab4fafeaea70d3631b4d4b28b592db21a5c2d1f0ef52934bf"}, + {file = "ruff-0.9.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:54499fb08408e32b57360f6f9de7157a5fec24ad79cb3f42ef2c3f3f728dfe2b"}, + {file = "ruff-0.9.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37c892540108314a6f01f105040b5106aeb829fa5fb0561d2dcaf71485021137"}, + {file = "ruff-0.9.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:de9edf2ce4b9ddf43fd93e20ef635a900e25f622f87ed6e3047a664d0e8f810e"}, + {file = "ruff-0.9.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87c90c32357c74f11deb7fbb065126d91771b207bf9bfaaee01277ca59b574ec"}, + {file = "ruff-0.9.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:56acd6c694da3695a7461cc55775f3a409c3815ac467279dfa126061d84b314b"}, + {file = "ruff-0.9.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0c93e7d47ed951b9394cf352d6695b31498e68fd5782d6cbc282425655f687a"}, + {file = "ruff-0.9.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d4c8772670aecf037d1bf7a07c39106574d143b26cfe5ed1787d2f31e800214"}, + {file = "ruff-0.9.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfc5f1d7afeda8d5d37660eeca6d389b142d7f2b5a1ab659d9214ebd0e025231"}, + {file = "ruff-0.9.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:faa935fc00ae854d8b638c16a5f1ce881bc3f67446957dd6f2af440a5fc8526b"}, + {file = "ruff-0.9.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a6c634fc6f5a0ceae1ab3e13c58183978185d131a29c425e4eaa9f40afe1e6d6"}, + {file = "ruff-0.9.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:433dedf6ddfdec7f1ac7575ec1eb9844fa60c4c8c2f8887a070672b8d353d34c"}, + {file = "ruff-0.9.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d612dbd0f3a919a8cc1d12037168bfa536862066808960e0cc901404b77968f0"}, + {file = "ruff-0.9.4-py3-none-win32.whl", hash = "sha256:db1192ddda2200671f9ef61d9597fcef89d934f5d1705e571a93a67fb13a4402"}, + {file = "ruff-0.9.4-py3-none-win_amd64.whl", hash = "sha256:05bebf4cdbe3ef75430d26c375773978950bbf4ee3c95ccb5448940dc092408e"}, + {file = "ruff-0.9.4-py3-none-win_arm64.whl", hash = "sha256:585792f1e81509e38ac5123492f8875fbc36f3ede8185af0a26df348e5154f41"}, + {file = "ruff-0.9.4.tar.gz", hash = "sha256:6907ee3529244bb0ed066683e075f09285b38dd5b4039370df6ff06041ca19e7"}, ] [[package]] From 54b4fdac5dda187875e5fee97f0100e26f8fe4df Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Thu, 30 Jan 2025 22:25:16 +0800 Subject: [PATCH 475/685] build(poetry): migrate to poetry 2.0 and follow pep 621 --- poetry.lock | 99 +++++++++++++++++++++++++++++++++-- pyproject.toml | 136 +++++++++++++++++++++++++++---------------------- 2 files changed, 169 insertions(+), 66 deletions(-) diff --git a/poetry.lock b/poetry.lock index 73c2b9f618..ebdf60ddda 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. [[package]] name = "argcomplete" @@ -6,6 +6,7 @@ version = "3.5.3" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "argcomplete-3.5.3-py3-none-any.whl", hash = "sha256:2ab2c4a215c59fd6caaff41a869480a23e8f6a5f910b266c1808037f4e375b61"}, {file = "argcomplete-3.5.3.tar.gz", hash = "sha256:c12bf50eded8aebb298c7b7da7a5ff3ee24dffd9f5281867dfe1424b58c55392"}, @@ -20,6 +21,7 @@ version = "2.4.1" description = "Annotate AST trees with source code positions" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, @@ -38,6 +40,7 @@ version = "2.16.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, @@ -52,6 +55,7 @@ version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, @@ -63,6 +67,7 @@ version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, @@ -74,6 +79,7 @@ version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, @@ -175,6 +181,7 @@ version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, @@ -189,6 +196,7 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -200,6 +208,7 @@ version = "7.6.8" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "coverage-7.6.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b39e6011cd06822eb964d038d5dff5da5d98652b81f5ecd439277b32361a3a50"}, {file = "coverage-7.6.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:63c19702db10ad79151a059d2d6336fe0c470f2e18d0d4d1a57f7f9713875dcf"}, @@ -277,6 +286,7 @@ version = "0.6.2" description = "Minimal, easy-to-use, declarative cli tool" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "decli-0.6.2-py3-none-any.whl", hash = "sha256:2fc84106ce9a8f523ed501ca543bdb7e416c064917c12a59ebdc7f311a97b7ed"}, {file = "decli-0.6.2.tar.gz", hash = "sha256:36f71eb55fd0093895efb4f416ec32b7f6e00147dda448e3365cf73ceab42d6f"}, @@ -288,6 +298,7 @@ version = "5.1.1" description = "Decorators for Humans" optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, @@ -299,6 +310,7 @@ version = "1.2.18" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +groups = ["dev"] files = [ {file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"}, {file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"}, @@ -316,6 +328,7 @@ version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, @@ -327,6 +340,8 @@ version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["dev"] +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -341,6 +356,7 @@ version = "2.1.1" description = "execnet: rapid multi-Python deployment" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, @@ -355,6 +371,7 @@ version = "2.1.0" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, @@ -369,6 +386,7 @@ version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, @@ -385,6 +403,7 @@ version = "1.5.1" description = "Let your Python tests travel through time" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "freezegun-1.5.1-py3-none-any.whl", hash = "sha256:bf111d7138a8abe55ab48a71755673dbaa4ab87f4cff5634a4442dfec34c15f1"}, {file = "freezegun-1.5.1.tar.gz", hash = "sha256:b29dedfcda6d5e8e083ce71b2b542753ad48cfec44037b3fc79702e2980a89e9"}, @@ -399,6 +418,7 @@ version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, @@ -416,6 +436,7 @@ version = "2.6.3" description = "File identification library for Python" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"}, {file = "identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02"}, @@ -430,6 +451,7 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -444,6 +466,8 @@ version = "8.6.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_version < \"3.10\"" files = [ {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, @@ -467,6 +491,7 @@ version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -478,6 +503,7 @@ version = "8.18.1" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, @@ -515,6 +541,7 @@ version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, @@ -534,6 +561,7 @@ version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, @@ -551,6 +579,7 @@ version = "3.7" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, @@ -569,6 +598,7 @@ version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -593,6 +623,7 @@ version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" +groups = ["main", "dev"] files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, @@ -663,6 +694,7 @@ version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, @@ -677,6 +709,7 @@ version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -688,6 +721,7 @@ version = "1.3.4" description = "A deep merge function for 🐍." optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, @@ -699,6 +733,7 @@ version = "1.6.1" description = "Project documentation with Markdown." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, @@ -730,6 +765,7 @@ version = "0.2.0" description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, @@ -747,6 +783,7 @@ version = "9.5.50" description = "Documentation that simply works" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "mkdocs_material-9.5.50-py3-none-any.whl", hash = "sha256:f24100f234741f4d423a9d672a909d859668a4f404796be3cf035f10d6050385"}, {file = "mkdocs_material-9.5.50.tar.gz", hash = "sha256:ae5fe16f3d7c9ccd05bb6916a7da7420cf99a9ce5e33debd9d40403a090d5825"}, @@ -776,6 +813,7 @@ version = "1.3.1" description = "Extension pack for Python Markdown and MkDocs Material." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, @@ -787,6 +825,7 @@ version = "1.14.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, @@ -846,6 +885,7 @@ version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -857,6 +897,7 @@ version = "1.9.1" description = "Node.js virtual environment builder" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, @@ -868,6 +909,7 @@ version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -879,6 +921,7 @@ version = "0.5.7" description = "Divides large result sets into pages for easier browsing" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, @@ -894,6 +937,7 @@ version = "0.8.4" description = "A Python Parser" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, @@ -909,6 +953,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -920,6 +965,8 @@ version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" +groups = ["dev"] +markers = "sys_platform != \"win32\"" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, @@ -934,6 +981,7 @@ version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -950,6 +998,7 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -965,6 +1014,7 @@ version = "4.1.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "pre_commit-4.1.0-py2.py3-none-any.whl", hash = "sha256:d29e7cb346295bcc1cc75fc3e92e343495e3ea0196c9ec6ba53f49f10ab6ae7b"}, {file = "pre_commit-4.1.0.tar.gz", hash = "sha256:ae3f018575a588e30dfddfab9a05448bfbd6b73d78709617b5a2b853549716d4"}, @@ -983,6 +1033,7 @@ version = "3.0.48" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" +groups = ["main", "dev"] files = [ {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, @@ -997,6 +1048,8 @@ version = "0.7.0" description = "Run a subprocess in a pseudo terminal" optional = false python-versions = "*" +groups = ["dev"] +markers = "sys_platform != \"win32\"" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -1008,6 +1061,7 @@ version = "0.2.3" description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, @@ -1022,6 +1076,7 @@ version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, @@ -1036,6 +1091,7 @@ version = "10.12" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pymdown_extensions-10.12-py3-none-any.whl", hash = "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77"}, {file = "pymdown_extensions-10.12.tar.gz", hash = "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7"}, @@ -1054,6 +1110,7 @@ version = "8.3.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, @@ -1076,6 +1133,7 @@ version = "6.0.0" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0"}, {file = "pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35"}, @@ -1094,6 +1152,7 @@ version = "1.5.0" description = "pytest plugin for test data directories and files" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest-datadir-1.5.0.tar.gz", hash = "sha256:1617ed92f9afda0c877e4eac91904b5f779d24ba8f5e438752e3ae39d8d2ee3f"}, {file = "pytest_datadir-1.5.0-py3-none-any.whl", hash = "sha256:34adf361bcc7b37961bbc1dfa8d25a4829e778bab461703c38a5c50ca9c36dc8"}, @@ -1108,6 +1167,7 @@ version = "0.4.9" description = "Pytest plugin providing a fixture interface for spulec/freezegun" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "pytest_freezer-0.4.9-py3-none-any.whl", hash = "sha256:8b6c50523b7d4aec4590b52bfa5ff766d772ce506e2bf4846c88041ea9ccae59"}, {file = "pytest_freezer-0.4.9.tar.gz", hash = "sha256:21bf16bc9cc46bf98f94382c4b5c3c389be7056ff0be33029111ae11b3f1c82a"}, @@ -1123,6 +1183,7 @@ version = "3.14.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, @@ -1140,6 +1201,7 @@ version = "2.7.0" description = "Easy to use fixtures to write regression tests." optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "pytest_regressions-2.7.0-py3-none-any.whl", hash = "sha256:69f5e3f03493cf0ef84d96d23e50a546617c198b1d7746f2e2b9e441cbab4847"}, {file = "pytest_regressions-2.7.0.tar.gz", hash = "sha256:4c30064e0923929012c94f5d6f35205be06fd8709c7f0dba0228e05c460af05e"}, @@ -1162,6 +1224,7 @@ version = "3.6.1" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, @@ -1182,6 +1245,7 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["dev"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -1196,6 +1260,7 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -1258,6 +1323,7 @@ version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, @@ -1272,6 +1338,7 @@ version = "2.1.0" description = "Python library to build pretty command line user prompts ⭐️" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "questionary-2.1.0-py3-none-any.whl", hash = "sha256:44174d237b68bc828e4878c763a9ad6790ee61990e0ae72927694ead57bab8ec"}, {file = "questionary-2.1.0.tar.gz", hash = "sha256:6302cdd645b19667d8f6e6634774e9538bfcd1aad9be287e743d96cacaf95587"}, @@ -1286,6 +1353,7 @@ version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, @@ -1389,6 +1457,7 @@ version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -1410,6 +1479,7 @@ version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" +groups = ["dev"] files = [ {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, @@ -1429,6 +1499,7 @@ version = "0.9.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "ruff-0.9.4-py3-none-linux_armv6l.whl", hash = "sha256:64e73d25b954f71ff100bb70f39f1ee09e880728efb4250c632ceed4e4cdf706"}, {file = "ruff-0.9.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6ce6743ed64d9afab4fafeaea70d3631b4d4b28b592db21a5c2d1f0ef52934bf"}, @@ -1456,6 +1527,7 @@ version = "1.16.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["dev"] files = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -1467,6 +1539,7 @@ version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, @@ -1486,6 +1559,7 @@ version = "2.5.0" description = "ANSI color formatting for output in terminal" optional = false python-versions = ">=3.9" +groups = ["main"] files = [ {file = "termcolor-2.5.0-py3-none-any.whl", hash = "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8"}, {file = "termcolor-2.5.0.tar.gz", hash = "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f"}, @@ -1500,6 +1574,8 @@ version = "2.1.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_full_version <= \"3.11.0a6\"" files = [ {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, @@ -1511,6 +1587,7 @@ version = "0.13.2" description = "Style preserving TOML library" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, @@ -1522,6 +1599,7 @@ version = "5.14.3" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, @@ -1537,6 +1615,7 @@ version = "1.2.15.20241117" description = "Typing stubs for Deprecated" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-Deprecated-1.2.15.20241117.tar.gz", hash = "sha256:924002c8b7fddec51ba4949788a702411a2e3636cd9b2a33abd8ee119701d77e"}, {file = "types_Deprecated-1.2.15.20241117-py3-none-any.whl", hash = "sha256:a0cc5e39f769fc54089fd8e005416b55d74aa03f6964d2ed1a0b0b2e28751884"}, @@ -1548,6 +1627,7 @@ version = "2.9.0.20241206" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, @@ -1559,6 +1639,7 @@ version = "6.0.12.20241230" description = "Typing stubs for PyYAML" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types_PyYAML-6.0.12.20241230-py3-none-any.whl", hash = "sha256:fa4d32565219b68e6dee5f67534c722e53c00d1cfc09c435ef04d7353e1e96e6"}, {file = "types_pyyaml-6.0.12.20241230.tar.gz", hash = "sha256:7f07622dbd34bb9c8b264fe860a17e0efcad00d50b5f27e93984909d9363498c"}, @@ -1570,6 +1651,7 @@ version = "0.1.1" description = "Typing stubs for termcolor" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "types-termcolor-0.1.1.tar.gz", hash = "sha256:4d9e09ce7f3267985f5280b22e25790c98cb64628b6466e1fb915dbb52ad7136"}, {file = "types_termcolor-0.1.1-py2.py3-none-any.whl", hash = "sha256:3694c312e32f71fdc0f469c334ea21645f3130d90c93cd53bcb06b1233e174d5"}, @@ -1581,10 +1663,12 @@ version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] +markers = {main = "python_version < \"3.11\""} [[package]] name = "urllib3" @@ -1592,6 +1676,7 @@ version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, @@ -1609,6 +1694,7 @@ version = "20.27.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, @@ -1629,6 +1715,7 @@ version = "6.0.0" description = "Filesystem events monitoring" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, @@ -1671,6 +1758,7 @@ version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, @@ -1682,6 +1770,7 @@ version = "1.17.0" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, @@ -1756,6 +1845,8 @@ version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_version < \"3.10\"" files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, @@ -1770,6 +1861,6 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", type = ["pytest-mypy"] [metadata] -lock-version = "2.0" -python-versions = ">=3.9" -content-hash = "ac79ae58b65962eac836910d2b1359591d1fd53c68afb354b4c549cdcdd4349c" +lock-version = "2.1" +python-versions = ">=3.9,<4.0" +content-hash = "0ba0fceb54fee21c1f4b61a80f1e2b5f0d0eff4ac688f22a97f274d7da9a598e" diff --git a/pyproject.toml b/pyproject.toml index 8ee2cf8d58..3609f7ba52 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,21 +1,28 @@ -[tool.commitizen] -version = "4.1.1" -tag_format = "v$version" -version_files = [ - "pyproject.toml:version", - "commitizen/__version__.py", - ".pre-commit-config.yaml:rev:.+Commitizen", -] - -[tool.poetry] +[project] name = "commitizen" version = "4.1.1" description = "Python commitizen client tool" -authors = ["Santiago Fraire <santiwilly@gmail.com>"] -license = "MIT" -keywords = ["commitizen", "conventional", "commits", "git"] +authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] +license = { text = "LICENSE" } readme = "docs/README.md" -homepage = "https://github.com/commitizen-tools/commitizen" +requires-python = ">=3.9,<4.0" +dependencies = [ + "questionary (>=2.0,<3.0)", + "decli (>=0.6.0,<1.0)", + "colorama (>=0.4.1,<1.0)", + "termcolor (>=1.1,<3)", + "packaging>=19", + "tomlkit (>=0.5.3,<1.0.0)", + "jinja2>=2.10.3", + "pyyaml>=3.08", + "argcomplete >=1.12.1,<3.6", + "typing-extensions (>=4.0.1,<5.0.0) ; python_version < '3.11'", + "charset-normalizer (>=2.1.0,<4)", + # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility + "importlib_metadata (>=8.0.0,<9) ; python_version < '3.10'", + +] +keywords = ["commitizen", "conventional", "commits", "git"] # See also: https://pypi.org/classifiers/ classifiers = [ "Development Status :: 5 - Production/Stable", @@ -32,23 +39,60 @@ classifiers = [ "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", ] -packages = [{ include = "commitizen" }, { include = "commitizen/py.typed" }] -[tool.poetry.dependencies] -python = ">=3.9" -questionary = "^2.0" -decli = "^0.6.0" -colorama = "^0.4.1" -termcolor = ">= 1.1, < 3" -packaging = ">=19" -tomlkit = ">=0.5.3,<1.0.0" -jinja2 = ">=2.10.3" -pyyaml = ">=3.08" -argcomplete = ">=1.12.1,<3.6" -typing-extensions = { version = "^4.0.1", python = "<3.11" } -charset-normalizer = ">=2.1.0,<4" -# Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility -importlib_metadata = { version = ">=8.0.0,<9", python = "<3.10" } +[project.urls] +Homepage = "https://github.com/commitizen-tools/commitizen" +Documentation = "https://commitizen-tools.github.io/commitizen/" +Repository = "https://github.com/commitizen-tools/commitizen" +Issues = "https://github.com/commitizen-tools/commitizen/issues" +Changelog = "https://github.com/commitizen-tools/commitizen/blob/master/CHANGELOG.md" + +[project.scripts] +cz = "commitizen.cli:main" +git-cz = "commitizen.cli:main" + +[project.entry-points."commitizen.plugin"] +cz_conventional_commits = "commitizen.cz.conventional_commits:ConventionalCommitsCz" +cz_jira = "commitizen.cz.jira:JiraSmartCz" +cz_customize = "commitizen.cz.customize:CustomizeCommitsCz" + +[project.entry-points."commitizen.changelog_format"] +markdown = "commitizen.changelog_formats.markdown:Markdown" +asciidoc = "commitizen.changelog_formats.asciidoc:AsciiDoc" +textile = "commitizen.changelog_formats.textile:Textile" +restructuredtext = "commitizen.changelog_formats.restructuredtext:RestructuredText" + +[project.entry-points."commitizen.provider"] +cargo = "commitizen.providers:CargoProvider" +commitizen = "commitizen.providers:CommitizenProvider" +composer = "commitizen.providers:ComposerProvider" +npm = "commitizen.providers:NpmProvider" +pep621 = "commitizen.providers:Pep621Provider" +poetry = "commitizen.providers:PoetryProvider" +scm = "commitizen.providers:ScmProvider" + +[project.entry-points."commitizen.scheme"] +pep440 = "commitizen.version_schemes:Pep440" +semver = "commitizen.version_schemes:SemVer" +semver2 = "commitizen.version_schemes:SemVer2" + +[build-system] +requires = ["poetry-core>=2.0"] +build-backend = "poetry.core.masonry.api" + + +[tool.commitizen] +version = "4.1.1" +tag_format = "v$version" +version_files = [ + "pyproject.toml:version", + "commitizen/__version__.py", + ".pre-commit-config.yaml:rev:.+Commitizen", +] + + +[tool.poetry] +packages = [{ include = "commitizen" }, { include = "commitizen/py.typed" }] [tool.poetry.group.dev.dependencies] # dev tool @@ -75,35 +119,6 @@ types-python-dateutil = "^2.8.19.13" rich = "^13.7.1" -[tool.poetry.scripts] -cz = "commitizen.cli:main" -git-cz = "commitizen.cli:main" - -[tool.poetry.plugins."commitizen.plugin"] -cz_conventional_commits = "commitizen.cz.conventional_commits:ConventionalCommitsCz" -cz_jira = "commitizen.cz.jira:JiraSmartCz" -cz_customize = "commitizen.cz.customize:CustomizeCommitsCz" - -[tool.poetry.plugins."commitizen.changelog_format"] -markdown = "commitizen.changelog_formats.markdown:Markdown" -asciidoc = "commitizen.changelog_formats.asciidoc:AsciiDoc" -textile = "commitizen.changelog_formats.textile:Textile" -restructuredtext = "commitizen.changelog_formats.restructuredtext:RestructuredText" - -[tool.poetry.plugins."commitizen.provider"] -cargo = "commitizen.providers:CargoProvider" -commitizen = "commitizen.providers:CommitizenProvider" -composer = "commitizen.providers:ComposerProvider" -npm = "commitizen.providers:NpmProvider" -pep621 = "commitizen.providers:Pep621Provider" -poetry = "commitizen.providers:PoetryProvider" -scm = "commitizen.providers:ScmProvider" - -[tool.poetry.plugins."commitizen.scheme"] -pep440 = "commitizen.version_schemes:Pep440" -semver = "commitizen.version_schemes:SemVer" -semver2 = "commitizen.version_schemes:SemVer2" - [tool.coverage] [tool.coverage.report] show_missing = true @@ -133,9 +148,6 @@ omit = [ '*/tests/*', ] -[build-system] -requires = ["poetry_core>=1.0.0"] -build-backend = "poetry.core.masonry.api" [tool.pytest.ini_options] addopts = "--strict-markers" From 949a9e5b364d227a58843a7a9b73336b545dc4e9 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Thu, 30 Jan 2025 22:31:32 +0800 Subject: [PATCH 476/685] build(poetry): group dependencies --- poetry.lock | 136 ++++++++++++++++++++++++------------------------- pyproject.toml | 19 ++++--- 2 files changed, 80 insertions(+), 75 deletions(-) diff --git a/poetry.lock b/poetry.lock index ebdf60ddda..723dceddd9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -40,7 +40,7 @@ version = "2.16.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, @@ -55,7 +55,7 @@ version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, @@ -67,7 +67,7 @@ version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["linters"] files = [ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, @@ -79,7 +79,7 @@ version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" -groups = ["main", "dev"] +groups = ["main", "documentation"] files = [ {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, @@ -181,7 +181,7 @@ version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, @@ -196,7 +196,7 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main", "dev"] +groups = ["main", "dev", "documentation", "test"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -208,7 +208,7 @@ version = "7.6.8" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" -groups = ["dev"] +groups = ["test"] files = [ {file = "coverage-7.6.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b39e6011cd06822eb964d038d5dff5da5d98652b81f5ecd439277b32361a3a50"}, {file = "coverage-7.6.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:63c19702db10ad79151a059d2d6336fe0c470f2e18d0d4d1a57f7f9713875dcf"}, @@ -310,7 +310,7 @@ version = "1.2.18" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -groups = ["dev"] +groups = ["test"] files = [ {file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"}, {file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"}, @@ -328,7 +328,7 @@ version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" -groups = ["dev"] +groups = ["linters"] files = [ {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, @@ -340,7 +340,7 @@ version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" -groups = ["dev"] +groups = ["dev", "test"] markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, @@ -356,7 +356,7 @@ version = "2.1.1" description = "execnet: rapid multi-Python deployment" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["test"] files = [ {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, @@ -386,7 +386,7 @@ version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["linters"] files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, @@ -403,7 +403,7 @@ version = "1.5.1" description = "Let your Python tests travel through time" optional = false python-versions = ">=3.7" -groups = ["dev"] +groups = ["test"] files = [ {file = "freezegun-1.5.1-py3-none-any.whl", hash = "sha256:bf111d7138a8abe55ab48a71755673dbaa4ab87f4cff5634a4442dfec34c15f1"}, {file = "freezegun-1.5.1.tar.gz", hash = "sha256:b29dedfcda6d5e8e083ce71b2b542753ad48cfec44037b3fc79702e2980a89e9"}, @@ -418,7 +418,7 @@ version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." optional = false python-versions = "*" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, @@ -436,7 +436,7 @@ version = "2.6.3" description = "File identification library for Python" optional = false python-versions = ">=3.9" -groups = ["dev"] +groups = ["linters"] files = [ {file = "identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"}, {file = "identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02"}, @@ -451,7 +451,7 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -466,7 +466,7 @@ version = "8.6.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.9" -groups = ["main", "dev"] +groups = ["main", "documentation"] markers = "python_version < \"3.10\"" files = [ {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, @@ -491,7 +491,7 @@ version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" -groups = ["dev"] +groups = ["test"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -561,7 +561,7 @@ version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" -groups = ["main", "dev"] +groups = ["main", "documentation"] files = [ {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, @@ -579,7 +579,7 @@ version = "3.7" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, @@ -598,7 +598,7 @@ version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["script"] files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -623,7 +623,7 @@ version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" -groups = ["main", "dev"] +groups = ["main", "documentation"] files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, @@ -709,7 +709,7 @@ version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" -groups = ["dev"] +groups = ["script"] files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -721,7 +721,7 @@ version = "1.3.4" description = "A deep merge function for 🐍." optional = false python-versions = ">=3.6" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, @@ -733,7 +733,7 @@ version = "1.6.1" description = "Project documentation with Markdown." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, @@ -765,7 +765,7 @@ version = "0.2.0" description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, @@ -783,7 +783,7 @@ version = "9.5.50" description = "Documentation that simply works" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "mkdocs_material-9.5.50-py3-none-any.whl", hash = "sha256:f24100f234741f4d423a9d672a909d859668a4f404796be3cf035f10d6050385"}, {file = "mkdocs_material-9.5.50.tar.gz", hash = "sha256:ae5fe16f3d7c9ccd05bb6916a7da7420cf99a9ce5e33debd9d40403a090d5825"}, @@ -813,7 +813,7 @@ version = "1.3.1" description = "Extension pack for Python Markdown and MkDocs Material." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, @@ -825,7 +825,7 @@ version = "1.14.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["linters"] files = [ {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, @@ -885,7 +885,7 @@ version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" -groups = ["dev"] +groups = ["linters"] files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -897,7 +897,7 @@ version = "1.9.1" description = "Node.js virtual environment builder" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["dev"] +groups = ["linters"] files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, @@ -909,7 +909,7 @@ version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main", "documentation", "test"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -921,7 +921,7 @@ version = "0.5.7" description = "Divides large result sets into pages for easier browsing" optional = false python-versions = "*" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, @@ -953,7 +953,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -981,7 +981,7 @@ version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["documentation", "linters"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -998,7 +998,7 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["test"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -1014,7 +1014,7 @@ version = "4.1.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" -groups = ["dev"] +groups = ["linters"] files = [ {file = "pre_commit-4.1.0-py2.py3-none-any.whl", hash = "sha256:d29e7cb346295bcc1cc75fc3e92e343495e3ea0196c9ec6ba53f49f10ab6ae7b"}, {file = "pre_commit-4.1.0.tar.gz", hash = "sha256:ae3f018575a588e30dfddfab9a05448bfbd6b73d78709617b5a2b853549716d4"}, @@ -1076,7 +1076,7 @@ version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "documentation", "script"] files = [ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, @@ -1091,7 +1091,7 @@ version = "10.12" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "pymdown_extensions-10.12-py3-none-any.whl", hash = "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77"}, {file = "pymdown_extensions-10.12.tar.gz", hash = "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7"}, @@ -1110,7 +1110,7 @@ version = "8.3.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["test"] files = [ {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, @@ -1133,7 +1133,7 @@ version = "6.0.0" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.9" -groups = ["dev"] +groups = ["test"] files = [ {file = "pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0"}, {file = "pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35"}, @@ -1152,7 +1152,7 @@ version = "1.5.0" description = "pytest plugin for test data directories and files" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["test"] files = [ {file = "pytest-datadir-1.5.0.tar.gz", hash = "sha256:1617ed92f9afda0c877e4eac91904b5f779d24ba8f5e438752e3ae39d8d2ee3f"}, {file = "pytest_datadir-1.5.0-py3-none-any.whl", hash = "sha256:34adf361bcc7b37961bbc1dfa8d25a4829e778bab461703c38a5c50ca9c36dc8"}, @@ -1167,7 +1167,7 @@ version = "0.4.9" description = "Pytest plugin providing a fixture interface for spulec/freezegun" optional = false python-versions = ">=3.6" -groups = ["dev"] +groups = ["test"] files = [ {file = "pytest_freezer-0.4.9-py3-none-any.whl", hash = "sha256:8b6c50523b7d4aec4590b52bfa5ff766d772ce506e2bf4846c88041ea9ccae59"}, {file = "pytest_freezer-0.4.9.tar.gz", hash = "sha256:21bf16bc9cc46bf98f94382c4b5c3c389be7056ff0be33029111ae11b3f1c82a"}, @@ -1183,7 +1183,7 @@ version = "3.14.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["test"] files = [ {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, @@ -1201,7 +1201,7 @@ version = "2.7.0" description = "Easy to use fixtures to write regression tests." optional = false python-versions = ">=3.9" -groups = ["dev"] +groups = ["test"] files = [ {file = "pytest_regressions-2.7.0-py3-none-any.whl", hash = "sha256:69f5e3f03493cf0ef84d96d23e50a546617c198b1d7746f2e2b9e441cbab4847"}, {file = "pytest_regressions-2.7.0.tar.gz", hash = "sha256:4c30064e0923929012c94f5d6f35205be06fd8709c7f0dba0228e05c460af05e"}, @@ -1224,7 +1224,7 @@ version = "3.6.1" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["test"] files = [ {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, @@ -1245,7 +1245,7 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["dev"] +groups = ["documentation", "test"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -1260,7 +1260,7 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main", "documentation", "linters", "test"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -1323,7 +1323,7 @@ version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " optional = false python-versions = ">=3.6" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, @@ -1353,7 +1353,7 @@ version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, @@ -1457,7 +1457,7 @@ version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -1479,7 +1479,7 @@ version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" -groups = ["dev"] +groups = ["script"] files = [ {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, @@ -1499,7 +1499,7 @@ version = "0.9.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" -groups = ["dev"] +groups = ["linters"] files = [ {file = "ruff-0.9.4-py3-none-linux_armv6l.whl", hash = "sha256:64e73d25b954f71ff100bb70f39f1ee09e880728efb4250c632ceed4e4cdf706"}, {file = "ruff-0.9.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6ce6743ed64d9afab4fafeaea70d3631b4d4b28b592db21a5c2d1f0ef52934bf"}, @@ -1527,7 +1527,7 @@ version = "1.16.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -groups = ["dev"] +groups = ["dev", "documentation", "test"] files = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -1574,12 +1574,12 @@ version = "2.1.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" -groups = ["dev"] -markers = "python_full_version <= \"3.11.0a6\"" +groups = ["linters", "test"] files = [ {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, ] +markers = {linters = "python_version < \"3.11\"", test = "python_full_version <= \"3.11.0a6\""} [[package]] name = "tomlkit" @@ -1615,7 +1615,7 @@ version = "1.2.15.20241117" description = "Typing stubs for Deprecated" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["linters"] files = [ {file = "types-Deprecated-1.2.15.20241117.tar.gz", hash = "sha256:924002c8b7fddec51ba4949788a702411a2e3636cd9b2a33abd8ee119701d77e"}, {file = "types_Deprecated-1.2.15.20241117-py3-none-any.whl", hash = "sha256:a0cc5e39f769fc54089fd8e005416b55d74aa03f6964d2ed1a0b0b2e28751884"}, @@ -1627,7 +1627,7 @@ version = "2.9.0.20241206" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["linters"] files = [ {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, @@ -1639,7 +1639,7 @@ version = "6.0.12.20241230" description = "Typing stubs for PyYAML" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["linters"] files = [ {file = "types_PyYAML-6.0.12.20241230-py3-none-any.whl", hash = "sha256:fa4d32565219b68e6dee5f67534c722e53c00d1cfc09c435ef04d7353e1e96e6"}, {file = "types_pyyaml-6.0.12.20241230.tar.gz", hash = "sha256:7f07622dbd34bb9c8b264fe860a17e0efcad00d50b5f27e93984909d9363498c"}, @@ -1651,7 +1651,7 @@ version = "0.1.1" description = "Typing stubs for termcolor" optional = false python-versions = "*" -groups = ["dev"] +groups = ["linters"] files = [ {file = "types-termcolor-0.1.1.tar.gz", hash = "sha256:4d9e09ce7f3267985f5280b22e25790c98cb64628b6466e1fb915dbb52ad7136"}, {file = "types_termcolor-0.1.1-py2.py3-none-any.whl", hash = "sha256:3694c312e32f71fdc0f469c334ea21645f3130d90c93cd53bcb06b1233e174d5"}, @@ -1663,12 +1663,12 @@ version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main", "dev", "linters", "script"] files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] -markers = {main = "python_version < \"3.11\""} +markers = {main = "python_version < \"3.11\"", dev = "python_version < \"3.11\"", script = "python_version < \"3.11\""} [[package]] name = "urllib3" @@ -1676,7 +1676,7 @@ version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, @@ -1694,7 +1694,7 @@ version = "20.27.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["linters"] files = [ {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, @@ -1715,7 +1715,7 @@ version = "6.0.0" description = "Filesystem events monitoring" optional = false python-versions = ">=3.9" -groups = ["dev"] +groups = ["documentation"] files = [ {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, @@ -1770,7 +1770,7 @@ version = "1.17.0" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["test"] files = [ {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, @@ -1845,7 +1845,7 @@ version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" -groups = ["main", "dev"] +groups = ["main", "documentation"] markers = "python_version < \"3.10\"" files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, @@ -1863,4 +1863,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "0ba0fceb54fee21c1f4b61a80f1e2b5f0d0eff4ac688f22a97f274d7da9a598e" +content-hash = "83c82b26a9bff591edf995c9c251e52dc23d9a4024562e1218a783ddf151fc20" diff --git a/pyproject.toml b/pyproject.toml index 3609f7ba52..a76ef78183 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -95,27 +95,32 @@ version_files = [ packages = [{ include = "commitizen" }, { include = "commitizen/py.typed" }] [tool.poetry.group.dev.dependencies] -# dev tool ipython = "^8.0" -# test + +[tool.poetry.group.test.dependencies] pytest = ">=7.2,<9.0" pytest-cov = ">=4,<7" pytest-mock = "^3.10" pytest-regressions = "^2.4.0" pytest-freezer = "^0.4.6" pytest-xdist = "^3.1.0" -# linter +deprecated = "^1.2.13" + +[tool.poetry.group.linters.dependencies] ruff = ">=0.5.0,<0.10.0" pre-commit = ">=2.18,<5.0" mypy = "^1.4" +types-deprecated = "^1.2.9.2" +types-python-dateutil = "^2.8.19.13" types-PyYAML = ">=5.4.3,<7.0.0" types-termcolor = "^0.1.1" -# documentation + +[tool.poetry.group.documentation.dependencies] mkdocs = "^1.4.2" mkdocs-material = "^9.1.6" -deprecated = "^1.2.13" -types-deprecated = "^1.2.9.2" -types-python-dateutil = "^2.8.19.13" + +[tool.poetry.group.script.dependencies] +# for scripts/gen_cli_help_screenshots.py rich = "^13.7.1" From 665895c19c0a46876afe4dfba02582628ce7e980 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Thu, 30 Jan 2025 22:33:47 +0800 Subject: [PATCH 477/685] docs(contributing): update minimum poetry requirment to 2.0.0 --- docs/contributing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing.md b/docs/contributing.md index a49196277e..439e3a19f7 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -8,7 +8,7 @@ If you're a first-time contributor, you can check the issues with [good first is ## Install before contributing -1. Install [poetry](https://python-poetry.org/) `1.2.0+`, installation [pages](https://python-poetry.org/docs/#installing-with-the-official-installer) +1. Install [poetry](https://python-poetry.org/) `>=2.0.0`, installation [pages](https://python-poetry.org/docs/#installing-with-the-official-installer) 2. Install [gpg](https://gnupg.org), installation [pages](https://gnupg.org/documentation/manuals/gnupg/Installation.html#Installation). For Mac users, you could try [homebrew](https://brew.sh/). ## Before making a pull request From a88ecd9500b9dceb88cf5f57273f99d49f049a82 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 31 Jan 2025 08:48:18 +0800 Subject: [PATCH 478/685] ci(github-actions): replace deprecated file key with files in codecov-action --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 4f99a595c7..8df5e54c03 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -33,6 +33,6 @@ jobs: uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} - file: ./coverage.xml + files: ./coverage.xml flags: unittests name: codecov-umbrella From b311b39985a4e3bfe3d917a9d0cbdee1753989f7 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 31 Jan 2025 21:40:25 +0800 Subject: [PATCH 479/685] build(pyproject.toml): add maintainers --- pyproject.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index a76ef78183..39169a3743 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,6 +3,10 @@ name = "commitizen" version = "4.1.1" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] +maintainers = [ + { name = "Wei Lee", email = "weilee.rx@gmail.com" }, + { name = " Axel H.", email = "noirbizarre@gmail.com" }, +] license = { text = "LICENSE" } readme = "docs/README.md" requires-python = ">=3.9,<4.0" From e31a31589e577a3bf7019206ecd26edab4902ebf Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 31 Jan 2025 21:40:43 +0800 Subject: [PATCH 480/685] fixup! build(pyproject.toml): add maintainers --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 39169a3743..5ea78a0ba1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ { name = "Wei Lee", email = "weilee.rx@gmail.com" }, - { name = " Axel H.", email = "noirbizarre@gmail.com" }, + { name = "Axel H.", email = "noirbizarre@gmail.com" }, ] license = { text = "LICENSE" } readme = "docs/README.md" From 95e7d5a65bfd340e0b47f7f44900dcfd127d77b0 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 31 Jan 2025 21:42:33 +0800 Subject: [PATCH 481/685] build(pyproject.toml): set version_scheme = "pep440" --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 5ea78a0ba1..76c51c474a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -93,6 +93,7 @@ version_files = [ "commitizen/__version__.py", ".pre-commit-config.yaml:rev:.+Commitizen", ] +version_scheme = "pep440" [tool.poetry] From 5d6369ee1c6e06f610f5a77117df909cee389b64 Mon Sep 17 00:00:00 2001 From: Michael Hirschler <michael@hirschler.me> Date: Fri, 31 Jan 2025 13:45:29 +0100 Subject: [PATCH 482/685] docs(customization): fix yaml example --- docs/customization.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/customization.md b/docs/customization.md index 16ba588f10..132f4f0490 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -104,7 +104,7 @@ The equivalent example for a json config file: } ``` -And the correspondent example for a yaml json file: +And the correspondent example for a yaml file: ```yaml commitizen: @@ -115,8 +115,8 @@ commitizen: schema: "<type>: <body>" schema_pattern: "(feature|bug fix):(\\s.*)" bump_pattern: "^(break|new|fix|hotfix)" - commit_parser: "^(?P<change_type>feature|bug fix):\\s(?P<message>.*)?", - changelog_pattern: "^(feature|bug fix)?(!)?", + commit_parser: "^(?P<change_type>feature|bug fix):\\s(?P<message>.*)?" + changelog_pattern: "^(feature|bug fix)?(!)?" change_type_map: feature: Feat bug fix: Fix @@ -139,10 +139,10 @@ commitizen: message: Select the type of change you are committing - type: input name: message - message: Body. + message: 'Body.' - type: confirm name: show_message - message: Do you want to add body message in commit? + message: 'Do you want to add body message in commit?' ``` ### Customize configuration From 6327544cbe61cac3c03051544d3c38d537c67217 Mon Sep 17 00:00:00 2001 From: Pierrick Rambaud <pierrick.rambaud49@gmail.com> Date: Mon, 24 Apr 2023 07:02:32 +0200 Subject: [PATCH 483/685] feat: draft of the --empty parameter --- commitizen/cli.py | 6 ++++++ commitizen/commands/bump.py | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 0b411cba60..88c186d833 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -371,6 +371,12 @@ def __call__( "help": "Determine the next version and write to stdout", "default": False, }, + { + "name": ["--empty"], + "default": False, + "help": "bump tags without new commits", + "action": "store_true", + }, ], }, { diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 1b274061cb..7b8f5fc849 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -160,6 +160,7 @@ def __call__(self) -> None: # noqa: C901 build_metadata = self.arguments["build_metadata"] increment_mode: str = self.arguments["increment_mode"] get_next: bool = self.arguments["get_next"] + is_empty: bool | None = self.arguments["empty"] if manual_version: if increment: @@ -250,7 +251,7 @@ def __call__(self) -> None: # noqa: C901 # No commits, there is no need to create an empty tag. # Unless we previously had a prerelease. - if not commits and not current_version.is_prerelease: + if not commits and not current_version.is_prerelease and not is_empty: raise NoCommitsFoundError( "[NO_COMMITS_FOUND]\nNo new commits found." ) @@ -266,6 +267,10 @@ def __call__(self) -> None: # noqa: C901 "To avoid this error, manually specify the type of increment with `--increment`" ) + # we create an empty PATCH increment for empty tag + if increment is None and is_empty: + increment = "PATCH" + new_version = current_version.bump( increment, prerelease=prerelease, From 685e4ee1e20c5fa63011a962c18911ca16b08fee Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 21 Apr 2024 17:01:27 +0800 Subject: [PATCH 484/685] refactor(bump): rename --empty as --allow-no-commit --- commitizen/cli.py | 4 ++-- commitizen/commands/bump.py | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 88c186d833..72d824380d 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -372,9 +372,9 @@ def __call__( "default": False, }, { - "name": ["--empty"], + "name": ["--allow-no-commit"], "default": False, - "help": "bump tags without new commits", + "help": "bump version without eligible commits", "action": "store_true", }, ], diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 7b8f5fc849..b82cac940f 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -160,7 +160,7 @@ def __call__(self) -> None: # noqa: C901 build_metadata = self.arguments["build_metadata"] increment_mode: str = self.arguments["increment_mode"] get_next: bool = self.arguments["get_next"] - is_empty: bool | None = self.arguments["empty"] + allow_no_commit: bool | None = self.arguments["allow_no_commit"] if manual_version: if increment: @@ -251,7 +251,11 @@ def __call__(self) -> None: # noqa: C901 # No commits, there is no need to create an empty tag. # Unless we previously had a prerelease. - if not commits and not current_version.is_prerelease and not is_empty: + if ( + not commits + and not current_version.is_prerelease + and not allow_no_commit + ): raise NoCommitsFoundError( "[NO_COMMITS_FOUND]\nNo new commits found." ) @@ -268,7 +272,7 @@ def __call__(self) -> None: # noqa: C901 ) # we create an empty PATCH increment for empty tag - if increment is None and is_empty: + if increment is None and allow_no_commit: increment = "PATCH" new_version = current_version.bump( From 3b5a2aef5be88be740d93f2c919f6522b9784d85 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 21 Apr 2024 17:02:48 +0800 Subject: [PATCH 485/685] test(bump): add test cases for "--allow-no-commit" argument for bump command --- tests/commands/test_bump_command.py | 101 ++++++++++++++++++ ...shows_description_when_use_help_option.txt | 2 + 2 files changed, 103 insertions(+) diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 728a424107..934c0b8179 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -1543,3 +1543,104 @@ def test_bump_get_next__no_eligible_commits_raises(mocker: MockFixture): with pytest.raises(NoneIncrementExit): cli.main() + + +def test_bump_allow_no_commit_with_no_commit(mocker, tmp_commitizen_project, capsys): + with tmp_commitizen_project.as_cwd(): + # Create the first commit and bump to 1.0.0 + create_file_and_commit("feat(user)!: new file") + testargs = ["cz", "bump", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + # Verify NoCommitsFoundError should be raised + # when there's no new commit and "--allow-no-commit" is not set + with pytest.raises(NoCommitsFoundError): + testargs = ["cz", "bump"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + # bump to 1.0.1 with new commit when "--allow-no-commit" is set + testargs = ["cz", "bump", "--allow-no-commit"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + out, _ = capsys.readouterr() + assert "bump: version 1.0.0 → 1.0.1" in out + + +def test_bump_allow_no_commit_with_no_eligible_commit( + mocker, tmp_commitizen_project, capsys +): + with tmp_commitizen_project.as_cwd(): + # Create the first commit and bump to 1.0.0 + create_file_and_commit("feat(user)!: new file") + testargs = ["cz", "bump", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + # Create a commit that is ineligible to bump + create_file_and_commit("docs(bump): add description for allow no commit") + + # Verify NoneIncrementExit should be raised + # when there's no eligible bumping commit and "--allow-no-commit" is not set + with pytest.raises(NoneIncrementExit): + testargs = ["cz", "bump", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + # bump to 1.0.1 with ineligible commit when "--allow-no-commit" is set + testargs = ["cz", "bump", "--allow-no-commit"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + out, _ = capsys.readouterr() + assert "bump: version 1.0.0 → 1.0.1" in out + + +def test_bump_allow_no_commit_with_increment(mocker, tmp_commitizen_project, capsys): + with tmp_commitizen_project.as_cwd(): + # # Create the first commit and bump to 1.0.0 + create_file_and_commit("feat(user)!: new file") + testargs = ["cz", "bump", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + # Verify NoCommitsFoundError should be raised + # when there's no new commit and "--allow-no-commit" is not set + with pytest.raises(NoCommitsFoundError): + testargs = ["cz", "bump", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + # bump to 1.1.0 with no new commit when "--allow-no-commit" is set + # and increment is specified + testargs = ["cz", "bump", "--yes", "--allow-no-commit", "--increment", "MINOR"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + out, _ = capsys.readouterr() + assert "bump: version 1.0.0 → 1.1.0" in out + + +def test_bump_allow_no_commit_with_manual_version( + mocker, tmp_commitizen_project, capsys +): + with tmp_commitizen_project.as_cwd(): + # # Create the first commit and bump to 1.0.0 + create_file_and_commit("feat(user)!: new file") + testargs = ["cz", "bump", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + # Verify NoCommitsFoundError should be raised + # when there's no new commit and "--allow-no-commit" is not set + with pytest.raises(NoCommitsFoundError): + testargs = ["cz", "bump", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + # bump to 1.1.0 with no new commit when "--allow-no-commit" is set + # and increment is specified + testargs = ["cz", "bump", "--yes", "--allow-no-commit", "2.0.0"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + out, _ = capsys.readouterr() + assert "bump: version 1.0.0 → 2.0.0" in out diff --git a/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt b/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt index ab73bd4491..5d4438875d 100644 --- a/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt @@ -11,6 +11,7 @@ usage: cz bump [-h] [--dry-run] [--files-only] [--local-version] [--changelog] [--version-scheme {pep440,semver,semver2}] [--version-type {pep440,semver,semver2}] [--build-metadata BUILD_METADATA] [--get-next] + [--allow-no-commit] [MANUAL_VERSION] bump semantic version based on the git log @@ -77,3 +78,4 @@ options: --build-metadata BUILD_METADATA Add additional build-metadata to the version-number --get-next Determine the next version and write to stdout + --allow-no-commit bump version without eligible commits From 2c97d0294df6c491012c7b1ab77740ba7cc4f3d1 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 21 Apr 2024 17:14:17 +0800 Subject: [PATCH 486/685] docs(bump): add description for bump "--allow-no-commit" argument --- docs/commands/bump.md | 36 +- docs/images/cli_help/cz___help.svg | 162 ++++----- docs/images/cli_help/cz_bump___help.svg | 358 ++++++++++--------- docs/images/cli_help/cz_changelog___help.svg | 190 +++++----- docs/images/cli_help/cz_check___help.svg | 134 +++---- docs/images/cli_help/cz_commit___help.svg | 110 +++--- 6 files changed, 511 insertions(+), 479 deletions(-) diff --git a/docs/commands/bump.md b/docs/commands/bump.md index afb43230e4..49c6f03434 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -52,7 +52,6 @@ Some examples of pep440: ![cz bump --help](../images/cli_help/cz_bump___help.svg) - ### `--files-only` Bumps the version in the files defined in `version_files` without creating a commit and tag on the git repository, @@ -178,6 +177,7 @@ If `--local-version` is used, it will bump only the local version `0.1.0` and ke If `--annotated-tag` is used, commitizen will create annotated tags. Also available via configuration, in `pyproject.toml` or `.cz.toml`. ### `--annotated-tag-message` + If `--annotated-tag-message` is used, commitizen will create annotated tags with the given message. ### `--changelog-to-stdout` @@ -276,14 +276,14 @@ cz bump --build-metadata yourmetadata Will create a version like `1.1.2+yourmetadata`. This can be useful for multiple things -* Git hash in version -* Labeling the version with additional metadata. +- Git hash in version +- Labeling the version with additional metadata. Note that Commitizen ignores everything after `+` when it bumps the version. It is therefore safe to write different build-metadata between versions. You should normally not use this functionality, but if you decide to do, keep in mind that -* Version `1.2.3+a`, and `1.2.3+b` are the same version! Tools should not use the string after `+` for version calculation. This is probably not a guarantee (example in helm) even tho it is in the spec. -* It might be problematic having the metadata in place when doing upgrades depending on what tool you use. +- Version `1.2.3+a`, and `1.2.3+b` are the same version! Tools should not use the string after `+` for version calculation. This is probably not a guarantee (example in helm) even tho it is in the spec. +- It might be problematic having the metadata in place when doing upgrades depending on what tool you use. ### `--get-next` @@ -318,6 +318,18 @@ The `--get-next` flag will raise a `NoneIncrementExit` if the found commits are For information on how to suppress this exit, see [avoid raising errors](#avoid-raising-errors). +### `--allow-no-commit` + +Allow the project version to be bumped even when there's no eligible version. This is most useful when used with `--increment {MAJOR,MINOR,PATCH}` or `[MANUL_VERSION]` + +```sh +# bump a minor version even when there's only bug fixes, documentation changes or even no commits +cz bump --incremental MINOR --allow-no-commit + +# bump version to 2.0.0 even when there's no breaking changes changes or even no commits +cz bump --allow-no-commit 2.0.0 +``` + ## Avoid raising errors Some situations from commitizen raise an exit code different than 0. @@ -389,13 +401,13 @@ cz -nr 21 bump These are used in: -* `cz bump`: Find previous release tag (exact match) and generate new tag. -* Find previous release tags in `cz changelog`. - * If `--incremental`: Using latest version found in the changelog, scan existing Git tags with 89\% similarity match. - * `--rev-range` is converted to Git tag names with `tag_format` before searching Git history. -* If the `scm` `version_provider` is used, it uses different regexes to find the previous version tags: - * If `tag_format` is set to `$version` (default): `VersionProtocol.parser` (allows `v` prefix) - * If `tag_format` is set: Custom regex similar to SemVer (not as lenient as PEP440 e.g. on dev-releases) +- `cz bump`: Find previous release tag (exact match) and generate new tag. +- Find previous release tags in `cz changelog`. + - If `--incremental`: Using latest version found in the changelog, scan existing Git tags with 89\% similarity match. + - `--rev-range` is converted to Git tag names with `tag_format` before searching Git history. +- If the `scm` `version_provider` is used, it uses different regexes to find the previous version tags: + - If `tag_format` is set to `$version` (default): `VersionProtocol.parser` (allows `v` prefix) + - If `tag_format` is set: Custom regex similar to SemVer (not as lenient as PEP440 e.g. on dev-releases) Commitizen supports 2 types of formats, a simple and a more complex. diff --git a/docs/images/cli_help/cz___help.svg b/docs/images/cli_help/cz___help.svg index 098e7df70d..22a9e4d0e7 100644 --- a/docs/images/cli_help/cz___help.svg +++ b/docs/images/cli_help/cz___help.svg @@ -19,133 +19,133 @@ font-weight: 700; } - .terminal-2205183093-matrix { + .terminal-4198725382-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2205183093-title { + .terminal-4198725382-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2205183093-r1 { fill: #c5c8c6 } -.terminal-2205183093-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-2205183093-r3 { fill: #d0b344 } -.terminal-2205183093-r4 { fill: #1984e9;text-decoration: underline; } -.terminal-2205183093-r5 { fill: #68a0b3;font-weight: bold } + .terminal-4198725382-r1 { fill: #c5c8c6 } +.terminal-4198725382-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-4198725382-r3 { fill: #d0b344 } +.terminal-4198725382-r4 { fill: #1984e9;text-decoration: underline; } +.terminal-4198725382-r5 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-2205183093-clip-terminal"> + <clipPath id="terminal-4198725382-clip-terminal"> <rect x="0" y="0" width="975.0" height="877.4" /> </clipPath> - <clipPath id="terminal-2205183093-line-0"> + <clipPath id="terminal-4198725382-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-1"> +<clipPath id="terminal-4198725382-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-2"> +<clipPath id="terminal-4198725382-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-3"> +<clipPath id="terminal-4198725382-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-4"> +<clipPath id="terminal-4198725382-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-5"> +<clipPath id="terminal-4198725382-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-6"> +<clipPath id="terminal-4198725382-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-7"> +<clipPath id="terminal-4198725382-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-8"> +<clipPath id="terminal-4198725382-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-9"> +<clipPath id="terminal-4198725382-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-10"> +<clipPath id="terminal-4198725382-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-11"> +<clipPath id="terminal-4198725382-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-12"> +<clipPath id="terminal-4198725382-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-13"> +<clipPath id="terminal-4198725382-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-14"> +<clipPath id="terminal-4198725382-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-15"> +<clipPath id="terminal-4198725382-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-16"> +<clipPath id="terminal-4198725382-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-17"> +<clipPath id="terminal-4198725382-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-18"> +<clipPath id="terminal-4198725382-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-19"> +<clipPath id="terminal-4198725382-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-20"> +<clipPath id="terminal-4198725382-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-21"> +<clipPath id="terminal-4198725382-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-22"> +<clipPath id="terminal-4198725382-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-23"> +<clipPath id="terminal-4198725382-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-24"> +<clipPath id="terminal-4198725382-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-25"> +<clipPath id="terminal-4198725382-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-26"> +<clipPath id="terminal-4198725382-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-27"> +<clipPath id="terminal-4198725382-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-28"> +<clipPath id="terminal-4198725382-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-29"> +<clipPath id="terminal-4198725382-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-30"> +<clipPath id="terminal-4198725382-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-31"> +<clipPath id="terminal-4198725382-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-32"> +<clipPath id="terminal-4198725382-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-33"> +<clipPath id="terminal-4198725382-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-34"> +<clipPath id="terminal-4198725382-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> </defs> @@ -157,45 +157,45 @@ <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-2205183093-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-4198725382-clip-terminal)"> - <g class="terminal-2205183093-matrix"> - <text class="terminal-2205183093-r1" x="0" y="20" textLength="134.2" clip-path="url(#terminal-2205183093-line-0)">$ cz --help</text><text class="terminal-2205183093-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2205183093-line-0)"> -</text><text class="terminal-2205183093-r1" x="0" y="44.4" textLength="122" clip-path="url(#terminal-2205183093-line-1)">usage: cz </text><text class="terminal-2205183093-r2" x="122" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="134.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2205183093-line-1)">-h</text><text class="terminal-2205183093-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="195.2" y="44.4" textLength="183" clip-path="url(#terminal-2205183093-line-1)">--config CONFIG</text><text class="terminal-2205183093-r2" x="378.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="402.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="414.8" y="44.4" textLength="85.4" clip-path="url(#terminal-2205183093-line-1)">--debug</text><text class="terminal-2205183093-r2" x="500.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="536.8" y="44.4" textLength="85.4" clip-path="url(#terminal-2205183093-line-1)">-n NAME</text><text class="terminal-2205183093-r2" x="622.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="646.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="658.8" y="44.4" textLength="146.4" clip-path="url(#terminal-2205183093-line-1)">-nr NO_RAISE</text><text class="terminal-2205183093-r2" x="805.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)"> -</text><text class="terminal-2205183093-r2" x="122" y="68.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-2)">{</text><text class="terminal-2205183093-r1" x="134.2" y="68.8" textLength="829.6" clip-path="url(#terminal-2205183093-line-2)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-2205183093-r2" x="963.8" y="68.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-2)">}</text><text class="terminal-2205183093-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-2)"> -</text><text class="terminal-2205183093-r3" x="0" y="93.2" textLength="36.6" clip-path="url(#terminal-2205183093-line-3)">...</text><text class="terminal-2205183093-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-3)"> -</text><text class="terminal-2205183093-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-4)"> -</text><text class="terminal-2205183093-r1" x="0" y="142" textLength="707.6" clip-path="url(#terminal-2205183093-line-5)">Commitizen is a cli tool to generate conventional commits.</text><text class="terminal-2205183093-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2205183093-line-5)"> -</text><text class="terminal-2205183093-r1" x="0" y="166.4" textLength="524.6" clip-path="url(#terminal-2205183093-line-6)">For more information about the topic go to </text><text class="terminal-2205183093-r4" x="524.6" y="166.4" textLength="390.4" clip-path="url(#terminal-2205183093-line-6)">https://conventionalcommits.org/</text><text class="terminal-2205183093-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-6)"> -</text><text class="terminal-2205183093-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-7)"> -</text><text class="terminal-2205183093-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-2205183093-line-8)">options:</text><text class="terminal-2205183093-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-8)"> -</text><text class="terminal-2205183093-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-2205183093-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-2205183093-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-9)"> -</text><text class="terminal-2205183093-r1" x="0" y="264" textLength="658.8" clip-path="url(#terminal-2205183093-line-10)">  --config CONFIG       the path of configuration file</text><text class="terminal-2205183093-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2205183093-line-10)"> -</text><text class="terminal-2205183093-r1" x="0" y="288.4" textLength="463.6" clip-path="url(#terminal-2205183093-line-11)">  --debug               use debug mode</text><text class="terminal-2205183093-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-11)"> -</text><text class="terminal-2205183093-r1" x="0" y="312.8" textLength="597.8" clip-path="url(#terminal-2205183093-line-12)">  -n, --name NAME       use the given commitizen </text><text class="terminal-2205183093-r2" x="597.8" y="312.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-12)">(</text><text class="terminal-2205183093-r1" x="610" y="312.8" textLength="97.6" clip-path="url(#terminal-2205183093-line-12)">default:</text><text class="terminal-2205183093-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-12)"> -</text><text class="terminal-2205183093-r1" x="0" y="337.2" textLength="573.4" clip-path="url(#terminal-2205183093-line-13)">                        cz_conventional_commits</text><text class="terminal-2205183093-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-13)">)</text><text class="terminal-2205183093-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-13)"> -</text><text class="terminal-2205183093-r1" x="0" y="361.6" textLength="317.2" clip-path="url(#terminal-2205183093-line-14)">  -nr, --no-raise NO_RAISE</text><text class="terminal-2205183093-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-14)"> -</text><text class="terminal-2205183093-r1" x="0" y="386" textLength="902.8" clip-path="url(#terminal-2205183093-line-15)">                        comma separated error codes that won't rise error,</text><text class="terminal-2205183093-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2205183093-line-15)"> -</text><text class="terminal-2205183093-r1" x="0" y="410.4" textLength="439.2" clip-path="url(#terminal-2205183093-line-16)">                        e.g: cz -nr </text><text class="terminal-2205183093-r5" x="439.2" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">1</text><text class="terminal-2205183093-r1" x="451.4" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">,</text><text class="terminal-2205183093-r5" x="463.6" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">2</text><text class="terminal-2205183093-r1" x="475.8" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">,</text><text class="terminal-2205183093-r5" x="488" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">3</text><text class="terminal-2205183093-r1" x="500.2" y="410.4" textLength="231.8" clip-path="url(#terminal-2205183093-line-16)"> bump. See codes at</text><text class="terminal-2205183093-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)"> -</text><text class="terminal-2205183093-r4" x="292.8" y="434.8" textLength="231.8" clip-path="url(#terminal-2205183093-line-17)">https://commitizen-</text><text class="terminal-2205183093-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-17)"> -</text><text class="terminal-2205183093-r1" x="0" y="459.2" textLength="756.4" clip-path="url(#terminal-2205183093-line-18)">                        tools.github.io/commitizen/exit_codes/</text><text class="terminal-2205183093-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-18)"> -</text><text class="terminal-2205183093-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-19)"> -</text><text class="terminal-2205183093-r1" x="0" y="508" textLength="109.8" clip-path="url(#terminal-2205183093-line-20)">commands:</text><text class="terminal-2205183093-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2205183093-line-20)"> -</text><text class="terminal-2205183093-r2" x="24.4" y="532.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-21)">{</text><text class="terminal-2205183093-r1" x="36.6" y="532.4" textLength="829.6" clip-path="url(#terminal-2205183093-line-21)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-2205183093-r2" x="866.2" y="532.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-21)">}</text><text class="terminal-2205183093-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-21)"> -</text><text class="terminal-2205183093-r1" x="0" y="556.8" textLength="646.6" clip-path="url(#terminal-2205183093-line-22)">    init                init commitizen configuration</text><text class="terminal-2205183093-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-22)"> -</text><text class="terminal-2205183093-r1" x="0" y="581.2" textLength="134.2" clip-path="url(#terminal-2205183093-line-23)">    commit </text><text class="terminal-2205183093-r2" x="134.2" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)">(</text><text class="terminal-2205183093-r1" x="146.4" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)">c</text><text class="terminal-2205183093-r2" x="158.6" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)">)</text><text class="terminal-2205183093-r1" x="170.8" y="581.2" textLength="329.4" clip-path="url(#terminal-2205183093-line-23)">          create new commit</text><text class="terminal-2205183093-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)"> -</text><text class="terminal-2205183093-r1" x="0" y="605.6" textLength="610" clip-path="url(#terminal-2205183093-line-24)">    ls                  show available commitizens</text><text class="terminal-2205183093-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-24)"> -</text><text class="terminal-2205183093-r1" x="0" y="630" textLength="524.6" clip-path="url(#terminal-2205183093-line-25)">    example             show commit example</text><text class="terminal-2205183093-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2205183093-line-25)"> -</text><text class="terminal-2205183093-r1" x="0" y="654.4" textLength="646.6" clip-path="url(#terminal-2205183093-line-26)">    info                show information about the cz</text><text class="terminal-2205183093-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-26)"> -</text><text class="terminal-2205183093-r1" x="0" y="678.8" textLength="512.4" clip-path="url(#terminal-2205183093-line-27)">    schema              show commit schema</text><text class="terminal-2205183093-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-27)"> -</text><text class="terminal-2205183093-r1" x="0" y="703.2" textLength="805.2" clip-path="url(#terminal-2205183093-line-28)">    bump                bump semantic version based on the git log</text><text class="terminal-2205183093-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-28)"> -</text><text class="terminal-2205183093-r1" x="0" y="727.6" textLength="170.8" clip-path="url(#terminal-2205183093-line-29)">    changelog </text><text class="terminal-2205183093-r2" x="170.8" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)">(</text><text class="terminal-2205183093-r1" x="183" y="727.6" textLength="24.4" clip-path="url(#terminal-2205183093-line-29)">ch</text><text class="terminal-2205183093-r2" x="207.4" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)">)</text><text class="terminal-2205183093-r1" x="219.6" y="727.6" textLength="305" clip-path="url(#terminal-2205183093-line-29)">      generate changelog </text><text class="terminal-2205183093-r2" x="524.6" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)">(</text><text class="terminal-2205183093-r1" x="536.8" y="727.6" textLength="329.4" clip-path="url(#terminal-2205183093-line-29)">note that it will overwrite</text><text class="terminal-2205183093-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)"> -</text><text class="terminal-2205183093-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-2205183093-line-30)">                        existing file</text><text class="terminal-2205183093-r2" x="451.4" y="752" textLength="12.2" clip-path="url(#terminal-2205183093-line-30)">)</text><text class="terminal-2205183093-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-2205183093-line-30)"> -</text><text class="terminal-2205183093-r1" x="0" y="776.4" textLength="951.6" clip-path="url(#terminal-2205183093-line-31)">    check               validates that a commit message matches the commitizen</text><text class="terminal-2205183093-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-31)"> -</text><text class="terminal-2205183093-r1" x="0" y="800.8" textLength="366" clip-path="url(#terminal-2205183093-line-32)">                        schema</text><text class="terminal-2205183093-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-32)"> -</text><text class="terminal-2205183093-r1" x="0" y="825.2" textLength="902.8" clip-path="url(#terminal-2205183093-line-33)">    version             get the version of the installed commitizen or the</text><text class="terminal-2205183093-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-33)"> -</text><text class="terminal-2205183093-r1" x="0" y="849.6" textLength="488" clip-path="url(#terminal-2205183093-line-34)">                        current project </text><text class="terminal-2205183093-r2" x="488" y="849.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-34)">(</text><text class="terminal-2205183093-r1" x="500.2" y="849.6" textLength="353.8" clip-path="url(#terminal-2205183093-line-34)">default: installed commitizen</text><text class="terminal-2205183093-r2" x="854" y="849.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-34)">)</text><text class="terminal-2205183093-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-34)"> -</text><text class="terminal-2205183093-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-2205183093-line-35)"> + <g class="terminal-4198725382-matrix"> + <text class="terminal-4198725382-r1" x="0" y="20" textLength="134.2" clip-path="url(#terminal-4198725382-line-0)">$ cz --help</text><text class="terminal-4198725382-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-4198725382-line-0)"> +</text><text class="terminal-4198725382-r1" x="0" y="44.4" textLength="122" clip-path="url(#terminal-4198725382-line-1)">usage: cz </text><text class="terminal-4198725382-r2" x="122" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="134.2" y="44.4" textLength="24.4" clip-path="url(#terminal-4198725382-line-1)">-h</text><text class="terminal-4198725382-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="195.2" y="44.4" textLength="183" clip-path="url(#terminal-4198725382-line-1)">--config CONFIG</text><text class="terminal-4198725382-r2" x="378.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="402.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="414.8" y="44.4" textLength="85.4" clip-path="url(#terminal-4198725382-line-1)">--debug</text><text class="terminal-4198725382-r2" x="500.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="536.8" y="44.4" textLength="85.4" clip-path="url(#terminal-4198725382-line-1)">-n NAME</text><text class="terminal-4198725382-r2" x="622.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="646.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="658.8" y="44.4" textLength="146.4" clip-path="url(#terminal-4198725382-line-1)">-nr NO_RAISE</text><text class="terminal-4198725382-r2" x="805.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)"> +</text><text class="terminal-4198725382-r2" x="122" y="68.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-2)">{</text><text class="terminal-4198725382-r1" x="134.2" y="68.8" textLength="829.6" clip-path="url(#terminal-4198725382-line-2)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-4198725382-r2" x="963.8" y="68.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-2)">}</text><text class="terminal-4198725382-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-2)"> +</text><text class="terminal-4198725382-r3" x="122" y="93.2" textLength="36.6" clip-path="url(#terminal-4198725382-line-3)">...</text><text class="terminal-4198725382-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-3)"> +</text><text class="terminal-4198725382-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-4)"> +</text><text class="terminal-4198725382-r1" x="0" y="142" textLength="707.6" clip-path="url(#terminal-4198725382-line-5)">Commitizen is a cli tool to generate conventional commits.</text><text class="terminal-4198725382-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-4198725382-line-5)"> +</text><text class="terminal-4198725382-r1" x="0" y="166.4" textLength="524.6" clip-path="url(#terminal-4198725382-line-6)">For more information about the topic go to </text><text class="terminal-4198725382-r4" x="524.6" y="166.4" textLength="390.4" clip-path="url(#terminal-4198725382-line-6)">https://conventionalcommits.org/</text><text class="terminal-4198725382-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-6)"> +</text><text class="terminal-4198725382-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-7)"> +</text><text class="terminal-4198725382-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-4198725382-line-8)">options:</text><text class="terminal-4198725382-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-8)"> +</text><text class="terminal-4198725382-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-4198725382-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-4198725382-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-9)"> +</text><text class="terminal-4198725382-r1" x="0" y="264" textLength="658.8" clip-path="url(#terminal-4198725382-line-10)">  --config CONFIG       the path of configuration file</text><text class="terminal-4198725382-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-4198725382-line-10)"> +</text><text class="terminal-4198725382-r1" x="0" y="288.4" textLength="463.6" clip-path="url(#terminal-4198725382-line-11)">  --debug               use debug mode</text><text class="terminal-4198725382-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-11)"> +</text><text class="terminal-4198725382-r1" x="0" y="312.8" textLength="597.8" clip-path="url(#terminal-4198725382-line-12)">  -n NAME, --name NAME  use the given commitizen </text><text class="terminal-4198725382-r2" x="597.8" y="312.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-12)">(</text><text class="terminal-4198725382-r1" x="610" y="312.8" textLength="97.6" clip-path="url(#terminal-4198725382-line-12)">default:</text><text class="terminal-4198725382-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-12)"> +</text><text class="terminal-4198725382-r1" x="0" y="337.2" textLength="573.4" clip-path="url(#terminal-4198725382-line-13)">                        cz_conventional_commits</text><text class="terminal-4198725382-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-13)">)</text><text class="terminal-4198725382-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-13)"> +</text><text class="terminal-4198725382-r1" x="0" y="361.6" textLength="427" clip-path="url(#terminal-4198725382-line-14)">  -nr NO_RAISE, --no-raise NO_RAISE</text><text class="terminal-4198725382-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-14)"> +</text><text class="terminal-4198725382-r1" x="0" y="386" textLength="902.8" clip-path="url(#terminal-4198725382-line-15)">                        comma separated error codes that won't rise error,</text><text class="terminal-4198725382-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-4198725382-line-15)"> +</text><text class="terminal-4198725382-r1" x="0" y="410.4" textLength="439.2" clip-path="url(#terminal-4198725382-line-16)">                        e.g: cz -nr </text><text class="terminal-4198725382-r5" x="439.2" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">1</text><text class="terminal-4198725382-r1" x="451.4" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">,</text><text class="terminal-4198725382-r5" x="463.6" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">2</text><text class="terminal-4198725382-r1" x="475.8" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">,</text><text class="terminal-4198725382-r5" x="488" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">3</text><text class="terminal-4198725382-r1" x="500.2" y="410.4" textLength="231.8" clip-path="url(#terminal-4198725382-line-16)"> bump. See codes at</text><text class="terminal-4198725382-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)"> +</text><text class="terminal-4198725382-r4" x="292.8" y="434.8" textLength="231.8" clip-path="url(#terminal-4198725382-line-17)">https://commitizen-</text><text class="terminal-4198725382-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-17)"> +</text><text class="terminal-4198725382-r1" x="0" y="459.2" textLength="756.4" clip-path="url(#terminal-4198725382-line-18)">                        tools.github.io/commitizen/exit_codes/</text><text class="terminal-4198725382-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-18)"> +</text><text class="terminal-4198725382-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-19)"> +</text><text class="terminal-4198725382-r1" x="0" y="508" textLength="109.8" clip-path="url(#terminal-4198725382-line-20)">commands:</text><text class="terminal-4198725382-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-4198725382-line-20)"> +</text><text class="terminal-4198725382-r2" x="24.4" y="532.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-21)">{</text><text class="terminal-4198725382-r1" x="36.6" y="532.4" textLength="829.6" clip-path="url(#terminal-4198725382-line-21)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-4198725382-r2" x="866.2" y="532.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-21)">}</text><text class="terminal-4198725382-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-21)"> +</text><text class="terminal-4198725382-r1" x="0" y="556.8" textLength="646.6" clip-path="url(#terminal-4198725382-line-22)">    init                init commitizen configuration</text><text class="terminal-4198725382-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-22)"> +</text><text class="terminal-4198725382-r1" x="0" y="581.2" textLength="134.2" clip-path="url(#terminal-4198725382-line-23)">    commit </text><text class="terminal-4198725382-r2" x="134.2" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)">(</text><text class="terminal-4198725382-r1" x="146.4" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)">c</text><text class="terminal-4198725382-r2" x="158.6" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)">)</text><text class="terminal-4198725382-r1" x="170.8" y="581.2" textLength="329.4" clip-path="url(#terminal-4198725382-line-23)">          create new commit</text><text class="terminal-4198725382-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)"> +</text><text class="terminal-4198725382-r1" x="0" y="605.6" textLength="610" clip-path="url(#terminal-4198725382-line-24)">    ls                  show available commitizens</text><text class="terminal-4198725382-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-24)"> +</text><text class="terminal-4198725382-r1" x="0" y="630" textLength="524.6" clip-path="url(#terminal-4198725382-line-25)">    example             show commit example</text><text class="terminal-4198725382-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-4198725382-line-25)"> +</text><text class="terminal-4198725382-r1" x="0" y="654.4" textLength="646.6" clip-path="url(#terminal-4198725382-line-26)">    info                show information about the cz</text><text class="terminal-4198725382-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-26)"> +</text><text class="terminal-4198725382-r1" x="0" y="678.8" textLength="512.4" clip-path="url(#terminal-4198725382-line-27)">    schema              show commit schema</text><text class="terminal-4198725382-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-27)"> +</text><text class="terminal-4198725382-r1" x="0" y="703.2" textLength="805.2" clip-path="url(#terminal-4198725382-line-28)">    bump                bump semantic version based on the git log</text><text class="terminal-4198725382-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-28)"> +</text><text class="terminal-4198725382-r1" x="0" y="727.6" textLength="170.8" clip-path="url(#terminal-4198725382-line-29)">    changelog </text><text class="terminal-4198725382-r2" x="170.8" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)">(</text><text class="terminal-4198725382-r1" x="183" y="727.6" textLength="24.4" clip-path="url(#terminal-4198725382-line-29)">ch</text><text class="terminal-4198725382-r2" x="207.4" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)">)</text><text class="terminal-4198725382-r1" x="219.6" y="727.6" textLength="305" clip-path="url(#terminal-4198725382-line-29)">      generate changelog </text><text class="terminal-4198725382-r2" x="524.6" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)">(</text><text class="terminal-4198725382-r1" x="536.8" y="727.6" textLength="329.4" clip-path="url(#terminal-4198725382-line-29)">note that it will overwrite</text><text class="terminal-4198725382-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)"> +</text><text class="terminal-4198725382-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-4198725382-line-30)">                        existing file</text><text class="terminal-4198725382-r2" x="451.4" y="752" textLength="12.2" clip-path="url(#terminal-4198725382-line-30)">)</text><text class="terminal-4198725382-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-4198725382-line-30)"> +</text><text class="terminal-4198725382-r1" x="0" y="776.4" textLength="951.6" clip-path="url(#terminal-4198725382-line-31)">    check               validates that a commit message matches the commitizen</text><text class="terminal-4198725382-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-31)"> +</text><text class="terminal-4198725382-r1" x="0" y="800.8" textLength="366" clip-path="url(#terminal-4198725382-line-32)">                        schema</text><text class="terminal-4198725382-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-32)"> +</text><text class="terminal-4198725382-r1" x="0" y="825.2" textLength="902.8" clip-path="url(#terminal-4198725382-line-33)">    version             get the version of the installed commitizen or the</text><text class="terminal-4198725382-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-33)"> +</text><text class="terminal-4198725382-r1" x="0" y="849.6" textLength="488" clip-path="url(#terminal-4198725382-line-34)">                        current project </text><text class="terminal-4198725382-r2" x="488" y="849.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-34)">(</text><text class="terminal-4198725382-r1" x="500.2" y="849.6" textLength="353.8" clip-path="url(#terminal-4198725382-line-34)">default: installed commitizen</text><text class="terminal-4198725382-r2" x="854" y="849.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-34)">)</text><text class="terminal-4198725382-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-34)"> +</text><text class="terminal-4198725382-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-4198725382-line-35)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_bump___help.svg b/docs/images/cli_help/cz_bump___help.svg index 4030b1ba90..659b68b955 100644 --- a/docs/images/cli_help/cz_bump___help.svg +++ b/docs/images/cli_help/cz_bump___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 2026.3999999999999" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 2099.6" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,362 +19,374 @@ font-weight: 700; } - .terminal-3254289243-matrix { + .terminal-2232203-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3254289243-title { + .terminal-2232203-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3254289243-r1 { fill: #c5c8c6 } -.terminal-3254289243-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-3254289243-r3 { fill: #68a0b3;font-weight: bold } -.terminal-3254289243-r4 { fill: #98a84b } + .terminal-2232203-r1 { fill: #c5c8c6 } +.terminal-2232203-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-2232203-r3 { fill: #68a0b3;font-weight: bold } +.terminal-2232203-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-3254289243-clip-terminal"> - <rect x="0" y="0" width="975.0" height="1975.3999999999999" /> + <clipPath id="terminal-2232203-clip-terminal"> + <rect x="0" y="0" width="975.0" height="2048.6" /> </clipPath> - <clipPath id="terminal-3254289243-line-0"> + <clipPath id="terminal-2232203-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-1"> +<clipPath id="terminal-2232203-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-2"> +<clipPath id="terminal-2232203-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-3"> +<clipPath id="terminal-2232203-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-4"> +<clipPath id="terminal-2232203-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-5"> +<clipPath id="terminal-2232203-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-6"> +<clipPath id="terminal-2232203-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-7"> +<clipPath id="terminal-2232203-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-8"> +<clipPath id="terminal-2232203-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-9"> +<clipPath id="terminal-2232203-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-10"> +<clipPath id="terminal-2232203-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-11"> +<clipPath id="terminal-2232203-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-12"> +<clipPath id="terminal-2232203-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-13"> +<clipPath id="terminal-2232203-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-14"> +<clipPath id="terminal-2232203-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-15"> +<clipPath id="terminal-2232203-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-16"> +<clipPath id="terminal-2232203-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-17"> +<clipPath id="terminal-2232203-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-18"> +<clipPath id="terminal-2232203-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-19"> +<clipPath id="terminal-2232203-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-20"> +<clipPath id="terminal-2232203-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-21"> +<clipPath id="terminal-2232203-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-22"> +<clipPath id="terminal-2232203-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-23"> +<clipPath id="terminal-2232203-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-24"> +<clipPath id="terminal-2232203-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-25"> +<clipPath id="terminal-2232203-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-26"> +<clipPath id="terminal-2232203-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-27"> +<clipPath id="terminal-2232203-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-28"> +<clipPath id="terminal-2232203-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-29"> +<clipPath id="terminal-2232203-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-30"> +<clipPath id="terminal-2232203-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-31"> +<clipPath id="terminal-2232203-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-32"> +<clipPath id="terminal-2232203-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-33"> +<clipPath id="terminal-2232203-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-34"> +<clipPath id="terminal-2232203-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-35"> +<clipPath id="terminal-2232203-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-36"> +<clipPath id="terminal-2232203-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-37"> +<clipPath id="terminal-2232203-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-38"> +<clipPath id="terminal-2232203-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-39"> +<clipPath id="terminal-2232203-line-39"> <rect x="0" y="953.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-40"> +<clipPath id="terminal-2232203-line-40"> <rect x="0" y="977.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-41"> +<clipPath id="terminal-2232203-line-41"> <rect x="0" y="1001.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-42"> +<clipPath id="terminal-2232203-line-42"> <rect x="0" y="1026.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-43"> +<clipPath id="terminal-2232203-line-43"> <rect x="0" y="1050.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-44"> +<clipPath id="terminal-2232203-line-44"> <rect x="0" y="1075.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-45"> +<clipPath id="terminal-2232203-line-45"> <rect x="0" y="1099.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-46"> +<clipPath id="terminal-2232203-line-46"> <rect x="0" y="1123.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-47"> +<clipPath id="terminal-2232203-line-47"> <rect x="0" y="1148.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-48"> +<clipPath id="terminal-2232203-line-48"> <rect x="0" y="1172.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-49"> +<clipPath id="terminal-2232203-line-49"> <rect x="0" y="1197.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-50"> +<clipPath id="terminal-2232203-line-50"> <rect x="0" y="1221.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-51"> +<clipPath id="terminal-2232203-line-51"> <rect x="0" y="1245.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-52"> +<clipPath id="terminal-2232203-line-52"> <rect x="0" y="1270.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-53"> +<clipPath id="terminal-2232203-line-53"> <rect x="0" y="1294.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-54"> +<clipPath id="terminal-2232203-line-54"> <rect x="0" y="1319.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-55"> +<clipPath id="terminal-2232203-line-55"> <rect x="0" y="1343.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-56"> +<clipPath id="terminal-2232203-line-56"> <rect x="0" y="1367.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-57"> +<clipPath id="terminal-2232203-line-57"> <rect x="0" y="1392.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-58"> +<clipPath id="terminal-2232203-line-58"> <rect x="0" y="1416.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-59"> +<clipPath id="terminal-2232203-line-59"> <rect x="0" y="1441.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-60"> +<clipPath id="terminal-2232203-line-60"> <rect x="0" y="1465.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-61"> +<clipPath id="terminal-2232203-line-61"> <rect x="0" y="1489.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-62"> +<clipPath id="terminal-2232203-line-62"> <rect x="0" y="1514.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-63"> +<clipPath id="terminal-2232203-line-63"> <rect x="0" y="1538.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-64"> +<clipPath id="terminal-2232203-line-64"> <rect x="0" y="1563.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-65"> +<clipPath id="terminal-2232203-line-65"> <rect x="0" y="1587.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-66"> +<clipPath id="terminal-2232203-line-66"> <rect x="0" y="1611.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-67"> +<clipPath id="terminal-2232203-line-67"> <rect x="0" y="1636.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-68"> +<clipPath id="terminal-2232203-line-68"> <rect x="0" y="1660.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-69"> +<clipPath id="terminal-2232203-line-69"> <rect x="0" y="1685.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-70"> +<clipPath id="terminal-2232203-line-70"> <rect x="0" y="1709.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-71"> +<clipPath id="terminal-2232203-line-71"> <rect x="0" y="1733.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-72"> +<clipPath id="terminal-2232203-line-72"> <rect x="0" y="1758.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-73"> +<clipPath id="terminal-2232203-line-73"> <rect x="0" y="1782.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-74"> +<clipPath id="terminal-2232203-line-74"> <rect x="0" y="1807.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-75"> +<clipPath id="terminal-2232203-line-75"> <rect x="0" y="1831.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-76"> +<clipPath id="terminal-2232203-line-76"> <rect x="0" y="1855.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-77"> +<clipPath id="terminal-2232203-line-77"> <rect x="0" y="1880.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-78"> +<clipPath id="terminal-2232203-line-78"> <rect x="0" y="1904.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-3254289243-line-79"> +<clipPath id="terminal-2232203-line-79"> <rect x="0" y="1929.1" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-2232203-line-80"> + <rect x="0" y="1953.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2232203-line-81"> + <rect x="0" y="1977.9" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2232203-line-82"> + <rect x="0" y="2002.3" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="2024.4" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="2097.6" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-3254289243-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-2232203-clip-terminal)"> - <g class="terminal-3254289243-matrix"> - <text class="terminal-3254289243-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-3254289243-line-0)">$ cz bump --help</text><text class="terminal-3254289243-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3254289243-line-0)"> -</text><text class="terminal-3254289243-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-3254289243-line-1)">usage: cz bump </text><text class="terminal-3254289243-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">[</text><text class="terminal-3254289243-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-3254289243-line-1)">-h</text><text class="terminal-3254289243-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">]</text><text class="terminal-3254289243-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">[</text><text class="terminal-3254289243-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-3254289243-line-1)">--dry-run</text><text class="terminal-3254289243-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">]</text><text class="terminal-3254289243-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">[</text><text class="terminal-3254289243-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-3254289243-line-1)">--files-only</text><text class="terminal-3254289243-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">]</text><text class="terminal-3254289243-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">[</text><text class="terminal-3254289243-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-3254289243-line-1)">--local-version</text><text class="terminal-3254289243-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">]</text><text class="terminal-3254289243-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">[</text><text class="terminal-3254289243-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-3254289243-line-1)">--changelog</text><text class="terminal-3254289243-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)">]</text><text class="terminal-3254289243-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-1)"> -</text><text class="terminal-3254289243-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)">[</text><text class="terminal-3254289243-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-3254289243-line-2)">--no-verify</text><text class="terminal-3254289243-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)">]</text><text class="terminal-3254289243-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)">[</text><text class="terminal-3254289243-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-3254289243-line-2)">--yes</text><text class="terminal-3254289243-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)">]</text><text class="terminal-3254289243-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)">[</text><text class="terminal-3254289243-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-3254289243-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-3254289243-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)">]</text><text class="terminal-3254289243-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-2)"> -</text><text class="terminal-3254289243-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)">[</text><text class="terminal-3254289243-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-3254289243-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-3254289243-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)">]</text><text class="terminal-3254289243-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)">[</text><text class="terminal-3254289243-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-3254289243-line-3)">--prerelease </text><text class="terminal-3254289243-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)">{</text><text class="terminal-3254289243-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-3254289243-line-3)">alpha,beta,rc</text><text class="terminal-3254289243-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)">}</text><text class="terminal-3254289243-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)">]</text><text class="terminal-3254289243-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-3)"> -</text><text class="terminal-3254289243-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)">[</text><text class="terminal-3254289243-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-3254289243-line-4)">--devrelease DEVRELEASE</text><text class="terminal-3254289243-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)">]</text><text class="terminal-3254289243-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)">[</text><text class="terminal-3254289243-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-3254289243-line-4)">--increment </text><text class="terminal-3254289243-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)">{</text><text class="terminal-3254289243-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-3254289243-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-3254289243-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)">}</text><text class="terminal-3254289243-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)">]</text><text class="terminal-3254289243-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-4)"> -</text><text class="terminal-3254289243-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)">[</text><text class="terminal-3254289243-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-3254289243-line-5)">--increment-mode </text><text class="terminal-3254289243-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)">{</text><text class="terminal-3254289243-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-3254289243-line-5)">linear,exact</text><text class="terminal-3254289243-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)">}</text><text class="terminal-3254289243-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)">]</text><text class="terminal-3254289243-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)">[</text><text class="terminal-3254289243-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-3254289243-line-5)">--check-consistency</text><text class="terminal-3254289243-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)">]</text><text class="terminal-3254289243-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3254289243-line-5)"> -</text><text class="terminal-3254289243-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-6)">[</text><text class="terminal-3254289243-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-3254289243-line-6)">--annotated-tag</text><text class="terminal-3254289243-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-6)">]</text><text class="terminal-3254289243-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-6)"> -</text><text class="terminal-3254289243-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-7)">[</text><text class="terminal-3254289243-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-3254289243-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-3254289243-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-7)">]</text><text class="terminal-3254289243-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-7)">[</text><text class="terminal-3254289243-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-3254289243-line-7)">--gpg-sign</text><text class="terminal-3254289243-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-7)">]</text><text class="terminal-3254289243-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-7)"> -</text><text class="terminal-3254289243-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)">[</text><text class="terminal-3254289243-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-3254289243-line-8)">--changelog-to-stdout</text><text class="terminal-3254289243-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)">]</text><text class="terminal-3254289243-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)">[</text><text class="terminal-3254289243-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-3254289243-line-8)">--git-output-to-stderr</text><text class="terminal-3254289243-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)">]</text><text class="terminal-3254289243-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)">[</text><text class="terminal-3254289243-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-3254289243-line-8)">--retry</text><text class="terminal-3254289243-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)">]</text><text class="terminal-3254289243-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-8)"> -</text><text class="terminal-3254289243-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)">[</text><text class="terminal-3254289243-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-3254289243-line-9)">--major-version-zero</text><text class="terminal-3254289243-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)">]</text><text class="terminal-3254289243-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)">[</text><text class="terminal-3254289243-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-3254289243-line-9)">--template TEMPLATE</text><text class="terminal-3254289243-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)">]</text><text class="terminal-3254289243-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)">[</text><text class="terminal-3254289243-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-3254289243-line-9)">--extra EXTRA</text><text class="terminal-3254289243-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)">]</text><text class="terminal-3254289243-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-9)"> -</text><text class="terminal-3254289243-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-3254289243-line-10)">[</text><text class="terminal-3254289243-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-3254289243-line-10)">--file-name FILE_NAME</text><text class="terminal-3254289243-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-3254289243-line-10)">]</text><text class="terminal-3254289243-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-3254289243-line-10)">[</text><text class="terminal-3254289243-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-3254289243-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-3254289243-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-3254289243-line-10)">]</text><text class="terminal-3254289243-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3254289243-line-10)"> -</text><text class="terminal-3254289243-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-11)">[</text><text class="terminal-3254289243-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-3254289243-line-11)">--version-scheme </text><text class="terminal-3254289243-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-11)">{</text><text class="terminal-3254289243-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-3254289243-line-11)">pep440,semver,semver2</text><text class="terminal-3254289243-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-11)">}</text><text class="terminal-3254289243-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-11)">]</text><text class="terminal-3254289243-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-11)"> -</text><text class="terminal-3254289243-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-12)">[</text><text class="terminal-3254289243-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-3254289243-line-12)">--version-type </text><text class="terminal-3254289243-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-12)">{</text><text class="terminal-3254289243-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-3254289243-line-12)">pep440,semver,semver2</text><text class="terminal-3254289243-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-12)">}</text><text class="terminal-3254289243-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-12)">]</text><text class="terminal-3254289243-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-12)"> -</text><text class="terminal-3254289243-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-13)">[</text><text class="terminal-3254289243-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-3254289243-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-3254289243-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-13)">]</text><text class="terminal-3254289243-r2" x="597.8" y="337.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-13)">[</text><text class="terminal-3254289243-r1" x="610" y="337.2" textLength="122" clip-path="url(#terminal-3254289243-line-13)">--get-next</text><text class="terminal-3254289243-r2" x="732" y="337.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-13)">]</text><text class="terminal-3254289243-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-13)"> -</text><text class="terminal-3254289243-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-14)">[</text><text class="terminal-3254289243-r1" x="195.2" y="361.6" textLength="170.8" clip-path="url(#terminal-3254289243-line-14)">MANUAL_VERSION</text><text class="terminal-3254289243-r2" x="366" y="361.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-14)">]</text><text class="terminal-3254289243-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-14)"> -</text><text class="terminal-3254289243-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3254289243-line-15)"> -</text><text class="terminal-3254289243-r1" x="0" y="410.4" textLength="512.4" clip-path="url(#terminal-3254289243-line-16)">bump semantic version based on the git log</text><text class="terminal-3254289243-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-16)"> -</text><text class="terminal-3254289243-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-17)"> -</text><text class="terminal-3254289243-r1" x="0" y="459.2" textLength="256.2" clip-path="url(#terminal-3254289243-line-18)">positional arguments:</text><text class="terminal-3254289243-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-18)"> -</text><text class="terminal-3254289243-r1" x="0" y="483.6" textLength="610" clip-path="url(#terminal-3254289243-line-19)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-3254289243-r2" x="610" y="483.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-19)">(</text><text class="terminal-3254289243-r1" x="622.2" y="483.6" textLength="61" clip-path="url(#terminal-3254289243-line-19)">e.g: </text><text class="terminal-3254289243-r3" x="683.2" y="483.6" textLength="36.6" clip-path="url(#terminal-3254289243-line-19)">1.5</text><text class="terminal-3254289243-r1" x="719.8" y="483.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-19)">.</text><text class="terminal-3254289243-r3" x="732" y="483.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-19)">3</text><text class="terminal-3254289243-r2" x="744.2" y="483.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-19)">)</text><text class="terminal-3254289243-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-19)"> -</text><text class="terminal-3254289243-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3254289243-line-20)"> -</text><text class="terminal-3254289243-r1" x="0" y="532.4" textLength="97.6" clip-path="url(#terminal-3254289243-line-21)">options:</text><text class="terminal-3254289243-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-21)"> -</text><text class="terminal-3254289243-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-3254289243-line-22)">  -h, --help            show this help message and exit</text><text class="terminal-3254289243-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-22)"> -</text><text class="terminal-3254289243-r1" x="0" y="581.2" textLength="915" clip-path="url(#terminal-3254289243-line-23)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-3254289243-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-23)"> -</text><text class="terminal-3254289243-r1" x="0" y="605.6" textLength="793" clip-path="url(#terminal-3254289243-line-24)">  --files-only          bump version in the files from the config</text><text class="terminal-3254289243-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-24)"> -</text><text class="terminal-3254289243-r1" x="0" y="630" textLength="719.8" clip-path="url(#terminal-3254289243-line-25)">  --local-version       bump only the local version portion</text><text class="terminal-3254289243-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-3254289243-line-25)"> -</text><text class="terminal-3254289243-r1" x="0" y="654.4" textLength="841.8" clip-path="url(#terminal-3254289243-line-26)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-3254289243-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-26)"> -</text><text class="terminal-3254289243-r1" x="0" y="678.8" textLength="902.8" clip-path="url(#terminal-3254289243-line-27)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-3254289243-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-27)"> -</text><text class="terminal-3254289243-r1" x="0" y="703.2" textLength="353.8" clip-path="url(#terminal-3254289243-line-28)">                        hooks</text><text class="terminal-3254289243-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-28)"> -</text><text class="terminal-3254289243-r1" x="0" y="727.6" textLength="719.8" clip-path="url(#terminal-3254289243-line-29)">  --yes                 accept automatically questions done</text><text class="terminal-3254289243-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-29)"> -</text><text class="terminal-3254289243-r1" x="0" y="752" textLength="305" clip-path="url(#terminal-3254289243-line-30)">  --tag-format TAG_FORMAT</text><text class="terminal-3254289243-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-3254289243-line-30)"> -</text><text class="terminal-3254289243-r1" x="0" y="776.4" textLength="939.4" clip-path="url(#terminal-3254289243-line-31)">                        the format used to tag the commit and read it, use it</text><text class="terminal-3254289243-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-31)"> -</text><text class="terminal-3254289243-r1" x="0" y="800.8" textLength="866.2" clip-path="url(#terminal-3254289243-line-32)">                        in existing projects, wrap around simple quotes</text><text class="terminal-3254289243-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-32)"> -</text><text class="terminal-3254289243-r1" x="0" y="825.2" textLength="353.8" clip-path="url(#terminal-3254289243-line-33)">  --bump-message BUMP_MESSAGE</text><text class="terminal-3254289243-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-33)"> -</text><text class="terminal-3254289243-r1" x="0" y="849.6" textLength="902.8" clip-path="url(#terminal-3254289243-line-34)">                        template used to create the release commit, useful</text><text class="terminal-3254289243-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-34)"> -</text><text class="terminal-3254289243-r1" x="0" y="874" textLength="536.8" clip-path="url(#terminal-3254289243-line-35)">                        when working with CI</text><text class="terminal-3254289243-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-3254289243-line-35)"> -</text><text class="terminal-3254289243-r1" x="0" y="898.4" textLength="244" clip-path="url(#terminal-3254289243-line-36)">  --prerelease, -pr </text><text class="terminal-3254289243-r2" x="244" y="898.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-36)">{</text><text class="terminal-3254289243-r1" x="256.2" y="898.4" textLength="158.6" clip-path="url(#terminal-3254289243-line-36)">alpha,beta,rc</text><text class="terminal-3254289243-r2" x="414.8" y="898.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-36)">}</text><text class="terminal-3254289243-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-36)"> -</text><text class="terminal-3254289243-r1" x="0" y="922.8" textLength="597.8" clip-path="url(#terminal-3254289243-line-37)">                        choose type of prerelease</text><text class="terminal-3254289243-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-37)"> -</text><text class="terminal-3254289243-r1" x="0" y="947.2" textLength="353.8" clip-path="url(#terminal-3254289243-line-38)">  --devrelease, -d DEVRELEASE</text><text class="terminal-3254289243-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-38)"> -</text><text class="terminal-3254289243-r1" x="0" y="971.6" textLength="841.8" clip-path="url(#terminal-3254289243-line-39)">                        specify non-negative integer for dev. release</text><text class="terminal-3254289243-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-39)"> -</text><text class="terminal-3254289243-r1" x="0" y="996" textLength="170.8" clip-path="url(#terminal-3254289243-line-40)">  --increment </text><text class="terminal-3254289243-r2" x="170.8" y="996" textLength="12.2" clip-path="url(#terminal-3254289243-line-40)">{</text><text class="terminal-3254289243-r1" x="183" y="996" textLength="207.4" clip-path="url(#terminal-3254289243-line-40)">MAJOR,MINOR,PATCH</text><text class="terminal-3254289243-r2" x="390.4" y="996" textLength="12.2" clip-path="url(#terminal-3254289243-line-40)">}</text><text class="terminal-3254289243-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-3254289243-line-40)"> -</text><text class="terminal-3254289243-r1" x="0" y="1020.4" textLength="756.4" clip-path="url(#terminal-3254289243-line-41)">                        manually specify the desired increment</text><text class="terminal-3254289243-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-41)"> -</text><text class="terminal-3254289243-r1" x="0" y="1044.8" textLength="231.8" clip-path="url(#terminal-3254289243-line-42)">  --increment-mode </text><text class="terminal-3254289243-r2" x="231.8" y="1044.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-42)">{</text><text class="terminal-3254289243-r1" x="244" y="1044.8" textLength="146.4" clip-path="url(#terminal-3254289243-line-42)">linear,exact</text><text class="terminal-3254289243-r2" x="390.4" y="1044.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-42)">}</text><text class="terminal-3254289243-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-42)"> -</text><text class="terminal-3254289243-r1" x="0" y="1069.2" textLength="902.8" clip-path="url(#terminal-3254289243-line-43)">                        set the method by which the new version is chosen.</text><text class="terminal-3254289243-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-43)"> -</text><text class="terminal-3254289243-r4" x="292.8" y="1093.6" textLength="97.6" clip-path="url(#terminal-3254289243-line-44)">'linear'</text><text class="terminal-3254289243-r2" x="402.6" y="1093.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-44)">(</text><text class="terminal-3254289243-r1" x="414.8" y="1093.6" textLength="85.4" clip-path="url(#terminal-3254289243-line-44)">default</text><text class="terminal-3254289243-r2" x="500.2" y="1093.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-44)">)</text><text class="terminal-3254289243-r1" x="512.4" y="1093.6" textLength="414.8" clip-path="url(#terminal-3254289243-line-44)"> guesses the next version based on</text><text class="terminal-3254289243-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-44)"> -</text><text class="terminal-3254289243-r1" x="0" y="1118" textLength="939.4" clip-path="url(#terminal-3254289243-line-45)">                        typical linear version progression, such that bumping</text><text class="terminal-3254289243-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-3254289243-line-45)"> -</text><text class="terminal-3254289243-r1" x="0" y="1142.4" textLength="866.2" clip-path="url(#terminal-3254289243-line-46)">                        of a pre-release with lower precedence than the</text><text class="terminal-3254289243-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-46)"> -</text><text class="terminal-3254289243-r1" x="0" y="1166.8" textLength="939.4" clip-path="url(#terminal-3254289243-line-47)">                        current pre-release phase maintains the current phase</text><text class="terminal-3254289243-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-47)"> -</text><text class="terminal-3254289243-r1" x="0" y="1191.2" textLength="561.2" clip-path="url(#terminal-3254289243-line-48)">                        of higher precedence. </text><text class="terminal-3254289243-r4" x="561.2" y="1191.2" textLength="85.4" clip-path="url(#terminal-3254289243-line-48)">'exact'</text><text class="terminal-3254289243-r1" x="646.6" y="1191.2" textLength="305" clip-path="url(#terminal-3254289243-line-48)"> applies the changes that</text><text class="terminal-3254289243-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-48)"> -</text><text class="terminal-3254289243-r1" x="0" y="1215.6" textLength="536.8" clip-path="url(#terminal-3254289243-line-49)">                        have been specified </text><text class="terminal-3254289243-r2" x="536.8" y="1215.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-49)">(</text><text class="terminal-3254289243-r1" x="549" y="1215.6" textLength="353.8" clip-path="url(#terminal-3254289243-line-49)">or determined from the commit</text><text class="terminal-3254289243-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-49)"> -</text><text class="terminal-3254289243-r1" x="0" y="1240" textLength="329.4" clip-path="url(#terminal-3254289243-line-50)">                        log</text><text class="terminal-3254289243-r2" x="329.4" y="1240" textLength="12.2" clip-path="url(#terminal-3254289243-line-50)">)</text><text class="terminal-3254289243-r1" x="341.6" y="1240" textLength="585.6" clip-path="url(#terminal-3254289243-line-50)"> without interpretation, such that the increment</text><text class="terminal-3254289243-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-3254289243-line-50)"> -</text><text class="terminal-3254289243-r1" x="0" y="1264.4" textLength="707.6" clip-path="url(#terminal-3254289243-line-51)">                        and pre-release are always honored</text><text class="terminal-3254289243-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-51)"> -</text><text class="terminal-3254289243-r1" x="0" y="1288.8" textLength="317.2" clip-path="url(#terminal-3254289243-line-52)">  --check-consistency, -cc</text><text class="terminal-3254289243-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-52)"> -</text><text class="terminal-3254289243-r1" x="0" y="1313.2" textLength="951.6" clip-path="url(#terminal-3254289243-line-53)">                        check consistency among versions defined in commitizen</text><text class="terminal-3254289243-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-53)"> -</text><text class="terminal-3254289243-r1" x="0" y="1337.6" textLength="671" clip-path="url(#terminal-3254289243-line-54)">                        configuration and version_files</text><text class="terminal-3254289243-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-54)"> -</text><text class="terminal-3254289243-r1" x="0" y="1362" textLength="866.2" clip-path="url(#terminal-3254289243-line-55)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-3254289243-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-3254289243-line-55)"> -</text><text class="terminal-3254289243-r1" x="0" y="1386.4" textLength="646.6" clip-path="url(#terminal-3254289243-line-56)">  --annotated-tag-message, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-3254289243-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-56)"> -</text><text class="terminal-3254289243-r1" x="0" y="1410.8" textLength="634.4" clip-path="url(#terminal-3254289243-line-57)">                        create annotated tag message</text><text class="terminal-3254289243-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-57)"> -</text><text class="terminal-3254289243-r1" x="0" y="1435.2" textLength="719.8" clip-path="url(#terminal-3254289243-line-58)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-3254289243-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-58)"> -</text><text class="terminal-3254289243-r1" x="0" y="1459.6" textLength="280.6" clip-path="url(#terminal-3254289243-line-59)">  --changelog-to-stdout</text><text class="terminal-3254289243-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-59)"> -</text><text class="terminal-3254289243-r1" x="0" y="1484" textLength="658.8" clip-path="url(#terminal-3254289243-line-60)">                        Output changelog to the stdout</text><text class="terminal-3254289243-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-3254289243-line-60)"> -</text><text class="terminal-3254289243-r1" x="0" y="1508.4" textLength="292.8" clip-path="url(#terminal-3254289243-line-61)">  --git-output-to-stderr</text><text class="terminal-3254289243-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-61)"> -</text><text class="terminal-3254289243-r1" x="0" y="1532.8" textLength="646.6" clip-path="url(#terminal-3254289243-line-62)">                        Redirect git output to stderr</text><text class="terminal-3254289243-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-62)"> -</text><text class="terminal-3254289243-r1" x="0" y="1557.2" textLength="744.2" clip-path="url(#terminal-3254289243-line-63)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-3254289243-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-63)"> -</text><text class="terminal-3254289243-r1" x="0" y="1581.6" textLength="939.4" clip-path="url(#terminal-3254289243-line-64)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-3254289243-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-64)"> -</text><text class="terminal-3254289243-r1" x="0" y="1606" textLength="305" clip-path="url(#terminal-3254289243-line-65)">  --template, -t TEMPLATE</text><text class="terminal-3254289243-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-3254289243-line-65)"> -</text><text class="terminal-3254289243-r1" x="0" y="1630.4" textLength="646.6" clip-path="url(#terminal-3254289243-line-66)">                        changelog template file name </text><text class="terminal-3254289243-r2" x="646.6" y="1630.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-66)">(</text><text class="terminal-3254289243-r1" x="658.8" y="1630.4" textLength="280.6" clip-path="url(#terminal-3254289243-line-66)">relative to the current</text><text class="terminal-3254289243-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-66)"> -</text><text class="terminal-3254289243-r1" x="0" y="1654.8" textLength="500.2" clip-path="url(#terminal-3254289243-line-67)">                        working directory</text><text class="terminal-3254289243-r2" x="500.2" y="1654.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-67)">)</text><text class="terminal-3254289243-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-67)"> -</text><text class="terminal-3254289243-r1" x="0" y="1679.2" textLength="622.2" clip-path="url(#terminal-3254289243-line-68)">  --extra, -e EXTRA     a changelog extra variable </text><text class="terminal-3254289243-r2" x="622.2" y="1679.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-68)">(</text><text class="terminal-3254289243-r1" x="634.4" y="1679.2" textLength="146.4" clip-path="url(#terminal-3254289243-line-68)">in the form </text><text class="terminal-3254289243-r4" x="780.8" y="1679.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-68)">'</text><text class="terminal-3254289243-r4" x="793" y="1679.2" textLength="36.6" clip-path="url(#terminal-3254289243-line-68)">key</text><text class="terminal-3254289243-r4" x="829.6" y="1679.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-68)">=</text><text class="terminal-3254289243-r4" x="841.8" y="1679.2" textLength="61" clip-path="url(#terminal-3254289243-line-68)">value</text><text class="terminal-3254289243-r4" x="902.8" y="1679.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-68)">'</text><text class="terminal-3254289243-r2" x="915" y="1679.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-68)">)</text><text class="terminal-3254289243-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-68)"> -</text><text class="terminal-3254289243-r1" x="0" y="1703.6" textLength="280.6" clip-path="url(#terminal-3254289243-line-69)">  --file-name FILE_NAME</text><text class="terminal-3254289243-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-69)"> -</text><text class="terminal-3254289243-r1" x="0" y="1728" textLength="573.4" clip-path="url(#terminal-3254289243-line-70)">                        file name of changelog </text><text class="terminal-3254289243-r2" x="573.4" y="1728" textLength="12.2" clip-path="url(#terminal-3254289243-line-70)">(</text><text class="terminal-3254289243-r1" x="585.6" y="1728" textLength="109.8" clip-path="url(#terminal-3254289243-line-70)">default: </text><text class="terminal-3254289243-r4" x="695.4" y="1728" textLength="170.8" clip-path="url(#terminal-3254289243-line-70)">'CHANGELOG.md'</text><text class="terminal-3254289243-r2" x="866.2" y="1728" textLength="12.2" clip-path="url(#terminal-3254289243-line-70)">)</text><text class="terminal-3254289243-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-3254289243-line-70)"> -</text><text class="terminal-3254289243-r1" x="0" y="1752.4" textLength="475.8" clip-path="url(#terminal-3254289243-line-71)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-3254289243-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-71)"> -</text><text class="terminal-3254289243-r1" x="0" y="1776.8" textLength="719.8" clip-path="url(#terminal-3254289243-line-72)">                        start pre-releases with this offset</text><text class="terminal-3254289243-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-72)"> -</text><text class="terminal-3254289243-r1" x="0" y="1801.2" textLength="231.8" clip-path="url(#terminal-3254289243-line-73)">  --version-scheme </text><text class="terminal-3254289243-r2" x="231.8" y="1801.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-73)">{</text><text class="terminal-3254289243-r1" x="244" y="1801.2" textLength="256.2" clip-path="url(#terminal-3254289243-line-73)">pep440,semver,semver2</text><text class="terminal-3254289243-r2" x="500.2" y="1801.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-73)">}</text><text class="terminal-3254289243-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-73)"> -</text><text class="terminal-3254289243-r1" x="0" y="1825.6" textLength="549" clip-path="url(#terminal-3254289243-line-74)">                        choose version scheme</text><text class="terminal-3254289243-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-74)"> -</text><text class="terminal-3254289243-r1" x="0" y="1850" textLength="207.4" clip-path="url(#terminal-3254289243-line-75)">  --version-type </text><text class="terminal-3254289243-r2" x="207.4" y="1850" textLength="12.2" clip-path="url(#terminal-3254289243-line-75)">{</text><text class="terminal-3254289243-r1" x="219.6" y="1850" textLength="256.2" clip-path="url(#terminal-3254289243-line-75)">pep440,semver,semver2</text><text class="terminal-3254289243-r2" x="475.8" y="1850" textLength="12.2" clip-path="url(#terminal-3254289243-line-75)">}</text><text class="terminal-3254289243-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-3254289243-line-75)"> -</text><text class="terminal-3254289243-r1" x="0" y="1874.4" textLength="683.2" clip-path="url(#terminal-3254289243-line-76)">                        Deprecated, use --version-scheme</text><text class="terminal-3254289243-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-3254289243-line-76)"> -</text><text class="terminal-3254289243-r1" x="0" y="1898.8" textLength="402.6" clip-path="url(#terminal-3254289243-line-77)">  --build-metadata BUILD_METADATA</text><text class="terminal-3254289243-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-3254289243-line-77)"> -</text><text class="terminal-3254289243-r1" x="0" y="1923.2" textLength="915" clip-path="url(#terminal-3254289243-line-78)">                        Add additional build-metadata to the version-number</text><text class="terminal-3254289243-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-3254289243-line-78)"> -</text><text class="terminal-3254289243-r1" x="0" y="1947.6" textLength="854" clip-path="url(#terminal-3254289243-line-79)">  --get-next            Determine the next version and write to stdout</text><text class="terminal-3254289243-r1" x="976" y="1947.6" textLength="12.2" clip-path="url(#terminal-3254289243-line-79)"> -</text><text class="terminal-3254289243-r1" x="976" y="1972" textLength="12.2" clip-path="url(#terminal-3254289243-line-80)"> + <g class="terminal-2232203-matrix"> + <text class="terminal-2232203-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-2232203-line-0)">$ cz bump --help</text><text class="terminal-2232203-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2232203-line-0)"> +</text><text class="terminal-2232203-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-2232203-line-1)">usage: cz bump </text><text class="terminal-2232203-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">[</text><text class="terminal-2232203-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2232203-line-1)">-h</text><text class="terminal-2232203-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">]</text><text class="terminal-2232203-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">[</text><text class="terminal-2232203-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-2232203-line-1)">--dry-run</text><text class="terminal-2232203-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">]</text><text class="terminal-2232203-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">[</text><text class="terminal-2232203-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-2232203-line-1)">--files-only</text><text class="terminal-2232203-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">]</text><text class="terminal-2232203-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">[</text><text class="terminal-2232203-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-2232203-line-1)">--local-version</text><text class="terminal-2232203-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">]</text><text class="terminal-2232203-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">[</text><text class="terminal-2232203-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-2232203-line-1)">--changelog</text><text class="terminal-2232203-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">]</text><text class="terminal-2232203-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)"> +</text><text class="terminal-2232203-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)">[</text><text class="terminal-2232203-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-2232203-line-2)">--no-verify</text><text class="terminal-2232203-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)">]</text><text class="terminal-2232203-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)">[</text><text class="terminal-2232203-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-2232203-line-2)">--yes</text><text class="terminal-2232203-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)">]</text><text class="terminal-2232203-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)">[</text><text class="terminal-2232203-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-2232203-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-2232203-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)">]</text><text class="terminal-2232203-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)"> +</text><text class="terminal-2232203-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)">[</text><text class="terminal-2232203-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-2232203-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-2232203-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)">]</text><text class="terminal-2232203-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)">[</text><text class="terminal-2232203-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-2232203-line-3)">--prerelease </text><text class="terminal-2232203-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)">{</text><text class="terminal-2232203-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-2232203-line-3)">alpha,beta,rc</text><text class="terminal-2232203-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)">}</text><text class="terminal-2232203-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)">]</text><text class="terminal-2232203-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)"> +</text><text class="terminal-2232203-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)">[</text><text class="terminal-2232203-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-2232203-line-4)">--devrelease DEVRELEASE</text><text class="terminal-2232203-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)">]</text><text class="terminal-2232203-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)">[</text><text class="terminal-2232203-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-2232203-line-4)">--increment </text><text class="terminal-2232203-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)">{</text><text class="terminal-2232203-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-2232203-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-2232203-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)">}</text><text class="terminal-2232203-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)">]</text><text class="terminal-2232203-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)"> +</text><text class="terminal-2232203-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)">[</text><text class="terminal-2232203-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-2232203-line-5)">--increment-mode </text><text class="terminal-2232203-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)">{</text><text class="terminal-2232203-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-2232203-line-5)">linear,exact</text><text class="terminal-2232203-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)">}</text><text class="terminal-2232203-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)">]</text><text class="terminal-2232203-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)">[</text><text class="terminal-2232203-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-2232203-line-5)">--check-consistency</text><text class="terminal-2232203-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)">]</text><text class="terminal-2232203-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)"> +</text><text class="terminal-2232203-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-2232203-line-6)">[</text><text class="terminal-2232203-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-2232203-line-6)">--annotated-tag</text><text class="terminal-2232203-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-2232203-line-6)">]</text><text class="terminal-2232203-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2232203-line-6)"> +</text><text class="terminal-2232203-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-2232203-line-7)">[</text><text class="terminal-2232203-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-2232203-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-2232203-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-2232203-line-7)">]</text><text class="terminal-2232203-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-2232203-line-7)">[</text><text class="terminal-2232203-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-2232203-line-7)">--gpg-sign</text><text class="terminal-2232203-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-2232203-line-7)">]</text><text class="terminal-2232203-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2232203-line-7)"> +</text><text class="terminal-2232203-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)">[</text><text class="terminal-2232203-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-2232203-line-8)">--changelog-to-stdout</text><text class="terminal-2232203-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)">]</text><text class="terminal-2232203-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)">[</text><text class="terminal-2232203-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-2232203-line-8)">--git-output-to-stderr</text><text class="terminal-2232203-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)">]</text><text class="terminal-2232203-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)">[</text><text class="terminal-2232203-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-2232203-line-8)">--retry</text><text class="terminal-2232203-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)">]</text><text class="terminal-2232203-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)"> +</text><text class="terminal-2232203-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)">[</text><text class="terminal-2232203-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-2232203-line-9)">--major-version-zero</text><text class="terminal-2232203-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)">]</text><text class="terminal-2232203-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)">[</text><text class="terminal-2232203-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-2232203-line-9)">--template TEMPLATE</text><text class="terminal-2232203-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)">]</text><text class="terminal-2232203-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)">[</text><text class="terminal-2232203-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-2232203-line-9)">--extra EXTRA</text><text class="terminal-2232203-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)">]</text><text class="terminal-2232203-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)"> +</text><text class="terminal-2232203-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-2232203-line-10)">[</text><text class="terminal-2232203-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-2232203-line-10)">--file-name FILE_NAME</text><text class="terminal-2232203-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-2232203-line-10)">]</text><text class="terminal-2232203-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-2232203-line-10)">[</text><text class="terminal-2232203-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-2232203-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-2232203-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-2232203-line-10)">]</text><text class="terminal-2232203-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2232203-line-10)"> +</text><text class="terminal-2232203-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-2232203-line-11)">[</text><text class="terminal-2232203-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-2232203-line-11)">--version-scheme </text><text class="terminal-2232203-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-2232203-line-11)">{</text><text class="terminal-2232203-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-2232203-line-11)">pep440,semver,semver2</text><text class="terminal-2232203-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-2232203-line-11)">}</text><text class="terminal-2232203-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-2232203-line-11)">]</text><text class="terminal-2232203-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2232203-line-11)"> +</text><text class="terminal-2232203-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-2232203-line-12)">[</text><text class="terminal-2232203-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-2232203-line-12)">--version-type </text><text class="terminal-2232203-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2232203-line-12)">{</text><text class="terminal-2232203-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-2232203-line-12)">pep440,semver,semver2</text><text class="terminal-2232203-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-2232203-line-12)">}</text><text class="terminal-2232203-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-2232203-line-12)">]</text><text class="terminal-2232203-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2232203-line-12)"> +</text><text class="terminal-2232203-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-2232203-line-13)">[</text><text class="terminal-2232203-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-2232203-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-2232203-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-2232203-line-13)">]</text><text class="terminal-2232203-r2" x="597.8" y="337.2" textLength="12.2" clip-path="url(#terminal-2232203-line-13)">[</text><text class="terminal-2232203-r1" x="610" y="337.2" textLength="122" clip-path="url(#terminal-2232203-line-13)">--get-next</text><text class="terminal-2232203-r2" x="732" y="337.2" textLength="12.2" clip-path="url(#terminal-2232203-line-13)">]</text><text class="terminal-2232203-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2232203-line-13)"> +</text><text class="terminal-2232203-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-2232203-line-14)">[</text><text class="terminal-2232203-r1" x="195.2" y="361.6" textLength="207.4" clip-path="url(#terminal-2232203-line-14)">--allow-no-commit</text><text class="terminal-2232203-r2" x="402.6" y="361.6" textLength="12.2" clip-path="url(#terminal-2232203-line-14)">]</text><text class="terminal-2232203-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2232203-line-14)"> +</text><text class="terminal-2232203-r2" x="183" y="386" textLength="12.2" clip-path="url(#terminal-2232203-line-15)">[</text><text class="terminal-2232203-r1" x="195.2" y="386" textLength="170.8" clip-path="url(#terminal-2232203-line-15)">MANUAL_VERSION</text><text class="terminal-2232203-r2" x="366" y="386" textLength="12.2" clip-path="url(#terminal-2232203-line-15)">]</text><text class="terminal-2232203-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2232203-line-15)"> +</text><text class="terminal-2232203-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2232203-line-16)"> +</text><text class="terminal-2232203-r1" x="0" y="434.8" textLength="512.4" clip-path="url(#terminal-2232203-line-17)">bump semantic version based on the git log</text><text class="terminal-2232203-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2232203-line-17)"> +</text><text class="terminal-2232203-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2232203-line-18)"> +</text><text class="terminal-2232203-r1" x="0" y="483.6" textLength="256.2" clip-path="url(#terminal-2232203-line-19)">positional arguments:</text><text class="terminal-2232203-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2232203-line-19)"> +</text><text class="terminal-2232203-r1" x="0" y="508" textLength="610" clip-path="url(#terminal-2232203-line-20)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-2232203-r2" x="610" y="508" textLength="12.2" clip-path="url(#terminal-2232203-line-20)">(</text><text class="terminal-2232203-r1" x="622.2" y="508" textLength="61" clip-path="url(#terminal-2232203-line-20)">e.g: </text><text class="terminal-2232203-r3" x="683.2" y="508" textLength="36.6" clip-path="url(#terminal-2232203-line-20)">1.5</text><text class="terminal-2232203-r1" x="719.8" y="508" textLength="12.2" clip-path="url(#terminal-2232203-line-20)">.</text><text class="terminal-2232203-r3" x="732" y="508" textLength="12.2" clip-path="url(#terminal-2232203-line-20)">3</text><text class="terminal-2232203-r2" x="744.2" y="508" textLength="12.2" clip-path="url(#terminal-2232203-line-20)">)</text><text class="terminal-2232203-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2232203-line-20)"> +</text><text class="terminal-2232203-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2232203-line-21)"> +</text><text class="terminal-2232203-r1" x="0" y="556.8" textLength="97.6" clip-path="url(#terminal-2232203-line-22)">options:</text><text class="terminal-2232203-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2232203-line-22)"> +</text><text class="terminal-2232203-r1" x="0" y="581.2" textLength="671" clip-path="url(#terminal-2232203-line-23)">  -h, --help            show this help message and exit</text><text class="terminal-2232203-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2232203-line-23)"> +</text><text class="terminal-2232203-r1" x="0" y="605.6" textLength="915" clip-path="url(#terminal-2232203-line-24)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-2232203-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2232203-line-24)"> +</text><text class="terminal-2232203-r1" x="0" y="630" textLength="793" clip-path="url(#terminal-2232203-line-25)">  --files-only          bump version in the files from the config</text><text class="terminal-2232203-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2232203-line-25)"> +</text><text class="terminal-2232203-r1" x="0" y="654.4" textLength="719.8" clip-path="url(#terminal-2232203-line-26)">  --local-version       bump only the local version portion</text><text class="terminal-2232203-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-2232203-line-26)"> +</text><text class="terminal-2232203-r1" x="0" y="678.8" textLength="841.8" clip-path="url(#terminal-2232203-line-27)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-2232203-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-2232203-line-27)"> +</text><text class="terminal-2232203-r1" x="0" y="703.2" textLength="902.8" clip-path="url(#terminal-2232203-line-28)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-2232203-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-2232203-line-28)"> +</text><text class="terminal-2232203-r1" x="0" y="727.6" textLength="353.8" clip-path="url(#terminal-2232203-line-29)">                        hooks</text><text class="terminal-2232203-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-2232203-line-29)"> +</text><text class="terminal-2232203-r1" x="0" y="752" textLength="719.8" clip-path="url(#terminal-2232203-line-30)">  --yes                 accept automatically questions done</text><text class="terminal-2232203-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-2232203-line-30)"> +</text><text class="terminal-2232203-r1" x="0" y="776.4" textLength="305" clip-path="url(#terminal-2232203-line-31)">  --tag-format TAG_FORMAT</text><text class="terminal-2232203-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-2232203-line-31)"> +</text><text class="terminal-2232203-r1" x="0" y="800.8" textLength="939.4" clip-path="url(#terminal-2232203-line-32)">                        the format used to tag the commit and read it, use it</text><text class="terminal-2232203-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-2232203-line-32)"> +</text><text class="terminal-2232203-r1" x="0" y="825.2" textLength="866.2" clip-path="url(#terminal-2232203-line-33)">                        in existing projects, wrap around simple quotes</text><text class="terminal-2232203-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-2232203-line-33)"> +</text><text class="terminal-2232203-r1" x="0" y="849.6" textLength="353.8" clip-path="url(#terminal-2232203-line-34)">  --bump-message BUMP_MESSAGE</text><text class="terminal-2232203-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-2232203-line-34)"> +</text><text class="terminal-2232203-r1" x="0" y="874" textLength="902.8" clip-path="url(#terminal-2232203-line-35)">                        template used to create the release commit, useful</text><text class="terminal-2232203-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-2232203-line-35)"> +</text><text class="terminal-2232203-r1" x="0" y="898.4" textLength="536.8" clip-path="url(#terminal-2232203-line-36)">                        when working with CI</text><text class="terminal-2232203-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-2232203-line-36)"> +</text><text class="terminal-2232203-r1" x="0" y="922.8" textLength="183" clip-path="url(#terminal-2232203-line-37)">  --prerelease </text><text class="terminal-2232203-r2" x="183" y="922.8" textLength="12.2" clip-path="url(#terminal-2232203-line-37)">{</text><text class="terminal-2232203-r1" x="195.2" y="922.8" textLength="158.6" clip-path="url(#terminal-2232203-line-37)">alpha,beta,rc</text><text class="terminal-2232203-r2" x="353.8" y="922.8" textLength="12.2" clip-path="url(#terminal-2232203-line-37)">}</text><text class="terminal-2232203-r1" x="366" y="922.8" textLength="73.2" clip-path="url(#terminal-2232203-line-37)">, -pr </text><text class="terminal-2232203-r2" x="439.2" y="922.8" textLength="12.2" clip-path="url(#terminal-2232203-line-37)">{</text><text class="terminal-2232203-r1" x="451.4" y="922.8" textLength="158.6" clip-path="url(#terminal-2232203-line-37)">alpha,beta,rc</text><text class="terminal-2232203-r2" x="610" y="922.8" textLength="12.2" clip-path="url(#terminal-2232203-line-37)">}</text><text class="terminal-2232203-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-2232203-line-37)"> +</text><text class="terminal-2232203-r1" x="0" y="947.2" textLength="597.8" clip-path="url(#terminal-2232203-line-38)">                        choose type of prerelease</text><text class="terminal-2232203-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-2232203-line-38)"> +</text><text class="terminal-2232203-r1" x="0" y="971.6" textLength="488" clip-path="url(#terminal-2232203-line-39)">  --devrelease DEVRELEASE, -d DEVRELEASE</text><text class="terminal-2232203-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-2232203-line-39)"> +</text><text class="terminal-2232203-r1" x="0" y="996" textLength="841.8" clip-path="url(#terminal-2232203-line-40)">                        specify non-negative integer for dev. release</text><text class="terminal-2232203-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-2232203-line-40)"> +</text><text class="terminal-2232203-r1" x="0" y="1020.4" textLength="170.8" clip-path="url(#terminal-2232203-line-41)">  --increment </text><text class="terminal-2232203-r2" x="170.8" y="1020.4" textLength="12.2" clip-path="url(#terminal-2232203-line-41)">{</text><text class="terminal-2232203-r1" x="183" y="1020.4" textLength="207.4" clip-path="url(#terminal-2232203-line-41)">MAJOR,MINOR,PATCH</text><text class="terminal-2232203-r2" x="390.4" y="1020.4" textLength="12.2" clip-path="url(#terminal-2232203-line-41)">}</text><text class="terminal-2232203-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-2232203-line-41)"> +</text><text class="terminal-2232203-r1" x="0" y="1044.8" textLength="756.4" clip-path="url(#terminal-2232203-line-42)">                        manually specify the desired increment</text><text class="terminal-2232203-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-2232203-line-42)"> +</text><text class="terminal-2232203-r1" x="0" y="1069.2" textLength="231.8" clip-path="url(#terminal-2232203-line-43)">  --increment-mode </text><text class="terminal-2232203-r2" x="231.8" y="1069.2" textLength="12.2" clip-path="url(#terminal-2232203-line-43)">{</text><text class="terminal-2232203-r1" x="244" y="1069.2" textLength="146.4" clip-path="url(#terminal-2232203-line-43)">linear,exact</text><text class="terminal-2232203-r2" x="390.4" y="1069.2" textLength="12.2" clip-path="url(#terminal-2232203-line-43)">}</text><text class="terminal-2232203-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-2232203-line-43)"> +</text><text class="terminal-2232203-r1" x="0" y="1093.6" textLength="902.8" clip-path="url(#terminal-2232203-line-44)">                        set the method by which the new version is chosen.</text><text class="terminal-2232203-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-2232203-line-44)"> +</text><text class="terminal-2232203-r4" x="292.8" y="1118" textLength="97.6" clip-path="url(#terminal-2232203-line-45)">'linear'</text><text class="terminal-2232203-r2" x="402.6" y="1118" textLength="12.2" clip-path="url(#terminal-2232203-line-45)">(</text><text class="terminal-2232203-r1" x="414.8" y="1118" textLength="85.4" clip-path="url(#terminal-2232203-line-45)">default</text><text class="terminal-2232203-r2" x="500.2" y="1118" textLength="12.2" clip-path="url(#terminal-2232203-line-45)">)</text><text class="terminal-2232203-r1" x="512.4" y="1118" textLength="414.8" clip-path="url(#terminal-2232203-line-45)"> guesses the next version based on</text><text class="terminal-2232203-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-2232203-line-45)"> +</text><text class="terminal-2232203-r1" x="0" y="1142.4" textLength="939.4" clip-path="url(#terminal-2232203-line-46)">                        typical linear version progression, such that bumping</text><text class="terminal-2232203-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-2232203-line-46)"> +</text><text class="terminal-2232203-r1" x="0" y="1166.8" textLength="866.2" clip-path="url(#terminal-2232203-line-47)">                        of a pre-release with lower precedence than the</text><text class="terminal-2232203-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-2232203-line-47)"> +</text><text class="terminal-2232203-r1" x="0" y="1191.2" textLength="939.4" clip-path="url(#terminal-2232203-line-48)">                        current pre-release phase maintains the current phase</text><text class="terminal-2232203-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-2232203-line-48)"> +</text><text class="terminal-2232203-r1" x="0" y="1215.6" textLength="561.2" clip-path="url(#terminal-2232203-line-49)">                        of higher precedence. </text><text class="terminal-2232203-r4" x="561.2" y="1215.6" textLength="85.4" clip-path="url(#terminal-2232203-line-49)">'exact'</text><text class="terminal-2232203-r1" x="646.6" y="1215.6" textLength="305" clip-path="url(#terminal-2232203-line-49)"> applies the changes that</text><text class="terminal-2232203-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-2232203-line-49)"> +</text><text class="terminal-2232203-r1" x="0" y="1240" textLength="536.8" clip-path="url(#terminal-2232203-line-50)">                        have been specified </text><text class="terminal-2232203-r2" x="536.8" y="1240" textLength="12.2" clip-path="url(#terminal-2232203-line-50)">(</text><text class="terminal-2232203-r1" x="549" y="1240" textLength="353.8" clip-path="url(#terminal-2232203-line-50)">or determined from the commit</text><text class="terminal-2232203-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-2232203-line-50)"> +</text><text class="terminal-2232203-r1" x="0" y="1264.4" textLength="329.4" clip-path="url(#terminal-2232203-line-51)">                        log</text><text class="terminal-2232203-r2" x="329.4" y="1264.4" textLength="12.2" clip-path="url(#terminal-2232203-line-51)">)</text><text class="terminal-2232203-r1" x="341.6" y="1264.4" textLength="585.6" clip-path="url(#terminal-2232203-line-51)"> without interpretation, such that the increment</text><text class="terminal-2232203-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-2232203-line-51)"> +</text><text class="terminal-2232203-r1" x="0" y="1288.8" textLength="707.6" clip-path="url(#terminal-2232203-line-52)">                        and pre-release are always honored</text><text class="terminal-2232203-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-2232203-line-52)"> +</text><text class="terminal-2232203-r1" x="0" y="1313.2" textLength="317.2" clip-path="url(#terminal-2232203-line-53)">  --check-consistency, -cc</text><text class="terminal-2232203-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-2232203-line-53)"> +</text><text class="terminal-2232203-r1" x="0" y="1337.6" textLength="951.6" clip-path="url(#terminal-2232203-line-54)">                        check consistency among versions defined in commitizen</text><text class="terminal-2232203-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-2232203-line-54)"> +</text><text class="terminal-2232203-r1" x="0" y="1362" textLength="671" clip-path="url(#terminal-2232203-line-55)">                        configuration and version_files</text><text class="terminal-2232203-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-2232203-line-55)"> +</text><text class="terminal-2232203-r1" x="0" y="1386.4" textLength="866.2" clip-path="url(#terminal-2232203-line-56)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-2232203-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-2232203-line-56)"> +</text><text class="terminal-2232203-r1" x="0" y="1410.8" textLength="915" clip-path="url(#terminal-2232203-line-57)">  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-2232203-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-2232203-line-57)"> +</text><text class="terminal-2232203-r1" x="0" y="1435.2" textLength="634.4" clip-path="url(#terminal-2232203-line-58)">                        create annotated tag message</text><text class="terminal-2232203-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-2232203-line-58)"> +</text><text class="terminal-2232203-r1" x="0" y="1459.6" textLength="719.8" clip-path="url(#terminal-2232203-line-59)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-2232203-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-2232203-line-59)"> +</text><text class="terminal-2232203-r1" x="0" y="1484" textLength="280.6" clip-path="url(#terminal-2232203-line-60)">  --changelog-to-stdout</text><text class="terminal-2232203-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-2232203-line-60)"> +</text><text class="terminal-2232203-r1" x="0" y="1508.4" textLength="658.8" clip-path="url(#terminal-2232203-line-61)">                        Output changelog to the stdout</text><text class="terminal-2232203-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-2232203-line-61)"> +</text><text class="terminal-2232203-r1" x="0" y="1532.8" textLength="292.8" clip-path="url(#terminal-2232203-line-62)">  --git-output-to-stderr</text><text class="terminal-2232203-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-2232203-line-62)"> +</text><text class="terminal-2232203-r1" x="0" y="1557.2" textLength="646.6" clip-path="url(#terminal-2232203-line-63)">                        Redirect git output to stderr</text><text class="terminal-2232203-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-2232203-line-63)"> +</text><text class="terminal-2232203-r1" x="0" y="1581.6" textLength="744.2" clip-path="url(#terminal-2232203-line-64)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-2232203-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-2232203-line-64)"> +</text><text class="terminal-2232203-r1" x="0" y="1606" textLength="939.4" clip-path="url(#terminal-2232203-line-65)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-2232203-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-2232203-line-65)"> +</text><text class="terminal-2232203-r1" x="0" y="1630.4" textLength="414.8" clip-path="url(#terminal-2232203-line-66)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-2232203-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-2232203-line-66)"> +</text><text class="terminal-2232203-r1" x="0" y="1654.8" textLength="646.6" clip-path="url(#terminal-2232203-line-67)">                        changelog template file name </text><text class="terminal-2232203-r2" x="646.6" y="1654.8" textLength="12.2" clip-path="url(#terminal-2232203-line-67)">(</text><text class="terminal-2232203-r1" x="658.8" y="1654.8" textLength="280.6" clip-path="url(#terminal-2232203-line-67)">relative to the current</text><text class="terminal-2232203-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-2232203-line-67)"> +</text><text class="terminal-2232203-r1" x="0" y="1679.2" textLength="500.2" clip-path="url(#terminal-2232203-line-68)">                        working directory</text><text class="terminal-2232203-r2" x="500.2" y="1679.2" textLength="12.2" clip-path="url(#terminal-2232203-line-68)">)</text><text class="terminal-2232203-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-2232203-line-68)"> +</text><text class="terminal-2232203-r1" x="0" y="1703.6" textLength="305" clip-path="url(#terminal-2232203-line-69)">  --extra EXTRA, -e EXTRA</text><text class="terminal-2232203-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-2232203-line-69)"> +</text><text class="terminal-2232203-r1" x="0" y="1728" textLength="622.2" clip-path="url(#terminal-2232203-line-70)">                        a changelog extra variable </text><text class="terminal-2232203-r2" x="622.2" y="1728" textLength="12.2" clip-path="url(#terminal-2232203-line-70)">(</text><text class="terminal-2232203-r1" x="634.4" y="1728" textLength="146.4" clip-path="url(#terminal-2232203-line-70)">in the form </text><text class="terminal-2232203-r4" x="780.8" y="1728" textLength="12.2" clip-path="url(#terminal-2232203-line-70)">'</text><text class="terminal-2232203-r4" x="793" y="1728" textLength="36.6" clip-path="url(#terminal-2232203-line-70)">key</text><text class="terminal-2232203-r4" x="829.6" y="1728" textLength="12.2" clip-path="url(#terminal-2232203-line-70)">=</text><text class="terminal-2232203-r4" x="841.8" y="1728" textLength="61" clip-path="url(#terminal-2232203-line-70)">value</text><text class="terminal-2232203-r4" x="902.8" y="1728" textLength="12.2" clip-path="url(#terminal-2232203-line-70)">'</text><text class="terminal-2232203-r2" x="915" y="1728" textLength="12.2" clip-path="url(#terminal-2232203-line-70)">)</text><text class="terminal-2232203-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-2232203-line-70)"> +</text><text class="terminal-2232203-r1" x="0" y="1752.4" textLength="280.6" clip-path="url(#terminal-2232203-line-71)">  --file-name FILE_NAME</text><text class="terminal-2232203-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-2232203-line-71)"> +</text><text class="terminal-2232203-r1" x="0" y="1776.8" textLength="573.4" clip-path="url(#terminal-2232203-line-72)">                        file name of changelog </text><text class="terminal-2232203-r2" x="573.4" y="1776.8" textLength="12.2" clip-path="url(#terminal-2232203-line-72)">(</text><text class="terminal-2232203-r1" x="585.6" y="1776.8" textLength="109.8" clip-path="url(#terminal-2232203-line-72)">default: </text><text class="terminal-2232203-r4" x="695.4" y="1776.8" textLength="170.8" clip-path="url(#terminal-2232203-line-72)">'CHANGELOG.md'</text><text class="terminal-2232203-r2" x="866.2" y="1776.8" textLength="12.2" clip-path="url(#terminal-2232203-line-72)">)</text><text class="terminal-2232203-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-2232203-line-72)"> +</text><text class="terminal-2232203-r1" x="0" y="1801.2" textLength="475.8" clip-path="url(#terminal-2232203-line-73)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-2232203-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-2232203-line-73)"> +</text><text class="terminal-2232203-r1" x="0" y="1825.6" textLength="719.8" clip-path="url(#terminal-2232203-line-74)">                        start pre-releases with this offset</text><text class="terminal-2232203-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-2232203-line-74)"> +</text><text class="terminal-2232203-r1" x="0" y="1850" textLength="231.8" clip-path="url(#terminal-2232203-line-75)">  --version-scheme </text><text class="terminal-2232203-r2" x="231.8" y="1850" textLength="12.2" clip-path="url(#terminal-2232203-line-75)">{</text><text class="terminal-2232203-r1" x="244" y="1850" textLength="256.2" clip-path="url(#terminal-2232203-line-75)">pep440,semver,semver2</text><text class="terminal-2232203-r2" x="500.2" y="1850" textLength="12.2" clip-path="url(#terminal-2232203-line-75)">}</text><text class="terminal-2232203-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-2232203-line-75)"> +</text><text class="terminal-2232203-r1" x="0" y="1874.4" textLength="549" clip-path="url(#terminal-2232203-line-76)">                        choose version scheme</text><text class="terminal-2232203-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-2232203-line-76)"> +</text><text class="terminal-2232203-r1" x="0" y="1898.8" textLength="207.4" clip-path="url(#terminal-2232203-line-77)">  --version-type </text><text class="terminal-2232203-r2" x="207.4" y="1898.8" textLength="12.2" clip-path="url(#terminal-2232203-line-77)">{</text><text class="terminal-2232203-r1" x="219.6" y="1898.8" textLength="256.2" clip-path="url(#terminal-2232203-line-77)">pep440,semver,semver2</text><text class="terminal-2232203-r2" x="475.8" y="1898.8" textLength="12.2" clip-path="url(#terminal-2232203-line-77)">}</text><text class="terminal-2232203-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-2232203-line-77)"> +</text><text class="terminal-2232203-r1" x="0" y="1923.2" textLength="683.2" clip-path="url(#terminal-2232203-line-78)">                        Deprecated, use --version-scheme</text><text class="terminal-2232203-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-2232203-line-78)"> +</text><text class="terminal-2232203-r1" x="0" y="1947.6" textLength="402.6" clip-path="url(#terminal-2232203-line-79)">  --build-metadata BUILD_METADATA</text><text class="terminal-2232203-r1" x="976" y="1947.6" textLength="12.2" clip-path="url(#terminal-2232203-line-79)"> +</text><text class="terminal-2232203-r1" x="0" y="1972" textLength="915" clip-path="url(#terminal-2232203-line-80)">                        Add additional build-metadata to the version-number</text><text class="terminal-2232203-r1" x="976" y="1972" textLength="12.2" clip-path="url(#terminal-2232203-line-80)"> +</text><text class="terminal-2232203-r1" x="0" y="1996.4" textLength="854" clip-path="url(#terminal-2232203-line-81)">  --get-next            Determine the next version and write to stdout</text><text class="terminal-2232203-r1" x="976" y="1996.4" textLength="12.2" clip-path="url(#terminal-2232203-line-81)"> +</text><text class="terminal-2232203-r1" x="0" y="2020.8" textLength="744.2" clip-path="url(#terminal-2232203-line-82)">  --allow-no-commit     bump version without eligible commits</text><text class="terminal-2232203-r1" x="976" y="2020.8" textLength="12.2" clip-path="url(#terminal-2232203-line-82)"> +</text><text class="terminal-2232203-r1" x="976" y="2045.2" textLength="12.2" clip-path="url(#terminal-2232203-line-83)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_changelog___help.svg b/docs/images/cli_help/cz_changelog___help.svg index 1160ccf6cf..8cb3fcf2fe 100644 --- a/docs/images/cli_help/cz_changelog___help.svg +++ b/docs/images/cli_help/cz_changelog___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 1050.4" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 1074.8" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,202 +19,206 @@ font-weight: 700; } - .terminal-1106739011-matrix { + .terminal-2035912735-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1106739011-title { + .terminal-2035912735-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1106739011-r1 { fill: #c5c8c6 } -.terminal-1106739011-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-1106739011-r3 { fill: #68a0b3;font-weight: bold } -.terminal-1106739011-r4 { fill: #98a84b } + .terminal-2035912735-r1 { fill: #c5c8c6 } +.terminal-2035912735-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-2035912735-r3 { fill: #68a0b3;font-weight: bold } +.terminal-2035912735-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-1106739011-clip-terminal"> - <rect x="0" y="0" width="975.0" height="999.4" /> + <clipPath id="terminal-2035912735-clip-terminal"> + <rect x="0" y="0" width="975.0" height="1023.8" /> </clipPath> - <clipPath id="terminal-1106739011-line-0"> + <clipPath id="terminal-2035912735-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-1"> +<clipPath id="terminal-2035912735-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-2"> +<clipPath id="terminal-2035912735-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-3"> +<clipPath id="terminal-2035912735-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-4"> +<clipPath id="terminal-2035912735-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-5"> +<clipPath id="terminal-2035912735-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-6"> +<clipPath id="terminal-2035912735-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-7"> +<clipPath id="terminal-2035912735-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-8"> +<clipPath id="terminal-2035912735-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-9"> +<clipPath id="terminal-2035912735-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-10"> +<clipPath id="terminal-2035912735-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-11"> +<clipPath id="terminal-2035912735-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-12"> +<clipPath id="terminal-2035912735-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-13"> +<clipPath id="terminal-2035912735-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-14"> +<clipPath id="terminal-2035912735-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-15"> +<clipPath id="terminal-2035912735-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-16"> +<clipPath id="terminal-2035912735-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-17"> +<clipPath id="terminal-2035912735-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-18"> +<clipPath id="terminal-2035912735-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-19"> +<clipPath id="terminal-2035912735-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-20"> +<clipPath id="terminal-2035912735-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-21"> +<clipPath id="terminal-2035912735-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-22"> +<clipPath id="terminal-2035912735-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-23"> +<clipPath id="terminal-2035912735-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-24"> +<clipPath id="terminal-2035912735-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-25"> +<clipPath id="terminal-2035912735-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-26"> +<clipPath id="terminal-2035912735-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-27"> +<clipPath id="terminal-2035912735-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-28"> +<clipPath id="terminal-2035912735-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-29"> +<clipPath id="terminal-2035912735-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-30"> +<clipPath id="terminal-2035912735-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-31"> +<clipPath id="terminal-2035912735-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-32"> +<clipPath id="terminal-2035912735-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-33"> +<clipPath id="terminal-2035912735-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-34"> +<clipPath id="terminal-2035912735-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-35"> +<clipPath id="terminal-2035912735-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-36"> +<clipPath id="terminal-2035912735-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-37"> +<clipPath id="terminal-2035912735-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-38"> +<clipPath id="terminal-2035912735-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-39"> +<clipPath id="terminal-2035912735-line-39"> <rect x="0" y="953.1" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-2035912735-line-40"> + <rect x="0" y="977.5" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="1048.4" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="1072.8" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-1106739011-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-2035912735-clip-terminal)"> - <g class="terminal-1106739011-matrix"> - <text class="terminal-1106739011-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-1106739011-line-0)">$ cz changelog --help</text><text class="terminal-1106739011-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1106739011-line-0)"> -</text><text class="terminal-1106739011-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-1106739011-line-1)">usage: cz changelog </text><text class="terminal-1106739011-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">[</text><text class="terminal-1106739011-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-1106739011-line-1)">-h</text><text class="terminal-1106739011-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">]</text><text class="terminal-1106739011-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">[</text><text class="terminal-1106739011-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-1106739011-line-1)">--dry-run</text><text class="terminal-1106739011-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">]</text><text class="terminal-1106739011-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">[</text><text class="terminal-1106739011-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-1106739011-line-1)">--file-name FILE_NAME</text><text class="terminal-1106739011-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">]</text><text class="terminal-1106739011-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)"> -</text><text class="terminal-1106739011-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">[</text><text class="terminal-1106739011-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-1106739011-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-1106739011-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">]</text><text class="terminal-1106739011-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">[</text><text class="terminal-1106739011-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-1106739011-line-2)">--incremental</text><text class="terminal-1106739011-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">]</text><text class="terminal-1106739011-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)"> -</text><text class="terminal-1106739011-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">[</text><text class="terminal-1106739011-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-1106739011-line-3)">--start-rev START_REV</text><text class="terminal-1106739011-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">]</text><text class="terminal-1106739011-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">[</text><text class="terminal-1106739011-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-1106739011-line-3)">--merge-prerelease</text><text class="terminal-1106739011-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">]</text><text class="terminal-1106739011-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)"> -</text><text class="terminal-1106739011-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">[</text><text class="terminal-1106739011-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-1106739011-line-4)">--version-scheme </text><text class="terminal-1106739011-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">{</text><text class="terminal-1106739011-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-1106739011-line-4)">pep440,semver,semver2</text><text class="terminal-1106739011-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">}</text><text class="terminal-1106739011-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">]</text><text class="terminal-1106739011-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)"> -</text><text class="terminal-1106739011-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">[</text><text class="terminal-1106739011-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-1106739011-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-1106739011-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">]</text><text class="terminal-1106739011-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">[</text><text class="terminal-1106739011-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-1106739011-line-5)">--template TEMPLATE</text><text class="terminal-1106739011-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">]</text><text class="terminal-1106739011-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)"> -</text><text class="terminal-1106739011-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-6)">[</text><text class="terminal-1106739011-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-1106739011-line-6)">--extra EXTRA</text><text class="terminal-1106739011-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-6)">]</text><text class="terminal-1106739011-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-6)"> -</text><text class="terminal-1106739011-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-7)"> -</text><text class="terminal-1106739011-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-8)"> -</text><text class="terminal-1106739011-r1" x="0" y="239.6" textLength="231.8" clip-path="url(#terminal-1106739011-line-9)">generate changelog </text><text class="terminal-1106739011-r2" x="231.8" y="239.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-9)">(</text><text class="terminal-1106739011-r1" x="244" y="239.6" textLength="500.2" clip-path="url(#terminal-1106739011-line-9)">note that it will overwrite existing file</text><text class="terminal-1106739011-r2" x="744.2" y="239.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-9)">)</text><text class="terminal-1106739011-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-9)"> -</text><text class="terminal-1106739011-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1106739011-line-10)"> -</text><text class="terminal-1106739011-r1" x="0" y="288.4" textLength="256.2" clip-path="url(#terminal-1106739011-line-11)">positional arguments:</text><text class="terminal-1106739011-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-11)"> -</text><text class="terminal-1106739011-r1" x="0" y="312.8" textLength="805.2" clip-path="url(#terminal-1106739011-line-12)">  rev_range             generates changelog for the given version </text><text class="terminal-1106739011-r2" x="805.2" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">(</text><text class="terminal-1106739011-r1" x="817.4" y="312.8" textLength="61" clip-path="url(#terminal-1106739011-line-12)">e.g: </text><text class="terminal-1106739011-r3" x="878.4" y="312.8" textLength="36.6" clip-path="url(#terminal-1106739011-line-12)">1.5</text><text class="terminal-1106739011-r1" x="915" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">.</text><text class="terminal-1106739011-r3" x="927.2" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">3</text><text class="terminal-1106739011-r2" x="939.4" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">)</text><text class="terminal-1106739011-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)"> -</text><text class="terminal-1106739011-r1" x="0" y="337.2" textLength="500.2" clip-path="url(#terminal-1106739011-line-13)">                        or version range </text><text class="terminal-1106739011-r2" x="500.2" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">(</text><text class="terminal-1106739011-r1" x="512.4" y="337.2" textLength="61" clip-path="url(#terminal-1106739011-line-13)">e.g: </text><text class="terminal-1106739011-r3" x="573.4" y="337.2" textLength="36.6" clip-path="url(#terminal-1106739011-line-13)">1.5</text><text class="terminal-1106739011-r1" x="610" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">.</text><text class="terminal-1106739011-r3" x="622.2" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">3</text><text class="terminal-1106739011-r1" x="634.4" y="337.2" textLength="24.4" clip-path="url(#terminal-1106739011-line-13)">..</text><text class="terminal-1106739011-r3" x="658.8" y="337.2" textLength="36.6" clip-path="url(#terminal-1106739011-line-13)">1.7</text><text class="terminal-1106739011-r1" x="695.4" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">.</text><text class="terminal-1106739011-r3" x="707.6" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">9</text><text class="terminal-1106739011-r2" x="719.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">)</text><text class="terminal-1106739011-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)"> -</text><text class="terminal-1106739011-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-14)"> -</text><text class="terminal-1106739011-r1" x="0" y="386" textLength="97.6" clip-path="url(#terminal-1106739011-line-15)">options:</text><text class="terminal-1106739011-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1106739011-line-15)"> -</text><text class="terminal-1106739011-r1" x="0" y="410.4" textLength="671" clip-path="url(#terminal-1106739011-line-16)">  -h, --help            show this help message and exit</text><text class="terminal-1106739011-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-16)"> -</text><text class="terminal-1106739011-r1" x="0" y="434.8" textLength="585.6" clip-path="url(#terminal-1106739011-line-17)">  --dry-run             show changelog to stdout</text><text class="terminal-1106739011-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-17)"> -</text><text class="terminal-1106739011-r1" x="0" y="459.2" textLength="280.6" clip-path="url(#terminal-1106739011-line-18)">  --file-name FILE_NAME</text><text class="terminal-1106739011-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-18)"> -</text><text class="terminal-1106739011-r1" x="0" y="483.6" textLength="573.4" clip-path="url(#terminal-1106739011-line-19)">                        file name of changelog </text><text class="terminal-1106739011-r2" x="573.4" y="483.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-19)">(</text><text class="terminal-1106739011-r1" x="585.6" y="483.6" textLength="109.8" clip-path="url(#terminal-1106739011-line-19)">default: </text><text class="terminal-1106739011-r4" x="695.4" y="483.6" textLength="170.8" clip-path="url(#terminal-1106739011-line-19)">'CHANGELOG.md'</text><text class="terminal-1106739011-r2" x="866.2" y="483.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-19)">)</text><text class="terminal-1106739011-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-19)"> -</text><text class="terminal-1106739011-r1" x="0" y="508" textLength="500.2" clip-path="url(#terminal-1106739011-line-20)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-1106739011-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1106739011-line-20)"> -</text><text class="terminal-1106739011-r1" x="0" y="532.4" textLength="707.6" clip-path="url(#terminal-1106739011-line-21)">                        set the value for the new version </text><text class="terminal-1106739011-r2" x="707.6" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)">(</text><text class="terminal-1106739011-r1" x="719.8" y="532.4" textLength="207.4" clip-path="url(#terminal-1106739011-line-21)">use the tag value</text><text class="terminal-1106739011-r2" x="927.2" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)">)</text><text class="terminal-1106739011-r1" x="939.4" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)">,</text><text class="terminal-1106739011-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)"> -</text><text class="terminal-1106739011-r1" x="0" y="556.8" textLength="622.2" clip-path="url(#terminal-1106739011-line-22)">                        instead of using unreleased</text><text class="terminal-1106739011-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-22)"> -</text><text class="terminal-1106739011-r1" x="0" y="581.2" textLength="939.4" clip-path="url(#terminal-1106739011-line-23)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-1106739011-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-23)"> -</text><text class="terminal-1106739011-r1" x="0" y="605.6" textLength="817.4" clip-path="url(#terminal-1106739011-line-24)">                        if the changelog has been manually modified</text><text class="terminal-1106739011-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-24)"> -</text><text class="terminal-1106739011-r1" x="0" y="630" textLength="280.6" clip-path="url(#terminal-1106739011-line-25)">  --start-rev START_REV</text><text class="terminal-1106739011-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1106739011-line-25)"> -</text><text class="terminal-1106739011-r1" x="0" y="654.4" textLength="866.2" clip-path="url(#terminal-1106739011-line-26)">                        start rev of the changelog. If not set, it will</text><text class="terminal-1106739011-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-26)"> -</text><text class="terminal-1106739011-r1" x="0" y="678.8" textLength="695.4" clip-path="url(#terminal-1106739011-line-27)">                        generate changelog from the start</text><text class="terminal-1106739011-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-27)"> -</text><text class="terminal-1106739011-r1" x="0" y="703.2" textLength="915" clip-path="url(#terminal-1106739011-line-28)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-1106739011-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-28)"> -</text><text class="terminal-1106739011-r1" x="0" y="727.6" textLength="951.6" clip-path="url(#terminal-1106739011-line-29)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-1106739011-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-29)"> -</text><text class="terminal-1106739011-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-1106739011-line-30)">                        the changelog</text><text class="terminal-1106739011-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-1106739011-line-30)"> -</text><text class="terminal-1106739011-r1" x="0" y="776.4" textLength="231.8" clip-path="url(#terminal-1106739011-line-31)">  --version-scheme </text><text class="terminal-1106739011-r2" x="231.8" y="776.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-31)">{</text><text class="terminal-1106739011-r1" x="244" y="776.4" textLength="256.2" clip-path="url(#terminal-1106739011-line-31)">pep440,semver,semver2</text><text class="terminal-1106739011-r2" x="500.2" y="776.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-31)">}</text><text class="terminal-1106739011-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-31)"> -</text><text class="terminal-1106739011-r1" x="0" y="800.8" textLength="549" clip-path="url(#terminal-1106739011-line-32)">                        choose version scheme</text><text class="terminal-1106739011-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-32)"> -</text><text class="terminal-1106739011-r1" x="0" y="825.2" textLength="427" clip-path="url(#terminal-1106739011-line-33)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-1106739011-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-33)"> -</text><text class="terminal-1106739011-r1" x="0" y="849.6" textLength="927.2" clip-path="url(#terminal-1106739011-line-34)">                        Export the changelog template into this file instead</text><text class="terminal-1106739011-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-34)"> -</text><text class="terminal-1106739011-r1" x="0" y="874" textLength="475.8" clip-path="url(#terminal-1106739011-line-35)">                        of rendering it</text><text class="terminal-1106739011-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-1106739011-line-35)"> -</text><text class="terminal-1106739011-r1" x="0" y="898.4" textLength="305" clip-path="url(#terminal-1106739011-line-36)">  --template, -t TEMPLATE</text><text class="terminal-1106739011-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-36)"> -</text><text class="terminal-1106739011-r1" x="0" y="922.8" textLength="646.6" clip-path="url(#terminal-1106739011-line-37)">                        changelog template file name </text><text class="terminal-1106739011-r2" x="646.6" y="922.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-37)">(</text><text class="terminal-1106739011-r1" x="658.8" y="922.8" textLength="280.6" clip-path="url(#terminal-1106739011-line-37)">relative to the current</text><text class="terminal-1106739011-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-37)"> -</text><text class="terminal-1106739011-r1" x="0" y="947.2" textLength="500.2" clip-path="url(#terminal-1106739011-line-38)">                        working directory</text><text class="terminal-1106739011-r2" x="500.2" y="947.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-38)">)</text><text class="terminal-1106739011-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-38)"> -</text><text class="terminal-1106739011-r1" x="0" y="971.6" textLength="622.2" clip-path="url(#terminal-1106739011-line-39)">  --extra, -e EXTRA     a changelog extra variable </text><text class="terminal-1106739011-r2" x="622.2" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">(</text><text class="terminal-1106739011-r1" x="634.4" y="971.6" textLength="146.4" clip-path="url(#terminal-1106739011-line-39)">in the form </text><text class="terminal-1106739011-r4" x="780.8" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">'</text><text class="terminal-1106739011-r4" x="793" y="971.6" textLength="36.6" clip-path="url(#terminal-1106739011-line-39)">key</text><text class="terminal-1106739011-r4" x="829.6" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">=</text><text class="terminal-1106739011-r4" x="841.8" y="971.6" textLength="61" clip-path="url(#terminal-1106739011-line-39)">value</text><text class="terminal-1106739011-r4" x="902.8" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">'</text><text class="terminal-1106739011-r2" x="915" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">)</text><text class="terminal-1106739011-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)"> -</text><text class="terminal-1106739011-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-1106739011-line-40)"> + <g class="terminal-2035912735-matrix"> + <text class="terminal-2035912735-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-2035912735-line-0)">$ cz changelog --help</text><text class="terminal-2035912735-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2035912735-line-0)"> +</text><text class="terminal-2035912735-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-2035912735-line-1)">usage: cz changelog </text><text class="terminal-2035912735-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">[</text><text class="terminal-2035912735-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2035912735-line-1)">-h</text><text class="terminal-2035912735-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">]</text><text class="terminal-2035912735-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">[</text><text class="terminal-2035912735-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-2035912735-line-1)">--dry-run</text><text class="terminal-2035912735-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">]</text><text class="terminal-2035912735-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">[</text><text class="terminal-2035912735-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-2035912735-line-1)">--file-name FILE_NAME</text><text class="terminal-2035912735-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">]</text><text class="terminal-2035912735-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)"> +</text><text class="terminal-2035912735-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">[</text><text class="terminal-2035912735-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-2035912735-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-2035912735-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">]</text><text class="terminal-2035912735-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">[</text><text class="terminal-2035912735-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-2035912735-line-2)">--incremental</text><text class="terminal-2035912735-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">]</text><text class="terminal-2035912735-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)"> +</text><text class="terminal-2035912735-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">[</text><text class="terminal-2035912735-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-2035912735-line-3)">--start-rev START_REV</text><text class="terminal-2035912735-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">]</text><text class="terminal-2035912735-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">[</text><text class="terminal-2035912735-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-2035912735-line-3)">--merge-prerelease</text><text class="terminal-2035912735-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">]</text><text class="terminal-2035912735-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)"> +</text><text class="terminal-2035912735-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">[</text><text class="terminal-2035912735-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-2035912735-line-4)">--version-scheme </text><text class="terminal-2035912735-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">{</text><text class="terminal-2035912735-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-2035912735-line-4)">pep440,semver,semver2</text><text class="terminal-2035912735-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">}</text><text class="terminal-2035912735-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">]</text><text class="terminal-2035912735-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)"> +</text><text class="terminal-2035912735-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">[</text><text class="terminal-2035912735-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-2035912735-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-2035912735-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">]</text><text class="terminal-2035912735-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">[</text><text class="terminal-2035912735-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-2035912735-line-5)">--template TEMPLATE</text><text class="terminal-2035912735-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">]</text><text class="terminal-2035912735-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)"> +</text><text class="terminal-2035912735-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-6)">[</text><text class="terminal-2035912735-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-2035912735-line-6)">--extra EXTRA</text><text class="terminal-2035912735-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-6)">]</text><text class="terminal-2035912735-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-6)"> +</text><text class="terminal-2035912735-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-7)"> +</text><text class="terminal-2035912735-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-8)"> +</text><text class="terminal-2035912735-r1" x="0" y="239.6" textLength="231.8" clip-path="url(#terminal-2035912735-line-9)">generate changelog </text><text class="terminal-2035912735-r2" x="231.8" y="239.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-9)">(</text><text class="terminal-2035912735-r1" x="244" y="239.6" textLength="500.2" clip-path="url(#terminal-2035912735-line-9)">note that it will overwrite existing file</text><text class="terminal-2035912735-r2" x="744.2" y="239.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-9)">)</text><text class="terminal-2035912735-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-9)"> +</text><text class="terminal-2035912735-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2035912735-line-10)"> +</text><text class="terminal-2035912735-r1" x="0" y="288.4" textLength="256.2" clip-path="url(#terminal-2035912735-line-11)">positional arguments:</text><text class="terminal-2035912735-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-11)"> +</text><text class="terminal-2035912735-r1" x="0" y="312.8" textLength="805.2" clip-path="url(#terminal-2035912735-line-12)">  rev_range             generates changelog for the given version </text><text class="terminal-2035912735-r2" x="805.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">(</text><text class="terminal-2035912735-r1" x="817.4" y="312.8" textLength="61" clip-path="url(#terminal-2035912735-line-12)">e.g: </text><text class="terminal-2035912735-r3" x="878.4" y="312.8" textLength="36.6" clip-path="url(#terminal-2035912735-line-12)">1.5</text><text class="terminal-2035912735-r1" x="915" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">.</text><text class="terminal-2035912735-r3" x="927.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">3</text><text class="terminal-2035912735-r2" x="939.4" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">)</text><text class="terminal-2035912735-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)"> +</text><text class="terminal-2035912735-r1" x="0" y="337.2" textLength="500.2" clip-path="url(#terminal-2035912735-line-13)">                        or version range </text><text class="terminal-2035912735-r2" x="500.2" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">(</text><text class="terminal-2035912735-r1" x="512.4" y="337.2" textLength="61" clip-path="url(#terminal-2035912735-line-13)">e.g: </text><text class="terminal-2035912735-r3" x="573.4" y="337.2" textLength="36.6" clip-path="url(#terminal-2035912735-line-13)">1.5</text><text class="terminal-2035912735-r1" x="610" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">.</text><text class="terminal-2035912735-r3" x="622.2" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">3</text><text class="terminal-2035912735-r1" x="634.4" y="337.2" textLength="24.4" clip-path="url(#terminal-2035912735-line-13)">..</text><text class="terminal-2035912735-r3" x="658.8" y="337.2" textLength="36.6" clip-path="url(#terminal-2035912735-line-13)">1.7</text><text class="terminal-2035912735-r1" x="695.4" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">.</text><text class="terminal-2035912735-r3" x="707.6" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">9</text><text class="terminal-2035912735-r2" x="719.8" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">)</text><text class="terminal-2035912735-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)"> +</text><text class="terminal-2035912735-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-14)"> +</text><text class="terminal-2035912735-r1" x="0" y="386" textLength="97.6" clip-path="url(#terminal-2035912735-line-15)">options:</text><text class="terminal-2035912735-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2035912735-line-15)"> +</text><text class="terminal-2035912735-r1" x="0" y="410.4" textLength="671" clip-path="url(#terminal-2035912735-line-16)">  -h, --help            show this help message and exit</text><text class="terminal-2035912735-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-16)"> +</text><text class="terminal-2035912735-r1" x="0" y="434.8" textLength="585.6" clip-path="url(#terminal-2035912735-line-17)">  --dry-run             show changelog to stdout</text><text class="terminal-2035912735-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-17)"> +</text><text class="terminal-2035912735-r1" x="0" y="459.2" textLength="280.6" clip-path="url(#terminal-2035912735-line-18)">  --file-name FILE_NAME</text><text class="terminal-2035912735-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-18)"> +</text><text class="terminal-2035912735-r1" x="0" y="483.6" textLength="573.4" clip-path="url(#terminal-2035912735-line-19)">                        file name of changelog </text><text class="terminal-2035912735-r2" x="573.4" y="483.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-19)">(</text><text class="terminal-2035912735-r1" x="585.6" y="483.6" textLength="109.8" clip-path="url(#terminal-2035912735-line-19)">default: </text><text class="terminal-2035912735-r4" x="695.4" y="483.6" textLength="170.8" clip-path="url(#terminal-2035912735-line-19)">'CHANGELOG.md'</text><text class="terminal-2035912735-r2" x="866.2" y="483.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-19)">)</text><text class="terminal-2035912735-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-19)"> +</text><text class="terminal-2035912735-r1" x="0" y="508" textLength="500.2" clip-path="url(#terminal-2035912735-line-20)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-2035912735-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2035912735-line-20)"> +</text><text class="terminal-2035912735-r1" x="0" y="532.4" textLength="707.6" clip-path="url(#terminal-2035912735-line-21)">                        set the value for the new version </text><text class="terminal-2035912735-r2" x="707.6" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)">(</text><text class="terminal-2035912735-r1" x="719.8" y="532.4" textLength="207.4" clip-path="url(#terminal-2035912735-line-21)">use the tag value</text><text class="terminal-2035912735-r2" x="927.2" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)">)</text><text class="terminal-2035912735-r1" x="939.4" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)">,</text><text class="terminal-2035912735-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)"> +</text><text class="terminal-2035912735-r1" x="0" y="556.8" textLength="622.2" clip-path="url(#terminal-2035912735-line-22)">                        instead of using unreleased</text><text class="terminal-2035912735-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-22)"> +</text><text class="terminal-2035912735-r1" x="0" y="581.2" textLength="939.4" clip-path="url(#terminal-2035912735-line-23)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-2035912735-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-23)"> +</text><text class="terminal-2035912735-r1" x="0" y="605.6" textLength="817.4" clip-path="url(#terminal-2035912735-line-24)">                        if the changelog has been manually modified</text><text class="terminal-2035912735-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-24)"> +</text><text class="terminal-2035912735-r1" x="0" y="630" textLength="280.6" clip-path="url(#terminal-2035912735-line-25)">  --start-rev START_REV</text><text class="terminal-2035912735-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2035912735-line-25)"> +</text><text class="terminal-2035912735-r1" x="0" y="654.4" textLength="866.2" clip-path="url(#terminal-2035912735-line-26)">                        start rev of the changelog. If not set, it will</text><text class="terminal-2035912735-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-26)"> +</text><text class="terminal-2035912735-r1" x="0" y="678.8" textLength="695.4" clip-path="url(#terminal-2035912735-line-27)">                        generate changelog from the start</text><text class="terminal-2035912735-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-27)"> +</text><text class="terminal-2035912735-r1" x="0" y="703.2" textLength="915" clip-path="url(#terminal-2035912735-line-28)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-2035912735-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-28)"> +</text><text class="terminal-2035912735-r1" x="0" y="727.6" textLength="951.6" clip-path="url(#terminal-2035912735-line-29)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-2035912735-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-29)"> +</text><text class="terminal-2035912735-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-2035912735-line-30)">                        the changelog</text><text class="terminal-2035912735-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-2035912735-line-30)"> +</text><text class="terminal-2035912735-r1" x="0" y="776.4" textLength="231.8" clip-path="url(#terminal-2035912735-line-31)">  --version-scheme </text><text class="terminal-2035912735-r2" x="231.8" y="776.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-31)">{</text><text class="terminal-2035912735-r1" x="244" y="776.4" textLength="256.2" clip-path="url(#terminal-2035912735-line-31)">pep440,semver,semver2</text><text class="terminal-2035912735-r2" x="500.2" y="776.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-31)">}</text><text class="terminal-2035912735-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-31)"> +</text><text class="terminal-2035912735-r1" x="0" y="800.8" textLength="549" clip-path="url(#terminal-2035912735-line-32)">                        choose version scheme</text><text class="terminal-2035912735-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-32)"> +</text><text class="terminal-2035912735-r1" x="0" y="825.2" textLength="427" clip-path="url(#terminal-2035912735-line-33)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-2035912735-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-33)"> +</text><text class="terminal-2035912735-r1" x="0" y="849.6" textLength="927.2" clip-path="url(#terminal-2035912735-line-34)">                        Export the changelog template into this file instead</text><text class="terminal-2035912735-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-34)"> +</text><text class="terminal-2035912735-r1" x="0" y="874" textLength="475.8" clip-path="url(#terminal-2035912735-line-35)">                        of rendering it</text><text class="terminal-2035912735-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-2035912735-line-35)"> +</text><text class="terminal-2035912735-r1" x="0" y="898.4" textLength="414.8" clip-path="url(#terminal-2035912735-line-36)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-2035912735-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-36)"> +</text><text class="terminal-2035912735-r1" x="0" y="922.8" textLength="646.6" clip-path="url(#terminal-2035912735-line-37)">                        changelog template file name </text><text class="terminal-2035912735-r2" x="646.6" y="922.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-37)">(</text><text class="terminal-2035912735-r1" x="658.8" y="922.8" textLength="280.6" clip-path="url(#terminal-2035912735-line-37)">relative to the current</text><text class="terminal-2035912735-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-37)"> +</text><text class="terminal-2035912735-r1" x="0" y="947.2" textLength="500.2" clip-path="url(#terminal-2035912735-line-38)">                        working directory</text><text class="terminal-2035912735-r2" x="500.2" y="947.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-38)">)</text><text class="terminal-2035912735-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-38)"> +</text><text class="terminal-2035912735-r1" x="0" y="971.6" textLength="305" clip-path="url(#terminal-2035912735-line-39)">  --extra EXTRA, -e EXTRA</text><text class="terminal-2035912735-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-39)"> +</text><text class="terminal-2035912735-r1" x="0" y="996" textLength="622.2" clip-path="url(#terminal-2035912735-line-40)">                        a changelog extra variable </text><text class="terminal-2035912735-r2" x="622.2" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">(</text><text class="terminal-2035912735-r1" x="634.4" y="996" textLength="146.4" clip-path="url(#terminal-2035912735-line-40)">in the form </text><text class="terminal-2035912735-r4" x="780.8" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">'</text><text class="terminal-2035912735-r4" x="793" y="996" textLength="36.6" clip-path="url(#terminal-2035912735-line-40)">key</text><text class="terminal-2035912735-r4" x="829.6" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">=</text><text class="terminal-2035912735-r4" x="841.8" y="996" textLength="61" clip-path="url(#terminal-2035912735-line-40)">value</text><text class="terminal-2035912735-r4" x="902.8" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">'</text><text class="terminal-2035912735-r2" x="915" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">)</text><text class="terminal-2035912735-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)"> +</text><text class="terminal-2035912735-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-41)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_check___help.svg b/docs/images/cli_help/cz_check___help.svg index 690bfec684..922a6458a6 100644 --- a/docs/images/cli_help/cz_check___help.svg +++ b/docs/images/cli_help/cz_check___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 708.8" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 733.1999999999999" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,146 +19,150 @@ font-weight: 700; } - .terminal-1360575461-matrix { + .terminal-1820510314-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1360575461-title { + .terminal-1820510314-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1360575461-r1 { fill: #c5c8c6 } -.terminal-1360575461-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-1360575461-r3 { fill: #d0b344 } -.terminal-1360575461-r4 { fill: #68a0b3;font-weight: bold } + .terminal-1820510314-r1 { fill: #c5c8c6 } +.terminal-1820510314-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-1820510314-r3 { fill: #d0b344 } +.terminal-1820510314-r4 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-1360575461-clip-terminal"> - <rect x="0" y="0" width="975.0" height="657.8" /> + <clipPath id="terminal-1820510314-clip-terminal"> + <rect x="0" y="0" width="975.0" height="682.1999999999999" /> </clipPath> - <clipPath id="terminal-1360575461-line-0"> + <clipPath id="terminal-1820510314-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-1"> +<clipPath id="terminal-1820510314-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-2"> +<clipPath id="terminal-1820510314-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-3"> +<clipPath id="terminal-1820510314-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-4"> +<clipPath id="terminal-1820510314-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-5"> +<clipPath id="terminal-1820510314-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-6"> +<clipPath id="terminal-1820510314-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-7"> +<clipPath id="terminal-1820510314-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-8"> +<clipPath id="terminal-1820510314-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-9"> +<clipPath id="terminal-1820510314-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-10"> +<clipPath id="terminal-1820510314-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-11"> +<clipPath id="terminal-1820510314-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-12"> +<clipPath id="terminal-1820510314-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-13"> +<clipPath id="terminal-1820510314-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-14"> +<clipPath id="terminal-1820510314-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-15"> +<clipPath id="terminal-1820510314-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-16"> +<clipPath id="terminal-1820510314-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-17"> +<clipPath id="terminal-1820510314-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-18"> +<clipPath id="terminal-1820510314-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-19"> +<clipPath id="terminal-1820510314-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-20"> +<clipPath id="terminal-1820510314-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-21"> +<clipPath id="terminal-1820510314-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-22"> +<clipPath id="terminal-1820510314-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-23"> +<clipPath id="terminal-1820510314-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-24"> +<clipPath id="terminal-1820510314-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1360575461-line-25"> +<clipPath id="terminal-1820510314-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-1820510314-line-26"> + <rect x="0" y="635.9" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="706.8" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="731.2" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-1360575461-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1820510314-clip-terminal)"> - <g class="terminal-1360575461-matrix"> - <text class="terminal-1360575461-r1" x="0" y="20" textLength="207.4" clip-path="url(#terminal-1360575461-line-0)">$ cz check --help</text><text class="terminal-1360575461-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1360575461-line-0)"> -</text><text class="terminal-1360575461-r1" x="0" y="44.4" textLength="195.2" clip-path="url(#terminal-1360575461-line-1)">usage: cz check </text><text class="terminal-1360575461-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-1)">[</text><text class="terminal-1360575461-r1" x="207.4" y="44.4" textLength="24.4" clip-path="url(#terminal-1360575461-line-1)">-h</text><text class="terminal-1360575461-r2" x="231.8" y="44.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-1)">]</text><text class="terminal-1360575461-r2" x="256.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-1)">[</text><text class="terminal-1360575461-r1" x="268.4" y="44.4" textLength="427" clip-path="url(#terminal-1360575461-line-1)">--commit-msg-file COMMIT_MSG_FILE |</text><text class="terminal-1360575461-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-1)"> -</text><text class="terminal-1360575461-r1" x="0" y="68.8" textLength="610" clip-path="url(#terminal-1360575461-line-2)">                --rev-range REV_RANGE | -m MESSAGE</text><text class="terminal-1360575461-r2" x="610" y="68.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-2)">]</text><text class="terminal-1360575461-r2" x="634.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-2)">[</text><text class="terminal-1360575461-r1" x="646.6" y="68.8" textLength="158.6" clip-path="url(#terminal-1360575461-line-2)">--allow-abort</text><text class="terminal-1360575461-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-2)">]</text><text class="terminal-1360575461-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-2)"> -</text><text class="terminal-1360575461-r2" x="195.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)">[</text><text class="terminal-1360575461-r1" x="207.4" y="93.2" textLength="231.8" clip-path="url(#terminal-1360575461-line-3)">--allowed-prefixes </text><text class="terminal-1360575461-r2" x="439.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)">[</text><text class="terminal-1360575461-r1" x="451.4" y="93.2" textLength="207.4" clip-path="url(#terminal-1360575461-line-3)">ALLOWED_PREFIXES </text><text class="terminal-1360575461-r3" x="658.8" y="93.2" textLength="36.6" clip-path="url(#terminal-1360575461-line-3)">...</text><text class="terminal-1360575461-r2" x="695.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)">]</text><text class="terminal-1360575461-r2" x="707.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)">]</text><text class="terminal-1360575461-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)"> -</text><text class="terminal-1360575461-r2" x="195.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-4)">[</text><text class="terminal-1360575461-r1" x="207.4" y="117.6" textLength="280.6" clip-path="url(#terminal-1360575461-line-4)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-1360575461-r2" x="488" y="117.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-4)">]</text><text class="terminal-1360575461-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-4)"> -</text><text class="terminal-1360575461-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1360575461-line-5)"> -</text><text class="terminal-1360575461-r1" x="0" y="166.4" textLength="744.2" clip-path="url(#terminal-1360575461-line-6)">validates that a commit message matches the commitizen schema</text><text class="terminal-1360575461-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-6)"> -</text><text class="terminal-1360575461-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-7)"> -</text><text class="terminal-1360575461-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-1360575461-line-8)">options:</text><text class="terminal-1360575461-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-8)"> -</text><text class="terminal-1360575461-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-1360575461-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-1360575461-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-9)"> -</text><text class="terminal-1360575461-r1" x="0" y="264" textLength="427" clip-path="url(#terminal-1360575461-line-10)">  --commit-msg-file COMMIT_MSG_FILE</text><text class="terminal-1360575461-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1360575461-line-10)"> -</text><text class="terminal-1360575461-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-1360575461-line-11)">                        ask for the name of the temporal file that contains</text><text class="terminal-1360575461-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-11)"> -</text><text class="terminal-1360575461-r1" x="0" y="312.8" textLength="902.8" clip-path="url(#terminal-1360575461-line-12)">                        the commit message. Using it in a git hook script:</text><text class="terminal-1360575461-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-12)"> -</text><text class="terminal-1360575461-r3" x="292.8" y="337.2" textLength="97.6" clip-path="url(#terminal-1360575461-line-13)">MSG_FILE</text><text class="terminal-1360575461-r1" x="390.4" y="337.2" textLength="24.4" clip-path="url(#terminal-1360575461-line-13)">=$</text><text class="terminal-1360575461-r4" x="414.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-13)">1</text><text class="terminal-1360575461-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-13)"> -</text><text class="terminal-1360575461-r1" x="0" y="361.6" textLength="280.6" clip-path="url(#terminal-1360575461-line-14)">  --rev-range REV_RANGE</text><text class="terminal-1360575461-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-14)"> -</text><text class="terminal-1360575461-r1" x="0" y="386" textLength="854" clip-path="url(#terminal-1360575461-line-15)">                        a range of git rev to check. e.g, master..HEAD</text><text class="terminal-1360575461-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1360575461-line-15)"> -</text><text class="terminal-1360575461-r1" x="0" y="410.4" textLength="280.6" clip-path="url(#terminal-1360575461-line-16)">  -m, --message MESSAGE</text><text class="terminal-1360575461-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-16)"> -</text><text class="terminal-1360575461-r1" x="0" y="434.8" textLength="768.6" clip-path="url(#terminal-1360575461-line-17)">                        commit message that needs to be checked</text><text class="terminal-1360575461-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-17)"> -</text><text class="terminal-1360575461-r1" x="0" y="459.2" textLength="927.2" clip-path="url(#terminal-1360575461-line-18)">  --allow-abort         allow empty commit messages, which typically abort a</text><text class="terminal-1360575461-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-18)"> -</text><text class="terminal-1360575461-r1" x="0" y="483.6" textLength="366" clip-path="url(#terminal-1360575461-line-19)">                        commit</text><text class="terminal-1360575461-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-19)"> -</text><text class="terminal-1360575461-r1" x="0" y="508" textLength="256.2" clip-path="url(#terminal-1360575461-line-20)">  --allowed-prefixes </text><text class="terminal-1360575461-r2" x="256.2" y="508" textLength="12.2" clip-path="url(#terminal-1360575461-line-20)">[</text><text class="terminal-1360575461-r1" x="268.4" y="508" textLength="207.4" clip-path="url(#terminal-1360575461-line-20)">ALLOWED_PREFIXES </text><text class="terminal-1360575461-r3" x="475.8" y="508" textLength="36.6" clip-path="url(#terminal-1360575461-line-20)">...</text><text class="terminal-1360575461-r2" x="512.4" y="508" textLength="12.2" clip-path="url(#terminal-1360575461-line-20)">]</text><text class="terminal-1360575461-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1360575461-line-20)"> -</text><text class="terminal-1360575461-r1" x="0" y="532.4" textLength="951.6" clip-path="url(#terminal-1360575461-line-21)">                        allowed commit message prefixes. If the message starts</text><text class="terminal-1360575461-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-21)"> -</text><text class="terminal-1360575461-r1" x="0" y="556.8" textLength="951.6" clip-path="url(#terminal-1360575461-line-22)">                        by one of these prefixes, the message won't be checked</text><text class="terminal-1360575461-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-22)"> -</text><text class="terminal-1360575461-r1" x="0" y="581.2" textLength="500.2" clip-path="url(#terminal-1360575461-line-23)">                        against the regex</text><text class="terminal-1360575461-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-23)"> -</text><text class="terminal-1360575461-r1" x="0" y="605.6" textLength="597.8" clip-path="url(#terminal-1360575461-line-24)">  -l, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-1360575461-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-24)"> -</text><text class="terminal-1360575461-r1" x="0" y="630" textLength="732" clip-path="url(#terminal-1360575461-line-25)">                        length limit of the commit message; </text><text class="terminal-1360575461-r4" x="732" y="630" textLength="12.2" clip-path="url(#terminal-1360575461-line-25)">0</text><text class="terminal-1360575461-r1" x="744.2" y="630" textLength="158.6" clip-path="url(#terminal-1360575461-line-25)"> for no limit</text><text class="terminal-1360575461-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1360575461-line-25)"> -</text><text class="terminal-1360575461-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-26)"> + <g class="terminal-1820510314-matrix"> + <text class="terminal-1820510314-r1" x="0" y="20" textLength="207.4" clip-path="url(#terminal-1820510314-line-0)">$ cz check --help</text><text class="terminal-1820510314-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1820510314-line-0)"> +</text><text class="terminal-1820510314-r1" x="0" y="44.4" textLength="195.2" clip-path="url(#terminal-1820510314-line-1)">usage: cz check </text><text class="terminal-1820510314-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-1)">[</text><text class="terminal-1820510314-r1" x="207.4" y="44.4" textLength="24.4" clip-path="url(#terminal-1820510314-line-1)">-h</text><text class="terminal-1820510314-r2" x="231.8" y="44.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-1)">]</text><text class="terminal-1820510314-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-1)"> +</text><text class="terminal-1820510314-r2" x="195.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-2)">[</text><text class="terminal-1820510314-r1" x="207.4" y="68.8" textLength="768.6" clip-path="url(#terminal-1820510314-line-2)">--commit-msg-file COMMIT_MSG_FILE | --rev-range REV_RANGE | -m </text><text class="terminal-1820510314-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-2)"> +</text><text class="terminal-1820510314-r1" x="0" y="93.2" textLength="85.4" clip-path="url(#terminal-1820510314-line-3)">MESSAGE</text><text class="terminal-1820510314-r2" x="85.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-3)">]</text><text class="terminal-1820510314-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-3)"> +</text><text class="terminal-1820510314-r2" x="195.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">[</text><text class="terminal-1820510314-r1" x="207.4" y="117.6" textLength="158.6" clip-path="url(#terminal-1820510314-line-4)">--allow-abort</text><text class="terminal-1820510314-r2" x="366" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">]</text><text class="terminal-1820510314-r2" x="390.4" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">[</text><text class="terminal-1820510314-r1" x="402.6" y="117.6" textLength="231.8" clip-path="url(#terminal-1820510314-line-4)">--allowed-prefixes </text><text class="terminal-1820510314-r2" x="634.4" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">[</text><text class="terminal-1820510314-r1" x="646.6" y="117.6" textLength="207.4" clip-path="url(#terminal-1820510314-line-4)">ALLOWED_PREFIXES </text><text class="terminal-1820510314-r3" x="854" y="117.6" textLength="36.6" clip-path="url(#terminal-1820510314-line-4)">...</text><text class="terminal-1820510314-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">]</text><text class="terminal-1820510314-r2" x="902.8" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">]</text><text class="terminal-1820510314-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)"> +</text><text class="terminal-1820510314-r2" x="195.2" y="142" textLength="12.2" clip-path="url(#terminal-1820510314-line-5)">[</text><text class="terminal-1820510314-r1" x="207.4" y="142" textLength="280.6" clip-path="url(#terminal-1820510314-line-5)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-1820510314-r2" x="488" y="142" textLength="12.2" clip-path="url(#terminal-1820510314-line-5)">]</text><text class="terminal-1820510314-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1820510314-line-5)"> +</text><text class="terminal-1820510314-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-6)"> +</text><text class="terminal-1820510314-r1" x="0" y="190.8" textLength="744.2" clip-path="url(#terminal-1820510314-line-7)">validates that a commit message matches the commitizen schema</text><text class="terminal-1820510314-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-7)"> +</text><text class="terminal-1820510314-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-8)"> +</text><text class="terminal-1820510314-r1" x="0" y="239.6" textLength="97.6" clip-path="url(#terminal-1820510314-line-9)">options:</text><text class="terminal-1820510314-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-9)"> +</text><text class="terminal-1820510314-r1" x="0" y="264" textLength="671" clip-path="url(#terminal-1820510314-line-10)">  -h, --help            show this help message and exit</text><text class="terminal-1820510314-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1820510314-line-10)"> +</text><text class="terminal-1820510314-r1" x="0" y="288.4" textLength="427" clip-path="url(#terminal-1820510314-line-11)">  --commit-msg-file COMMIT_MSG_FILE</text><text class="terminal-1820510314-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-11)"> +</text><text class="terminal-1820510314-r1" x="0" y="312.8" textLength="915" clip-path="url(#terminal-1820510314-line-12)">                        ask for the name of the temporal file that contains</text><text class="terminal-1820510314-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-12)"> +</text><text class="terminal-1820510314-r1" x="0" y="337.2" textLength="902.8" clip-path="url(#terminal-1820510314-line-13)">                        the commit message. Using it in a git hook script:</text><text class="terminal-1820510314-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-13)"> +</text><text class="terminal-1820510314-r3" x="292.8" y="361.6" textLength="97.6" clip-path="url(#terminal-1820510314-line-14)">MSG_FILE</text><text class="terminal-1820510314-r1" x="390.4" y="361.6" textLength="24.4" clip-path="url(#terminal-1820510314-line-14)">=$</text><text class="terminal-1820510314-r4" x="414.8" y="361.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-14)">1</text><text class="terminal-1820510314-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-14)"> +</text><text class="terminal-1820510314-r1" x="0" y="386" textLength="280.6" clip-path="url(#terminal-1820510314-line-15)">  --rev-range REV_RANGE</text><text class="terminal-1820510314-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1820510314-line-15)"> +</text><text class="terminal-1820510314-r1" x="0" y="410.4" textLength="854" clip-path="url(#terminal-1820510314-line-16)">                        a range of git rev to check. e.g, master..HEAD</text><text class="terminal-1820510314-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-16)"> +</text><text class="terminal-1820510314-r1" x="0" y="434.8" textLength="378.2" clip-path="url(#terminal-1820510314-line-17)">  -m MESSAGE, --message MESSAGE</text><text class="terminal-1820510314-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-17)"> +</text><text class="terminal-1820510314-r1" x="0" y="459.2" textLength="768.6" clip-path="url(#terminal-1820510314-line-18)">                        commit message that needs to be checked</text><text class="terminal-1820510314-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-18)"> +</text><text class="terminal-1820510314-r1" x="0" y="483.6" textLength="927.2" clip-path="url(#terminal-1820510314-line-19)">  --allow-abort         allow empty commit messages, which typically abort a</text><text class="terminal-1820510314-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-19)"> +</text><text class="terminal-1820510314-r1" x="0" y="508" textLength="366" clip-path="url(#terminal-1820510314-line-20)">                        commit</text><text class="terminal-1820510314-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1820510314-line-20)"> +</text><text class="terminal-1820510314-r1" x="0" y="532.4" textLength="256.2" clip-path="url(#terminal-1820510314-line-21)">  --allowed-prefixes </text><text class="terminal-1820510314-r2" x="256.2" y="532.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-21)">[</text><text class="terminal-1820510314-r1" x="268.4" y="532.4" textLength="207.4" clip-path="url(#terminal-1820510314-line-21)">ALLOWED_PREFIXES </text><text class="terminal-1820510314-r3" x="475.8" y="532.4" textLength="36.6" clip-path="url(#terminal-1820510314-line-21)">...</text><text class="terminal-1820510314-r2" x="512.4" y="532.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-21)">]</text><text class="terminal-1820510314-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-21)"> +</text><text class="terminal-1820510314-r1" x="0" y="556.8" textLength="951.6" clip-path="url(#terminal-1820510314-line-22)">                        allowed commit message prefixes. If the message starts</text><text class="terminal-1820510314-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-22)"> +</text><text class="terminal-1820510314-r1" x="0" y="581.2" textLength="951.6" clip-path="url(#terminal-1820510314-line-23)">                        by one of these prefixes, the message won't be checked</text><text class="terminal-1820510314-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-23)"> +</text><text class="terminal-1820510314-r1" x="0" y="605.6" textLength="500.2" clip-path="url(#terminal-1820510314-line-24)">                        against the regex</text><text class="terminal-1820510314-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-24)"> +</text><text class="terminal-1820510314-r1" x="0" y="630" textLength="854" clip-path="url(#terminal-1820510314-line-25)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-1820510314-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1820510314-line-25)"> +</text><text class="terminal-1820510314-r1" x="0" y="654.4" textLength="732" clip-path="url(#terminal-1820510314-line-26)">                        length limit of the commit message; </text><text class="terminal-1820510314-r4" x="732" y="654.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-26)">0</text><text class="terminal-1820510314-r1" x="744.2" y="654.4" textLength="158.6" clip-path="url(#terminal-1820510314-line-26)"> for no limit</text><text class="terminal-1820510314-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-26)"> +</text><text class="terminal-1820510314-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-27)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_commit___help.svg b/docs/images/cli_help/cz_commit___help.svg index 5aea02232f..0346c40588 100644 --- a/docs/images/cli_help/cz_commit___help.svg +++ b/docs/images/cli_help/cz_commit___help.svg @@ -19,95 +19,95 @@ font-weight: 700; } - .terminal-463778956-matrix { + .terminal-1670560432-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-463778956-title { + .terminal-1670560432-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-463778956-r1 { fill: #c5c8c6 } -.terminal-463778956-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-463778956-r3 { fill: #68a0b3;font-weight: bold } + .terminal-1670560432-r1 { fill: #c5c8c6 } +.terminal-1670560432-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-1670560432-r3 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-463778956-clip-terminal"> + <clipPath id="terminal-1670560432-clip-terminal"> <rect x="0" y="0" width="975.0" height="584.5999999999999" /> </clipPath> - <clipPath id="terminal-463778956-line-0"> + <clipPath id="terminal-1670560432-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-1"> +<clipPath id="terminal-1670560432-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-2"> +<clipPath id="terminal-1670560432-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-3"> +<clipPath id="terminal-1670560432-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-4"> +<clipPath id="terminal-1670560432-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-5"> +<clipPath id="terminal-1670560432-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-6"> +<clipPath id="terminal-1670560432-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-7"> +<clipPath id="terminal-1670560432-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-8"> +<clipPath id="terminal-1670560432-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-9"> +<clipPath id="terminal-1670560432-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-10"> +<clipPath id="terminal-1670560432-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-11"> +<clipPath id="terminal-1670560432-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-12"> +<clipPath id="terminal-1670560432-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-13"> +<clipPath id="terminal-1670560432-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-14"> +<clipPath id="terminal-1670560432-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-15"> +<clipPath id="terminal-1670560432-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-16"> +<clipPath id="terminal-1670560432-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-17"> +<clipPath id="terminal-1670560432-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-18"> +<clipPath id="terminal-1670560432-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-19"> +<clipPath id="terminal-1670560432-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-20"> +<clipPath id="terminal-1670560432-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-21"> +<clipPath id="terminal-1670560432-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-22"> +<clipPath id="terminal-1670560432-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> </defs> @@ -119,33 +119,33 @@ <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-463778956-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1670560432-clip-terminal)"> - <g class="terminal-463778956-matrix"> - <text class="terminal-463778956-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-463778956-line-0)">$ cz commit --help</text><text class="terminal-463778956-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-463778956-line-0)"> -</text><text class="terminal-463778956-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-463778956-line-1)">usage: cz commit </text><text class="terminal-463778956-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-463778956-line-1)">-h</text><text class="terminal-463778956-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-463778956-line-1)">--retry</text><text class="terminal-463778956-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-463778956-line-1)">--no-retry</text><text class="terminal-463778956-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-463778956-line-1)">--dry-run</text><text class="terminal-463778956-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)"> -</text><text class="terminal-463778956-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-463778956-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-463778956-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-463778956-line-2)">-s</text><text class="terminal-463778956-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-463778956-line-2)">-a</text><text class="terminal-463778956-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r2" x="768.6" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="780.8" y="68.8" textLength="24.4" clip-path="url(#terminal-463778956-line-2)">-e</text><text class="terminal-463778956-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)"> -</text><text class="terminal-463778956-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">[</text><text class="terminal-463778956-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-463778956-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-463778956-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">]</text><text class="terminal-463778956-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">[</text><text class="terminal-463778956-r1" x="536.8" y="93.2" textLength="24.4" clip-path="url(#terminal-463778956-line-3)">--</text><text class="terminal-463778956-r2" x="561.2" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">]</text><text class="terminal-463778956-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)"> -</text><text class="terminal-463778956-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-463778956-line-4)"> -</text><text class="terminal-463778956-r1" x="0" y="142" textLength="207.4" clip-path="url(#terminal-463778956-line-5)">create new commit</text><text class="terminal-463778956-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-463778956-line-5)"> -</text><text class="terminal-463778956-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-463778956-line-6)"> -</text><text class="terminal-463778956-r1" x="0" y="190.8" textLength="97.6" clip-path="url(#terminal-463778956-line-7)">options:</text><text class="terminal-463778956-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-463778956-line-7)"> -</text><text class="terminal-463778956-r1" x="0" y="215.2" textLength="671" clip-path="url(#terminal-463778956-line-8)">  -h, --help            show this help message and exit</text><text class="terminal-463778956-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-463778956-line-8)"> -</text><text class="terminal-463778956-r1" x="0" y="239.6" textLength="500.2" clip-path="url(#terminal-463778956-line-9)">  --retry               retry last commit</text><text class="terminal-463778956-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-463778956-line-9)"> -</text><text class="terminal-463778956-r1" x="0" y="264" textLength="878.4" clip-path="url(#terminal-463778956-line-10)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-463778956-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-463778956-line-10)"> -</text><text class="terminal-463778956-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-463778956-line-11)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-463778956-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-463778956-line-11)"> -</text><text class="terminal-463778956-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-463778956-line-12)">  --write-message-to-file FILE_PATH</text><text class="terminal-463778956-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-463778956-line-12)"> -</text><text class="terminal-463778956-r1" x="0" y="337.2" textLength="780.8" clip-path="url(#terminal-463778956-line-13)">                        write message to file before committing </text><text class="terminal-463778956-r2" x="780.8" y="337.2" textLength="12.2" clip-path="url(#terminal-463778956-line-13)">(</text><text class="terminal-463778956-r1" x="793" y="337.2" textLength="73.2" clip-path="url(#terminal-463778956-line-13)">can be</text><text class="terminal-463778956-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-463778956-line-13)"> -</text><text class="terminal-463778956-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-463778956-line-14)">                        combined with --dry-run</text><text class="terminal-463778956-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-463778956-line-14)">)</text><text class="terminal-463778956-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-463778956-line-14)"> -</text><text class="terminal-463778956-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-463778956-line-15)">  -s, --signoff         sign off the commit</text><text class="terminal-463778956-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-463778956-line-15)"> -</text><text class="terminal-463778956-r1" x="0" y="410.4" textLength="902.8" clip-path="url(#terminal-463778956-line-16)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-463778956-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-463778956-line-16)"> -</text><text class="terminal-463778956-r1" x="0" y="434.8" textLength="951.6" clip-path="url(#terminal-463778956-line-17)">                        have been modified and deleted, but new files you have</text><text class="terminal-463778956-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-463778956-line-17)"> -</text><text class="terminal-463778956-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-463778956-line-18)">                        not told Git about are not affected.</text><text class="terminal-463778956-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-463778956-line-18)"> -</text><text class="terminal-463778956-r1" x="0" y="483.6" textLength="793" clip-path="url(#terminal-463778956-line-19)">  -e, --edit            edit the commit message before committing</text><text class="terminal-463778956-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-463778956-line-19)"> -</text><text class="terminal-463778956-r1" x="0" y="508" textLength="597.8" clip-path="url(#terminal-463778956-line-20)">  -l, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-463778956-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-463778956-line-20)"> -</text><text class="terminal-463778956-r1" x="0" y="532.4" textLength="732" clip-path="url(#terminal-463778956-line-21)">                        length limit of the commit message; </text><text class="terminal-463778956-r3" x="732" y="532.4" textLength="12.2" clip-path="url(#terminal-463778956-line-21)">0</text><text class="terminal-463778956-r1" x="744.2" y="532.4" textLength="158.6" clip-path="url(#terminal-463778956-line-21)"> for no limit</text><text class="terminal-463778956-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-463778956-line-21)"> -</text><text class="terminal-463778956-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-463778956-line-22)">  --                    Positional arguments separator </text><text class="terminal-463778956-r2" x="671" y="556.8" textLength="12.2" clip-path="url(#terminal-463778956-line-22)">(</text><text class="terminal-463778956-r1" x="683.2" y="556.8" textLength="134.2" clip-path="url(#terminal-463778956-line-22)">recommended</text><text class="terminal-463778956-r2" x="817.4" y="556.8" textLength="12.2" clip-path="url(#terminal-463778956-line-22)">)</text><text class="terminal-463778956-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-463778956-line-22)"> -</text><text class="terminal-463778956-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-463778956-line-23)"> + <g class="terminal-1670560432-matrix"> + <text class="terminal-1670560432-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-1670560432-line-0)">$ cz commit --help</text><text class="terminal-1670560432-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1670560432-line-0)"> +</text><text class="terminal-1670560432-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-1670560432-line-1)">usage: cz commit </text><text class="terminal-1670560432-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-1670560432-line-1)">-h</text><text class="terminal-1670560432-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-1670560432-line-1)">--retry</text><text class="terminal-1670560432-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-1670560432-line-1)">--no-retry</text><text class="terminal-1670560432-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-1670560432-line-1)">--dry-run</text><text class="terminal-1670560432-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)"> +</text><text class="terminal-1670560432-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-1670560432-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-1670560432-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1670560432-line-2)">-s</text><text class="terminal-1670560432-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1670560432-line-2)">-a</text><text class="terminal-1670560432-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r2" x="768.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="780.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1670560432-line-2)">-e</text><text class="terminal-1670560432-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)"> +</text><text class="terminal-1670560432-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">[</text><text class="terminal-1670560432-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-1670560432-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-1670560432-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">]</text><text class="terminal-1670560432-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">[</text><text class="terminal-1670560432-r1" x="536.8" y="93.2" textLength="24.4" clip-path="url(#terminal-1670560432-line-3)">--</text><text class="terminal-1670560432-r2" x="561.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">]</text><text class="terminal-1670560432-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)"> +</text><text class="terminal-1670560432-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-4)"> +</text><text class="terminal-1670560432-r1" x="0" y="142" textLength="207.4" clip-path="url(#terminal-1670560432-line-5)">create new commit</text><text class="terminal-1670560432-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1670560432-line-5)"> +</text><text class="terminal-1670560432-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-6)"> +</text><text class="terminal-1670560432-r1" x="0" y="190.8" textLength="97.6" clip-path="url(#terminal-1670560432-line-7)">options:</text><text class="terminal-1670560432-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-7)"> +</text><text class="terminal-1670560432-r1" x="0" y="215.2" textLength="671" clip-path="url(#terminal-1670560432-line-8)">  -h, --help            show this help message and exit</text><text class="terminal-1670560432-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-8)"> +</text><text class="terminal-1670560432-r1" x="0" y="239.6" textLength="500.2" clip-path="url(#terminal-1670560432-line-9)">  --retry               retry last commit</text><text class="terminal-1670560432-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-9)"> +</text><text class="terminal-1670560432-r1" x="0" y="264" textLength="878.4" clip-path="url(#terminal-1670560432-line-10)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-1670560432-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1670560432-line-10)"> +</text><text class="terminal-1670560432-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-1670560432-line-11)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-1670560432-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-11)"> +</text><text class="terminal-1670560432-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-1670560432-line-12)">  --write-message-to-file FILE_PATH</text><text class="terminal-1670560432-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-12)"> +</text><text class="terminal-1670560432-r1" x="0" y="337.2" textLength="780.8" clip-path="url(#terminal-1670560432-line-13)">                        write message to file before committing </text><text class="terminal-1670560432-r2" x="780.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-13)">(</text><text class="terminal-1670560432-r1" x="793" y="337.2" textLength="73.2" clip-path="url(#terminal-1670560432-line-13)">can be</text><text class="terminal-1670560432-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-13)"> +</text><text class="terminal-1670560432-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-1670560432-line-14)">                        combined with --dry-run</text><text class="terminal-1670560432-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-14)">)</text><text class="terminal-1670560432-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-14)"> +</text><text class="terminal-1670560432-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-1670560432-line-15)">  -s, --signoff         sign off the commit</text><text class="terminal-1670560432-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1670560432-line-15)"> +</text><text class="terminal-1670560432-r1" x="0" y="410.4" textLength="902.8" clip-path="url(#terminal-1670560432-line-16)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-1670560432-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-16)"> +</text><text class="terminal-1670560432-r1" x="0" y="434.8" textLength="951.6" clip-path="url(#terminal-1670560432-line-17)">                        have been modified and deleted, but new files you have</text><text class="terminal-1670560432-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-17)"> +</text><text class="terminal-1670560432-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-1670560432-line-18)">                        not told Git about are not affected.</text><text class="terminal-1670560432-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-18)"> +</text><text class="terminal-1670560432-r1" x="0" y="483.6" textLength="793" clip-path="url(#terminal-1670560432-line-19)">  -e, --edit            edit the commit message before committing</text><text class="terminal-1670560432-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-19)"> +</text><text class="terminal-1670560432-r1" x="0" y="508" textLength="854" clip-path="url(#terminal-1670560432-line-20)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-1670560432-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1670560432-line-20)"> +</text><text class="terminal-1670560432-r1" x="0" y="532.4" textLength="732" clip-path="url(#terminal-1670560432-line-21)">                        length limit of the commit message; </text><text class="terminal-1670560432-r3" x="732" y="532.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-21)">0</text><text class="terminal-1670560432-r1" x="744.2" y="532.4" textLength="158.6" clip-path="url(#terminal-1670560432-line-21)"> for no limit</text><text class="terminal-1670560432-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-21)"> +</text><text class="terminal-1670560432-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-1670560432-line-22)">  --                    Positional arguments separator </text><text class="terminal-1670560432-r2" x="671" y="556.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-22)">(</text><text class="terminal-1670560432-r1" x="683.2" y="556.8" textLength="134.2" clip-path="url(#terminal-1670560432-line-22)">recommended</text><text class="terminal-1670560432-r2" x="817.4" y="556.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-22)">)</text><text class="terminal-1670560432-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-22)"> +</text><text class="terminal-1670560432-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-23)"> </text> </g> </g> From 98ae920d1fb97617e6dd42ae16a928bb1842f646 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Fri, 7 Feb 2025 01:13:48 +0000 Subject: [PATCH 487/685] =?UTF-8?q?bump:=20version=204.1.1=20=E2=86=92=204?= =?UTF-8?q?.2.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 10 ++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5ee5c84c96..470d1f1621 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.1.1 # automatically updated by Commitizen + rev: v4.2.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 3687908b19..e8a573f8ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## v4.2.0 (2025-02-07) + +### Feat + +- draft of the --empty parameter + +### Refactor + +- **bump**: rename --empty as --allow-no-commit + ## v4.1.1 (2025-01-26) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 72aa75832f..0fd7811c0d 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.1.1" +__version__ = "4.2.0" diff --git a/pyproject.toml b/pyproject.toml index 76c51c474a..47d83785cd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.1.1" +version = "4.2.0" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -86,7 +86,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.1.1" +version = "4.2.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", From d4dfd3340d311203b74a42ae0a730504c462bc30 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Fri, 7 Feb 2025 01:14:18 +0000 Subject: [PATCH 488/685] docs(cli/screenshots): update CLI screenshots [skip ci] --- docs/images/cli_help/cz___help.svg | 162 ++++----- docs/images/cli_help/cz_bump___help.svg | 358 +++++++++---------- docs/images/cli_help/cz_changelog___help.svg | 190 +++++----- docs/images/cli_help/cz_check___help.svg | 134 ++++--- docs/images/cli_help/cz_commit___help.svg | 110 +++--- 5 files changed, 471 insertions(+), 483 deletions(-) diff --git a/docs/images/cli_help/cz___help.svg b/docs/images/cli_help/cz___help.svg index 22a9e4d0e7..098e7df70d 100644 --- a/docs/images/cli_help/cz___help.svg +++ b/docs/images/cli_help/cz___help.svg @@ -19,133 +19,133 @@ font-weight: 700; } - .terminal-4198725382-matrix { + .terminal-2205183093-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-4198725382-title { + .terminal-2205183093-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-4198725382-r1 { fill: #c5c8c6 } -.terminal-4198725382-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-4198725382-r3 { fill: #d0b344 } -.terminal-4198725382-r4 { fill: #1984e9;text-decoration: underline; } -.terminal-4198725382-r5 { fill: #68a0b3;font-weight: bold } + .terminal-2205183093-r1 { fill: #c5c8c6 } +.terminal-2205183093-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-2205183093-r3 { fill: #d0b344 } +.terminal-2205183093-r4 { fill: #1984e9;text-decoration: underline; } +.terminal-2205183093-r5 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-4198725382-clip-terminal"> + <clipPath id="terminal-2205183093-clip-terminal"> <rect x="0" y="0" width="975.0" height="877.4" /> </clipPath> - <clipPath id="terminal-4198725382-line-0"> + <clipPath id="terminal-2205183093-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-1"> +<clipPath id="terminal-2205183093-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-2"> +<clipPath id="terminal-2205183093-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-3"> +<clipPath id="terminal-2205183093-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-4"> +<clipPath id="terminal-2205183093-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-5"> +<clipPath id="terminal-2205183093-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-6"> +<clipPath id="terminal-2205183093-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-7"> +<clipPath id="terminal-2205183093-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-8"> +<clipPath id="terminal-2205183093-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-9"> +<clipPath id="terminal-2205183093-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-10"> +<clipPath id="terminal-2205183093-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-11"> +<clipPath id="terminal-2205183093-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-12"> +<clipPath id="terminal-2205183093-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-13"> +<clipPath id="terminal-2205183093-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-14"> +<clipPath id="terminal-2205183093-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-15"> +<clipPath id="terminal-2205183093-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-16"> +<clipPath id="terminal-2205183093-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-17"> +<clipPath id="terminal-2205183093-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-18"> +<clipPath id="terminal-2205183093-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-19"> +<clipPath id="terminal-2205183093-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-20"> +<clipPath id="terminal-2205183093-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-21"> +<clipPath id="terminal-2205183093-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-22"> +<clipPath id="terminal-2205183093-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-23"> +<clipPath id="terminal-2205183093-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-24"> +<clipPath id="terminal-2205183093-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-25"> +<clipPath id="terminal-2205183093-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-26"> +<clipPath id="terminal-2205183093-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-27"> +<clipPath id="terminal-2205183093-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-28"> +<clipPath id="terminal-2205183093-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-29"> +<clipPath id="terminal-2205183093-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-30"> +<clipPath id="terminal-2205183093-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-31"> +<clipPath id="terminal-2205183093-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-32"> +<clipPath id="terminal-2205183093-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-33"> +<clipPath id="terminal-2205183093-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-4198725382-line-34"> +<clipPath id="terminal-2205183093-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> </defs> @@ -157,45 +157,45 @@ <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-4198725382-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-2205183093-clip-terminal)"> - <g class="terminal-4198725382-matrix"> - <text class="terminal-4198725382-r1" x="0" y="20" textLength="134.2" clip-path="url(#terminal-4198725382-line-0)">$ cz --help</text><text class="terminal-4198725382-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-4198725382-line-0)"> -</text><text class="terminal-4198725382-r1" x="0" y="44.4" textLength="122" clip-path="url(#terminal-4198725382-line-1)">usage: cz </text><text class="terminal-4198725382-r2" x="122" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="134.2" y="44.4" textLength="24.4" clip-path="url(#terminal-4198725382-line-1)">-h</text><text class="terminal-4198725382-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="195.2" y="44.4" textLength="183" clip-path="url(#terminal-4198725382-line-1)">--config CONFIG</text><text class="terminal-4198725382-r2" x="378.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="402.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="414.8" y="44.4" textLength="85.4" clip-path="url(#terminal-4198725382-line-1)">--debug</text><text class="terminal-4198725382-r2" x="500.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="536.8" y="44.4" textLength="85.4" clip-path="url(#terminal-4198725382-line-1)">-n NAME</text><text class="terminal-4198725382-r2" x="622.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r2" x="646.6" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">[</text><text class="terminal-4198725382-r1" x="658.8" y="44.4" textLength="146.4" clip-path="url(#terminal-4198725382-line-1)">-nr NO_RAISE</text><text class="terminal-4198725382-r2" x="805.2" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)">]</text><text class="terminal-4198725382-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-1)"> -</text><text class="terminal-4198725382-r2" x="122" y="68.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-2)">{</text><text class="terminal-4198725382-r1" x="134.2" y="68.8" textLength="829.6" clip-path="url(#terminal-4198725382-line-2)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-4198725382-r2" x="963.8" y="68.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-2)">}</text><text class="terminal-4198725382-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-2)"> -</text><text class="terminal-4198725382-r3" x="122" y="93.2" textLength="36.6" clip-path="url(#terminal-4198725382-line-3)">...</text><text class="terminal-4198725382-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-3)"> -</text><text class="terminal-4198725382-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-4)"> -</text><text class="terminal-4198725382-r1" x="0" y="142" textLength="707.6" clip-path="url(#terminal-4198725382-line-5)">Commitizen is a cli tool to generate conventional commits.</text><text class="terminal-4198725382-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-4198725382-line-5)"> -</text><text class="terminal-4198725382-r1" x="0" y="166.4" textLength="524.6" clip-path="url(#terminal-4198725382-line-6)">For more information about the topic go to </text><text class="terminal-4198725382-r4" x="524.6" y="166.4" textLength="390.4" clip-path="url(#terminal-4198725382-line-6)">https://conventionalcommits.org/</text><text class="terminal-4198725382-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-6)"> -</text><text class="terminal-4198725382-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-7)"> -</text><text class="terminal-4198725382-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-4198725382-line-8)">options:</text><text class="terminal-4198725382-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-8)"> -</text><text class="terminal-4198725382-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-4198725382-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-4198725382-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-9)"> -</text><text class="terminal-4198725382-r1" x="0" y="264" textLength="658.8" clip-path="url(#terminal-4198725382-line-10)">  --config CONFIG       the path of configuration file</text><text class="terminal-4198725382-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-4198725382-line-10)"> -</text><text class="terminal-4198725382-r1" x="0" y="288.4" textLength="463.6" clip-path="url(#terminal-4198725382-line-11)">  --debug               use debug mode</text><text class="terminal-4198725382-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-11)"> -</text><text class="terminal-4198725382-r1" x="0" y="312.8" textLength="597.8" clip-path="url(#terminal-4198725382-line-12)">  -n NAME, --name NAME  use the given commitizen </text><text class="terminal-4198725382-r2" x="597.8" y="312.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-12)">(</text><text class="terminal-4198725382-r1" x="610" y="312.8" textLength="97.6" clip-path="url(#terminal-4198725382-line-12)">default:</text><text class="terminal-4198725382-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-12)"> -</text><text class="terminal-4198725382-r1" x="0" y="337.2" textLength="573.4" clip-path="url(#terminal-4198725382-line-13)">                        cz_conventional_commits</text><text class="terminal-4198725382-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-13)">)</text><text class="terminal-4198725382-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-13)"> -</text><text class="terminal-4198725382-r1" x="0" y="361.6" textLength="427" clip-path="url(#terminal-4198725382-line-14)">  -nr NO_RAISE, --no-raise NO_RAISE</text><text class="terminal-4198725382-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-14)"> -</text><text class="terminal-4198725382-r1" x="0" y="386" textLength="902.8" clip-path="url(#terminal-4198725382-line-15)">                        comma separated error codes that won't rise error,</text><text class="terminal-4198725382-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-4198725382-line-15)"> -</text><text class="terminal-4198725382-r1" x="0" y="410.4" textLength="439.2" clip-path="url(#terminal-4198725382-line-16)">                        e.g: cz -nr </text><text class="terminal-4198725382-r5" x="439.2" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">1</text><text class="terminal-4198725382-r1" x="451.4" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">,</text><text class="terminal-4198725382-r5" x="463.6" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">2</text><text class="terminal-4198725382-r1" x="475.8" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">,</text><text class="terminal-4198725382-r5" x="488" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)">3</text><text class="terminal-4198725382-r1" x="500.2" y="410.4" textLength="231.8" clip-path="url(#terminal-4198725382-line-16)"> bump. See codes at</text><text class="terminal-4198725382-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-16)"> -</text><text class="terminal-4198725382-r4" x="292.8" y="434.8" textLength="231.8" clip-path="url(#terminal-4198725382-line-17)">https://commitizen-</text><text class="terminal-4198725382-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-17)"> -</text><text class="terminal-4198725382-r1" x="0" y="459.2" textLength="756.4" clip-path="url(#terminal-4198725382-line-18)">                        tools.github.io/commitizen/exit_codes/</text><text class="terminal-4198725382-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-18)"> -</text><text class="terminal-4198725382-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-19)"> -</text><text class="terminal-4198725382-r1" x="0" y="508" textLength="109.8" clip-path="url(#terminal-4198725382-line-20)">commands:</text><text class="terminal-4198725382-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-4198725382-line-20)"> -</text><text class="terminal-4198725382-r2" x="24.4" y="532.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-21)">{</text><text class="terminal-4198725382-r1" x="36.6" y="532.4" textLength="829.6" clip-path="url(#terminal-4198725382-line-21)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-4198725382-r2" x="866.2" y="532.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-21)">}</text><text class="terminal-4198725382-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-21)"> -</text><text class="terminal-4198725382-r1" x="0" y="556.8" textLength="646.6" clip-path="url(#terminal-4198725382-line-22)">    init                init commitizen configuration</text><text class="terminal-4198725382-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-22)"> -</text><text class="terminal-4198725382-r1" x="0" y="581.2" textLength="134.2" clip-path="url(#terminal-4198725382-line-23)">    commit </text><text class="terminal-4198725382-r2" x="134.2" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)">(</text><text class="terminal-4198725382-r1" x="146.4" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)">c</text><text class="terminal-4198725382-r2" x="158.6" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)">)</text><text class="terminal-4198725382-r1" x="170.8" y="581.2" textLength="329.4" clip-path="url(#terminal-4198725382-line-23)">          create new commit</text><text class="terminal-4198725382-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-23)"> -</text><text class="terminal-4198725382-r1" x="0" y="605.6" textLength="610" clip-path="url(#terminal-4198725382-line-24)">    ls                  show available commitizens</text><text class="terminal-4198725382-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-24)"> -</text><text class="terminal-4198725382-r1" x="0" y="630" textLength="524.6" clip-path="url(#terminal-4198725382-line-25)">    example             show commit example</text><text class="terminal-4198725382-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-4198725382-line-25)"> -</text><text class="terminal-4198725382-r1" x="0" y="654.4" textLength="646.6" clip-path="url(#terminal-4198725382-line-26)">    info                show information about the cz</text><text class="terminal-4198725382-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-26)"> -</text><text class="terminal-4198725382-r1" x="0" y="678.8" textLength="512.4" clip-path="url(#terminal-4198725382-line-27)">    schema              show commit schema</text><text class="terminal-4198725382-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-27)"> -</text><text class="terminal-4198725382-r1" x="0" y="703.2" textLength="805.2" clip-path="url(#terminal-4198725382-line-28)">    bump                bump semantic version based on the git log</text><text class="terminal-4198725382-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-28)"> -</text><text class="terminal-4198725382-r1" x="0" y="727.6" textLength="170.8" clip-path="url(#terminal-4198725382-line-29)">    changelog </text><text class="terminal-4198725382-r2" x="170.8" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)">(</text><text class="terminal-4198725382-r1" x="183" y="727.6" textLength="24.4" clip-path="url(#terminal-4198725382-line-29)">ch</text><text class="terminal-4198725382-r2" x="207.4" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)">)</text><text class="terminal-4198725382-r1" x="219.6" y="727.6" textLength="305" clip-path="url(#terminal-4198725382-line-29)">      generate changelog </text><text class="terminal-4198725382-r2" x="524.6" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)">(</text><text class="terminal-4198725382-r1" x="536.8" y="727.6" textLength="329.4" clip-path="url(#terminal-4198725382-line-29)">note that it will overwrite</text><text class="terminal-4198725382-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-29)"> -</text><text class="terminal-4198725382-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-4198725382-line-30)">                        existing file</text><text class="terminal-4198725382-r2" x="451.4" y="752" textLength="12.2" clip-path="url(#terminal-4198725382-line-30)">)</text><text class="terminal-4198725382-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-4198725382-line-30)"> -</text><text class="terminal-4198725382-r1" x="0" y="776.4" textLength="951.6" clip-path="url(#terminal-4198725382-line-31)">    check               validates that a commit message matches the commitizen</text><text class="terminal-4198725382-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-4198725382-line-31)"> -</text><text class="terminal-4198725382-r1" x="0" y="800.8" textLength="366" clip-path="url(#terminal-4198725382-line-32)">                        schema</text><text class="terminal-4198725382-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-4198725382-line-32)"> -</text><text class="terminal-4198725382-r1" x="0" y="825.2" textLength="902.8" clip-path="url(#terminal-4198725382-line-33)">    version             get the version of the installed commitizen or the</text><text class="terminal-4198725382-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-4198725382-line-33)"> -</text><text class="terminal-4198725382-r1" x="0" y="849.6" textLength="488" clip-path="url(#terminal-4198725382-line-34)">                        current project </text><text class="terminal-4198725382-r2" x="488" y="849.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-34)">(</text><text class="terminal-4198725382-r1" x="500.2" y="849.6" textLength="353.8" clip-path="url(#terminal-4198725382-line-34)">default: installed commitizen</text><text class="terminal-4198725382-r2" x="854" y="849.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-34)">)</text><text class="terminal-4198725382-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-4198725382-line-34)"> -</text><text class="terminal-4198725382-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-4198725382-line-35)"> + <g class="terminal-2205183093-matrix"> + <text class="terminal-2205183093-r1" x="0" y="20" textLength="134.2" clip-path="url(#terminal-2205183093-line-0)">$ cz --help</text><text class="terminal-2205183093-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2205183093-line-0)"> +</text><text class="terminal-2205183093-r1" x="0" y="44.4" textLength="122" clip-path="url(#terminal-2205183093-line-1)">usage: cz </text><text class="terminal-2205183093-r2" x="122" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="134.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2205183093-line-1)">-h</text><text class="terminal-2205183093-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="195.2" y="44.4" textLength="183" clip-path="url(#terminal-2205183093-line-1)">--config CONFIG</text><text class="terminal-2205183093-r2" x="378.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="402.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="414.8" y="44.4" textLength="85.4" clip-path="url(#terminal-2205183093-line-1)">--debug</text><text class="terminal-2205183093-r2" x="500.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="536.8" y="44.4" textLength="85.4" clip-path="url(#terminal-2205183093-line-1)">-n NAME</text><text class="terminal-2205183093-r2" x="622.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="646.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="658.8" y="44.4" textLength="146.4" clip-path="url(#terminal-2205183093-line-1)">-nr NO_RAISE</text><text class="terminal-2205183093-r2" x="805.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)"> +</text><text class="terminal-2205183093-r2" x="122" y="68.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-2)">{</text><text class="terminal-2205183093-r1" x="134.2" y="68.8" textLength="829.6" clip-path="url(#terminal-2205183093-line-2)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-2205183093-r2" x="963.8" y="68.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-2)">}</text><text class="terminal-2205183093-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-2)"> +</text><text class="terminal-2205183093-r3" x="0" y="93.2" textLength="36.6" clip-path="url(#terminal-2205183093-line-3)">...</text><text class="terminal-2205183093-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-3)"> +</text><text class="terminal-2205183093-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-4)"> +</text><text class="terminal-2205183093-r1" x="0" y="142" textLength="707.6" clip-path="url(#terminal-2205183093-line-5)">Commitizen is a cli tool to generate conventional commits.</text><text class="terminal-2205183093-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2205183093-line-5)"> +</text><text class="terminal-2205183093-r1" x="0" y="166.4" textLength="524.6" clip-path="url(#terminal-2205183093-line-6)">For more information about the topic go to </text><text class="terminal-2205183093-r4" x="524.6" y="166.4" textLength="390.4" clip-path="url(#terminal-2205183093-line-6)">https://conventionalcommits.org/</text><text class="terminal-2205183093-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-6)"> +</text><text class="terminal-2205183093-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-7)"> +</text><text class="terminal-2205183093-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-2205183093-line-8)">options:</text><text class="terminal-2205183093-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-8)"> +</text><text class="terminal-2205183093-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-2205183093-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-2205183093-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-9)"> +</text><text class="terminal-2205183093-r1" x="0" y="264" textLength="658.8" clip-path="url(#terminal-2205183093-line-10)">  --config CONFIG       the path of configuration file</text><text class="terminal-2205183093-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2205183093-line-10)"> +</text><text class="terminal-2205183093-r1" x="0" y="288.4" textLength="463.6" clip-path="url(#terminal-2205183093-line-11)">  --debug               use debug mode</text><text class="terminal-2205183093-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-11)"> +</text><text class="terminal-2205183093-r1" x="0" y="312.8" textLength="597.8" clip-path="url(#terminal-2205183093-line-12)">  -n, --name NAME       use the given commitizen </text><text class="terminal-2205183093-r2" x="597.8" y="312.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-12)">(</text><text class="terminal-2205183093-r1" x="610" y="312.8" textLength="97.6" clip-path="url(#terminal-2205183093-line-12)">default:</text><text class="terminal-2205183093-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-12)"> +</text><text class="terminal-2205183093-r1" x="0" y="337.2" textLength="573.4" clip-path="url(#terminal-2205183093-line-13)">                        cz_conventional_commits</text><text class="terminal-2205183093-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-13)">)</text><text class="terminal-2205183093-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-13)"> +</text><text class="terminal-2205183093-r1" x="0" y="361.6" textLength="317.2" clip-path="url(#terminal-2205183093-line-14)">  -nr, --no-raise NO_RAISE</text><text class="terminal-2205183093-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-14)"> +</text><text class="terminal-2205183093-r1" x="0" y="386" textLength="902.8" clip-path="url(#terminal-2205183093-line-15)">                        comma separated error codes that won't rise error,</text><text class="terminal-2205183093-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2205183093-line-15)"> +</text><text class="terminal-2205183093-r1" x="0" y="410.4" textLength="439.2" clip-path="url(#terminal-2205183093-line-16)">                        e.g: cz -nr </text><text class="terminal-2205183093-r5" x="439.2" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">1</text><text class="terminal-2205183093-r1" x="451.4" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">,</text><text class="terminal-2205183093-r5" x="463.6" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">2</text><text class="terminal-2205183093-r1" x="475.8" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">,</text><text class="terminal-2205183093-r5" x="488" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">3</text><text class="terminal-2205183093-r1" x="500.2" y="410.4" textLength="231.8" clip-path="url(#terminal-2205183093-line-16)"> bump. See codes at</text><text class="terminal-2205183093-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)"> +</text><text class="terminal-2205183093-r4" x="292.8" y="434.8" textLength="231.8" clip-path="url(#terminal-2205183093-line-17)">https://commitizen-</text><text class="terminal-2205183093-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-17)"> +</text><text class="terminal-2205183093-r1" x="0" y="459.2" textLength="756.4" clip-path="url(#terminal-2205183093-line-18)">                        tools.github.io/commitizen/exit_codes/</text><text class="terminal-2205183093-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-18)"> +</text><text class="terminal-2205183093-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-19)"> +</text><text class="terminal-2205183093-r1" x="0" y="508" textLength="109.8" clip-path="url(#terminal-2205183093-line-20)">commands:</text><text class="terminal-2205183093-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2205183093-line-20)"> +</text><text class="terminal-2205183093-r2" x="24.4" y="532.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-21)">{</text><text class="terminal-2205183093-r1" x="36.6" y="532.4" textLength="829.6" clip-path="url(#terminal-2205183093-line-21)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-2205183093-r2" x="866.2" y="532.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-21)">}</text><text class="terminal-2205183093-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-21)"> +</text><text class="terminal-2205183093-r1" x="0" y="556.8" textLength="646.6" clip-path="url(#terminal-2205183093-line-22)">    init                init commitizen configuration</text><text class="terminal-2205183093-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-22)"> +</text><text class="terminal-2205183093-r1" x="0" y="581.2" textLength="134.2" clip-path="url(#terminal-2205183093-line-23)">    commit </text><text class="terminal-2205183093-r2" x="134.2" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)">(</text><text class="terminal-2205183093-r1" x="146.4" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)">c</text><text class="terminal-2205183093-r2" x="158.6" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)">)</text><text class="terminal-2205183093-r1" x="170.8" y="581.2" textLength="329.4" clip-path="url(#terminal-2205183093-line-23)">          create new commit</text><text class="terminal-2205183093-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)"> +</text><text class="terminal-2205183093-r1" x="0" y="605.6" textLength="610" clip-path="url(#terminal-2205183093-line-24)">    ls                  show available commitizens</text><text class="terminal-2205183093-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-24)"> +</text><text class="terminal-2205183093-r1" x="0" y="630" textLength="524.6" clip-path="url(#terminal-2205183093-line-25)">    example             show commit example</text><text class="terminal-2205183093-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2205183093-line-25)"> +</text><text class="terminal-2205183093-r1" x="0" y="654.4" textLength="646.6" clip-path="url(#terminal-2205183093-line-26)">    info                show information about the cz</text><text class="terminal-2205183093-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-26)"> +</text><text class="terminal-2205183093-r1" x="0" y="678.8" textLength="512.4" clip-path="url(#terminal-2205183093-line-27)">    schema              show commit schema</text><text class="terminal-2205183093-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-27)"> +</text><text class="terminal-2205183093-r1" x="0" y="703.2" textLength="805.2" clip-path="url(#terminal-2205183093-line-28)">    bump                bump semantic version based on the git log</text><text class="terminal-2205183093-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-28)"> +</text><text class="terminal-2205183093-r1" x="0" y="727.6" textLength="170.8" clip-path="url(#terminal-2205183093-line-29)">    changelog </text><text class="terminal-2205183093-r2" x="170.8" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)">(</text><text class="terminal-2205183093-r1" x="183" y="727.6" textLength="24.4" clip-path="url(#terminal-2205183093-line-29)">ch</text><text class="terminal-2205183093-r2" x="207.4" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)">)</text><text class="terminal-2205183093-r1" x="219.6" y="727.6" textLength="305" clip-path="url(#terminal-2205183093-line-29)">      generate changelog </text><text class="terminal-2205183093-r2" x="524.6" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)">(</text><text class="terminal-2205183093-r1" x="536.8" y="727.6" textLength="329.4" clip-path="url(#terminal-2205183093-line-29)">note that it will overwrite</text><text class="terminal-2205183093-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)"> +</text><text class="terminal-2205183093-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-2205183093-line-30)">                        existing file</text><text class="terminal-2205183093-r2" x="451.4" y="752" textLength="12.2" clip-path="url(#terminal-2205183093-line-30)">)</text><text class="terminal-2205183093-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-2205183093-line-30)"> +</text><text class="terminal-2205183093-r1" x="0" y="776.4" textLength="951.6" clip-path="url(#terminal-2205183093-line-31)">    check               validates that a commit message matches the commitizen</text><text class="terminal-2205183093-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-31)"> +</text><text class="terminal-2205183093-r1" x="0" y="800.8" textLength="366" clip-path="url(#terminal-2205183093-line-32)">                        schema</text><text class="terminal-2205183093-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-32)"> +</text><text class="terminal-2205183093-r1" x="0" y="825.2" textLength="902.8" clip-path="url(#terminal-2205183093-line-33)">    version             get the version of the installed commitizen or the</text><text class="terminal-2205183093-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-33)"> +</text><text class="terminal-2205183093-r1" x="0" y="849.6" textLength="488" clip-path="url(#terminal-2205183093-line-34)">                        current project </text><text class="terminal-2205183093-r2" x="488" y="849.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-34)">(</text><text class="terminal-2205183093-r1" x="500.2" y="849.6" textLength="353.8" clip-path="url(#terminal-2205183093-line-34)">default: installed commitizen</text><text class="terminal-2205183093-r2" x="854" y="849.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-34)">)</text><text class="terminal-2205183093-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-34)"> +</text><text class="terminal-2205183093-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-2205183093-line-35)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_bump___help.svg b/docs/images/cli_help/cz_bump___help.svg index 659b68b955..7f27636ddf 100644 --- a/docs/images/cli_help/cz_bump___help.svg +++ b/docs/images/cli_help/cz_bump___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 2099.6" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 2075.2" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,374 +19,370 @@ font-weight: 700; } - .terminal-2232203-matrix { + .terminal-243650528-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2232203-title { + .terminal-243650528-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2232203-r1 { fill: #c5c8c6 } -.terminal-2232203-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-2232203-r3 { fill: #68a0b3;font-weight: bold } -.terminal-2232203-r4 { fill: #98a84b } + .terminal-243650528-r1 { fill: #c5c8c6 } +.terminal-243650528-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-243650528-r3 { fill: #68a0b3;font-weight: bold } +.terminal-243650528-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-2232203-clip-terminal"> - <rect x="0" y="0" width="975.0" height="2048.6" /> + <clipPath id="terminal-243650528-clip-terminal"> + <rect x="0" y="0" width="975.0" height="2024.1999999999998" /> </clipPath> - <clipPath id="terminal-2232203-line-0"> + <clipPath id="terminal-243650528-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-1"> +<clipPath id="terminal-243650528-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-2"> +<clipPath id="terminal-243650528-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-3"> +<clipPath id="terminal-243650528-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-4"> +<clipPath id="terminal-243650528-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-5"> +<clipPath id="terminal-243650528-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-6"> +<clipPath id="terminal-243650528-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-7"> +<clipPath id="terminal-243650528-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-8"> +<clipPath id="terminal-243650528-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-9"> +<clipPath id="terminal-243650528-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-10"> +<clipPath id="terminal-243650528-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-11"> +<clipPath id="terminal-243650528-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-12"> +<clipPath id="terminal-243650528-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-13"> +<clipPath id="terminal-243650528-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-14"> +<clipPath id="terminal-243650528-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-15"> +<clipPath id="terminal-243650528-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-16"> +<clipPath id="terminal-243650528-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-17"> +<clipPath id="terminal-243650528-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-18"> +<clipPath id="terminal-243650528-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-19"> +<clipPath id="terminal-243650528-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-20"> +<clipPath id="terminal-243650528-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-21"> +<clipPath id="terminal-243650528-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-22"> +<clipPath id="terminal-243650528-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-23"> +<clipPath id="terminal-243650528-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-24"> +<clipPath id="terminal-243650528-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-25"> +<clipPath id="terminal-243650528-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-26"> +<clipPath id="terminal-243650528-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-27"> +<clipPath id="terminal-243650528-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-28"> +<clipPath id="terminal-243650528-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-29"> +<clipPath id="terminal-243650528-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-30"> +<clipPath id="terminal-243650528-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-31"> +<clipPath id="terminal-243650528-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-32"> +<clipPath id="terminal-243650528-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-33"> +<clipPath id="terminal-243650528-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-34"> +<clipPath id="terminal-243650528-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-35"> +<clipPath id="terminal-243650528-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-36"> +<clipPath id="terminal-243650528-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-37"> +<clipPath id="terminal-243650528-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-38"> +<clipPath id="terminal-243650528-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-39"> +<clipPath id="terminal-243650528-line-39"> <rect x="0" y="953.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-40"> +<clipPath id="terminal-243650528-line-40"> <rect x="0" y="977.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-41"> +<clipPath id="terminal-243650528-line-41"> <rect x="0" y="1001.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-42"> +<clipPath id="terminal-243650528-line-42"> <rect x="0" y="1026.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-43"> +<clipPath id="terminal-243650528-line-43"> <rect x="0" y="1050.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-44"> +<clipPath id="terminal-243650528-line-44"> <rect x="0" y="1075.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-45"> +<clipPath id="terminal-243650528-line-45"> <rect x="0" y="1099.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-46"> +<clipPath id="terminal-243650528-line-46"> <rect x="0" y="1123.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-47"> +<clipPath id="terminal-243650528-line-47"> <rect x="0" y="1148.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-48"> +<clipPath id="terminal-243650528-line-48"> <rect x="0" y="1172.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-49"> +<clipPath id="terminal-243650528-line-49"> <rect x="0" y="1197.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-50"> +<clipPath id="terminal-243650528-line-50"> <rect x="0" y="1221.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-51"> +<clipPath id="terminal-243650528-line-51"> <rect x="0" y="1245.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-52"> +<clipPath id="terminal-243650528-line-52"> <rect x="0" y="1270.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-53"> +<clipPath id="terminal-243650528-line-53"> <rect x="0" y="1294.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-54"> +<clipPath id="terminal-243650528-line-54"> <rect x="0" y="1319.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-55"> +<clipPath id="terminal-243650528-line-55"> <rect x="0" y="1343.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-56"> +<clipPath id="terminal-243650528-line-56"> <rect x="0" y="1367.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-57"> +<clipPath id="terminal-243650528-line-57"> <rect x="0" y="1392.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-58"> +<clipPath id="terminal-243650528-line-58"> <rect x="0" y="1416.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-59"> +<clipPath id="terminal-243650528-line-59"> <rect x="0" y="1441.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-60"> +<clipPath id="terminal-243650528-line-60"> <rect x="0" y="1465.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-61"> +<clipPath id="terminal-243650528-line-61"> <rect x="0" y="1489.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-62"> +<clipPath id="terminal-243650528-line-62"> <rect x="0" y="1514.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-63"> +<clipPath id="terminal-243650528-line-63"> <rect x="0" y="1538.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-64"> +<clipPath id="terminal-243650528-line-64"> <rect x="0" y="1563.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-65"> +<clipPath id="terminal-243650528-line-65"> <rect x="0" y="1587.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-66"> +<clipPath id="terminal-243650528-line-66"> <rect x="0" y="1611.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-67"> +<clipPath id="terminal-243650528-line-67"> <rect x="0" y="1636.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-68"> +<clipPath id="terminal-243650528-line-68"> <rect x="0" y="1660.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-69"> +<clipPath id="terminal-243650528-line-69"> <rect x="0" y="1685.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-70"> +<clipPath id="terminal-243650528-line-70"> <rect x="0" y="1709.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-71"> +<clipPath id="terminal-243650528-line-71"> <rect x="0" y="1733.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-72"> +<clipPath id="terminal-243650528-line-72"> <rect x="0" y="1758.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-73"> +<clipPath id="terminal-243650528-line-73"> <rect x="0" y="1782.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-74"> +<clipPath id="terminal-243650528-line-74"> <rect x="0" y="1807.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-75"> +<clipPath id="terminal-243650528-line-75"> <rect x="0" y="1831.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-76"> +<clipPath id="terminal-243650528-line-76"> <rect x="0" y="1855.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-77"> +<clipPath id="terminal-243650528-line-77"> <rect x="0" y="1880.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-78"> +<clipPath id="terminal-243650528-line-78"> <rect x="0" y="1904.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-79"> +<clipPath id="terminal-243650528-line-79"> <rect x="0" y="1929.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-80"> +<clipPath id="terminal-243650528-line-80"> <rect x="0" y="1953.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-81"> +<clipPath id="terminal-243650528-line-81"> <rect x="0" y="1977.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2232203-line-82"> - <rect x="0" y="2002.3" width="976" height="24.65"/> - </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="2097.6" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="2073.2" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-2232203-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-243650528-clip-terminal)"> - <g class="terminal-2232203-matrix"> - <text class="terminal-2232203-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-2232203-line-0)">$ cz bump --help</text><text class="terminal-2232203-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2232203-line-0)"> -</text><text class="terminal-2232203-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-2232203-line-1)">usage: cz bump </text><text class="terminal-2232203-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">[</text><text class="terminal-2232203-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2232203-line-1)">-h</text><text class="terminal-2232203-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">]</text><text class="terminal-2232203-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">[</text><text class="terminal-2232203-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-2232203-line-1)">--dry-run</text><text class="terminal-2232203-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">]</text><text class="terminal-2232203-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">[</text><text class="terminal-2232203-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-2232203-line-1)">--files-only</text><text class="terminal-2232203-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">]</text><text class="terminal-2232203-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">[</text><text class="terminal-2232203-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-2232203-line-1)">--local-version</text><text class="terminal-2232203-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">]</text><text class="terminal-2232203-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">[</text><text class="terminal-2232203-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-2232203-line-1)">--changelog</text><text class="terminal-2232203-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)">]</text><text class="terminal-2232203-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2232203-line-1)"> -</text><text class="terminal-2232203-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)">[</text><text class="terminal-2232203-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-2232203-line-2)">--no-verify</text><text class="terminal-2232203-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)">]</text><text class="terminal-2232203-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)">[</text><text class="terminal-2232203-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-2232203-line-2)">--yes</text><text class="terminal-2232203-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)">]</text><text class="terminal-2232203-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)">[</text><text class="terminal-2232203-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-2232203-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-2232203-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)">]</text><text class="terminal-2232203-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2232203-line-2)"> -</text><text class="terminal-2232203-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)">[</text><text class="terminal-2232203-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-2232203-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-2232203-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)">]</text><text class="terminal-2232203-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)">[</text><text class="terminal-2232203-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-2232203-line-3)">--prerelease </text><text class="terminal-2232203-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)">{</text><text class="terminal-2232203-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-2232203-line-3)">alpha,beta,rc</text><text class="terminal-2232203-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)">}</text><text class="terminal-2232203-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)">]</text><text class="terminal-2232203-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2232203-line-3)"> -</text><text class="terminal-2232203-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)">[</text><text class="terminal-2232203-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-2232203-line-4)">--devrelease DEVRELEASE</text><text class="terminal-2232203-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)">]</text><text class="terminal-2232203-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)">[</text><text class="terminal-2232203-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-2232203-line-4)">--increment </text><text class="terminal-2232203-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)">{</text><text class="terminal-2232203-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-2232203-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-2232203-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)">}</text><text class="terminal-2232203-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)">]</text><text class="terminal-2232203-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2232203-line-4)"> -</text><text class="terminal-2232203-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)">[</text><text class="terminal-2232203-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-2232203-line-5)">--increment-mode </text><text class="terminal-2232203-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)">{</text><text class="terminal-2232203-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-2232203-line-5)">linear,exact</text><text class="terminal-2232203-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)">}</text><text class="terminal-2232203-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)">]</text><text class="terminal-2232203-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)">[</text><text class="terminal-2232203-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-2232203-line-5)">--check-consistency</text><text class="terminal-2232203-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)">]</text><text class="terminal-2232203-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2232203-line-5)"> -</text><text class="terminal-2232203-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-2232203-line-6)">[</text><text class="terminal-2232203-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-2232203-line-6)">--annotated-tag</text><text class="terminal-2232203-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-2232203-line-6)">]</text><text class="terminal-2232203-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2232203-line-6)"> -</text><text class="terminal-2232203-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-2232203-line-7)">[</text><text class="terminal-2232203-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-2232203-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-2232203-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-2232203-line-7)">]</text><text class="terminal-2232203-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-2232203-line-7)">[</text><text class="terminal-2232203-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-2232203-line-7)">--gpg-sign</text><text class="terminal-2232203-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-2232203-line-7)">]</text><text class="terminal-2232203-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2232203-line-7)"> -</text><text class="terminal-2232203-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)">[</text><text class="terminal-2232203-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-2232203-line-8)">--changelog-to-stdout</text><text class="terminal-2232203-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)">]</text><text class="terminal-2232203-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)">[</text><text class="terminal-2232203-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-2232203-line-8)">--git-output-to-stderr</text><text class="terminal-2232203-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)">]</text><text class="terminal-2232203-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)">[</text><text class="terminal-2232203-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-2232203-line-8)">--retry</text><text class="terminal-2232203-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)">]</text><text class="terminal-2232203-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2232203-line-8)"> -</text><text class="terminal-2232203-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)">[</text><text class="terminal-2232203-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-2232203-line-9)">--major-version-zero</text><text class="terminal-2232203-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)">]</text><text class="terminal-2232203-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)">[</text><text class="terminal-2232203-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-2232203-line-9)">--template TEMPLATE</text><text class="terminal-2232203-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)">]</text><text class="terminal-2232203-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)">[</text><text class="terminal-2232203-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-2232203-line-9)">--extra EXTRA</text><text class="terminal-2232203-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)">]</text><text class="terminal-2232203-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2232203-line-9)"> -</text><text class="terminal-2232203-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-2232203-line-10)">[</text><text class="terminal-2232203-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-2232203-line-10)">--file-name FILE_NAME</text><text class="terminal-2232203-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-2232203-line-10)">]</text><text class="terminal-2232203-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-2232203-line-10)">[</text><text class="terminal-2232203-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-2232203-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-2232203-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-2232203-line-10)">]</text><text class="terminal-2232203-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2232203-line-10)"> -</text><text class="terminal-2232203-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-2232203-line-11)">[</text><text class="terminal-2232203-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-2232203-line-11)">--version-scheme </text><text class="terminal-2232203-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-2232203-line-11)">{</text><text class="terminal-2232203-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-2232203-line-11)">pep440,semver,semver2</text><text class="terminal-2232203-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-2232203-line-11)">}</text><text class="terminal-2232203-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-2232203-line-11)">]</text><text class="terminal-2232203-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2232203-line-11)"> -</text><text class="terminal-2232203-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-2232203-line-12)">[</text><text class="terminal-2232203-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-2232203-line-12)">--version-type </text><text class="terminal-2232203-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2232203-line-12)">{</text><text class="terminal-2232203-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-2232203-line-12)">pep440,semver,semver2</text><text class="terminal-2232203-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-2232203-line-12)">}</text><text class="terminal-2232203-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-2232203-line-12)">]</text><text class="terminal-2232203-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2232203-line-12)"> -</text><text class="terminal-2232203-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-2232203-line-13)">[</text><text class="terminal-2232203-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-2232203-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-2232203-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-2232203-line-13)">]</text><text class="terminal-2232203-r2" x="597.8" y="337.2" textLength="12.2" clip-path="url(#terminal-2232203-line-13)">[</text><text class="terminal-2232203-r1" x="610" y="337.2" textLength="122" clip-path="url(#terminal-2232203-line-13)">--get-next</text><text class="terminal-2232203-r2" x="732" y="337.2" textLength="12.2" clip-path="url(#terminal-2232203-line-13)">]</text><text class="terminal-2232203-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2232203-line-13)"> -</text><text class="terminal-2232203-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-2232203-line-14)">[</text><text class="terminal-2232203-r1" x="195.2" y="361.6" textLength="207.4" clip-path="url(#terminal-2232203-line-14)">--allow-no-commit</text><text class="terminal-2232203-r2" x="402.6" y="361.6" textLength="12.2" clip-path="url(#terminal-2232203-line-14)">]</text><text class="terminal-2232203-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2232203-line-14)"> -</text><text class="terminal-2232203-r2" x="183" y="386" textLength="12.2" clip-path="url(#terminal-2232203-line-15)">[</text><text class="terminal-2232203-r1" x="195.2" y="386" textLength="170.8" clip-path="url(#terminal-2232203-line-15)">MANUAL_VERSION</text><text class="terminal-2232203-r2" x="366" y="386" textLength="12.2" clip-path="url(#terminal-2232203-line-15)">]</text><text class="terminal-2232203-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2232203-line-15)"> -</text><text class="terminal-2232203-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2232203-line-16)"> -</text><text class="terminal-2232203-r1" x="0" y="434.8" textLength="512.4" clip-path="url(#terminal-2232203-line-17)">bump semantic version based on the git log</text><text class="terminal-2232203-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2232203-line-17)"> -</text><text class="terminal-2232203-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2232203-line-18)"> -</text><text class="terminal-2232203-r1" x="0" y="483.6" textLength="256.2" clip-path="url(#terminal-2232203-line-19)">positional arguments:</text><text class="terminal-2232203-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2232203-line-19)"> -</text><text class="terminal-2232203-r1" x="0" y="508" textLength="610" clip-path="url(#terminal-2232203-line-20)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-2232203-r2" x="610" y="508" textLength="12.2" clip-path="url(#terminal-2232203-line-20)">(</text><text class="terminal-2232203-r1" x="622.2" y="508" textLength="61" clip-path="url(#terminal-2232203-line-20)">e.g: </text><text class="terminal-2232203-r3" x="683.2" y="508" textLength="36.6" clip-path="url(#terminal-2232203-line-20)">1.5</text><text class="terminal-2232203-r1" x="719.8" y="508" textLength="12.2" clip-path="url(#terminal-2232203-line-20)">.</text><text class="terminal-2232203-r3" x="732" y="508" textLength="12.2" clip-path="url(#terminal-2232203-line-20)">3</text><text class="terminal-2232203-r2" x="744.2" y="508" textLength="12.2" clip-path="url(#terminal-2232203-line-20)">)</text><text class="terminal-2232203-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2232203-line-20)"> -</text><text class="terminal-2232203-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2232203-line-21)"> -</text><text class="terminal-2232203-r1" x="0" y="556.8" textLength="97.6" clip-path="url(#terminal-2232203-line-22)">options:</text><text class="terminal-2232203-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2232203-line-22)"> -</text><text class="terminal-2232203-r1" x="0" y="581.2" textLength="671" clip-path="url(#terminal-2232203-line-23)">  -h, --help            show this help message and exit</text><text class="terminal-2232203-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2232203-line-23)"> -</text><text class="terminal-2232203-r1" x="0" y="605.6" textLength="915" clip-path="url(#terminal-2232203-line-24)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-2232203-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2232203-line-24)"> -</text><text class="terminal-2232203-r1" x="0" y="630" textLength="793" clip-path="url(#terminal-2232203-line-25)">  --files-only          bump version in the files from the config</text><text class="terminal-2232203-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2232203-line-25)"> -</text><text class="terminal-2232203-r1" x="0" y="654.4" textLength="719.8" clip-path="url(#terminal-2232203-line-26)">  --local-version       bump only the local version portion</text><text class="terminal-2232203-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-2232203-line-26)"> -</text><text class="terminal-2232203-r1" x="0" y="678.8" textLength="841.8" clip-path="url(#terminal-2232203-line-27)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-2232203-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-2232203-line-27)"> -</text><text class="terminal-2232203-r1" x="0" y="703.2" textLength="902.8" clip-path="url(#terminal-2232203-line-28)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-2232203-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-2232203-line-28)"> -</text><text class="terminal-2232203-r1" x="0" y="727.6" textLength="353.8" clip-path="url(#terminal-2232203-line-29)">                        hooks</text><text class="terminal-2232203-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-2232203-line-29)"> -</text><text class="terminal-2232203-r1" x="0" y="752" textLength="719.8" clip-path="url(#terminal-2232203-line-30)">  --yes                 accept automatically questions done</text><text class="terminal-2232203-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-2232203-line-30)"> -</text><text class="terminal-2232203-r1" x="0" y="776.4" textLength="305" clip-path="url(#terminal-2232203-line-31)">  --tag-format TAG_FORMAT</text><text class="terminal-2232203-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-2232203-line-31)"> -</text><text class="terminal-2232203-r1" x="0" y="800.8" textLength="939.4" clip-path="url(#terminal-2232203-line-32)">                        the format used to tag the commit and read it, use it</text><text class="terminal-2232203-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-2232203-line-32)"> -</text><text class="terminal-2232203-r1" x="0" y="825.2" textLength="866.2" clip-path="url(#terminal-2232203-line-33)">                        in existing projects, wrap around simple quotes</text><text class="terminal-2232203-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-2232203-line-33)"> -</text><text class="terminal-2232203-r1" x="0" y="849.6" textLength="353.8" clip-path="url(#terminal-2232203-line-34)">  --bump-message BUMP_MESSAGE</text><text class="terminal-2232203-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-2232203-line-34)"> -</text><text class="terminal-2232203-r1" x="0" y="874" textLength="902.8" clip-path="url(#terminal-2232203-line-35)">                        template used to create the release commit, useful</text><text class="terminal-2232203-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-2232203-line-35)"> -</text><text class="terminal-2232203-r1" x="0" y="898.4" textLength="536.8" clip-path="url(#terminal-2232203-line-36)">                        when working with CI</text><text class="terminal-2232203-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-2232203-line-36)"> -</text><text class="terminal-2232203-r1" x="0" y="922.8" textLength="183" clip-path="url(#terminal-2232203-line-37)">  --prerelease </text><text class="terminal-2232203-r2" x="183" y="922.8" textLength="12.2" clip-path="url(#terminal-2232203-line-37)">{</text><text class="terminal-2232203-r1" x="195.2" y="922.8" textLength="158.6" clip-path="url(#terminal-2232203-line-37)">alpha,beta,rc</text><text class="terminal-2232203-r2" x="353.8" y="922.8" textLength="12.2" clip-path="url(#terminal-2232203-line-37)">}</text><text class="terminal-2232203-r1" x="366" y="922.8" textLength="73.2" clip-path="url(#terminal-2232203-line-37)">, -pr </text><text class="terminal-2232203-r2" x="439.2" y="922.8" textLength="12.2" clip-path="url(#terminal-2232203-line-37)">{</text><text class="terminal-2232203-r1" x="451.4" y="922.8" textLength="158.6" clip-path="url(#terminal-2232203-line-37)">alpha,beta,rc</text><text class="terminal-2232203-r2" x="610" y="922.8" textLength="12.2" clip-path="url(#terminal-2232203-line-37)">}</text><text class="terminal-2232203-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-2232203-line-37)"> -</text><text class="terminal-2232203-r1" x="0" y="947.2" textLength="597.8" clip-path="url(#terminal-2232203-line-38)">                        choose type of prerelease</text><text class="terminal-2232203-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-2232203-line-38)"> -</text><text class="terminal-2232203-r1" x="0" y="971.6" textLength="488" clip-path="url(#terminal-2232203-line-39)">  --devrelease DEVRELEASE, -d DEVRELEASE</text><text class="terminal-2232203-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-2232203-line-39)"> -</text><text class="terminal-2232203-r1" x="0" y="996" textLength="841.8" clip-path="url(#terminal-2232203-line-40)">                        specify non-negative integer for dev. release</text><text class="terminal-2232203-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-2232203-line-40)"> -</text><text class="terminal-2232203-r1" x="0" y="1020.4" textLength="170.8" clip-path="url(#terminal-2232203-line-41)">  --increment </text><text class="terminal-2232203-r2" x="170.8" y="1020.4" textLength="12.2" clip-path="url(#terminal-2232203-line-41)">{</text><text class="terminal-2232203-r1" x="183" y="1020.4" textLength="207.4" clip-path="url(#terminal-2232203-line-41)">MAJOR,MINOR,PATCH</text><text class="terminal-2232203-r2" x="390.4" y="1020.4" textLength="12.2" clip-path="url(#terminal-2232203-line-41)">}</text><text class="terminal-2232203-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-2232203-line-41)"> -</text><text class="terminal-2232203-r1" x="0" y="1044.8" textLength="756.4" clip-path="url(#terminal-2232203-line-42)">                        manually specify the desired increment</text><text class="terminal-2232203-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-2232203-line-42)"> -</text><text class="terminal-2232203-r1" x="0" y="1069.2" textLength="231.8" clip-path="url(#terminal-2232203-line-43)">  --increment-mode </text><text class="terminal-2232203-r2" x="231.8" y="1069.2" textLength="12.2" clip-path="url(#terminal-2232203-line-43)">{</text><text class="terminal-2232203-r1" x="244" y="1069.2" textLength="146.4" clip-path="url(#terminal-2232203-line-43)">linear,exact</text><text class="terminal-2232203-r2" x="390.4" y="1069.2" textLength="12.2" clip-path="url(#terminal-2232203-line-43)">}</text><text class="terminal-2232203-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-2232203-line-43)"> -</text><text class="terminal-2232203-r1" x="0" y="1093.6" textLength="902.8" clip-path="url(#terminal-2232203-line-44)">                        set the method by which the new version is chosen.</text><text class="terminal-2232203-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-2232203-line-44)"> -</text><text class="terminal-2232203-r4" x="292.8" y="1118" textLength="97.6" clip-path="url(#terminal-2232203-line-45)">'linear'</text><text class="terminal-2232203-r2" x="402.6" y="1118" textLength="12.2" clip-path="url(#terminal-2232203-line-45)">(</text><text class="terminal-2232203-r1" x="414.8" y="1118" textLength="85.4" clip-path="url(#terminal-2232203-line-45)">default</text><text class="terminal-2232203-r2" x="500.2" y="1118" textLength="12.2" clip-path="url(#terminal-2232203-line-45)">)</text><text class="terminal-2232203-r1" x="512.4" y="1118" textLength="414.8" clip-path="url(#terminal-2232203-line-45)"> guesses the next version based on</text><text class="terminal-2232203-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-2232203-line-45)"> -</text><text class="terminal-2232203-r1" x="0" y="1142.4" textLength="939.4" clip-path="url(#terminal-2232203-line-46)">                        typical linear version progression, such that bumping</text><text class="terminal-2232203-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-2232203-line-46)"> -</text><text class="terminal-2232203-r1" x="0" y="1166.8" textLength="866.2" clip-path="url(#terminal-2232203-line-47)">                        of a pre-release with lower precedence than the</text><text class="terminal-2232203-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-2232203-line-47)"> -</text><text class="terminal-2232203-r1" x="0" y="1191.2" textLength="939.4" clip-path="url(#terminal-2232203-line-48)">                        current pre-release phase maintains the current phase</text><text class="terminal-2232203-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-2232203-line-48)"> -</text><text class="terminal-2232203-r1" x="0" y="1215.6" textLength="561.2" clip-path="url(#terminal-2232203-line-49)">                        of higher precedence. </text><text class="terminal-2232203-r4" x="561.2" y="1215.6" textLength="85.4" clip-path="url(#terminal-2232203-line-49)">'exact'</text><text class="terminal-2232203-r1" x="646.6" y="1215.6" textLength="305" clip-path="url(#terminal-2232203-line-49)"> applies the changes that</text><text class="terminal-2232203-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-2232203-line-49)"> -</text><text class="terminal-2232203-r1" x="0" y="1240" textLength="536.8" clip-path="url(#terminal-2232203-line-50)">                        have been specified </text><text class="terminal-2232203-r2" x="536.8" y="1240" textLength="12.2" clip-path="url(#terminal-2232203-line-50)">(</text><text class="terminal-2232203-r1" x="549" y="1240" textLength="353.8" clip-path="url(#terminal-2232203-line-50)">or determined from the commit</text><text class="terminal-2232203-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-2232203-line-50)"> -</text><text class="terminal-2232203-r1" x="0" y="1264.4" textLength="329.4" clip-path="url(#terminal-2232203-line-51)">                        log</text><text class="terminal-2232203-r2" x="329.4" y="1264.4" textLength="12.2" clip-path="url(#terminal-2232203-line-51)">)</text><text class="terminal-2232203-r1" x="341.6" y="1264.4" textLength="585.6" clip-path="url(#terminal-2232203-line-51)"> without interpretation, such that the increment</text><text class="terminal-2232203-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-2232203-line-51)"> -</text><text class="terminal-2232203-r1" x="0" y="1288.8" textLength="707.6" clip-path="url(#terminal-2232203-line-52)">                        and pre-release are always honored</text><text class="terminal-2232203-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-2232203-line-52)"> -</text><text class="terminal-2232203-r1" x="0" y="1313.2" textLength="317.2" clip-path="url(#terminal-2232203-line-53)">  --check-consistency, -cc</text><text class="terminal-2232203-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-2232203-line-53)"> -</text><text class="terminal-2232203-r1" x="0" y="1337.6" textLength="951.6" clip-path="url(#terminal-2232203-line-54)">                        check consistency among versions defined in commitizen</text><text class="terminal-2232203-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-2232203-line-54)"> -</text><text class="terminal-2232203-r1" x="0" y="1362" textLength="671" clip-path="url(#terminal-2232203-line-55)">                        configuration and version_files</text><text class="terminal-2232203-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-2232203-line-55)"> -</text><text class="terminal-2232203-r1" x="0" y="1386.4" textLength="866.2" clip-path="url(#terminal-2232203-line-56)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-2232203-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-2232203-line-56)"> -</text><text class="terminal-2232203-r1" x="0" y="1410.8" textLength="915" clip-path="url(#terminal-2232203-line-57)">  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-2232203-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-2232203-line-57)"> -</text><text class="terminal-2232203-r1" x="0" y="1435.2" textLength="634.4" clip-path="url(#terminal-2232203-line-58)">                        create annotated tag message</text><text class="terminal-2232203-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-2232203-line-58)"> -</text><text class="terminal-2232203-r1" x="0" y="1459.6" textLength="719.8" clip-path="url(#terminal-2232203-line-59)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-2232203-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-2232203-line-59)"> -</text><text class="terminal-2232203-r1" x="0" y="1484" textLength="280.6" clip-path="url(#terminal-2232203-line-60)">  --changelog-to-stdout</text><text class="terminal-2232203-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-2232203-line-60)"> -</text><text class="terminal-2232203-r1" x="0" y="1508.4" textLength="658.8" clip-path="url(#terminal-2232203-line-61)">                        Output changelog to the stdout</text><text class="terminal-2232203-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-2232203-line-61)"> -</text><text class="terminal-2232203-r1" x="0" y="1532.8" textLength="292.8" clip-path="url(#terminal-2232203-line-62)">  --git-output-to-stderr</text><text class="terminal-2232203-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-2232203-line-62)"> -</text><text class="terminal-2232203-r1" x="0" y="1557.2" textLength="646.6" clip-path="url(#terminal-2232203-line-63)">                        Redirect git output to stderr</text><text class="terminal-2232203-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-2232203-line-63)"> -</text><text class="terminal-2232203-r1" x="0" y="1581.6" textLength="744.2" clip-path="url(#terminal-2232203-line-64)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-2232203-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-2232203-line-64)"> -</text><text class="terminal-2232203-r1" x="0" y="1606" textLength="939.4" clip-path="url(#terminal-2232203-line-65)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-2232203-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-2232203-line-65)"> -</text><text class="terminal-2232203-r1" x="0" y="1630.4" textLength="414.8" clip-path="url(#terminal-2232203-line-66)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-2232203-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-2232203-line-66)"> -</text><text class="terminal-2232203-r1" x="0" y="1654.8" textLength="646.6" clip-path="url(#terminal-2232203-line-67)">                        changelog template file name </text><text class="terminal-2232203-r2" x="646.6" y="1654.8" textLength="12.2" clip-path="url(#terminal-2232203-line-67)">(</text><text class="terminal-2232203-r1" x="658.8" y="1654.8" textLength="280.6" clip-path="url(#terminal-2232203-line-67)">relative to the current</text><text class="terminal-2232203-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-2232203-line-67)"> -</text><text class="terminal-2232203-r1" x="0" y="1679.2" textLength="500.2" clip-path="url(#terminal-2232203-line-68)">                        working directory</text><text class="terminal-2232203-r2" x="500.2" y="1679.2" textLength="12.2" clip-path="url(#terminal-2232203-line-68)">)</text><text class="terminal-2232203-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-2232203-line-68)"> -</text><text class="terminal-2232203-r1" x="0" y="1703.6" textLength="305" clip-path="url(#terminal-2232203-line-69)">  --extra EXTRA, -e EXTRA</text><text class="terminal-2232203-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-2232203-line-69)"> -</text><text class="terminal-2232203-r1" x="0" y="1728" textLength="622.2" clip-path="url(#terminal-2232203-line-70)">                        a changelog extra variable </text><text class="terminal-2232203-r2" x="622.2" y="1728" textLength="12.2" clip-path="url(#terminal-2232203-line-70)">(</text><text class="terminal-2232203-r1" x="634.4" y="1728" textLength="146.4" clip-path="url(#terminal-2232203-line-70)">in the form </text><text class="terminal-2232203-r4" x="780.8" y="1728" textLength="12.2" clip-path="url(#terminal-2232203-line-70)">'</text><text class="terminal-2232203-r4" x="793" y="1728" textLength="36.6" clip-path="url(#terminal-2232203-line-70)">key</text><text class="terminal-2232203-r4" x="829.6" y="1728" textLength="12.2" clip-path="url(#terminal-2232203-line-70)">=</text><text class="terminal-2232203-r4" x="841.8" y="1728" textLength="61" clip-path="url(#terminal-2232203-line-70)">value</text><text class="terminal-2232203-r4" x="902.8" y="1728" textLength="12.2" clip-path="url(#terminal-2232203-line-70)">'</text><text class="terminal-2232203-r2" x="915" y="1728" textLength="12.2" clip-path="url(#terminal-2232203-line-70)">)</text><text class="terminal-2232203-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-2232203-line-70)"> -</text><text class="terminal-2232203-r1" x="0" y="1752.4" textLength="280.6" clip-path="url(#terminal-2232203-line-71)">  --file-name FILE_NAME</text><text class="terminal-2232203-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-2232203-line-71)"> -</text><text class="terminal-2232203-r1" x="0" y="1776.8" textLength="573.4" clip-path="url(#terminal-2232203-line-72)">                        file name of changelog </text><text class="terminal-2232203-r2" x="573.4" y="1776.8" textLength="12.2" clip-path="url(#terminal-2232203-line-72)">(</text><text class="terminal-2232203-r1" x="585.6" y="1776.8" textLength="109.8" clip-path="url(#terminal-2232203-line-72)">default: </text><text class="terminal-2232203-r4" x="695.4" y="1776.8" textLength="170.8" clip-path="url(#terminal-2232203-line-72)">'CHANGELOG.md'</text><text class="terminal-2232203-r2" x="866.2" y="1776.8" textLength="12.2" clip-path="url(#terminal-2232203-line-72)">)</text><text class="terminal-2232203-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-2232203-line-72)"> -</text><text class="terminal-2232203-r1" x="0" y="1801.2" textLength="475.8" clip-path="url(#terminal-2232203-line-73)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-2232203-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-2232203-line-73)"> -</text><text class="terminal-2232203-r1" x="0" y="1825.6" textLength="719.8" clip-path="url(#terminal-2232203-line-74)">                        start pre-releases with this offset</text><text class="terminal-2232203-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-2232203-line-74)"> -</text><text class="terminal-2232203-r1" x="0" y="1850" textLength="231.8" clip-path="url(#terminal-2232203-line-75)">  --version-scheme </text><text class="terminal-2232203-r2" x="231.8" y="1850" textLength="12.2" clip-path="url(#terminal-2232203-line-75)">{</text><text class="terminal-2232203-r1" x="244" y="1850" textLength="256.2" clip-path="url(#terminal-2232203-line-75)">pep440,semver,semver2</text><text class="terminal-2232203-r2" x="500.2" y="1850" textLength="12.2" clip-path="url(#terminal-2232203-line-75)">}</text><text class="terminal-2232203-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-2232203-line-75)"> -</text><text class="terminal-2232203-r1" x="0" y="1874.4" textLength="549" clip-path="url(#terminal-2232203-line-76)">                        choose version scheme</text><text class="terminal-2232203-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-2232203-line-76)"> -</text><text class="terminal-2232203-r1" x="0" y="1898.8" textLength="207.4" clip-path="url(#terminal-2232203-line-77)">  --version-type </text><text class="terminal-2232203-r2" x="207.4" y="1898.8" textLength="12.2" clip-path="url(#terminal-2232203-line-77)">{</text><text class="terminal-2232203-r1" x="219.6" y="1898.8" textLength="256.2" clip-path="url(#terminal-2232203-line-77)">pep440,semver,semver2</text><text class="terminal-2232203-r2" x="475.8" y="1898.8" textLength="12.2" clip-path="url(#terminal-2232203-line-77)">}</text><text class="terminal-2232203-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-2232203-line-77)"> -</text><text class="terminal-2232203-r1" x="0" y="1923.2" textLength="683.2" clip-path="url(#terminal-2232203-line-78)">                        Deprecated, use --version-scheme</text><text class="terminal-2232203-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-2232203-line-78)"> -</text><text class="terminal-2232203-r1" x="0" y="1947.6" textLength="402.6" clip-path="url(#terminal-2232203-line-79)">  --build-metadata BUILD_METADATA</text><text class="terminal-2232203-r1" x="976" y="1947.6" textLength="12.2" clip-path="url(#terminal-2232203-line-79)"> -</text><text class="terminal-2232203-r1" x="0" y="1972" textLength="915" clip-path="url(#terminal-2232203-line-80)">                        Add additional build-metadata to the version-number</text><text class="terminal-2232203-r1" x="976" y="1972" textLength="12.2" clip-path="url(#terminal-2232203-line-80)"> -</text><text class="terminal-2232203-r1" x="0" y="1996.4" textLength="854" clip-path="url(#terminal-2232203-line-81)">  --get-next            Determine the next version and write to stdout</text><text class="terminal-2232203-r1" x="976" y="1996.4" textLength="12.2" clip-path="url(#terminal-2232203-line-81)"> -</text><text class="terminal-2232203-r1" x="0" y="2020.8" textLength="744.2" clip-path="url(#terminal-2232203-line-82)">  --allow-no-commit     bump version without eligible commits</text><text class="terminal-2232203-r1" x="976" y="2020.8" textLength="12.2" clip-path="url(#terminal-2232203-line-82)"> -</text><text class="terminal-2232203-r1" x="976" y="2045.2" textLength="12.2" clip-path="url(#terminal-2232203-line-83)"> + <g class="terminal-243650528-matrix"> + <text class="terminal-243650528-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-243650528-line-0)">$ cz bump --help</text><text class="terminal-243650528-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-243650528-line-0)"> +</text><text class="terminal-243650528-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-243650528-line-1)">usage: cz bump </text><text class="terminal-243650528-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">[</text><text class="terminal-243650528-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-243650528-line-1)">-h</text><text class="terminal-243650528-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">]</text><text class="terminal-243650528-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">[</text><text class="terminal-243650528-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-243650528-line-1)">--dry-run</text><text class="terminal-243650528-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">]</text><text class="terminal-243650528-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">[</text><text class="terminal-243650528-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-243650528-line-1)">--files-only</text><text class="terminal-243650528-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">]</text><text class="terminal-243650528-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">[</text><text class="terminal-243650528-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-243650528-line-1)">--local-version</text><text class="terminal-243650528-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">]</text><text class="terminal-243650528-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">[</text><text class="terminal-243650528-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-243650528-line-1)">--changelog</text><text class="terminal-243650528-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">]</text><text class="terminal-243650528-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)"> +</text><text class="terminal-243650528-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)">[</text><text class="terminal-243650528-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-243650528-line-2)">--no-verify</text><text class="terminal-243650528-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)">]</text><text class="terminal-243650528-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)">[</text><text class="terminal-243650528-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-243650528-line-2)">--yes</text><text class="terminal-243650528-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)">]</text><text class="terminal-243650528-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)">[</text><text class="terminal-243650528-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-243650528-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-243650528-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)">]</text><text class="terminal-243650528-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)"> +</text><text class="terminal-243650528-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)">[</text><text class="terminal-243650528-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-243650528-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-243650528-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)">]</text><text class="terminal-243650528-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)">[</text><text class="terminal-243650528-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-243650528-line-3)">--prerelease </text><text class="terminal-243650528-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)">{</text><text class="terminal-243650528-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-243650528-line-3)">alpha,beta,rc</text><text class="terminal-243650528-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)">}</text><text class="terminal-243650528-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)">]</text><text class="terminal-243650528-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)"> +</text><text class="terminal-243650528-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)">[</text><text class="terminal-243650528-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-243650528-line-4)">--devrelease DEVRELEASE</text><text class="terminal-243650528-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)">]</text><text class="terminal-243650528-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)">[</text><text class="terminal-243650528-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-243650528-line-4)">--increment </text><text class="terminal-243650528-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)">{</text><text class="terminal-243650528-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-243650528-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-243650528-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)">}</text><text class="terminal-243650528-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)">]</text><text class="terminal-243650528-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)"> +</text><text class="terminal-243650528-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)">[</text><text class="terminal-243650528-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-243650528-line-5)">--increment-mode </text><text class="terminal-243650528-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)">{</text><text class="terminal-243650528-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-243650528-line-5)">linear,exact</text><text class="terminal-243650528-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)">}</text><text class="terminal-243650528-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)">]</text><text class="terminal-243650528-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)">[</text><text class="terminal-243650528-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-243650528-line-5)">--check-consistency</text><text class="terminal-243650528-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)">]</text><text class="terminal-243650528-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)"> +</text><text class="terminal-243650528-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-243650528-line-6)">[</text><text class="terminal-243650528-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-243650528-line-6)">--annotated-tag</text><text class="terminal-243650528-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-243650528-line-6)">]</text><text class="terminal-243650528-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-243650528-line-6)"> +</text><text class="terminal-243650528-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-243650528-line-7)">[</text><text class="terminal-243650528-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-243650528-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-243650528-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-243650528-line-7)">]</text><text class="terminal-243650528-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-243650528-line-7)">[</text><text class="terminal-243650528-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-243650528-line-7)">--gpg-sign</text><text class="terminal-243650528-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-243650528-line-7)">]</text><text class="terminal-243650528-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-243650528-line-7)"> +</text><text class="terminal-243650528-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)">[</text><text class="terminal-243650528-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-243650528-line-8)">--changelog-to-stdout</text><text class="terminal-243650528-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)">]</text><text class="terminal-243650528-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)">[</text><text class="terminal-243650528-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-243650528-line-8)">--git-output-to-stderr</text><text class="terminal-243650528-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)">]</text><text class="terminal-243650528-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)">[</text><text class="terminal-243650528-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-243650528-line-8)">--retry</text><text class="terminal-243650528-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)">]</text><text class="terminal-243650528-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)"> +</text><text class="terminal-243650528-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)">[</text><text class="terminal-243650528-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-243650528-line-9)">--major-version-zero</text><text class="terminal-243650528-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)">]</text><text class="terminal-243650528-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)">[</text><text class="terminal-243650528-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-243650528-line-9)">--template TEMPLATE</text><text class="terminal-243650528-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)">]</text><text class="terminal-243650528-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)">[</text><text class="terminal-243650528-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-243650528-line-9)">--extra EXTRA</text><text class="terminal-243650528-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)">]</text><text class="terminal-243650528-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)"> +</text><text class="terminal-243650528-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-243650528-line-10)">[</text><text class="terminal-243650528-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-243650528-line-10)">--file-name FILE_NAME</text><text class="terminal-243650528-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-243650528-line-10)">]</text><text class="terminal-243650528-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-243650528-line-10)">[</text><text class="terminal-243650528-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-243650528-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-243650528-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-243650528-line-10)">]</text><text class="terminal-243650528-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-243650528-line-10)"> +</text><text class="terminal-243650528-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-243650528-line-11)">[</text><text class="terminal-243650528-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-243650528-line-11)">--version-scheme </text><text class="terminal-243650528-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-243650528-line-11)">{</text><text class="terminal-243650528-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-243650528-line-11)">pep440,semver,semver2</text><text class="terminal-243650528-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-243650528-line-11)">}</text><text class="terminal-243650528-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-243650528-line-11)">]</text><text class="terminal-243650528-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-243650528-line-11)"> +</text><text class="terminal-243650528-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-243650528-line-12)">[</text><text class="terminal-243650528-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-243650528-line-12)">--version-type </text><text class="terminal-243650528-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-243650528-line-12)">{</text><text class="terminal-243650528-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-243650528-line-12)">pep440,semver,semver2</text><text class="terminal-243650528-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-243650528-line-12)">}</text><text class="terminal-243650528-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-243650528-line-12)">]</text><text class="terminal-243650528-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-243650528-line-12)"> +</text><text class="terminal-243650528-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-243650528-line-13)">[</text><text class="terminal-243650528-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-243650528-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-243650528-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-243650528-line-13)">]</text><text class="terminal-243650528-r2" x="597.8" y="337.2" textLength="12.2" clip-path="url(#terminal-243650528-line-13)">[</text><text class="terminal-243650528-r1" x="610" y="337.2" textLength="122" clip-path="url(#terminal-243650528-line-13)">--get-next</text><text class="terminal-243650528-r2" x="732" y="337.2" textLength="12.2" clip-path="url(#terminal-243650528-line-13)">]</text><text class="terminal-243650528-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-243650528-line-13)"> +</text><text class="terminal-243650528-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-243650528-line-14)">[</text><text class="terminal-243650528-r1" x="195.2" y="361.6" textLength="207.4" clip-path="url(#terminal-243650528-line-14)">--allow-no-commit</text><text class="terminal-243650528-r2" x="402.6" y="361.6" textLength="12.2" clip-path="url(#terminal-243650528-line-14)">]</text><text class="terminal-243650528-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-243650528-line-14)"> +</text><text class="terminal-243650528-r2" x="183" y="386" textLength="12.2" clip-path="url(#terminal-243650528-line-15)">[</text><text class="terminal-243650528-r1" x="195.2" y="386" textLength="170.8" clip-path="url(#terminal-243650528-line-15)">MANUAL_VERSION</text><text class="terminal-243650528-r2" x="366" y="386" textLength="12.2" clip-path="url(#terminal-243650528-line-15)">]</text><text class="terminal-243650528-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-243650528-line-15)"> +</text><text class="terminal-243650528-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-243650528-line-16)"> +</text><text class="terminal-243650528-r1" x="0" y="434.8" textLength="512.4" clip-path="url(#terminal-243650528-line-17)">bump semantic version based on the git log</text><text class="terminal-243650528-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-243650528-line-17)"> +</text><text class="terminal-243650528-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-243650528-line-18)"> +</text><text class="terminal-243650528-r1" x="0" y="483.6" textLength="256.2" clip-path="url(#terminal-243650528-line-19)">positional arguments:</text><text class="terminal-243650528-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-243650528-line-19)"> +</text><text class="terminal-243650528-r1" x="0" y="508" textLength="610" clip-path="url(#terminal-243650528-line-20)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-243650528-r2" x="610" y="508" textLength="12.2" clip-path="url(#terminal-243650528-line-20)">(</text><text class="terminal-243650528-r1" x="622.2" y="508" textLength="61" clip-path="url(#terminal-243650528-line-20)">e.g: </text><text class="terminal-243650528-r3" x="683.2" y="508" textLength="36.6" clip-path="url(#terminal-243650528-line-20)">1.5</text><text class="terminal-243650528-r1" x="719.8" y="508" textLength="12.2" clip-path="url(#terminal-243650528-line-20)">.</text><text class="terminal-243650528-r3" x="732" y="508" textLength="12.2" clip-path="url(#terminal-243650528-line-20)">3</text><text class="terminal-243650528-r2" x="744.2" y="508" textLength="12.2" clip-path="url(#terminal-243650528-line-20)">)</text><text class="terminal-243650528-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-243650528-line-20)"> +</text><text class="terminal-243650528-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-243650528-line-21)"> +</text><text class="terminal-243650528-r1" x="0" y="556.8" textLength="97.6" clip-path="url(#terminal-243650528-line-22)">options:</text><text class="terminal-243650528-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-243650528-line-22)"> +</text><text class="terminal-243650528-r1" x="0" y="581.2" textLength="671" clip-path="url(#terminal-243650528-line-23)">  -h, --help            show this help message and exit</text><text class="terminal-243650528-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-243650528-line-23)"> +</text><text class="terminal-243650528-r1" x="0" y="605.6" textLength="915" clip-path="url(#terminal-243650528-line-24)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-243650528-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-243650528-line-24)"> +</text><text class="terminal-243650528-r1" x="0" y="630" textLength="793" clip-path="url(#terminal-243650528-line-25)">  --files-only          bump version in the files from the config</text><text class="terminal-243650528-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-243650528-line-25)"> +</text><text class="terminal-243650528-r1" x="0" y="654.4" textLength="719.8" clip-path="url(#terminal-243650528-line-26)">  --local-version       bump only the local version portion</text><text class="terminal-243650528-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-243650528-line-26)"> +</text><text class="terminal-243650528-r1" x="0" y="678.8" textLength="841.8" clip-path="url(#terminal-243650528-line-27)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-243650528-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-243650528-line-27)"> +</text><text class="terminal-243650528-r1" x="0" y="703.2" textLength="902.8" clip-path="url(#terminal-243650528-line-28)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-243650528-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-243650528-line-28)"> +</text><text class="terminal-243650528-r1" x="0" y="727.6" textLength="353.8" clip-path="url(#terminal-243650528-line-29)">                        hooks</text><text class="terminal-243650528-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-243650528-line-29)"> +</text><text class="terminal-243650528-r1" x="0" y="752" textLength="719.8" clip-path="url(#terminal-243650528-line-30)">  --yes                 accept automatically questions done</text><text class="terminal-243650528-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-243650528-line-30)"> +</text><text class="terminal-243650528-r1" x="0" y="776.4" textLength="305" clip-path="url(#terminal-243650528-line-31)">  --tag-format TAG_FORMAT</text><text class="terminal-243650528-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-243650528-line-31)"> +</text><text class="terminal-243650528-r1" x="0" y="800.8" textLength="939.4" clip-path="url(#terminal-243650528-line-32)">                        the format used to tag the commit and read it, use it</text><text class="terminal-243650528-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-243650528-line-32)"> +</text><text class="terminal-243650528-r1" x="0" y="825.2" textLength="866.2" clip-path="url(#terminal-243650528-line-33)">                        in existing projects, wrap around simple quotes</text><text class="terminal-243650528-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-243650528-line-33)"> +</text><text class="terminal-243650528-r1" x="0" y="849.6" textLength="353.8" clip-path="url(#terminal-243650528-line-34)">  --bump-message BUMP_MESSAGE</text><text class="terminal-243650528-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-243650528-line-34)"> +</text><text class="terminal-243650528-r1" x="0" y="874" textLength="902.8" clip-path="url(#terminal-243650528-line-35)">                        template used to create the release commit, useful</text><text class="terminal-243650528-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-243650528-line-35)"> +</text><text class="terminal-243650528-r1" x="0" y="898.4" textLength="536.8" clip-path="url(#terminal-243650528-line-36)">                        when working with CI</text><text class="terminal-243650528-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-243650528-line-36)"> +</text><text class="terminal-243650528-r1" x="0" y="922.8" textLength="244" clip-path="url(#terminal-243650528-line-37)">  --prerelease, -pr </text><text class="terminal-243650528-r2" x="244" y="922.8" textLength="12.2" clip-path="url(#terminal-243650528-line-37)">{</text><text class="terminal-243650528-r1" x="256.2" y="922.8" textLength="158.6" clip-path="url(#terminal-243650528-line-37)">alpha,beta,rc</text><text class="terminal-243650528-r2" x="414.8" y="922.8" textLength="12.2" clip-path="url(#terminal-243650528-line-37)">}</text><text class="terminal-243650528-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-243650528-line-37)"> +</text><text class="terminal-243650528-r1" x="0" y="947.2" textLength="597.8" clip-path="url(#terminal-243650528-line-38)">                        choose type of prerelease</text><text class="terminal-243650528-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-243650528-line-38)"> +</text><text class="terminal-243650528-r1" x="0" y="971.6" textLength="353.8" clip-path="url(#terminal-243650528-line-39)">  --devrelease, -d DEVRELEASE</text><text class="terminal-243650528-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-243650528-line-39)"> +</text><text class="terminal-243650528-r1" x="0" y="996" textLength="841.8" clip-path="url(#terminal-243650528-line-40)">                        specify non-negative integer for dev. release</text><text class="terminal-243650528-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-243650528-line-40)"> +</text><text class="terminal-243650528-r1" x="0" y="1020.4" textLength="170.8" clip-path="url(#terminal-243650528-line-41)">  --increment </text><text class="terminal-243650528-r2" x="170.8" y="1020.4" textLength="12.2" clip-path="url(#terminal-243650528-line-41)">{</text><text class="terminal-243650528-r1" x="183" y="1020.4" textLength="207.4" clip-path="url(#terminal-243650528-line-41)">MAJOR,MINOR,PATCH</text><text class="terminal-243650528-r2" x="390.4" y="1020.4" textLength="12.2" clip-path="url(#terminal-243650528-line-41)">}</text><text class="terminal-243650528-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-243650528-line-41)"> +</text><text class="terminal-243650528-r1" x="0" y="1044.8" textLength="756.4" clip-path="url(#terminal-243650528-line-42)">                        manually specify the desired increment</text><text class="terminal-243650528-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-243650528-line-42)"> +</text><text class="terminal-243650528-r1" x="0" y="1069.2" textLength="231.8" clip-path="url(#terminal-243650528-line-43)">  --increment-mode </text><text class="terminal-243650528-r2" x="231.8" y="1069.2" textLength="12.2" clip-path="url(#terminal-243650528-line-43)">{</text><text class="terminal-243650528-r1" x="244" y="1069.2" textLength="146.4" clip-path="url(#terminal-243650528-line-43)">linear,exact</text><text class="terminal-243650528-r2" x="390.4" y="1069.2" textLength="12.2" clip-path="url(#terminal-243650528-line-43)">}</text><text class="terminal-243650528-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-243650528-line-43)"> +</text><text class="terminal-243650528-r1" x="0" y="1093.6" textLength="902.8" clip-path="url(#terminal-243650528-line-44)">                        set the method by which the new version is chosen.</text><text class="terminal-243650528-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-243650528-line-44)"> +</text><text class="terminal-243650528-r4" x="292.8" y="1118" textLength="97.6" clip-path="url(#terminal-243650528-line-45)">'linear'</text><text class="terminal-243650528-r2" x="402.6" y="1118" textLength="12.2" clip-path="url(#terminal-243650528-line-45)">(</text><text class="terminal-243650528-r1" x="414.8" y="1118" textLength="85.4" clip-path="url(#terminal-243650528-line-45)">default</text><text class="terminal-243650528-r2" x="500.2" y="1118" textLength="12.2" clip-path="url(#terminal-243650528-line-45)">)</text><text class="terminal-243650528-r1" x="512.4" y="1118" textLength="414.8" clip-path="url(#terminal-243650528-line-45)"> guesses the next version based on</text><text class="terminal-243650528-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-243650528-line-45)"> +</text><text class="terminal-243650528-r1" x="0" y="1142.4" textLength="939.4" clip-path="url(#terminal-243650528-line-46)">                        typical linear version progression, such that bumping</text><text class="terminal-243650528-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-243650528-line-46)"> +</text><text class="terminal-243650528-r1" x="0" y="1166.8" textLength="866.2" clip-path="url(#terminal-243650528-line-47)">                        of a pre-release with lower precedence than the</text><text class="terminal-243650528-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-243650528-line-47)"> +</text><text class="terminal-243650528-r1" x="0" y="1191.2" textLength="939.4" clip-path="url(#terminal-243650528-line-48)">                        current pre-release phase maintains the current phase</text><text class="terminal-243650528-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-243650528-line-48)"> +</text><text class="terminal-243650528-r1" x="0" y="1215.6" textLength="561.2" clip-path="url(#terminal-243650528-line-49)">                        of higher precedence. </text><text class="terminal-243650528-r4" x="561.2" y="1215.6" textLength="85.4" clip-path="url(#terminal-243650528-line-49)">'exact'</text><text class="terminal-243650528-r1" x="646.6" y="1215.6" textLength="305" clip-path="url(#terminal-243650528-line-49)"> applies the changes that</text><text class="terminal-243650528-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-243650528-line-49)"> +</text><text class="terminal-243650528-r1" x="0" y="1240" textLength="536.8" clip-path="url(#terminal-243650528-line-50)">                        have been specified </text><text class="terminal-243650528-r2" x="536.8" y="1240" textLength="12.2" clip-path="url(#terminal-243650528-line-50)">(</text><text class="terminal-243650528-r1" x="549" y="1240" textLength="353.8" clip-path="url(#terminal-243650528-line-50)">or determined from the commit</text><text class="terminal-243650528-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-243650528-line-50)"> +</text><text class="terminal-243650528-r1" x="0" y="1264.4" textLength="329.4" clip-path="url(#terminal-243650528-line-51)">                        log</text><text class="terminal-243650528-r2" x="329.4" y="1264.4" textLength="12.2" clip-path="url(#terminal-243650528-line-51)">)</text><text class="terminal-243650528-r1" x="341.6" y="1264.4" textLength="585.6" clip-path="url(#terminal-243650528-line-51)"> without interpretation, such that the increment</text><text class="terminal-243650528-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-243650528-line-51)"> +</text><text class="terminal-243650528-r1" x="0" y="1288.8" textLength="707.6" clip-path="url(#terminal-243650528-line-52)">                        and pre-release are always honored</text><text class="terminal-243650528-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-243650528-line-52)"> +</text><text class="terminal-243650528-r1" x="0" y="1313.2" textLength="317.2" clip-path="url(#terminal-243650528-line-53)">  --check-consistency, -cc</text><text class="terminal-243650528-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-243650528-line-53)"> +</text><text class="terminal-243650528-r1" x="0" y="1337.6" textLength="951.6" clip-path="url(#terminal-243650528-line-54)">                        check consistency among versions defined in commitizen</text><text class="terminal-243650528-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-243650528-line-54)"> +</text><text class="terminal-243650528-r1" x="0" y="1362" textLength="671" clip-path="url(#terminal-243650528-line-55)">                        configuration and version_files</text><text class="terminal-243650528-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-243650528-line-55)"> +</text><text class="terminal-243650528-r1" x="0" y="1386.4" textLength="866.2" clip-path="url(#terminal-243650528-line-56)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-243650528-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-243650528-line-56)"> +</text><text class="terminal-243650528-r1" x="0" y="1410.8" textLength="646.6" clip-path="url(#terminal-243650528-line-57)">  --annotated-tag-message, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-243650528-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-243650528-line-57)"> +</text><text class="terminal-243650528-r1" x="0" y="1435.2" textLength="634.4" clip-path="url(#terminal-243650528-line-58)">                        create annotated tag message</text><text class="terminal-243650528-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-243650528-line-58)"> +</text><text class="terminal-243650528-r1" x="0" y="1459.6" textLength="719.8" clip-path="url(#terminal-243650528-line-59)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-243650528-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-243650528-line-59)"> +</text><text class="terminal-243650528-r1" x="0" y="1484" textLength="280.6" clip-path="url(#terminal-243650528-line-60)">  --changelog-to-stdout</text><text class="terminal-243650528-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-243650528-line-60)"> +</text><text class="terminal-243650528-r1" x="0" y="1508.4" textLength="658.8" clip-path="url(#terminal-243650528-line-61)">                        Output changelog to the stdout</text><text class="terminal-243650528-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-243650528-line-61)"> +</text><text class="terminal-243650528-r1" x="0" y="1532.8" textLength="292.8" clip-path="url(#terminal-243650528-line-62)">  --git-output-to-stderr</text><text class="terminal-243650528-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-243650528-line-62)"> +</text><text class="terminal-243650528-r1" x="0" y="1557.2" textLength="646.6" clip-path="url(#terminal-243650528-line-63)">                        Redirect git output to stderr</text><text class="terminal-243650528-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-243650528-line-63)"> +</text><text class="terminal-243650528-r1" x="0" y="1581.6" textLength="744.2" clip-path="url(#terminal-243650528-line-64)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-243650528-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-243650528-line-64)"> +</text><text class="terminal-243650528-r1" x="0" y="1606" textLength="939.4" clip-path="url(#terminal-243650528-line-65)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-243650528-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-243650528-line-65)"> +</text><text class="terminal-243650528-r1" x="0" y="1630.4" textLength="305" clip-path="url(#terminal-243650528-line-66)">  --template, -t TEMPLATE</text><text class="terminal-243650528-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-243650528-line-66)"> +</text><text class="terminal-243650528-r1" x="0" y="1654.8" textLength="646.6" clip-path="url(#terminal-243650528-line-67)">                        changelog template file name </text><text class="terminal-243650528-r2" x="646.6" y="1654.8" textLength="12.2" clip-path="url(#terminal-243650528-line-67)">(</text><text class="terminal-243650528-r1" x="658.8" y="1654.8" textLength="280.6" clip-path="url(#terminal-243650528-line-67)">relative to the current</text><text class="terminal-243650528-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-243650528-line-67)"> +</text><text class="terminal-243650528-r1" x="0" y="1679.2" textLength="500.2" clip-path="url(#terminal-243650528-line-68)">                        working directory</text><text class="terminal-243650528-r2" x="500.2" y="1679.2" textLength="12.2" clip-path="url(#terminal-243650528-line-68)">)</text><text class="terminal-243650528-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-243650528-line-68)"> +</text><text class="terminal-243650528-r1" x="0" y="1703.6" textLength="622.2" clip-path="url(#terminal-243650528-line-69)">  --extra, -e EXTRA     a changelog extra variable </text><text class="terminal-243650528-r2" x="622.2" y="1703.6" textLength="12.2" clip-path="url(#terminal-243650528-line-69)">(</text><text class="terminal-243650528-r1" x="634.4" y="1703.6" textLength="146.4" clip-path="url(#terminal-243650528-line-69)">in the form </text><text class="terminal-243650528-r4" x="780.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-243650528-line-69)">'</text><text class="terminal-243650528-r4" x="793" y="1703.6" textLength="36.6" clip-path="url(#terminal-243650528-line-69)">key</text><text class="terminal-243650528-r4" x="829.6" y="1703.6" textLength="12.2" clip-path="url(#terminal-243650528-line-69)">=</text><text class="terminal-243650528-r4" x="841.8" y="1703.6" textLength="61" clip-path="url(#terminal-243650528-line-69)">value</text><text class="terminal-243650528-r4" x="902.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-243650528-line-69)">'</text><text class="terminal-243650528-r2" x="915" y="1703.6" textLength="12.2" clip-path="url(#terminal-243650528-line-69)">)</text><text class="terminal-243650528-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-243650528-line-69)"> +</text><text class="terminal-243650528-r1" x="0" y="1728" textLength="280.6" clip-path="url(#terminal-243650528-line-70)">  --file-name FILE_NAME</text><text class="terminal-243650528-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-243650528-line-70)"> +</text><text class="terminal-243650528-r1" x="0" y="1752.4" textLength="573.4" clip-path="url(#terminal-243650528-line-71)">                        file name of changelog </text><text class="terminal-243650528-r2" x="573.4" y="1752.4" textLength="12.2" clip-path="url(#terminal-243650528-line-71)">(</text><text class="terminal-243650528-r1" x="585.6" y="1752.4" textLength="109.8" clip-path="url(#terminal-243650528-line-71)">default: </text><text class="terminal-243650528-r4" x="695.4" y="1752.4" textLength="170.8" clip-path="url(#terminal-243650528-line-71)">'CHANGELOG.md'</text><text class="terminal-243650528-r2" x="866.2" y="1752.4" textLength="12.2" clip-path="url(#terminal-243650528-line-71)">)</text><text class="terminal-243650528-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-243650528-line-71)"> +</text><text class="terminal-243650528-r1" x="0" y="1776.8" textLength="475.8" clip-path="url(#terminal-243650528-line-72)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-243650528-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-243650528-line-72)"> +</text><text class="terminal-243650528-r1" x="0" y="1801.2" textLength="719.8" clip-path="url(#terminal-243650528-line-73)">                        start pre-releases with this offset</text><text class="terminal-243650528-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-243650528-line-73)"> +</text><text class="terminal-243650528-r1" x="0" y="1825.6" textLength="231.8" clip-path="url(#terminal-243650528-line-74)">  --version-scheme </text><text class="terminal-243650528-r2" x="231.8" y="1825.6" textLength="12.2" clip-path="url(#terminal-243650528-line-74)">{</text><text class="terminal-243650528-r1" x="244" y="1825.6" textLength="256.2" clip-path="url(#terminal-243650528-line-74)">pep440,semver,semver2</text><text class="terminal-243650528-r2" x="500.2" y="1825.6" textLength="12.2" clip-path="url(#terminal-243650528-line-74)">}</text><text class="terminal-243650528-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-243650528-line-74)"> +</text><text class="terminal-243650528-r1" x="0" y="1850" textLength="549" clip-path="url(#terminal-243650528-line-75)">                        choose version scheme</text><text class="terminal-243650528-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-243650528-line-75)"> +</text><text class="terminal-243650528-r1" x="0" y="1874.4" textLength="207.4" clip-path="url(#terminal-243650528-line-76)">  --version-type </text><text class="terminal-243650528-r2" x="207.4" y="1874.4" textLength="12.2" clip-path="url(#terminal-243650528-line-76)">{</text><text class="terminal-243650528-r1" x="219.6" y="1874.4" textLength="256.2" clip-path="url(#terminal-243650528-line-76)">pep440,semver,semver2</text><text class="terminal-243650528-r2" x="475.8" y="1874.4" textLength="12.2" clip-path="url(#terminal-243650528-line-76)">}</text><text class="terminal-243650528-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-243650528-line-76)"> +</text><text class="terminal-243650528-r1" x="0" y="1898.8" textLength="683.2" clip-path="url(#terminal-243650528-line-77)">                        Deprecated, use --version-scheme</text><text class="terminal-243650528-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-243650528-line-77)"> +</text><text class="terminal-243650528-r1" x="0" y="1923.2" textLength="402.6" clip-path="url(#terminal-243650528-line-78)">  --build-metadata BUILD_METADATA</text><text class="terminal-243650528-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-243650528-line-78)"> +</text><text class="terminal-243650528-r1" x="0" y="1947.6" textLength="915" clip-path="url(#terminal-243650528-line-79)">                        Add additional build-metadata to the version-number</text><text class="terminal-243650528-r1" x="976" y="1947.6" textLength="12.2" clip-path="url(#terminal-243650528-line-79)"> +</text><text class="terminal-243650528-r1" x="0" y="1972" textLength="854" clip-path="url(#terminal-243650528-line-80)">  --get-next            Determine the next version and write to stdout</text><text class="terminal-243650528-r1" x="976" y="1972" textLength="12.2" clip-path="url(#terminal-243650528-line-80)"> +</text><text class="terminal-243650528-r1" x="0" y="1996.4" textLength="744.2" clip-path="url(#terminal-243650528-line-81)">  --allow-no-commit     bump version without eligible commits</text><text class="terminal-243650528-r1" x="976" y="1996.4" textLength="12.2" clip-path="url(#terminal-243650528-line-81)"> +</text><text class="terminal-243650528-r1" x="976" y="2020.8" textLength="12.2" clip-path="url(#terminal-243650528-line-82)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_changelog___help.svg b/docs/images/cli_help/cz_changelog___help.svg index 8cb3fcf2fe..1160ccf6cf 100644 --- a/docs/images/cli_help/cz_changelog___help.svg +++ b/docs/images/cli_help/cz_changelog___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 1074.8" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 1050.4" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,206 +19,202 @@ font-weight: 700; } - .terminal-2035912735-matrix { + .terminal-1106739011-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2035912735-title { + .terminal-1106739011-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2035912735-r1 { fill: #c5c8c6 } -.terminal-2035912735-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-2035912735-r3 { fill: #68a0b3;font-weight: bold } -.terminal-2035912735-r4 { fill: #98a84b } + .terminal-1106739011-r1 { fill: #c5c8c6 } +.terminal-1106739011-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-1106739011-r3 { fill: #68a0b3;font-weight: bold } +.terminal-1106739011-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-2035912735-clip-terminal"> - <rect x="0" y="0" width="975.0" height="1023.8" /> + <clipPath id="terminal-1106739011-clip-terminal"> + <rect x="0" y="0" width="975.0" height="999.4" /> </clipPath> - <clipPath id="terminal-2035912735-line-0"> + <clipPath id="terminal-1106739011-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-1"> +<clipPath id="terminal-1106739011-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-2"> +<clipPath id="terminal-1106739011-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-3"> +<clipPath id="terminal-1106739011-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-4"> +<clipPath id="terminal-1106739011-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-5"> +<clipPath id="terminal-1106739011-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-6"> +<clipPath id="terminal-1106739011-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-7"> +<clipPath id="terminal-1106739011-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-8"> +<clipPath id="terminal-1106739011-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-9"> +<clipPath id="terminal-1106739011-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-10"> +<clipPath id="terminal-1106739011-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-11"> +<clipPath id="terminal-1106739011-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-12"> +<clipPath id="terminal-1106739011-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-13"> +<clipPath id="terminal-1106739011-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-14"> +<clipPath id="terminal-1106739011-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-15"> +<clipPath id="terminal-1106739011-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-16"> +<clipPath id="terminal-1106739011-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-17"> +<clipPath id="terminal-1106739011-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-18"> +<clipPath id="terminal-1106739011-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-19"> +<clipPath id="terminal-1106739011-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-20"> +<clipPath id="terminal-1106739011-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-21"> +<clipPath id="terminal-1106739011-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-22"> +<clipPath id="terminal-1106739011-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-23"> +<clipPath id="terminal-1106739011-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-24"> +<clipPath id="terminal-1106739011-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-25"> +<clipPath id="terminal-1106739011-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-26"> +<clipPath id="terminal-1106739011-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-27"> +<clipPath id="terminal-1106739011-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-28"> +<clipPath id="terminal-1106739011-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-29"> +<clipPath id="terminal-1106739011-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-30"> +<clipPath id="terminal-1106739011-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-31"> +<clipPath id="terminal-1106739011-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-32"> +<clipPath id="terminal-1106739011-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-33"> +<clipPath id="terminal-1106739011-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-34"> +<clipPath id="terminal-1106739011-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-35"> +<clipPath id="terminal-1106739011-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-36"> +<clipPath id="terminal-1106739011-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-37"> +<clipPath id="terminal-1106739011-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-38"> +<clipPath id="terminal-1106739011-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-39"> +<clipPath id="terminal-1106739011-line-39"> <rect x="0" y="953.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2035912735-line-40"> - <rect x="0" y="977.5" width="976" height="24.65"/> - </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="1072.8" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="1048.4" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-2035912735-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1106739011-clip-terminal)"> - <g class="terminal-2035912735-matrix"> - <text class="terminal-2035912735-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-2035912735-line-0)">$ cz changelog --help</text><text class="terminal-2035912735-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2035912735-line-0)"> -</text><text class="terminal-2035912735-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-2035912735-line-1)">usage: cz changelog </text><text class="terminal-2035912735-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">[</text><text class="terminal-2035912735-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2035912735-line-1)">-h</text><text class="terminal-2035912735-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">]</text><text class="terminal-2035912735-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">[</text><text class="terminal-2035912735-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-2035912735-line-1)">--dry-run</text><text class="terminal-2035912735-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">]</text><text class="terminal-2035912735-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">[</text><text class="terminal-2035912735-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-2035912735-line-1)">--file-name FILE_NAME</text><text class="terminal-2035912735-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)">]</text><text class="terminal-2035912735-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-1)"> -</text><text class="terminal-2035912735-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">[</text><text class="terminal-2035912735-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-2035912735-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-2035912735-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">]</text><text class="terminal-2035912735-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">[</text><text class="terminal-2035912735-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-2035912735-line-2)">--incremental</text><text class="terminal-2035912735-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)">]</text><text class="terminal-2035912735-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-2)"> -</text><text class="terminal-2035912735-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">[</text><text class="terminal-2035912735-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-2035912735-line-3)">--start-rev START_REV</text><text class="terminal-2035912735-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">]</text><text class="terminal-2035912735-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">[</text><text class="terminal-2035912735-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-2035912735-line-3)">--merge-prerelease</text><text class="terminal-2035912735-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)">]</text><text class="terminal-2035912735-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-3)"> -</text><text class="terminal-2035912735-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">[</text><text class="terminal-2035912735-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-2035912735-line-4)">--version-scheme </text><text class="terminal-2035912735-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">{</text><text class="terminal-2035912735-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-2035912735-line-4)">pep440,semver,semver2</text><text class="terminal-2035912735-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">}</text><text class="terminal-2035912735-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)">]</text><text class="terminal-2035912735-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-4)"> -</text><text class="terminal-2035912735-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">[</text><text class="terminal-2035912735-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-2035912735-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-2035912735-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">]</text><text class="terminal-2035912735-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">[</text><text class="terminal-2035912735-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-2035912735-line-5)">--template TEMPLATE</text><text class="terminal-2035912735-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)">]</text><text class="terminal-2035912735-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2035912735-line-5)"> -</text><text class="terminal-2035912735-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-6)">[</text><text class="terminal-2035912735-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-2035912735-line-6)">--extra EXTRA</text><text class="terminal-2035912735-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-6)">]</text><text class="terminal-2035912735-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-6)"> -</text><text class="terminal-2035912735-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-7)"> -</text><text class="terminal-2035912735-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-8)"> -</text><text class="terminal-2035912735-r1" x="0" y="239.6" textLength="231.8" clip-path="url(#terminal-2035912735-line-9)">generate changelog </text><text class="terminal-2035912735-r2" x="231.8" y="239.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-9)">(</text><text class="terminal-2035912735-r1" x="244" y="239.6" textLength="500.2" clip-path="url(#terminal-2035912735-line-9)">note that it will overwrite existing file</text><text class="terminal-2035912735-r2" x="744.2" y="239.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-9)">)</text><text class="terminal-2035912735-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-9)"> -</text><text class="terminal-2035912735-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2035912735-line-10)"> -</text><text class="terminal-2035912735-r1" x="0" y="288.4" textLength="256.2" clip-path="url(#terminal-2035912735-line-11)">positional arguments:</text><text class="terminal-2035912735-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-11)"> -</text><text class="terminal-2035912735-r1" x="0" y="312.8" textLength="805.2" clip-path="url(#terminal-2035912735-line-12)">  rev_range             generates changelog for the given version </text><text class="terminal-2035912735-r2" x="805.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">(</text><text class="terminal-2035912735-r1" x="817.4" y="312.8" textLength="61" clip-path="url(#terminal-2035912735-line-12)">e.g: </text><text class="terminal-2035912735-r3" x="878.4" y="312.8" textLength="36.6" clip-path="url(#terminal-2035912735-line-12)">1.5</text><text class="terminal-2035912735-r1" x="915" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">.</text><text class="terminal-2035912735-r3" x="927.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">3</text><text class="terminal-2035912735-r2" x="939.4" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)">)</text><text class="terminal-2035912735-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-12)"> -</text><text class="terminal-2035912735-r1" x="0" y="337.2" textLength="500.2" clip-path="url(#terminal-2035912735-line-13)">                        or version range </text><text class="terminal-2035912735-r2" x="500.2" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">(</text><text class="terminal-2035912735-r1" x="512.4" y="337.2" textLength="61" clip-path="url(#terminal-2035912735-line-13)">e.g: </text><text class="terminal-2035912735-r3" x="573.4" y="337.2" textLength="36.6" clip-path="url(#terminal-2035912735-line-13)">1.5</text><text class="terminal-2035912735-r1" x="610" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">.</text><text class="terminal-2035912735-r3" x="622.2" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">3</text><text class="terminal-2035912735-r1" x="634.4" y="337.2" textLength="24.4" clip-path="url(#terminal-2035912735-line-13)">..</text><text class="terminal-2035912735-r3" x="658.8" y="337.2" textLength="36.6" clip-path="url(#terminal-2035912735-line-13)">1.7</text><text class="terminal-2035912735-r1" x="695.4" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">.</text><text class="terminal-2035912735-r3" x="707.6" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">9</text><text class="terminal-2035912735-r2" x="719.8" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)">)</text><text class="terminal-2035912735-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-13)"> -</text><text class="terminal-2035912735-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-14)"> -</text><text class="terminal-2035912735-r1" x="0" y="386" textLength="97.6" clip-path="url(#terminal-2035912735-line-15)">options:</text><text class="terminal-2035912735-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2035912735-line-15)"> -</text><text class="terminal-2035912735-r1" x="0" y="410.4" textLength="671" clip-path="url(#terminal-2035912735-line-16)">  -h, --help            show this help message and exit</text><text class="terminal-2035912735-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-16)"> -</text><text class="terminal-2035912735-r1" x="0" y="434.8" textLength="585.6" clip-path="url(#terminal-2035912735-line-17)">  --dry-run             show changelog to stdout</text><text class="terminal-2035912735-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-17)"> -</text><text class="terminal-2035912735-r1" x="0" y="459.2" textLength="280.6" clip-path="url(#terminal-2035912735-line-18)">  --file-name FILE_NAME</text><text class="terminal-2035912735-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-18)"> -</text><text class="terminal-2035912735-r1" x="0" y="483.6" textLength="573.4" clip-path="url(#terminal-2035912735-line-19)">                        file name of changelog </text><text class="terminal-2035912735-r2" x="573.4" y="483.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-19)">(</text><text class="terminal-2035912735-r1" x="585.6" y="483.6" textLength="109.8" clip-path="url(#terminal-2035912735-line-19)">default: </text><text class="terminal-2035912735-r4" x="695.4" y="483.6" textLength="170.8" clip-path="url(#terminal-2035912735-line-19)">'CHANGELOG.md'</text><text class="terminal-2035912735-r2" x="866.2" y="483.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-19)">)</text><text class="terminal-2035912735-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-19)"> -</text><text class="terminal-2035912735-r1" x="0" y="508" textLength="500.2" clip-path="url(#terminal-2035912735-line-20)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-2035912735-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2035912735-line-20)"> -</text><text class="terminal-2035912735-r1" x="0" y="532.4" textLength="707.6" clip-path="url(#terminal-2035912735-line-21)">                        set the value for the new version </text><text class="terminal-2035912735-r2" x="707.6" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)">(</text><text class="terminal-2035912735-r1" x="719.8" y="532.4" textLength="207.4" clip-path="url(#terminal-2035912735-line-21)">use the tag value</text><text class="terminal-2035912735-r2" x="927.2" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)">)</text><text class="terminal-2035912735-r1" x="939.4" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)">,</text><text class="terminal-2035912735-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-21)"> -</text><text class="terminal-2035912735-r1" x="0" y="556.8" textLength="622.2" clip-path="url(#terminal-2035912735-line-22)">                        instead of using unreleased</text><text class="terminal-2035912735-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-22)"> -</text><text class="terminal-2035912735-r1" x="0" y="581.2" textLength="939.4" clip-path="url(#terminal-2035912735-line-23)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-2035912735-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-23)"> -</text><text class="terminal-2035912735-r1" x="0" y="605.6" textLength="817.4" clip-path="url(#terminal-2035912735-line-24)">                        if the changelog has been manually modified</text><text class="terminal-2035912735-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-24)"> -</text><text class="terminal-2035912735-r1" x="0" y="630" textLength="280.6" clip-path="url(#terminal-2035912735-line-25)">  --start-rev START_REV</text><text class="terminal-2035912735-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2035912735-line-25)"> -</text><text class="terminal-2035912735-r1" x="0" y="654.4" textLength="866.2" clip-path="url(#terminal-2035912735-line-26)">                        start rev of the changelog. If not set, it will</text><text class="terminal-2035912735-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-26)"> -</text><text class="terminal-2035912735-r1" x="0" y="678.8" textLength="695.4" clip-path="url(#terminal-2035912735-line-27)">                        generate changelog from the start</text><text class="terminal-2035912735-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-27)"> -</text><text class="terminal-2035912735-r1" x="0" y="703.2" textLength="915" clip-path="url(#terminal-2035912735-line-28)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-2035912735-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-28)"> -</text><text class="terminal-2035912735-r1" x="0" y="727.6" textLength="951.6" clip-path="url(#terminal-2035912735-line-29)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-2035912735-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-29)"> -</text><text class="terminal-2035912735-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-2035912735-line-30)">                        the changelog</text><text class="terminal-2035912735-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-2035912735-line-30)"> -</text><text class="terminal-2035912735-r1" x="0" y="776.4" textLength="231.8" clip-path="url(#terminal-2035912735-line-31)">  --version-scheme </text><text class="terminal-2035912735-r2" x="231.8" y="776.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-31)">{</text><text class="terminal-2035912735-r1" x="244" y="776.4" textLength="256.2" clip-path="url(#terminal-2035912735-line-31)">pep440,semver,semver2</text><text class="terminal-2035912735-r2" x="500.2" y="776.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-31)">}</text><text class="terminal-2035912735-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-31)"> -</text><text class="terminal-2035912735-r1" x="0" y="800.8" textLength="549" clip-path="url(#terminal-2035912735-line-32)">                        choose version scheme</text><text class="terminal-2035912735-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-32)"> -</text><text class="terminal-2035912735-r1" x="0" y="825.2" textLength="427" clip-path="url(#terminal-2035912735-line-33)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-2035912735-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-33)"> -</text><text class="terminal-2035912735-r1" x="0" y="849.6" textLength="927.2" clip-path="url(#terminal-2035912735-line-34)">                        Export the changelog template into this file instead</text><text class="terminal-2035912735-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-34)"> -</text><text class="terminal-2035912735-r1" x="0" y="874" textLength="475.8" clip-path="url(#terminal-2035912735-line-35)">                        of rendering it</text><text class="terminal-2035912735-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-2035912735-line-35)"> -</text><text class="terminal-2035912735-r1" x="0" y="898.4" textLength="414.8" clip-path="url(#terminal-2035912735-line-36)">  --template TEMPLATE, -t TEMPLATE</text><text class="terminal-2035912735-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-36)"> -</text><text class="terminal-2035912735-r1" x="0" y="922.8" textLength="646.6" clip-path="url(#terminal-2035912735-line-37)">                        changelog template file name </text><text class="terminal-2035912735-r2" x="646.6" y="922.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-37)">(</text><text class="terminal-2035912735-r1" x="658.8" y="922.8" textLength="280.6" clip-path="url(#terminal-2035912735-line-37)">relative to the current</text><text class="terminal-2035912735-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-2035912735-line-37)"> -</text><text class="terminal-2035912735-r1" x="0" y="947.2" textLength="500.2" clip-path="url(#terminal-2035912735-line-38)">                        working directory</text><text class="terminal-2035912735-r2" x="500.2" y="947.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-38)">)</text><text class="terminal-2035912735-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-2035912735-line-38)"> -</text><text class="terminal-2035912735-r1" x="0" y="971.6" textLength="305" clip-path="url(#terminal-2035912735-line-39)">  --extra EXTRA, -e EXTRA</text><text class="terminal-2035912735-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-2035912735-line-39)"> -</text><text class="terminal-2035912735-r1" x="0" y="996" textLength="622.2" clip-path="url(#terminal-2035912735-line-40)">                        a changelog extra variable </text><text class="terminal-2035912735-r2" x="622.2" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">(</text><text class="terminal-2035912735-r1" x="634.4" y="996" textLength="146.4" clip-path="url(#terminal-2035912735-line-40)">in the form </text><text class="terminal-2035912735-r4" x="780.8" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">'</text><text class="terminal-2035912735-r4" x="793" y="996" textLength="36.6" clip-path="url(#terminal-2035912735-line-40)">key</text><text class="terminal-2035912735-r4" x="829.6" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">=</text><text class="terminal-2035912735-r4" x="841.8" y="996" textLength="61" clip-path="url(#terminal-2035912735-line-40)">value</text><text class="terminal-2035912735-r4" x="902.8" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">'</text><text class="terminal-2035912735-r2" x="915" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)">)</text><text class="terminal-2035912735-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-2035912735-line-40)"> -</text><text class="terminal-2035912735-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-2035912735-line-41)"> + <g class="terminal-1106739011-matrix"> + <text class="terminal-1106739011-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-1106739011-line-0)">$ cz changelog --help</text><text class="terminal-1106739011-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1106739011-line-0)"> +</text><text class="terminal-1106739011-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-1106739011-line-1)">usage: cz changelog </text><text class="terminal-1106739011-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">[</text><text class="terminal-1106739011-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-1106739011-line-1)">-h</text><text class="terminal-1106739011-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">]</text><text class="terminal-1106739011-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">[</text><text class="terminal-1106739011-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-1106739011-line-1)">--dry-run</text><text class="terminal-1106739011-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">]</text><text class="terminal-1106739011-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">[</text><text class="terminal-1106739011-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-1106739011-line-1)">--file-name FILE_NAME</text><text class="terminal-1106739011-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">]</text><text class="terminal-1106739011-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)"> +</text><text class="terminal-1106739011-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">[</text><text class="terminal-1106739011-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-1106739011-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-1106739011-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">]</text><text class="terminal-1106739011-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">[</text><text class="terminal-1106739011-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-1106739011-line-2)">--incremental</text><text class="terminal-1106739011-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">]</text><text class="terminal-1106739011-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)"> +</text><text class="terminal-1106739011-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">[</text><text class="terminal-1106739011-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-1106739011-line-3)">--start-rev START_REV</text><text class="terminal-1106739011-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">]</text><text class="terminal-1106739011-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">[</text><text class="terminal-1106739011-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-1106739011-line-3)">--merge-prerelease</text><text class="terminal-1106739011-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">]</text><text class="terminal-1106739011-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)"> +</text><text class="terminal-1106739011-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">[</text><text class="terminal-1106739011-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-1106739011-line-4)">--version-scheme </text><text class="terminal-1106739011-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">{</text><text class="terminal-1106739011-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-1106739011-line-4)">pep440,semver,semver2</text><text class="terminal-1106739011-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">}</text><text class="terminal-1106739011-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">]</text><text class="terminal-1106739011-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)"> +</text><text class="terminal-1106739011-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">[</text><text class="terminal-1106739011-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-1106739011-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-1106739011-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">]</text><text class="terminal-1106739011-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">[</text><text class="terminal-1106739011-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-1106739011-line-5)">--template TEMPLATE</text><text class="terminal-1106739011-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">]</text><text class="terminal-1106739011-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)"> +</text><text class="terminal-1106739011-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-6)">[</text><text class="terminal-1106739011-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-1106739011-line-6)">--extra EXTRA</text><text class="terminal-1106739011-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-6)">]</text><text class="terminal-1106739011-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-6)"> +</text><text class="terminal-1106739011-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-7)"> +</text><text class="terminal-1106739011-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-8)"> +</text><text class="terminal-1106739011-r1" x="0" y="239.6" textLength="231.8" clip-path="url(#terminal-1106739011-line-9)">generate changelog </text><text class="terminal-1106739011-r2" x="231.8" y="239.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-9)">(</text><text class="terminal-1106739011-r1" x="244" y="239.6" textLength="500.2" clip-path="url(#terminal-1106739011-line-9)">note that it will overwrite existing file</text><text class="terminal-1106739011-r2" x="744.2" y="239.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-9)">)</text><text class="terminal-1106739011-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-9)"> +</text><text class="terminal-1106739011-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1106739011-line-10)"> +</text><text class="terminal-1106739011-r1" x="0" y="288.4" textLength="256.2" clip-path="url(#terminal-1106739011-line-11)">positional arguments:</text><text class="terminal-1106739011-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-11)"> +</text><text class="terminal-1106739011-r1" x="0" y="312.8" textLength="805.2" clip-path="url(#terminal-1106739011-line-12)">  rev_range             generates changelog for the given version </text><text class="terminal-1106739011-r2" x="805.2" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">(</text><text class="terminal-1106739011-r1" x="817.4" y="312.8" textLength="61" clip-path="url(#terminal-1106739011-line-12)">e.g: </text><text class="terminal-1106739011-r3" x="878.4" y="312.8" textLength="36.6" clip-path="url(#terminal-1106739011-line-12)">1.5</text><text class="terminal-1106739011-r1" x="915" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">.</text><text class="terminal-1106739011-r3" x="927.2" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">3</text><text class="terminal-1106739011-r2" x="939.4" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">)</text><text class="terminal-1106739011-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)"> +</text><text class="terminal-1106739011-r1" x="0" y="337.2" textLength="500.2" clip-path="url(#terminal-1106739011-line-13)">                        or version range </text><text class="terminal-1106739011-r2" x="500.2" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">(</text><text class="terminal-1106739011-r1" x="512.4" y="337.2" textLength="61" clip-path="url(#terminal-1106739011-line-13)">e.g: </text><text class="terminal-1106739011-r3" x="573.4" y="337.2" textLength="36.6" clip-path="url(#terminal-1106739011-line-13)">1.5</text><text class="terminal-1106739011-r1" x="610" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">.</text><text class="terminal-1106739011-r3" x="622.2" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">3</text><text class="terminal-1106739011-r1" x="634.4" y="337.2" textLength="24.4" clip-path="url(#terminal-1106739011-line-13)">..</text><text class="terminal-1106739011-r3" x="658.8" y="337.2" textLength="36.6" clip-path="url(#terminal-1106739011-line-13)">1.7</text><text class="terminal-1106739011-r1" x="695.4" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">.</text><text class="terminal-1106739011-r3" x="707.6" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">9</text><text class="terminal-1106739011-r2" x="719.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">)</text><text class="terminal-1106739011-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)"> +</text><text class="terminal-1106739011-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-14)"> +</text><text class="terminal-1106739011-r1" x="0" y="386" textLength="97.6" clip-path="url(#terminal-1106739011-line-15)">options:</text><text class="terminal-1106739011-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1106739011-line-15)"> +</text><text class="terminal-1106739011-r1" x="0" y="410.4" textLength="671" clip-path="url(#terminal-1106739011-line-16)">  -h, --help            show this help message and exit</text><text class="terminal-1106739011-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-16)"> +</text><text class="terminal-1106739011-r1" x="0" y="434.8" textLength="585.6" clip-path="url(#terminal-1106739011-line-17)">  --dry-run             show changelog to stdout</text><text class="terminal-1106739011-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-17)"> +</text><text class="terminal-1106739011-r1" x="0" y="459.2" textLength="280.6" clip-path="url(#terminal-1106739011-line-18)">  --file-name FILE_NAME</text><text class="terminal-1106739011-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-18)"> +</text><text class="terminal-1106739011-r1" x="0" y="483.6" textLength="573.4" clip-path="url(#terminal-1106739011-line-19)">                        file name of changelog </text><text class="terminal-1106739011-r2" x="573.4" y="483.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-19)">(</text><text class="terminal-1106739011-r1" x="585.6" y="483.6" textLength="109.8" clip-path="url(#terminal-1106739011-line-19)">default: </text><text class="terminal-1106739011-r4" x="695.4" y="483.6" textLength="170.8" clip-path="url(#terminal-1106739011-line-19)">'CHANGELOG.md'</text><text class="terminal-1106739011-r2" x="866.2" y="483.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-19)">)</text><text class="terminal-1106739011-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-19)"> +</text><text class="terminal-1106739011-r1" x="0" y="508" textLength="500.2" clip-path="url(#terminal-1106739011-line-20)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-1106739011-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1106739011-line-20)"> +</text><text class="terminal-1106739011-r1" x="0" y="532.4" textLength="707.6" clip-path="url(#terminal-1106739011-line-21)">                        set the value for the new version </text><text class="terminal-1106739011-r2" x="707.6" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)">(</text><text class="terminal-1106739011-r1" x="719.8" y="532.4" textLength="207.4" clip-path="url(#terminal-1106739011-line-21)">use the tag value</text><text class="terminal-1106739011-r2" x="927.2" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)">)</text><text class="terminal-1106739011-r1" x="939.4" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)">,</text><text class="terminal-1106739011-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)"> +</text><text class="terminal-1106739011-r1" x="0" y="556.8" textLength="622.2" clip-path="url(#terminal-1106739011-line-22)">                        instead of using unreleased</text><text class="terminal-1106739011-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-22)"> +</text><text class="terminal-1106739011-r1" x="0" y="581.2" textLength="939.4" clip-path="url(#terminal-1106739011-line-23)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-1106739011-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-23)"> +</text><text class="terminal-1106739011-r1" x="0" y="605.6" textLength="817.4" clip-path="url(#terminal-1106739011-line-24)">                        if the changelog has been manually modified</text><text class="terminal-1106739011-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-24)"> +</text><text class="terminal-1106739011-r1" x="0" y="630" textLength="280.6" clip-path="url(#terminal-1106739011-line-25)">  --start-rev START_REV</text><text class="terminal-1106739011-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1106739011-line-25)"> +</text><text class="terminal-1106739011-r1" x="0" y="654.4" textLength="866.2" clip-path="url(#terminal-1106739011-line-26)">                        start rev of the changelog. If not set, it will</text><text class="terminal-1106739011-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-26)"> +</text><text class="terminal-1106739011-r1" x="0" y="678.8" textLength="695.4" clip-path="url(#terminal-1106739011-line-27)">                        generate changelog from the start</text><text class="terminal-1106739011-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-27)"> +</text><text class="terminal-1106739011-r1" x="0" y="703.2" textLength="915" clip-path="url(#terminal-1106739011-line-28)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-1106739011-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-28)"> +</text><text class="terminal-1106739011-r1" x="0" y="727.6" textLength="951.6" clip-path="url(#terminal-1106739011-line-29)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-1106739011-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-29)"> +</text><text class="terminal-1106739011-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-1106739011-line-30)">                        the changelog</text><text class="terminal-1106739011-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-1106739011-line-30)"> +</text><text class="terminal-1106739011-r1" x="0" y="776.4" textLength="231.8" clip-path="url(#terminal-1106739011-line-31)">  --version-scheme </text><text class="terminal-1106739011-r2" x="231.8" y="776.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-31)">{</text><text class="terminal-1106739011-r1" x="244" y="776.4" textLength="256.2" clip-path="url(#terminal-1106739011-line-31)">pep440,semver,semver2</text><text class="terminal-1106739011-r2" x="500.2" y="776.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-31)">}</text><text class="terminal-1106739011-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-31)"> +</text><text class="terminal-1106739011-r1" x="0" y="800.8" textLength="549" clip-path="url(#terminal-1106739011-line-32)">                        choose version scheme</text><text class="terminal-1106739011-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-32)"> +</text><text class="terminal-1106739011-r1" x="0" y="825.2" textLength="427" clip-path="url(#terminal-1106739011-line-33)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-1106739011-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-33)"> +</text><text class="terminal-1106739011-r1" x="0" y="849.6" textLength="927.2" clip-path="url(#terminal-1106739011-line-34)">                        Export the changelog template into this file instead</text><text class="terminal-1106739011-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-34)"> +</text><text class="terminal-1106739011-r1" x="0" y="874" textLength="475.8" clip-path="url(#terminal-1106739011-line-35)">                        of rendering it</text><text class="terminal-1106739011-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-1106739011-line-35)"> +</text><text class="terminal-1106739011-r1" x="0" y="898.4" textLength="305" clip-path="url(#terminal-1106739011-line-36)">  --template, -t TEMPLATE</text><text class="terminal-1106739011-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-36)"> +</text><text class="terminal-1106739011-r1" x="0" y="922.8" textLength="646.6" clip-path="url(#terminal-1106739011-line-37)">                        changelog template file name </text><text class="terminal-1106739011-r2" x="646.6" y="922.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-37)">(</text><text class="terminal-1106739011-r1" x="658.8" y="922.8" textLength="280.6" clip-path="url(#terminal-1106739011-line-37)">relative to the current</text><text class="terminal-1106739011-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-37)"> +</text><text class="terminal-1106739011-r1" x="0" y="947.2" textLength="500.2" clip-path="url(#terminal-1106739011-line-38)">                        working directory</text><text class="terminal-1106739011-r2" x="500.2" y="947.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-38)">)</text><text class="terminal-1106739011-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-38)"> +</text><text class="terminal-1106739011-r1" x="0" y="971.6" textLength="622.2" clip-path="url(#terminal-1106739011-line-39)">  --extra, -e EXTRA     a changelog extra variable </text><text class="terminal-1106739011-r2" x="622.2" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">(</text><text class="terminal-1106739011-r1" x="634.4" y="971.6" textLength="146.4" clip-path="url(#terminal-1106739011-line-39)">in the form </text><text class="terminal-1106739011-r4" x="780.8" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">'</text><text class="terminal-1106739011-r4" x="793" y="971.6" textLength="36.6" clip-path="url(#terminal-1106739011-line-39)">key</text><text class="terminal-1106739011-r4" x="829.6" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">=</text><text class="terminal-1106739011-r4" x="841.8" y="971.6" textLength="61" clip-path="url(#terminal-1106739011-line-39)">value</text><text class="terminal-1106739011-r4" x="902.8" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">'</text><text class="terminal-1106739011-r2" x="915" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">)</text><text class="terminal-1106739011-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)"> +</text><text class="terminal-1106739011-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-1106739011-line-40)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_check___help.svg b/docs/images/cli_help/cz_check___help.svg index 922a6458a6..690bfec684 100644 --- a/docs/images/cli_help/cz_check___help.svg +++ b/docs/images/cli_help/cz_check___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 733.1999999999999" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 708.8" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,150 +19,146 @@ font-weight: 700; } - .terminal-1820510314-matrix { + .terminal-1360575461-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1820510314-title { + .terminal-1360575461-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1820510314-r1 { fill: #c5c8c6 } -.terminal-1820510314-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-1820510314-r3 { fill: #d0b344 } -.terminal-1820510314-r4 { fill: #68a0b3;font-weight: bold } + .terminal-1360575461-r1 { fill: #c5c8c6 } +.terminal-1360575461-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-1360575461-r3 { fill: #d0b344 } +.terminal-1360575461-r4 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-1820510314-clip-terminal"> - <rect x="0" y="0" width="975.0" height="682.1999999999999" /> + <clipPath id="terminal-1360575461-clip-terminal"> + <rect x="0" y="0" width="975.0" height="657.8" /> </clipPath> - <clipPath id="terminal-1820510314-line-0"> + <clipPath id="terminal-1360575461-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-1"> +<clipPath id="terminal-1360575461-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-2"> +<clipPath id="terminal-1360575461-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-3"> +<clipPath id="terminal-1360575461-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-4"> +<clipPath id="terminal-1360575461-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-5"> +<clipPath id="terminal-1360575461-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-6"> +<clipPath id="terminal-1360575461-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-7"> +<clipPath id="terminal-1360575461-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-8"> +<clipPath id="terminal-1360575461-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-9"> +<clipPath id="terminal-1360575461-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-10"> +<clipPath id="terminal-1360575461-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-11"> +<clipPath id="terminal-1360575461-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-12"> +<clipPath id="terminal-1360575461-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-13"> +<clipPath id="terminal-1360575461-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-14"> +<clipPath id="terminal-1360575461-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-15"> +<clipPath id="terminal-1360575461-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-16"> +<clipPath id="terminal-1360575461-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-17"> +<clipPath id="terminal-1360575461-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-18"> +<clipPath id="terminal-1360575461-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-19"> +<clipPath id="terminal-1360575461-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-20"> +<clipPath id="terminal-1360575461-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-21"> +<clipPath id="terminal-1360575461-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-22"> +<clipPath id="terminal-1360575461-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-23"> +<clipPath id="terminal-1360575461-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-24"> +<clipPath id="terminal-1360575461-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-25"> +<clipPath id="terminal-1360575461-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1820510314-line-26"> - <rect x="0" y="635.9" width="976" height="24.65"/> - </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="731.2" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="706.8" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-1820510314-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1360575461-clip-terminal)"> - <g class="terminal-1820510314-matrix"> - <text class="terminal-1820510314-r1" x="0" y="20" textLength="207.4" clip-path="url(#terminal-1820510314-line-0)">$ cz check --help</text><text class="terminal-1820510314-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1820510314-line-0)"> -</text><text class="terminal-1820510314-r1" x="0" y="44.4" textLength="195.2" clip-path="url(#terminal-1820510314-line-1)">usage: cz check </text><text class="terminal-1820510314-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-1)">[</text><text class="terminal-1820510314-r1" x="207.4" y="44.4" textLength="24.4" clip-path="url(#terminal-1820510314-line-1)">-h</text><text class="terminal-1820510314-r2" x="231.8" y="44.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-1)">]</text><text class="terminal-1820510314-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-1)"> -</text><text class="terminal-1820510314-r2" x="195.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-2)">[</text><text class="terminal-1820510314-r1" x="207.4" y="68.8" textLength="768.6" clip-path="url(#terminal-1820510314-line-2)">--commit-msg-file COMMIT_MSG_FILE | --rev-range REV_RANGE | -m </text><text class="terminal-1820510314-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-2)"> -</text><text class="terminal-1820510314-r1" x="0" y="93.2" textLength="85.4" clip-path="url(#terminal-1820510314-line-3)">MESSAGE</text><text class="terminal-1820510314-r2" x="85.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-3)">]</text><text class="terminal-1820510314-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-3)"> -</text><text class="terminal-1820510314-r2" x="195.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">[</text><text class="terminal-1820510314-r1" x="207.4" y="117.6" textLength="158.6" clip-path="url(#terminal-1820510314-line-4)">--allow-abort</text><text class="terminal-1820510314-r2" x="366" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">]</text><text class="terminal-1820510314-r2" x="390.4" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">[</text><text class="terminal-1820510314-r1" x="402.6" y="117.6" textLength="231.8" clip-path="url(#terminal-1820510314-line-4)">--allowed-prefixes </text><text class="terminal-1820510314-r2" x="634.4" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">[</text><text class="terminal-1820510314-r1" x="646.6" y="117.6" textLength="207.4" clip-path="url(#terminal-1820510314-line-4)">ALLOWED_PREFIXES </text><text class="terminal-1820510314-r3" x="854" y="117.6" textLength="36.6" clip-path="url(#terminal-1820510314-line-4)">...</text><text class="terminal-1820510314-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">]</text><text class="terminal-1820510314-r2" x="902.8" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)">]</text><text class="terminal-1820510314-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-4)"> -</text><text class="terminal-1820510314-r2" x="195.2" y="142" textLength="12.2" clip-path="url(#terminal-1820510314-line-5)">[</text><text class="terminal-1820510314-r1" x="207.4" y="142" textLength="280.6" clip-path="url(#terminal-1820510314-line-5)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-1820510314-r2" x="488" y="142" textLength="12.2" clip-path="url(#terminal-1820510314-line-5)">]</text><text class="terminal-1820510314-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1820510314-line-5)"> -</text><text class="terminal-1820510314-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-6)"> -</text><text class="terminal-1820510314-r1" x="0" y="190.8" textLength="744.2" clip-path="url(#terminal-1820510314-line-7)">validates that a commit message matches the commitizen schema</text><text class="terminal-1820510314-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-7)"> -</text><text class="terminal-1820510314-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-8)"> -</text><text class="terminal-1820510314-r1" x="0" y="239.6" textLength="97.6" clip-path="url(#terminal-1820510314-line-9)">options:</text><text class="terminal-1820510314-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-9)"> -</text><text class="terminal-1820510314-r1" x="0" y="264" textLength="671" clip-path="url(#terminal-1820510314-line-10)">  -h, --help            show this help message and exit</text><text class="terminal-1820510314-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1820510314-line-10)"> -</text><text class="terminal-1820510314-r1" x="0" y="288.4" textLength="427" clip-path="url(#terminal-1820510314-line-11)">  --commit-msg-file COMMIT_MSG_FILE</text><text class="terminal-1820510314-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-11)"> -</text><text class="terminal-1820510314-r1" x="0" y="312.8" textLength="915" clip-path="url(#terminal-1820510314-line-12)">                        ask for the name of the temporal file that contains</text><text class="terminal-1820510314-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-12)"> -</text><text class="terminal-1820510314-r1" x="0" y="337.2" textLength="902.8" clip-path="url(#terminal-1820510314-line-13)">                        the commit message. Using it in a git hook script:</text><text class="terminal-1820510314-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-13)"> -</text><text class="terminal-1820510314-r3" x="292.8" y="361.6" textLength="97.6" clip-path="url(#terminal-1820510314-line-14)">MSG_FILE</text><text class="terminal-1820510314-r1" x="390.4" y="361.6" textLength="24.4" clip-path="url(#terminal-1820510314-line-14)">=$</text><text class="terminal-1820510314-r4" x="414.8" y="361.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-14)">1</text><text class="terminal-1820510314-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-14)"> -</text><text class="terminal-1820510314-r1" x="0" y="386" textLength="280.6" clip-path="url(#terminal-1820510314-line-15)">  --rev-range REV_RANGE</text><text class="terminal-1820510314-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1820510314-line-15)"> -</text><text class="terminal-1820510314-r1" x="0" y="410.4" textLength="854" clip-path="url(#terminal-1820510314-line-16)">                        a range of git rev to check. e.g, master..HEAD</text><text class="terminal-1820510314-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-16)"> -</text><text class="terminal-1820510314-r1" x="0" y="434.8" textLength="378.2" clip-path="url(#terminal-1820510314-line-17)">  -m MESSAGE, --message MESSAGE</text><text class="terminal-1820510314-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-17)"> -</text><text class="terminal-1820510314-r1" x="0" y="459.2" textLength="768.6" clip-path="url(#terminal-1820510314-line-18)">                        commit message that needs to be checked</text><text class="terminal-1820510314-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-18)"> -</text><text class="terminal-1820510314-r1" x="0" y="483.6" textLength="927.2" clip-path="url(#terminal-1820510314-line-19)">  --allow-abort         allow empty commit messages, which typically abort a</text><text class="terminal-1820510314-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-19)"> -</text><text class="terminal-1820510314-r1" x="0" y="508" textLength="366" clip-path="url(#terminal-1820510314-line-20)">                        commit</text><text class="terminal-1820510314-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1820510314-line-20)"> -</text><text class="terminal-1820510314-r1" x="0" y="532.4" textLength="256.2" clip-path="url(#terminal-1820510314-line-21)">  --allowed-prefixes </text><text class="terminal-1820510314-r2" x="256.2" y="532.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-21)">[</text><text class="terminal-1820510314-r1" x="268.4" y="532.4" textLength="207.4" clip-path="url(#terminal-1820510314-line-21)">ALLOWED_PREFIXES </text><text class="terminal-1820510314-r3" x="475.8" y="532.4" textLength="36.6" clip-path="url(#terminal-1820510314-line-21)">...</text><text class="terminal-1820510314-r2" x="512.4" y="532.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-21)">]</text><text class="terminal-1820510314-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-21)"> -</text><text class="terminal-1820510314-r1" x="0" y="556.8" textLength="951.6" clip-path="url(#terminal-1820510314-line-22)">                        allowed commit message prefixes. If the message starts</text><text class="terminal-1820510314-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-22)"> -</text><text class="terminal-1820510314-r1" x="0" y="581.2" textLength="951.6" clip-path="url(#terminal-1820510314-line-23)">                        by one of these prefixes, the message won't be checked</text><text class="terminal-1820510314-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1820510314-line-23)"> -</text><text class="terminal-1820510314-r1" x="0" y="605.6" textLength="500.2" clip-path="url(#terminal-1820510314-line-24)">                        against the regex</text><text class="terminal-1820510314-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1820510314-line-24)"> -</text><text class="terminal-1820510314-r1" x="0" y="630" textLength="854" clip-path="url(#terminal-1820510314-line-25)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-1820510314-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1820510314-line-25)"> -</text><text class="terminal-1820510314-r1" x="0" y="654.4" textLength="732" clip-path="url(#terminal-1820510314-line-26)">                        length limit of the commit message; </text><text class="terminal-1820510314-r4" x="732" y="654.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-26)">0</text><text class="terminal-1820510314-r1" x="744.2" y="654.4" textLength="158.6" clip-path="url(#terminal-1820510314-line-26)"> for no limit</text><text class="terminal-1820510314-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1820510314-line-26)"> -</text><text class="terminal-1820510314-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-1820510314-line-27)"> + <g class="terminal-1360575461-matrix"> + <text class="terminal-1360575461-r1" x="0" y="20" textLength="207.4" clip-path="url(#terminal-1360575461-line-0)">$ cz check --help</text><text class="terminal-1360575461-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1360575461-line-0)"> +</text><text class="terminal-1360575461-r1" x="0" y="44.4" textLength="195.2" clip-path="url(#terminal-1360575461-line-1)">usage: cz check </text><text class="terminal-1360575461-r2" x="195.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-1)">[</text><text class="terminal-1360575461-r1" x="207.4" y="44.4" textLength="24.4" clip-path="url(#terminal-1360575461-line-1)">-h</text><text class="terminal-1360575461-r2" x="231.8" y="44.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-1)">]</text><text class="terminal-1360575461-r2" x="256.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-1)">[</text><text class="terminal-1360575461-r1" x="268.4" y="44.4" textLength="427" clip-path="url(#terminal-1360575461-line-1)">--commit-msg-file COMMIT_MSG_FILE |</text><text class="terminal-1360575461-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-1)"> +</text><text class="terminal-1360575461-r1" x="0" y="68.8" textLength="610" clip-path="url(#terminal-1360575461-line-2)">                --rev-range REV_RANGE | -m MESSAGE</text><text class="terminal-1360575461-r2" x="610" y="68.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-2)">]</text><text class="terminal-1360575461-r2" x="634.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-2)">[</text><text class="terminal-1360575461-r1" x="646.6" y="68.8" textLength="158.6" clip-path="url(#terminal-1360575461-line-2)">--allow-abort</text><text class="terminal-1360575461-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-2)">]</text><text class="terminal-1360575461-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-2)"> +</text><text class="terminal-1360575461-r2" x="195.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)">[</text><text class="terminal-1360575461-r1" x="207.4" y="93.2" textLength="231.8" clip-path="url(#terminal-1360575461-line-3)">--allowed-prefixes </text><text class="terminal-1360575461-r2" x="439.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)">[</text><text class="terminal-1360575461-r1" x="451.4" y="93.2" textLength="207.4" clip-path="url(#terminal-1360575461-line-3)">ALLOWED_PREFIXES </text><text class="terminal-1360575461-r3" x="658.8" y="93.2" textLength="36.6" clip-path="url(#terminal-1360575461-line-3)">...</text><text class="terminal-1360575461-r2" x="695.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)">]</text><text class="terminal-1360575461-r2" x="707.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)">]</text><text class="terminal-1360575461-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-3)"> +</text><text class="terminal-1360575461-r2" x="195.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-4)">[</text><text class="terminal-1360575461-r1" x="207.4" y="117.6" textLength="280.6" clip-path="url(#terminal-1360575461-line-4)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-1360575461-r2" x="488" y="117.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-4)">]</text><text class="terminal-1360575461-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-4)"> +</text><text class="terminal-1360575461-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1360575461-line-5)"> +</text><text class="terminal-1360575461-r1" x="0" y="166.4" textLength="744.2" clip-path="url(#terminal-1360575461-line-6)">validates that a commit message matches the commitizen schema</text><text class="terminal-1360575461-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-6)"> +</text><text class="terminal-1360575461-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-7)"> +</text><text class="terminal-1360575461-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-1360575461-line-8)">options:</text><text class="terminal-1360575461-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-8)"> +</text><text class="terminal-1360575461-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-1360575461-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-1360575461-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-9)"> +</text><text class="terminal-1360575461-r1" x="0" y="264" textLength="427" clip-path="url(#terminal-1360575461-line-10)">  --commit-msg-file COMMIT_MSG_FILE</text><text class="terminal-1360575461-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1360575461-line-10)"> +</text><text class="terminal-1360575461-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-1360575461-line-11)">                        ask for the name of the temporal file that contains</text><text class="terminal-1360575461-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-11)"> +</text><text class="terminal-1360575461-r1" x="0" y="312.8" textLength="902.8" clip-path="url(#terminal-1360575461-line-12)">                        the commit message. Using it in a git hook script:</text><text class="terminal-1360575461-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-12)"> +</text><text class="terminal-1360575461-r3" x="292.8" y="337.2" textLength="97.6" clip-path="url(#terminal-1360575461-line-13)">MSG_FILE</text><text class="terminal-1360575461-r1" x="390.4" y="337.2" textLength="24.4" clip-path="url(#terminal-1360575461-line-13)">=$</text><text class="terminal-1360575461-r4" x="414.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-13)">1</text><text class="terminal-1360575461-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-13)"> +</text><text class="terminal-1360575461-r1" x="0" y="361.6" textLength="280.6" clip-path="url(#terminal-1360575461-line-14)">  --rev-range REV_RANGE</text><text class="terminal-1360575461-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-14)"> +</text><text class="terminal-1360575461-r1" x="0" y="386" textLength="854" clip-path="url(#terminal-1360575461-line-15)">                        a range of git rev to check. e.g, master..HEAD</text><text class="terminal-1360575461-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1360575461-line-15)"> +</text><text class="terminal-1360575461-r1" x="0" y="410.4" textLength="280.6" clip-path="url(#terminal-1360575461-line-16)">  -m, --message MESSAGE</text><text class="terminal-1360575461-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-16)"> +</text><text class="terminal-1360575461-r1" x="0" y="434.8" textLength="768.6" clip-path="url(#terminal-1360575461-line-17)">                        commit message that needs to be checked</text><text class="terminal-1360575461-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-17)"> +</text><text class="terminal-1360575461-r1" x="0" y="459.2" textLength="927.2" clip-path="url(#terminal-1360575461-line-18)">  --allow-abort         allow empty commit messages, which typically abort a</text><text class="terminal-1360575461-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-18)"> +</text><text class="terminal-1360575461-r1" x="0" y="483.6" textLength="366" clip-path="url(#terminal-1360575461-line-19)">                        commit</text><text class="terminal-1360575461-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-19)"> +</text><text class="terminal-1360575461-r1" x="0" y="508" textLength="256.2" clip-path="url(#terminal-1360575461-line-20)">  --allowed-prefixes </text><text class="terminal-1360575461-r2" x="256.2" y="508" textLength="12.2" clip-path="url(#terminal-1360575461-line-20)">[</text><text class="terminal-1360575461-r1" x="268.4" y="508" textLength="207.4" clip-path="url(#terminal-1360575461-line-20)">ALLOWED_PREFIXES </text><text class="terminal-1360575461-r3" x="475.8" y="508" textLength="36.6" clip-path="url(#terminal-1360575461-line-20)">...</text><text class="terminal-1360575461-r2" x="512.4" y="508" textLength="12.2" clip-path="url(#terminal-1360575461-line-20)">]</text><text class="terminal-1360575461-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1360575461-line-20)"> +</text><text class="terminal-1360575461-r1" x="0" y="532.4" textLength="951.6" clip-path="url(#terminal-1360575461-line-21)">                        allowed commit message prefixes. If the message starts</text><text class="terminal-1360575461-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-21)"> +</text><text class="terminal-1360575461-r1" x="0" y="556.8" textLength="951.6" clip-path="url(#terminal-1360575461-line-22)">                        by one of these prefixes, the message won't be checked</text><text class="terminal-1360575461-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1360575461-line-22)"> +</text><text class="terminal-1360575461-r1" x="0" y="581.2" textLength="500.2" clip-path="url(#terminal-1360575461-line-23)">                        against the regex</text><text class="terminal-1360575461-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1360575461-line-23)"> +</text><text class="terminal-1360575461-r1" x="0" y="605.6" textLength="597.8" clip-path="url(#terminal-1360575461-line-24)">  -l, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-1360575461-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1360575461-line-24)"> +</text><text class="terminal-1360575461-r1" x="0" y="630" textLength="732" clip-path="url(#terminal-1360575461-line-25)">                        length limit of the commit message; </text><text class="terminal-1360575461-r4" x="732" y="630" textLength="12.2" clip-path="url(#terminal-1360575461-line-25)">0</text><text class="terminal-1360575461-r1" x="744.2" y="630" textLength="158.6" clip-path="url(#terminal-1360575461-line-25)"> for no limit</text><text class="terminal-1360575461-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1360575461-line-25)"> +</text><text class="terminal-1360575461-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1360575461-line-26)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_commit___help.svg b/docs/images/cli_help/cz_commit___help.svg index 0346c40588..5aea02232f 100644 --- a/docs/images/cli_help/cz_commit___help.svg +++ b/docs/images/cli_help/cz_commit___help.svg @@ -19,95 +19,95 @@ font-weight: 700; } - .terminal-1670560432-matrix { + .terminal-463778956-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1670560432-title { + .terminal-463778956-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1670560432-r1 { fill: #c5c8c6 } -.terminal-1670560432-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-1670560432-r3 { fill: #68a0b3;font-weight: bold } + .terminal-463778956-r1 { fill: #c5c8c6 } +.terminal-463778956-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-463778956-r3 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-1670560432-clip-terminal"> + <clipPath id="terminal-463778956-clip-terminal"> <rect x="0" y="0" width="975.0" height="584.5999999999999" /> </clipPath> - <clipPath id="terminal-1670560432-line-0"> + <clipPath id="terminal-463778956-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-1"> +<clipPath id="terminal-463778956-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-2"> +<clipPath id="terminal-463778956-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-3"> +<clipPath id="terminal-463778956-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-4"> +<clipPath id="terminal-463778956-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-5"> +<clipPath id="terminal-463778956-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-6"> +<clipPath id="terminal-463778956-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-7"> +<clipPath id="terminal-463778956-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-8"> +<clipPath id="terminal-463778956-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-9"> +<clipPath id="terminal-463778956-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-10"> +<clipPath id="terminal-463778956-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-11"> +<clipPath id="terminal-463778956-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-12"> +<clipPath id="terminal-463778956-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-13"> +<clipPath id="terminal-463778956-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-14"> +<clipPath id="terminal-463778956-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-15"> +<clipPath id="terminal-463778956-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-16"> +<clipPath id="terminal-463778956-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-17"> +<clipPath id="terminal-463778956-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-18"> +<clipPath id="terminal-463778956-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-19"> +<clipPath id="terminal-463778956-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-20"> +<clipPath id="terminal-463778956-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-21"> +<clipPath id="terminal-463778956-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1670560432-line-22"> +<clipPath id="terminal-463778956-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> </defs> @@ -119,33 +119,33 @@ <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-1670560432-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-463778956-clip-terminal)"> - <g class="terminal-1670560432-matrix"> - <text class="terminal-1670560432-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-1670560432-line-0)">$ cz commit --help</text><text class="terminal-1670560432-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1670560432-line-0)"> -</text><text class="terminal-1670560432-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-1670560432-line-1)">usage: cz commit </text><text class="terminal-1670560432-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-1670560432-line-1)">-h</text><text class="terminal-1670560432-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-1670560432-line-1)">--retry</text><text class="terminal-1670560432-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-1670560432-line-1)">--no-retry</text><text class="terminal-1670560432-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">[</text><text class="terminal-1670560432-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-1670560432-line-1)">--dry-run</text><text class="terminal-1670560432-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)">]</text><text class="terminal-1670560432-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-1)"> -</text><text class="terminal-1670560432-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-1670560432-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-1670560432-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1670560432-line-2)">-s</text><text class="terminal-1670560432-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1670560432-line-2)">-a</text><text class="terminal-1670560432-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r2" x="768.6" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">[</text><text class="terminal-1670560432-r1" x="780.8" y="68.8" textLength="24.4" clip-path="url(#terminal-1670560432-line-2)">-e</text><text class="terminal-1670560432-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)">]</text><text class="terminal-1670560432-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-2)"> -</text><text class="terminal-1670560432-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">[</text><text class="terminal-1670560432-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-1670560432-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-1670560432-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">]</text><text class="terminal-1670560432-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">[</text><text class="terminal-1670560432-r1" x="536.8" y="93.2" textLength="24.4" clip-path="url(#terminal-1670560432-line-3)">--</text><text class="terminal-1670560432-r2" x="561.2" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)">]</text><text class="terminal-1670560432-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-3)"> -</text><text class="terminal-1670560432-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-4)"> -</text><text class="terminal-1670560432-r1" x="0" y="142" textLength="207.4" clip-path="url(#terminal-1670560432-line-5)">create new commit</text><text class="terminal-1670560432-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1670560432-line-5)"> -</text><text class="terminal-1670560432-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-6)"> -</text><text class="terminal-1670560432-r1" x="0" y="190.8" textLength="97.6" clip-path="url(#terminal-1670560432-line-7)">options:</text><text class="terminal-1670560432-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-7)"> -</text><text class="terminal-1670560432-r1" x="0" y="215.2" textLength="671" clip-path="url(#terminal-1670560432-line-8)">  -h, --help            show this help message and exit</text><text class="terminal-1670560432-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-8)"> -</text><text class="terminal-1670560432-r1" x="0" y="239.6" textLength="500.2" clip-path="url(#terminal-1670560432-line-9)">  --retry               retry last commit</text><text class="terminal-1670560432-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-9)"> -</text><text class="terminal-1670560432-r1" x="0" y="264" textLength="878.4" clip-path="url(#terminal-1670560432-line-10)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-1670560432-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1670560432-line-10)"> -</text><text class="terminal-1670560432-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-1670560432-line-11)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-1670560432-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-11)"> -</text><text class="terminal-1670560432-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-1670560432-line-12)">  --write-message-to-file FILE_PATH</text><text class="terminal-1670560432-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-12)"> -</text><text class="terminal-1670560432-r1" x="0" y="337.2" textLength="780.8" clip-path="url(#terminal-1670560432-line-13)">                        write message to file before committing </text><text class="terminal-1670560432-r2" x="780.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-13)">(</text><text class="terminal-1670560432-r1" x="793" y="337.2" textLength="73.2" clip-path="url(#terminal-1670560432-line-13)">can be</text><text class="terminal-1670560432-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-13)"> -</text><text class="terminal-1670560432-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-1670560432-line-14)">                        combined with --dry-run</text><text class="terminal-1670560432-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-14)">)</text><text class="terminal-1670560432-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-14)"> -</text><text class="terminal-1670560432-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-1670560432-line-15)">  -s, --signoff         sign off the commit</text><text class="terminal-1670560432-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1670560432-line-15)"> -</text><text class="terminal-1670560432-r1" x="0" y="410.4" textLength="902.8" clip-path="url(#terminal-1670560432-line-16)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-1670560432-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-16)"> -</text><text class="terminal-1670560432-r1" x="0" y="434.8" textLength="951.6" clip-path="url(#terminal-1670560432-line-17)">                        have been modified and deleted, but new files you have</text><text class="terminal-1670560432-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-17)"> -</text><text class="terminal-1670560432-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-1670560432-line-18)">                        not told Git about are not affected.</text><text class="terminal-1670560432-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-18)"> -</text><text class="terminal-1670560432-r1" x="0" y="483.6" textLength="793" clip-path="url(#terminal-1670560432-line-19)">  -e, --edit            edit the commit message before committing</text><text class="terminal-1670560432-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1670560432-line-19)"> -</text><text class="terminal-1670560432-r1" x="0" y="508" textLength="854" clip-path="url(#terminal-1670560432-line-20)">  -l MESSAGE_LENGTH_LIMIT, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-1670560432-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1670560432-line-20)"> -</text><text class="terminal-1670560432-r1" x="0" y="532.4" textLength="732" clip-path="url(#terminal-1670560432-line-21)">                        length limit of the commit message; </text><text class="terminal-1670560432-r3" x="732" y="532.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-21)">0</text><text class="terminal-1670560432-r1" x="744.2" y="532.4" textLength="158.6" clip-path="url(#terminal-1670560432-line-21)"> for no limit</text><text class="terminal-1670560432-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1670560432-line-21)"> -</text><text class="terminal-1670560432-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-1670560432-line-22)">  --                    Positional arguments separator </text><text class="terminal-1670560432-r2" x="671" y="556.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-22)">(</text><text class="terminal-1670560432-r1" x="683.2" y="556.8" textLength="134.2" clip-path="url(#terminal-1670560432-line-22)">recommended</text><text class="terminal-1670560432-r2" x="817.4" y="556.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-22)">)</text><text class="terminal-1670560432-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1670560432-line-22)"> -</text><text class="terminal-1670560432-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1670560432-line-23)"> + <g class="terminal-463778956-matrix"> + <text class="terminal-463778956-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-463778956-line-0)">$ cz commit --help</text><text class="terminal-463778956-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-463778956-line-0)"> +</text><text class="terminal-463778956-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-463778956-line-1)">usage: cz commit </text><text class="terminal-463778956-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-463778956-line-1)">-h</text><text class="terminal-463778956-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-463778956-line-1)">--retry</text><text class="terminal-463778956-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-463778956-line-1)">--no-retry</text><text class="terminal-463778956-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-463778956-line-1)">--dry-run</text><text class="terminal-463778956-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)"> +</text><text class="terminal-463778956-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-463778956-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-463778956-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-463778956-line-2)">-s</text><text class="terminal-463778956-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-463778956-line-2)">-a</text><text class="terminal-463778956-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r2" x="768.6" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="780.8" y="68.8" textLength="24.4" clip-path="url(#terminal-463778956-line-2)">-e</text><text class="terminal-463778956-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)"> +</text><text class="terminal-463778956-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">[</text><text class="terminal-463778956-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-463778956-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-463778956-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">]</text><text class="terminal-463778956-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">[</text><text class="terminal-463778956-r1" x="536.8" y="93.2" textLength="24.4" clip-path="url(#terminal-463778956-line-3)">--</text><text class="terminal-463778956-r2" x="561.2" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">]</text><text class="terminal-463778956-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)"> +</text><text class="terminal-463778956-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-463778956-line-4)"> +</text><text class="terminal-463778956-r1" x="0" y="142" textLength="207.4" clip-path="url(#terminal-463778956-line-5)">create new commit</text><text class="terminal-463778956-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-463778956-line-5)"> +</text><text class="terminal-463778956-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-463778956-line-6)"> +</text><text class="terminal-463778956-r1" x="0" y="190.8" textLength="97.6" clip-path="url(#terminal-463778956-line-7)">options:</text><text class="terminal-463778956-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-463778956-line-7)"> +</text><text class="terminal-463778956-r1" x="0" y="215.2" textLength="671" clip-path="url(#terminal-463778956-line-8)">  -h, --help            show this help message and exit</text><text class="terminal-463778956-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-463778956-line-8)"> +</text><text class="terminal-463778956-r1" x="0" y="239.6" textLength="500.2" clip-path="url(#terminal-463778956-line-9)">  --retry               retry last commit</text><text class="terminal-463778956-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-463778956-line-9)"> +</text><text class="terminal-463778956-r1" x="0" y="264" textLength="878.4" clip-path="url(#terminal-463778956-line-10)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-463778956-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-463778956-line-10)"> +</text><text class="terminal-463778956-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-463778956-line-11)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-463778956-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-463778956-line-11)"> +</text><text class="terminal-463778956-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-463778956-line-12)">  --write-message-to-file FILE_PATH</text><text class="terminal-463778956-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-463778956-line-12)"> +</text><text class="terminal-463778956-r1" x="0" y="337.2" textLength="780.8" clip-path="url(#terminal-463778956-line-13)">                        write message to file before committing </text><text class="terminal-463778956-r2" x="780.8" y="337.2" textLength="12.2" clip-path="url(#terminal-463778956-line-13)">(</text><text class="terminal-463778956-r1" x="793" y="337.2" textLength="73.2" clip-path="url(#terminal-463778956-line-13)">can be</text><text class="terminal-463778956-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-463778956-line-13)"> +</text><text class="terminal-463778956-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-463778956-line-14)">                        combined with --dry-run</text><text class="terminal-463778956-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-463778956-line-14)">)</text><text class="terminal-463778956-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-463778956-line-14)"> +</text><text class="terminal-463778956-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-463778956-line-15)">  -s, --signoff         sign off the commit</text><text class="terminal-463778956-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-463778956-line-15)"> +</text><text class="terminal-463778956-r1" x="0" y="410.4" textLength="902.8" clip-path="url(#terminal-463778956-line-16)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-463778956-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-463778956-line-16)"> +</text><text class="terminal-463778956-r1" x="0" y="434.8" textLength="951.6" clip-path="url(#terminal-463778956-line-17)">                        have been modified and deleted, but new files you have</text><text class="terminal-463778956-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-463778956-line-17)"> +</text><text class="terminal-463778956-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-463778956-line-18)">                        not told Git about are not affected.</text><text class="terminal-463778956-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-463778956-line-18)"> +</text><text class="terminal-463778956-r1" x="0" y="483.6" textLength="793" clip-path="url(#terminal-463778956-line-19)">  -e, --edit            edit the commit message before committing</text><text class="terminal-463778956-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-463778956-line-19)"> +</text><text class="terminal-463778956-r1" x="0" y="508" textLength="597.8" clip-path="url(#terminal-463778956-line-20)">  -l, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-463778956-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-463778956-line-20)"> +</text><text class="terminal-463778956-r1" x="0" y="532.4" textLength="732" clip-path="url(#terminal-463778956-line-21)">                        length limit of the commit message; </text><text class="terminal-463778956-r3" x="732" y="532.4" textLength="12.2" clip-path="url(#terminal-463778956-line-21)">0</text><text class="terminal-463778956-r1" x="744.2" y="532.4" textLength="158.6" clip-path="url(#terminal-463778956-line-21)"> for no limit</text><text class="terminal-463778956-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-463778956-line-21)"> +</text><text class="terminal-463778956-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-463778956-line-22)">  --                    Positional arguments separator </text><text class="terminal-463778956-r2" x="671" y="556.8" textLength="12.2" clip-path="url(#terminal-463778956-line-22)">(</text><text class="terminal-463778956-r1" x="683.2" y="556.8" textLength="134.2" clip-path="url(#terminal-463778956-line-22)">recommended</text><text class="terminal-463778956-r2" x="817.4" y="556.8" textLength="12.2" clip-path="url(#terminal-463778956-line-22)">)</text><text class="terminal-463778956-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-463778956-line-22)"> +</text><text class="terminal-463778956-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-463778956-line-23)"> </text> </g> </g> From fe13eba654dbb569dde56848f7ae883b8b63fce7 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Thu, 30 Jan 2025 21:54:40 +0800 Subject: [PATCH 489/685] style(hooks): improve type annotation --- hooks/post-commit.py | 5 +++-- hooks/prepare-commit-msg.py | 26 ++++++++++++-------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/hooks/post-commit.py b/hooks/post-commit.py index 6444e5ca84..c7dea825bd 100755 --- a/hooks/post-commit.py +++ b/hooks/post-commit.py @@ -8,7 +8,7 @@ exit(1) -def post_commit(): +def post_commit() -> None: backup_file = Path(get_backup_file_path()) # remove backup file if it exists @@ -17,4 +17,5 @@ def post_commit(): if __name__ == "__main__": - exit(post_commit()) + post_commit() + exit(0) diff --git a/hooks/prepare-commit-msg.py b/hooks/prepare-commit-msg.py index d1ccf169cf..e666fa673b 100755 --- a/hooks/prepare-commit-msg.py +++ b/hooks/prepare-commit-msg.py @@ -13,22 +13,19 @@ exit(1) -def prepare_commit_msg(commit_msg_file: Path) -> int: +def prepare_commit_msg(commit_msg_file: str) -> int: # check if the commit message needs to be generated using commitizen - if ( - subprocess.run( - [ - "cz", - "check", - "--commit-msg-file", - commit_msg_file, - ], - capture_output=True, - ).returncode - != 0 - ): + exit_code = subprocess.run( + [ + "cz", + "check", + "--commit-msg-file", + commit_msg_file, + ], + capture_output=True, + ).returncode + if exit_code != 0: backup_file = Path(get_backup_file_path()) - if backup_file.is_file(): # confirm if commit message from backup file should be reused answer = input("retry with previous message? [y/N]: ") @@ -54,6 +51,7 @@ def prepare_commit_msg(commit_msg_file: Path) -> int: # write message to backup file shutil.copyfile(commit_msg_file, backup_file) + return 0 if __name__ == "__main__": From b4dc83284dc8c9729032a774a037df1d1f2397d5 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Thu, 30 Jan 2025 21:55:41 +0800 Subject: [PATCH 490/685] docs(hooks): fix missing link --- docs/tutorials/auto_prepare_commit_message.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/auto_prepare_commit_message.md b/docs/tutorials/auto_prepare_commit_message.md index 3011142679..7e8295b7c8 100644 --- a/docs/tutorials/auto_prepare_commit_message.md +++ b/docs/tutorials/auto_prepare_commit_message.md @@ -25,7 +25,7 @@ commitizen and use the generated commit message for the commit. ## Installation -Copy the hooks from [here](https://github.com/commitizen-tools/hooks) into the `.git/hooks` folder and make them +Copy the hooks from [here](https://github.com/commitizen-tools/commitizen/tree/master/hooks) into the `.git/hooks` folder and make them executable by running the following commands from the root of your Git repository: ```bash From 7663adcf36b4bc12ab5a80f85a2c5478db2264d5 Mon Sep 17 00:00:00 2001 From: "Axel H." <noirbizarre@gmail.com> Date: Sat, 8 Feb 2025 00:54:22 +0100 Subject: [PATCH 491/685] ci(poe): use `poethepoet` as script runner for dev and ci and use poetry dependencies groups in ci Fix #724 --- .github/pull_request_template.md | 2 +- .github/workflows/docspublish.yml | 12 ++++--- .github/workflows/pythonpackage.yml | 6 ++-- .github/workflows/pythonpublish.yml | 10 +++--- .pre-commit-config.yaml | 11 +++--- docs/contributing.md | 8 ++--- pyproject.toml | 54 +++++++++++++++++++++++++++++ scripts/format | 10 ------ scripts/publish | 2 -- scripts/test | 10 ------ 10 files changed, 77 insertions(+), 48 deletions(-) delete mode 100755 scripts/format delete mode 100755 scripts/publish delete mode 100755 scripts/test diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 14bee6b434..0064604fba 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -10,7 +10,7 @@ Please fill in the following content to let us know better about this change. ## Checklist - [ ] Add test cases to all the changes you introduce -- [ ] Run `./scripts/format` and `./scripts/test` locally to ensure this change passes linter check and test +- [ ] Run `poetry all` locally to ensure this change passes linter check and test - [ ] Test the changes on the local machine manually - [ ] Update the documentation for the changes diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml index f318b86858..a871d3c379 100644 --- a/.github/workflows/docspublish.yml +++ b/.github/workflows/docspublish.yml @@ -19,12 +19,12 @@ jobs: python-version: "3.x" - name: Install dependencies run: | - python -m pip install -U pip poetry + python -m pip install -U pip poetry poethepoet poetry --version - poetry install + poetry install --only main,script - name: Update CLI screenshots run: | - poetry run python scripts/gen_cli_help_screenshots.py + poetry doc:screenshots - name: Commit and push updated CLI screenshots run: | git config --global user.name "github-actions[bot]" @@ -55,12 +55,14 @@ jobs: python-version: "3.x" - name: Install dependencies run: | - python -m pip install -U mkdocs mkdocs-material + python -m pip install -U pip poetry poethepoet + poetry --version + poetry install --no-root --only documentation - name: Build docs env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - python -m mkdocs build + poetry doc:build - name: Generate Sponsors 💖 uses: JamesIves/github-sponsors-readme-action@v1 with: diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 8df5e54c03..f2363745cb 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -19,14 +19,14 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | - python -m pip install -U pip poetry + python -m pip install -U pip poetry poethepoet poetry --version - poetry install + poetry install --only main,linters,test - name: Run tests and linters run: | git config --global user.email "action@github.com" git config --global user.name "GitHub Action" - SKIP=no-commit-to-branch,commitizen-branch poetry run pre-commit run --all-files --hook-stage pre-push + poetry ci shell: bash - name: Upload coverage to Codecov if: runner.os == 'Linux' diff --git a/.github/workflows/pythonpublish.yml b/.github/workflows/pythonpublish.yml index e3b3aa6f30..dc522bc0fd 100644 --- a/.github/workflows/pythonpublish.yml +++ b/.github/workflows/pythonpublish.yml @@ -19,12 +19,10 @@ jobs: python-version: "3.x" - name: Install dependencies run: | - python -m pip install -U pip poetry mkdocs mkdocs-material + python -m pip install -U pip poetry poetry --version - poetry install - name: Publish env: - PYPI_USERNAME: ${{ secrets.PYPI_USERNAME }} - PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: | - ./scripts/publish + POETRY_HTTP_BASIC_PYPI_USERNAME: ${{ secrets.PYPI_USERNAME }} + POETRY_HTTP_BASIC_PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + run: poetry publish --build diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 470d1f1621..5db6862aeb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,7 +5,6 @@ default_install_hook_types: default_stages: - pre-commit - - pre-push repos: - repo: meta @@ -55,21 +54,19 @@ repos: - id: commitizen-branch stages: - post-commit - - pre-push - repo: local hooks: - id: format - name: format + name: Format language: system pass_filenames: false - entry: ./scripts/format + entry: poetry format types: [ python ] - id: linter and test - name: linter and test + name: Linters language: system pass_filenames: false - stages: [ pre-push ] - entry: ./scripts/test + entry: poetry lint types: [ python ] diff --git a/docs/contributing.md b/docs/contributing.md index 439e3a19f7..0da1707da6 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -16,16 +16,16 @@ If you're a first-time contributor, you can check the issues with [good first is 1. Fork [the repository](https://github.com/commitizen-tools/commitizen). 2. Clone the repository from your GitHub. 3. Setup development environment through [poetry](https://python-poetry.org/) (`poetry install`). -4. Setup [pre-commit](https://pre-commit.com/) hook (`poetry run pre-commit install`) +4. Setup [pre-commit](https://pre-commit.com/) hook (`poetry setup-pre-commit`) 5. Check out a new branch and add your modification. 6. Add test cases for all your changes. (We use [CodeCov](https://codecov.io/) to ensure our test coverage does not drop.) 7. Use [commitizen](https://github.com/commitizen-tools/commitizen) to do git commit. We follow [conventional commits](https://www.conventionalcommits.org/). -8. Run `./scripts/format` and `./scripts/test` to ensure you follow the coding style and the tests pass. -9. Optionally, update the `./docs/README.md` or `docs/images/cli_help` (through running `scripts/gen_cli_help_screenshots.py`). +8. Run `poetry all` to ensure you follow the coding style and the tests pass. +9. Optionally, update the `./docs/README.md` or `docs/images/cli_help` (through running `poetry doc:screenshots`). 9. **Do not** update the `CHANGELOG.md`, it will be automatically created after merging to `master`. 10. **Do not** update the versions in the project, they will be automatically updated. -10. If your changes are about documentation. Run `poetry run mkdocs serve` to serve documentation locally and check whether there is any warning or error. +10. If your changes are about documentation. Run `poetry doc` to serve documentation locally and check whether there is any warning or error. 11. Send a [pull request](https://github.com/commitizen-tools/commitizen/pulls) 🙏 ## Use of GitHub Labels diff --git a/pyproject.toml b/pyproject.toml index 47d83785cd..56131bef5e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -99,6 +99,9 @@ version_scheme = "pep440" [tool.poetry] packages = [{ include = "commitizen" }, { include = "commitizen/py.typed" }] +[tool.poetry.requires-plugins] +"poethepoet" = ">=0.32.2" + [tool.poetry.group.dev.dependencies] ipython = "^8.0" @@ -161,6 +164,9 @@ omit = [ [tool.pytest.ini_options] addopts = "--strict-markers" +testpaths = [ + "tests/", +] [tool.ruff] line-length = 88 @@ -202,3 +208,51 @@ ignore_missing_imports = true skip = '.git*,*.svg,*.lock' check-hidden = true ignore-words-list = 'asend' + +[tool.poe] +poetry_command = "" + +[tool.poe.tasks] +format.help = "Format the code" +format.sequence = [ + {cmd = "ruff check --fix commitizen tests"}, + {cmd = "ruff format commitizen tests"}, +] + +lint.help = "Lint the code" +lint.sequence = [ + {cmd = "ruff check commitizen/ tests/ --fix"}, + {cmd = "mypy commitizen/ tests/"}, +] + +test.help = "Run the test suite" +test.cmd = "pytest -n 3 --dist=loadfile" + +cover.help = "Run the test suite with coverage" +cover.ref = "test --cov-report term-missing --cov-report=xml:coverage.xml --cov=commitizen" + +all.help = "Run all tasks" +all.sequence = [ + "format", + "lint", + "cover", +] + +"doc:screenshots".help = "Render documentation screeenshots" +"doc:screenshots".script = "scripts.gen_cli_help_screenshots:gen_cli_help_screenshots" + +"doc:build".help = "Build the documentation" +"doc:build".cmd = "mkdocs build" + +doc.help = "Live documentation server" +doc.cmd = "mkdocs serve" + +ci.help = "Run all tasks in CI" +ci.sequence = [ + {cmd="pre-commit run --all-files"}, + "cover", +] +ci.env = {SKIP = "no-commit-to-branch"} + +setup-pre-commit.help = "Install pre-commit hooks" +setup-pre-commit.cmd = "pre-commit install" diff --git a/scripts/format b/scripts/format deleted file mode 100755 index 0ffe29ba4f..0000000000 --- a/scripts/format +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env sh -set -e - -export PREFIX="poetry run python -m " - -set -x - -# This is needed for running import sorting -${PREFIX}ruff check --fix commitizen tests -${PREFIX}ruff format commitizen tests diff --git a/scripts/publish b/scripts/publish deleted file mode 100755 index 4d31f1188e..0000000000 --- a/scripts/publish +++ /dev/null @@ -1,2 +0,0 @@ -# Publish to pypi -poetry publish --build -u $PYPI_USERNAME -p $PYPI_PASSWORD diff --git a/scripts/test b/scripts/test deleted file mode 100755 index 894228b41f..0000000000 --- a/scripts/test +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env sh -set -e - -export PREFIX='poetry run python -m ' -export REGEX='^(?![.]|venv).*' - -${PREFIX}pytest -n 3 --dist=loadfile --cov-report term-missing --cov-report=xml:coverage.xml --cov=commitizen tests/ -${PREFIX}ruff check commitizen/ tests/ --fix -${PREFIX}mypy commitizen/ tests/ -${PREFIX}commitizen -nr 3 check --rev-range origin/master.. From 69203030925ccac0202575484b3ef8309b5332ae Mon Sep 17 00:00:00 2001 From: "Axel H." <noirbizarre@gmail.com> Date: Sat, 8 Feb 2025 02:09:32 +0100 Subject: [PATCH 492/685] ci(tox): add `test:all` command to run the test suite on all support Python versions using `tox` --- poetry.lock | 130 +++++++++++++++++++++++++++++++++++++++++++------ pyproject.toml | 15 ++++++ 2 files changed, 131 insertions(+), 14 deletions(-) diff --git a/poetry.lock b/poetry.lock index 723dceddd9..073e1bc247 100644 --- a/poetry.lock +++ b/poetry.lock @@ -49,6 +49,18 @@ files = [ [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] +[[package]] +name = "cachetools" +version = "5.5.1" +description = "Extensible memoizing collections and decorators" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "cachetools-5.5.1-py3-none-any.whl", hash = "sha256:b76651fdc3b24ead3c648bbdeeb940c1b04d365b38b4af66788f9ec4a81d42bb"}, + {file = "cachetools-5.5.1.tar.gz", hash = "sha256:70f238fbba50383ef62e55c6aff6d9673175fe59f7c6782c7a0b9e38f4a9df95"}, +] + [[package]] name = "certifi" version = "2024.8.30" @@ -73,6 +85,18 @@ files = [ {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, ] +[[package]] +name = "chardet" +version = "5.2.0" +description = "Universal encoding detector for Python 3" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, + {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, +] + [[package]] name = "charset-normalizer" version = "3.4.1" @@ -328,7 +352,7 @@ version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" -groups = ["linters"] +groups = ["dev", "linters"] files = [ {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, @@ -386,7 +410,7 @@ version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" -groups = ["linters"] +groups = ["dev", "linters"] files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, @@ -909,7 +933,7 @@ version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" -groups = ["main", "documentation", "test"] +groups = ["main", "dev", "documentation", "test"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -981,7 +1005,7 @@ version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" -groups = ["documentation", "linters"] +groups = ["dev", "documentation", "linters"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -998,7 +1022,7 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" -groups = ["test"] +groups = ["dev", "test"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -1104,6 +1128,26 @@ pyyaml = "*" [package.extras] extra = ["pygments (>=2.12)"] +[[package]] +name = "pyproject-api" +version = "1.9.0" +description = "API to interact with the python pyproject.toml based projects" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pyproject_api-1.9.0-py3-none-any.whl", hash = "sha256:326df9d68dea22d9d98b5243c46e3ca3161b07a1b9b18e213d1e24fd0e605766"}, + {file = "pyproject_api-1.9.0.tar.gz", hash = "sha256:7e8a9854b2dfb49454fae421cb86af43efbb2b2454e5646ffb7623540321ae6e"}, +] + +[package.dependencies] +packaging = ">=24.2" +tomli = {version = ">=2.2.1", markers = "python_version < \"3.11\""} + +[package.extras] +docs = ["furo (>=2024.8.6)", "sphinx-autodoc-typehints (>=3)"] +testing = ["covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "setuptools (>=75.8)"] + [[package]] name = "pytest" version = "8.3.4" @@ -1570,16 +1614,46 @@ tests = ["pytest", "pytest-cov"] [[package]] name = "tomli" -version = "2.1.0" +version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" -groups = ["linters", "test"] -files = [ - {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, - {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, -] -markers = {linters = "python_version < \"3.11\"", test = "python_full_version <= \"3.11.0a6\""} +groups = ["dev", "linters", "test"] +files = [ + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, +] +markers = {dev = "python_version < \"3.11\"", linters = "python_version < \"3.11\"", test = "python_full_version <= \"3.11.0a6\""} [[package]] name = "tomlkit" @@ -1593,6 +1667,34 @@ files = [ {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, ] +[[package]] +name = "tox" +version = "4.24.1" +description = "tox is a generic virtualenv management and test command line tool" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "tox-4.24.1-py3-none-any.whl", hash = "sha256:57ba7df7d199002c6df8c2db9e6484f3de6ca8f42013c083ea2d4d1e5c6bdc75"}, + {file = "tox-4.24.1.tar.gz", hash = "sha256:083a720adbc6166fff0b7d1df9d154f9d00bfccb9403b8abf6bc0ee435d6a62e"}, +] + +[package.dependencies] +cachetools = ">=5.5" +chardet = ">=5.2" +colorama = ">=0.4.6" +filelock = ">=3.16.1" +packaging = ">=24.2" +platformdirs = ">=4.3.6" +pluggy = ">=1.5" +pyproject-api = ">=1.8" +tomli = {version = ">=2.1", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.12.2", markers = "python_version < \"3.11\""} +virtualenv = ">=20.27.1" + +[package.extras] +test = ["devpi-process (>=1.0.2)", "pytest (>=8.3.3)", "pytest-mock (>=3.14)"] + [[package]] name = "traitlets" version = "5.14.3" @@ -1694,7 +1796,7 @@ version = "20.27.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" -groups = ["linters"] +groups = ["dev", "linters"] files = [ {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, @@ -1863,4 +1965,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "83c82b26a9bff591edf995c9c251e52dc23d9a4024562e1218a783ddf151fc20" +content-hash = "b0f8544806163bc0dddc039eb313f9d82119b845b3a19dedc381e9c88e8f4466" diff --git a/pyproject.toml b/pyproject.toml index 56131bef5e..11a3837dac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -104,6 +104,7 @@ packages = [{ include = "commitizen" }, { include = "commitizen/py.typed" }] [tool.poetry.group.dev.dependencies] ipython = "^8.0" +tox = ">4" [tool.poetry.group.test.dependencies] pytest = ">=7.2,<9.0" @@ -168,6 +169,17 @@ testpaths = [ "tests/", ] +[tool.tox] +requires = ["tox>=4.22"] +env_list = ["3.9", "3.10", "3.11", "3.12", "3.13"] + +[tool.tox.env_run_base] +description = "Run tests suite against Python {base_python}" +skip_install = true +deps = ["poetry>=2.0"] +commands_pre = [["poetry", "install", "--only", "main,test"]] +commands = [["pytest", { replace = "posargs", extend = true}]] + [tool.ruff] line-length = 88 @@ -228,6 +240,9 @@ lint.sequence = [ test.help = "Run the test suite" test.cmd = "pytest -n 3 --dist=loadfile" +"test:all".help = "Run the test suite on all supported Python versions" +"test:all".cmd = "tox --parallel" + cover.help = "Run the test suite with coverage" cover.ref = "test --cov-report term-missing --cov-report=xml:coverage.xml --cov=commitizen" From fe3b726268679892b3ce9e1ad08b8ed48b9f2761 Mon Sep 17 00:00:00 2001 From: Carlos Sanchez <carlos@apache.org> Date: Fri, 7 Feb 2025 13:28:01 +0100 Subject: [PATCH 493/685] fix(bump): add debugging to bump command --- commitizen/bump.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/commitizen/bump.py b/commitizen/bump.py index 2351dbd7ec..908899eb0e 100644 --- a/commitizen/bump.py +++ b/commitizen/bump.py @@ -4,6 +4,7 @@ import re from collections import OrderedDict from glob import iglob +from logging import getLogger from string import Template from typing import cast @@ -14,6 +15,8 @@ VERSION_TYPES = [None, PATCH, MINOR, MAJOR] +logger = getLogger("commitizen") + def find_increment( commits: list[GitCommit], regex: str, increments_map: dict | OrderedDict @@ -38,7 +41,15 @@ def find_increment( new_increment = increments_map[match_pattern] break + if new_increment is None: + logger.debug( + f"no increment needed for '{found_keyword}' in '{message}'" + ) + if VERSION_TYPES.index(increment) < VERSION_TYPES.index(new_increment): + logger.debug( + f"increment detected is '{new_increment}' due to '{found_keyword}' in '{message}'" + ) increment = new_increment if increment == MAJOR: From 8519ca470e88f8c7eb30dfe31cad2b0dd8acfea2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sat, 8 Feb 2025 15:24:57 +0000 Subject: [PATCH 494/685] =?UTF-8?q?bump:=20version=204.2.0=20=E2=86=92=204?= =?UTF-8?q?.2.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5db6862aeb..3149a3658f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.2.0 # automatically updated by Commitizen + rev: v4.2.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index e8a573f8ef..ddcf5ff204 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v4.2.1 (2025-02-08) + +### Fix + +- **bump**: add debugging to bump + ## v4.2.0 (2025-02-07) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 0fd7811c0d..aef46acb47 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.2.0" +__version__ = "4.2.1" diff --git a/pyproject.toml b/pyproject.toml index 11a3837dac..a2f9d7923b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.2.0" +version = "4.2.1" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -86,7 +86,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.2.0" +version = "4.2.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", From 43ee8a06b2ff003f45e8975cf9487a802cdf6d89 Mon Sep 17 00:00:00 2001 From: Matheus Cardoso <matheus.mcas@gmail.com> Date: Sun, 9 Feb 2025 14:35:27 -0300 Subject: [PATCH 495/685] docs(tutorials): Add "stages" explicitly to the hook example As mentioned here: https://github.com/commitizen-tools/commitizen/issues/177#issuecomment-621939385, without the stages explicitly set, the hook always fails. --- docs/tutorials/auto_check.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/tutorials/auto_check.md b/docs/tutorials/auto_check.md index ede8759e68..2fce57f9bd 100644 --- a/docs/tutorials/auto_check.md +++ b/docs/tutorials/auto_check.md @@ -25,6 +25,7 @@ repos: rev: v1.17.0 hooks: - id: commitizen + stages: [commit-msg] ``` - Step 3: Install the configuration into git hook through `pre-commit` From 295f9757f42e7f2287fa9608e2a65e59fb821f2b Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Tue, 11 Feb 2025 23:24:09 +0800 Subject: [PATCH 496/685] ci(github-actions): add check-commit task --- pyproject.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index a2f9d7923b..24c3153b45 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -237,6 +237,9 @@ lint.sequence = [ {cmd = "mypy commitizen/ tests/"}, ] +check-commit.help = "Check the commit message" +check-commit.cmd = "cz -nr 3 check --rev-range origin/master.." + test.help = "Run the test suite" test.cmd = "pytest -n 3 --dist=loadfile" @@ -251,6 +254,7 @@ all.sequence = [ "format", "lint", "cover", + "check-commit" ] "doc:screenshots".help = "Render documentation screeenshots" From d831c9995c17e14a8835599fe0405a6fa17d46b2 Mon Sep 17 00:00:00 2001 From: Christian Kagerer <ckagerer@users.noreply.github.com> Date: Mon, 17 Feb 2025 15:32:20 +0100 Subject: [PATCH 497/685] fix(bump): manual version bump if prerelease offset is configured If you use the prerelase offset in the .cz.toml, as in the following example, no bump with a manual version number is possible. The error occurs when bumping with manual version number: cz bump 9.8.7 --prerelease-offset cannot be combined with MANUAL_VERSION ```toml [tool.commitizen] changelog_incremental = true tag_format = "v$version" update_changelog_on_bump = true version = "1.2.0b13" prerelease_offset = 1 ``` --- commitizen/commands/bump.py | 5 ----- docs/commands/bump.md | 2 +- tests/commands/test_bump_command.py | 17 ----------------- 3 files changed, 1 insertion(+), 23 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index b82cac940f..8e9f0f181b 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -187,11 +187,6 @@ def __call__(self) -> None: # noqa: C901 "--major-version-zero cannot be combined with MANUAL_VERSION" ) - if prerelease_offset: - raise NotAllowed( - "--prerelease-offset cannot be combined with MANUAL_VERSION" - ) - if get_next: raise NotAllowed("--get-next cannot be combined with MANUAL_VERSION") diff --git a/docs/commands/bump.md b/docs/commands/bump.md index 49c6f03434..efdba76257 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -599,7 +599,7 @@ post_bump_hooks = [ ### `prerelease_offset` -Offset with which to start counting prereleses. +Offset with which to start counting prereleases. Defaults to: `0` diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 934c0b8179..52e2defde0 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -1041,23 +1041,6 @@ def test_bump_with_hooks_and_increment(mocker: MockFixture, tmp_commitizen_proje assert tag_exists is True -@pytest.mark.usefixtures("tmp_commitizen_project") -def test_bump_manual_version_disallows_prerelease_offset(mocker): - create_file_and_commit("feat: new file") - - manual_version = "0.2.0" - testargs = ["cz", "bump", "--yes", "--prerelease-offset", "42", manual_version] - mocker.patch.object(sys, "argv", testargs) - - with pytest.raises(NotAllowed) as excinfo: - cli.main() - - expected_error_message = ( - "--prerelease-offset cannot be combined with MANUAL_VERSION" - ) - assert expected_error_message in str(excinfo.value) - - @pytest.mark.usefixtures("tmp_git_project") def test_bump_use_version_provider(mocker: MockFixture): mock = mocker.MagicMock(name="provider") From a330ac72b48927d99ea01ade8982236d4aa54f40 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Tue, 18 Feb 2025 13:36:26 +0000 Subject: [PATCH 498/685] =?UTF-8?q?bump:=20version=204.2.1=20=E2=86=92=204?= =?UTF-8?q?.2.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3149a3658f..ba6ec51bae 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.2.1 # automatically updated by Commitizen + rev: v4.2.2 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index ddcf5ff204..5ee93c0430 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v4.2.2 (2025-02-18) + +### Fix + +- **bump**: manual version bump if prerelease offset is configured + ## v4.2.1 (2025-02-08) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index aef46acb47..2e905e44da 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.2.1" +__version__ = "4.2.2" diff --git a/pyproject.toml b/pyproject.toml index 24c3153b45..c63fe4d238 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.2.1" +version = "4.2.2" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -86,7 +86,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.2.1" +version = "4.2.2" tag_format = "v$version" version_files = [ "pyproject.toml:version", From 7805412e33b191504ebfd59c26bc3f2efea082f1 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 31 Jan 2025 22:39:34 +0800 Subject: [PATCH 499/685] feat(providers): add uv_provider closes: #1349 --- commitizen/providers/uv_provider.py | 41 +++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 commitizen/providers/uv_provider.py diff --git a/commitizen/providers/uv_provider.py b/commitizen/providers/uv_provider.py new file mode 100644 index 0000000000..36c8a49ad3 --- /dev/null +++ b/commitizen/providers/uv_provider.py @@ -0,0 +1,41 @@ +from __future__ import annotations + +from pathlib import Path +from typing import TYPE_CHECKING + +import tomlkit + +from commitizen.providers.base_provider import TomlProvider + +if TYPE_CHECKING: + import tomlkit.items + + +class UvProvider(TomlProvider): + """ + uv.lock and pyproject.tom version management + """ + + filename = "pyproject.toml" + lock_filename = "uv.lock" + + @property + def lock_file(self) -> Path: + return Path() / self.lock_filename + + def set_version(self, version: str) -> None: + super().set_version(version) + self.set_lock_version(version) + + def set_lock_version(self, version: str) -> None: + pyproject_toml_content = tomlkit.parse(self.file.read_text()) + project_name = pyproject_toml_content["project"]["name"] # type: ignore[index] + + document = tomlkit.parse(self.lock_file.read_text()) + + packages: tomlkit.items.AoT = document["package"] # type: ignore[assignment] + for i, package in enumerate(packages): + if package["name"] == project_name: + document["package"][i]["version"] = version # type: ignore[index] + break + self.lock_file.write_text(tomlkit.dumps(document)) From c2def94bee5d9b9b20b57951a1d042abdcbd4699 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Tue, 18 Feb 2025 21:29:30 +0800 Subject: [PATCH 500/685] test(providers/uv_provider): add test case test_uv_provider --- commitizen/providers/__init__.py | 2 + pyproject.toml | 21 ++-- tests/providers/test_uv_provider.py | 97 +++++++++++++++++++ .../test_uv_provider/test_uv_provider.lock | 42 ++++++++ .../test_uv_provider/test_uv_provider.toml | 8 ++ 5 files changed, 159 insertions(+), 11 deletions(-) create mode 100644 tests/providers/test_uv_provider.py create mode 100644 tests/providers/test_uv_provider/test_uv_provider.lock create mode 100644 tests/providers/test_uv_provider/test_uv_provider.toml diff --git a/commitizen/providers/__init__.py b/commitizen/providers/__init__.py index 3fd4ab1bfd..9cf4ce5927 100644 --- a/commitizen/providers/__init__.py +++ b/commitizen/providers/__init__.py @@ -18,6 +18,7 @@ from commitizen.providers.pep621_provider import Pep621Provider from commitizen.providers.poetry_provider import PoetryProvider from commitizen.providers.scm_provider import ScmProvider +from commitizen.providers.uv_provider import UvProvider __all__ = [ "get_provider", @@ -28,6 +29,7 @@ "Pep621Provider", "PoetryProvider", "ScmProvider", + "UvProvider", ] PROVIDER_ENTRYPOINT = "commitizen.provider" diff --git a/pyproject.toml b/pyproject.toml index c63fe4d238..416032db11 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -74,6 +74,7 @@ npm = "commitizen.providers:NpmProvider" pep621 = "commitizen.providers:Pep621Provider" poetry = "commitizen.providers:PoetryProvider" scm = "commitizen.providers:ScmProvider" +uv = "commitizen.providers:UvProvider" [project.entry-points."commitizen.scheme"] pep440 = "commitizen.version_schemes:Pep440" @@ -165,9 +166,7 @@ omit = [ [tool.pytest.ini_options] addopts = "--strict-markers" -testpaths = [ - "tests/", -] +testpaths = ["tests/"] [tool.tox] requires = ["tox>=4.22"] @@ -178,7 +177,7 @@ description = "Run tests suite against Python {base_python}" skip_install = true deps = ["poetry>=2.0"] commands_pre = [["poetry", "install", "--only", "main,test"]] -commands = [["pytest", { replace = "posargs", extend = true}]] +commands = [["pytest", { replace = "posargs", extend = true }]] [tool.ruff] line-length = 88 @@ -227,14 +226,14 @@ poetry_command = "" [tool.poe.tasks] format.help = "Format the code" format.sequence = [ - {cmd = "ruff check --fix commitizen tests"}, - {cmd = "ruff format commitizen tests"}, + { cmd = "ruff check --fix commitizen tests" }, + { cmd = "ruff format commitizen tests" }, ] lint.help = "Lint the code" lint.sequence = [ - {cmd = "ruff check commitizen/ tests/ --fix"}, - {cmd = "mypy commitizen/ tests/"}, + { cmd = "ruff check commitizen/ tests/ --fix" }, + { cmd = "mypy commitizen/ tests/" }, ] check-commit.help = "Check the commit message" @@ -254,7 +253,7 @@ all.sequence = [ "format", "lint", "cover", - "check-commit" + "check-commit", ] "doc:screenshots".help = "Render documentation screeenshots" @@ -268,10 +267,10 @@ doc.cmd = "mkdocs serve" ci.help = "Run all tasks in CI" ci.sequence = [ - {cmd="pre-commit run --all-files"}, + { cmd = "pre-commit run --all-files" }, "cover", ] -ci.env = {SKIP = "no-commit-to-branch"} +ci.env = { SKIP = "no-commit-to-branch" } setup-pre-commit.help = "Install pre-commit hooks" setup-pre-commit.cmd = "pre-commit install" diff --git a/tests/providers/test_uv_provider.py b/tests/providers/test_uv_provider.py new file mode 100644 index 0000000000..4093709376 --- /dev/null +++ b/tests/providers/test_uv_provider.py @@ -0,0 +1,97 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from commitizen.config.base_config import BaseConfig +from commitizen.providers import get_provider +from commitizen.providers.uv_provider import UvProvider + +if TYPE_CHECKING: + from pytest_regressions.file_regression import FileRegressionFixture + + +PYPROJECT_TOML = """ +[project] +name = "test-uv" +version = "4.2.1" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.13" +dependencies = ["commitizen==4.2.1"] +""" + +UV_LOCK_SIMPLIFIED = """ +version = 1 +revision = 1 +requires-python = ">=3.13" + +[[package]] +name = "commitizen" +version = "4.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "argcomplete" }, + { name = "charset-normalizer" }, + { name = "colorama" }, + { name = "decli" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "questionary" }, + { name = "termcolor" }, + { name = "tomlkit" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/a3/77ffc9aee014cbf46c84c9f156a1ddef2d4c7cfb87d567decf2541464245/commitizen-4.2.1.tar.gz", hash = "sha256:5255416f6d6071068159f0b97605777f3e25d00927ff157b7a8d01efeda7b952", size = 50645 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/ce/2f5d8ebe8376991b5f805e9f33d20c7f4c9ca6155bdbda761117dc41dff1/commitizen-4.2.1-py3-none-any.whl", hash = "sha256:a347889e0fe408c3b920a34130d8f35616be3ea8ac6b7b20c5b9aac19762661b", size = 72646 }, +] + +[[package]] +name = "decli" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/a0/a4658f93ecb589f479037b164dc13c68d108b50bf6594e54c820749f97ac/decli-0.6.2.tar.gz", hash = "sha256:36f71eb55fd0093895efb4f416ec32b7f6e00147dda448e3365cf73ceab42d6f", size = 7424 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/70/3ea48dc9e958d7d66c44c9944809181f1ca79aaef25703c023b5092d34ff/decli-0.6.2-py3-none-any.whl", hash = "sha256:2fc84106ce9a8f523ed501ca543bdb7e416c064917c12a59ebdc7f311a97b7ed", size = 7854 }, +] + +[[package]] +name = "test-uv" +version = "4.2.1" +source = { virtual = "." } +dependencies = [ + { name = "commitizen" }, +] +""" + + +def test_uv_provider( + config: BaseConfig, tmpdir, file_regression: FileRegressionFixture +): + with tmpdir.as_cwd(): + pyproject_toml_file = tmpdir / UvProvider.filename + pyproject_toml_file.write_text(PYPROJECT_TOML, encoding="utf-8") + + uv_lock_file = tmpdir / UvProvider.lock_filename + uv_lock_file.write_text(UV_LOCK_SIMPLIFIED, encoding="utf-8") + + config.settings["version_provider"] = "uv" + + provider = get_provider(config) + assert isinstance(provider, UvProvider) + assert provider.get_version() == "4.2.1" + + provider.set_version("100.100.100") + assert provider.get_version() == "100.100.100" + + updated_pyproject_toml_content = pyproject_toml_file.read_text(encoding="utf-8") + updated_uv_lock_content = uv_lock_file.read_text(encoding="utf-8") + + for content in (updated_pyproject_toml_content, updated_uv_lock_content): + # updated project version + assert "100.100.100" in content + # commitizen version which was the same as project version and should not be affected + assert "4.2.1" in content + + file_regression.check(updated_pyproject_toml_content, extension=".toml") + file_regression.check(updated_uv_lock_content, extension=".lock") diff --git a/tests/providers/test_uv_provider/test_uv_provider.lock b/tests/providers/test_uv_provider/test_uv_provider.lock new file mode 100644 index 0000000000..d353763ce3 --- /dev/null +++ b/tests/providers/test_uv_provider/test_uv_provider.lock @@ -0,0 +1,42 @@ + +version = 1 +revision = 1 +requires-python = ">=3.13" + +[[package]] +name = "commitizen" +version = "4.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "argcomplete" }, + { name = "charset-normalizer" }, + { name = "colorama" }, + { name = "decli" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "questionary" }, + { name = "termcolor" }, + { name = "tomlkit" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/a3/77ffc9aee014cbf46c84c9f156a1ddef2d4c7cfb87d567decf2541464245/commitizen-4.2.1.tar.gz", hash = "sha256:5255416f6d6071068159f0b97605777f3e25d00927ff157b7a8d01efeda7b952", size = 50645 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/ce/2f5d8ebe8376991b5f805e9f33d20c7f4c9ca6155bdbda761117dc41dff1/commitizen-4.2.1-py3-none-any.whl", hash = "sha256:a347889e0fe408c3b920a34130d8f35616be3ea8ac6b7b20c5b9aac19762661b", size = 72646 }, +] + +[[package]] +name = "decli" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/a0/a4658f93ecb589f479037b164dc13c68d108b50bf6594e54c820749f97ac/decli-0.6.2.tar.gz", hash = "sha256:36f71eb55fd0093895efb4f416ec32b7f6e00147dda448e3365cf73ceab42d6f", size = 7424 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/70/3ea48dc9e958d7d66c44c9944809181f1ca79aaef25703c023b5092d34ff/decli-0.6.2-py3-none-any.whl", hash = "sha256:2fc84106ce9a8f523ed501ca543bdb7e416c064917c12a59ebdc7f311a97b7ed", size = 7854 }, +] + +[[package]] +name = "test-uv" +version = "100.100.100" +source = { virtual = "." } +dependencies = [ + { name = "commitizen" }, +] diff --git a/tests/providers/test_uv_provider/test_uv_provider.toml b/tests/providers/test_uv_provider/test_uv_provider.toml new file mode 100644 index 0000000000..9fdb6eb5aa --- /dev/null +++ b/tests/providers/test_uv_provider/test_uv_provider.toml @@ -0,0 +1,8 @@ + +[project] +name = "test-uv" +version = "100.100.100" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.13" +dependencies = ["commitizen==4.2.1"] From 9639da1539720377a39777fcde309e8426cdbf6f Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Tue, 18 Feb 2025 21:44:15 +0800 Subject: [PATCH 501/685] ci(pre-commit): ignore test file eof --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ba6ec51bae..392d1c040c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ repos: hooks: - id: check-vcs-permalinks - id: end-of-file-fixer - exclude: "tests/((commands|data)/|test_).+" + exclude: "tests/((commands|data|providers/test_uv_provider)/|test_).+" - id: trailing-whitespace args: [ --markdown-linebreak-ext=md ] exclude: '\.svg$' From 63191a3ef4cf6aa4953f5b3be2a6c30fa9687430 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Fri, 28 Feb 2025 05:00:36 +0000 Subject: [PATCH 502/685] =?UTF-8?q?bump:=20version=204.2.2=20=E2=86=92=204?= =?UTF-8?q?.3.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 392d1c040c..dd16cc9cc4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.2.2 # automatically updated by Commitizen + rev: v4.3.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ee93c0430..fa7409d227 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v4.3.0 (2025-02-28) + +### Feat + +- **providers**: add uv_provider + ## v4.2.2 (2025-02-18) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 2e905e44da..111dc9172a 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.2.2" +__version__ = "4.3.0" diff --git a/pyproject.toml b/pyproject.toml index 416032db11..0c03a6d508 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.2.2" +version = "4.3.0" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -87,7 +87,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.2.2" +version = "4.3.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", From 5306cbf2436284e61b4e092c4e4e9e82c1317fcc Mon Sep 17 00:00:00 2001 From: "Axel H." <noirbizarre@gmail.com> Date: Sun, 17 Nov 2024 19:49:55 +0100 Subject: [PATCH 503/685] refactor(get_tag_regexes): dedup tag regexes definition --- commitizen/defaults.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/commitizen/defaults.py b/commitizen/defaults.py index d776e38d7a..45b6500e0b 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -138,17 +138,15 @@ class Settings(TypedDict, total=False): def get_tag_regexes( version_regex: str, ) -> dict[str, str]: + regexs = { + "version": version_regex, + "major": r"(?P<major>\d+)", + "minor": r"(?P<minor>\d+)", + "patch": r"(?P<patch>\d+)", + "prerelease": r"(?P<prerelease>\w+\d+)?", + "devrelease": r"(?P<devrelease>\.dev\d+)?", + } return { - "$version": version_regex, - "$major": r"(?P<major>\d+)", - "$minor": r"(?P<minor>\d+)", - "$patch": r"(?P<patch>\d+)", - "$prerelease": r"(?P<prerelease>\w+\d+)?", - "$devrelease": r"(?P<devrelease>\.dev\d+)?", - "${version}": version_regex, - "${major}": r"(?P<major>\d+)", - "${minor}": r"(?P<minor>\d+)", - "${patch}": r"(?P<patch>\d+)", - "${prerelease}": r"(?P<prerelease>\w+\d+)?", - "${devrelease}": r"(?P<devrelease>\.dev\d+)?", + **{f"${k}": v for k, v in regexs.items()}, + **{f"${{{k}}}": v for k, v in regexs.items()}, } From 74554c2b4244341cda0f0db177fb78fa99d86646 Mon Sep 17 00:00:00 2001 From: "Axel H." <noirbizarre@gmail.com> Date: Mon, 18 Nov 2024 03:54:21 +0100 Subject: [PATCH 504/685] feat(tags): adds `legacy_tag_formats` and `ignored_tag_formats` settings --- commitizen/bump.py | 30 +- commitizen/changelog.py | 84 ++---- commitizen/changelog_formats/asciidoc.py | 23 +- commitizen/changelog_formats/base.py | 28 +- commitizen/changelog_formats/markdown.py | 25 +- .../changelog_formats/restructuredtext.py | 31 +-- commitizen/changelog_formats/textile.py | 28 +- commitizen/commands/bump.py | 38 +-- commitizen/commands/changelog.py | 39 ++- commitizen/commands/init.py | 2 +- commitizen/defaults.py | 6 +- commitizen/providers/scm_provider.py | 66 +---- commitizen/tags.py | 257 ++++++++++++++++++ commitizen/version_schemes.py | 12 +- docs/config.md | 20 ++ docs/faq.md | 33 +++ docs/tutorials/monorepo_guidance.md | 2 + docs/tutorials/tag_format.md | 101 +++++++ mkdocs.yml | 1 + tests/commands/test_bump_command.py | 29 ++ tests/commands/test_changelog_command.py | 242 ++++++++++++++--- ...from_rev_version_range_with_legacy_tags.md | 17 ++ ...changelog_incremental_change_tag_format.md | 17 ++ tests/providers/test_scm_provider.py | 23 ++ tests/test_bump_normalize_tag.py | 5 +- tests/test_changelog.py | 115 +++++++- tests/test_changelog_format_asciidoc.py | 19 +- tests/test_changelog_format_markdown.py | 19 +- .../test_changelog_format_restructuredtext.py | 5 + tests/test_changelog_format_textile.py | 19 +- tests/test_conf.py | 4 + tests/test_version_schemes.py | 14 +- 32 files changed, 982 insertions(+), 372 deletions(-) create mode 100644 commitizen/tags.py create mode 100644 docs/tutorials/tag_format.md create mode 100644 tests/commands/test_changelog_command/test_changelog_from_rev_version_range_with_legacy_tags.md create mode 100644 tests/commands/test_changelog_command/test_changelog_incremental_change_tag_format.md diff --git a/commitizen/bump.py b/commitizen/bump.py index 908899eb0e..adfab64cb0 100644 --- a/commitizen/bump.py +++ b/commitizen/bump.py @@ -11,7 +11,7 @@ from commitizen.defaults import MAJOR, MINOR, PATCH, bump_message, encoding from commitizen.exceptions import CurrentVersionNotFoundError from commitizen.git import GitCommit, smart_open -from commitizen.version_schemes import DEFAULT_SCHEME, Increment, Version, VersionScheme +from commitizen.version_schemes import Increment, Version VERSION_TYPES = [None, PATCH, MINOR, MAJOR] @@ -142,34 +142,6 @@ def _version_to_regex(version: str) -> str: return version.replace(".", r"\.").replace("+", r"\+") -def normalize_tag( - version: Version | str, - tag_format: str, - scheme: VersionScheme | None = None, -) -> str: - """The tag and the software version might be different. - - That's why this function exists. - - Example: - | tag | version (PEP 0440) | - | --- | ------- | - | v0.9.0 | 0.9.0 | - | ver1.0.0 | 1.0.0 | - | ver1.0.0.a0 | 1.0.0a0 | - """ - scheme = scheme or DEFAULT_SCHEME - version = scheme(version) if isinstance(version, str) else version - - major, minor, patch = version.release - prerelease = version.prerelease or "" - - t = Template(tag_format) - return t.safe_substitute( - version=version, major=major, minor=minor, patch=patch, prerelease=prerelease - ) - - def create_commit_message( current_version: Version | str, new_version: Version | str, diff --git a/commitizen/changelog.py b/commitizen/changelog.py index 7f300354b6..95bf21d6f9 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -42,21 +42,13 @@ Template, ) -from commitizen import out -from commitizen.bump import normalize_tag from commitizen.cz.base import ChangelogReleaseHook -from commitizen.defaults import get_tag_regexes from commitizen.exceptions import InvalidConfigurationError, NoCommitsFoundError from commitizen.git import GitCommit, GitTag -from commitizen.version_schemes import ( - DEFAULT_SCHEME, - BaseVersion, - InvalidVersion, -) +from commitizen.tags import TagRules if TYPE_CHECKING: from commitizen.cz.base import MessageBuilderHook - from commitizen.version_schemes import VersionScheme @dataclass @@ -69,50 +61,19 @@ class Metadata: unreleased_end: int | None = None latest_version: str | None = None latest_version_position: int | None = None + latest_version_tag: str | None = None + + def __post_init__(self): + if self.latest_version and not self.latest_version_tag: + # Test syntactic sugar + # latest version tag is optional if same as latest version + self.latest_version_tag = self.latest_version def get_commit_tag(commit: GitCommit, tags: list[GitTag]) -> GitTag | None: return next((tag for tag in tags if tag.rev == commit.rev), None) -def tag_included_in_changelog( - tag: GitTag, - used_tags: list, - merge_prerelease: bool, - scheme: VersionScheme = DEFAULT_SCHEME, -) -> bool: - if tag in used_tags: - return False - - try: - version = scheme(tag.name) - except InvalidVersion: - return False - - if merge_prerelease and version.is_prerelease: - return False - - return True - - -def get_version_tags( - scheme: type[BaseVersion], tags: list[GitTag], tag_format: str -) -> list[GitTag]: - valid_tags: list[GitTag] = [] - TAG_FORMAT_REGEXS = get_tag_regexes(scheme.parser.pattern) - tag_format_regex = tag_format - for pattern, regex in TAG_FORMAT_REGEXS.items(): - tag_format_regex = tag_format_regex.replace(pattern, regex) - for tag in tags: - if re.match(tag_format_regex, tag.name): - valid_tags.append(tag) - else: - out.warn( - f"InvalidVersion {tag.name} doesn't match configured tag format {tag_format}" - ) - return valid_tags - - def generate_tree_from_commits( commits: list[GitCommit], tags: list[GitTag], @@ -122,13 +83,13 @@ def generate_tree_from_commits( change_type_map: dict[str, str] | None = None, changelog_message_builder_hook: MessageBuilderHook | None = None, changelog_release_hook: ChangelogReleaseHook | None = None, - merge_prerelease: bool = False, - scheme: VersionScheme = DEFAULT_SCHEME, + rules: TagRules | None = None, ) -> Iterable[dict]: pat = re.compile(changelog_pattern) map_pat = re.compile(commit_parser, re.MULTILINE) body_map_pat = re.compile(commit_parser, re.MULTILINE | re.DOTALL) current_tag: GitTag | None = None + rules = rules or TagRules() # Check if the latest commit is not tagged if commits: @@ -148,8 +109,10 @@ def generate_tree_from_commits( for commit in commits: commit_tag = get_commit_tag(commit, tags) - if commit_tag is not None and tag_included_in_changelog( - commit_tag, used_tags, merge_prerelease, scheme=scheme + if ( + commit_tag + and commit_tag not in used_tags + and rules.include_in_changelog(commit_tag) ): used_tags.append(commit_tag) release = { @@ -343,8 +306,7 @@ def get_smart_tag_range( def get_oldest_and_newest_rev( tags: list[GitTag], version: str, - tag_format: str, - scheme: VersionScheme | None = None, + rules: TagRules, ) -> tuple[str | None, str | None]: """Find the tags for the given version. @@ -358,22 +320,28 @@ def get_oldest_and_newest_rev( oldest, newest = version.split("..") except ValueError: newest = version - newest_tag = normalize_tag(newest, tag_format=tag_format, scheme=scheme) + if not (newest_tag := rules.find_tag_for(tags, newest)): + raise NoCommitsFoundError("Could not find a valid revision range.") oldest_tag = None + oldest_tag_name = None if oldest: - oldest_tag = normalize_tag(oldest, tag_format=tag_format, scheme=scheme) + if not (oldest_tag := rules.find_tag_for(tags, oldest)): + raise NoCommitsFoundError("Could not find a valid revision range.") + oldest_tag_name = oldest_tag.name - tags_range = get_smart_tag_range(tags, newest=newest_tag, oldest=oldest_tag) + tags_range = get_smart_tag_range( + tags, newest=newest_tag.name, oldest=oldest_tag_name + ) if not tags_range: raise NoCommitsFoundError("Could not find a valid revision range.") oldest_rev: str | None = tags_range[-1].name - newest_rev = newest_tag + newest_rev = newest_tag.name # check if it's the first tag created # and it's also being requested as part of the range - if oldest_rev == tags[-1].name and oldest_rev == oldest_tag: + if oldest_rev == tags[-1].name and oldest_rev == oldest_tag_name: return None, newest_rev # when they are the same, and it's also the diff --git a/commitizen/changelog_formats/asciidoc.py b/commitizen/changelog_formats/asciidoc.py index 6007a56d16..ed3e8607bd 100644 --- a/commitizen/changelog_formats/asciidoc.py +++ b/commitizen/changelog_formats/asciidoc.py @@ -1,36 +1,25 @@ from __future__ import annotations import re +from typing import TYPE_CHECKING from .base import BaseFormat +if TYPE_CHECKING: + from commitizen.tags import VersionTag + class AsciiDoc(BaseFormat): extension = "adoc" RE_TITLE = re.compile(r"^(?P<level>=+) (?P<title>.*)$") - def parse_version_from_title(self, line: str) -> str | None: + def parse_version_from_title(self, line: str) -> VersionTag | None: m = self.RE_TITLE.match(line) if not m: return None # Capture last match as AsciiDoc use postfixed URL labels - matches = list(re.finditer(self.version_parser, m.group("title"))) - if not matches: - return None - if "version" in matches[-1].groupdict(): - return matches[-1].group("version") - partial_matches = matches[-1].groupdict() - try: - partial_version = f"{partial_matches['major']}.{partial_matches['minor']}.{partial_matches['patch']}" - except KeyError: - return None - - if partial_matches.get("prerelease"): - partial_version = f"{partial_version}-{partial_matches['prerelease']}" - if partial_matches.get("devrelease"): - partial_version = f"{partial_version}{partial_matches['devrelease']}" - return partial_version + return self.tag_rules.search_version(m.group("title"), last=True) def parse_title_level(self, line: str) -> int | None: m = self.RE_TITLE.match(line) diff --git a/commitizen/changelog_formats/base.py b/commitizen/changelog_formats/base.py index 53527a060c..f69cf8f00f 100644 --- a/commitizen/changelog_formats/base.py +++ b/commitizen/changelog_formats/base.py @@ -1,14 +1,12 @@ from __future__ import annotations import os -import re from abc import ABCMeta -from re import Pattern from typing import IO, Any, ClassVar from commitizen.changelog import Metadata from commitizen.config.base_config import BaseConfig -from commitizen.defaults import get_tag_regexes +from commitizen.tags import TagRules, VersionTag from commitizen.version_schemes import get_version_scheme from . import ChangelogFormat @@ -28,15 +26,12 @@ def __init__(self, config: BaseConfig): self.config = config self.encoding = self.config.settings["encoding"] self.tag_format = self.config.settings["tag_format"] - - @property - def version_parser(self) -> Pattern: - tag_regex: str = self.tag_format - version_regex = get_version_scheme(self.config).parser.pattern - TAG_FORMAT_REGEXS = get_tag_regexes(version_regex) - for pattern, regex in TAG_FORMAT_REGEXS.items(): - tag_regex = tag_regex.replace(pattern, regex) - return re.compile(tag_regex) + self.tag_rules = TagRules( + scheme=get_version_scheme(self.config.settings), + tag_format=self.tag_format, + legacy_tag_formats=self.config.settings["legacy_tag_formats"], + ignored_tag_formats=self.config.settings["ignored_tag_formats"], + ) def get_metadata(self, filepath: str) -> Metadata: if not os.path.isfile(filepath): @@ -63,9 +58,10 @@ def get_metadata_from_file(self, file: IO[Any]) -> Metadata: meta.unreleased_end = index # Try to find the latest release done - version = self.parse_version_from_title(line) - if version: - meta.latest_version = version + parsed = self.parse_version_from_title(line) + if parsed: + meta.latest_version = parsed.version + meta.latest_version_tag = parsed.tag meta.latest_version_position = index break # there's no need for more info if meta.unreleased_start is not None and meta.unreleased_end is None: @@ -73,7 +69,7 @@ def get_metadata_from_file(self, file: IO[Any]) -> Metadata: return meta - def parse_version_from_title(self, line: str) -> str | None: + def parse_version_from_title(self, line: str) -> VersionTag | None: """ Extract the version from a title line if any """ diff --git a/commitizen/changelog_formats/markdown.py b/commitizen/changelog_formats/markdown.py index 29c1cce54a..e3d30fe174 100644 --- a/commitizen/changelog_formats/markdown.py +++ b/commitizen/changelog_formats/markdown.py @@ -1,9 +1,13 @@ from __future__ import annotations import re +from typing import TYPE_CHECKING from .base import BaseFormat +if TYPE_CHECKING: + from commitizen.tags import VersionTag + class Markdown(BaseFormat): extension = "md" @@ -12,28 +16,11 @@ class Markdown(BaseFormat): RE_TITLE = re.compile(r"^(?P<level>#+) (?P<title>.*)$") - def parse_version_from_title(self, line: str) -> str | None: + def parse_version_from_title(self, line: str) -> VersionTag | None: m = self.RE_TITLE.match(line) if not m: return None - m = re.search(self.version_parser, m.group("title")) - if not m: - return None - if "version" in m.groupdict(): - return m.group("version") - matches = m.groupdict() - try: - partial_version = ( - f"{matches['major']}.{matches['minor']}.{matches['patch']}" - ) - except KeyError: - return None - - if matches.get("prerelease"): - partial_version = f"{partial_version}-{matches['prerelease']}" - if matches.get("devrelease"): - partial_version = f"{partial_version}{matches['devrelease']}" - return partial_version + return self.tag_rules.search_version(m.group("title")) def parse_title_level(self, line: str) -> int | None: m = self.RE_TITLE.match(line) diff --git a/commitizen/changelog_formats/restructuredtext.py b/commitizen/changelog_formats/restructuredtext.py index 8bcf9a4a4f..b7e4e105a1 100644 --- a/commitizen/changelog_formats/restructuredtext.py +++ b/commitizen/changelog_formats/restructuredtext.py @@ -1,6 +1,5 @@ from __future__ import annotations -import re import sys from itertools import zip_longest from typing import IO, TYPE_CHECKING, Any, Union @@ -64,31 +63,11 @@ def get_metadata_from_file(self, file: IO[Any]) -> Metadata: elif unreleased_title_kind and unreleased_title_kind == kind: meta.unreleased_end = index # Try to find the latest release done - m = re.search(self.version_parser, title) - if m: - matches = m.groupdict() - if "version" in matches: - version = m.group("version") - meta.latest_version = version - meta.latest_version_position = index - break # there's no need for more info - try: - partial_version = ( - f"{matches['major']}.{matches['minor']}.{matches['patch']}" - ) - if matches.get("prerelease"): - partial_version = ( - f"{partial_version}-{matches['prerelease']}" - ) - if matches.get("devrelease"): - partial_version = ( - f"{partial_version}{matches['devrelease']}" - ) - meta.latest_version = partial_version - meta.latest_version_position = index - break - except KeyError: - pass + if version := self.tag_rules.search_version(title): + meta.latest_version = version[0] + meta.latest_version_tag = version[1] + meta.latest_version_position = index + break if meta.unreleased_start is not None and meta.unreleased_end is None: meta.unreleased_end = ( meta.latest_version_position if meta.latest_version else index + 1 diff --git a/commitizen/changelog_formats/textile.py b/commitizen/changelog_formats/textile.py index 8750f0056c..6693e5e002 100644 --- a/commitizen/changelog_formats/textile.py +++ b/commitizen/changelog_formats/textile.py @@ -1,39 +1,23 @@ from __future__ import annotations import re +from typing import TYPE_CHECKING from .base import BaseFormat +if TYPE_CHECKING: + from commitizen.tags import VersionTag + class Textile(BaseFormat): extension = "textile" RE_TITLE = re.compile(r"^h(?P<level>\d)\. (?P<title>.*)$") - def parse_version_from_title(self, line: str) -> str | None: + def parse_version_from_title(self, line: str) -> VersionTag | None: if not self.RE_TITLE.match(line): return None - m = re.search(self.version_parser, line) - if not m: - return None - if "version" in m.groupdict(): - return m.group("version") - matches = m.groupdict() - if not all( - [ - version_segment in matches - for version_segment in ("major", "minor", "patch") - ] - ): - return None - - partial_version = f"{matches['major']}.{matches['minor']}.{matches['patch']}" - - if matches.get("prerelease"): - partial_version = f"{partial_version}-{matches['prerelease']}" - if matches.get("devrelease"): - partial_version = f"{partial_version}{matches['devrelease']}" - return partial_version + return self.tag_rules.search_version(line) def parse_title_level(self, line: str) -> int | None: m = self.RE_TITLE.match(line) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 8e9f0f181b..60853094f9 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -2,6 +2,7 @@ import warnings from logging import getLogger +from typing import cast import questionary @@ -9,6 +10,7 @@ from commitizen.changelog_formats import get_changelog_format from commitizen.commands.changelog import Changelog from commitizen.config import BaseConfig +from commitizen.defaults import Settings from commitizen.exceptions import ( BumpCommitFailedError, BumpTagFailedError, @@ -24,6 +26,7 @@ NoVersionSpecifiedError, ) from commitizen.providers import get_provider +from commitizen.tags import TagRules from commitizen.version_schemes import ( Increment, InvalidVersion, @@ -84,7 +87,7 @@ def __init__(self, config: BaseConfig, arguments: dict): ) ) self.scheme = get_version_scheme( - self.config, arguments["version_scheme"] or deprecated_version_type + self.config.settings, arguments["version_scheme"] or deprecated_version_type ) self.file_name = arguments["file_name"] or self.config.settings.get( "changelog_file" @@ -98,18 +101,20 @@ def __init__(self, config: BaseConfig, arguments: dict): ) self.extras = arguments["extras"] - def is_initial_tag(self, current_tag_version: str, is_yes: bool = False) -> bool: + def is_initial_tag( + self, current_tag: git.GitTag | None, is_yes: bool = False + ) -> bool: """Check if reading the whole git tree up to HEAD is needed.""" is_initial = False - if not git.tag_exist(current_tag_version): + if not current_tag: if is_yes: is_initial = True else: - out.info(f"Tag {current_tag_version} could not be found. ") + out.info("No tag matching configuration could not be found.") out.info( "Possible causes:\n" "- version in configuration is not the current version\n" - "- tag_format is missing, check them using 'git tag --list'\n" + "- tag_format or legacy_tag_formats is missing, check them using 'git tag --list'\n" ) is_initial = questionary.confirm("Is this the first tag created?").ask() return is_initial @@ -143,7 +148,6 @@ def __call__(self) -> None: # noqa: C901 except TypeError: raise NoVersionSpecifiedError() - tag_format: str = self.bump_settings["tag_format"] bump_commit_message: str = self.bump_settings["bump_message"] version_files: list[str] = self.bump_settings["version_files"] major_version_zero: bool = self.bump_settings["major_version_zero"] @@ -221,13 +225,13 @@ def __call__(self) -> None: # noqa: C901 or self.changelog_config ) - current_tag_version: str = bump.normalize_tag( - current_version, - tag_format=tag_format, - scheme=self.scheme, + rules = TagRules.from_settings(cast(Settings, self.bump_settings)) + current_tag = rules.find_tag_for(git.get_tags(), current_version) + current_tag_version = getattr( + current_tag, "name", rules.normalize_tag(current_version) ) - is_initial = self.is_initial_tag(current_tag_version, is_yes) + is_initial = self.is_initial_tag(current_tag, is_yes) if manual_version: try: @@ -239,10 +243,10 @@ def __call__(self) -> None: # noqa: C901 ) from exc else: if increment is None: - if is_initial: - commits = git.get_commits() + if current_tag: + commits = git.get_commits(current_tag.name) else: - commits = git.get_commits(current_tag_version) + commits = git.get_commits() # No commits, there is no need to create an empty tag. # Unless we previously had a prerelease. @@ -280,11 +284,7 @@ def __call__(self) -> None: # noqa: C901 exact_increment=increment_mode == "exact", ) - new_tag_version = bump.normalize_tag( - new_version, - tag_format=tag_format, - scheme=self.scheme, - ) + new_tag_version = rules.normalize_tag(new_version) message = bump.create_commit_message( current_version, new_version, bump_commit_message ) diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 25e644aaef..80a72651e4 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -6,7 +6,7 @@ from pathlib import Path from typing import Callable, cast -from commitizen import bump, changelog, defaults, factory, git, out +from commitizen import changelog, defaults, factory, git, out from commitizen.changelog_formats import get_changelog_format from commitizen.config import BaseConfig from commitizen.cz.base import ChangelogReleaseHook, MessageBuilderHook @@ -20,6 +20,7 @@ NotAllowed, ) from commitizen.git import GitTag, smart_open +from commitizen.tags import TagRules from commitizen.version_schemes import get_version_scheme @@ -53,7 +54,9 @@ def __init__(self, config: BaseConfig, args): ) self.dry_run = args["dry_run"] - self.scheme = get_version_scheme(self.config, args.get("version_scheme")) + self.scheme = get_version_scheme( + self.config.settings, args.get("version_scheme") + ) current_version = ( args.get("current_version", config.settings.get("version")) or "" @@ -73,9 +76,14 @@ def __init__(self, config: BaseConfig, args): self.tag_format: str = ( args.get("tag_format") or self.config.settings["tag_format"] ) - self.merge_prerelease = args.get( - "merge_prerelease" - ) or self.config.settings.get("changelog_merge_prerelease") + self.tag_rules = TagRules( + scheme=self.scheme, + tag_format=self.tag_format, + legacy_tag_formats=self.config.settings["legacy_tag_formats"], + ignored_tag_formats=self.config.settings["ignored_tag_formats"], + merge_prereleases=args.get("merge_prerelease") + or self.config.settings["changelog_merge_prerelease"], + ) self.template = ( args.get("template") @@ -152,7 +160,6 @@ def __call__(self): changelog_release_hook: ChangelogReleaseHook | None = ( self.cz.changelog_release_hook ) - merge_prerelease = self.merge_prerelease if self.export_template_to: return self.export_template() @@ -168,28 +175,19 @@ def __call__(self): # Don't continue if no `file_name` specified. assert self.file_name - tags = ( - changelog.get_version_tags(self.scheme, git.get_tags(), self.tag_format) - or [] - ) + tags = self.tag_rules.get_version_tags(git.get_tags(), warn=True) end_rev = "" if self.incremental: changelog_meta = self.changelog_format.get_metadata(self.file_name) if changelog_meta.latest_version: - latest_tag_version: str = bump.normalize_tag( - changelog_meta.latest_version, - tag_format=self.tag_format, - scheme=self.scheme, - ) start_rev = self._find_incremental_rev( - strip_local_version(latest_tag_version), tags + strip_local_version(changelog_meta.latest_version_tag), tags ) if self.rev_range: start_rev, end_rev = changelog.get_oldest_and_newest_rev( tags, - version=self.rev_range, - tag_format=self.tag_format, - scheme=self.scheme, + self.rev_range, + self.tag_rules, ) commits = git.get_commits(start=start_rev, end=end_rev, args="--topo-order") if not commits and ( @@ -205,8 +203,7 @@ def __call__(self): change_type_map=change_type_map, changelog_message_builder_hook=changelog_message_builder_hook, changelog_release_hook=changelog_release_hook, - merge_prerelease=merge_prerelease, - scheme=self.scheme, + rules=self.tag_rules, ) if self.change_type_order: tree = changelog.order_changelog_tree(tree, self.change_type_order) diff --git a/commitizen/commands/init.py b/commitizen/commands/init.py index ffc5e3eb3b..e39dfbe291 100644 --- a/commitizen/commands/init.py +++ b/commitizen/commands/init.py @@ -98,7 +98,7 @@ def __call__(self): version_provider = self._ask_version_provider() # select tag = self._ask_tag() # confirm & select version_scheme = self._ask_version_scheme() # select - version = get_version_scheme(self.config, version_scheme)(tag) + version = get_version_scheme(self.config.settings, version_scheme)(tag) tag_format = self._ask_tag_format(tag) # confirm & text update_changelog_on_bump = self._ask_update_changelog_on_bump() # confirm major_version_zero = self._ask_major_version_zero(version) # confirm diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 45b6500e0b..0b78e1b0bb 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -2,7 +2,7 @@ import pathlib from collections import OrderedDict -from collections.abc import Iterable, MutableMapping +from collections.abc import Iterable, MutableMapping, Sequence from typing import Any, TypedDict # Type @@ -35,6 +35,8 @@ class Settings(TypedDict, total=False): version_scheme: str | None version_type: str | None tag_format: str + legacy_tag_formats: Sequence[str] + ignored_tag_formats: Sequence[str] bump_message: str | None retry_after_failure: bool allow_abort: bool @@ -77,6 +79,8 @@ class Settings(TypedDict, total=False): "version_provider": "commitizen", "version_scheme": None, "tag_format": "$version", # example v$version + "legacy_tag_formats": [], + "ignored_tag_formats": [], "bump_message": None, # bumped v$current_version to $new_version "retry_after_failure": False, "allow_abort": False, diff --git a/commitizen/providers/scm_provider.py b/commitizen/providers/scm_provider.py index 33e470cfc6..cb575148cb 100644 --- a/commitizen/providers/scm_provider.py +++ b/commitizen/providers/scm_provider.py @@ -1,17 +1,8 @@ from __future__ import annotations -import re -from typing import Callable - -from commitizen.defaults import get_tag_regexes from commitizen.git import get_tags from commitizen.providers.base_provider import VersionProvider -from commitizen.version_schemes import ( - InvalidVersion, - Version, - VersionProtocol, - get_version_scheme, -) +from commitizen.tags import TagRules class ScmProvider(VersionProvider): @@ -23,57 +14,14 @@ class ScmProvider(VersionProvider): It is meant for `setuptools-scm` or any package manager `*-scm` provider. """ - TAG_FORMAT_REGEXS = get_tag_regexes(r"(?P<version>.+)") - - def _tag_format_matcher(self) -> Callable[[str], VersionProtocol | None]: - version_scheme = get_version_scheme(self.config) - pattern = self.config.settings["tag_format"] - if pattern == "$version": - pattern = version_scheme.parser.pattern - for var, tag_pattern in self.TAG_FORMAT_REGEXS.items(): - pattern = pattern.replace(var, tag_pattern) - - regex = re.compile(f"^{pattern}$", re.VERBOSE) - - def matcher(tag: str) -> Version | None: - match = regex.match(tag) - if not match: - return None - groups = match.groupdict() - if "version" in groups: - ver = groups["version"] - elif "major" in groups: - ver = "".join( - ( - groups["major"], - f".{groups['minor']}" if groups.get("minor") else "", - f".{groups['patch']}" if groups.get("patch") else "", - groups["prerelease"] if groups.get("prerelease") else "", - groups["devrelease"] if groups.get("devrelease") else "", - ) - ) - elif pattern == version_scheme.parser.pattern: - ver = tag - else: - return None - - try: - return version_scheme(ver) - except InvalidVersion: - return None - - return matcher - def get_version(self) -> str: - matcher = self._tag_format_matcher() - matches = sorted( - version - for t in get_tags(reachable_only=True) - if (version := matcher(t.name)) - ) - if not matches: + rules = TagRules.from_settings(self.config.settings) + tags = get_tags(reachable_only=True) + version_tags = rules.get_version_tags(tags) + versions = sorted(rules.extract_version(t) for t in version_tags) + if not versions: return "0.0.0" - return str(matches[-1]) + return str(versions[-1]) def set_version(self, version: str): # Not necessary diff --git a/commitizen/tags.py b/commitizen/tags.py new file mode 100644 index 0000000000..962e428ef2 --- /dev/null +++ b/commitizen/tags.py @@ -0,0 +1,257 @@ +from __future__ import annotations + +import re +import warnings +from collections.abc import Sequence +from dataclasses import dataclass, field +from functools import cached_property +from string import Template +from typing import TYPE_CHECKING, NamedTuple + +from typing_extensions import Self + +from commitizen import out +from commitizen.defaults import DEFAULT_SETTINGS, Settings, get_tag_regexes +from commitizen.git import GitTag +from commitizen.version_schemes import ( + DEFAULT_SCHEME, + InvalidVersion, + Version, + VersionScheme, + get_version_scheme, +) + +if TYPE_CHECKING: + from commitizen.version_schemes import VersionScheme + + +class VersionTag(NamedTuple): + """Represent a version and its matching tag form.""" + + version: str + tag: str + + +@dataclass +class TagRules: + """ + Encapsulate tag-related rules. + + It allows to filter or match tags according to rules provided in settings: + - `tag_format`: the current format of the tags generated on `bump` + - `legacy_tag_formats`: previous known formats of the tag + - `ignored_tag_formats`: known formats that should be ignored + - `merge_prereleases`: if `True`, prereleases will be merged with their release counterpart + - `version_scheme`: the version scheme to use, which will be used to parse and format versions + + This class is meant to abstract and centralize all the logic related to tags. + To ensure consistency, it is recommended to use this class to handle tags. + + Example: + + ```py + settings = DEFAULT_SETTINGS.clone() + settings.update({ + "tag_format": "v{version}" + "legacy_tag_formats": ["version{version}", "ver{version}"], + "ignored_tag_formats": ["ignored{version}"], + }) + + rules = TagRules.from_settings(settings) + + assert rules.is_version_tag("v1.0.0") + assert rules.is_version_tag("version1.0.0") + assert rules.is_version_tag("ver1.0.0") + assert not rules.is_version_tag("ignored1.0.0", warn=True) # Does not warn + assert not rules.is_version_tag("warn1.0.0", warn=True) # Does warn + + assert rules.search_version("# My v1.0.0 version").version == "1.0.0" + assert rules.extract_version("v1.0.0") == Version("1.0.0") + try: + assert rules.extract_version("not-a-v1.0.0") + except InvalidVersion: + print "Does not match a tag format" + ``` + """ + + scheme: VersionScheme = DEFAULT_SCHEME + tag_format: str = DEFAULT_SETTINGS["tag_format"] + legacy_tag_formats: Sequence[str] = field(default_factory=list) + ignored_tag_formats: Sequence[str] = field(default_factory=list) + merge_prereleases: bool = False + + @cached_property + def version_regexes(self) -> Sequence[re.Pattern]: + """Regexes for all legit tag formats, current and legacy""" + tag_formats = [self.tag_format, *self.legacy_tag_formats] + regexes = (self._format_regex(p) for p in tag_formats) + return [re.compile(r) for r in regexes] + + @cached_property + def ignored_regexes(self) -> Sequence[re.Pattern]: + """Regexes for known but ignored tag formats""" + regexes = (self._format_regex(p, star=True) for p in self.ignored_tag_formats) + return [re.compile(r) for r in regexes] + + def _format_regex(self, tag_pattern: str, star: bool = False) -> str: + """ + Format a tag pattern into a regex pattern. + + If star is `True`, the `*` character will be considered as a wildcard. + """ + tag_regexes = get_tag_regexes(self.scheme.parser.pattern) + format_regex = tag_pattern.replace("*", "(?:.*?)") if star else tag_pattern + for pattern, regex in tag_regexes.items(): + format_regex = format_regex.replace(pattern, regex) + return format_regex + + def is_version_tag(self, tag: str | GitTag, warn: bool = False) -> bool: + """ + True if a given tag is a legit version tag. + + if `warn` is `True`, it will print a warning message if the tag is not a version tag. + """ + tag = tag.name if isinstance(tag, GitTag) else tag + is_legit = any(regex.match(tag) for regex in self.version_regexes) + if warn and not is_legit and not self.is_ignored_tag(tag): + out.warn(f"InvalidVersion {tag} doesn't match any configured tag format") + return is_legit + + def is_ignored_tag(self, tag: str | GitTag) -> bool: + """True if a given tag can be ignored""" + tag = tag.name if isinstance(tag, GitTag) else tag + return any(regex.match(tag) for regex in self.ignored_regexes) + + def get_version_tags( + self, tags: Sequence[GitTag], warn: bool = False + ) -> Sequence[GitTag]: + """Filter in version tags and warn on unexpected tags""" + return [tag for tag in tags if self.is_version_tag(tag, warn)] + + def extract_version(self, tag: GitTag) -> Version: + """ + Extract a version from the tag as defined in tag formats. + + Raises `InvalidVersion` if the tag does not match any format. + """ + candidates = ( + m for regex in self.version_regexes if (m := regex.fullmatch(tag.name)) + ) + if not (m := next(candidates, None)): + raise InvalidVersion() + if "version" in m.groupdict(): + return self.scheme(m.group("version")) + + parts = m.groupdict() + version = parts["major"] + + if minor := parts.get("minor"): + version = f"{version}.{minor}" + if patch := parts.get("patch"): + version = f"{version}.{patch}" + + if parts.get("prerelease"): + version = f"{version}-{parts['prerelease']}" + if parts.get("devrelease"): + version = f"{version}{parts['devrelease']}" + return self.scheme(version) + + def include_in_changelog(self, tag: GitTag) -> bool: + """Check if a tag should be included in the changelog""" + try: + version = self.extract_version(tag) + except InvalidVersion: + return False + + if self.merge_prereleases and version.is_prerelease: + return False + + return True + + def search_version(self, text: str, last: bool = False) -> VersionTag | None: + """ + Search the first or last version tag occurrence in text. + + It searches for complete versions only (aka `major`, `minor` and `patch`) + """ + candidates = ( + m for regex in self.version_regexes if len(m := list(regex.finditer(text))) + ) + if not (matches := next(candidates, [])): + return None + + match = matches[-1 if last else 0] + + if "version" in match.groupdict(): + return VersionTag(match.group("version"), match.group(0)) + + parts = match.groupdict() + try: + version = f"{parts['major']}.{parts['minor']}.{parts['patch']}" + except KeyError: + return None + + if parts.get("prerelease"): + version = f"{version}-{parts['prerelease']}" + if parts.get("devrelease"): + version = f"{version}{parts['devrelease']}" + return VersionTag(version, match.group(0)) + + def normalize_tag( + self, version: Version | str, tag_format: str | None = None + ) -> str: + """ + The tag and the software version might be different. + + That's why this function exists. + + Example: + | tag | version (PEP 0440) | + | --- | ------- | + | v0.9.0 | 0.9.0 | + | ver1.0.0 | 1.0.0 | + | ver1.0.0.a0 | 1.0.0a0 | + """ + version = self.scheme(version) if isinstance(version, str) else version + tag_format = tag_format or self.tag_format + + major, minor, patch = version.release + prerelease = version.prerelease or "" + + t = Template(tag_format) + return t.safe_substitute( + version=version, + major=major, + minor=minor, + patch=patch, + prerelease=prerelease, + ) + + def find_tag_for( + self, tags: Sequence[GitTag], version: Version | str + ) -> GitTag | None: + """Find the first matching tag for a given version.""" + version = self.scheme(version) if isinstance(version, str) else version + possible_tags = [ + self.normalize_tag(version, f) + for f in (self.tag_format, *self.legacy_tag_formats) + ] + candidates = [t for t in tags if any(t.name == p for p in possible_tags)] + if len(candidates) > 1: + warnings.warn( + UserWarning( + f"Multiple tags found for version {version}: {', '.join(t.name for t in candidates)}" + ) + ) + return next(iter(candidates), None) + + @classmethod + def from_settings(cls, settings: Settings) -> Self: + """Extract tag rules from settings""" + return cls( + scheme=get_version_scheme(settings), + tag_format=settings["tag_format"], + legacy_tag_formats=settings["legacy_tag_formats"], + ignored_tag_formats=settings["ignored_tag_formats"], + merge_prereleases=settings["changelog_merge_prerelease"], + ) diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index 554864e3bf..2486be58c8 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -22,8 +22,7 @@ from packaging.version import InvalidVersion # noqa: F401: Rexpose the common exception from packaging.version import Version as _BaseVersion -from commitizen.config.base_config import BaseConfig -from commitizen.defaults import MAJOR, MINOR, PATCH +from commitizen.defaults import MAJOR, MINOR, PATCH, Settings from commitizen.exceptions import VersionSchemeUnknown if TYPE_CHECKING: @@ -42,7 +41,7 @@ Increment: TypeAlias = Literal["MAJOR", "MINOR", "PATCH"] Prerelease: TypeAlias = Literal["alpha", "beta", "rc"] -DEFAULT_VERSION_PARSER = r"v?(?P<version>([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?(\w+)?)" +DEFAULT_VERSION_PARSER = r"v?(?P<version>([0-9]+)\.([0-9]+)(?:\.([0-9]+))?(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z.]+)?(\w+)?)" @runtime_checkable @@ -408,14 +407,15 @@ def __str__(self) -> str: """All known registered version schemes""" -def get_version_scheme(config: BaseConfig, name: str | None = None) -> VersionScheme: +def get_version_scheme(settings: Settings, name: str | None = None) -> VersionScheme: """ Get the version scheme as defined in the configuration or from an overridden `name` :raises VersionSchemeUnknown: if the version scheme is not found. """ - deprecated_setting: str | None = config.settings.get("version_type") + # TODO: Remove the deprecated `version_type` handling + deprecated_setting: str | None = settings.get("version_type") if deprecated_setting: warnings.warn( DeprecationWarning( @@ -423,7 +423,7 @@ def get_version_scheme(config: BaseConfig, name: str | None = None) -> VersionSc "Please use `version_scheme` instead" ) ) - name = name or config.settings.get("version_scheme") or deprecated_setting + name = name or settings.get("version_scheme") or deprecated_setting if not name: return DEFAULT_SCHEME diff --git a/docs/config.md b/docs/config.md index 210b5d7ff8..5ec1894872 100644 --- a/docs/config.md +++ b/docs/config.md @@ -51,6 +51,26 @@ Default: `$version` Format for the git tag, useful for old projects, that use a convention like `"v1.2.1"`. [Read more][tag_format] +### `legacy_tag_formats` + +Type: `list` + +Default: `[ ]` + +Legacy git tag formats, useful for old projects that changed tag format. +Tags matching those formats will be recognized as version tags and be included in the changelog. +Each entry use the the syntax as [`tag_format`](#tag_format). [Read more][tag_format] + +### `ignored_tag_formats` + +Type: `list` + +Default: `[ ]` + +Tags matching those formats will be totally ignored and won't raise a warning. +Each entry use the the syntax as [`tag_format`](#tag_format) with the addition of `*` +that will match everything (non-greedy). [Read more][tag_format] + ### `update_changelog_on_bump` Type: `bool` diff --git a/docs/faq.md b/docs/faq.md index 4bcb2bc7cf..29d9f40512 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -107,3 +107,36 @@ If you would like to learn more about both schemes, there are plenty of good res [#173]: https://github.com/commitizen-tools/commitizen/issues/173 [#385]: https://github.com/commitizen-tools/commitizen/pull/385 + +## How to change the tag format ? + +You can use the [`legacy_tag_formats`](config.md#legacy_tag_formats) to list old tag formats. +New bumped tags will be in the new format but old ones will still work for: +- changelog generation (full, incremental and version range) +- bump new version computation (automatically guessed or increment given) + + +So given if you change from `myproject-$version` to `${version}` and then `v${version}`, +your commitizen configuration will look like this: + +```toml +tag_format = "v${version}" +legacy_tag_formats = [ + "${version}", + "myproject-$version", +] +``` + +## How to avoid warnings for expected non-version tags + +You can explicitly ignore them with [`ignored_tag_formats`](config.md#ignored_tag_formats). + +```toml +tag_format = "v${version}" +ignored_tag_formats = [ + "stable", + "component-*", + "env/*", + "v${major}.${minor}", +] +``` diff --git a/docs/tutorials/monorepo_guidance.md b/docs/tutorials/monorepo_guidance.md index ba6d70fd82..817f92321d 100644 --- a/docs/tutorials/monorepo_guidance.md +++ b/docs/tutorials/monorepo_guidance.md @@ -27,6 +27,7 @@ Sample `.cz.toml` for each component: name = "cz_customize" version = "0.0.0" tag_format = "${version}-library-b" # the component name can be a prefix or suffix with or without a separator +ignored_tag_formats = ["${version}-library-*"] # Avoid noise from other tags update_changelog_on_bump = true ``` @@ -36,6 +37,7 @@ update_changelog_on_bump = true name = "cz_customize" version = "0.0.0" tag_format = "${version}-library-z" +ignored_tag_formats = ["${version}-library-*"] # Avoid noise from other tags update_changelog_on_bump = true ``` diff --git a/docs/tutorials/tag_format.md b/docs/tutorials/tag_format.md new file mode 100644 index 0000000000..59c42bea13 --- /dev/null +++ b/docs/tutorials/tag_format.md @@ -0,0 +1,101 @@ +# Managing tag formats + +## Tag format and version scheme + +For most projects, the tag format is simply the version number which is set like this: + +```yaml +[tool.commitizen] +tag_format: $version +version_scheme: pep440 +``` + +As this is the default value so you don't have to specify it. + +This setting means that: + +- The tag generated on bump will have this format: `1.0.0` : + - the version is generated following PEP440 scheme + - the tag is exactly the generated version +- All tags having this format will be recognized as version tag when: + - searching the last while bumping a release + - searching previous versions while: + - generating incremental changelog + - generating a changelog for a version range +- The changelog versions (section titles) will have this format +- The `scm` version provider will identify the current version using this tag format + +The version format will change depending on your configured version scheme. +For most, it will only impact pre-releases and [developmental releases](dev_releases.md) formats (i.e. `1.0.0-rc.1` vs. `1.0.0.rc1`) + +But you may need a different tagging convention, let's say using `semver` and prefixed with a `v`. +In this case you will define your settings like this: + +```yaml +[tool.commitizen] +tag_format: v${version} +version_scheme: semver +``` + +As a result, the tag generated on bump will have this format: `v1.0.0` and the version will be generated following `semver` scheme. + +!!! note + Both `$version` and `${version}` syntaxes are strictly equivalent. You can use the one you prefer. + +See [the `version_scheme` section in `bump` command documentation](../commands/bump.md#version_scheme) for more details on version schemes and how to define your own. +See [`tag_format`](../config.md#tag_format) and [`version_scheme`](../config.md#version_scheme) settings in [Configuration reference](../config.md) for more details on these settings. + +## Changing convention + +Now, let's say you need to change the tag format for some reason (company convention, [migration to a monorepo](monorepo_guidance.md)...). +You will obviously want to keep all those features working as expected. + +Commitizen can deal with it as long as you provide the legacy tag format in the configuration. + +Using the previous example, let say you want to move from `v${version}` to `component-${version}`. +Then `component-${version}` will be the new tag format and `v${version}` the legacy one. + +```yaml +[tool.commitizen] +tag_format: component-${version} +legacy_tag_formats: + - v${version} +``` + +This way, you won't loose your version history, you'll still be able to generate you changelog properly +and on the next version bump, your last version in the form `v${version}` will be properly recognizef if you use the `scm` version provider. +Your new tag will be in the form `component-${version}`. + +## Known tags to ignore + +Now let's say you have some known tags you want to ignore, either because they are not versions, either because they are not versions of the component you are dealing with. +As a consequence, you don't want them to trigger a warning because Commitizen detected an unknown tag format: + +Then you can tell Commitizen about it using the [`ignored_tag_formats`](../config.md#ignored_tag_formats) setting: + +```yaml +[tool.commitizen] +ignored_tag_formats: + - prod + - other-component-${version} + - prefix-* +``` + +This will ignore: + +- The `prod` tag +- Any version tag prefixed with `other-component-` +- Any tag prefixed with `prefix-` + + +!!! tip + Note the `*` in the `prefix-*` pattern. This is a wildcard and only exists for `ignored_tag_formats`. + It will match any string from any length. This allows to exclude by prefix, whether it is followed by a version or not. + +!!! tip + If you don't want to be warned when Commitizen detect an unknown tag, you can by setting: + ``` + [tool.commitizen] + ignored_tag_formats = ["*"] + ``` + But be aware that you will not be warned if you have a typo in your tag formats. diff --git a/mkdocs.yml b/mkdocs.yml index f6a7eaa421..6a642161d2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -47,6 +47,7 @@ nav: - Customization: "customization.md" - Tutorials: - Writing commits: "tutorials/writing_commits.md" + - Managing tags formats: "tutorials/tag_format.md" - Auto check commits: "tutorials/auto_check.md" - Auto prepare commit message: "tutorials/auto_prepare_commit_message.md" - GitLab CI: "tutorials/gitlab_ci.md" diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 52e2defde0..b5ff7e6edb 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -7,6 +7,7 @@ from textwrap import dedent from unittest.mock import MagicMock, call +import py import pytest from pytest_mock import MockFixture @@ -1627,3 +1628,31 @@ def test_bump_allow_no_commit_with_manual_version( cli.main() out, _ = capsys.readouterr() assert "bump: version 1.0.0 → 2.0.0" in out + + +def test_bump_detect_legacy_tags_from_scm( + tmp_commitizen_project: py.path.local, mocker: MockFixture +): + project_root = Path(tmp_commitizen_project) + tmp_commitizen_cfg_file = project_root / "pyproject.toml" + tmp_commitizen_cfg_file.write_text( + "\n".join( + [ + "[tool.commitizen]", + 'version_provider = "scm"', + 'tag_format = "v$version"', + "legacy_tag_formats = [", + ' "legacy-${version}"', + "]", + ] + ), + ) + create_file_and_commit("feat: new file") + create_tag("legacy-0.4.2") + create_file_and_commit("feat: new file") + + testargs = ["cz", "bump", "--increment", "patch", "--changelog"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + assert git.tag_exist("v0.4.3") diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index a6ff7db2d8..f794b8d9f3 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -8,6 +8,7 @@ from dateutil import relativedelta from jinja2 import FileSystemLoader from pytest_mock import MockFixture +from pytest_regressions.file_regression import FileRegressionFixture from commitizen import __file__ as commitizen_init from commitizen import cli, git @@ -954,8 +955,17 @@ def test_changelog_from_rev_latest_version_from_arg( @pytest.mark.usefixtures("tmp_commitizen_project") @pytest.mark.freeze_time("2022-02-13") -def test_changelog_from_rev_single_version_not_found( - mocker: MockFixture, config_path, changelog_path +@pytest.mark.parametrize( + "rev_range,tag", + ( + pytest.param("0.8.0", "0.2.0", id="single-not-found"), + pytest.param("0.1.0..0.3.0", "0.3.0", id="lower-bound-not-found"), + pytest.param("0.1.0..0.3.0", "0.1.0", id="upper-bound-not-found"), + pytest.param("0.3.0..0.4.0", "0.2.0", id="none-found"), + ), +) +def test_changelog_from_rev_range_not_found( + mocker: MockFixture, config_path, rev_range: str, tag: str ): """Provides an invalid revision ID to changelog command""" with open(config_path, "a", encoding="utf-8") as f: @@ -963,26 +973,46 @@ def test_changelog_from_rev_single_version_not_found( # create commit and tag create_file_and_commit("feat: new file") - testargs = ["cz", "bump", "--yes"] + create_tag(tag) + create_file_and_commit("feat: new file") + create_tag("1.0.0") + + testargs = ["cz", "changelog", rev_range] # it shouldn't exist mocker.patch.object(sys, "argv", testargs) - cli.main() + with pytest.raises(NoCommitsFoundError) as excinfo: + cli.main() - wait_for_tag() + assert "Could not find a valid revision" in str(excinfo) - create_file_and_commit("feat: after 0.2.0") - create_file_and_commit("feat: another feature") - testargs = ["cz", "bump", "--yes"] - mocker.patch.object(sys, "argv", testargs) - cli.main() - wait_for_tag() +@pytest.mark.usefixtures("tmp_commitizen_project") +@pytest.mark.freeze_time("2022-02-13") +def test_changelog_multiple_matching_tags( + mocker: MockFixture, config_path, changelog_path +): + with open(config_path, "a", encoding="utf-8") as f: + f.write('tag_format = "new-$version"\nlegacy_tag_formats = ["legacy-$version"]') + + create_file_and_commit("feat: new file") + create_tag("legacy-1.0.0") + create_file_and_commit("feat: new file") + create_tag("legacy-2.0.0") + create_tag("new-2.0.0") - testargs = ["cz", "changelog", "0.8.0"] # it shouldn't exist + testargs = ["cz", "changelog", "1.0.0..2.0.0"] # it shouldn't exist mocker.patch.object(sys, "argv", testargs) - with pytest.raises(NoCommitsFoundError) as excinfo: + with pytest.warns() as warnings: cli.main() - assert "Could not find a valid revision" in str(excinfo) + assert len(warnings) == 1 + warning = warnings[0] + assert "Multiple tags found for version 2.0.0" in str(warning.message) + + with open(changelog_path) as f: + out = f.read() + + # Ensure only one tag is rendered + assert out.count("2.0.0") == 1 @pytest.mark.usefixtures("tmp_commitizen_project") @@ -1016,34 +1046,6 @@ def test_changelog_from_rev_range_default_tag_format( assert "new file" not in out -@pytest.mark.usefixtures("tmp_commitizen_project") -@pytest.mark.freeze_time("2022-02-13") -def test_changelog_from_rev_range_version_not_found(mocker: MockFixture, config_path): - """Provides an invalid end revision ID to changelog command""" - with open(config_path, "a", encoding="utf-8") as f: - f.write('tag_format = "$version"\n') - - # create commit and tag - create_file_and_commit("feat: new file") - testargs = ["cz", "bump", "--yes"] - mocker.patch.object(sys, "argv", testargs) - cli.main() - - create_file_and_commit("feat: after 0.2.0") - create_file_and_commit("feat: another feature") - - testargs = ["cz", "bump", "--yes"] - mocker.patch.object(sys, "argv", testargs) - cli.main() - - testargs = ["cz", "changelog", "0.5.0..0.8.0"] # it shouldn't exist - mocker.patch.object(sys, "argv", testargs) - with pytest.raises(NoCommitsFoundError) as excinfo: - cli.main() - - assert "Could not find a valid revision" in str(excinfo) - - @pytest.mark.usefixtures("tmp_commitizen_project") @pytest.mark.freeze_time("2022-02-13") def test_changelog_from_rev_version_range_including_first_tag( @@ -1116,6 +1118,41 @@ def test_changelog_from_rev_version_range_from_arg( file_regression.check(out, extension=".md") +@pytest.mark.usefixtures("tmp_commitizen_project") +@pytest.mark.freeze_time("2022-02-13") +def test_changelog_from_rev_version_range_with_legacy_tags( + mocker: MockFixture, config_path, changelog_path, file_regression +): + mocker.patch("commitizen.git.GitTag.date", "2022-02-13") + + changelog = Path(changelog_path) + Path(config_path).write_text( + "\n".join( + [ + "[tool.commitizen]", + 'version_provider = "scm"', + 'tag_format = "v$version"', + "legacy_tag_formats = [", + ' "legacy-${version}",', + ' "old-${version}",', + "]", + ] + ), + ) + + create_file_and_commit("feat: new file") + create_tag("old-0.2.0") + create_file_and_commit("feat: new file") + create_tag("legacy-0.3.0") + create_file_and_commit("feat: new file") + create_tag("legacy-0.4.0") + + testargs = ["cz", "changelog", "0.2.0..0.4.0"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + file_regression.check(changelog.read_text(), extension=".md") + + @pytest.mark.usefixtures("tmp_commitizen_project") @pytest.mark.freeze_time("2022-02-13") def test_changelog_from_rev_version_with_big_range_from_arg( @@ -1639,6 +1676,127 @@ def test_changelog_only_tag_matching_tag_format_included_suffix_sep( assert "## 0.2.0 (2021-06-11)" not in out +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_changelog_legacy_tags( + mocker: MockFixture, + changelog_path: Path, + config_path: Path, +): + with open(config_path, "a", encoding="utf-8") as f: + f.writelines( + [ + 'tag_format = "v${version}"\n', + "legacy_tag_formats = [\n", + ' "older-${version}",\n', + ' "oldest-${version}",\n', + "]\n", + ] + ) + create_file_and_commit("feat: new file") + git.tag("oldest-0.1.0") + create_file_and_commit("feat: new file") + git.tag("older-0.2.0") + create_file_and_commit("feat: another new file") + git.tag("v0.3.0") + create_file_and_commit("feat: another new file") + git.tag("not-0.3.1") + testargs = ["cz", "bump", "--changelog", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + out = open(changelog_path).read() + assert "## v0.3.0" in out + assert "## older-0.2.0" in out + assert "## oldest-0.1.0" in out + assert "## v0.3.0" in out + assert "## not-0.3.1" not in out + + +@pytest.mark.usefixtures("tmp_commitizen_project") +@pytest.mark.freeze_time("2024-11-18") +def test_changelog_incremental_change_tag_format( + mocker: MockFixture, + changelog_path: Path, + config_path: Path, + file_regression: FileRegressionFixture, +): + mocker.patch("commitizen.git.GitTag.date", "2024-11-18") + config = Path(config_path) + base_config = config.read_text() + config.write_text( + "\n".join( + ( + base_config, + 'tag_format = "older-${version}"', + ) + ) + ) + create_file_and_commit("feat: new file") + git.tag("older-0.1.0") + create_file_and_commit("feat: new file") + git.tag("older-0.2.0") + mocker.patch.object(sys, "argv", ["cz", "changelog"]) + cli.main() + + config.write_text( + "\n".join( + ( + base_config, + 'tag_format = "v${version}"', + 'legacy_tag_formats = ["older-${version}"]', + ) + ) + ) + create_file_and_commit("feat: another new file") + git.tag("v0.3.0") + mocker.patch.object(sys, "argv", ["cz", "changelog", "--incremental"]) + cli.main() + out = open(changelog_path).read() + assert "## v0.3.0" in out + assert "## older-0.2.0" in out + assert "## older-0.1.0" in out + file_regression.check(out, extension=".md") + + +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_changelog_ignored_tags( + mocker: MockFixture, + changelog_path: Path, + config_path: Path, + capsys: pytest.CaptureFixture, +): + with open(config_path, "a", encoding="utf-8") as f: + f.writelines( + [ + 'tag_format = "v${version}"\n', + "ignored_tag_formats = [\n", + ' "ignored",\n', + ' "ignore-${version}",\n', + "]\n", + ] + ) + create_file_and_commit("feat: new file") + git.tag("ignore-0.1.0") + create_file_and_commit("feat: new file") + git.tag("ignored") + create_file_and_commit("feat: another new file") + git.tag("v0.3.0") + create_file_and_commit("feat: another new file") + git.tag("not-ignored") + testargs = ["cz", "bump", "--changelog", "--yes"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + out = open(changelog_path).read() + _, err = capsys.readouterr() + assert "## ignore-0.1.0" not in out + assert "InvalidVersion ignore-0.1.0" not in err + assert "## ignored" not in out + assert "InvalidVersion ignored" not in err + assert "## not-ignored" not in out + assert "InvalidVersion not-ignored" in err + assert "## v0.3.0" in out + assert "InvalidVersion v0.3.0" not in err + + def test_changelog_template_extra_quotes( mocker: MockFixture, tmp_commitizen_project: Path, diff --git a/tests/commands/test_changelog_command/test_changelog_from_rev_version_range_with_legacy_tags.md b/tests/commands/test_changelog_command/test_changelog_from_rev_version_range_with_legacy_tags.md new file mode 100644 index 0000000000..5d37333aa5 --- /dev/null +++ b/tests/commands/test_changelog_command/test_changelog_from_rev_version_range_with_legacy_tags.md @@ -0,0 +1,17 @@ +## legacy-0.4.0 (2022-02-13) + +### Feat + +- new file + +## legacy-0.3.0 (2022-02-13) + +### Feat + +- new file + +## old-0.2.0 (2022-02-13) + +### Feat + +- new file diff --git a/tests/commands/test_changelog_command/test_changelog_incremental_change_tag_format.md b/tests/commands/test_changelog_command/test_changelog_incremental_change_tag_format.md new file mode 100644 index 0000000000..2f0cc2909e --- /dev/null +++ b/tests/commands/test_changelog_command/test_changelog_incremental_change_tag_format.md @@ -0,0 +1,17 @@ +## v0.3.0 (2024-11-18) + +### Feat + +- another new file + +## older-0.2.0 (2024-11-18) + +### Feat + +- new file + +## older-0.1.0 (2024-11-18) + +### Feat + +- new file diff --git a/tests/providers/test_scm_provider.py b/tests/providers/test_scm_provider.py index 01e7ab9943..9d955b2323 100644 --- a/tests/providers/test_scm_provider.py +++ b/tests/providers/test_scm_provider.py @@ -113,3 +113,26 @@ def test_scm_provider_default_with_commits_and_tags(config: BaseConfig): merge_branch("master") assert provider.get_version() == "1.1.0rc0" + + +@pytest.mark.usefixtures("tmp_git_project") +def test_scm_provider_detect_legacy_tags(config: BaseConfig): + config.settings["version_provider"] = "scm" + config.settings["tag_format"] = "v${version}" + config.settings["legacy_tag_formats"] = [ + "legacy-${version}", + "old-${version}", + ] + provider = get_provider(config) + + create_file_and_commit("test: fake commit") + create_tag("old-0.4.1") + assert provider.get_version() == "0.4.1" + + create_file_and_commit("test: fake commit") + create_tag("legacy-0.4.2") + assert provider.get_version() == "0.4.2" + + create_file_and_commit("test: fake commit") + create_tag("v0.5.0") + assert provider.get_version() == "0.5.0" diff --git a/tests/test_bump_normalize_tag.py b/tests/test_bump_normalize_tag.py index c1eb696afd..895acbd71a 100644 --- a/tests/test_bump_normalize_tag.py +++ b/tests/test_bump_normalize_tag.py @@ -1,6 +1,6 @@ import pytest -from commitizen import bump +from commitizen.tags import TagRules conversion = [ (("1.2.3", "v$version"), "v1.2.3"), @@ -18,5 +18,6 @@ @pytest.mark.parametrize("test_input,expected", conversion) def test_create_tag(test_input, expected): version, format = test_input - new_tag = bump.normalize_tag(version, format) + rules = TagRules() + new_tag = rules.normalize_tag(version, format) assert new_tag == expected diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 76ee80600b..accbf5d33c 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1,4 +1,5 @@ import re +from dataclasses import dataclass from pathlib import Path from typing import Optional @@ -11,6 +12,7 @@ ConventionalCommitsCz, ) from commitizen.exceptions import InvalidConfigurationError +from commitizen.version_schemes import Pep440 COMMITS_DATA = [ { @@ -522,12 +524,14 @@ def test_get_commit_tag_is_None(gitcommits, tags): @pytest.mark.parametrize("test_input", TAGS) def test_valid_tag_included_in_changelog(test_input): tag = git.GitTag(*test_input) - assert changelog.tag_included_in_changelog(tag, [], False) + rules = changelog.TagRules() + assert rules.include_in_changelog(tag) def test_invalid_tag_included_in_changelog(): tag = git.GitTag("not_a_version", "rev", "date") - assert not changelog.tag_included_in_changelog(tag, [], False) + rules = changelog.TagRules() + assert not rules.include_in_changelog(tag) COMMITS_TREE = ( @@ -1080,8 +1084,11 @@ def test_invalid_tag_included_in_changelog(): def test_generate_tree_from_commits(gitcommits, tags, merge_prereleases): parser = ConventionalCommitsCz.commit_parser changelog_pattern = ConventionalCommitsCz.bump_pattern + rules = changelog.TagRules( + merge_prereleases=merge_prereleases, + ) tree = changelog.generate_tree_from_commits( - gitcommits, tags, parser, changelog_pattern, merge_prerelease=merge_prereleases + gitcommits, tags, parser, changelog_pattern, rules=rules ) expected = ( COMMITS_TREE_AFTER_MERGED_PRERELEASES if merge_prereleases else COMMITS_TREE @@ -1451,3 +1458,105 @@ def test_get_smart_tag_range_returns_an_extra_for_a_single_tag(tags): start = tags[0] # len here is 1, but we expect one more tag as designed res = changelog.get_smart_tag_range(tags, start.name) assert 2 == len(res) + + +@dataclass +class TagDef: + name: str + is_version: bool + is_legacy: bool + is_ignored: bool + + +TAGS_PARAMS = ( + pytest.param(TagDef("1.2.3", True, False, False), id="version"), + # We test with `v-` prefix as `v` prefix is a special case kept for backward compatibility + pytest.param(TagDef("v-1.2.3", False, True, False), id="v-prefix"), + pytest.param(TagDef("project-1.2.3", False, True, False), id="project-prefix"), + pytest.param(TagDef("ignored", False, False, True), id="ignored"), + pytest.param(TagDef("unknown", False, False, False), id="unknown"), +) + + +@pytest.mark.parametrize("tag", TAGS_PARAMS) +def test_tag_rules_tag_format_only(tag: TagDef): + rules = changelog.TagRules(Pep440, "$version") + assert rules.is_version_tag(tag.name) is tag.is_version + + +@pytest.mark.parametrize("tag", TAGS_PARAMS) +def test_tag_rules_with_legacy_tags(tag: TagDef): + rules = changelog.TagRules( + scheme=Pep440, + tag_format="$version", + legacy_tag_formats=["v-$version", "project-${version}"], + ) + assert rules.is_version_tag(tag.name) is tag.is_version or tag.is_legacy + + +@pytest.mark.parametrize("tag", TAGS_PARAMS) +def test_tag_rules_with_ignored_tags(tag: TagDef): + rules = changelog.TagRules( + scheme=Pep440, tag_format="$version", ignored_tag_formats=["ignored"] + ) + assert rules.is_ignored_tag(tag.name) is tag.is_ignored + + +def test_tags_rules_get_version_tags(capsys: pytest.CaptureFixture): + tags = [ + git.GitTag("v1.1.0", "17efb44d2cd16f6621413691a543e467c7d2dda6", "2019-04-14"), + git.GitTag("v1.0.0", "aa44a92d68014d0da98965c0c2cb8c07957d4362", "2019-03-01"), + git.GitTag("1.0.0b2", "aab33d13110f26604fb786878856ec0b9e5fc32b", "2019-01-18"), + git.GitTag( + "project-not-a-version", + "7c7e96b723c2aaa1aec3a52561f680adf0b60e97", + "2019-01-17", + ), + git.GitTag( + "not-a-version", "c52eca6f74f844ab3ffbde61d98ef96071e132b7", "2018-12-17" + ), + git.GitTag( + "star-something", "c52eca6f74f844ab3ffbde61d98fe96071e132b2", "2018-11-12" + ), + git.GitTag("known", "b3f89892222340150e32631ae6b7aab65230036f", "2018-09-22"), + git.GitTag( + "ignored-0.9.3", "684e0259cc95c7c5e94854608cd3dcebbd53219e", "2018-09-22" + ), + git.GitTag( + "project-0.9.3", "dacc86159b260ee98eb5f57941c99ba731a01399", "2018-07-28" + ), + git.GitTag( + "anything-0.9", "5141f54503d2e1cf39bd666c0ca5ab5eb78772ab", "2018-01-10" + ), + git.GitTag( + "project-0.9.2", "1541f54503d2e1cf39bd777c0ca5ab5eb78772ba", "2017-11-11" + ), + git.GitTag( + "ignored-0.9.1", "46e9032e18a819e466618c7a014bcb0e9981af9e", "2017-11-11" + ), + ] + + rules = changelog.TagRules( + scheme=Pep440, + tag_format="v$version", + legacy_tag_formats=["$version", "project-${version}"], + ignored_tag_formats=[ + "known", + "ignored-${version}", + "star-*", + "*-${major}.${minor}", + ], + ) + + version_tags = rules.get_version_tags(tags, warn=True) + assert {t.name for t in version_tags} == { + "v1.1.0", + "v1.0.0", + "1.0.0b2", + "project-0.9.3", + "project-0.9.2", + } + + captured = capsys.readouterr() + assert captured.err.count("InvalidVersion") == 2 + assert captured.err.count("not-a-version") == 2 diff --git a/tests/test_changelog_format_asciidoc.py b/tests/test_changelog_format_asciidoc.py index 0c5930df46..59ca56191e 100644 --- a/tests/test_changelog_format_asciidoc.py +++ b/tests/test_changelog_format_asciidoc.py @@ -55,6 +55,7 @@ """ EXPECTED_C = Metadata( latest_version="1.0.0", + latest_version_tag="v1.0.0", latest_version_position=3, unreleased_end=3, unreleased_start=1, @@ -105,20 +106,21 @@ def format(config: BaseConfig) -> AsciiDoc: @pytest.fixture def format_with_tags(config: BaseConfig, request) -> AsciiDoc: config.settings["tag_format"] = request.param + config.settings["legacy_tag_formats"] = ["legacy-${version}"] return AsciiDoc(config) VERSIONS_EXAMPLES = [ - ("== [1.0.0] - 2017-06-20", "1.0.0"), + ("== [1.0.0] - 2017-06-20", ("1.0.0", "1.0.0")), ( "= https://github.com/angular/angular/compare/10.0.0-next.2...10.0.0-next.3[10.0.0-next.3] (2020-04-22)", - "10.0.0-next.3", + ("10.0.0-next.3", "10.0.0-next.3"), ), - ("=== 0.19.1 (Jan 7, 2020)", "0.19.1"), - ("== 1.0.0", "1.0.0"), - ("== v1.0.0", "1.0.0"), - ("== v1.0.0 - (2012-24-32)", "1.0.0"), - ("= version 2020.03.24", "2020.03.24"), + ("=== 0.19.1 (Jan 7, 2020)", ("0.19.1", "0.19.1")), + ("== 1.0.0", ("1.0.0", "1.0.0")), + ("== v1.0.0", ("1.0.0", "v1.0.0")), + ("== v1.0.0 - (2012-24-32)", ("1.0.0", "v1.0.0")), + ("= version 2020.03.24", ("2020.03.24", "2020.03.24")), ("== [Unreleased]", None), ("All notable changes to this project will be documented in this file.", None), ("= Changelog", None), @@ -128,7 +130,7 @@ def format_with_tags(config: BaseConfig, request) -> AsciiDoc: @pytest.mark.parametrize("line_from_changelog,output_version", VERSIONS_EXAMPLES) def test_changelog_detect_version( - line_from_changelog: str, output_version: str, format: AsciiDoc + line_from_changelog: str, output_version: tuple[str, str] | None, format: AsciiDoc ): version = format.parse_version_from_title(line_from_changelog) assert version == output_version @@ -186,6 +188,7 @@ def test_get_matadata( "1-0-0-a1.dev1-example", "1.0.0-a1.dev1", ), + pytest.param("new-${version}", "legacy-1.0.0", "1.0.0"), ), indirect=["format_with_tags"], ) diff --git a/tests/test_changelog_format_markdown.py b/tests/test_changelog_format_markdown.py index 52612b8e2b..e1f0d67311 100644 --- a/tests/test_changelog_format_markdown.py +++ b/tests/test_changelog_format_markdown.py @@ -55,6 +55,7 @@ """ EXPECTED_C = Metadata( latest_version="1.0.0", + latest_version_tag="v1.0.0", latest_version_position=3, unreleased_end=3, unreleased_start=1, @@ -105,20 +106,21 @@ def format(config: BaseConfig) -> Markdown: @pytest.fixture def format_with_tags(config: BaseConfig, request) -> Markdown: config.settings["tag_format"] = request.param + config.settings["legacy_tag_formats"] = ["legacy-${version}"] return Markdown(config) VERSIONS_EXAMPLES = [ - ("## [1.0.0] - 2017-06-20", "1.0.0"), + ("## [1.0.0] - 2017-06-20", ("1.0.0", "1.0.0")), ( "# [10.0.0-next.3](https://github.com/angular/angular/compare/10.0.0-next.2...10.0.0-next.3) (2020-04-22)", - "10.0.0-next.3", + ("10.0.0-next.3", "10.0.0-next.3"), ), - ("### 0.19.1 (Jan 7, 2020)", "0.19.1"), - ("## 1.0.0", "1.0.0"), - ("## v1.0.0", "1.0.0"), - ("## v1.0.0 - (2012-24-32)", "1.0.0"), - ("# version 2020.03.24", "2020.03.24"), + ("### 0.19.1 (Jan 7, 2020)", ("0.19.1", "0.19.1")), + ("## 1.0.0", ("1.0.0", "1.0.0")), + ("## v1.0.0", ("1.0.0", "v1.0.0")), + ("## v1.0.0 - (2012-24-32)", ("1.0.0", "v1.0.0")), + ("# version 2020.03.24", ("2020.03.24", "2020.03.24")), ("## [Unreleased]", None), ("All notable changes to this project will be documented in this file.", None), ("# Changelog", None), @@ -128,7 +130,7 @@ def format_with_tags(config: BaseConfig, request) -> Markdown: @pytest.mark.parametrize("line_from_changelog,output_version", VERSIONS_EXAMPLES) def test_changelog_detect_version( - line_from_changelog: str, output_version: str, format: Markdown + line_from_changelog: str, output_version: tuple[str, str] | None, format: Markdown ): version = format.parse_version_from_title(line_from_changelog) assert version == output_version @@ -191,6 +193,7 @@ def test_get_matadata( "1-0-0-a1.dev1-example", "1.0.0-a1.dev1", ), + pytest.param("new-${version}", "legacy-1.0.0", "1.0.0"), ), indirect=["format_with_tags"], ) diff --git a/tests/test_changelog_format_restructuredtext.py b/tests/test_changelog_format_restructuredtext.py index 11356ae28f..74b6b736f9 100644 --- a/tests/test_changelog_format_restructuredtext.py +++ b/tests/test_changelog_format_restructuredtext.py @@ -22,6 +22,7 @@ def case( content: str, latest_version: str | None = None, latest_version_position: int | None = None, + latest_version_tag: str | None = None, unreleased_start: int | None = None, unreleased_end: int | None = None, ): @@ -30,6 +31,7 @@ def case( dedent(content).strip(), Metadata( latest_version=latest_version, + latest_version_tag=latest_version_tag, latest_version_position=latest_version_position, unreleased_start=unreleased_start, unreleased_end=unreleased_end, @@ -93,6 +95,7 @@ def case( ====== """, latest_version="1.0.0", + latest_version_tag="v1.0.0", latest_version_position=3, unreleased_start=0, unreleased_end=3, @@ -303,6 +306,7 @@ def format(config: BaseConfig) -> RestructuredText: @pytest.fixture def format_with_tags(config: BaseConfig, request) -> RestructuredText: config.settings["tag_format"] = request.param + config.settings["legacy_tag_formats"] = ["legacy-${version}"] return RestructuredText(config) @@ -357,6 +361,7 @@ def test_is_overlined_title(format: RestructuredText, text: str, expected: bool) "1-0-0-a1.dev1-example", "1.0.0-a1.dev1", ), + pytest.param("new-${version}", "legacy-1.0.0", "1.0.0"), ), indirect=["format_with_tags"], ) diff --git a/tests/test_changelog_format_textile.py b/tests/test_changelog_format_textile.py index 3fac5c1756..eb03484ad5 100644 --- a/tests/test_changelog_format_textile.py +++ b/tests/test_changelog_format_textile.py @@ -55,6 +55,7 @@ """ EXPECTED_C = Metadata( latest_version="1.0.0", + latest_version_tag="v1.0.0", latest_version_position=3, unreleased_end=3, unreleased_start=1, @@ -98,20 +99,21 @@ def format(config: BaseConfig) -> Textile: @pytest.fixture def format_with_tags(config: BaseConfig, request) -> Textile: config.settings["tag_format"] = request.param + config.settings["legacy_tag_formats"] = ["legacy-${version}"] return Textile(config) VERSIONS_EXAMPLES = [ - ("h2. [1.0.0] - 2017-06-20", "1.0.0"), + ("h2. [1.0.0] - 2017-06-20", ("1.0.0", "1.0.0")), ( 'h1. "10.0.0-next.3":https://github.com/angular/angular/compare/10.0.0-next.2...10.0.0-next.3 (2020-04-22)', - "10.0.0-next.3", + ("10.0.0-next.3", "10.0.0-next.3"), ), - ("h3. 0.19.1 (Jan 7, 2020)", "0.19.1"), - ("h2. 1.0.0", "1.0.0"), - ("h2. v1.0.0", "1.0.0"), - ("h2. v1.0.0 - (2012-24-32)", "1.0.0"), - ("h1. version 2020.03.24", "2020.03.24"), + ("h3. 0.19.1 (Jan 7, 2020)", ("0.19.1", "0.19.1")), + ("h2. 1.0.0", ("1.0.0", "1.0.0")), + ("h2. v1.0.0", ("1.0.0", "v1.0.0")), + ("h2. v1.0.0 - (2012-24-32)", ("1.0.0", "v1.0.0")), + ("h1. version 2020.03.24", ("2020.03.24", "2020.03.24")), ("h2. [Unreleased]", None), ("All notable changes to this project will be documented in this file.", None), ("h1. Changelog", None), @@ -121,7 +123,7 @@ def format_with_tags(config: BaseConfig, request) -> Textile: @pytest.mark.parametrize("line_from_changelog,output_version", VERSIONS_EXAMPLES) def test_changelog_detect_version( - line_from_changelog: str, output_version: str, format: Textile + line_from_changelog: str, output_version: tuple[str, str] | None, format: Textile ): version = format.parse_version_from_title(line_from_changelog) assert version == output_version @@ -179,6 +181,7 @@ def test_get_matadata( "1-0-0-a1.dev1-example", "1.0.0-a1.dev1", ), + pytest.param("new-${version}", "legacy-1.0.0", "1.0.0"), ), indirect=["format_with_tags"], ) diff --git a/tests/test_conf.py b/tests/test_conf.py index 3e0a44c7dd..80d58983e7 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -72,6 +72,8 @@ "version_provider": "commitizen", "version_scheme": None, "tag_format": "$version", + "legacy_tag_formats": [], + "ignored_tag_formats": [], "bump_message": None, "retry_after_failure": False, "allow_abort": False, @@ -101,6 +103,8 @@ "version_provider": "commitizen", "version_scheme": None, "tag_format": "$version", + "legacy_tag_formats": [], + "ignored_tag_formats": [], "bump_message": None, "retry_after_failure": False, "allow_abort": False, diff --git a/tests/test_version_schemes.py b/tests/test_version_schemes.py index 686c0bfde1..8e2dae9027 100644 --- a/tests/test_version_schemes.py +++ b/tests/test_version_schemes.py @@ -16,31 +16,31 @@ def test_default_version_scheme_is_pep440(config: BaseConfig): - scheme = get_version_scheme(config) + scheme = get_version_scheme(config.settings) assert scheme is Pep440 def test_version_scheme_from_config(config: BaseConfig): config.settings["version_scheme"] = "semver" - scheme = get_version_scheme(config) + scheme = get_version_scheme(config.settings) assert scheme is SemVer def test_version_scheme_from_name(config: BaseConfig): config.settings["version_scheme"] = "pep440" - scheme = get_version_scheme(config, "semver") + scheme = get_version_scheme(config.settings, "semver") assert scheme is SemVer def test_raise_for_unknown_version_scheme(config: BaseConfig): with pytest.raises(VersionSchemeUnknown): - get_version_scheme(config, "unknown") + get_version_scheme(config.settings, "unknown") def test_version_scheme_from_deprecated_config(config: BaseConfig): config.settings["version_type"] = "semver" with pytest.warns(DeprecationWarning): - scheme = get_version_scheme(config) + scheme = get_version_scheme(config.settings) assert scheme is SemVer @@ -48,7 +48,7 @@ def test_version_scheme_from_config_priority(config: BaseConfig): config.settings["version_scheme"] = "pep440" config.settings["version_type"] = "semver" with pytest.warns(DeprecationWarning): - scheme = get_version_scheme(config) + scheme = get_version_scheme(config.settings) assert scheme is Pep440 @@ -63,4 +63,4 @@ class NotVersionProtocol: mocker.patch.object(metadata, "entry_points", return_value=(ep,)) with pytest.warns(match="VersionProtocol"): - get_version_scheme(config, "any") + get_version_scheme(config.settings, "any") From 9aae58e56cf24b6f5e43250d818edd564de072dc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sun, 2 Mar 2025 15:26:50 +0000 Subject: [PATCH 505/685] =?UTF-8?q?bump:=20version=204.3.0=20=E2=86=92=204?= =?UTF-8?q?.4.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 10 ++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index dd16cc9cc4..c8861315d4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.3.0 # automatically updated by Commitizen + rev: v4.4.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index fa7409d227..30d2b76595 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## v4.4.0 (2025-03-02) + +### Feat + +- **tags**: adds `legacy_tag_formats` and `ignored_tag_formats` settings + +### Refactor + +- **get_tag_regexes**: dedup tag regexes definition + ## v4.3.0 (2025-02-28) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 111dc9172a..ecdb1cef9e 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.3.0" +__version__ = "4.4.0" diff --git a/pyproject.toml b/pyproject.toml index 0c03a6d508..570eabd3a6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.3.0" +version = "4.4.0" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -87,7 +87,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.3.0" +version = "4.4.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", From bc8479e7aa1a5b9d2f491b79e3a4d4015519903c Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 2 Mar 2025 23:27:56 +0800 Subject: [PATCH 506/685] docs(config): add uv provider description (#1362) --- docs/config.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/config.md b/docs/config.md index 5ec1894872..3d53249585 100644 --- a/docs/config.md +++ b/docs/config.md @@ -352,6 +352,7 @@ Commitizen provides some version providers for some well known formats: | `scm` | Fetch the version from git and does not need to set it back | | `pep621` | Get and set version from `pyproject.toml` `project.version` field | | `poetry` | Get and set version from `pyproject.toml` `tool.poetry.version` field | +| `uv` | Get and set version from `pyproject.toml` `project.version` field and `uv.lock` `pacakge.version` field whose `package.name` field is the same as `pyproject.toml` `project.name` field | | `cargo` | Get and set version from `Cargo.toml` `project.version` field | | `npm` | Get and set version from `package.json` `version` field, `package-lock.json` `version,packages.''.version` fields if the file exists, and `npm-shrinkwrap.json` `version,packages.''.version` fields if the file exists | | `composer` | Get and set version from `composer.json` `project.version` field | From 79dd19dc132de2fae6d3f07e4f17383bac6b99e8 Mon Sep 17 00:00:00 2001 From: Jakob Keller <57402305+jakob-keller@users.noreply.github.com> Date: Sun, 2 Mar 2025 17:28:31 +0100 Subject: [PATCH 507/685] fix(tags): fixes ImportError on Python >=3.11 (#1363) (#1364) --- commitizen/tags.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/commitizen/tags.py b/commitizen/tags.py index 962e428ef2..915dd3120c 100644 --- a/commitizen/tags.py +++ b/commitizen/tags.py @@ -8,8 +8,6 @@ from string import Template from typing import TYPE_CHECKING, NamedTuple -from typing_extensions import Self - from commitizen import out from commitizen.defaults import DEFAULT_SETTINGS, Settings, get_tag_regexes from commitizen.git import GitTag @@ -22,8 +20,16 @@ ) if TYPE_CHECKING: + import sys + from commitizen.version_schemes import VersionScheme + # Self is Python 3.11+ but backported in typing-extensions + if sys.version_info < (3, 11): + from typing_extensions import Self + else: + from typing import Self + class VersionTag(NamedTuple): """Represent a version and its matching tag form.""" From b494c556437473519f8ab69020c7256ba84714c1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sun, 2 Mar 2025 16:28:55 +0000 Subject: [PATCH 508/685] =?UTF-8?q?bump:=20version=204.4.0=20=E2=86=92=204?= =?UTF-8?q?.4.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c8861315d4..86997bc3ad 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.4.0 # automatically updated by Commitizen + rev: v4.4.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 30d2b76595..8fc88ad695 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v4.4.1 (2025-03-02) + +### Fix + +- **tags**: fixes ImportError on Python >=3.11 (#1363) (#1364) + ## v4.4.0 (2025-03-02) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index ecdb1cef9e..9905939ff6 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.4.0" +__version__ = "4.4.1" diff --git a/pyproject.toml b/pyproject.toml index 570eabd3a6..314ddd925c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.4.0" +version = "4.4.1" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -87,7 +87,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.4.0" +version = "4.4.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", From a202e661bacf9643373255965f34bbdb382cb299 Mon Sep 17 00:00:00 2001 From: "Axel H." <noirbizarre@gmail.com> Date: Sun, 2 Mar 2025 17:35:30 +0100 Subject: [PATCH 509/685] ci(pre-commit): update `pre-commit` hooks to latest version and fix detected errors --- .pre-commit-config.yaml | 6 +++--- commitizen/tags.py | 20 +++++++++++--------- docs/config.md | 19 +++++++++---------- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 86997bc3ad..bb1beaefcb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,7 +13,7 @@ repos: - id: check-useless-excludes - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v5.0.0 hooks: - id: check-vcs-permalinks - id: end-of-file-fixer @@ -30,13 +30,13 @@ repos: - id: detect-private-key - repo: https://github.com/asottile/blacken-docs - rev: 1.13.0 + rev: 1.19.1 hooks: - id: blacken-docs additional_dependencies: [ black~=23.11 ] - repo: https://github.com/codespell-project/codespell - rev: v2.2.4 + rev: v2.4.1 hooks: - id: codespell name: Run codespell to check for common misspellings in files diff --git a/commitizen/tags.py b/commitizen/tags.py index 915dd3120c..aa11cb7a9c 100644 --- a/commitizen/tags.py +++ b/commitizen/tags.py @@ -55,28 +55,30 @@ class TagRules: Example: - ```py + ```python settings = DEFAULT_SETTINGS.clone() - settings.update({ - "tag_format": "v{version}" - "legacy_tag_formats": ["version{version}", "ver{version}"], - "ignored_tag_formats": ["ignored{version}"], - }) + settings.update( + { + "tag_format": "v{version}", + "legacy_tag_formats": ["version{version}", "ver{version}"], + "ignored_tag_formats": ["ignored{version}"], + } + ) rules = TagRules.from_settings(settings) assert rules.is_version_tag("v1.0.0") assert rules.is_version_tag("version1.0.0") assert rules.is_version_tag("ver1.0.0") - assert not rules.is_version_tag("ignored1.0.0", warn=True) # Does not warn - assert not rules.is_version_tag("warn1.0.0", warn=True) # Does warn + assert not rules.is_version_tag("ignored1.0.0", warn=True) # Does not warn + assert not rules.is_version_tag("warn1.0.0", warn=True) # Does warn assert rules.search_version("# My v1.0.0 version").version == "1.0.0" assert rules.extract_version("v1.0.0") == Version("1.0.0") try: assert rules.extract_version("not-a-v1.0.0") except InvalidVersion: - print "Does not match a tag format" + print("Does not match a tag format") ``` """ diff --git a/docs/config.md b/docs/config.md index 3d53249585..d1ae90b29a 100644 --- a/docs/config.md +++ b/docs/config.md @@ -352,7 +352,7 @@ Commitizen provides some version providers for some well known formats: | `scm` | Fetch the version from git and does not need to set it back | | `pep621` | Get and set version from `pyproject.toml` `project.version` field | | `poetry` | Get and set version from `pyproject.toml` `tool.poetry.version` field | -| `uv` | Get and set version from `pyproject.toml` `project.version` field and `uv.lock` `pacakge.version` field whose `package.name` field is the same as `pyproject.toml` `project.name` field | +| `uv` | Get and set version from `pyproject.toml` `project.version` field and `uv.lock` `package.version` field whose `package.name` field is the same as `pyproject.toml` `project.name` field | | `cargo` | Get and set version from `Cargo.toml` `project.version` field | | `npm` | Get and set version from `package.json` `version` field, `package-lock.json` `version,packages.''.version` fields if the file exists, and `npm-shrinkwrap.json` `version,packages.''.version` fields if the file exists | | `composer` | Get and set version from `composer.json` `project.version` field | @@ -386,22 +386,21 @@ class MyProvider(VersionProvider): def set_version(self, version: str): self.file.write_text(version) - ``` ```python title="setup.py" from setuptools import setup setup( - name='my-commitizen-provider', - version='0.1.0', - py_modules=['my_provider'], - install_requires=['commitizen'], - entry_points = { - 'commitizen.provider': [ - 'my-provider = my_provider:MyProvider', + name="my-commitizen-provider", + version="0.1.0", + py_modules=["my_provider"], + install_requires=["commitizen"], + entry_points={ + "commitizen.provider": [ + "my-provider = my_provider:MyProvider", ] - } + }, ) ``` From 58eecdccbaf02879dc5672f431485b582c66ffad Mon Sep 17 00:00:00 2001 From: Capi Etheriel <barraponto@gmail.com> Date: Sun, 16 Mar 2025 19:18:22 -0300 Subject: [PATCH 510/685] update precommit example --- docs/getting_started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started.md b/docs/getting_started.md index 378b819192..3c6257c363 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -94,7 +94,7 @@ repos: hooks: - id: commitizen - id: commitizen-branch - stages: [push] + stages: [pre-push] ``` After the configuration is added, you'll need to run: From 13bc11a9c560bad69c24a08b153b7ad0ca769fff Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Thu, 20 Mar 2025 22:11:40 +0800 Subject: [PATCH 511/685] build(pyproject.toml): fix license metadata --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 314ddd925c..cedccabb0e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ maintainers = [ { name = "Wei Lee", email = "weilee.rx@gmail.com" }, { name = "Axel H.", email = "noirbizarre@gmail.com" }, ] -license = { text = "LICENSE" } +license = { file = "LICENSE" } readme = "docs/README.md" requires-python = ">=3.9,<4.0" dependencies = [ @@ -42,6 +42,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", + "License :: OSI Approved :: MIT License", ] [project.urls] From 17021fa05ef37e754fd37053c822071c3368b3ca Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sun, 30 Mar 2025 17:50:23 +0800 Subject: [PATCH 512/685] fix(commands/init): add missing uv provider to "cz init" --- commitizen/commands/init.py | 1 + 1 file changed, 1 insertion(+) diff --git a/commitizen/commands/init.py b/commitizen/commands/init.py index e39dfbe291..14ec8067e9 100644 --- a/commitizen/commands/init.py +++ b/commitizen/commands/init.py @@ -228,6 +228,7 @@ def _ask_version_provider(self) -> str: "npm": "npm: Get and set version from package.json:project.version field", "pep621": "pep621: Get and set version from pyproject.toml:project.version field", "poetry": "poetry: Get and set version from pyproject.toml:tool.poetry.version field", + "uv": "uv: Get and Get and set version from pyproject.toml and uv.lock", "scm": "scm: Fetch the version from git and does not need to set it back", } From 904173e3193714d2db6a67615bd8ee1132065526 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 4 Apr 2025 23:48:55 +0800 Subject: [PATCH 513/685] feat(init): set uv to default value if both pyproject.toml and uv.lock present --- commitizen/commands/init.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/commitizen/commands/init.py b/commitizen/commands/init.py index 14ec8067e9..df872ec7ee 100644 --- a/commitizen/commands/init.py +++ b/commitizen/commands/init.py @@ -24,6 +24,10 @@ class ProjectInfo: def has_pyproject(self) -> bool: return os.path.isfile("pyproject.toml") + @property + def has_uv_lock(self) -> bool: + return os.path.isfile("uv.lock") + @property def has_setup(self) -> bool: return os.path.isfile("setup.py") @@ -32,6 +36,10 @@ def has_setup(self) -> bool: def has_pre_commit_config(self) -> bool: return os.path.isfile(".pre-commit-config.yaml") + @property + def is_python_uv(self) -> bool: + return self.has_pyproject and self.has_uv_lock + @property def is_python_poetry(self) -> bool: if not self.has_pyproject: @@ -236,6 +244,8 @@ def _ask_version_provider(self) -> str: if self.project_info.is_python: if self.project_info.is_python_poetry: default_val = "poetry" + elif self.project_info.is_python_uv: + default_val = "uv" else: default_val = "pep621" elif self.project_info.is_rust_cargo: From e0b1c7743d5ea0bcba82e4ff515ce2caf5e87865 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 22:07:31 +0000 Subject: [PATCH 514/685] =?UTF-8?q?bump:=20version=204.4.1=20=E2=86=92=204?= =?UTF-8?q?.5.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 10 ++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bb1beaefcb..6c1cbd7670 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.4.1 # automatically updated by Commitizen + rev: v4.5.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fc88ad695..6250af20d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## v4.5.0 (2025-04-04) + +### Feat + +- **init**: set uv to default value if both pyproject.toml and uv.lock present + +### Fix + +- **commands/init**: add missing uv provider to "cz init" + ## v4.4.1 (2025-03-02) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 9905939ff6..9faa2c2dd5 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.4.1" +__version__ = "4.5.0" diff --git a/pyproject.toml b/pyproject.toml index cedccabb0e..009bd13ca4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.4.1" +version = "4.5.0" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.4.1" +version = "4.5.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", From d666aa0bae8aec53b23b0495f8b007eeac4fdba8 Mon Sep 17 00:00:00 2001 From: Carlos Sanchez <carlos@apache.org> Date: Fri, 21 Mar 2025 17:32:39 +0100 Subject: [PATCH 515/685] fix: print which tag is invalid and the regex used for validation --- commitizen/tags.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/commitizen/tags.py b/commitizen/tags.py index aa11cb7a9c..5724bb2574 100644 --- a/commitizen/tags.py +++ b/commitizen/tags.py @@ -146,7 +146,9 @@ def extract_version(self, tag: GitTag) -> Version: m for regex in self.version_regexes if (m := regex.fullmatch(tag.name)) ) if not (m := next(candidates, None)): - raise InvalidVersion() + raise InvalidVersion( + f"Invalid version tag: '{tag.name}' does not match any configured tag format" + ) if "version" in m.groupdict(): return self.scheme(m.group("version")) From 1451bc53f274b3794776e345212b518736272eca Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 01:24:52 +0000 Subject: [PATCH 516/685] =?UTF-8?q?bump:=20version=204.5.0=20=E2=86=92=204?= =?UTF-8?q?.5.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6c1cbd7670..19b4394cf6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.5.0 # automatically updated by Commitizen + rev: v4.5.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 6250af20d7..39eee25df0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v4.5.1 (2025-04-09) + +### Fix + +- print which tag is invalid + ## v4.5.0 (2025-04-04) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 9faa2c2dd5..f9f7166e62 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.5.0" +__version__ = "4.5.1" diff --git a/pyproject.toml b/pyproject.toml index 009bd13ca4..c9ea806cfc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.5.0" +version = "4.5.1" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.5.0" +version = "4.5.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", From d7b1a89061f44bda94ded6f0d54f193373d5b6d6 Mon Sep 17 00:00:00 2001 From: Alejandro Martinez Ruiz <alex@flawedcode.org> Date: Thu, 20 Mar 2025 14:25:47 +0100 Subject: [PATCH 517/685] feat(git): add parents' digests in commit information --- commitizen/git.py | 16 +++++++++++--- tests/test_git.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 3 deletions(-) diff --git a/commitizen/git.py b/commitizen/git.py index 7de8e1f1c8..19ca46b6c3 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -44,13 +44,20 @@ def __eq__(self, other) -> bool: class GitCommit(GitObject): def __init__( - self, rev, title, body: str = "", author: str = "", author_email: str = "" + self, + rev, + title, + body: str = "", + author: str = "", + author_email: str = "", + parents: list[str] | None = None, ): self.rev = rev.strip() self.title = title.strip() self.body = body.strip() self.author = author.strip() self.author_email = author_email.strip() + self.parents = parents or [] @property def message(self): @@ -137,7 +144,9 @@ def get_commits( for rev_and_commit in git_log_entries: if not rev_and_commit: continue - rev, title, author, author_email, *body_list = rev_and_commit.split("\n") + rev, parents, title, author, author_email, *body_list = rev_and_commit.split( + "\n" + ) if rev_and_commit: git_commit = GitCommit( rev=rev.strip(), @@ -145,6 +154,7 @@ def get_commits( body="\n".join(body_list).strip(), author=author, author_email=author_email, + parents=[p for p in parents.strip().split(" ") if p], ) git_commits.append(git_commit) return git_commits @@ -286,7 +296,7 @@ def smart_open(*args, **kargs): def _get_log_as_str_list(start: str | None, end: str, args: str) -> list[str]: """Get string representation of each log entry""" delimiter = "----------commit-delimiter----------" - log_format: str = "%H%n%s%n%an%n%ae%n%b" + log_format: str = "%H%n%P%n%s%n%an%n%ae%n%b" git_log_cmd = ( f"git -c log.showSignature=False log --pretty={log_format}{delimiter} {args}" ) diff --git a/tests/test_git.py b/tests/test_git.py index f929ba6a44..8b2fc2b86e 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -132,11 +132,13 @@ def test_get_commits_author_and_email(): def test_get_commits_without_email(mocker: MockFixture): raw_commit = ( "a515bb8f71c403f6f7d1c17b9d8ebf2ce3959395\n" + "95bbfc703eb99cb49ba0d6ffd8469911303dbe63 12d3b4bdaa996ea7067a07660bb5df4772297bdd\n" "\n" "user name\n" "\n" "----------commit-delimiter----------\n" "12d3b4bdaa996ea7067a07660bb5df4772297bdd\n" + "de33bc5070de19600f2f00262b3c15efea762408\n" "feat(users): add username\n" "user name\n" "\n" @@ -159,16 +161,19 @@ def test_get_commits_without_email(mocker: MockFixture): def test_get_commits_without_breakline_in_each_commit(mocker: MockFixture): raw_commit = ( "ae9ba6fc5526cf478f52ef901418d85505109744\n" + "ff2f56ca844de72a9d59590831087bf5a97bac84\n" "bump: version 2.13.0 → 2.14.0\n" "GitHub Action\n" "action@github.com\n" "----------commit-delimiter----------\n" "ff2f56ca844de72a9d59590831087bf5a97bac84\n" + "b4dc83284dc8c9729032a774a037df1d1f2397d5 20a54bf1b82cd7b573351db4d1e8814dd0be205d\n" "Merge pull request #332 from cliles/feature/271-redux\n" "User\n" "user@email.com\n" "Feature/271 redux----------commit-delimiter----------\n" "20a54bf1b82cd7b573351db4d1e8814dd0be205d\n" + "658f38c3fe832cdab63ed4fb1f7b3a0969a583be\n" "feat(#271): enable creation of annotated tags when bumping\n" "User 2\n" "user@email.edu\n" @@ -193,6 +198,55 @@ def test_get_commits_without_breakline_in_each_commit(mocker: MockFixture): ) +def test_get_commits_with_and_without_parents(mocker: MockFixture): + raw_commit = ( + "4206e661bacf9643373255965f34bbdb382cb2b9\n" + "ae9ba6fc5526cf478f52ef901418d85505109744 bf8479e7aa1a5b9d2f491b79e3a4d4015519903e\n" + "Merge pull request from someone\n" + "Maintainer\n" + "maintainer@email.com\n" + "This is a much needed feature----------commit-delimiter----------\n" + "ae9ba6fc5526cf478f52ef901418d85505109744\n" + "ff2f56ca844de72a9d59590831087bf5a97bac84\n" + "Release 0.1.0\n" + "GitHub Action\n" + "action@github.com\n" + "----------commit-delimiter----------\n" + "ff2f56ca844de72a9d59590831087bf5a97bac84\n" + "\n" + "Initial commit\n" + "User\n" + "user@email.com\n" + "----------commit-delimiter----------\n" + ) + mocker.patch("commitizen.cmd.run", return_value=FakeCommand(out=raw_commit)) + + commits = git.get_commits() + + assert commits[0].author == "Maintainer" + assert commits[1].author == "GitHub Action" + assert commits[2].author == "User" + + assert commits[0].author_email == "maintainer@email.com" + assert commits[1].author_email == "action@github.com" + assert commits[2].author_email == "user@email.com" + + assert commits[0].title == "Merge pull request from someone" + assert commits[1].title == "Release 0.1.0" + assert commits[2].title == "Initial commit" + + assert commits[0].body == "This is a much needed feature" + assert commits[1].body == "" + assert commits[2].body == "" + + assert commits[0].parents == [ + "ae9ba6fc5526cf478f52ef901418d85505109744", + "bf8479e7aa1a5b9d2f491b79e3a4d4015519903e", + ] + assert commits[1].parents == ["ff2f56ca844de72a9d59590831087bf5a97bac84"] + assert commits[2].parents == [] + + def test_get_commits_with_signature(): config_file = ".git/config" config_backup = ".git/config.bak" From 57ea95f652439e78804e16dca822f36f9f5debcc Mon Sep 17 00:00:00 2001 From: Alejandro Martinez Ruiz <alex@flawedcode.org> Date: Thu, 20 Mar 2025 14:25:54 +0100 Subject: [PATCH 518/685] feat(changelog): expose commit parents' digests when processing commits COMMIT_DATA in test_changelog.py had to be type annotated to avoid an issue with mypy linting when creating a GitCommit where the tool would expect the wrong type for the arguments. --- commitizen/changelog.py | 1 + tests/test_changelog.py | 75 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index 95bf21d6f9..704efe6071 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -172,6 +172,7 @@ def process_commit_message( ): message: dict = { "sha1": commit.rev, + "parents": commit.parents, "author": commit.author, "author_email": commit.author_email, **parsed.groupdict(), diff --git a/tests/test_changelog.py b/tests/test_changelog.py index accbf5d33c..df42b82264 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1,7 +1,7 @@ import re from dataclasses import dataclass from pathlib import Path -from typing import Optional +from typing import Any, Optional import pytest from jinja2 import FileSystemLoader @@ -14,9 +14,10 @@ from commitizen.exceptions import InvalidConfigurationError from commitizen.version_schemes import Pep440 -COMMITS_DATA = [ +COMMITS_DATA: list[dict[str, Any]] = [ { "rev": "141ee441c9c9da0809c554103a558eb17c30ed17", + "parents": ["6c4948501031b7d6405b54b21d3d635827f9421b"], "title": "bump: version 1.1.1 → 1.2.0", "body": "", "author": "Commitizen", @@ -24,6 +25,7 @@ }, { "rev": "6c4948501031b7d6405b54b21d3d635827f9421b", + "parents": ["ddd220ad515502200fe2dde443614c1075d26238"], "title": "docs: how to create custom bumps", "body": "", "author": "Commitizen", @@ -31,6 +33,7 @@ }, { "rev": "ddd220ad515502200fe2dde443614c1075d26238", + "parents": ["ad17acff2e3a2e141cbc3c6efd7705e4e6de9bfc"], "title": "feat: custom cz plugins now support bumping version", "body": "", "author": "Commitizen", @@ -38,6 +41,7 @@ }, { "rev": "ad17acff2e3a2e141cbc3c6efd7705e4e6de9bfc", + "parents": ["56c8a8da84e42b526bcbe130bd194306f7c7e813"], "title": "docs: added bump gif", "body": "", "author": "Commitizen", @@ -45,6 +49,7 @@ }, { "rev": "56c8a8da84e42b526bcbe130bd194306f7c7e813", + "parents": ["74c6134b1b2e6bb8b07ed53410faabe99b204f36"], "title": "bump: version 1.1.0 → 1.1.1", "body": "", "author": "Commitizen", @@ -52,6 +57,7 @@ }, { "rev": "74c6134b1b2e6bb8b07ed53410faabe99b204f36", + "parents": ["cbc7b5f22c4e74deff4bc92d14e19bd93524711e"], "title": "refactor: changed stdout statements", "body": "", "author": "Commitizen", @@ -59,6 +65,7 @@ }, { "rev": "cbc7b5f22c4e74deff4bc92d14e19bd93524711e", + "parents": ["1ba46f2a63cb9d6e7472eaece21528c8cd28b118"], "title": "fix(bump): commit message now fits better with semver", "body": "", "author": "Commitizen", @@ -66,6 +73,7 @@ }, { "rev": "1ba46f2a63cb9d6e7472eaece21528c8cd28b118", + "parents": ["c35dbffd1bb98bb0b3d1593797e79d1c3366af8f"], "title": "fix: conventional commit 'breaking change' in body instead of title", "body": "closes #16", "author": "Commitizen", @@ -73,6 +81,7 @@ }, { "rev": "c35dbffd1bb98bb0b3d1593797e79d1c3366af8f", + "parents": ["25313397a4ac3dc5b5c986017bee2a614399509d"], "title": "refactor(schema): command logic removed from commitizen base", "body": "", "author": "Commitizen", @@ -80,6 +89,7 @@ }, { "rev": "25313397a4ac3dc5b5c986017bee2a614399509d", + "parents": ["d2f13ac41b4e48995b3b619d931c82451886e6ff"], "title": "refactor(info): command logic removed from commitizen base", "body": "", "author": "Commitizen", @@ -87,6 +97,7 @@ }, { "rev": "d2f13ac41b4e48995b3b619d931c82451886e6ff", + "parents": ["d839e317e5b26671b010584ad8cc6bf362400fa1"], "title": "refactor(example): command logic removed from commitizen base", "body": "", "author": "Commitizen", @@ -94,6 +105,7 @@ }, { "rev": "d839e317e5b26671b010584ad8cc6bf362400fa1", + "parents": ["12d0e65beda969f7983c444ceedc2a01584f4e08"], "title": "refactor(commit): moved most of the commit logic to the commit command", "body": "", "author": "Commitizen", @@ -101,6 +113,7 @@ }, { "rev": "12d0e65beda969f7983c444ceedc2a01584f4e08", + "parents": ["fb4c85abe51c228e50773e424cbd885a8b6c610d"], "title": "docs(README): updated documentation url)", "body": "", "author": "Commitizen", @@ -108,6 +121,7 @@ }, { "rev": "fb4c85abe51c228e50773e424cbd885a8b6c610d", + "parents": ["17efb44d2cd16f6621413691a543e467c7d2dda6"], "title": "docs: mkdocs documentation", "body": "", "author": "Commitizen", @@ -115,6 +129,7 @@ }, { "rev": "17efb44d2cd16f6621413691a543e467c7d2dda6", + "parents": ["6012d9eecfce8163d75c8fff179788e9ad5347da"], "title": "Bump version 1.0.0 → 1.1.0", "body": "", "author": "Commitizen", @@ -122,6 +137,7 @@ }, { "rev": "6012d9eecfce8163d75c8fff179788e9ad5347da", + "parents": ["0c7fb0ca0168864dfc55d83c210da57771a18319"], "title": "test: fixed issues with conf", "body": "", "author": "Commitizen", @@ -129,6 +145,7 @@ }, { "rev": "0c7fb0ca0168864dfc55d83c210da57771a18319", + "parents": ["cb1dd2019d522644da5bdc2594dd6dee17122d7f"], "title": "docs(README): some new information about bump", "body": "", "author": "Commitizen", @@ -136,6 +153,7 @@ }, { "rev": "cb1dd2019d522644da5bdc2594dd6dee17122d7f", + "parents": ["9c7450f85df6bf6be508e79abf00855a30c3c73c"], "title": "feat: new working bump command", "body": "", "author": "Commitizen", @@ -143,6 +161,7 @@ }, { "rev": "9c7450f85df6bf6be508e79abf00855a30c3c73c", + "parents": ["9f3af3772baab167e3fd8775d37f041440184251"], "title": "feat: create version tag", "body": "", "author": "Commitizen", @@ -150,6 +169,7 @@ }, { "rev": "9f3af3772baab167e3fd8775d37f041440184251", + "parents": ["b0d6a3defbfde14e676e7eb34946409297d0221b"], "title": "docs: added new changelog", "body": "", "author": "Commitizen", @@ -157,6 +177,7 @@ }, { "rev": "b0d6a3defbfde14e676e7eb34946409297d0221b", + "parents": ["d630d07d912e420f0880551f3ac94e933f9d3beb"], "title": "feat: update given files with new version", "body": "", "author": "Commitizen", @@ -164,6 +185,7 @@ }, { "rev": "d630d07d912e420f0880551f3ac94e933f9d3beb", + "parents": ["1792b8980c58787906dbe6836f93f31971b1ec2d"], "title": "fix: removed all from commit", "body": "", "author": "Commitizen", @@ -171,6 +193,7 @@ }, { "rev": "1792b8980c58787906dbe6836f93f31971b1ec2d", + "parents": ["52def1ea3555185ba4b936b463311949907e31ec"], "title": "feat(config): new set key, used to set version to cfg", "body": "", "author": "Commitizen", @@ -178,6 +201,7 @@ }, { "rev": "52def1ea3555185ba4b936b463311949907e31ec", + "parents": ["3127e05077288a5e2b62893345590bf1096141b7"], "title": "feat: support for pyproject.toml", "body": "", "author": "Commitizen", @@ -185,6 +209,7 @@ }, { "rev": "3127e05077288a5e2b62893345590bf1096141b7", + "parents": ["fd480ed90a80a6ffa540549408403d5b60d0e90c"], "title": "feat: first semantic version bump implementation", "body": "", "author": "Commitizen", @@ -192,6 +217,7 @@ }, { "rev": "fd480ed90a80a6ffa540549408403d5b60d0e90c", + "parents": ["e4840a059731c0bf488381ffc77e989e85dd81ad"], "title": "fix: fix config file not working", "body": "", "author": "Commitizen", @@ -199,6 +225,7 @@ }, { "rev": "e4840a059731c0bf488381ffc77e989e85dd81ad", + "parents": ["aa44a92d68014d0da98965c0c2cb8c07957d4362"], "title": "refactor: added commands folder, better integration with decli", "body": "", "author": "Commitizen", @@ -206,6 +233,7 @@ }, { "rev": "aa44a92d68014d0da98965c0c2cb8c07957d4362", + "parents": ["58bb709765380dbd46b74ce6e8978515764eb955"], "title": "Bump version: 1.0.0b2 → 1.0.0", "body": "", "author": "Commitizen", @@ -213,6 +241,7 @@ }, { "rev": "58bb709765380dbd46b74ce6e8978515764eb955", + "parents": ["97afb0bb48e72b6feca793091a8a23c706693257"], "title": "docs(README): new badges", "body": "", "author": "Commitizen", @@ -220,6 +249,10 @@ }, { "rev": "97afb0bb48e72b6feca793091a8a23c706693257", + "parents": [ + "9cecb9224aa7fa68d4afeac37eba2a25770ef251", + "e004a90b81ea5b374f118759bce5951202d03d69", + ], "title": "Merge pull request #10 from Woile/feat/decli", "body": "Feat/decli", "author": "Commitizen", @@ -227,6 +260,7 @@ }, { "rev": "9cecb9224aa7fa68d4afeac37eba2a25770ef251", + "parents": ["f5781d1a2954d71c14ade2a6a1a95b91310b2577"], "title": "style: black to files", "body": "", "author": "Commitizen", @@ -234,6 +268,7 @@ }, { "rev": "f5781d1a2954d71c14ade2a6a1a95b91310b2577", + "parents": ["80105fb3c6d45369bc0cbf787bd329fba603864c"], "title": "ci: added travis", "body": "", "author": "Commitizen", @@ -241,6 +276,7 @@ }, { "rev": "80105fb3c6d45369bc0cbf787bd329fba603864c", + "parents": ["a96008496ffefb6b1dd9b251cb479eac6a0487f7"], "title": "refactor: removed delegator, added decli and many tests", "body": "BREAKING CHANGE: API is stable", "author": "Commitizen", @@ -248,6 +284,7 @@ }, { "rev": "a96008496ffefb6b1dd9b251cb479eac6a0487f7", + "parents": ["aab33d13110f26604fb786878856ec0b9e5fc32b"], "title": "docs: updated test command", "body": "", "author": "Commitizen", @@ -255,6 +292,7 @@ }, { "rev": "aab33d13110f26604fb786878856ec0b9e5fc32b", + "parents": ["b73791563d2f218806786090fb49ef70faa51a3a"], "title": "Bump version: 1.0.0b1 → 1.0.0b2", "body": "", "author": "Commitizen", @@ -262,6 +300,7 @@ }, { "rev": "b73791563d2f218806786090fb49ef70faa51a3a", + "parents": ["7aa06a454fb717408b3657faa590731fb4ab3719"], "title": "docs(README): updated to reflect current state", "body": "", "author": "Commitizen", @@ -269,6 +308,10 @@ }, { "rev": "7aa06a454fb717408b3657faa590731fb4ab3719", + "parents": [ + "7c7e96b723c2aaa1aec3a52561f680adf0b60e97", + "9589a65880016996cff156b920472b9d28d771ca", + ], "title": "Merge pull request #9 from Woile/dev", "body": "feat: py3 only, tests and conventional commits 1.0", "author": "Commitizen", @@ -276,6 +319,7 @@ }, { "rev": "7c7e96b723c2aaa1aec3a52561f680adf0b60e97", + "parents": ["ed830019581c83ba633bfd734720e6758eca6061"], "title": "Bump version: 0.9.11 → 1.0.0b1", "body": "", "author": "Commitizen", @@ -283,6 +327,7 @@ }, { "rev": "ed830019581c83ba633bfd734720e6758eca6061", + "parents": ["c52eca6f74f844ab3ffbde61d98ef96071e132b7"], "title": "feat: py3 only, tests and conventional commits 1.0", "body": "more tests\npyproject instead of Pipfile\nquestionary instead of whaaaaat (promptkit 2.0.0 support)", "author": "Commitizen", @@ -290,6 +335,7 @@ }, { "rev": "c52eca6f74f844ab3ffbde61d98ef96071e132b7", + "parents": ["0326652b2657083929507ee66d4d1a0899e861ba"], "title": "Bump version: 0.9.10 → 0.9.11", "body": "", "author": "Commitizen", @@ -297,6 +343,7 @@ }, { "rev": "0326652b2657083929507ee66d4d1a0899e861ba", + "parents": ["b3f89892222340150e32631ae6b7aab65230036f"], "title": "fix(config): load config reads in order without failing if there is no commitizen section", "body": "Closes #8", "author": "Commitizen", @@ -304,6 +351,7 @@ }, { "rev": "b3f89892222340150e32631ae6b7aab65230036f", + "parents": ["5e837bf8ef0735193597372cd2d85e31a8f715b9"], "title": "Bump version: 0.9.9 → 0.9.10", "body": "", "author": "Commitizen", @@ -311,6 +359,7 @@ }, { "rev": "5e837bf8ef0735193597372cd2d85e31a8f715b9", + "parents": ["684e0259cc95c7c5e94854608cd3dcebbd53219e"], "title": "fix: parse scope (this is my punishment for not having tests)", "body": "", "author": "Commitizen", @@ -318,6 +367,7 @@ }, { "rev": "684e0259cc95c7c5e94854608cd3dcebbd53219e", + "parents": ["ca38eac6ff09870851b5c76a6ff0a2a8e5ecda15"], "title": "Bump version: 0.9.8 → 0.9.9", "body": "", "author": "Commitizen", @@ -325,6 +375,7 @@ }, { "rev": "ca38eac6ff09870851b5c76a6ff0a2a8e5ecda15", + "parents": ["64168f18d4628718c49689ee16430549e96c5d4b"], "title": "fix: parse scope empty", "body": "", "author": "Commitizen", @@ -332,6 +383,7 @@ }, { "rev": "64168f18d4628718c49689ee16430549e96c5d4b", + "parents": ["9d4def716ef235a1fa5ae61614366423fbc8256f"], "title": "Bump version: 0.9.7 → 0.9.8", "body": "", "author": "Commitizen", @@ -339,6 +391,7 @@ }, { "rev": "9d4def716ef235a1fa5ae61614366423fbc8256f", + "parents": ["33b0bf1a0a4dc60aac45ed47476d2e5473add09e"], "title": "fix(scope): parse correctly again", "body": "", "author": "Commitizen", @@ -346,6 +399,7 @@ }, { "rev": "33b0bf1a0a4dc60aac45ed47476d2e5473add09e", + "parents": ["696885e891ec35775daeb5fec3ba2ab92c2629e1"], "title": "Bump version: 0.9.6 → 0.9.7", "body": "", "author": "Commitizen", @@ -353,6 +407,7 @@ }, { "rev": "696885e891ec35775daeb5fec3ba2ab92c2629e1", + "parents": ["bef4a86761a3bda309c962bae5d22ce9b57119e4"], "title": "fix(scope): parse correctly", "body": "", "author": "Commitizen", @@ -360,6 +415,7 @@ }, { "rev": "bef4a86761a3bda309c962bae5d22ce9b57119e4", + "parents": ["72472efb80f08ee3fd844660afa012c8cb256e4b"], "title": "Bump version: 0.9.5 → 0.9.6", "body": "", "author": "Commitizen", @@ -367,6 +423,7 @@ }, { "rev": "72472efb80f08ee3fd844660afa012c8cb256e4b", + "parents": ["b5561ce0ab3b56bb87712c8f90bcf37cf2474f1b"], "title": "refactor(conventionalCommit): moved filters to questions instead of message", "body": "", "author": "Commitizen", @@ -374,6 +431,7 @@ }, { "rev": "b5561ce0ab3b56bb87712c8f90bcf37cf2474f1b", + "parents": ["3e31714dc737029d96898f412e4ecd2be1bcd0ce"], "title": "fix(manifest): included missing files", "body": "", "author": "Commitizen", @@ -381,6 +439,7 @@ }, { "rev": "3e31714dc737029d96898f412e4ecd2be1bcd0ce", + "parents": ["9df721e06595fdd216884c36a28770438b4f4a39"], "title": "Bump version: 0.9.4 → 0.9.5", "body": "", "author": "Commitizen", @@ -388,6 +447,7 @@ }, { "rev": "9df721e06595fdd216884c36a28770438b4f4a39", + "parents": ["0cf6ada372470c8d09e6c9e68ebf94bbd5a1656f"], "title": "fix(config): home path for python versions between 3.0 and 3.5", "body": "", "author": "Commitizen", @@ -395,6 +455,7 @@ }, { "rev": "0cf6ada372470c8d09e6c9e68ebf94bbd5a1656f", + "parents": ["973c6b3e100f6f69a3fe48bd8ee55c135b96c318"], "title": "Bump version: 0.9.3 → 0.9.4", "body": "", "author": "Commitizen", @@ -402,6 +463,7 @@ }, { "rev": "973c6b3e100f6f69a3fe48bd8ee55c135b96c318", + "parents": ["dacc86159b260ee98eb5f57941c99ba731a01399"], "title": "feat(cli): added version", "body": "", "author": "Commitizen", @@ -409,6 +471,7 @@ }, { "rev": "dacc86159b260ee98eb5f57941c99ba731a01399", + "parents": ["4368f3c3cbfd4a1ced339212230d854bc5bab496"], "title": "Bump version: 0.9.2 → 0.9.3", "body": "", "author": "Commitizen", @@ -416,6 +479,7 @@ }, { "rev": "4368f3c3cbfd4a1ced339212230d854bc5bab496", + "parents": ["da94133288727d35dae9b91866a25045038f2d38"], "title": "feat(committer): conventional commit is a bit more intelligent now", "body": "", "author": "Commitizen", @@ -423,6 +487,7 @@ }, { "rev": "da94133288727d35dae9b91866a25045038f2d38", + "parents": ["1541f54503d2e1cf39bd777c0ca5ab5eb78772ba"], "title": "docs(README): motivation", "body": "", "author": "Commitizen", @@ -430,6 +495,7 @@ }, { "rev": "1541f54503d2e1cf39bd777c0ca5ab5eb78772ba", + "parents": ["ddc855a637b7879108308b8dbd85a0fd27c7e0e7"], "title": "Bump version: 0.9.1 → 0.9.2", "body": "", "author": "Commitizen", @@ -437,6 +503,7 @@ }, { "rev": "ddc855a637b7879108308b8dbd85a0fd27c7e0e7", + "parents": ["46e9032e18a819e466618c7a014bcb0e9981af9e"], "title": "refactor: renamed conventional_changelog to conventional_commits, not backward compatible", "body": "", "author": "Commitizen", @@ -444,6 +511,7 @@ }, { "rev": "46e9032e18a819e466618c7a014bcb0e9981af9e", + "parents": ["0fef73cd7dc77a25b82e197e7c1d3144a58c1350"], "title": "Bump version: 0.9.0 → 0.9.1", "body": "", "author": "Commitizen", @@ -451,6 +519,7 @@ }, { "rev": "0fef73cd7dc77a25b82e197e7c1d3144a58c1350", + "parents": [], "title": "fix(setup.py): future is now required for every python version", "body": "", "author": "Commitizen", @@ -489,6 +558,7 @@ def gitcommits() -> list: commit["body"], commit["author"], commit["author_email"], + commit["parents"], ) for commit in COMMITS_DATA ] @@ -1108,6 +1178,7 @@ def test_generate_tree_from_commits(gitcommits, tags, merge_prereleases): assert change["author"] == "Commitizen" assert change["author_email"] in "author@cz.dev" assert "sha1" in change + assert "parents" in change def test_generate_tree_from_commits_with_no_commits(tags): From 3f767e154f1459207523b688b8794f0343191f69 Mon Sep 17 00:00:00 2001 From: Alejandro Martinez Ruiz <alex@flawedcode.org> Date: Fri, 21 Mar 2025 12:53:45 +0100 Subject: [PATCH 519/685] docs(customization): add "parents" to the list of fields in Changes --- docs/customization.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/customization.md b/docs/customization.md index 132f4f0490..50113301db 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -507,12 +507,16 @@ Each `Change` has the following fields: | scope | `str | None` | An optional scope | | message | `str` | The commit message body | | sha1 | `str` | The commit `sha1` | +| parents | `list[str]` | The parent commit(s) `sha1`(s) | | author | `str` | The commit author name | | author_email | `str` | The commit author email | !!! Note The field values depend on the customization class and/or the settings you provide +The `parents` field can be used to identify merge commits and generate a changelog based on those. Another use case +is listing commits that belong to the same pull request. + When using another template (either provided by a plugin or by yourself), you can also pass extra template variables by: From 35f5c23b6dad6bd6be24f783857751bca71ae36d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sun, 13 Apr 2025 07:26:06 +0000 Subject: [PATCH 520/685] =?UTF-8?q?bump:=20version=204.5.1=20=E2=86=92=204?= =?UTF-8?q?.6.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 7 +++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 19b4394cf6..1373277b2d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.5.1 # automatically updated by Commitizen + rev: v4.6.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 39eee25df0..1d2ab1e48f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## v4.6.0 (2025-04-13) + +### Feat + +- **changelog**: expose commit parents' digests when processing commits +- **git**: add parents' digests in commit information + ## v4.5.1 (2025-04-09) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index f9f7166e62..db01fb213a 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.5.1" +__version__ = "4.6.0" diff --git a/pyproject.toml b/pyproject.toml index c9ea806cfc..6475ec01a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.5.1" +version = "4.6.0" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.5.1" +version = "4.6.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", From 58ca48db42fe994bda1617ea998b9089a2222b03 Mon Sep 17 00:00:00 2001 From: Jakob Keller <57402305+jakob-keller@users.noreply.github.com> Date: Tue, 22 Apr 2025 13:43:12 +0200 Subject: [PATCH 521/685] ci(github-actions): bump deprecated ubuntu-20.04 to ubuntu-22.04 Signed-off-by: Jakob Keller <57402305+jakob-keller@users.noreply.github.com> --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index f2363745cb..b50b02a681 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -7,7 +7,7 @@ jobs: strategy: matrix: python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] - platform: [ubuntu-20.04, macos-latest, windows-latest] + platform: [ubuntu-22.04, macos-latest, windows-latest] runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v4 From af285656734fd74c13a8d373a2a0ff303e0971f1 Mon Sep 17 00:00:00 2001 From: Jakob Keller <57402305+jakob-keller@users.noreply.github.com> Date: Tue, 22 Apr 2025 13:30:57 +0200 Subject: [PATCH 522/685] build(deps): bump argcomplete from 3.5.3 to 3.6.2 Signed-off-by: Jakob Keller <57402305+jakob-keller@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 073e1bc247..cccd7a532a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,14 +2,14 @@ [[package]] name = "argcomplete" -version = "3.5.3" +version = "3.6.2" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "argcomplete-3.5.3-py3-none-any.whl", hash = "sha256:2ab2c4a215c59fd6caaff41a869480a23e8f6a5f910b266c1808037f4e375b61"}, - {file = "argcomplete-3.5.3.tar.gz", hash = "sha256:c12bf50eded8aebb298c7b7da7a5ff3ee24dffd9f5281867dfe1424b58c55392"}, + {file = "argcomplete-3.6.2-py3-none-any.whl", hash = "sha256:65b3133a29ad53fb42c48cf5114752c7ab66c1c38544fdf6460f450c09b42591"}, + {file = "argcomplete-3.6.2.tar.gz", hash = "sha256:d0519b1bc867f5f4f4713c41ad0aba73a4a5f007449716b16f385f2166dc6adf"}, ] [package.extras] @@ -1965,4 +1965,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "b0f8544806163bc0dddc039eb313f9d82119b845b3a19dedc381e9c88e8f4466" +content-hash = "e15b424a0569f939e297c8abfcf09753f1fbcc5b4ad891163cc0982accd3b372" diff --git a/pyproject.toml b/pyproject.toml index 6475ec01a2..5be231aaa7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,7 @@ dependencies = [ "tomlkit (>=0.5.3,<1.0.0)", "jinja2>=2.10.3", "pyyaml>=3.08", - "argcomplete >=1.12.1,<3.6", + "argcomplete >=1.12.1,<3.7", "typing-extensions (>=4.0.1,<5.0.0) ; python_version < '3.11'", "charset-normalizer (>=2.1.0,<4)", # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility From 2a8a8ea93d519e5964ef92a9a673b5b014898064 Mon Sep 17 00:00:00 2001 From: Alexander Gubin <alexander.gubin@oediv.de> Date: Tue, 29 Apr 2025 14:32:43 +0200 Subject: [PATCH 523/685] fix(commit): use os.unlink to remove temp file NamedTemporaryFile doesn't have a unlink function when delete=False is used Fix https://github.com/commitizen-tools/commitizen/issues/1352 --- commitizen/commands/commit.py | 2 +- tests/commands/test_commit_command.py | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index abecb3b3ca..93f048082b 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -89,7 +89,7 @@ def manual_edit(self, message: str) -> str: subprocess.call(argv) with open(file_path) as temp_file: message = temp_file.read().strip() - file.unlink() + os.unlink(file.name) return message def __call__(self): diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index 55751f6902..3a92f5af48 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -511,8 +511,6 @@ def test_manual_edit(editor, config, mocker: MockFixture, tmp_path): assert edited_message == test_message.strip() - temp_file.unlink() - @skip_below_py_3_13 def test_commit_command_shows_description_when_use_help_option( From 53d43ad0920b23e8867952274783f14848cb887e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 5 May 2025 01:09:40 +0000 Subject: [PATCH 524/685] =?UTF-8?q?bump:=20version=204.6.0=20=E2=86=92=204?= =?UTF-8?q?.6.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1373277b2d..ee153c3500 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.6.0 # automatically updated by Commitizen + rev: v4.6.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d2ab1e48f..ecd6b68143 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v4.6.1 (2025-05-05) + +### Fix + +- **commit**: use os.unlink to remove temp file + ## v4.6.0 (2025-04-13) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index db01fb213a..b56d675263 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.6.0" +__version__ = "4.6.1" diff --git a/pyproject.toml b/pyproject.toml index 5be231aaa7..6744c14858 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.6.0" +version = "4.6.1" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.6.0" +version = "4.6.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", From 943b51fb7890b2a14e220ce6d30c7f0d40ba185c Mon Sep 17 00:00:00 2001 From: Raffaello Baluyot <baluyotraf@outlook.com> Date: Mon, 5 May 2025 22:19:55 +0200 Subject: [PATCH 525/685] fix(docs): fix url link and table formatting in the customization docs (#1399) --- docs/customization.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/customization.md b/docs/customization.md index 50113301db..da41071b98 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -164,7 +164,7 @@ commitizen: | `change_type_map` | `dict` | `None` | (OPTIONAL) Dictionary mapping the type of the commit to a changelog entry | [jinja2]: https://jinja.palletsprojects.com/en/2.10.x/ -[changelog-spec]: https://commitizen-tools.github.io/commitizen/changelog/ +[changelog-spec]: https://commitizen-tools.github.io/commitizen/commands/changelog/ #### Detailed `questions` content @@ -177,6 +177,7 @@ commitizen: | `default` | `Any` | `None` | (OPTIONAL) The default value for this question. | | `filter` | `str` | `None` | (OPTIONAL) Validator for user's answer. **(Work in Progress)** | | `multiline` | `bool` | `False` | (OPTIONAL) Enable multiline support when `type = input`. | + [different-question-types]: https://github.com/tmbo/questionary#different-question-types #### Shortcut keys From c44e2fe8ccd7760147d90426c3782d525558d589 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 5 May 2025 20:20:18 +0000 Subject: [PATCH 526/685] =?UTF-8?q?bump:=20version=204.6.1=20=E2=86=92=204?= =?UTF-8?q?.6.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ee153c3500..ac8b996267 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.6.1 # automatically updated by Commitizen + rev: v4.6.2 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index ecd6b68143..def8dab180 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v4.6.2 (2025-05-05) + +### Fix + +- **docs**: fix url link and table formatting in the customization docs (#1399) + ## v4.6.1 (2025-05-05) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index b56d675263..456bc7c315 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.6.1" +__version__ = "4.6.2" diff --git a/pyproject.toml b/pyproject.toml index 6744c14858..43bed32b5c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.6.1" +version = "4.6.2" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.6.1" +version = "4.6.2" tag_format = "v$version" version_files = [ "pyproject.toml:version", From a3682d5afc156272f7b3135232c3619c4d25b142 Mon Sep 17 00:00:00 2001 From: baluyotraf <baluyotraf@outlook.com> Date: Mon, 5 May 2025 18:06:48 +0200 Subject: [PATCH 527/685] docs: Fix the changelog_pattern regex in the monorepo tutorial --- docs/tutorials/monorepo_guidance.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorials/monorepo_guidance.md b/docs/tutorials/monorepo_guidance.md index 817f92321d..e530c596c7 100644 --- a/docs/tutorials/monorepo_guidance.md +++ b/docs/tutorials/monorepo_guidance.md @@ -71,11 +71,11 @@ Example config and commit for `library-b`: ```toml [tool.commitizen.customize] -changelog_pattern = "^(feat|fix)\\(library-b\\)(!)?:" #the pattern on types can be a wild card or any types you wish to include +changelog_pattern = "^(feat|fix)\(library-b\)(!)?:" #the pattern on types can be a wild card or any types you wish to include ``` A commit message looking like this, would be included: ``` -fix:(library-b) Some awesome message +fix(library-b): Some awesome message ``` From 5f607f3d090bbc9291cce4ca3fec6bd1618ac2d5 Mon Sep 17 00:00:00 2001 From: baluyotraf <baluyotraf@outlook.com> Date: Tue, 6 May 2025 15:42:35 +0200 Subject: [PATCH 528/685] Revert removal of escape in toml --- docs/tutorials/monorepo_guidance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/monorepo_guidance.md b/docs/tutorials/monorepo_guidance.md index e530c596c7..792c8c224f 100644 --- a/docs/tutorials/monorepo_guidance.md +++ b/docs/tutorials/monorepo_guidance.md @@ -71,7 +71,7 @@ Example config and commit for `library-b`: ```toml [tool.commitizen.customize] -changelog_pattern = "^(feat|fix)\(library-b\)(!)?:" #the pattern on types can be a wild card or any types you wish to include +changelog_pattern = "^(feat|fix)\\(library-b\\)(!)?:" #the pattern on types can be a wild card or any types you wish to include ``` A commit message looking like this, would be included: From c991feaf07370e635e38cd713d59da06eb19aba1 Mon Sep 17 00:00:00 2001 From: name <you@example.com> Date: Tue, 8 Apr 2025 02:19:34 +0800 Subject: [PATCH 529/685] docs(customization.md): add select type and search filter documentation --- docs/customization.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/customization.md b/docs/customization.md index da41071b98..31749d1c83 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -170,13 +170,15 @@ commitizen: | Parameter | Type | Default | Description | | ----------- | ------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `type` | `str` | `None` | The type of questions. Valid type: `list`, `input` and etc. [See More][different-question-types] | +| `type` | `str` | `None` | The type of questions. Valid types: `list`, `select`, `input` and etc. The `select` type provides an interactive searchable list interface. [See More][different-question-types] | | `name` | `str` | `None` | The key for the value answered by user. It's used in `message_template` | | `message` | `str` | `None` | Detail description for the question. | -| `choices` | `list` | `None` | (OPTIONAL) The choices when `type = list`. Either use a list of values or a list of dictionaries with `name` and `value` keys. Keyboard shortcuts can be defined via `key`. See examples above. | +| `choices` | `list` | `None` | (OPTIONAL) The choices when `type = list` or `type = select`. Either use a list of values or a list of dictionaries with `name` and `value` keys. Keyboard shortcuts can be defined via `key`. See examples above. | | `default` | `Any` | `None` | (OPTIONAL) The default value for this question. | | `filter` | `str` | `None` | (OPTIONAL) Validator for user's answer. **(Work in Progress)** | -| `multiline` | `bool` | `False` | (OPTIONAL) Enable multiline support when `type = input`. | +| `multiline` | `bool` | `False` | (OPTIONAL) Enable multiline support when `type = input`. | +| `use_search_filter` | `bool` | `False` | (OPTIONAL) Enable search/filter functionality for list/select type questions. This allows users to type and filter through the choices. | +| `use_jk_keys` | `bool` | `True` | (OPTIONAL) Enable/disable j/k keys for navigation in list/select type questions. Set to false if you prefer arrow keys only. | [different-question-types]: https://github.com/tmbo/questionary#different-question-types @@ -445,8 +447,8 @@ Commitizen gives you the possibility to provide your own changelog template, by: - providing one with your customization class - providing one from the current working directory and setting it: - - as [configuration][template-config] - - as `--template` parameter to both `bump` and `changelog` commands + - as [configuration][template-config] + - as `--template` parameter to both `bump` and `changelog` commands - either by providing a template with the same name as the default template By default, the template used is the `CHANGELOG.md.j2` file from the commitizen repository. From 5be28470ecf803c5092794201810ef89f54b9f87 Mon Sep 17 00:00:00 2001 From: yusin huang <os-yusin.huang@twtp1pc1753.deltaos.corp> Date: Mon, 14 Apr 2025 10:11:42 +0800 Subject: [PATCH 530/685] test(test_cz_search_filter.py): add test cases for search filter configuration --- tests/test_cz_search_filter.py | 76 ++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 tests/test_cz_search_filter.py diff --git a/tests/test_cz_search_filter.py b/tests/test_cz_search_filter.py new file mode 100644 index 0000000000..0e70e3104a --- /dev/null +++ b/tests/test_cz_search_filter.py @@ -0,0 +1,76 @@ +import pytest + +from commitizen.config import TomlConfig +from commitizen.cz.customize import CustomizeCommitsCz + +TOML_WITH_SEARCH_FILTER = r""" +[tool.commitizen] +name = "cz_customize" + +[tool.commitizen.customize] +message_template = "{{change_type}}:{% if scope %} ({{scope}}){% endif %}{% if breaking %}!{% endif %} {{message}}" + +[[tool.commitizen.customize.questions]] +type = "select" +name = "change_type" +message = "Select the type of change you are committing" +use_search_filter = true +use_jk_keys = false +choices = [ + {value = "fix", name = "fix: A bug fix. Correlates with PATCH in SemVer"}, + {value = "feat", name = "feat: A new feature. Correlates with MINOR in SemVer"}, + {value = "docs", name = "docs: Documentation only changes"}, + {value = "style", name = "style: Changes that do not affect the meaning of the code"}, + {value = "refactor", name = "refactor: A code change that neither fixes a bug nor adds a feature"}, + {value = "perf", name = "perf: A code change that improves performance"}, + {value = "test", name = "test: Adding missing or correcting existing tests"}, + {value = "build", name = "build: Changes that affect the build system or external dependencies"}, + {value = "ci", name = "ci: Changes to CI configuration files and scripts"} +] + +[[tool.commitizen.customize.questions]] +type = "input" +name = "scope" +message = "What is the scope of this change? (class or file name): (press [enter] to skip)" + +[[tool.commitizen.customize.questions]] +type = "input" +name = "message" +message = "Write a short and imperative summary of the code changes: (lower case and no period)" +""" + + +@pytest.fixture +def config(): + return TomlConfig(data=TOML_WITH_SEARCH_FILTER, path="not_exist.toml") + + +def test_questions_with_search_filter(config): + """Test that questions are properly configured with search filter""" + cz = CustomizeCommitsCz(config) + questions = cz.questions() + + # Test that the first question (change_type) has search filter enabled + assert questions[0]["type"] == "select" + assert questions[0]["name"] == "change_type" + assert questions[0]["use_search_filter"] is True + assert questions[0]["use_jk_keys"] is False + + # Test that the choices are properly configured + choices = questions[0]["choices"] + assert len(choices) == 9 # We have 9 commit types + assert choices[0]["value"] == "fix" + assert choices[1]["value"] == "feat" + + +def test_message_template(config): + """Test that the message template is properly configured""" + cz = CustomizeCommitsCz(config) + template = cz.message( + { + "change_type": "feat", + "scope": "search", + "message": "add search filter support", + } + ) + assert template == "feat: (search) add search filter support" From 776d70f700752789a42b31864807c389337e314f Mon Sep 17 00:00:00 2001 From: Yusin Huang <abcd51018@gmail.com> Date: Tue, 15 Apr 2025 23:00:50 +0800 Subject: [PATCH 531/685] fix(changelog.py): modify the CHANGELOG.md generated by cz bump --changelog to the right place --- commitizen/commands/changelog.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 80a72651e4..71bc93265b 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -32,21 +32,28 @@ def __init__(self, config: BaseConfig, args): raise NotAGitProjectError() self.config: BaseConfig = config - self.encoding = self.config.settings["encoding"] - self.cz = factory.commiter_factory(self.config) - - self.start_rev = args.get("start_rev") or self.config.settings.get( - "changelog_start_rev" - ) - self.file_name = args.get("file_name") or cast( + changelog_file_name = args.get("file_name") or cast( str, self.config.settings.get("changelog_file") ) - if not isinstance(self.file_name, str): + if not isinstance(changelog_file_name, str): raise NotAllowed( "Changelog file name is broken.\n" "Check the flag `--file-name` in the terminal " f"or the setting `changelog_file` in {self.config.path}" ) + self.file_name = ( + str(Path(self.config.path.parent) / changelog_file_name) + if self.config.path is not None + else changelog_file_name + ) + + self.encoding = self.config.settings["encoding"] + self.cz = factory.commiter_factory(self.config) + + self.start_rev = args.get("start_rev") or self.config.settings.get( + "changelog_start_rev" + ) + self.changelog_format = get_changelog_format(self.config, self.file_name) self.incremental = args["incremental"] or self.config.settings.get( From 15c185709ea2dba6a850f1b19c9a3790d4e92f50 Mon Sep 17 00:00:00 2001 From: Yusin Huang <abcd51018@gmail.com> Date: Tue, 15 Apr 2025 23:01:40 +0800 Subject: [PATCH 532/685] test(test_changelog_command.py): add test for changelog file_name construction from args and config --- tests/test_changelog.py | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/tests/test_changelog.py b/tests/test_changelog.py index df42b82264..6ffb6bc294 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1,13 +1,18 @@ +from __future__ import annotations + import re from dataclasses import dataclass from pathlib import Path -from typing import Any, Optional +from typing import Any +from unittest.mock import Mock import pytest from jinja2 import FileSystemLoader from commitizen import changelog, git from commitizen.changelog_formats import ChangelogFormat +from commitizen.commands.changelog import Changelog +from commitizen.config import BaseConfig from commitizen.cz.conventional_commits.conventional_commits import ( ConventionalCommitsCz, ) @@ -1499,7 +1504,7 @@ def changelog_message_builder_hook(message: dict, commit: git.GitCommit): def test_render_changelog_with_changelog_release_hook( gitcommits, tags, any_changelog_format: ChangelogFormat ): - def changelog_release_hook(release: dict, tag: Optional[git.GitTag]) -> dict: + def changelog_release_hook(release: dict, tag: git.GitTag | None) -> dict: release["extra"] = "whatever" return release @@ -1631,3 +1636,32 @@ def test_tags_rules_get_version_tags(capsys: pytest.CaptureFixture): captured = capsys.readouterr() assert captured.err.count("InvalidVersion") == 2 assert captured.err.count("not-a-version") == 2 + + +def test_changelog_file_name_from_args_and_config(): + mock_config = Mock(spec=BaseConfig) + mock_config.path.parent = "/my/project/" + mock_config.settings = { + "name": "cz_conventional_commits", + "changelog_file": "CHANGELOG.md", + "encoding": "utf-8", + "changelog_start_rev": "v1.0.0", + "tag_format": "$version", + "legacy_tag_formats": [], + "ignored_tag_formats": [], + "incremental": True, + "changelog_merge_prerelease": True, + } + + args = { + "file_name": "CUSTOM.md", + "incremental": None, + "dry_run": False, + "unreleased_version": "1.0.1", + } + changelog = Changelog(mock_config, args) + assert changelog.file_name == "/my/project/CUSTOM.md" + + args = {"incremental": None, "dry_run": False, "unreleased_version": "1.0.1"} + changelog = Changelog(mock_config, args) + assert changelog.file_name == "/my/project/CHANGELOG.md" From 7bea5a5082fe0fafc1e62515a9868095bb96fa4c Mon Sep 17 00:00:00 2001 From: Yusin Huang <abcd51018@gmail.com> Date: Thu, 17 Apr 2025 01:02:27 +0800 Subject: [PATCH 533/685] fix(changelog.py): cross-platform path handling using os.path.join and modify the path linter and test parameter --- commitizen/commands/changelog.py | 3 ++- tests/test_changelog.py | 11 ++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 71bc93265b..3b8f43e372 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -1,5 +1,6 @@ from __future__ import annotations +import os import os.path from difflib import SequenceMatcher from operator import itemgetter @@ -42,7 +43,7 @@ def __init__(self, config: BaseConfig, args): f"or the setting `changelog_file` in {self.config.path}" ) self.file_name = ( - str(Path(self.config.path.parent) / changelog_file_name) + os.path.join(str(self.config.path.parent), changelog_file_name) if self.config.path is not None else changelog_file_name ) diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 6ffb6bc294..67ba273b5c 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1,5 +1,6 @@ from __future__ import annotations +import os import re from dataclasses import dataclass from pathlib import Path @@ -1640,7 +1641,7 @@ def test_tags_rules_get_version_tags(capsys: pytest.CaptureFixture): def test_changelog_file_name_from_args_and_config(): mock_config = Mock(spec=BaseConfig) - mock_config.path.parent = "/my/project/" + mock_config.path.parent = "/my/project" mock_config.settings = { "name": "cz_conventional_commits", "changelog_file": "CHANGELOG.md", @@ -1660,8 +1661,12 @@ def test_changelog_file_name_from_args_and_config(): "unreleased_version": "1.0.1", } changelog = Changelog(mock_config, args) - assert changelog.file_name == "/my/project/CUSTOM.md" + assert os.path.normpath(changelog.file_name) == os.path.normpath( + os.path.join("/my/project", "CUSTOM.md") + ) args = {"incremental": None, "dry_run": False, "unreleased_version": "1.0.1"} changelog = Changelog(mock_config, args) - assert changelog.file_name == "/my/project/CHANGELOG.md" + assert os.path.normpath(changelog.file_name) == os.path.normpath( + os.path.join("/my/project", "CHANGELOG.md") + ) From e177141ec11f6bf72a6661c6a9fabebe3b670251 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Wed, 7 May 2025 00:43:53 +0000 Subject: [PATCH 534/685] =?UTF-8?q?bump:=20version=204.6.2=20=E2=86=92=204?= =?UTF-8?q?.6.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 7 +++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ac8b996267..08c31ba0a0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.6.2 # automatically updated by Commitizen + rev: v4.6.3 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index def8dab180..dbad463955 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## v4.6.3 (2025-05-07) + +### Fix + +- **changelog.py**: cross-platform path handling using os.path.join and modify the path linter and test parameter +- **changelog.py**: modify the CHANGELOG.md generated by cz bump --changelog to the right place + ## v4.6.2 (2025-05-05) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 456bc7c315..de3842dc77 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.6.2" +__version__ = "4.6.3" diff --git a/pyproject.toml b/pyproject.toml index 43bed32b5c..92b28fd091 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.6.2" +version = "4.6.3" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.6.2" +version = "4.6.3" tag_format = "v$version" version_files = [ "pyproject.toml:version", From 72c274309fbbb87f8bccd0ba7aee12ea71fa1fae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tuna=20Alika=C5=9Fifo=C4=9Flu?= <tunakasif@gmail.com> Date: Thu, 8 May 2025 22:55:24 +0300 Subject: [PATCH 535/685] feat(providers): add support for `Cargo.lock` If `Cargo.lock` file is present in the same path as the `Cargo.toml`, the version of the package will also be updated in the `Cargo.lock` file. The implementation is similar to the one used for `UvProvider`, which extends the `CargoProvider` to handle lock files. The change does not break any existing functionality, if the `Cargo.lock` file is not present, since it checks for the existence of the file before attempting a lock file update. --- commitizen/providers/cargo_provider.py | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/commitizen/providers/cargo_provider.py b/commitizen/providers/cargo_provider.py index cee687c15b..2e73ff35a1 100644 --- a/commitizen/providers/cargo_provider.py +++ b/commitizen/providers/cargo_provider.py @@ -1,5 +1,7 @@ from __future__ import annotations +from pathlib import Path + import tomlkit from commitizen.providers.base_provider import TomlProvider @@ -13,6 +15,11 @@ class CargoProvider(TomlProvider): """ filename = "Cargo.toml" + lock_filename = "Cargo.lock" + + @property + def lock_file(self) -> Path: + return Path() / self.lock_filename def get(self, document: tomlkit.TOMLDocument) -> str: try: @@ -28,3 +35,23 @@ def set(self, document: tomlkit.TOMLDocument, version: str): except tomlkit.exceptions.NonExistentKey: ... document["package"]["version"] = version # type: ignore + + def set_version(self, version: str) -> None: + super().set_version(version) + if self.lock_file.exists(): + self.set_lock_version(version) + + def set_lock_version(self, version: str) -> None: + cargo_toml_content = tomlkit.parse(self.file.read_text()) + try: + package_name = cargo_toml_content["package"]["name"] # type: ignore + except tomlkit.exceptions.NonExistentKey: + package_name = cargo_toml_content["workspace"]["package"]["name"] # type: ignore + + cargo_lock_content = tomlkit.parse(self.lock_file.read_text()) + packages: tomlkit.items.AoT = cargo_lock_content["package"] # type: ignore[assignment] + for i, package in enumerate(packages): + if package["name"] == package_name: + cargo_lock_content["package"][i]["version"] = version # type: ignore[index] + break + self.lock_file.write_text(tomlkit.dumps(cargo_lock_content)) From aabeae3f64c91b2735259a849c6832bfc0b997f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tuna=20Alika=C5=9Fifo=C4=9Flu?= <tunakasif@gmail.com> Date: Thu, 8 May 2025 23:07:24 +0300 Subject: [PATCH 536/685] refactor(tests): increase verbosity of variables To add more test variables, increase the verbosity of current ones and make them more clear. --- tests/providers/test_cargo_provider.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/providers/test_cargo_provider.py b/tests/providers/test_cargo_provider.py index 646ef3a53d..2144a145a7 100644 --- a/tests/providers/test_cargo_provider.py +++ b/tests/providers/test_cargo_provider.py @@ -15,7 +15,7 @@ version = "0.1.0" """ -CARGO_EXPECTED = """\ +CARGO_TOML_EXPECTED = """\ [package] name = "whatever" version = "42.1" @@ -27,7 +27,7 @@ version = "0.1.0" """ -CARGO_WORKSPACE_EXPECTED = """\ +CARGO_WORKSPACE_TOML_EXPECTED = """\ [workspace.package] name = "whatever" version = "42.1" @@ -37,8 +37,8 @@ @pytest.mark.parametrize( "content, expected", ( - (CARGO_TOML, CARGO_EXPECTED), - (CARGO_WORKSPACE_TOML, CARGO_WORKSPACE_EXPECTED), + (CARGO_TOML, CARGO_TOML_EXPECTED), + (CARGO_WORKSPACE_TOML, CARGO_WORKSPACE_TOML_EXPECTED), ), ) def test_cargo_provider( From d14218b3ddf0e95855f6147ae472559c3a9d5055 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tuna=20Alika=C5=9Fifo=C4=9Flu?= <tunakasif@gmail.com> Date: Thu, 8 May 2025 23:08:12 +0300 Subject: [PATCH 537/685] test: add test for cargo provider with lock files Add a test to check the behavior of the cargo provider when a `Cargo.lock` file is present. This test ensures that the `CargoProvider` behaves correctly when the lock file is present, and updates both the `Cargo.lock` and `Cargo.toml` files accordingly. --- tests/providers/test_cargo_provider.py | 69 ++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/tests/providers/test_cargo_provider.py b/tests/providers/test_cargo_provider.py index 2144a145a7..4b20c6ea53 100644 --- a/tests/providers/test_cargo_provider.py +++ b/tests/providers/test_cargo_provider.py @@ -33,6 +33,32 @@ version = "42.1" """ +CARGO_LOCK = """\ +[[package]] +name = "whatever" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "123abc" +dependencies = [ + "packageA", + "packageB", + "packageC", +] +""" + +CARGO_LOCK_EXPECTED = """\ +[[package]] +name = "whatever" +version = "42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "123abc" +dependencies = [ + "packageA", + "packageB", + "packageC", +] +""" + @pytest.mark.parametrize( "content, expected", @@ -58,3 +84,46 @@ def test_cargo_provider( provider.set_version("42.1") assert file.read_text() == dedent(expected) + + +@pytest.mark.parametrize( + "toml_content, lock_content, toml_expected, lock_expected", + ( + ( + CARGO_TOML, + CARGO_LOCK, + CARGO_TOML_EXPECTED, + CARGO_LOCK_EXPECTED, + ), + ( + CARGO_WORKSPACE_TOML, + CARGO_LOCK, + CARGO_WORKSPACE_TOML_EXPECTED, + CARGO_LOCK_EXPECTED, + ), + ), +) +def test_cargo_provider_with_lock( + config: BaseConfig, + chdir: Path, + toml_content: str, + lock_content: str, + toml_expected: str, + lock_expected: str, +): + filename = CargoProvider.filename + file = chdir / filename + file.write_text(dedent(toml_content)) + + lock_filename = CargoProvider.lock_filename + lock_file = chdir / lock_filename + lock_file.write_text(dedent(lock_content)) + config.settings["version_provider"] = "cargo" + + provider = get_provider(config) + assert isinstance(provider, CargoProvider) + assert provider.get_version() == "0.1.0" + + provider.set_version("42.1") + assert file.read_text() == dedent(toml_expected) + assert lock_file.read_text() == dedent(lock_expected) From 7173c47d8561ec86d060ec3c8783604b7744cea9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tuna=20Alika=C5=9Fifo=C4=9Flu?= <tunakasif@gmail.com> Date: Thu, 8 May 2025 23:22:17 +0300 Subject: [PATCH 538/685] docs(providers): update `cargo` explanation Add `Cargo.lock` update information to the documentation. --- docs/config.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/config.md b/docs/config.md index d1ae90b29a..a522312743 100644 --- a/docs/config.md +++ b/docs/config.md @@ -353,7 +353,7 @@ Commitizen provides some version providers for some well known formats: | `pep621` | Get and set version from `pyproject.toml` `project.version` field | | `poetry` | Get and set version from `pyproject.toml` `tool.poetry.version` field | | `uv` | Get and set version from `pyproject.toml` `project.version` field and `uv.lock` `package.version` field whose `package.name` field is the same as `pyproject.toml` `project.name` field | -| `cargo` | Get and set version from `Cargo.toml` `project.version` field | +| `cargo` | Get and set version from `Cargo.toml` `package.version` field and `Cargo.lock` `package.version` field whose `package.name` field is the same as `Cargo.toml` `package.name` field | | `npm` | Get and set version from `package.json` `version` field, `package-lock.json` `version,packages.''.version` fields if the file exists, and `npm-shrinkwrap.json` `version,packages.''.version` fields if the file exists | | `composer` | Get and set version from `composer.json` `project.version` field | From be02801f92cb948ba86d8c1a9a306be4172e4efe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sat, 10 May 2025 13:47:12 +0000 Subject: [PATCH 539/685] =?UTF-8?q?bump:=20version=204.6.3=20=E2=86=92=204?= =?UTF-8?q?.7.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 10 ++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 08c31ba0a0..ad78003cf3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.6.3 # automatically updated by Commitizen + rev: v4.7.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index dbad463955..7ca4f2aa70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## v4.7.0 (2025-05-10) + +### Feat + +- **providers**: add support for `Cargo.lock` + +### Refactor + +- **tests**: increase verbosity of variables + ## v4.6.3 (2025-05-07) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index de3842dc77..8355eb42a9 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.6.3" +__version__ = "4.7.0" diff --git a/pyproject.toml b/pyproject.toml index 92b28fd091..02c6d12762 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.6.3" +version = "4.7.0" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.6.3" +version = "4.7.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", From 454494788f0b9efc90b90c496d144b0edfc76348 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 11 May 2025 16:09:40 +0800 Subject: [PATCH 540/685] docs(bug_report.yml): update bug_report.yml Closes #1134 --- .github/ISSUE_TEMPLATE/bug_report.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 10d782d30b..3b15906cfa 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -48,14 +48,14 @@ body: attributes: label: Environment description: | - For older commitizen versions, please include the output of the following commands manually - placeholder: | - - commitizen version: `cz version` - - python version: `python --version` - - operating system: `python3 -c "import platform; print(platform.system())"` + For older commitizen versions, please include the output of the following command manually: ```bash cz version --report ``` + placeholder: | + Commitizen Version: 4.0.0 + Python Version: 3.13.3 (main, Apr 8 2025, 13:54:08) [Clang 16.0.0 (clang-1600.0.26.6)] + Operating System: Darwin validations: required: true From 617b610e2f6e1ea9c373a09e7355d134ff0e7ac8 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 11 May 2025 21:04:16 +0800 Subject: [PATCH 541/685] docs(bug_report.yml): resolve comments --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 3b15906cfa..9ed5badae4 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -48,7 +48,7 @@ body: attributes: label: Environment description: | - For older commitizen versions, please include the output of the following command manually: + Please use the following command to retrieve environment information ```bash cz version --report From d86ec4c32b619020f86724fdf7804cee48b77adc Mon Sep 17 00:00:00 2001 From: Tim Hsiung <bear890707@gmail.com> Date: Thu, 15 May 2025 19:11:52 +0800 Subject: [PATCH 542/685] style: fix some typos (#1407) --- commitizen/commands/bump.py | 2 +- commitizen/commands/changelog.py | 2 +- commitizen/commands/check.py | 6 +++--- commitizen/commands/commit.py | 2 +- commitizen/commands/example.py | 2 +- commitizen/commands/info.py | 2 +- commitizen/commands/init.py | 2 +- commitizen/commands/schema.py | 2 +- commitizen/factory.py | 2 +- commitizen/version_schemes.py | 10 +++++----- tests/commands/test_bump_command.py | 18 +++++++++--------- tests/commands/test_changelog_command.py | 4 ++-- tests/commands/test_check_command.py | 2 +- tests/commands/test_init_command.py | 2 +- tests/conftest.py | 2 +- tests/test_bump_update_version_in_files.py | 4 ++-- tests/test_changelog_format_asciidoc.py | 2 +- tests/test_changelog_format_markdown.py | 2 +- .../test_changelog_format_restructuredtext.py | 2 +- tests/test_changelog_format_textile.py | 2 +- tests/test_cz_customize.py | 6 +++--- tests/test_factory.py | 4 ++-- tests/test_version_scheme_pep440.py | 4 ++-- tests/test_version_scheme_semver.py | 4 ++-- 24 files changed, 45 insertions(+), 45 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 60853094f9..0a2bbe37fc 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -68,7 +68,7 @@ def __init__(self, config: BaseConfig, arguments: dict): if arguments[key] is not None }, } - self.cz = factory.commiter_factory(self.config) + self.cz = factory.committer_factory(self.config) self.changelog_flag = arguments["changelog"] self.changelog_config = self.config.settings.get("update_changelog_on_bump") self.changelog_to_stdout = arguments["changelog_to_stdout"] diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 3b8f43e372..fb6f76a6b7 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -49,7 +49,7 @@ def __init__(self, config: BaseConfig, args): ) self.encoding = self.config.settings["encoding"] - self.cz = factory.commiter_factory(self.config) + self.cz = factory.committer_factory(self.config) self.start_rev = args.get("start_rev") or self.config.settings.get( "changelog_start_rev" diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index e22155cf78..087db03ea5 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -46,7 +46,7 @@ def __init__(self, config: BaseConfig, arguments: dict[str, Any], cwd=os.getcwd( self.config: BaseConfig = config self.encoding = config.settings["encoding"] - self.cz = factory.commiter_factory(self.config) + self.cz = factory.committer_factory(self.config) def _valid_command_argument(self): num_exclusive_args_provided = sum( @@ -72,7 +72,7 @@ def __call__(self): raise NoCommitsFoundError(f"No commit found with range: '{self.rev_range}'") pattern = self.cz.schema_pattern() - ill_formated_commits = [ + ill_formatted_commits = [ commit for commit in commits if not self.validate_commit_message(commit.message, pattern) @@ -80,7 +80,7 @@ def __call__(self): displayed_msgs_content = "\n".join( [ f'commit "{commit.rev}": "{commit.message}"' - for commit in ill_formated_commits + for commit in ill_formatted_commits ] ) if displayed_msgs_content: diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 93f048082b..cb34c41a50 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -35,7 +35,7 @@ def __init__(self, config: BaseConfig, arguments: dict): self.config: BaseConfig = config self.encoding = config.settings["encoding"] - self.cz = factory.commiter_factory(self.config) + self.cz = factory.committer_factory(self.config) self.arguments = arguments self.temp_file: str = get_backup_file_path() diff --git a/commitizen/commands/example.py b/commitizen/commands/example.py index e7abe7b318..a28ad85f16 100644 --- a/commitizen/commands/example.py +++ b/commitizen/commands/example.py @@ -7,7 +7,7 @@ class Example: def __init__(self, config: BaseConfig, *args): self.config: BaseConfig = config - self.cz = factory.commiter_factory(self.config) + self.cz = factory.committer_factory(self.config) def __call__(self): out.write(self.cz.example()) diff --git a/commitizen/commands/info.py b/commitizen/commands/info.py index afac9797e4..abd4197e7f 100644 --- a/commitizen/commands/info.py +++ b/commitizen/commands/info.py @@ -7,7 +7,7 @@ class Info: def __init__(self, config: BaseConfig, *args): self.config: BaseConfig = config - self.cz = factory.commiter_factory(self.config) + self.cz = factory.committer_factory(self.config) def __call__(self): out.write(self.cz.info()) diff --git a/commitizen/commands/init.py b/commitizen/commands/init.py index df872ec7ee..20277399d8 100644 --- a/commitizen/commands/init.py +++ b/commitizen/commands/init.py @@ -82,7 +82,7 @@ class Init: def __init__(self, config: BaseConfig, *args): self.config: BaseConfig = config self.encoding = config.settings["encoding"] - self.cz = factory.commiter_factory(self.config) + self.cz = factory.committer_factory(self.config) self.project_info = ProjectInfo() def __call__(self): diff --git a/commitizen/commands/schema.py b/commitizen/commands/schema.py index 0940648cde..4af5679cf5 100644 --- a/commitizen/commands/schema.py +++ b/commitizen/commands/schema.py @@ -7,7 +7,7 @@ class Schema: def __init__(self, config: BaseConfig, *args): self.config: BaseConfig = config - self.cz = factory.commiter_factory(self.config) + self.cz = factory.committer_factory(self.config) def __call__(self): out.write(self.cz.schema()) diff --git a/commitizen/factory.py b/commitizen/factory.py index 09af5fd0f7..b5d665b65e 100644 --- a/commitizen/factory.py +++ b/commitizen/factory.py @@ -4,7 +4,7 @@ from commitizen.exceptions import NoCommitizenFoundException -def commiter_factory(config: BaseConfig) -> BaseCommitizen: +def committer_factory(config: BaseConfig) -> BaseCommitizen: """Return the correct commitizen existing in the registry.""" name: str = config.settings["name"] try: diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index 2486be58c8..84ded9316e 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -19,7 +19,7 @@ else: import importlib_metadata as metadata -from packaging.version import InvalidVersion # noqa: F401: Rexpose the common exception +from packaging.version import InvalidVersion # noqa: F401: expose the common exception from packaging.version import Version as _BaseVersion from commitizen.defaults import MAJOR, MINOR, PATCH, Settings @@ -78,7 +78,7 @@ def is_prerelease(self) -> bool: @property def prerelease(self) -> str | None: - """The prelease potion of the version is this is a prerelease.""" + """The prerelease potion of the version is this is a prerelease.""" raise NotImplementedError("must be implemented") @property @@ -142,7 +142,7 @@ def bump( prerelease: The type of prerelease, if Any is_local_version: Whether to increment the local version instead exact_increment: Treat the increment and prerelease arguments explicitly. Disables logic - that attempts to deduce the correct increment when a prelease suffix is present. + that attempts to deduce the correct increment when a prerelease suffix is present. """ @@ -351,7 +351,7 @@ class SemVer2(SemVer): See: https://semver.org/spec/v2.0.0.html """ - _STD_PRELEASES = { + _STD_PRERELEASES = { "a": "alpha", "b": "beta", } @@ -359,7 +359,7 @@ class SemVer2(SemVer): @property def prerelease(self) -> str | None: if self.is_prerelease and self.pre: - prerelease_type = self._STD_PRELEASES.get(self.pre[0], self.pre[0]) + prerelease_type = self._STD_PRERELEASES.get(self.pre[0], self.pre[0]) return f"{prerelease_type}.{self.pre[1]}" return None diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index b5ff7e6edb..f3c1ba923b 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -209,7 +209,7 @@ def test_bump_command_increment_option( @pytest.mark.usefixtures("tmp_commitizen_project") -def test_bump_command_prelease(mocker: MockFixture): +def test_bump_command_prerelease(mocker: MockFixture): create_file_and_commit("feat: location") # Create an alpha pre-release. @@ -281,7 +281,7 @@ def test_bump_command_prelease(mocker: MockFixture): @pytest.mark.usefixtures("tmp_commitizen_project") -def test_bump_command_prelease_increment(mocker: MockFixture): +def test_bump_command_prerelease_increment(mocker: MockFixture): # FINAL RELEASE create_file_and_commit("fix: location") @@ -317,7 +317,7 @@ def test_bump_command_prelease_increment(mocker: MockFixture): @pytest.mark.usefixtures("tmp_commitizen_project") -def test_bump_command_prelease_exact_mode(mocker: MockFixture): +def test_bump_command_prerelease_exact_mode(mocker: MockFixture): # PRERELEASE create_file_and_commit("feat: location") @@ -437,7 +437,7 @@ def test_bump_on_git_with_hooks_no_verify_enabled(mocker: MockFixture): @pytest.mark.usefixtures("tmp_commitizen_project") -def test_bump_when_bumpping_is_not_support(mocker: MockFixture): +def test_bump_when_bumping_is_not_support(mocker: MockFixture): create_file_and_commit( "feat: new user interface\n\nBREAKING CHANGE: age is no longer supported" ) @@ -1062,7 +1062,7 @@ def test_bump_use_version_provider(mocker: MockFixture): mock.set_version.assert_called_once_with("0.0.1") -def test_bump_command_prelease_scheme_via_cli( +def test_bump_command_prerelease_scheme_via_cli( tmp_commitizen_project_initial, mocker: MockFixture ): tmp_commitizen_project = tmp_commitizen_project_initial() @@ -1101,7 +1101,7 @@ def test_bump_command_prelease_scheme_via_cli( assert "0.2.0" in f.read() -def test_bump_command_prelease_scheme_via_config( +def test_bump_command_prerelease_scheme_via_config( tmp_commitizen_project_initial, mocker: MockFixture ): tmp_commitizen_project = tmp_commitizen_project_initial( @@ -1145,7 +1145,7 @@ def test_bump_command_prelease_scheme_via_config( assert "0.2.0" in f.read() -def test_bump_command_prelease_scheme_check_old_tags( +def test_bump_command_prerelease_scheme_check_old_tags( tmp_commitizen_project_initial, mocker: MockFixture ): tmp_commitizen_project = tmp_commitizen_project_initial( @@ -1285,7 +1285,7 @@ def test_bump_command_version_scheme_priority_over_version_type(mocker: MockFixt ), ), ) -def test_bump_template_option_precedance( +def test_bump_template_option_precedence( mocker: MockFixture, tmp_commitizen_project: Path, any_changelog_format: ChangelogFormat, @@ -1327,7 +1327,7 @@ def test_bump_template_option_precedance( assert out == expected -def test_bump_template_extras_precedance( +def test_bump_template_extras_precedence( mocker: MockFixture, tmp_commitizen_project: Path, any_changelog_format: ChangelogFormat, diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index f794b8d9f3..12a2e04b42 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -1481,7 +1481,7 @@ def test_changelog_from_current_version_tag_with_nonversion_tag( ), ), ) -def test_changelog_template_option_precedance( +def test_changelog_template_option_precedence( mocker: MockFixture, tmp_commitizen_project: Path, any_changelog_format: ChangelogFormat, @@ -1523,7 +1523,7 @@ def test_changelog_template_option_precedance( assert out == expected -def test_changelog_template_extras_precedance( +def test_changelog_template_extras_precedence( mocker: MockFixture, tmp_commitizen_project: Path, mock_plugin: BaseCommitizen, diff --git a/tests/commands/test_check_command.py b/tests/commands/test_check_command.py index f1db446190..d95a173d8a 100644 --- a/tests/commands/test_check_command.py +++ b/tests/commands/test_check_command.py @@ -365,7 +365,7 @@ def test_check_command_with_pipe_message_and_failed(mocker: MockFixture): assert "commit validation: failed!" in str(excinfo.value) -def test_check_command_with_comment_in_messege_file(mocker: MockFixture, capsys): +def test_check_command_with_comment_in_message_file(mocker: MockFixture, capsys): testargs = ["cz", "check", "--commit-msg-file", "some_file"] mocker.patch.object(sys, "argv", testargs) mocker.patch( diff --git a/tests/commands/test_init_command.py b/tests/commands/test_init_command.py index ea18e89a2b..f617c51d8f 100644 --- a/tests/commands/test_init_command.py +++ b/tests/commands/test_init_command.py @@ -183,7 +183,7 @@ def check_pre_commit_config(expected: list[dict[str, Any]]): @pytest.mark.usefixtures("pre_commit_installed") class TestPreCommitCases: - def test_no_existing_pre_commit_conifg(_, default_choice, tmpdir, config): + def test_no_existing_pre_commit_config(_, default_choice, tmpdir, config): with tmpdir.as_cwd(): commands.Init(config)() check_cz_config(default_choice) diff --git a/tests/conftest.py b/tests/conftest.py index 3d88f19b12..60c586f2e6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -232,7 +232,7 @@ def message(self, answers: dict) -> str: @pytest.fixture def mock_plugin(mocker: MockerFixture, config: BaseConfig) -> BaseCommitizen: mock = MockPlugin(config) - mocker.patch("commitizen.factory.commiter_factory", return_value=mock) + mocker.patch("commitizen.factory.committer_factory", return_value=mock) return mock diff --git a/tests/test_bump_update_version_in_files.py b/tests/test_bump_update_version_in_files.py index 850b59c166..c14e4ad1cb 100644 --- a/tests/test_bump_update_version_in_files.py +++ b/tests/test_bump_update_version_in_files.py @@ -197,7 +197,7 @@ def test_file_version_inconsistent_error( assert expected_msg in str(excinfo.value) -def test_multiplt_versions_to_bump( +def test_multiple_versions_to_bump( multiple_versions_to_update_poetry_lock, file_regression ): old_version = "1.2.9" @@ -216,7 +216,7 @@ def test_update_version_in_globbed_files(commitizen_config_file, file_regression print(commitizen_config_file, other) copyfile(commitizen_config_file, other) - # Prepend full ppath as test assume absolute paths or cwd-relative + # Prepend full path as test assume absolute paths or cwd-relative version_files = [commitizen_config_file.dirpath("*.toml")] bump.update_version_in_files( diff --git a/tests/test_changelog_format_asciidoc.py b/tests/test_changelog_format_asciidoc.py index 59ca56191e..cc81a24f2a 100644 --- a/tests/test_changelog_format_asciidoc.py +++ b/tests/test_changelog_format_asciidoc.py @@ -160,7 +160,7 @@ def test_parse_title_type_of_line( pytest.param(CHANGELOG_D, EXPECTED_D, id="D"), ), ) -def test_get_matadata( +def test_get_metadata( tmp_path: Path, format: AsciiDoc, content: str, expected: Metadata ): changelog = tmp_path / format.default_changelog_file diff --git a/tests/test_changelog_format_markdown.py b/tests/test_changelog_format_markdown.py index e1f0d67311..1abc63f29f 100644 --- a/tests/test_changelog_format_markdown.py +++ b/tests/test_changelog_format_markdown.py @@ -160,7 +160,7 @@ def test_parse_title_type_of_line( pytest.param(CHANGELOG_D, EXPECTED_D, id="D"), ), ) -def test_get_matadata( +def test_get_metadata( tmp_path: Path, format: Markdown, content: str, expected: Metadata ): changelog = tmp_path / format.default_changelog_file diff --git a/tests/test_changelog_format_restructuredtext.py b/tests/test_changelog_format_restructuredtext.py index 74b6b736f9..14bc15ec09 100644 --- a/tests/test_changelog_format_restructuredtext.py +++ b/tests/test_changelog_format_restructuredtext.py @@ -311,7 +311,7 @@ def format_with_tags(config: BaseConfig, request) -> RestructuredText: @pytest.mark.parametrize("content, expected", CASES) -def test_get_matadata( +def test_get_metadata( tmp_path: Path, format: RestructuredText, content: str, expected: Metadata ): changelog = tmp_path / format.default_changelog_file diff --git a/tests/test_changelog_format_textile.py b/tests/test_changelog_format_textile.py index eb03484ad5..812fa6bf60 100644 --- a/tests/test_changelog_format_textile.py +++ b/tests/test_changelog_format_textile.py @@ -153,7 +153,7 @@ def test_parse_title_type_of_line( pytest.param(CHANGELOG_D, EXPECTED_D, id="D"), ), ) -def test_get_matadata( +def test_get_metadata( tmp_path: Path, format: Textile, content: str, expected: Metadata ): changelog = tmp_path / format.default_changelog_file diff --git a/tests/test_cz_customize.py b/tests/test_cz_customize.py index 210c8b6774..933b1aa065 100644 --- a/tests/test_cz_customize.py +++ b/tests/test_cz_customize.py @@ -473,16 +473,16 @@ def test_answer(config): cz = CustomizeCommitsCz(config) answers = { "change_type": "feature", - "message": "this feature enaable customize through config file", + "message": "this feature enable customize through config file", "show_message": True, } message = cz.message(answers) - assert message == "feature: this feature enaable customize through config file" + assert message == "feature: this feature enable customize through config file" cz = CustomizeCommitsCz(config) answers = { "change_type": "feature", - "message": "this feature enaable customize through config file", + "message": "this feature enable customize through config file", "show_message": False, } message = cz.message(answers) diff --git a/tests/test_factory.py b/tests/test_factory.py index 390742f467..d81a84b3d5 100644 --- a/tests/test_factory.py +++ b/tests/test_factory.py @@ -28,7 +28,7 @@ class OtherPlugin: def test_factory(): config = BaseConfig() config.settings.update({"name": defaults.DEFAULT_SETTINGS["name"]}) - r = factory.commiter_factory(config) + r = factory.committer_factory(config) assert isinstance(r, BaseCommitizen) @@ -36,7 +36,7 @@ def test_factory_fails(): config = BaseConfig() config.settings.update({"name": "Nothing"}) with pytest.raises(NoCommitizenFoundException) as excinfo: - factory.commiter_factory(config) + factory.committer_factory(config) assert "The committer has not been found in the system." in str(excinfo) diff --git a/tests/test_version_scheme_pep440.py b/tests/test_version_scheme_pep440.py index 6b1f621cb8..a983dad14a 100644 --- a/tests/test_version_scheme_pep440.py +++ b/tests/test_version_scheme_pep440.py @@ -144,7 +144,7 @@ (("3.1.4a0", "MAJOR", "alpha", 0, None), "4.0.0a0"), ] -excact_cases = [ +exact_cases = [ (("1.0.0", "PATCH", None, 0, None), "1.0.1"), (("1.0.0", "MINOR", None, 0, None), "1.1.0"), # with exact_increment=False: "1.0.0b0" @@ -213,7 +213,7 @@ def test_bump_pep440_version(test_input, expected): ) -@pytest.mark.parametrize("test_input, expected", excact_cases) +@pytest.mark.parametrize("test_input, expected", exact_cases) def test_bump_pep440_version_force(test_input, expected): current_version = test_input[0] increment = test_input[1] diff --git a/tests/test_version_scheme_semver.py b/tests/test_version_scheme_semver.py index 71d5e5876c..8785717a34 100644 --- a/tests/test_version_scheme_semver.py +++ b/tests/test_version_scheme_semver.py @@ -83,7 +83,7 @@ (("1.0.0-alpha1", None, "alpha", 0, None), "1.0.0-a2"), ] -excact_cases = [ +exact_cases = [ (("1.0.0", "PATCH", None, 0, None), "1.0.1"), (("1.0.0", "MINOR", None, 0, None), "1.1.0"), # with exact_increment=False: "1.0.0-b0" @@ -144,7 +144,7 @@ def test_bump_semver_version(test_input, expected): ) -@pytest.mark.parametrize("test_input, expected", excact_cases) +@pytest.mark.parametrize("test_input, expected", exact_cases) def test_bump_semver_version_force(test_input, expected): current_version = test_input[0] increment = test_input[1] From 2cb2daf39b78d0796ff39cc2912047ea6ea32e5d Mon Sep 17 00:00:00 2001 From: Tim Hsiung <bear890707@gmail.com> Date: Thu, 15 May 2025 19:13:20 +0800 Subject: [PATCH 543/685] docs(pull_request_template): make the checklist holistic (#1408) --- .github/pull_request_template.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 0064604fba..e28480e5b9 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -9,12 +9,24 @@ Please fill in the following content to let us know better about this change. ## Checklist +- [ ] I have read the [contributing guidelines](https://commitizen-tools.github.io/commitizen/contributing/) + +### Code Changes + - [ ] Add test cases to all the changes you introduce -- [ ] Run `poetry all` locally to ensure this change passes linter check and test -- [ ] Test the changes on the local machine manually +- [ ] Run `poetry all` locally to ensure this change passes linter check and tests +- [ ] Manually test the changes: + - [ ] Verify the feature/bug fix works as expected in real-world scenarios + - [ ] Test edge cases and error conditions + - [ ] Ensure backward compatibility is maintained + - [ ] Document any manual testing steps performed - [ ] Update the documentation for the changes -## Expected behavior +### Documentation Changes + +- [ ] Run `poetry doc` locally to ensure the documentation pages renders correctly + +## Expected Behavior <!-- A clear and concise description of what you expected to happen --> @@ -25,5 +37,5 @@ Please fill in the following content to let us know better about this change. 3. ... --> -## Additional context +## Additional Context <!-- Add any other RELATED ISSUE, context or screenshots about the pull request here. --> From 46c5ecc79ec7b3e1006a33cd69e1f576a5ba6379 Mon Sep 17 00:00:00 2001 From: "Axel H." <noirbizarre@users.noreply.github.com> Date: Fri, 16 May 2025 04:50:15 +0200 Subject: [PATCH 544/685] fix(bump): don't fail if an invalid version tag is present (fix #1410) (#1418) --- commitizen/tags.py | 12 +++++---- tests/commands/test_bump_command.py | 32 ++++++++++++++++++++++++ tests/commands/test_changelog_command.py | 8 +++--- tests/test_changelog.py | 2 +- 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/commitizen/tags.py b/commitizen/tags.py index 5724bb2574..2b9a4b091a 100644 --- a/commitizen/tags.py +++ b/commitizen/tags.py @@ -113,6 +113,10 @@ def _format_regex(self, tag_pattern: str, star: bool = False) -> str: format_regex = format_regex.replace(pattern, regex) return format_regex + def _version_tag_error(self, tag: str) -> str: + """Format the error message for an invalid version tag""" + return f"Invalid version tag: '{tag}' does not match any configured tag format" + def is_version_tag(self, tag: str | GitTag, warn: bool = False) -> bool: """ True if a given tag is a legit version tag. @@ -120,9 +124,9 @@ def is_version_tag(self, tag: str | GitTag, warn: bool = False) -> bool: if `warn` is `True`, it will print a warning message if the tag is not a version tag. """ tag = tag.name if isinstance(tag, GitTag) else tag - is_legit = any(regex.match(tag) for regex in self.version_regexes) + is_legit = any(regex.fullmatch(tag) for regex in self.version_regexes) if warn and not is_legit and not self.is_ignored_tag(tag): - out.warn(f"InvalidVersion {tag} doesn't match any configured tag format") + out.warn(self._version_tag_error(tag)) return is_legit def is_ignored_tag(self, tag: str | GitTag) -> bool: @@ -146,9 +150,7 @@ def extract_version(self, tag: GitTag) -> Version: m for regex in self.version_regexes if (m := regex.fullmatch(tag.name)) ) if not (m := next(candidates, None)): - raise InvalidVersion( - f"Invalid version tag: '{tag.name}' does not match any configured tag format" - ) + raise InvalidVersion(self._version_tag_error(tag.name)) if "version" in m.groupdict(): return self.scheme(m.group("version")) diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index f3c1ba923b..e15539d8a7 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -1656,3 +1656,35 @@ def test_bump_detect_legacy_tags_from_scm( cli.main() assert git.tag_exist("v0.4.3") + + +def test_bump_warn_but_dont_fail_on_invalid_tags( + tmp_commitizen_project: py.path.local, + mocker: MockFixture, + capsys: pytest.CaptureFixture, +): + project_root = Path(tmp_commitizen_project) + tmp_commitizen_cfg_file = project_root / "pyproject.toml" + tmp_commitizen_cfg_file.write_text( + "\n".join( + [ + "[tool.commitizen]", + 'version_provider = "scm"', + 'version_scheme = "pep440"', + ] + ), + ) + create_file_and_commit("feat: new file") + create_tag("0.4.2") + create_file_and_commit("feat: new file") + create_tag("0.4.3.deadbeaf") + create_file_and_commit("feat: new file") + + testargs = ["cz", "bump", "--increment", "patch", "--changelog"] + mocker.patch.object(sys, "argv", testargs) + cli.main() + + _, err = capsys.readouterr() + + assert err.count("Invalid version tag: '0.4.3.deadbeaf'") == 1 + assert git.tag_exist("0.4.3") diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index 12a2e04b42..0eb29cdb04 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -1788,13 +1788,13 @@ def test_changelog_ignored_tags( out = open(changelog_path).read() _, err = capsys.readouterr() assert "## ignore-0.1.0" not in out - assert "InvalidVersion ignore-0.1.0" not in err + assert "Invalid version tag: 'ignore-0.1.0'" not in err assert "## ignored" not in out - assert "InvalidVersion ignored" not in err + assert "Invalid version tag: 'ignored'" not in err assert "## not-ignored" not in out - assert "InvalidVersion not-ignored" in err + assert "Invalid version tag: 'not-ignored'" in err assert "## v0.3.0" in out - assert "InvalidVersion v0.3.0" not in err + assert "Invalid version tag: 'v0.3.0'" not in err def test_changelog_template_extra_quotes( diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 67ba273b5c..067adb4a91 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1635,7 +1635,7 @@ def test_tags_rules_get_version_tags(capsys: pytest.CaptureFixture): } captured = capsys.readouterr() - assert captured.err.count("InvalidVersion") == 2 + assert captured.err.count("Invalid version tag:") == 2 assert captured.err.count("not-a-version") == 2 From a0cc4901b0faaced74c713a9e355555fc4de0880 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 02:50:37 +0000 Subject: [PATCH 545/685] =?UTF-8?q?bump:=20version=204.7.0=20=E2=86=92=204?= =?UTF-8?q?.7.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ad78003cf3..df32532598 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.7.0 # automatically updated by Commitizen + rev: v4.7.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ca4f2aa70..486ee8dcb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v4.7.1 (2025-05-16) + +### Fix + +- **bump**: don't fail if an invalid version tag is present (fix #1410) (#1418) + ## v4.7.0 (2025-05-10) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 8355eb42a9..cc72154c1b 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.7.0" +__version__ = "4.7.1" diff --git a/pyproject.toml b/pyproject.toml index 02c6d12762..734d5127be 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.7.0" +version = "4.7.1" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.7.0" +version = "4.7.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", From 94c02b3faf89cacf7186ad8a84e9200ede851574 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 17 May 2025 02:28:08 +0800 Subject: [PATCH 546/685] refactor(default): capitalize all constants and remove unnecessary variable --- commitizen/bump.py | 8 ++++---- commitizen/commands/changelog.py | 2 +- commitizen/commands/init.py | 4 ++-- commitizen/config/__init__.py | 2 +- .../conventional_commits.py | 8 ++++---- commitizen/cz/customize/customize.py | 8 ++++---- commitizen/defaults.py | 19 +++++++++---------- tests/test_conf.py | 4 ++-- 8 files changed, 27 insertions(+), 28 deletions(-) diff --git a/commitizen/bump.py b/commitizen/bump.py index adfab64cb0..76a8e15893 100644 --- a/commitizen/bump.py +++ b/commitizen/bump.py @@ -8,7 +8,7 @@ from string import Template from typing import cast -from commitizen.defaults import MAJOR, MINOR, PATCH, bump_message, encoding +from commitizen.defaults import BUMP_MESSAGE, ENCODING, MAJOR, MINOR, PATCH from commitizen.exceptions import CurrentVersionNotFoundError from commitizen.git import GitCommit, smart_open from commitizen.version_schemes import Increment, Version @@ -64,7 +64,7 @@ def update_version_in_files( files: list[str], *, check_consistency: bool = False, - encoding: str = encoding, + encoding: str = ENCODING, ) -> list[str]: """Change old version to the new one in every file given. @@ -121,7 +121,7 @@ def _bump_with_regex( current_version: str, new_version: str, regex: str, - encoding: str = encoding, + encoding: str = ENCODING, ) -> tuple[bool, str]: current_version_found = False lines = [] @@ -148,6 +148,6 @@ def create_commit_message( message_template: str | None = None, ) -> str: if message_template is None: - message_template = bump_message + message_template = BUMP_MESSAGE t = Template(message_template) return t.safe_substitute(current_version=current_version, new_version=new_version) diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index fb6f76a6b7..0e4efabfa1 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -78,7 +78,7 @@ def __init__(self, config: BaseConfig, args): self.change_type_order = ( self.config.settings.get("change_type_order") or self.cz.change_type_order - or defaults.change_type_order + or defaults.CHANGE_TYPE_ORDER ) self.rev_range = args.get("rev_range") self.tag_format: str = ( diff --git a/commitizen/commands/init.py b/commitizen/commands/init.py index 20277399d8..0eb3d99d17 100644 --- a/commitizen/commands/init.py +++ b/commitizen/commands/init.py @@ -11,7 +11,7 @@ from commitizen.__version__ import __version__ from commitizen.config import BaseConfig, JsonConfig, TomlConfig, YAMLConfig from commitizen.cz import registry -from commitizen.defaults import DEFAULT_SETTINGS, config_files +from commitizen.defaults import CONFIG_FILES, DEFAULT_SETTINGS from commitizen.exceptions import InitFailedError, NoAnswersError from commitizen.git import get_latest_tag_name, get_tag_names, smart_open from commitizen.version_schemes import KNOWN_SCHEMES, Version, get_version_scheme @@ -165,7 +165,7 @@ def _ask_config_path(self) -> str: name: str = questionary.select( "Please choose a supported config file: ", - choices=config_files, + choices=CONFIG_FILES, default=default_path, style=self.cz.style, ).unsafe_ask() diff --git a/commitizen/config/__init__.py b/commitizen/config/__init__.py index f3720bb1b3..9dfd591c40 100644 --- a/commitizen/config/__init__.py +++ b/commitizen/config/__init__.py @@ -28,7 +28,7 @@ def read_cfg(filepath: str | None = None) -> BaseConfig: cfg_paths = ( path / Path(filename) for path in cfg_search_paths - for filename in defaults.config_files + for filename in defaults.CONFIG_FILES ) for filename in cfg_paths: diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index c7b88258cb..af29a209fc 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -28,9 +28,9 @@ def parse_subject(text): class ConventionalCommitsCz(BaseCommitizen): - bump_pattern = defaults.bump_pattern - bump_map = defaults.bump_map - bump_map_major_version_zero = defaults.bump_map_major_version_zero + bump_pattern = defaults.BUMP_PATTERN + bump_map = defaults.BUMP_MAP + bump_map_major_version_zero = defaults.BUMP_MAP_MAJOR_VERSION_ZERO commit_parser = r"^((?P<change_type>feat|fix|refactor|perf|BREAKING CHANGE)(?:\((?P<scope>[^()\r\n]*)\)|\()?(?P<breaking>!)?|\w+!):\s(?P<message>.*)?" # noqa change_type_map = { "feat": "Feat", @@ -38,7 +38,7 @@ class ConventionalCommitsCz(BaseCommitizen): "refactor": "Refactor", "perf": "Perf", } - changelog_pattern = defaults.bump_pattern + changelog_pattern = defaults.BUMP_PATTERN def questions(self) -> Questions: questions: Questions = [ diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index d53ae29f1b..afa35e92de 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -21,10 +21,10 @@ class CustomizeCommitsCz(BaseCommitizen): - bump_pattern = defaults.bump_pattern - bump_map = defaults.bump_map - bump_map_major_version_zero = defaults.bump_map_major_version_zero - change_type_order = defaults.change_type_order + bump_pattern = defaults.BUMP_PATTERN + bump_map = defaults.BUMP_MAP + bump_map_major_version_zero = defaults.BUMP_MAP_MAJOR_VERSION_ZERO + change_type_order = defaults.CHANGE_TYPE_ORDER def __init__(self, config: BaseConfig): super().__init__(config) diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 0b78e1b0bb..0b6c28e6a9 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -60,8 +60,7 @@ class Settings(TypedDict, total=False): extras: dict[str, Any] -name: str = "cz_conventional_commits" -config_files: list[str] = [ +CONFIG_FILES: list[str] = [ "pyproject.toml", ".cz.toml", ".cz.json", @@ -70,10 +69,10 @@ class Settings(TypedDict, total=False): "cz.yaml", "cz.toml", ] -encoding: str = "utf-8" +ENCODING = "utf-8" DEFAULT_SETTINGS: Settings = { - "name": name, + "name": "cz_conventional_commits", "version": None, "version_files": [], "version_provider": "commitizen", @@ -102,7 +101,7 @@ class Settings(TypedDict, total=False): "pre_bump_hooks": [], "post_bump_hooks": [], "prerelease_offset": 0, - "encoding": encoding, + "encoding": ENCODING, "always_signoff": False, "template": None, # default provided by plugin "extras": {}, @@ -114,8 +113,8 @@ class Settings(TypedDict, total=False): CHANGELOG_FORMAT = "markdown" -bump_pattern = r"^((BREAKING[\-\ ]CHANGE|\w+)(\(.+\))?!?):" -bump_map = OrderedDict( +BUMP_PATTERN = r"^((BREAKING[\-\ ]CHANGE|\w+)(\(.+\))?!?):" +BUMP_MAP = OrderedDict( ( (r"^.+!$", MAJOR), (r"^BREAKING[\-\ ]CHANGE", MAJOR), @@ -125,7 +124,7 @@ class Settings(TypedDict, total=False): (r"^perf", PATCH), ) ) -bump_map_major_version_zero = OrderedDict( +BUMP_MAP_MAJOR_VERSION_ZERO = OrderedDict( ( (r"^.+!$", MINOR), (r"^BREAKING[\-\ ]CHANGE", MINOR), @@ -135,8 +134,8 @@ class Settings(TypedDict, total=False): (r"^perf", PATCH), ) ) -change_type_order = ["BREAKING CHANGE", "Feat", "Fix", "Refactor", "Perf"] -bump_message = "bump: version $current_version → $new_version" +CHANGE_TYPE_ORDER = ["BREAKING CHANGE", "Feat", "Fix", "Refactor", "Perf"] +BUMP_MESSAGE = "bump: version $current_version → $new_version" def get_tag_regexes( diff --git a/tests/test_conf.py b/tests/test_conf.py index 80d58983e7..f89a0049f4 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -151,7 +151,7 @@ def test_find_git_project_root(tmpdir): @pytest.mark.parametrize( - "config_files_manager", defaults.config_files.copy(), indirect=True + "config_files_manager", defaults.CONFIG_FILES.copy(), indirect=True ) def test_set_key(config_files_manager): _conf = config.read_cfg() @@ -162,7 +162,7 @@ def test_set_key(config_files_manager): class TestReadCfg: @pytest.mark.parametrize( - "config_files_manager", defaults.config_files.copy(), indirect=True + "config_files_manager", defaults.CONFIG_FILES.copy(), indirect=True ) def test_load_conf(_, config_files_manager): cfg = config.read_cfg() From 8d573069ff591f909c9b9725da769fbab05d5bb0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sun, 18 May 2025 15:17:25 +0000 Subject: [PATCH 547/685] =?UTF-8?q?bump:=20version=204.7.1=20=E2=86=92=204?= =?UTF-8?q?.7.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index df32532598..7497946571 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.7.1 # automatically updated by Commitizen + rev: v4.7.2 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 486ee8dcb2..de772c6a75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v4.7.2 (2025-05-18) + +### Refactor + +- **default**: capitalize all constants and remove unnecessary variable + ## v4.7.1 (2025-05-16) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index cc72154c1b..98c926d162 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.7.1" +__version__ = "4.7.2" diff --git a/pyproject.toml b/pyproject.toml index 734d5127be..8d9214615a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.7.1" +version = "4.7.2" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.7.1" +version = "4.7.2" tag_format = "v$version" version_files = [ "pyproject.toml:version", From 767c5fede43c8f8858778b3e7f372c532495c48e Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 19 May 2025 20:17:08 +0800 Subject: [PATCH 548/685] docs(ISSUE_TEMPLATE): correct labels --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/ISSUE_TEMPLATE/documentation.yml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9ed5badae4..9d597c7b36 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,7 +1,7 @@ name: 🛠 Bug report description: Create a report to help us improve title: Good bug title tells us about precise symptom, not about the root cause. -labels: [bug] +labels: ['type: bug'] body: - type: textarea id: description diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml index 51d378b747..8fe40136c3 100644 --- a/.github/ISSUE_TEMPLATE/documentation.yml +++ b/.github/ISSUE_TEMPLATE/documentation.yml @@ -1,7 +1,7 @@ name: 📖 Documentation description: Suggest an improvement for the documentation of this project title: Content to be added or fixed -labels: [documentation] +labels: ['type: documentation'] body: - type: checkboxes id: type diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 7d67eb18af..4bd19b9b3a 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,7 +1,7 @@ name: 🚀 Feature request description: Suggest an idea for this project title: "<One feature request per issue>" -labels: [feature] +labels: ['type: feature'] body: - type: textarea id: description From 2982c6e5e31c9fd171e364c2a2866dc109303c20 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 19 May 2025 20:32:54 +0800 Subject: [PATCH 549/685] docs(label_issues): add logics for adding os related labels --- .github/workflows/label_issues.yml | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/.github/workflows/label_issues.yml b/.github/workflows/label_issues.yml index 45ca450f89..ec18d98be2 100644 --- a/.github/workflows/label_issues.yml +++ b/.github/workflows/label_issues.yml @@ -15,9 +15,31 @@ jobs: - uses: actions/github-script@v7 with: script: | - github.rest.issues.addLabels({ + const issue = await github.rest.issues.get({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - labels: ['issue-status: needs-triage'] - }) + }); + + const body = issue.data.body || ''; + + const osLabels = new Set(); // Use a Set to avoid duplicates + + if (body.includes('Operating System: Darwin')) { + osLabels.add('os: macOS'); + } + + if (body.includes('Operating System: Linux')) { + osLabels.add('os: Linux'); + } + + if (body.includes('Operating System: Windows')) { + osLabels.add('os: Windows'); + } + + await github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ['issue-status: needs-triage', ...osLabels], + }); From 49f4d2b1a68de7e9b78cd39497483787de892db2 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 19 May 2025 21:13:19 +0800 Subject: [PATCH 550/685] docs(label_issues): add comment --- .github/workflows/label_issues.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/label_issues.yml b/.github/workflows/label_issues.yml index ec18d98be2..e74a36c4bd 100644 --- a/.github/workflows/label_issues.yml +++ b/.github/workflows/label_issues.yml @@ -25,6 +25,7 @@ jobs: const osLabels = new Set(); // Use a Set to avoid duplicates + // Parse the "Environment" section, output of `cz version --report` if (body.includes('Operating System: Darwin')) { osLabels.add('os: macOS'); } From e3b4465261cfe9c541cdd1174adae53bc7e309cb Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 19 May 2025 22:05:33 +0800 Subject: [PATCH 551/685] docs(bug_report): add fallback command if cz version --report is not available --- .github/ISSUE_TEMPLATE/bug_report.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9d597c7b36..5eac443f29 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -53,6 +53,14 @@ body: ```bash cz version --report ``` + + If `cz version --report` is not available, please run the following commands to retrieve your environment information: + + ```bash + echo "Commitizen Version: $(cz version)" + echo "Python Version: $(python3 -c 'import sys; print(sys.version)')" + echo "Operating System: $(python3 -c 'import platform; print(platform.system())')" + ``` placeholder: | Commitizen Version: 4.0.0 Python Version: 3.13.3 (main, Apr 8 2025, 13:54:08) [Clang 16.0.0 (clang-1600.0.26.6)] From 87873f99d89b3da65388d1a93827a1536e29348e Mon Sep 17 00:00:00 2001 From: Jani Jappinen <2580412+jappja@users.noreply.github.com> Date: Thu, 15 May 2025 09:19:20 +0000 Subject: [PATCH 552/685] feat(cli): add --tag-format argument to changelog command Changelog command already checks "tag_format" argument but cli support was missing. --- commitizen/cli.py | 4 ++++ ...angelog_command_shows_description_when_use_help_option.txt | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 72d824380d..d08afc6706 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -450,6 +450,10 @@ def __call__( "help": "Export the changelog template into this file instead of rendering it", }, *deepcopy(tpl_arguments), + { + "name": "--tag-format", + "help": "The format of the tag, wrap around simple quotes", + }, ], }, { diff --git a/tests/commands/test_changelog_command/test_changelog_command_shows_description_when_use_help_option.txt b/tests/commands/test_changelog_command/test_changelog_command_shows_description_when_use_help_option.txt index 461eb2edd6..91b7f389b5 100644 --- a/tests/commands/test_changelog_command/test_changelog_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_changelog_command/test_changelog_command_shows_description_when_use_help_option.txt @@ -3,7 +3,7 @@ usage: cz changelog [-h] [--dry-run] [--file-name FILE_NAME] [--start-rev START_REV] [--merge-prerelease] [--version-scheme {pep440,semver,semver2}] [--export-template EXPORT_TEMPLATE] [--template TEMPLATE] - [--extra EXTRA] + [--extra EXTRA] [--tag-format TAG_FORMAT] [rev_range] generate changelog (note that it will overwrite existing file) @@ -37,3 +37,5 @@ options: changelog template file name (relative to the current working directory) --extra, -e EXTRA a changelog extra variable (in the form 'key=value') + --tag-format TAG_FORMAT + The format of the tag, wrap around simple quotes From dbdfa60e1f95eccd9eb5d22e20f854043b2a8d37 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Tue, 20 May 2025 15:03:32 +0000 Subject: [PATCH 553/685] docs(cli/screenshots): update CLI screenshots [skip ci] --- docs/images/cli_help/cz_changelog___help.svg | 194 ++++++++++--------- 1 file changed, 101 insertions(+), 93 deletions(-) diff --git a/docs/images/cli_help/cz_changelog___help.svg b/docs/images/cli_help/cz_changelog___help.svg index 1160ccf6cf..69304f40cf 100644 --- a/docs/images/cli_help/cz_changelog___help.svg +++ b/docs/images/cli_help/cz_changelog___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 1050.4" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 1099.2" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,202 +19,210 @@ font-weight: 700; } - .terminal-1106739011-matrix { + .terminal-2926696453-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1106739011-title { + .terminal-2926696453-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1106739011-r1 { fill: #c5c8c6 } -.terminal-1106739011-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-1106739011-r3 { fill: #68a0b3;font-weight: bold } -.terminal-1106739011-r4 { fill: #98a84b } + .terminal-2926696453-r1 { fill: #c5c8c6 } +.terminal-2926696453-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-2926696453-r3 { fill: #68a0b3;font-weight: bold } +.terminal-2926696453-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-1106739011-clip-terminal"> - <rect x="0" y="0" width="975.0" height="999.4" /> + <clipPath id="terminal-2926696453-clip-terminal"> + <rect x="0" y="0" width="975.0" height="1048.2" /> </clipPath> - <clipPath id="terminal-1106739011-line-0"> + <clipPath id="terminal-2926696453-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-1"> +<clipPath id="terminal-2926696453-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-2"> +<clipPath id="terminal-2926696453-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-3"> +<clipPath id="terminal-2926696453-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-4"> +<clipPath id="terminal-2926696453-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-5"> +<clipPath id="terminal-2926696453-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-6"> +<clipPath id="terminal-2926696453-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-7"> +<clipPath id="terminal-2926696453-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-8"> +<clipPath id="terminal-2926696453-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-9"> +<clipPath id="terminal-2926696453-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-10"> +<clipPath id="terminal-2926696453-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-11"> +<clipPath id="terminal-2926696453-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-12"> +<clipPath id="terminal-2926696453-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-13"> +<clipPath id="terminal-2926696453-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-14"> +<clipPath id="terminal-2926696453-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-15"> +<clipPath id="terminal-2926696453-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-16"> +<clipPath id="terminal-2926696453-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-17"> +<clipPath id="terminal-2926696453-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-18"> +<clipPath id="terminal-2926696453-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-19"> +<clipPath id="terminal-2926696453-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-20"> +<clipPath id="terminal-2926696453-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-21"> +<clipPath id="terminal-2926696453-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-22"> +<clipPath id="terminal-2926696453-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-23"> +<clipPath id="terminal-2926696453-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-24"> +<clipPath id="terminal-2926696453-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-25"> +<clipPath id="terminal-2926696453-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-26"> +<clipPath id="terminal-2926696453-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-27"> +<clipPath id="terminal-2926696453-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-28"> +<clipPath id="terminal-2926696453-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-29"> +<clipPath id="terminal-2926696453-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-30"> +<clipPath id="terminal-2926696453-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-31"> +<clipPath id="terminal-2926696453-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-32"> +<clipPath id="terminal-2926696453-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-33"> +<clipPath id="terminal-2926696453-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-34"> +<clipPath id="terminal-2926696453-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-35"> +<clipPath id="terminal-2926696453-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-36"> +<clipPath id="terminal-2926696453-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-37"> +<clipPath id="terminal-2926696453-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-38"> +<clipPath id="terminal-2926696453-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-1106739011-line-39"> +<clipPath id="terminal-2926696453-line-39"> <rect x="0" y="953.1" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-2926696453-line-40"> + <rect x="0" y="977.5" width="976" height="24.65"/> + </clipPath> +<clipPath id="terminal-2926696453-line-41"> + <rect x="0" y="1001.9" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="1048.4" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="1097.2" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-1106739011-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-2926696453-clip-terminal)"> - <g class="terminal-1106739011-matrix"> - <text class="terminal-1106739011-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-1106739011-line-0)">$ cz changelog --help</text><text class="terminal-1106739011-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1106739011-line-0)"> -</text><text class="terminal-1106739011-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-1106739011-line-1)">usage: cz changelog </text><text class="terminal-1106739011-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">[</text><text class="terminal-1106739011-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-1106739011-line-1)">-h</text><text class="terminal-1106739011-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">]</text><text class="terminal-1106739011-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">[</text><text class="terminal-1106739011-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-1106739011-line-1)">--dry-run</text><text class="terminal-1106739011-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">]</text><text class="terminal-1106739011-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">[</text><text class="terminal-1106739011-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-1106739011-line-1)">--file-name FILE_NAME</text><text class="terminal-1106739011-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)">]</text><text class="terminal-1106739011-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-1)"> -</text><text class="terminal-1106739011-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">[</text><text class="terminal-1106739011-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-1106739011-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-1106739011-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">]</text><text class="terminal-1106739011-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">[</text><text class="terminal-1106739011-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-1106739011-line-2)">--incremental</text><text class="terminal-1106739011-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)">]</text><text class="terminal-1106739011-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-2)"> -</text><text class="terminal-1106739011-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">[</text><text class="terminal-1106739011-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-1106739011-line-3)">--start-rev START_REV</text><text class="terminal-1106739011-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">]</text><text class="terminal-1106739011-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">[</text><text class="terminal-1106739011-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-1106739011-line-3)">--merge-prerelease</text><text class="terminal-1106739011-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)">]</text><text class="terminal-1106739011-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-3)"> -</text><text class="terminal-1106739011-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">[</text><text class="terminal-1106739011-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-1106739011-line-4)">--version-scheme </text><text class="terminal-1106739011-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">{</text><text class="terminal-1106739011-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-1106739011-line-4)">pep440,semver,semver2</text><text class="terminal-1106739011-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">}</text><text class="terminal-1106739011-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)">]</text><text class="terminal-1106739011-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-4)"> -</text><text class="terminal-1106739011-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">[</text><text class="terminal-1106739011-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-1106739011-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-1106739011-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">]</text><text class="terminal-1106739011-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">[</text><text class="terminal-1106739011-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-1106739011-line-5)">--template TEMPLATE</text><text class="terminal-1106739011-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)">]</text><text class="terminal-1106739011-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1106739011-line-5)"> -</text><text class="terminal-1106739011-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-6)">[</text><text class="terminal-1106739011-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-1106739011-line-6)">--extra EXTRA</text><text class="terminal-1106739011-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-6)">]</text><text class="terminal-1106739011-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-6)"> -</text><text class="terminal-1106739011-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-7)"> -</text><text class="terminal-1106739011-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-8)"> -</text><text class="terminal-1106739011-r1" x="0" y="239.6" textLength="231.8" clip-path="url(#terminal-1106739011-line-9)">generate changelog </text><text class="terminal-1106739011-r2" x="231.8" y="239.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-9)">(</text><text class="terminal-1106739011-r1" x="244" y="239.6" textLength="500.2" clip-path="url(#terminal-1106739011-line-9)">note that it will overwrite existing file</text><text class="terminal-1106739011-r2" x="744.2" y="239.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-9)">)</text><text class="terminal-1106739011-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-9)"> -</text><text class="terminal-1106739011-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1106739011-line-10)"> -</text><text class="terminal-1106739011-r1" x="0" y="288.4" textLength="256.2" clip-path="url(#terminal-1106739011-line-11)">positional arguments:</text><text class="terminal-1106739011-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-11)"> -</text><text class="terminal-1106739011-r1" x="0" y="312.8" textLength="805.2" clip-path="url(#terminal-1106739011-line-12)">  rev_range             generates changelog for the given version </text><text class="terminal-1106739011-r2" x="805.2" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">(</text><text class="terminal-1106739011-r1" x="817.4" y="312.8" textLength="61" clip-path="url(#terminal-1106739011-line-12)">e.g: </text><text class="terminal-1106739011-r3" x="878.4" y="312.8" textLength="36.6" clip-path="url(#terminal-1106739011-line-12)">1.5</text><text class="terminal-1106739011-r1" x="915" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">.</text><text class="terminal-1106739011-r3" x="927.2" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">3</text><text class="terminal-1106739011-r2" x="939.4" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)">)</text><text class="terminal-1106739011-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-12)"> -</text><text class="terminal-1106739011-r1" x="0" y="337.2" textLength="500.2" clip-path="url(#terminal-1106739011-line-13)">                        or version range </text><text class="terminal-1106739011-r2" x="500.2" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">(</text><text class="terminal-1106739011-r1" x="512.4" y="337.2" textLength="61" clip-path="url(#terminal-1106739011-line-13)">e.g: </text><text class="terminal-1106739011-r3" x="573.4" y="337.2" textLength="36.6" clip-path="url(#terminal-1106739011-line-13)">1.5</text><text class="terminal-1106739011-r1" x="610" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">.</text><text class="terminal-1106739011-r3" x="622.2" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">3</text><text class="terminal-1106739011-r1" x="634.4" y="337.2" textLength="24.4" clip-path="url(#terminal-1106739011-line-13)">..</text><text class="terminal-1106739011-r3" x="658.8" y="337.2" textLength="36.6" clip-path="url(#terminal-1106739011-line-13)">1.7</text><text class="terminal-1106739011-r1" x="695.4" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">.</text><text class="terminal-1106739011-r3" x="707.6" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">9</text><text class="terminal-1106739011-r2" x="719.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)">)</text><text class="terminal-1106739011-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-13)"> -</text><text class="terminal-1106739011-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-14)"> -</text><text class="terminal-1106739011-r1" x="0" y="386" textLength="97.6" clip-path="url(#terminal-1106739011-line-15)">options:</text><text class="terminal-1106739011-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1106739011-line-15)"> -</text><text class="terminal-1106739011-r1" x="0" y="410.4" textLength="671" clip-path="url(#terminal-1106739011-line-16)">  -h, --help            show this help message and exit</text><text class="terminal-1106739011-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-16)"> -</text><text class="terminal-1106739011-r1" x="0" y="434.8" textLength="585.6" clip-path="url(#terminal-1106739011-line-17)">  --dry-run             show changelog to stdout</text><text class="terminal-1106739011-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-17)"> -</text><text class="terminal-1106739011-r1" x="0" y="459.2" textLength="280.6" clip-path="url(#terminal-1106739011-line-18)">  --file-name FILE_NAME</text><text class="terminal-1106739011-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-18)"> -</text><text class="terminal-1106739011-r1" x="0" y="483.6" textLength="573.4" clip-path="url(#terminal-1106739011-line-19)">                        file name of changelog </text><text class="terminal-1106739011-r2" x="573.4" y="483.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-19)">(</text><text class="terminal-1106739011-r1" x="585.6" y="483.6" textLength="109.8" clip-path="url(#terminal-1106739011-line-19)">default: </text><text class="terminal-1106739011-r4" x="695.4" y="483.6" textLength="170.8" clip-path="url(#terminal-1106739011-line-19)">'CHANGELOG.md'</text><text class="terminal-1106739011-r2" x="866.2" y="483.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-19)">)</text><text class="terminal-1106739011-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-19)"> -</text><text class="terminal-1106739011-r1" x="0" y="508" textLength="500.2" clip-path="url(#terminal-1106739011-line-20)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-1106739011-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1106739011-line-20)"> -</text><text class="terminal-1106739011-r1" x="0" y="532.4" textLength="707.6" clip-path="url(#terminal-1106739011-line-21)">                        set the value for the new version </text><text class="terminal-1106739011-r2" x="707.6" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)">(</text><text class="terminal-1106739011-r1" x="719.8" y="532.4" textLength="207.4" clip-path="url(#terminal-1106739011-line-21)">use the tag value</text><text class="terminal-1106739011-r2" x="927.2" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)">)</text><text class="terminal-1106739011-r1" x="939.4" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)">,</text><text class="terminal-1106739011-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-21)"> -</text><text class="terminal-1106739011-r1" x="0" y="556.8" textLength="622.2" clip-path="url(#terminal-1106739011-line-22)">                        instead of using unreleased</text><text class="terminal-1106739011-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-22)"> -</text><text class="terminal-1106739011-r1" x="0" y="581.2" textLength="939.4" clip-path="url(#terminal-1106739011-line-23)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-1106739011-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-23)"> -</text><text class="terminal-1106739011-r1" x="0" y="605.6" textLength="817.4" clip-path="url(#terminal-1106739011-line-24)">                        if the changelog has been manually modified</text><text class="terminal-1106739011-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-24)"> -</text><text class="terminal-1106739011-r1" x="0" y="630" textLength="280.6" clip-path="url(#terminal-1106739011-line-25)">  --start-rev START_REV</text><text class="terminal-1106739011-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1106739011-line-25)"> -</text><text class="terminal-1106739011-r1" x="0" y="654.4" textLength="866.2" clip-path="url(#terminal-1106739011-line-26)">                        start rev of the changelog. If not set, it will</text><text class="terminal-1106739011-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-26)"> -</text><text class="terminal-1106739011-r1" x="0" y="678.8" textLength="695.4" clip-path="url(#terminal-1106739011-line-27)">                        generate changelog from the start</text><text class="terminal-1106739011-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-27)"> -</text><text class="terminal-1106739011-r1" x="0" y="703.2" textLength="915" clip-path="url(#terminal-1106739011-line-28)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-1106739011-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-28)"> -</text><text class="terminal-1106739011-r1" x="0" y="727.6" textLength="951.6" clip-path="url(#terminal-1106739011-line-29)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-1106739011-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-29)"> -</text><text class="terminal-1106739011-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-1106739011-line-30)">                        the changelog</text><text class="terminal-1106739011-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-1106739011-line-30)"> -</text><text class="terminal-1106739011-r1" x="0" y="776.4" textLength="231.8" clip-path="url(#terminal-1106739011-line-31)">  --version-scheme </text><text class="terminal-1106739011-r2" x="231.8" y="776.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-31)">{</text><text class="terminal-1106739011-r1" x="244" y="776.4" textLength="256.2" clip-path="url(#terminal-1106739011-line-31)">pep440,semver,semver2</text><text class="terminal-1106739011-r2" x="500.2" y="776.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-31)">}</text><text class="terminal-1106739011-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-31)"> -</text><text class="terminal-1106739011-r1" x="0" y="800.8" textLength="549" clip-path="url(#terminal-1106739011-line-32)">                        choose version scheme</text><text class="terminal-1106739011-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-32)"> -</text><text class="terminal-1106739011-r1" x="0" y="825.2" textLength="427" clip-path="url(#terminal-1106739011-line-33)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-1106739011-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-33)"> -</text><text class="terminal-1106739011-r1" x="0" y="849.6" textLength="927.2" clip-path="url(#terminal-1106739011-line-34)">                        Export the changelog template into this file instead</text><text class="terminal-1106739011-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-34)"> -</text><text class="terminal-1106739011-r1" x="0" y="874" textLength="475.8" clip-path="url(#terminal-1106739011-line-35)">                        of rendering it</text><text class="terminal-1106739011-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-1106739011-line-35)"> -</text><text class="terminal-1106739011-r1" x="0" y="898.4" textLength="305" clip-path="url(#terminal-1106739011-line-36)">  --template, -t TEMPLATE</text><text class="terminal-1106739011-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-1106739011-line-36)"> -</text><text class="terminal-1106739011-r1" x="0" y="922.8" textLength="646.6" clip-path="url(#terminal-1106739011-line-37)">                        changelog template file name </text><text class="terminal-1106739011-r2" x="646.6" y="922.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-37)">(</text><text class="terminal-1106739011-r1" x="658.8" y="922.8" textLength="280.6" clip-path="url(#terminal-1106739011-line-37)">relative to the current</text><text class="terminal-1106739011-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-1106739011-line-37)"> -</text><text class="terminal-1106739011-r1" x="0" y="947.2" textLength="500.2" clip-path="url(#terminal-1106739011-line-38)">                        working directory</text><text class="terminal-1106739011-r2" x="500.2" y="947.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-38)">)</text><text class="terminal-1106739011-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-1106739011-line-38)"> -</text><text class="terminal-1106739011-r1" x="0" y="971.6" textLength="622.2" clip-path="url(#terminal-1106739011-line-39)">  --extra, -e EXTRA     a changelog extra variable </text><text class="terminal-1106739011-r2" x="622.2" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">(</text><text class="terminal-1106739011-r1" x="634.4" y="971.6" textLength="146.4" clip-path="url(#terminal-1106739011-line-39)">in the form </text><text class="terminal-1106739011-r4" x="780.8" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">'</text><text class="terminal-1106739011-r4" x="793" y="971.6" textLength="36.6" clip-path="url(#terminal-1106739011-line-39)">key</text><text class="terminal-1106739011-r4" x="829.6" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">=</text><text class="terminal-1106739011-r4" x="841.8" y="971.6" textLength="61" clip-path="url(#terminal-1106739011-line-39)">value</text><text class="terminal-1106739011-r4" x="902.8" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">'</text><text class="terminal-1106739011-r2" x="915" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)">)</text><text class="terminal-1106739011-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-1106739011-line-39)"> -</text><text class="terminal-1106739011-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-1106739011-line-40)"> + <g class="terminal-2926696453-matrix"> + <text class="terminal-2926696453-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-2926696453-line-0)">$ cz changelog --help</text><text class="terminal-2926696453-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2926696453-line-0)"> +</text><text class="terminal-2926696453-r1" x="0" y="44.4" textLength="244" clip-path="url(#terminal-2926696453-line-1)">usage: cz changelog </text><text class="terminal-2926696453-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-1)">[</text><text class="terminal-2926696453-r1" x="256.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2926696453-line-1)">-h</text><text class="terminal-2926696453-r2" x="280.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-1)">]</text><text class="terminal-2926696453-r2" x="305" y="44.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-1)">[</text><text class="terminal-2926696453-r1" x="317.2" y="44.4" textLength="109.8" clip-path="url(#terminal-2926696453-line-1)">--dry-run</text><text class="terminal-2926696453-r2" x="427" y="44.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-1)">]</text><text class="terminal-2926696453-r2" x="451.4" y="44.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-1)">[</text><text class="terminal-2926696453-r1" x="463.6" y="44.4" textLength="256.2" clip-path="url(#terminal-2926696453-line-1)">--file-name FILE_NAME</text><text class="terminal-2926696453-r2" x="719.8" y="44.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-1)">]</text><text class="terminal-2926696453-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-1)"> +</text><text class="terminal-2926696453-r2" x="244" y="68.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-2)">[</text><text class="terminal-2926696453-r1" x="256.2" y="68.8" textLength="475.8" clip-path="url(#terminal-2926696453-line-2)">--unreleased-version UNRELEASED_VERSION</text><text class="terminal-2926696453-r2" x="732" y="68.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-2)">]</text><text class="terminal-2926696453-r2" x="756.4" y="68.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-2)">[</text><text class="terminal-2926696453-r1" x="768.6" y="68.8" textLength="158.6" clip-path="url(#terminal-2926696453-line-2)">--incremental</text><text class="terminal-2926696453-r2" x="927.2" y="68.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-2)">]</text><text class="terminal-2926696453-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-2)"> +</text><text class="terminal-2926696453-r2" x="244" y="93.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-3)">[</text><text class="terminal-2926696453-r1" x="256.2" y="93.2" textLength="256.2" clip-path="url(#terminal-2926696453-line-3)">--start-rev START_REV</text><text class="terminal-2926696453-r2" x="512.4" y="93.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-3)">]</text><text class="terminal-2926696453-r2" x="536.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-3)">[</text><text class="terminal-2926696453-r1" x="549" y="93.2" textLength="219.6" clip-path="url(#terminal-2926696453-line-3)">--merge-prerelease</text><text class="terminal-2926696453-r2" x="768.6" y="93.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-3)">]</text><text class="terminal-2926696453-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-3)"> +</text><text class="terminal-2926696453-r2" x="244" y="117.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-4)">[</text><text class="terminal-2926696453-r1" x="256.2" y="117.6" textLength="207.4" clip-path="url(#terminal-2926696453-line-4)">--version-scheme </text><text class="terminal-2926696453-r2" x="463.6" y="117.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-4)">{</text><text class="terminal-2926696453-r1" x="475.8" y="117.6" textLength="256.2" clip-path="url(#terminal-2926696453-line-4)">pep440,semver,semver2</text><text class="terminal-2926696453-r2" x="732" y="117.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-4)">}</text><text class="terminal-2926696453-r2" x="744.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-4)">]</text><text class="terminal-2926696453-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-4)"> +</text><text class="terminal-2926696453-r2" x="244" y="142" textLength="12.2" clip-path="url(#terminal-2926696453-line-5)">[</text><text class="terminal-2926696453-r1" x="256.2" y="142" textLength="402.6" clip-path="url(#terminal-2926696453-line-5)">--export-template EXPORT_TEMPLATE</text><text class="terminal-2926696453-r2" x="658.8" y="142" textLength="12.2" clip-path="url(#terminal-2926696453-line-5)">]</text><text class="terminal-2926696453-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-2926696453-line-5)">[</text><text class="terminal-2926696453-r1" x="695.4" y="142" textLength="231.8" clip-path="url(#terminal-2926696453-line-5)">--template TEMPLATE</text><text class="terminal-2926696453-r2" x="927.2" y="142" textLength="12.2" clip-path="url(#terminal-2926696453-line-5)">]</text><text class="terminal-2926696453-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2926696453-line-5)"> +</text><text class="terminal-2926696453-r2" x="244" y="166.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-6)">[</text><text class="terminal-2926696453-r1" x="256.2" y="166.4" textLength="158.6" clip-path="url(#terminal-2926696453-line-6)">--extra EXTRA</text><text class="terminal-2926696453-r2" x="414.8" y="166.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-6)">]</text><text class="terminal-2926696453-r2" x="439.2" y="166.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-6)">[</text><text class="terminal-2926696453-r1" x="451.4" y="166.4" textLength="280.6" clip-path="url(#terminal-2926696453-line-6)">--tag-format TAG_FORMAT</text><text class="terminal-2926696453-r2" x="732" y="166.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-6)">]</text><text class="terminal-2926696453-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-6)"> +</text><text class="terminal-2926696453-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-7)"> +</text><text class="terminal-2926696453-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-8)"> +</text><text class="terminal-2926696453-r1" x="0" y="239.6" textLength="231.8" clip-path="url(#terminal-2926696453-line-9)">generate changelog </text><text class="terminal-2926696453-r2" x="231.8" y="239.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-9)">(</text><text class="terminal-2926696453-r1" x="244" y="239.6" textLength="500.2" clip-path="url(#terminal-2926696453-line-9)">note that it will overwrite existing file</text><text class="terminal-2926696453-r2" x="744.2" y="239.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-9)">)</text><text class="terminal-2926696453-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-9)"> +</text><text class="terminal-2926696453-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2926696453-line-10)"> +</text><text class="terminal-2926696453-r1" x="0" y="288.4" textLength="256.2" clip-path="url(#terminal-2926696453-line-11)">positional arguments:</text><text class="terminal-2926696453-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-11)"> +</text><text class="terminal-2926696453-r1" x="0" y="312.8" textLength="805.2" clip-path="url(#terminal-2926696453-line-12)">  rev_range             generates changelog for the given version </text><text class="terminal-2926696453-r2" x="805.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-12)">(</text><text class="terminal-2926696453-r1" x="817.4" y="312.8" textLength="61" clip-path="url(#terminal-2926696453-line-12)">e.g: </text><text class="terminal-2926696453-r3" x="878.4" y="312.8" textLength="36.6" clip-path="url(#terminal-2926696453-line-12)">1.5</text><text class="terminal-2926696453-r1" x="915" y="312.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-12)">.</text><text class="terminal-2926696453-r3" x="927.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-12)">3</text><text class="terminal-2926696453-r2" x="939.4" y="312.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-12)">)</text><text class="terminal-2926696453-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-12)"> +</text><text class="terminal-2926696453-r1" x="0" y="337.2" textLength="500.2" clip-path="url(#terminal-2926696453-line-13)">                        or version range </text><text class="terminal-2926696453-r2" x="500.2" y="337.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-13)">(</text><text class="terminal-2926696453-r1" x="512.4" y="337.2" textLength="61" clip-path="url(#terminal-2926696453-line-13)">e.g: </text><text class="terminal-2926696453-r3" x="573.4" y="337.2" textLength="36.6" clip-path="url(#terminal-2926696453-line-13)">1.5</text><text class="terminal-2926696453-r1" x="610" y="337.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-13)">.</text><text class="terminal-2926696453-r3" x="622.2" y="337.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-13)">3</text><text class="terminal-2926696453-r1" x="634.4" y="337.2" textLength="24.4" clip-path="url(#terminal-2926696453-line-13)">..</text><text class="terminal-2926696453-r3" x="658.8" y="337.2" textLength="36.6" clip-path="url(#terminal-2926696453-line-13)">1.7</text><text class="terminal-2926696453-r1" x="695.4" y="337.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-13)">.</text><text class="terminal-2926696453-r3" x="707.6" y="337.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-13)">9</text><text class="terminal-2926696453-r2" x="719.8" y="337.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-13)">)</text><text class="terminal-2926696453-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-13)"> +</text><text class="terminal-2926696453-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-14)"> +</text><text class="terminal-2926696453-r1" x="0" y="386" textLength="97.6" clip-path="url(#terminal-2926696453-line-15)">options:</text><text class="terminal-2926696453-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2926696453-line-15)"> +</text><text class="terminal-2926696453-r1" x="0" y="410.4" textLength="671" clip-path="url(#terminal-2926696453-line-16)">  -h, --help            show this help message and exit</text><text class="terminal-2926696453-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-16)"> +</text><text class="terminal-2926696453-r1" x="0" y="434.8" textLength="585.6" clip-path="url(#terminal-2926696453-line-17)">  --dry-run             show changelog to stdout</text><text class="terminal-2926696453-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-17)"> +</text><text class="terminal-2926696453-r1" x="0" y="459.2" textLength="280.6" clip-path="url(#terminal-2926696453-line-18)">  --file-name FILE_NAME</text><text class="terminal-2926696453-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-18)"> +</text><text class="terminal-2926696453-r1" x="0" y="483.6" textLength="573.4" clip-path="url(#terminal-2926696453-line-19)">                        file name of changelog </text><text class="terminal-2926696453-r2" x="573.4" y="483.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-19)">(</text><text class="terminal-2926696453-r1" x="585.6" y="483.6" textLength="109.8" clip-path="url(#terminal-2926696453-line-19)">default: </text><text class="terminal-2926696453-r4" x="695.4" y="483.6" textLength="170.8" clip-path="url(#terminal-2926696453-line-19)">'CHANGELOG.md'</text><text class="terminal-2926696453-r2" x="866.2" y="483.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-19)">)</text><text class="terminal-2926696453-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-19)"> +</text><text class="terminal-2926696453-r1" x="0" y="508" textLength="500.2" clip-path="url(#terminal-2926696453-line-20)">  --unreleased-version UNRELEASED_VERSION</text><text class="terminal-2926696453-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2926696453-line-20)"> +</text><text class="terminal-2926696453-r1" x="0" y="532.4" textLength="707.6" clip-path="url(#terminal-2926696453-line-21)">                        set the value for the new version </text><text class="terminal-2926696453-r2" x="707.6" y="532.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-21)">(</text><text class="terminal-2926696453-r1" x="719.8" y="532.4" textLength="207.4" clip-path="url(#terminal-2926696453-line-21)">use the tag value</text><text class="terminal-2926696453-r2" x="927.2" y="532.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-21)">)</text><text class="terminal-2926696453-r1" x="939.4" y="532.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-21)">,</text><text class="terminal-2926696453-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-21)"> +</text><text class="terminal-2926696453-r1" x="0" y="556.8" textLength="622.2" clip-path="url(#terminal-2926696453-line-22)">                        instead of using unreleased</text><text class="terminal-2926696453-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-22)"> +</text><text class="terminal-2926696453-r1" x="0" y="581.2" textLength="939.4" clip-path="url(#terminal-2926696453-line-23)">  --incremental         generates changelog from last created version, useful</text><text class="terminal-2926696453-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-23)"> +</text><text class="terminal-2926696453-r1" x="0" y="605.6" textLength="817.4" clip-path="url(#terminal-2926696453-line-24)">                        if the changelog has been manually modified</text><text class="terminal-2926696453-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-24)"> +</text><text class="terminal-2926696453-r1" x="0" y="630" textLength="280.6" clip-path="url(#terminal-2926696453-line-25)">  --start-rev START_REV</text><text class="terminal-2926696453-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2926696453-line-25)"> +</text><text class="terminal-2926696453-r1" x="0" y="654.4" textLength="866.2" clip-path="url(#terminal-2926696453-line-26)">                        start rev of the changelog. If not set, it will</text><text class="terminal-2926696453-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-26)"> +</text><text class="terminal-2926696453-r1" x="0" y="678.8" textLength="695.4" clip-path="url(#terminal-2926696453-line-27)">                        generate changelog from the start</text><text class="terminal-2926696453-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-27)"> +</text><text class="terminal-2926696453-r1" x="0" y="703.2" textLength="915" clip-path="url(#terminal-2926696453-line-28)">  --merge-prerelease    collect all changes from prereleases into next non-</text><text class="terminal-2926696453-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-28)"> +</text><text class="terminal-2926696453-r1" x="0" y="727.6" textLength="951.6" clip-path="url(#terminal-2926696453-line-29)">                        prerelease. If not set, it will include prereleases in</text><text class="terminal-2926696453-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-29)"> +</text><text class="terminal-2926696453-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-2926696453-line-30)">                        the changelog</text><text class="terminal-2926696453-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-2926696453-line-30)"> +</text><text class="terminal-2926696453-r1" x="0" y="776.4" textLength="231.8" clip-path="url(#terminal-2926696453-line-31)">  --version-scheme </text><text class="terminal-2926696453-r2" x="231.8" y="776.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-31)">{</text><text class="terminal-2926696453-r1" x="244" y="776.4" textLength="256.2" clip-path="url(#terminal-2926696453-line-31)">pep440,semver,semver2</text><text class="terminal-2926696453-r2" x="500.2" y="776.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-31)">}</text><text class="terminal-2926696453-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-31)"> +</text><text class="terminal-2926696453-r1" x="0" y="800.8" textLength="549" clip-path="url(#terminal-2926696453-line-32)">                        choose version scheme</text><text class="terminal-2926696453-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-32)"> +</text><text class="terminal-2926696453-r1" x="0" y="825.2" textLength="427" clip-path="url(#terminal-2926696453-line-33)">  --export-template EXPORT_TEMPLATE</text><text class="terminal-2926696453-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-33)"> +</text><text class="terminal-2926696453-r1" x="0" y="849.6" textLength="927.2" clip-path="url(#terminal-2926696453-line-34)">                        Export the changelog template into this file instead</text><text class="terminal-2926696453-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-34)"> +</text><text class="terminal-2926696453-r1" x="0" y="874" textLength="475.8" clip-path="url(#terminal-2926696453-line-35)">                        of rendering it</text><text class="terminal-2926696453-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-2926696453-line-35)"> +</text><text class="terminal-2926696453-r1" x="0" y="898.4" textLength="305" clip-path="url(#terminal-2926696453-line-36)">  --template, -t TEMPLATE</text><text class="terminal-2926696453-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-36)"> +</text><text class="terminal-2926696453-r1" x="0" y="922.8" textLength="646.6" clip-path="url(#terminal-2926696453-line-37)">                        changelog template file name </text><text class="terminal-2926696453-r2" x="646.6" y="922.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-37)">(</text><text class="terminal-2926696453-r1" x="658.8" y="922.8" textLength="280.6" clip-path="url(#terminal-2926696453-line-37)">relative to the current</text><text class="terminal-2926696453-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-37)"> +</text><text class="terminal-2926696453-r1" x="0" y="947.2" textLength="500.2" clip-path="url(#terminal-2926696453-line-38)">                        working directory</text><text class="terminal-2926696453-r2" x="500.2" y="947.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-38)">)</text><text class="terminal-2926696453-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-2926696453-line-38)"> +</text><text class="terminal-2926696453-r1" x="0" y="971.6" textLength="622.2" clip-path="url(#terminal-2926696453-line-39)">  --extra, -e EXTRA     a changelog extra variable </text><text class="terminal-2926696453-r2" x="622.2" y="971.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-39)">(</text><text class="terminal-2926696453-r1" x="634.4" y="971.6" textLength="146.4" clip-path="url(#terminal-2926696453-line-39)">in the form </text><text class="terminal-2926696453-r4" x="780.8" y="971.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-39)">'</text><text class="terminal-2926696453-r4" x="793" y="971.6" textLength="36.6" clip-path="url(#terminal-2926696453-line-39)">key</text><text class="terminal-2926696453-r4" x="829.6" y="971.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-39)">=</text><text class="terminal-2926696453-r4" x="841.8" y="971.6" textLength="61" clip-path="url(#terminal-2926696453-line-39)">value</text><text class="terminal-2926696453-r4" x="902.8" y="971.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-39)">'</text><text class="terminal-2926696453-r2" x="915" y="971.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-39)">)</text><text class="terminal-2926696453-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-2926696453-line-39)"> +</text><text class="terminal-2926696453-r1" x="0" y="996" textLength="305" clip-path="url(#terminal-2926696453-line-40)">  --tag-format TAG_FORMAT</text><text class="terminal-2926696453-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-2926696453-line-40)"> +</text><text class="terminal-2926696453-r1" x="0" y="1020.4" textLength="878.4" clip-path="url(#terminal-2926696453-line-41)">                        The format of the tag, wrap around simple quotes</text><text class="terminal-2926696453-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-2926696453-line-41)"> +</text><text class="terminal-2926696453-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-2926696453-line-42)"> </text> </g> </g> From 225fd76ecbd80fd81471886047d3b60b9710bbf9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Tue, 20 May 2025 15:03:39 +0000 Subject: [PATCH 554/685] =?UTF-8?q?bump:=20version=204.7.2=20=E2=86=92=204?= =?UTF-8?q?.8.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7497946571..ff222cac1a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.7.2 # automatically updated by Commitizen + rev: v4.8.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index de772c6a75..d11930cce2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v4.8.0 (2025-05-20) + +### Feat + +- **cli**: add --tag-format argument to changelog command + ## v4.7.2 (2025-05-18) ### Refactor diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 98c926d162..ea674c5c54 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.7.2" +__version__ = "4.8.0" diff --git a/pyproject.toml b/pyproject.toml index 8d9214615a..4e41a885fa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.7.2" +version = "4.8.0" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.7.2" +version = "4.8.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", From 10581b3b4399abb2972d932d22d9b4b55b433a3b Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 16 May 2025 02:18:37 +0800 Subject: [PATCH 555/685] test(changelog): code cleanup and better type --- tests/test_changelog.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 067adb4a91..b1c7c802e1 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -556,8 +556,8 @@ @pytest.fixture -def gitcommits() -> list: - commits = [ +def gitcommits() -> list[git.GitCommit]: + return [ git.GitCommit( commit["rev"], commit["title"], @@ -568,13 +568,11 @@ def gitcommits() -> list: ) for commit in COMMITS_DATA ] - return commits @pytest.fixture -def tags() -> list: - tags = [git.GitTag(*tag) for tag in TAGS] - return tags +def tags() -> list[git.GitTag]: + return [git.GitTag(*tag) for tag in TAGS] @pytest.fixture From d0c26742ef05f3976bf3e42486857612b17e83d4 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Wed, 14 May 2025 18:05:55 +0800 Subject: [PATCH 556/685] refactor(customize): improve code readability --- commitizen/cz/customize/customize.py | 54 ++++++++-------------------- 1 file changed, 15 insertions(+), 39 deletions(-) diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index afa35e92de..53ada4b2c0 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -33,35 +33,17 @@ def __init__(self, config: BaseConfig): raise MissingCzCustomizeConfigError() self.custom_settings = self.config.settings["customize"] - custom_bump_pattern = self.custom_settings.get("bump_pattern") - if custom_bump_pattern: - self.bump_pattern = custom_bump_pattern - - custom_bump_map = self.custom_settings.get("bump_map") - if custom_bump_map: - self.bump_map = custom_bump_map - - custom_bump_map_major_version_zero = self.custom_settings.get( - "bump_map_major_version_zero" - ) - if custom_bump_map_major_version_zero: - self.bump_map_major_version_zero = custom_bump_map_major_version_zero - - custom_change_type_order = self.custom_settings.get("change_type_order") - if custom_change_type_order: - self.change_type_order = custom_change_type_order - - commit_parser = self.custom_settings.get("commit_parser") - if commit_parser: - self.commit_parser = commit_parser - - changelog_pattern = self.custom_settings.get("changelog_pattern") - if changelog_pattern: - self.changelog_pattern = changelog_pattern - - change_type_map = self.custom_settings.get("change_type_map") - if change_type_map: - self.change_type_map = change_type_map + for attr_name in [ + "bump_pattern", + "bump_map", + "bump_map_major_version_zero", + "change_type_order", + "commit_parser", + "changelog_pattern", + "change_type_map", + ]: + if value := self.custom_settings.get(attr_name): + setattr(self, attr_name, value) def questions(self) -> Questions: return self.custom_settings.get("questions", [{}]) @@ -70,8 +52,7 @@ def message(self, answers: dict) -> str: message_template = Template(self.custom_settings.get("message_template", "")) if getattr(Template, "substitute", None): return message_template.substitute(**answers) # type: ignore - else: - return message_template.render(**answers) + return message_template.render(**answers) def example(self) -> str: return self.custom_settings.get("example") or "" @@ -83,12 +64,7 @@ def schema(self) -> str: return self.custom_settings.get("schema") or "" def info(self) -> str: - info_path = self.custom_settings.get("info_path") - info = self.custom_settings.get("info") - if info_path: + if info_path := self.custom_settings.get("info_path"): with open(info_path, encoding=self.config.settings["encoding"]) as f: - content = f.read() - return content - elif info: - return info - return "" + return f.read() + return self.custom_settings.get("info") or "" From ba571827e4bba1b5ac5fbdaf38302e53cd8efe75 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Thu, 22 May 2025 03:12:05 +0000 Subject: [PATCH 557/685] =?UTF-8?q?bump:=20version=204.8.0=20=E2=86=92=204?= =?UTF-8?q?.8.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ff222cac1a..f1aef91193 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.8.0 # automatically updated by Commitizen + rev: v4.8.1 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index d11930cce2..9904ae3bbf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v4.8.1 (2025-05-22) + +### Refactor + +- **customize**: improve code readability + ## v4.8.0 (2025-05-20) ### Feat diff --git a/commitizen/__version__.py b/commitizen/__version__.py index ea674c5c54..1969a66ecd 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.8.0" +__version__ = "4.8.1" diff --git a/pyproject.toml b/pyproject.toml index 4e41a885fa..853d9ccaf8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.8.0" +version = "4.8.1" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.8.0" +version = "4.8.1" tag_format = "v$version" version_files = [ "pyproject.toml:version", From fe72043eeec8ffdd34d721ada65c45c622acdac2 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 17 May 2025 19:59:18 +0800 Subject: [PATCH 558/685] refactor(check): remove unnecessary variable --- commitizen/commands/check.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index 087db03ea5..a0d06cbc47 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -72,15 +72,11 @@ def __call__(self): raise NoCommitsFoundError(f"No commit found with range: '{self.rev_range}'") pattern = self.cz.schema_pattern() - ill_formatted_commits = [ - commit - for commit in commits - if not self.validate_commit_message(commit.message, pattern) - ] displayed_msgs_content = "\n".join( [ f'commit "{commit.rev}": "{commit.message}"' - for commit in ill_formatted_commits + for commit in commits + if not self.validate_commit_message(commit.message, pattern) ] ) if displayed_msgs_content: From 7fd6ce33d59f90f0a85826b54224aa063ddfdc70 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 17 May 2025 20:05:39 +0800 Subject: [PATCH 559/685] refactor(check): simplify code --- commitizen/commands/check.py | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index a0d06cbc47..1e3b8464e1 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -88,24 +88,21 @@ def __call__(self): ) out.success("Commit validation: successful!") + def _get_commit_message(self) -> str | None: + if self.commit_msg_file is None: + # Get commit message from command line (--message) + return self.commit_msg + + with open(self.commit_msg_file, encoding=self.encoding) as commit_file: + # Get commit message from file (--commit-msg-file) + return commit_file.read() + def _get_commits(self): - msg = None - # Get commit message from file (--commit-msg-file) - if self.commit_msg_file is not None: - # Enter this branch if commit_msg_file is "". - with open(self.commit_msg_file, encoding=self.encoding) as commit_file: - msg = commit_file.read() - # Get commit message from command line (--message) - elif self.commit_msg is not None: - msg = self.commit_msg - if msg is not None: - msg = self._filter_comments(msg) - return [git.GitCommit(rev="", title="", body=msg)] + if (msg := self._get_commit_message()) is not None: + return [git.GitCommit(rev="", title="", body=self._filter_comments(msg))] # Get commit messages from git log (--rev-range) - if self.rev_range: - return git.get_commits(end=self.rev_range) - return git.get_commits() + return git.get_commits(end=self.rev_range or "HEAD") @staticmethod def _filter_comments(msg: str) -> str: From a8094aebad266040ef07f118a96c88a93f4aecf8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Thu, 22 May 2025 03:16:18 +0000 Subject: [PATCH 560/685] =?UTF-8?q?bump:=20version=204.8.1=20=E2=86=92=204?= =?UTF-8?q?.8.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 7 +++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f1aef91193..4e108eb9b9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.8.1 # automatically updated by Commitizen + rev: v4.8.2 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 9904ae3bbf..5b737a851a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## v4.8.2 (2025-05-22) + +### Refactor + +- **check**: simplify code +- **check**: remove unnecessary variable + ## v4.8.1 (2025-05-22) ### Refactor diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 1969a66ecd..8e288a597c 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.8.1" +__version__ = "4.8.2" diff --git a/pyproject.toml b/pyproject.toml index 853d9ccaf8..b306e5e78c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.8.1" +version = "4.8.2" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.8.1" +version = "4.8.2" tag_format = "v$version" version_files = [ "pyproject.toml:version", From 9420b44c86a9271d0d9f107360501a058533f9e2 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 23 May 2025 16:55:07 +0800 Subject: [PATCH 561/685] docs(label_pr.yml): add labels based on new PR title --- .github/workflows/label_pr.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/.github/workflows/label_pr.yml b/.github/workflows/label_pr.yml index b409c8b757..176d7cc794 100644 --- a/.github/workflows/label_pr.yml +++ b/.github/workflows/label_pr.yml @@ -17,3 +17,31 @@ jobs: - uses: actions/labeler@v5 with: configuration-path: .github/labeler.yml + - name: Label based on PR title + uses: actions/github-script@v7 + with: + script: | + const title = context.payload.pull_request.title.toLowerCase(); + const labels = []; + + if (title.includes("fix") || title.includes("bug")) { + labels.push("type: bug"); + } + if (title.includes("feat")) { + labels.push("type: feature"); + } + if (title.includes("doc")) { + labels.push("type: documentation"); + } + if (title.includes("refactor")) { + labels.push("type: refactor"); + } + + if (labels.length > 0) { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.payload.pull_request.number, + labels + }); + } From 5aa58c6638f7e2237f596ec373e9001e21ba1a8c Mon Sep 17 00:00:00 2001 From: Adrian Carolli <adrian.caarolli@gmail.com> Date: Mon, 26 May 2025 19:45:10 -0400 Subject: [PATCH 562/685] docs: add installation and usage guide for cz-ai plugin leveraging GPT-4o --- docs/third-party-commitizen.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/third-party-commitizen.md b/docs/third-party-commitizen.md index 1c8ef8a183..b6d598985f 100644 --- a/docs/third-party-commitizen.md +++ b/docs/third-party-commitizen.md @@ -3,6 +3,22 @@ In addition to the native templates, some alternative commit format templates are available as PyPI packages (installable with `pip`). +### [cz-ai](https://github.com/watadarkstar/cz_ai) + +A Commitizen plugin that leverages OpenAI's GPT-4o to automatically generate clear, concise, and conventional commit messages based on your staged git changes. + +#### Installation + +```sh +pip install cz-ai +``` + +#### Usage + +```sh +cz --name cz_ai commit +``` + ### [Conventional JIRA](https://pypi.org/project/conventional-JIRA/) Just like _conventional commit_ format, but the scope has been restricted to a From e69e0a1babe6b9dd64f7c3cabb2246bd299379ab Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 11 May 2025 17:04:41 +0800 Subject: [PATCH 563/685] docs: fix typos and grammar mistakes --- docs/commands/changelog.md | 10 +++++----- docs/commands/check.md | 22 ++++++++++----------- docs/commands/commit.md | 2 +- docs/config.md | 6 +++--- docs/contributing.md | 32 +++++++++++++++---------------- docs/customization.md | 26 ++++++++++++------------- docs/faq.md | 8 ++++---- docs/third-party-commitizen.md | 2 +- docs/tutorials/auto_check.md | 18 ++++++++--------- docs/tutorials/dev_releases.md | 11 +++-------- docs/tutorials/github_actions.md | 4 ++-- docs/tutorials/gitlab_ci.md | 8 ++++---- docs/tutorials/tag_format.md | 14 +++++++------- docs/tutorials/writing_commits.md | 16 ++++++++-------- 14 files changed, 87 insertions(+), 92 deletions(-) diff --git a/docs/commands/changelog.md b/docs/commands/changelog.md index cbf22b15a7..aee1a0e075 100644 --- a/docs/commands/changelog.md +++ b/docs/commands/changelog.md @@ -56,7 +56,7 @@ These are the variables used by the changelog generator. It will create a full block like above per version found in the tags. And it will create a list of the commits found. The `change_type` and the `scope` are optional, they don't need to be provided, -but if your regex does they will be rendered. +but if your regex does, they will be rendered. The format followed by the changelog is the one from [keep a changelog][keepachangelog] and the following variables are expected: @@ -108,7 +108,7 @@ cz bump --changelog This value can be updated in the `toml` file with the key `changelog_file` under `tools.commitizen` -Specify the name of the output file, remember that changelog only works with markdown. +Specify the name of the output file, remember that changelog only works with Markdown. ```bash cz changelog --file-name="CHANGES.md" @@ -120,7 +120,7 @@ This flag can be set in the `toml` file with the key `changelog_incremental` und Benefits: -- Build from latest version found in changelog, this is useful if you have a different changelog and want to use commitizen +- Build from the latest version found in changelog, this is useful if you have a different changelog and want to use commitizen - Update unreleased area - Allows users to manually touch the changelog without being rewritten. @@ -185,8 +185,8 @@ See [the template customization section](../customization.md#customizing-the-cha Supported hook methods: -- per parsed message: useful to add links -- end of changelog generation: useful to send slack or chat message, or notify another department +- Per parsed message: Useful to add links +- End of changelog generation: Useful to send Slack or chat messages, or notify another department Read more about hooks in the [customization page][customization] diff --git a/docs/commands/check.md b/docs/commands/check.md index e45ecd86c8..33e41e04f8 100644 --- a/docs/commands/check.md +++ b/docs/commands/check.md @@ -2,9 +2,9 @@ ## About -This feature checks whether the commit message follows the given committing rules. And comment in git message will be ignored. +This feature checks whether the commit message follows the given committing rules. Comments in git messages will be ignored. -If you want to setup an automatic check before every git commit, please refer to +If you want to set up an automatic check before every git commit, please refer to [Automatically check message before commit](../tutorials/auto_check.md). ## Usage @@ -27,7 +27,7 @@ $ cz check --rev-range REV_RANGE For example, if you'd like to check all commits on a branch, you can use `--rev-range master..HEAD`. Or, if you'd like to check all commits starting from when you first implemented commit message linting, you can use `--rev-range <first_commit_sha>..HEAD`. -For more info on how git commit ranges work, you can check the [git documentation](https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#_commit_ranges). +For more information on how git commit ranges work, you can check the [git documentation](https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#_commit_ranges). ### Commit Message @@ -47,7 +47,7 @@ In this option, MESSAGE is the commit message to be checked. $ echo MESSAGE | cz check ``` -In this option, MESSAGE is piped to cz check and would be checked. +In this option, MESSAGE is piped to cz check and will be checked. ### Commit Message File @@ -55,8 +55,8 @@ In this option, MESSAGE is piped to cz check and would be checked. $ cz check --commit-msg-file COMMIT_MSG_FILE ``` -In this option, COMMIT_MSG_FILE is the path of the temporal file that contains the commit message. -This argument can be useful when cooperating with git hook, please check [Automatically check message before commit](../tutorials/auto_check.md) for more information about how to use this argument with git hook. +In this option, COMMIT_MSG_FILE is the path of the temporary file that contains the commit message. +This argument can be useful when cooperating with git hooks. Please check [Automatically check message before commit](../tutorials/auto_check.md) for more information about how to use this argument with git hooks. ### Allow Abort @@ -69,8 +69,8 @@ permit them. Since `git commit` accepts an `--allow-empty-message` flag (primari ### Allowed Prefixes -If the commit message starts by some specific prefixes, `cz check` returns `True` without checkign the regex. -By default, the the following prefixes are allowed: `Merge`, `Revert`, `Pull request`, `fixup!` and `squash!`. +If the commit message starts with some specific prefixes, `cz check` returns `True` without checking the regex. +By default, the following prefixes are allowed: `Merge`, `Revert`, `Pull request`, `fixup!` and `squash!`. ```bash cz check --message MESSAGE --allowed-prefixes 'Merge' 'Revert' 'Custom Prefix' @@ -78,10 +78,10 @@ cz check --message MESSAGE --allowed-prefixes 'Merge' 'Revert' 'Custom Prefix' ### Commit message length limit -The argument `-l` (or `--message-length-limmit`) followed by a positive number, can limit the length of commit messages. +The argument `-l` (or `--message-length-limit`) followed by a positive number can limit the length of commit messages. For example, `cz check --message MESSAGE -l 3` would fail the check, since `MESSAGE` is more than 3 characters long. By default, the limit is set to 0, which means no limit on the length. -**Note that the limit applies only to the first line of the message.*** +**Note that the limit applies only to the first line of the message.** Specifically, for `ConventionalCommitsCz` the length only counts from the type of change to the subject, -while the body, and the footer are not counted. +while the body and the footer are not counted. diff --git a/docs/commands/commit.md b/docs/commands/commit.md index 7760a2b88e..ea033cc411 100644 --- a/docs/commands/commit.md +++ b/docs/commands/commit.md @@ -45,7 +45,7 @@ a new commit message to be prompted. The argument `-l` (or `--message-length-limit`) followed by a positive number can limit the length of commit messages. An exception would be raised when the message length exceeds the limit. For example, `cz commit -l 72` will limit the length of commit messages to 72 characters. -By default the limit is set to 0, which means no limit on the length. +By default, the limit is set to 0, which means no limit on the length. **Note that the limit applies only to the first line of the message.** Specifically, for `ConventionalCommitsCz` the length only counts from the type of change to the subject, diff --git a/docs/config.md b/docs/config.md index a522312743..b6dd794fb3 100644 --- a/docs/config.md +++ b/docs/config.md @@ -341,7 +341,7 @@ commitizen: ## Version providers Commitizen can read and write version from different sources. -By default, it use the `commitizen` one which is using the `version` field from the commitizen settings. +By default, it uses the `commitizen` one which is using the `version` field from the commitizen settings. But you can use any `commitizen.provider` entrypoint as value for `version_provider`. Commitizen provides some version providers for some well known formats: @@ -369,9 +369,9 @@ version_provider = "pep621" ### Custom version provider -You can add you own version provider by extending `VersionProvider` and exposing it on the `commitizen.provider` entrypoint. +You can add your own version provider by extending `VersionProvider` and exposing it on the `commitizen.provider` entrypoint. -Here a quick example of a `my-provider` provider reading and writing version in a `VERSION` file. +Here is a quick example of a `my-provider` provider reading and writing version in a `VERSION` file. ```python title="my_provider.py" from pathlib import Path diff --git a/docs/contributing.md b/docs/contributing.md index 0da1707da6..1192e57c0a 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -8,25 +8,25 @@ If you're a first-time contributor, you can check the issues with [good first is ## Install before contributing -1. Install [poetry](https://python-poetry.org/) `>=2.0.0`, installation [pages](https://python-poetry.org/docs/#installing-with-the-official-installer) -2. Install [gpg](https://gnupg.org), installation [pages](https://gnupg.org/documentation/manuals/gnupg/Installation.html#Installation). For Mac users, you could try [homebrew](https://brew.sh/). +1. Install [poetry](https://python-poetry.org/) `>=2.0.0`. See installation [pages](https://python-poetry.org/docs/#installing-with-the-official-installer). +2. Install [gpg](https://gnupg.org). See installation [pages](https://gnupg.org/documentation/manuals/gnupg/Installation.html#Installation). For Mac users, you can use [homebrew](https://brew.sh/). ## Before making a pull request 1. Fork [the repository](https://github.com/commitizen-tools/commitizen). -2. Clone the repository from your GitHub. -3. Setup development environment through [poetry](https://python-poetry.org/) (`poetry install`). -4. Setup [pre-commit](https://pre-commit.com/) hook (`poetry setup-pre-commit`) -5. Check out a new branch and add your modification. -6. Add test cases for all your changes. +1. Clone the repository from your GitHub. +1. Set up development environment through [poetry](https://python-poetry.org/) (`poetry install`). +1. Set up [pre-commit](https://pre-commit.com/) hook (`poetry setup-pre-commit`). +1. Checkout a new branch and add your modifications. +1. Add test cases for all your changes. (We use [CodeCov](https://codecov.io/) to ensure our test coverage does not drop.) -7. Use [commitizen](https://github.com/commitizen-tools/commitizen) to do git commit. We follow [conventional commits](https://www.conventionalcommits.org/). -8. Run `poetry all` to ensure you follow the coding style and the tests pass. -9. Optionally, update the `./docs/README.md` or `docs/images/cli_help` (through running `poetry doc:screenshots`). -9. **Do not** update the `CHANGELOG.md`, it will be automatically created after merging to `master`. -10. **Do not** update the versions in the project, they will be automatically updated. -10. If your changes are about documentation. Run `poetry doc` to serve documentation locally and check whether there is any warning or error. -11. Send a [pull request](https://github.com/commitizen-tools/commitizen/pulls) 🙏 +1. Use [commitizen](https://github.com/commitizen-tools/commitizen) to do git commit. We follow [conventional commits](https://www.conventionalcommits.org/). +1. Run `poetry all` to ensure you follow the coding style and the tests pass. +1. Optionally, update the `./docs/README.md` or `docs/images/cli_help` (through running `poetry doc:screenshots`). +1. **Do not** update the `CHANGELOG.md`; it will be automatically created after merging to `master`. +1. **Do not** update the versions in the project; they will be automatically updated. +1. If your changes are about documentation, run `poetry doc` to serve documentation locally and check whether there are any warnings or errors. +1. Send a [pull request](https://github.com/commitizen-tools/commitizen/pulls) 🙏 ## Use of GitHub Labels @@ -45,8 +45,8 @@ If you're a first-time contributor, you can check the issues with [good first is * pr-status: wait-for-modification * pr-status: wait-for-response * pr-status: ready-to-merge -* needs: test-case *(pr only)* -* needs: documentation *(pr only)* +* needs: test-case *(PR only)* +* needs: documentation *(PR only)* * type: feature * type: bug * type: documentation diff --git a/docs/customization.md b/docs/customization.md index 31749d1c83..cef03469e0 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -170,7 +170,7 @@ commitizen: | Parameter | Type | Default | Description | | ----------- | ------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `type` | `str` | `None` | The type of questions. Valid types: `list`, `select`, `input` and etc. The `select` type provides an interactive searchable list interface. [See More][different-question-types] | +| `type` | `str` | `None` | The type of questions. Valid types: `list`, `select`, `input`, etc. The `select` type provides an interactive searchable list interface. [See More][different-question-types] | | `name` | `str` | `None` | The key for the value answered by user. It's used in `message_template` | | `message` | `str` | `None` | Detail description for the question. | | `choices` | `list` | `None` | (OPTIONAL) The choices when `type = list` or `type = select`. Either use a list of values or a list of dictionaries with `name` and `value` keys. Keyboard shortcuts can be defined via `key`. See examples above. | @@ -192,10 +192,10 @@ To specify keyboard shortcuts for your custom choices, provide the shortcut usin The basic steps are: -1. Inheriting from `BaseCommitizen` +1. Inheriting from `BaseCommitizen`. 2. Give a name to your rules. -3. Create a python package using `setup.py`, `poetry`, etc -4. Expose the class as a `commitizen.plugin` entrypoint +3. Create a python package using `setup.py`, `poetry`, etc. +4. Expose the class as a `commitizen.plugin` entrypoint. Check an [example][convcomms] on how to configure `BaseCommitizen`. @@ -322,9 +322,9 @@ You can customize it of course, and this are the variables you need to add to yo | `commit_parser` | `str` | NO | Regex which should provide the variables explained in the [changelog description][changelog-des] | | `changelog_pattern` | `str` | NO | Regex to validate the commits, this is useful to skip commits that don't meet your ruling standards like a Merge. Usually the same as bump_pattern | | `change_type_map` | `dict` | NO | Convert the title of the change type that will appear in the changelog, if a value is not found, the original will be provided | -| `changelog_message_builder_hook` | `method: (dict, git.GitCommit) -> dict | list | None` | NO | Customize with extra information your message output, like adding links, this function is executed per parsed commit. Each GitCommit contains the following attrs: `rev`, `title`, `body`, `author`, `author_email`. Returning a falsy value ignore the commit. | +| `changelog_message_builder_hook` | `method: (dict, git.GitCommit) -> dict | list | None` | NO | Customize with extra information your message output, like adding links, this function is executed per parsed commit. Each GitCommit contains the following attrs: `rev`, `title`, `body`, `author`, `author_email`. Returning a falsy value ignore the commit. | | `changelog_hook` | `method: (full_changelog: str, partial_changelog: Optional[str]) -> str` | NO | Receives the whole and partial (if used incremental) changelog. Useful to send slack messages or notify a compliance department. Must return the full_changelog | -| `changelog_release_hook` | `method: (release: dict, tag: git.GitTag) -> dict` | NO | Receives each generated changelog release and its associated tag. Useful to enrich a releases before they are rendered. Must return the update release +| `changelog_release_hook` | `method: (release: dict, tag: git.GitTag) -> dict` | NO | Receives each generated changelog release and its associated tag. Useful to enrich releases before they are rendered. Must return the update release ```python from commitizen.cz.base import BaseCommitizen @@ -395,7 +395,7 @@ class NoSubjectProvidedException(CzException): Commitizen migrated to a new plugin format relying on `importlib.metadata.EntryPoint`. Migration should be straight-forward for legacy plugins: -- Remove the `discover_this` line from you plugin module +- Remove the `discover_this` line from your plugin module - Expose the plugin class under as a `commitizen.plugin` entrypoint. The name of the plugin is now determined by the name of the entrypoint. @@ -455,12 +455,12 @@ By default, the template used is the `CHANGELOG.md.j2` file from the commitizen ### Providing a template with your customization class -There is 3 parameters available to change the template rendering from your custom `BaseCommitizen`. +There are 3 parameters available to change the template rendering from your custom `BaseCommitizen`. | Parameter | Type | Default | Description | | ----------------- | ------ | ------- | ----------------------------------------------------------------------------------------------------- | -| `template` | `str` | `None` | Provide your own template name (default to `CHANGELOG.md.j2`) | -| `template_loader` | `str` | `None` | Override the default template loader (so you can provide template from you customization class) | +| `template` | `str` | `None` | Provide your own template name (default to `CHANGELOG.md.j2`) | +| `template_loader` | `str` | `None` | Override the default template loader (so you can provide template from your customization class) | | `template_extras` | `dict` | `None` | Provide some extra template parameters | Let's see an example. @@ -484,14 +484,14 @@ This snippet will: ### Providing a template from the current working directory -Users can provides their own template from their current working directory (your project root) by: +Users can provide their own template from their current working directory (your project root) by: - providing a template with the same name (`CHANGELOG.md.j2` unless overridden by your custom class) - setting your template path as `template` configuration - giving your template path as `--template` parameter to `bump` and `changelog` commands !!! Note - The path is relative to the current working directory, aka. your project root most of the time. + The path is relative to the current working directory, aka your project root most of the time. ### Template variables @@ -524,7 +524,7 @@ When using another template (either provided by a plugin or by yourself), you ca by: - defining them in your configuration with the [`extras` settings][extras-config] -- providing them on the commandline with the `--extra/-e` parameter to `bump` and `changelog` commands +- providing them on the command line with the `--extra/-e` parameter to `bump` and `changelog` commands [template-config]: config.md#template [extras-config]: config.md#extras diff --git a/docs/faq.md b/docs/faq.md index 29d9f40512..0302efd267 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -52,7 +52,7 @@ It is not affiliated. Both are used for similar purposes, parsing commits, generating changelog and version we presume. This one is written in python to make integration easier for python projects and the other serves the JS packages. -They differ a bit in design, not sure if cz-js does any of this, but these are some of the stuff you can do with this repo (python's commitizen): +They differ a bit in design, not sure if cz-js does any of this, but these are some things you can do with this repo (python's commitizen): - create custom rules, version bumps and changelog generation, by default we use the popular conventional commits (I think cz-js allows this). - single package, install one thing and it will work (cz-js is a monorepo, but you have to install different dependencies AFAIK) @@ -83,14 +83,14 @@ More discussion can be found in issue [#318](https://github.com/commitizen-tools ## Why does commitizen not support CalVer? `commitizen` could support CalVer alongside SemVer, but in practice implementing CalVer -creates numerous edge cases that are difficult to maintain ([#385]) and more generally +creates numerous edge cases that are difficult to maintain ([#385]) and more generally, mixing the two version schemes may not be a good idea. If CalVer or other custom versioning scheme is needed, `commitizen` could still be used to standardize commits and create changelogs, but a separate package should be used for version increments. Mixing CalVer and SemVer is generally not recommended because each versioning scheme -serves a different purposes. Diverging from either specification can be confusing to -users and cause errors with third party tools that don't expect the non-standard format. +serves a different purpose. Diverging from either specification can be confusing to +users and cause errors with third-party tools that don't expect the non-standard format. In the future, `commitizen` may support some implementation of CalVer, but at the time of writing, there are no plans to implement the feature ([#173]). diff --git a/docs/third-party-commitizen.md b/docs/third-party-commitizen.md index b6d598985f..e9eb822ed3 100644 --- a/docs/third-party-commitizen.md +++ b/docs/third-party-commitizen.md @@ -117,7 +117,7 @@ See the [README][1] for instructions on configuration ## Third-Party Commitizen Providers -Commitizen can read and write version from different sources. In addition to the native providers, some alternative version sources are available as PyPI packages (installable with `pip`). +Commitizen can read and write version from different sources. In addition to the native providers, some alternative version sources are available as PyPI packages (installable with `pip`). ### [commitizen-deno-provider](https://pypi.org/project/commitizen-deno-provider/) diff --git a/docs/tutorials/auto_check.md b/docs/tutorials/auto_check.md index 2fce57f9bd..d143528767 100644 --- a/docs/tutorials/auto_check.md +++ b/docs/tutorials/auto_check.md @@ -6,9 +6,9 @@ To automatically check a commit message prior to committing, you can use a [git ## How to -There are two common methods for installing the hook: +There are two common methods for installing the hooks: -### Method 1: Add git hook through [pre-commit](https://pre-commit.com/) +### Method 1: Add a git hook through [pre-commit](https://pre-commit.com/) - Step 1: Install [pre-commit](https://pre-commit.com/) @@ -16,7 +16,7 @@ There are two common methods for installing the hook: python -m pip install pre-commit ``` -- Step 2: Create `.pre-commit-config.yaml` at your root directory with the following content +- Step 2: Create `.pre-commit-config.yaml` in your root directory with the following content ```yaml --- @@ -28,19 +28,19 @@ repos: stages: [commit-msg] ``` -- Step 3: Install the configuration into git hook through `pre-commit` +- Step 3: Install the configuration into the git hook through `pre-commit` ```bash pre-commit install --hook-type commit-msg ``` -### Method 2: Manually add git hook +### Method 2: Manually add a git hook -The command might be included inside of a Git hook (inside of `.git/hooks/` at the root of the project). +The command might be included inside a Git hook (inside `.git/hooks/` at the root of the project). The selected hook might be the file called commit-msg. -This example shows how to use the check command inside of commit-msg. +This example shows how to use the check command inside commit-msg. At the root of the project: @@ -62,7 +62,7 @@ Where `$1` is the name of the temporary file that contains the current commit me The `--commit-msg-file` flag is required, not optional. -Each time you create a commit, automatically, this hook will analyze it. -If the commit message is invalid, it'll be rejected. +Each time you create a commit, this hook will automatically analyze it. +If the commit message is invalid, it will be rejected. The commit should follow the given committing rules; otherwise, it won't be accepted. diff --git a/docs/tutorials/dev_releases.md b/docs/tutorials/dev_releases.md index 8142334754..e2b29fb191 100644 --- a/docs/tutorials/dev_releases.md +++ b/docs/tutorials/dev_releases.md @@ -5,9 +5,7 @@ To make use of a `.dev` suffix, as per [PEP440](https://peps.python.org/pep-0440/#developmental-releases). -If more than one active branch attempts to create a tag, relative to the main -branch, there is the possibility that each will attempt to create the _same_ -tag, resulting in a collision. +If multiple active branches attempt to create a tag relative to the main branch, there is a possibility that they will attempt to create the _same_ tag, resulting in a collision. Developmental releases aim to avoid this by including a `.dev` segment which includes a non-negative integer unique to that workflow: @@ -19,9 +17,7 @@ X.Y.devN !!! note As noted in [PEP440](https://peps.python.org/pep-0440/#developmental-releases), - although developmental releases are useful in avoiding the situation - described above, depending on the value passed as the developmental - release, they can be _"difficult to parse for human readers"_. + while developmental releases help avoid the situation described above, they can be _"difficult to parse for human readers"_ depending on the value passed as the developmental release. ## How to @@ -64,8 +60,7 @@ Equally, as the developmental release needs only a non-negative integer, it is possible to use the Unix time (i.e. the number of seconds since 1st January 1970 UTC). -This would create the possibility of a collision if two builds occur at -precisely the same second but this may be sufficient for many cases: +This approach could potentially create a collision if two builds occur at precisely the same second, but it may be sufficient for many use cases: ```sh --devrelease $(date +%s) diff --git a/docs/tutorials/github_actions.md b/docs/tutorials/github_actions.md index 7a98abe2be..bcb3fda22c 100644 --- a/docs/tutorials/github_actions.md +++ b/docs/tutorials/github_actions.md @@ -51,7 +51,7 @@ where to output the content of the changelog for the newly created version. And then add a step using a github action to create the release: `softprops/action-gh-release` The commitizen action creates an env variable called `REVISION`, containing the -newely created version. +newly created version. ```yaml - name: Create bump and changelog @@ -119,7 +119,7 @@ jobs: ./scripts/publish ``` -Notice that we are using poetry, and we are calling a bash script in `./scripts/publish`. You should configure the action, and the publish with your tools (twine, poetry, etc.). Check [commitizen example](https://github.com/commitizen-tools/commitizen/blob/master/scripts/publish) +Notice that we are using poetry, and we are calling a bash script in `./scripts/publish`. You should configure the action, and publish with your tools (twine, poetry, etc.). Check [commitizen example](https://github.com/commitizen-tools/commitizen/blob/master/scripts/publish) You can also use [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) to publish your package. Push the changes and that's it. diff --git a/docs/tutorials/gitlab_ci.md b/docs/tutorials/gitlab_ci.md index 85abb3fe6d..85b6a615c3 100644 --- a/docs/tutorials/gitlab_ci.md +++ b/docs/tutorials/gitlab_ci.md @@ -38,7 +38,7 @@ The latest step is to create a `deploy key.` To do this, we should create it und If you have more projects under the same organization, you can reuse the deploy key created before, but you will have to repeat the step where we have created the environment variables (ssh key, email, and username). -tip: If the CI raise some errors, try to unprotected the private key. +Tip: If the CI raise some errors, try to unprotect the private key. ### Defining GitLab CI Pipeline @@ -105,9 +105,9 @@ auto-bump: - variables ``` -So, every time that a developer push to any branch, the `test` job is executed. If the branch is `master` and the test jobs success, the `auto-bump` takes place. -To be able to push using the Gitlab runner, we have to set the ssh key, configure git, and finally execute the auto bump. +So, every time that a developer pushes to any branch, the `test` job is executed. If the branch is `master` and the test jobs succeed, the `auto-bump` takes place. +To be able to push using the GitLab runner, we have to set the SSH key, configure git, and finally execute the auto bump. -After merging the new changed into master, we have the final result: +After merging the new changes into master, we have the final result: ![gitlab final ci result](../images/gitlab_ci/gitlab_final_ci_result.png) diff --git a/docs/tutorials/tag_format.md b/docs/tutorials/tag_format.md index 59c42bea13..8408b4c801 100644 --- a/docs/tutorials/tag_format.md +++ b/docs/tutorials/tag_format.md @@ -10,7 +10,7 @@ tag_format: $version version_scheme: pep440 ``` -As this is the default value so you don't have to specify it. +As this is the default value, you don't have to specify it. This setting means that: @@ -52,7 +52,7 @@ You will obviously want to keep all those features working as expected. Commitizen can deal with it as long as you provide the legacy tag format in the configuration. -Using the previous example, let say you want to move from `v${version}` to `component-${version}`. +Using the previous example, let's say you want to move from `v${version}` to `component-${version}`. Then `component-${version}` will be the new tag format and `v${version}` the legacy one. ```yaml @@ -62,14 +62,14 @@ legacy_tag_formats: - v${version} ``` -This way, you won't loose your version history, you'll still be able to generate you changelog properly -and on the next version bump, your last version in the form `v${version}` will be properly recognizef if you use the `scm` version provider. +This way, you won't lose your version history, you'll still be able to generate your changelog properly, +and on the next version bump, your last version in the form `v${version}` will be properly recognized if you use the `scm` version provider. Your new tag will be in the form `component-${version}`. ## Known tags to ignore -Now let's say you have some known tags you want to ignore, either because they are not versions, either because they are not versions of the component you are dealing with. -As a consequence, you don't want them to trigger a warning because Commitizen detected an unknown tag format: +Now let's say you have some known tags you want to ignore, either because they are not versions, or because they are not versions of the component you are dealing with. +As a consequence, you don't want them to trigger a warning because Commitizen detected an unknown tag format. Then you can tell Commitizen about it using the [`ignored_tag_formats`](../config.md#ignored_tag_formats) setting: @@ -93,7 +93,7 @@ This will ignore: It will match any string from any length. This allows to exclude by prefix, whether it is followed by a version or not. !!! tip - If you don't want to be warned when Commitizen detect an unknown tag, you can by setting: + If you don't want to be warned when Commitizen detects an unknown tag, you can do so by setting: ``` [tool.commitizen] ignored_tag_formats = ["*"] diff --git a/docs/tutorials/writing_commits.md b/docs/tutorials/writing_commits.md index 9ba151cc37..d1b2c6645d 100644 --- a/docs/tutorials/writing_commits.md +++ b/docs/tutorials/writing_commits.md @@ -1,21 +1,21 @@ For this project to work well in your pipeline, a commit convention must be followed. -By default commitizen uses the known [conventional commits][conventional_commits], but -you can create your own following the docs information over at +By default, commitizen uses the known [conventional commits][conventional_commits], but +you can create your own following the documentation information over at [customization][customization]. ## Conventional commits If you are using [conventional commits][conventional_commits], the most important thing to know is that you must begin your commits with at least one of these tags: -`fix`, `feat`. And if you introduce a breaking change, then, you must +`fix`, `feat`. And if you introduce a breaking change, then you must add to your commit body the following `BREAKING CHANGE`. -Using these 3 keywords will allow the proper identification of the semantic version. +Using these three keywords will allow the proper identification of the semantic version. Of course, there are other keywords, but I'll leave it to the reader to explore them. ## Writing commits -Now to the important part, when writing commits, it's important to think about: +Now to the important part: when writing commits, it's important to think about: - Your future self - Your colleagues @@ -23,16 +23,16 @@ Now to the important part, when writing commits, it's important to think about: You may think this is trivial, but it's not. It's important for the reader to understand what happened. -Emojis may be added as well (e.g. see [cz-emoji][cz_emoji]), which requires the `utf-8`, or equivalent, character encoding to support unicode characters. By default, `commitizen` uses the `utf-8` character encoding, but a different encoding may be set through the `encoding` [configuration option][configuration]. +Emojis may be added as well (e.g., see [cz-emoji][cz_emoji]), which requires the `utf-8`, or equivalent, character encoding to support unicode characters. By default, `commitizen` uses the `utf-8` character encoding, but a different encoding may be set through the `encoding` [configuration option][configuration]. ### Recommendations - **Keep the message short**: Makes the list of commits more readable (~50 chars). - **Talk imperative**: Follow this rule: `If applied, this commit will <commit message>` -- **Think about the CHANGELOG**: Your commits will probably end up in the changelog +- **Think about the CHANGELOG**: Your commits will probably end up in the changelog, so try writing for it, but also keep in mind that you can skip sending commits to the CHANGELOG by using different keywords (like `build`). -- **Use a commit per new feature**: if you introduce multiple things related to the same +- **Use a commit per new feature**: If you introduce multiple things related to the same commit, squash them. This is useful for auto-generating CHANGELOG. | Do's | Don'ts | From c3d4152fb736969b83be7b555ea44b025ffc6c7e Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 11 May 2025 17:19:32 +0800 Subject: [PATCH 564/685] docs: fix typo issues in cli.py, README.md, and contributing.md --- commitizen/cli.py | 2 +- docs/README.md | 18 +++++++++--------- docs/contributing.md | 30 +++++++++++++++--------------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index d08afc6706..f0df2f4242 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -105,7 +105,7 @@ def __call__( "name": ["-nr", "--no-raise"], "type": str, "required": False, - "help": "comma separated error codes that won't rise error, e.g: cz -nr 1,2,3 bump. See codes at https://commitizen-tools.github.io/commitizen/exit_codes/", + "help": "comma separated error codes that won't raise error, e.g: cz -nr 1,2,3 bump. See codes at https://commitizen-tools.github.io/commitizen/exit_codes/", }, ], "subcommands": { diff --git a/docs/README.md b/docs/README.md index 128602dfb3..ee50ad4582 100644 --- a/docs/README.md +++ b/docs/README.md @@ -18,16 +18,16 @@ ## About -Commitizen is release management tool designed for teams. +Commitizen is a release management tool designed for teams. Commitizen assumes your team uses a standard way of committing rules and from that foundation, it can bump your project's version, create the changelog, and update files. By default, commitizen uses [conventional commits][conventional_commits], but you -can build your own set of rules, and publish them. +can build your own set of rules and publish them. -Using a standardized set of rules to write commits, makes commits easier to read, and enforces writing +Using a standardized set of rules to write commits makes commits easier to read and enforces writing descriptive commits. ### Features @@ -55,7 +55,7 @@ pipx install commitizen pipx upgrade commitizen ``` -Install commitizen using `pip` with `--user` flag: +Install commitizen using `pip` with the `--user` flag: ```bash pip install --user -U commitizen @@ -63,7 +63,7 @@ pip install --user -U commitizen ### Python project -You can add it to your local project using one of the following. +You can add it to your local project using one of the following methods. With `pip`: @@ -99,7 +99,7 @@ brew install commitizen ## Usage -Most of the time this is the only command you'll run: +Most of the time, this is the only command you'll run: ```sh cz bump @@ -120,7 +120,7 @@ $ cz --help usage: cz [-h] [--debug] [-n NAME] [-nr NO_RAISE] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... Commitizen is a cli tool to generate conventional commits. -For more information about the topic go to https://conventionalcommits.org/ +For more information about the topic, go to https://conventionalcommits.org/ optional arguments: -h, --help show this help message and exit @@ -128,7 +128,7 @@ optional arguments: --debug use debug mode -n NAME, --name NAME use the given commitizen (default: cz_conventional_commits) -nr NO_RAISE, --no-raise NO_RAISE - comma separated error codes that won't rise error, e.g: cz -nr 1,2,3 bump. See codes at https://commitizen- + comma separated error codes that won't raise error, e.g: cz -nr 1,2,3 bump. See codes at https://commitizen- tools.github.io/commitizen/exit_codes/ commands: @@ -147,7 +147,7 @@ commands: ## Setting up bash completion -When using bash as your shell (limited support for zsh, fish, and tcsh is available), Commitizen can use [argcomplete](https://kislyuk.github.io/argcomplete/) for auto-completion. For this argcomplete needs to be enabled. +When using bash as your shell (limited support for zsh, fish, and tcsh is available), Commitizen can use [argcomplete](https://kislyuk.github.io/argcomplete/) for auto-completion. For this, argcomplete needs to be enabled. argcomplete is installed when you install Commitizen since it's a dependency. diff --git a/docs/contributing.md b/docs/contributing.md index 1192e57c0a..0987771066 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -4,29 +4,29 @@ First of all, thank you for taking the time to contribute! 🎉 When contributing to [commitizen](https://github.com/commitizen-tools/commitizen), please first create an [issue](https://github.com/commitizen-tools/commitizen/issues) to discuss the change you wish to make before making a change. -If you're a first-time contributor, you can check the issues with [good first issue](https://github.com/commitizen-tools/commitizen/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) tag. +If you're a first-time contributor, you can check the issues with the [good first issue](https://github.com/commitizen-tools/commitizen/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) tag. ## Install before contributing -1. Install [poetry](https://python-poetry.org/) `>=2.0.0`. See installation [pages](https://python-poetry.org/docs/#installing-with-the-official-installer). -2. Install [gpg](https://gnupg.org). See installation [pages](https://gnupg.org/documentation/manuals/gnupg/Installation.html#Installation). For Mac users, you can use [homebrew](https://brew.sh/). +1. Install [poetry](https://python-poetry.org/) `>=2.0.0`. See the installation [pages](https://python-poetry.org/docs/#installing-with-the-official-installer). +2. Install [gpg](https://gnupg.org). See the installation [pages](https://gnupg.org/documentation/manuals/gnupg/Installation.html#Installation). For Mac users, you can use [homebrew](https://brew.sh/). ## Before making a pull request 1. Fork [the repository](https://github.com/commitizen-tools/commitizen). -1. Clone the repository from your GitHub. -1. Set up development environment through [poetry](https://python-poetry.org/) (`poetry install`). -1. Set up [pre-commit](https://pre-commit.com/) hook (`poetry setup-pre-commit`). -1. Checkout a new branch and add your modifications. -1. Add test cases for all your changes. +2. Clone the repository from your GitHub. +3. Set up the development environment through [poetry](https://python-poetry.org/) (`poetry install`). +4. Set up the [pre-commit](https://pre-commit.com/) hook (`poetry setup-pre-commit`). +5. Checkout a new branch and add your modifications. +6. Add test cases for all your changes. (We use [CodeCov](https://codecov.io/) to ensure our test coverage does not drop.) -1. Use [commitizen](https://github.com/commitizen-tools/commitizen) to do git commit. We follow [conventional commits](https://www.conventionalcommits.org/). -1. Run `poetry all` to ensure you follow the coding style and the tests pass. -1. Optionally, update the `./docs/README.md` or `docs/images/cli_help` (through running `poetry doc:screenshots`). -1. **Do not** update the `CHANGELOG.md`; it will be automatically created after merging to `master`. -1. **Do not** update the versions in the project; they will be automatically updated. -1. If your changes are about documentation, run `poetry doc` to serve documentation locally and check whether there are any warnings or errors. -1. Send a [pull request](https://github.com/commitizen-tools/commitizen/pulls) 🙏 +7. Use [commitizen](https://github.com/commitizen-tools/commitizen) to make git commits. We follow [conventional commits](https://www.conventionalcommits.org/). +8. Run `poetry all` to ensure you follow the coding style and the tests pass. +9. Optionally, update the `./docs/README.md` or `docs/images/cli_help` (by running `poetry doc:screenshots`). +10. **Do not** update the `CHANGELOG.md`; it will be automatically created after merging to `master`. +11. **Do not** update the versions in the project; they will be automatically updated. +12. If your changes are about documentation, run `poetry doc` to serve documentation locally and check whether there are any warnings or errors. +13. Send a [pull request](https://github.com/commitizen-tools/commitizen/pulls) 🙏 ## Use of GitHub Labels From 23bd8936a448c15e36f775496221731fb40df0ad Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 11 May 2025 22:53:40 +0800 Subject: [PATCH 565/685] docs(README.md): sync help section with the latest `cz --help` command output --- docs/README.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/README.md b/docs/README.md index ee50ad4582..bcc206642d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -115,21 +115,22 @@ Read more in the section [Getting Started](./getting_started.md). ### Help +<!-- Please manually update the following section after changing `cz --help` command output. --> + ```sh $ cz --help -usage: cz [-h] [--debug] [-n NAME] [-nr NO_RAISE] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... +usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... Commitizen is a cli tool to generate conventional commits. -For more information about the topic, go to https://conventionalcommits.org/ +For more information about the topic go to https://conventionalcommits.org/ -optional arguments: +options: -h, --help show this help message and exit - --config the path of configuration file + --config CONFIG the path of configuration file --debug use debug mode - -n NAME, --name NAME use the given commitizen (default: cz_conventional_commits) - -nr NO_RAISE, --no-raise NO_RAISE - comma separated error codes that won't raise error, e.g: cz -nr 1,2,3 bump. See codes at https://commitizen- - tools.github.io/commitizen/exit_codes/ + -n, --name NAME use the given commitizen (default: cz_conventional_commits) + -nr, --no-raise NO_RAISE + comma separated error codes that won't raise error, e.g: cz -nr 1,2,3 bump. See codes at https://commitizen-tools.github.io/commitizen/exit_codes/ commands: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} From 3fcefbd591aa1c14c40730d9deae82f7918f8b2a Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 11 May 2025 23:08:34 +0800 Subject: [PATCH 566/685] docs(README.md): make it easier for readers to understand what Commitizen does --- docs/README.md | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/docs/README.md b/docs/README.md index bcc206642d..616e7610cc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -18,17 +18,26 @@ ## About -Commitizen is a release management tool designed for teams. +Commitizen is a powerful release management tool that helps teams maintain consistent and meaningful commit messages while automating version management. -Commitizen assumes your team uses a standard way of committing rules -and from that foundation, it can bump your project's version, create -the changelog, and update files. +### What Commitizen Does -By default, commitizen uses [conventional commits][conventional_commits], but you -can build your own set of rules and publish them. +By enforcing standardized commit conventions (defaulting to [Conventional Commits][conventional_commits]), Commitizen helps teams: -Using a standardized set of rules to write commits makes commits easier to read and enforces writing -descriptive commits. +- Write clear, structured commit messages +- Automatically manage version numbers using semantic versioning +- Generate and maintain changelogs +- Streamline the release process + +### Key Benefits + +With just a simple `cz bump` command, Commitizen handles: + +1. **Version Management**: Automatically bumps version numbers and updates version files based on your commit history +2. **Changelog Generation**: Creates and updates changelogs following the [Keep a changelog][keepchangelog] format +3. **Commit Standardization**: Enforces consistent commit message formats across your team + +This standardization makes your commit history more readable and meaningful, while the automation reduces manual work and potential errors in the release process. ### Features From 889198d5688e78793e4099e7493b030a652bb670 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 11 May 2025 23:38:41 +0800 Subject: [PATCH 567/685] docs(README.md): move Getting Started to README and improve clarity of the section Closes #1405 --- docs/README.md | 137 ++++++++++++++++++++++++++++++++-------- docs/getting_started.md | 119 ---------------------------------- mkdocs.yml | 1 - 3 files changed, 112 insertions(+), 145 deletions(-) delete mode 100644 docs/getting_started.md diff --git a/docs/README.md b/docs/README.md index 616e7610cc..2a9e79bbfb 100644 --- a/docs/README.md +++ b/docs/README.md @@ -48,81 +48,168 @@ This standardization makes your commit history more readable and meaningful, whi - Display information about your commit rules (commands: schema, example, info) - Create your own set of rules and publish them to pip. Read more on [Customization](./customization.md) -## Requirements +## Getting Started -[Python](https://www.python.org/downloads/) `3.9+` +### Requirements -[Git][gitscm] `1.8.5.2+` +Before installing Commitizen, ensure you have: -## Installation +- [Python](https://www.python.org/downloads/) `3.9+` +- [Git][gitscm] `1.8.5.2+` -Install commitizen in your system using `pipx` (Recommended, <https://pypa.github.io/pipx/installation/>): +### Installation + +#### Global Installation (Recommended) + +The recommended way to install Commitizen is using `pipx`, which ensures a clean, isolated installation: ```bash +# Install pipx if you haven't already pipx ensurepath + +# Install Commitizen pipx install commitizen + +# Keep it updated pipx upgrade commitizen ``` -Install commitizen using `pip` with the `--user` flag: +If you're on macOS, you can also install Commitizen using Homebrew: ```bash -pip install --user -U commitizen +brew install commitizen ``` -### Python project +#### Project-Specific Installation -You can add it to your local project using one of the following methods. +You can add Commitizen to your Python project using any of these package managers: -With `pip`: +**Using pip:** ```bash pip install -U commitizen ``` -With `conda`: +**Using conda:** ```bash conda install -c conda-forge commitizen ``` -With Poetry >= 1.2.0: +**Using Poetry:** ```bash +# For Poetry >= 1.2.0 poetry add commitizen --group dev + +# For Poetry < 1.2.0 +poetry add commitizen --dev ``` -With Poetry < 1.2.0: +### Basic Commands -```bash -poetry add commitizen --dev +#### Initialize Commitizen + +To get started, you'll need to set up your configuration. You have two options: + +1. Use the interactive setup: +```sh +cz init ``` -### macOS +2. Manually create a configuration file (`.cz.toml` or `cz.toml`): +```toml +[tool.commitizen] +version = "0.1.0" +update_changelog_on_bump = true +``` -via [homebrew](https://formulae.brew.sh/formula/commitizen): +#### Create Commits -```bash -brew install commitizen +Create standardized commits using: +```sh +cz commit +# or use the shortcut +cz c ``` -## Usage +To sign off your commits: +```sh +cz commit -- --signoff +# or use the shortcut +cz commit -- -s +``` -Most of the time, this is the only command you'll run: +For more commit options, run `cz commit --help`. +#### Version Management + +The most common command you'll use is: ```sh cz bump ``` -On top of that, you can use commitizen to assist you with the creation of commits: +This command: +- Bumps your project's version +- Creates a git tag +- Updates the changelog (if `update_changelog_on_bump` is enabled) +- Updates version files + +You can customize: +- [Version files](./commands/bump.md#version_files) +- [Version scheme](./commands/bump.md#version_scheme) +- [Version provider](./config.md#version-providers) + +For all available options, see the [bump command documentation](./commands/bump.md). + +### Advanced Usage + +#### Get Project Version +To get your project's version (instead of Commitizen's version): ```sh -cz commit +cz version -p +``` + +This is particularly useful for automation. For example, to preview changelog changes for Slack: +```sh +cz changelog --dry-run "$(cz version -p)" +``` + +#### Pre-commit Integration + +Commitizen can automatically validate your commit messages using pre-commit hooks. + +1. Add to your `.pre-commit-config.yaml`: +```yaml +--- +repos: + - repo: https://github.com/commitizen-tools/commitizen + rev: master # Replace with latest tag + hooks: + - id: commitizen + - id: commitizen-branch + stages: [pre-push] +``` + +2. Install the hooks: +```sh +pre-commit install --hook-type commit-msg --hook-type pre-push ``` -Read more in the section [Getting Started](./getting_started.md). +| Hook | Recommended Stage | +| ----------------- | ----------------- | +| commitizen | commit-msg | +| commitizen-branch | pre-push | + +> **Note**: Replace `master` with the [latest tag](https://github.com/commitizen-tools/commitizen/tags) to avoid warnings. You can automatically update this with: +> ```sh +> pre-commit autoupdate +> ``` -### Help +For more details about commit validation, see the [check command documentation](commands/check.md). + +## Usage <!-- Please manually update the following section after changing `cz --help` command output. --> diff --git a/docs/getting_started.md b/docs/getting_started.md deleted file mode 100644 index 3c6257c363..0000000000 --- a/docs/getting_started.md +++ /dev/null @@ -1,119 +0,0 @@ -## Initialize commitizen - -If it's your first time, you'll need to create a commitizen configuration file. - -The assistant utility will help you set up everything - -```sh -cz init -``` - -Alternatively, create a file `.cz.toml` or `cz.toml` in your project's directory. - -```toml -[tool.commitizen] -version = "0.1.0" -update_changelog_on_bump = true -``` - -## Usage - -### Bump version - -```sh -cz bump -``` - -This command will bump your project's version, and it will create a tag. - -Because of the setting `update_changelog_on_bump`, bump will also create the **changelog**. -You can also [update files](./commands/bump.md#version_files). -You can configure the [version scheme](./commands/bump.md#version_scheme) and [version provider](./config.md#version-providers). - -There are many more options available, please read the docs for the [bump command](./commands/bump.md). - -### Committing - -Run in your terminal - -```bash -cz commit -``` - -or the shortcut - -```bash -cz c -``` - -#### Sign off the commit - -Run in the terminal - -```bash -cz commit -- --signoff -``` - -or the shortcut - -```bash -cz commit -- -s -``` - -### Get project version - -Running `cz version` will return the version of commitizen, but if you want -your project's version you can run: - -```sh -cz version -p -``` - -This can be useful in many situations, where otherwise, you would require a way -to parse the version of your project. Maybe it's simple if you use a `VERSION` file, -but once you start working with many different projects, it becomes tricky. - -A common example is, when you need to send to slack, the changes for the version that you -just created: - -```sh -cz changelog --dry-run "$(cz version -p)" -``` - -### Integration with Pre-commit - -Commitizen can lint your commit message for you with `cz check`. - -You can integrate this in your [pre-commit](https://pre-commit.com/) config with: - -```yaml ---- -repos: - - repo: https://github.com/commitizen-tools/commitizen - rev: master - hooks: - - id: commitizen - - id: commitizen-branch - stages: [pre-push] -``` - -After the configuration is added, you'll need to run: - -```sh -pre-commit install --hook-type commit-msg --hook-type pre-push -``` - -If you aren't using both hooks, you needn't install both stages. - -| Hook | Recommended Stage | -| ----------------- | ----------------- | -| commitizen | commit-msg | -| commitizen-branch | pre-push | - -Note that pre-commit discourages using `master` as a revision, and the above command will print a warning. You should replace the `master` revision with the [latest tag](https://github.com/commitizen-tools/commitizen/tags). This can be done automatically with: - -```sh -pre-commit autoupdate -``` - -Read more about the `check` command [here](commands/check.md). diff --git a/mkdocs.yml b/mkdocs.yml index 6a642161d2..a8a2fe2d44 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -31,7 +31,6 @@ edit_uri: "" nav: - Introduction: "README.md" - - Getting Started: "getting_started.md" - Commands: - init: "commands/init.md" - commit: "commands/commit.md" From 36c7ae576fa4ffae3abcd16f95d5caf066fd7911 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 11 May 2025 23:55:40 +0800 Subject: [PATCH 568/685] docs(README.md): improve clarity of README reference section --- docs/README.md | 72 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 65 insertions(+), 7 deletions(-) diff --git a/docs/README.md b/docs/README.md index 2a9e79bbfb..22d22f42c9 100644 --- a/docs/README.md +++ b/docs/README.md @@ -209,7 +209,11 @@ pre-commit install --hook-type commit-msg --hook-type pre-push For more details about commit validation, see the [check command documentation](commands/check.md). -## Usage +## Help & Reference + +### Command Line Interface + +Commitizen provides a comprehensive CLI with various commands. Here's the complete reference: <!-- Please manually update the following section after changing `cz --help` command output. --> @@ -242,31 +246,85 @@ commands: version get the version of the installed commitizen or the current project (default: installed commitizen) ``` +### Quick Reference + +| Command | Description | Alias | +|---------|-------------|-------| +| `cz init` | Initialize Commitizen configuration | - | +| `cz commit` | Create a new commit | `cz c` | +| `cz bump` | Bump version and update changelog | - | +| `cz changelog` | Generate changelog | `cz ch` | +| `cz check` | Validate commit messages | - | +| `cz version` | Show version information | - | + +### Additional Resources + +- [Conventional Commits Specification][conventional_commits] +- [Exit Codes Reference](./exit_codes.md) +- [Configuration Guide](./config.md) +- [Command Documentation](./commands/init.md) + +### Getting Help + +For each command, you can get detailed help by adding `--help`: + +```sh +cz commit --help +cz bump --help +cz changelog --help +``` + +For more detailed documentation, visit our [documentation site](https://commitizen-tools.github.io/commitizen/). + ## Setting up bash completion -When using bash as your shell (limited support for zsh, fish, and tcsh is available), Commitizen can use [argcomplete](https://kislyuk.github.io/argcomplete/) for auto-completion. For this, argcomplete needs to be enabled. +Commitizen supports command-line completion through [argcomplete](https://kislyuk.github.io/argcomplete/), which is automatically installed as a dependency. This feature provides intelligent auto-completion for all Commitizen commands and options. + +### Supported Shells + +- **Bash**: Full support +- **Zsh**: Limited support +- **Fish**: Limited support +- **Tcsh**: Limited support -argcomplete is installed when you install Commitizen since it's a dependency. +### Installation Methods + +#### Global Installation (Recommended) -If Commitizen is installed globally, global activation can be executed: +If you installed Commitizen globally (e.g., using `pipx` or `brew`), you can enable global completion: ```bash +# Enable global completion for all Python applications sudo activate-global-python-argcomplete ``` -For permanent (but not global) Commitizen activation, use: +#### User-Specific Installation + +For a user-specific installation that persists across sessions: ```bash +# Add to your shell's startup file (e.g., ~/.bashrc, ~/.zshrc) register-python-argcomplete cz >> ~/.bashrc ``` -For one-time activation of argcomplete for Commitizen only, use: +#### Temporary Installation + +For one-time activation in your current shell session: ```bash +# Activate completion for current session only eval "$(register-python-argcomplete cz)" ``` -For further information on activation, please visit the [argcomplete website](https://kislyuk.github.io/argcomplete/). +### Verification + +After installation, you can verify the completion is working by: + +1. Opening a new terminal session +2. Typing `cz` followed by a space and pressing `TAB` twice +3. You should see a list of available commands + +For more detailed information about argcomplete configuration and troubleshooting, visit the [argcomplete documentation](https://kislyuk.github.io/argcomplete/). ## Sponsors From 37a4a3ae4b0f9347f3cb4445931f027fee0ea9c2 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 12 May 2025 00:58:47 +0800 Subject: [PATCH 569/685] docs(cli): align cli output with docs --- commitizen/cli.py | 5 ++--- docs/README.md | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index f0df2f4242..cb834c5d6f 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -86,9 +86,8 @@ def __call__( data = { "prog": "cz", "description": ( - "Commitizen is a cli tool to generate conventional commits.\n" - "For more information about the topic go to " - "https://conventionalcommits.org/" + "Commitizen is a powerful release management tool that helps teams maintain consistent and meaningful commit messages while automating version management.\n" + "For more information, please visit https://commitizen-tools.github.io/commitizen" ), "formatter_class": argparse.RawDescriptionHelpFormatter, "arguments": [ diff --git a/docs/README.md b/docs/README.md index 22d22f42c9..144c253a81 100644 --- a/docs/README.md +++ b/docs/README.md @@ -221,8 +221,8 @@ Commitizen provides a comprehensive CLI with various commands. Here's the comple $ cz --help usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... -Commitizen is a cli tool to generate conventional commits. -For more information about the topic go to https://conventionalcommits.org/ +Commitizen is a powerful release management tool that helps teams maintain consistent and meaningful commit messages while automating version management. +For more information, please visit https://commitizen-tools.github.io/commitizen options: -h, --help show this help message and exit From 4cd6d78a6bfc603497f9cb2c1b14c38616218b9f Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 12 May 2025 01:56:29 +0800 Subject: [PATCH 570/685] docs(contributing.md): improve readability of contributing docs --- docs/contributing.md | 97 ++++++++++++++++++++++++++++++++------------ 1 file changed, 70 insertions(+), 27 deletions(-) diff --git a/docs/contributing.md b/docs/contributing.md index 0987771066..4ca12765aa 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -1,32 +1,78 @@ ## Contributing to commitizen -First of all, thank you for taking the time to contribute! 🎉 +First, thank you for taking the time to contribute! 🎉 When contributing to [commitizen](https://github.com/commitizen-tools/commitizen), please first create an [issue](https://github.com/commitizen-tools/commitizen/issues) to discuss the change you wish to make before making a change. If you're a first-time contributor, you can check the issues with the [good first issue](https://github.com/commitizen-tools/commitizen/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) tag. -## Install before contributing - -1. Install [poetry](https://python-poetry.org/) `>=2.0.0`. See the installation [pages](https://python-poetry.org/docs/#installing-with-the-official-installer). -2. Install [gpg](https://gnupg.org). See the installation [pages](https://gnupg.org/documentation/manuals/gnupg/Installation.html#Installation). For Mac users, you can use [homebrew](https://brew.sh/). - -## Before making a pull request - -1. Fork [the repository](https://github.com/commitizen-tools/commitizen). -2. Clone the repository from your GitHub. -3. Set up the development environment through [poetry](https://python-poetry.org/) (`poetry install`). -4. Set up the [pre-commit](https://pre-commit.com/) hook (`poetry setup-pre-commit`). -5. Checkout a new branch and add your modifications. -6. Add test cases for all your changes. - (We use [CodeCov](https://codecov.io/) to ensure our test coverage does not drop.) -7. Use [commitizen](https://github.com/commitizen-tools/commitizen) to make git commits. We follow [conventional commits](https://www.conventionalcommits.org/). -8. Run `poetry all` to ensure you follow the coding style and the tests pass. -9. Optionally, update the `./docs/README.md` or `docs/images/cli_help` (by running `poetry doc:screenshots`). -10. **Do not** update the `CHANGELOG.md`; it will be automatically created after merging to `master`. -11. **Do not** update the versions in the project; they will be automatically updated. -12. If your changes are about documentation, run `poetry doc` to serve documentation locally and check whether there are any warnings or errors. -13. Send a [pull request](https://github.com/commitizen-tools/commitizen/pulls) 🙏 +## Prerequisites & Setup + +### Required Tools + +1. **Python Environment** + - Python `>=3.9` + - [Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer) `>=2.0.0` +2. **Version Control & Security** + - Git + - Commitizen + - [GPG](https://gnupg.org) for commit signing + - [Installation page](https://gnupg.org/documentation/manuals/gnupg/Installation.html#Installation) + - For Mac users: `brew install gnupg` + - For Windows users: Download from [Gpg4win](https://www.gpg4win.org/) + - For Linux users: Use your distribution's package manager (e.g., `apt install gnupg` for Ubuntu) + +### Getting Started + +1. Fork [Commitizen](https://github.com/commitizen-tools/commitizen) +2. Clone your fork: + ```bash + git clone https://github.com/YOUR_USERNAME/commitizen.git + cd commitizen + ``` +3. Add the upstream repository: + ```bash + git remote add upstream https://github.com/commitizen-tools/commitizen.git + ``` +4. Set up the development environment: + ```bash + poetry install + ``` +5. Set up pre-commit hooks: + ```bash + poetry setup-pre-commit + ``` + +## Development Workflow + +1. **Create a New Branch** + ```bash + git switch -c feature/your-feature-name + # or + git switch -c fix/your-bug-fix + ``` +2. **Make Your Changes** + - Write your code + - Add tests for new functionalities or fixes + - Update documentation if needed + - Follow the existing code style +3. **Testing** + - Run the full test suite: `poetry all` + - Ensure test coverage doesn't drop (we use [CodeCov](https://codecov.io/)) + - For documentation changes, run `poetry doc` to check for warnings/errors +4. **Committing Changes** + - Use commitizen to make commits (we follow [conventional commits](https://www.conventionalcommits.org/)) + - Example: `cz commit` +5. **Documentation** + - Update `docs/README.md` if needed + - For CLI help screenshots: `poetry doc:screenshots` + - **DO NOT** update `CHANGELOG.md` (automatically generated) + - **DO NOT** update version numbers (automatically handled) +6. **Pull Request** + - Push your changes: `git push origin your-branch-name` + - Create a pull request on GitHub + - Ensure CI checks pass + - Wait for review and address any feedback ## Use of GitHub Labels @@ -57,7 +103,7 @@ If you're a first-time contributor, you can check the issues with the [good firs * os: macOS -### Issue life cycle +## Issue life cycle ```mermaid graph TD @@ -75,7 +121,7 @@ graph TD close --> output[/close/] ``` -### Pull request life cycle +## Pull request life cycle ```mermaid flowchart TD @@ -103,6 +149,3 @@ flowchart TD --modification-received--> review ``` - - -[conventional-commits]: https://www.conventionalcommits.org/ From 5e14843ef8ac0c85724588e0f49317132c3cab0f Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 12 May 2025 03:05:22 +0800 Subject: [PATCH 571/685] docs(pyproject.toml): fix typo --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index b306e5e78c..a653ecdb5d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -257,7 +257,7 @@ all.sequence = [ "check-commit", ] -"doc:screenshots".help = "Render documentation screeenshots" +"doc:screenshots".help = "Render documentation screenshots" "doc:screenshots".script = "scripts.gen_cli_help_screenshots:gen_cli_help_screenshots" "doc:build".help = "Build the documentation" From 614eaa3995cf45f55e8d1e7efdcf52e94946f2f8 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Tue, 13 May 2025 00:29:29 +0800 Subject: [PATCH 572/685] docs(README): update get project version section --- docs/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/README.md b/docs/README.md index 144c253a81..721ab99791 100644 --- a/docs/README.md +++ b/docs/README.md @@ -166,16 +166,16 @@ For all available options, see the [bump command documentation](./commands/bump. #### Get Project Version -To get your project's version (instead of Commitizen's version): ```sh +# Get your project's version (instead of Commitizen's version) cz version -p -``` - -This is particularly useful for automation. For example, to preview changelog changes for Slack: -```sh +# Preview changelog changes cz changelog --dry-run "$(cz version -p)" ``` +This command is particularly useful for automation scripts and CI/CD pipelines. +For example, you can use the output of the command `cz changelog --dry-run "$(cz version -p)"` to notify your team about a new release in Slack. + #### Pre-commit Integration Commitizen can automatically validate your commit messages using pre-commit hooks. From f893d082030527dc965348ec6dfb163130b75359 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Wed, 14 May 2025 23:00:31 +0800 Subject: [PATCH 573/685] docs(README): update installation methods --- docs/README.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/README.md b/docs/README.md index 721ab99791..e35cf5e358 100644 --- a/docs/README.md +++ b/docs/README.md @@ -61,12 +61,9 @@ Before installing Commitizen, ensure you have: #### Global Installation (Recommended) -The recommended way to install Commitizen is using `pipx`, which ensures a clean, isolated installation: - +The recommended way to install Commitizen is using [`pipx`](https://pipx.pypa.io/) or [`uv`](https://docs.astral.sh/uv/), which ensures a clean, isolated installation: +**Using pipx:** ```bash -# Install pipx if you haven't already -pipx ensurepath - # Install Commitizen pipx install commitizen @@ -74,8 +71,16 @@ pipx install commitizen pipx upgrade commitizen ``` -If you're on macOS, you can also install Commitizen using Homebrew: +**Using uv:** +```bash +# Install commitizen +uv tool install commitizen +# Keep it updated +uv tool upgrade commitizen +``` + +**(For macOS users) Using Homebrew:** ```bash brew install commitizen ``` @@ -85,19 +90,16 @@ brew install commitizen You can add Commitizen to your Python project using any of these package managers: **Using pip:** - ```bash pip install -U commitizen ``` **Using conda:** - ```bash conda install -c conda-forge commitizen ``` **Using Poetry:** - ```bash # For Poetry >= 1.2.0 poetry add commitizen --group dev From 6930aaaea170fba7fa1aca13cbff40b11d79564e Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Thu, 15 May 2025 20:54:23 +0800 Subject: [PATCH 574/685] docs(README): use cli screenshots Closes #1413 --- docs/README.md | 31 +------------------------------ 1 file changed, 1 insertion(+), 30 deletions(-) diff --git a/docs/README.md b/docs/README.md index e35cf5e358..ed1aaef2a1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -217,36 +217,7 @@ For more details about commit validation, see the [check command documentation]( Commitizen provides a comprehensive CLI with various commands. Here's the complete reference: -<!-- Please manually update the following section after changing `cz --help` command output. --> - -```sh -$ cz --help -usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ... - -Commitizen is a powerful release management tool that helps teams maintain consistent and meaningful commit messages while automating version management. -For more information, please visit https://commitizen-tools.github.io/commitizen - -options: - -h, --help show this help message and exit - --config CONFIG the path of configuration file - --debug use debug mode - -n, --name NAME use the given commitizen (default: cz_conventional_commits) - -nr, --no-raise NO_RAISE - comma separated error codes that won't raise error, e.g: cz -nr 1,2,3 bump. See codes at https://commitizen-tools.github.io/commitizen/exit_codes/ - -commands: - {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} - init init commitizen configuration - commit (c) create new commit - ls show available commitizens - example show commit example - info show information about the cz - schema show commit schema - bump bump semantic version based on the git log - changelog (ch) generate changelog (note that it will overwrite existing file) - check validates that a commit message matches the commitizen schema - version get the version of the installed commitizen or the current project (default: installed commitizen) -``` +![cz --help](images/cli_help/cz___help.svg) ### Quick Reference From ec57f7de0da977f43157b7235e7f817399bc10ed Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Thu, 15 May 2025 21:13:54 +0800 Subject: [PATCH 575/685] docs: fix link warnings and minor grammar issues --- docs/commands/bump.md | 10 +++++----- docs/config.md | 24 ++++++++++++------------ docs/customization.md | 4 ++-- docs/tutorials/github_actions.md | 4 ++-- docs/tutorials/gitlab_ci.md | 4 ++-- docs/tutorials/jenkins_pipeline.md | 2 +- docs/tutorials/monorepo_guidance.md | 4 ++-- 7 files changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/commands/bump.md b/docs/commands/bump.md index efdba76257..6eb5b55c54 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -72,7 +72,7 @@ cz bump --changelog The bump is a pre-release bump, meaning that in addition to a possible version bump the new version receives a pre-release segment compatible with the bump’s version scheme, where the segment consist of a _phase_ and a -non-negative number. Supported options for `--prerelease` are the following phase names `alpha`, `beta`, or +non-negative number. Supported options for `--prerelease` are the following phase names `alpha`, `beta`, or `rc` (release candidate). For more details, refer to the [Python Packaging User Guide](https://packaging.python.org/en/latest/specifications/version-specifiers/#pre-releases). @@ -387,7 +387,7 @@ to skip and why. Remember to document somewhere this, because you'll forget. For example if the system raises a `NoneIncrementExit` error, you look it up -on the list and then you can use the exit code: +on the list, and then you can use the exit code: ```sh cz -nr 21 bump @@ -403,7 +403,7 @@ These are used in: - `cz bump`: Find previous release tag (exact match) and generate new tag. - Find previous release tags in `cz changelog`. - - If `--incremental`: Using latest version found in the changelog, scan existing Git tags with 89\% similarity match. + - If `--incremental`: Using the latest version found in the changelog, scan existing Git tags with 89\% similarity match. - `--rev-range` is converted to Git tag names with `tag_format` before searching Git history. - If the `scm` `version_provider` is used, it uses different regexes to find the previous version tags: - If `tag_format` is set to `$version` (default): `VersionProtocol.parser` (allows `v` prefix) @@ -477,7 +477,7 @@ in a line containing the `version` substring. Template used to specify the commit message generated when bumping. -defaults to: `bump: version $current_version → $new_version` +Defaults to: `bump: version $current_version → $new_version` | Variable | Description | | ------------------ | ----------------------------------- | @@ -499,7 +499,7 @@ bump_message = "release $current_version → $new_version [skip-ci]" When set to `true` the changelog is always updated incrementally when running `cz bump`, so the user does not have to provide the `--changelog` flag every time. -defaults to: `false` +Defaults to: `false` ```toml [tool.commitizen] diff --git a/docs/config.md b/docs/config.md index b6dd794fb3..1ea02d5f67 100644 --- a/docs/config.md +++ b/docs/config.md @@ -59,7 +59,7 @@ Default: `[ ]` Legacy git tag formats, useful for old projects that changed tag format. Tags matching those formats will be recognized as version tags and be included in the changelog. -Each entry use the the syntax as [`tag_format`](#tag_format). [Read more][tag_format] +Each entry uses the syntax as [`tag_format`](#tag_format). [Read more][tag_format] ### `ignored_tag_formats` @@ -68,7 +68,7 @@ Type: `list` Default: `[ ]` Tags matching those formats will be totally ignored and won't raise a warning. -Each entry use the the syntax as [`tag_format`](#tag_format) with the addition of `*` +Each entry uses the syntax as [`tag_format`](#tag_format) with the addition of `*` that will match everything (non-greedy). [Read more][tag_format] ### `update_changelog_on_bump` @@ -101,7 +101,7 @@ Type: `str` Default: `None` -Create custom commit message, useful to skip ci. [Read more][bump_message] +Create custom commit message, useful to skip CI. [Read more][bump_message] ### `retry_after_failure` @@ -117,7 +117,7 @@ Type: `bool` Default: `false` -Disallow empty commit messages, useful in ci. [Read more][allow_abort] +Disallow empty commit messages, useful in CI. [Read more][allow_abort] ### `allowed_prefixes` @@ -195,7 +195,7 @@ Type: `bool` Default: `false` -When true, breaking changes on a `0.x` will remain as a `0.x` version. On `false`, a breaking change will bump a `0.x` version to `1.0`. [major-version-zero] +When true, breaking changes on a `0.x` will remain as a `0.x` version. On `false`, a breaking change will bump a `0.x` version to `1.0`. [Read more][major-version-zero] ### `prerelease_offset` @@ -203,7 +203,7 @@ Type: `int` Default: `0` -In some circumstances, a prerelease cannot start with a 0, e.g. in an embedded project individual characters are encoded as bytes. This can be done by specifying an offset from which to start counting. [prerelease-offset] +In some circumstances, a prerelease cannot start with a 0, e.g. in an embedded project individual characters are encoded as bytes. This can be done by specifying an offset from which to start counting. [Read more][prerelease-offset] ### `pre_bump_hooks` @@ -247,7 +247,7 @@ Provide extra variables to the changelog template. [Read more][template-customiz ## Configuration file -### pyproject.toml, .cz.toml or cz.toml +### `pyproject.toml`, `.cz.toml` or `cz.toml` Default and recommended configuration format for a project. For a **python** project, we recommend adding an entry to your `pyproject.toml`. @@ -278,7 +278,7 @@ style = [ ] ``` -### .cz.json or cz.json +### `.cz.json` or `cz.json` Commitizen has support for JSON configuration. Recommended for `NodeJS` projects. @@ -304,7 +304,7 @@ Commitizen has support for JSON configuration. Recommended for `NodeJS` projects } ``` -### .cz.yaml or cz.yaml +### `.cz.yaml` or `cz.yaml` YAML configuration is supported by Commitizen. Recommended for `Go`, `ansible`, or even `helm` charts projects. @@ -358,7 +358,7 @@ Commitizen provides some version providers for some well known formats: | `composer` | Get and set version from `composer.json` `project.version` field | !!! note -The `scm` provider is meant to be used with `setuptools-scm` or any packager `*-scm` plugin. + The `scm` provider is meant to be used with `setuptools-scm` or any packager `*-scm` plugin. An example in your `.cz.toml` or `cz.toml` would look like this: @@ -408,10 +408,10 @@ setup( [tag_format]: commands/bump.md#tag_format [bump_message]: commands/bump.md#bump_message [major-version-zero]: commands/bump.md#-major-version-zero -[prerelease-offset]: commands/bump.md#-prerelease_offset +[prerelease-offset]: commands/bump.md#prerelease_offset [retry_after_failure]: commands/commit.md#retry [allow_abort]: commands/check.md#allow-abort -[version-scheme]: commands/bump.md#version-scheme +[version-scheme]: commands/bump.md#-version-scheme [pre_bump_hooks]: commands/bump.md#pre_bump_hooks [post_bump_hooks]: commands/bump.md#post_bump_hooks [allowed_prefixes]: commands/check.md#allowed-prefixes diff --git a/docs/customization.md b/docs/customization.md index cef03469e0..805173e900 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -490,7 +490,7 @@ Users can provide their own template from their current working directory (your - setting your template path as `template` configuration - giving your template path as `--template` parameter to `bump` and `changelog` commands -!!! Note +!!! note The path is relative to the current working directory, aka your project root most of the time. ### Template variables @@ -514,7 +514,7 @@ Each `Change` has the following fields: | author | `str` | The commit author name | | author_email | `str` | The commit author email | -!!! Note +!!! note The field values depend on the customization class and/or the settings you provide The `parents` field can be used to identify merge commits and generate a changelog based on those. Another use case diff --git a/docs/tutorials/github_actions.md b/docs/tutorials/github_actions.md index bcb3fda22c..4f50aaf4e7 100644 --- a/docs/tutorials/github_actions.md +++ b/docs/tutorials/github_actions.md @@ -41,14 +41,14 @@ jobs: Push to master and that's it. -### Creating a github release +### Creating a GitHub release You can modify the previous action. Add the variable `changelog_increment_filename` in the `commitizen-action`, specifying where to output the content of the changelog for the newly created version. -And then add a step using a github action to create the release: `softprops/action-gh-release` +And then add a step using a GitHub action to create the release: `softprops/action-gh-release` The commitizen action creates an env variable called `REVISION`, containing the newly created version. diff --git a/docs/tutorials/gitlab_ci.md b/docs/tutorials/gitlab_ci.md index 85b6a615c3..6f6d53a57e 100644 --- a/docs/tutorials/gitlab_ci.md +++ b/docs/tutorials/gitlab_ci.md @@ -12,9 +12,9 @@ _Goal_: Bump a new version every time that a change occurs on the `master` branc 4. For simplification, we store the software version in a file called `VERSION`. You can use any file that you want as `commitizen` supports it. 5. The commit message executed automatically by the `CI` must include `[skip-ci]` in the message; otherwise, the process will generate a loop. You can define the message structure in [commitizen](../commands/bump.md) as well. -### Gitlab Configuration +### GitLab Configuration -To be able to change files and push new changes with `Gitlab CI` runners, we need to have a `ssh` key and configure a git user. +To be able to change files and push new changes with `GitLab CI` runners, we need to have a `ssh` key and configure a git user. First, let's create a `ssh key`. The only requirement is to create it without a passphrase: diff --git a/docs/tutorials/jenkins_pipeline.md b/docs/tutorials/jenkins_pipeline.md index fb87820c4c..2b9ad173d3 100644 --- a/docs/tutorials/jenkins_pipeline.md +++ b/docs/tutorials/jenkins_pipeline.md @@ -47,7 +47,7 @@ def useCz(String authorName = 'Jenkins CI Server', String authorEmail = 'your-je ``` !!! warning - Using jenkins pipeline with any git plugin may require many different configurations, + Using jenkins pipeline with any git plugin may require many configurations, you'll have to tinker with it until your pipelines properly detects git events. Check your webhook in your git repository and check the "behaviors" and "build strategies" in your pipeline settings. diff --git a/docs/tutorials/monorepo_guidance.md b/docs/tutorials/monorepo_guidance.md index 792c8c224f..434899f86f 100644 --- a/docs/tutorials/monorepo_guidance.md +++ b/docs/tutorials/monorepo_guidance.md @@ -56,9 +56,9 @@ In order to filter the correct commits for each component, you'll have to come u For example: - Trigger the pipeline based on the changed path, which can have some downsides, as you'll rely on the developer not including files from other files - - [github actions](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore) uses `path` + - [GitHub actions](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore) uses `path` - [Jenkins](https://www.jenkins.io/doc/book/pipeline/syntax/#built-in-conditions) uses `changeset` - - [Gitlab](https://docs.gitlab.com/ee/ci/yaml/#ruleschanges) uses `rules:changes` + - [GitLab](https://docs.gitlab.com/ee/ci/yaml/#ruleschanges) uses `rules:changes` - Filter certain pattern of the commit message (recommended) From 71c2e914d477ac7e45a05eddb9ad511f4fe0c4ca Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Thu, 15 May 2025 21:22:04 +0800 Subject: [PATCH 576/685] docs(pull_request_template): add broken link check to the checklist --- .github/pull_request_template.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index e28480e5b9..5686474709 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -25,6 +25,13 @@ Please fill in the following content to let us know better about this change. ### Documentation Changes - [ ] Run `poetry doc` locally to ensure the documentation pages renders correctly + - [ ] Check if there are any broken links in the documentation + +> When running `poetry doc`, any broken internal documentation links will be reported in the console output like this: +> +> ```text +> INFO - Doc file 'config.md' contains a link 'commands/bump.md#-post_bump_hooks', but the doc 'commands/bump.md' does not contain an anchor '#-post_bump_hooks'. +> ``` ## Expected Behavior <!-- A clear and concise description of what you expected to happen --> From 2a68e89aed582ef4d89c3d0799406f5cb6584c5a Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Thu, 15 May 2025 21:27:41 +0800 Subject: [PATCH 577/685] docs(contributing): update codecov link --- docs/contributing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing.md b/docs/contributing.md index 4ca12765aa..336f83352a 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -58,7 +58,7 @@ If you're a first-time contributor, you can check the issues with the [good firs - Follow the existing code style 3. **Testing** - Run the full test suite: `poetry all` - - Ensure test coverage doesn't drop (we use [CodeCov](https://codecov.io/)) + - Ensure test coverage doesn't drop (we use [CodeCov](https://app.codecov.io/gh/commitizen-tools/commitizen)) - For documentation changes, run `poetry doc` to check for warnings/errors 4. **Committing Changes** - Use commitizen to make commits (we follow [conventional commits](https://www.conventionalcommits.org/)) From 1c58b1c272c4ab9ee2ce93907280d5ac3bde10a6 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Thu, 15 May 2025 21:44:23 +0800 Subject: [PATCH 578/685] docs(README): update project specific installation methods --- docs/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/README.md b/docs/README.md index ed1aaef2a1..e0c3fed747 100644 --- a/docs/README.md +++ b/docs/README.md @@ -108,6 +108,16 @@ poetry add commitizen --group dev poetry add commitizen --dev ``` +**Using uv:** +```bash +uv add commitizen +``` + +**Using pdm:** +```bash +pdm add -d commitizen +``` + ### Basic Commands #### Initialize Commitizen From 70af1a6dc947cb78d10de546d6441b89ccd5bcd8 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Thu, 15 May 2025 22:03:19 +0800 Subject: [PATCH 579/685] docs: capitalize commitizen for consistency --- docs/README.md | 2 +- docs/commands/bump.md | 26 +++++++++---------- docs/commands/commit.md | 10 +++---- docs/commands/init.md | 2 +- docs/commands/version.md | 2 +- docs/config.md | 6 ++--- docs/contributing.md | 2 +- docs/customization.md | 12 ++++----- docs/exit_codes.md | 2 +- docs/external_links.md | 2 +- docs/faq.md | 6 ++--- docs/third-party-commitizen.md | 4 +-- docs/tutorials/auto_prepare_commit_message.md | 8 +++--- docs/tutorials/github_actions.md | 4 +-- docs/tutorials/monorepo_guidance.md | 2 +- docs/tutorials/writing_commits.md | 2 +- 16 files changed, 46 insertions(+), 46 deletions(-) diff --git a/docs/README.md b/docs/README.md index e0c3fed747..9bb1555721 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,7 +8,7 @@ [![Codecov](https://img.shields.io/codecov/c/github/commitizen-tools/commitizen.svg?style=flat-square)](https://codecov.io/gh/commitizen-tools/commitizen) [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?style=flat-square&logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit) -![Using commitizen cli](images/demo.gif) +![Using Commitizen cli](images/demo.gif) --- diff --git a/docs/commands/bump.md b/docs/commands/bump.md index 6eb5b55c54..ee3d77430a 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -116,7 +116,7 @@ Below are some examples that illustrate the difference in behavior: ### `--check-consistency` -Check whether the versions defined in `version_files` and the version in commitizen +Check whether the versions defined in `version_files` and the version in Commitizen configuration are consistent before bumping version. ```bash @@ -148,7 +148,7 @@ from setuptools import setup setup(..., version="1.0.5", ...) ``` -If `--check-consistency` is used, commitizen will check whether the current version in `pyproject.toml` +If `--check-consistency` is used, Commitizen will check whether the current version in `pyproject.toml` exists in all version_files and find out it does not exist in `setup.py` and fails. However, it will still update `pyproject.toml` and `src/__version__.py`. @@ -174,11 +174,11 @@ If `--local-version` is used, it will bump only the local version `0.1.0` and ke ### `--annotated-tag` -If `--annotated-tag` is used, commitizen will create annotated tags. Also available via configuration, in `pyproject.toml` or `.cz.toml`. +If `--annotated-tag` is used, Commitizen will create annotated tags. It is also available via configuration, in `pyproject.toml` or `.cz.toml`. ### `--annotated-tag-message` -If `--annotated-tag-message` is used, commitizen will create annotated tags with the given message. +If `--annotated-tag-message` is used, Commitizen will create annotated tags with the given message. ### `--changelog-to-stdout` @@ -332,11 +332,11 @@ cz bump --allow-no-commit 2.0.0 ## Avoid raising errors -Some situations from commitizen raise an exit code different than 0. -If the error code is different than 0, any CI or script running commitizen might be interrupted. +Some situations from Commitizen raise an exit code different from 0. +If the error code is different from 0, any CI or script running Commitizen might be interrupted. If you have a special use case, where you don't want to raise one of this error codes, you can -tell commitizen to not raise them. +tell Commitizen to not raise them. ### Recommended use case @@ -355,7 +355,7 @@ cz -nr 21 bump ### Easy way -Check which error code was raised by commitizen by running in the terminal +Check which error code was raised by Commitizen by running in the terminal ```sh echo $? @@ -367,13 +367,13 @@ The output should be an integer like this 3 ``` -And then you can tell commitizen to ignore it: +And then you can tell Commitizen to ignore it: ```sh cz --no-raise 3 ``` -You can tell commitizen to skip more than one if needed: +You can tell Commitizen to skip more than one if needed: ```sh cz --no-raise 3,4,5 @@ -510,7 +510,7 @@ update_changelog_on_bump = true ### `annotated_tag` -When set to `true` commitizen will create annotated tags. +When set to `true`, Commitizen will create annotated tags. ```toml [tool.commitizen] @@ -521,7 +521,7 @@ annotated_tag = true ### `gpg_sign` -When set to `true` commitizen will create gpg signed tags. +When set to `true`, Commitizen will create gpg signed tags. ```toml [tool.commitizen] @@ -532,7 +532,7 @@ gpg_sign = true ### `major_version_zero` -When set to `true` commitizen will keep the major version at zero. +When set to `true`, Commitizen will keep the major version at zero. Useful during the initial development stage of your project. Defaults to: `false` diff --git a/docs/commands/commit.md b/docs/commands/commit.md index ea033cc411..febaee3cf2 100644 --- a/docs/commands/commit.md +++ b/docs/commands/commit.md @@ -1,4 +1,4 @@ -![Using commitizen cli](../images/demo.gif) +![Using Commitizen cli](../images/demo.gif) ## About @@ -20,14 +20,14 @@ case for this is to [automatically prepare a commit message](../tutorials/auto_p ### git options -`git` command options that are not implemented by commitizen can be use via the `--` syntax for the `commit` command. -The syntax separates commitizen arguments from `git commit` arguments by a double dash. This is the resulting syntax: +`git` command options that are not implemented by Commitizen can be use via the `--` syntax for the `commit` command. +The syntax separates Commitizen arguments from `git commit` arguments by a double dash. This is the resulting syntax: ```sh cz commit <commitizen-args> -- <git-cli-args> # e.g., cz commit --dry-run -- -a -S ``` -For example, using the `-S` option on `git commit` to sign a commit is now commitizen compatible: `cz c -- -S` +For example, using the `-S` option on `git commit` to sign a commit is now Commitizen compatible: `cz c -- -S` !!! note Deprecation warning: A commit can be signed off using `cz commit --signoff` or the shortcut `cz commit -s`. @@ -37,7 +37,7 @@ For example, using the `-S` option on `git commit` to sign a commit is now commi You can use `cz commit --retry` to reuse the last commit message when the previous commit attempt failed. To automatically retry when running `cz commit`, you can set the `retry_after_failure` -configuration option to `true`. Running `cz commit --no-retry` makes commitizen ignore `retry_after_failure`, forcing +configuration option to `true`. Running `cz commit --no-retry` makes Commitizen ignore `retry_after_failure`, forcing a new commit message to be prompted. ### Commit message length limit diff --git a/docs/commands/init.md b/docs/commands/init.md index 01e1db6be8..a799c44810 100644 --- a/docs/commands/init.md +++ b/docs/commands/init.md @@ -4,7 +4,7 @@ ## Example -To start using commitizen, the recommended approach is to run +To start using Commitizen, the recommended approach is to run ```sh cz init diff --git a/docs/commands/version.md b/docs/commands/version.md index 9a8176b45f..4d2e6a0323 100644 --- a/docs/commands/version.md +++ b/docs/commands/version.md @@ -1,4 +1,4 @@ -Get the version of the installed commitizen or the current project (default: installed commitizen) +Get the version of the installed Commitizen or the current project (default: installed commitizen) ## Usage diff --git a/docs/config.md b/docs/config.md index 1ea02d5f67..5ca2c5d788 100644 --- a/docs/config.md +++ b/docs/config.md @@ -187,7 +187,7 @@ Type: `bool` Default: `false` -If enabled, commitizen will show keyboard shortcuts when selecting from a list. Define a `key` for each of your choices to set the key. [Read more][shortcuts] +If enabled, Commitizen will show keyboard shortcuts when selecting from a list. Define a `key` for each of your choices to set the key. [Read more][shortcuts] ### `major_version_zero` @@ -341,14 +341,14 @@ commitizen: ## Version providers Commitizen can read and write version from different sources. -By default, it uses the `commitizen` one which is using the `version` field from the commitizen settings. +By default, it uses the `commitizen` one which is using the `version` field from the Commitizen settings. But you can use any `commitizen.provider` entrypoint as value for `version_provider`. Commitizen provides some version providers for some well known formats: | name | description | | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `commitizen` | Default version provider: Fetch and set version in commitizen config. | +| `commitizen` | Default version provider: Fetch and set version in Commitizen config. | | `scm` | Fetch the version from git and does not need to set it back | | `pep621` | Get and set version from `pyproject.toml` `project.version` field | | `poetry` | Get and set version from `pyproject.toml` `tool.poetry.version` field | diff --git a/docs/contributing.md b/docs/contributing.md index 336f83352a..e9e162d2df 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -61,7 +61,7 @@ If you're a first-time contributor, you can check the issues with the [good firs - Ensure test coverage doesn't drop (we use [CodeCov](https://app.codecov.io/gh/commitizen-tools/commitizen)) - For documentation changes, run `poetry doc` to check for warnings/errors 4. **Committing Changes** - - Use commitizen to make commits (we follow [conventional commits](https://www.conventionalcommits.org/)) + - Use Commitizen to make commits (we follow [conventional commits](https://www.conventionalcommits.org/)) - Example: `cz commit` 5. **Documentation** - Update `docs/README.md` if needed diff --git a/docs/customization.md b/docs/customization.md index 805173e900..e97558a308 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -1,4 +1,4 @@ -Customizing commitizen is not hard at all. +Customizing Commitizen is not hard at all. We have two different ways to do so. ## 1. Customize in configuration file @@ -6,7 +6,7 @@ We have two different ways to do so. The basic steps are: 1. Define your custom committing or bumping rules in the configuration file. -2. Declare `name = "cz_customize"` in your configuration file, or add `-n cz_customize` when running commitizen. +2. Declare `name = "cz_customize"` in your configuration file, or add `-n cz_customize` when running Commitizen. Example: @@ -184,8 +184,8 @@ commitizen: #### Shortcut keys -When the [`use_shortcuts`](config.md#settings) config option is enabled, commitizen can show and use keyboard shortcuts to select items from lists directly. -For example, when using the `cz_conventional_commits` commitizen template, shortcut keys are shown when selecting the commit type. Unless otherwise defined, keyboard shortcuts will be numbered automatically. +When the [`use_shortcuts`](config.md#settings) config option is enabled, Commitizen can show and use keyboard shortcuts to select items from lists directly. +For example, when using the `cz_conventional_commits` Commitizen template, shortcut keys are shown when selecting the commit type. Unless otherwise defined, keyboard shortcuts will be numbered automatically. To specify keyboard shortcuts for your custom choices, provide the shortcut using the `key` parameter in dictionary form for each choice you would like to customize. ## 2. Customize through customizing a class @@ -304,7 +304,7 @@ class StrangeCommitizen(BaseCommitizen): bump_map = {"break": "MAJOR", "new": "MINOR", "fix": "PATCH", "hotfix": "PATCH"} ``` -That's it, your commitizen now supports custom rules, and you can run. +That's it, your Commitizen now supports custom rules, and you can run. ```bash cz -n cz_strange bump @@ -451,7 +451,7 @@ Commitizen gives you the possibility to provide your own changelog template, by: - as `--template` parameter to both `bump` and `changelog` commands - either by providing a template with the same name as the default template -By default, the template used is the `CHANGELOG.md.j2` file from the commitizen repository. +By default, the template used is the `CHANGELOG.md.j2` file from the Commitizen repository. ### Providing a template with your customization class diff --git a/docs/exit_codes.md b/docs/exit_codes.md index af9cb83627..fd92961d38 100644 --- a/docs/exit_codes.md +++ b/docs/exit_codes.md @@ -20,7 +20,7 @@ These exit codes can be found in `commitizen/exceptions.py::ExitCode`. | NoCommitBackupError | 10 | Commit back up file cannot be found | | NothingToCommitError | 11 | Nothing in staging to be committed | | CustomError | 12 | `CzException` raised | -| NoCommandFoundError | 13 | No command found when running commitizen cli (e.g., `cz --debug`) | +| NoCommandFoundError | 13 | No command found when running Commitizen cli (e.g., `cz --debug`) | | InvalidCommitMessageError | 14 | The commit message does not pass `cz check` | | MissingConfigError | 15 | Configuration missed for `cz_customize` | | NoRevisionError | 16 | No revision found | diff --git a/docs/external_links.md b/docs/external_links.md index 388bcc8dea..24e4127d86 100644 --- a/docs/external_links.md +++ b/docs/external_links.md @@ -1,4 +1,4 @@ -> If you have written over commitizen, make a PR and add the link here 💪 +> If you have written over Commitizen, make a PR and add the link here 💪 ## Talks diff --git a/docs/faq.md b/docs/faq.md index 0302efd267..ceabac2e10 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -63,7 +63,7 @@ Where do they cross paths? If you are using conventional commits in your git history, then you could swap one with the other in theory. -Regarding the name, [cz-js][cz-js] came first, they used the word commitizen first. When this project was created originally, the creator read "be a good commitizen", and thought it was just a cool word that made sense, and this would be a package that helps you be a good "commit citizen". +Regarding the name, [cz-js][cz-js] came first, they used the word Commitizen first. When this project was created originally, the creator read "be a good commitizen", and thought it was just a cool word that made sense, and this would be a package that helps you be a good "commit citizen". [cz-js]: https://github.com/commitizen/cz-cli @@ -80,7 +80,7 @@ This error was caused by a Python bug on Windows. It's been fixed by [this PR](h More discussion can be found in issue [#318](https://github.com/commitizen-tools/commitizen/issues/318). -## Why does commitizen not support CalVer? +## Why does Commitizen not support CalVer? `commitizen` could support CalVer alongside SemVer, but in practice implementing CalVer creates numerous edge cases that are difficult to maintain ([#385]) and more generally, @@ -117,7 +117,7 @@ New bumped tags will be in the new format but old ones will still work for: So given if you change from `myproject-$version` to `${version}` and then `v${version}`, -your commitizen configuration will look like this: +your Commitizen configuration will look like this: ```toml tag_format = "v${version}" diff --git a/docs/third-party-commitizen.md b/docs/third-party-commitizen.md index e9eb822ed3..dc9b539c85 100644 --- a/docs/third-party-commitizen.md +++ b/docs/third-party-commitizen.md @@ -33,9 +33,9 @@ pip install conventional-JIRA ### [GitHub JIRA Conventional](https://pypi.org/project/cz-github-jira-conventional/) -This plugin extends the commitizen tools by: +This plugin extends the Commitizen tools by: -- requiring a JIRA issue id in the commit message +- requiring a JIRA issue ID in the commit message - creating links to GitHub commits in the CHANGELOG.md - creating links to JIRA issues in the CHANGELOG.md diff --git a/docs/tutorials/auto_prepare_commit_message.md b/docs/tutorials/auto_prepare_commit_message.md index 7e8295b7c8..84ac62b689 100644 --- a/docs/tutorials/auto_prepare_commit_message.md +++ b/docs/tutorials/auto_prepare_commit_message.md @@ -2,7 +2,7 @@ ## About -It can be desirable to use commitizen for all types of commits (i.e. regular, merge, +It can be desirable to use Commitizen for all types of commits (i.e. regular, merge, squash) so that the complete git history adheres to the commit message convention without ever having to call `cz commit`. @@ -18,10 +18,10 @@ To automatically perform arbitrary cleanup steps after a successful commit you c > This hook is invoked by git-commit. It takes no parameters, and is invoked after a > commit is made. -A combination of these two hooks allows for enforcing the usage of commitizen so that -whenever a commit is about to be created, commitizen is used for creating the commit +A combination of these two hooks allows for enforcing the usage of Commitizen so that +whenever a commit is about to be created, Commitizen is used for creating the commit message. Running `git commit` or `git commit -m "..."` for example, would trigger -commitizen and use the generated commit message for the commit. +Commitizen and use the generated commit message for the commit. ## Installation diff --git a/docs/tutorials/github_actions.md b/docs/tutorials/github_actions.md index 4f50aaf4e7..bf08eb3bc5 100644 --- a/docs/tutorials/github_actions.md +++ b/docs/tutorials/github_actions.md @@ -50,7 +50,7 @@ where to output the content of the changelog for the newly created version. And then add a step using a GitHub action to create the release: `softprops/action-gh-release` -The commitizen action creates an env variable called `REVISION`, containing the +Commitizen action creates an env variable called `REVISION`, containing the newly created version. ```yaml @@ -119,7 +119,7 @@ jobs: ./scripts/publish ``` -Notice that we are using poetry, and we are calling a bash script in `./scripts/publish`. You should configure the action, and publish with your tools (twine, poetry, etc.). Check [commitizen example](https://github.com/commitizen-tools/commitizen/blob/master/scripts/publish) +Notice that we are using poetry, and we are calling a bash script in `./scripts/publish`. You should configure the action, and publish with your tools (twine, poetry, etc.). Check [Commitizen example](https://github.com/commitizen-tools/commitizen/blob/master/scripts/publish) You can also use [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) to publish your package. Push the changes and that's it. diff --git a/docs/tutorials/monorepo_guidance.md b/docs/tutorials/monorepo_guidance.md index 434899f86f..6f15a87247 100644 --- a/docs/tutorials/monorepo_guidance.md +++ b/docs/tutorials/monorepo_guidance.md @@ -1,4 +1,4 @@ -# Configuring commitizen in a monorepo +# Configuring Commitizen in a monorepo This tutorial assumes the monorepo layout is designed with multiple components that can be released independently of each other, it also assumes that conventional commits with scopes are in use. Some suggested layouts: diff --git a/docs/tutorials/writing_commits.md b/docs/tutorials/writing_commits.md index d1b2c6645d..7d9139929c 100644 --- a/docs/tutorials/writing_commits.md +++ b/docs/tutorials/writing_commits.md @@ -1,6 +1,6 @@ For this project to work well in your pipeline, a commit convention must be followed. -By default, commitizen uses the known [conventional commits][conventional_commits], but +By default, Commitizen uses the known [conventional commits][conventional_commits], but you can create your own following the documentation information over at [customization][customization]. From f6280c88a14aabf30324a4d9901f4fee577debfc Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 18 May 2025 21:41:24 +0800 Subject: [PATCH 580/685] docs(README): update documentation site link text --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 9bb1555721..516b2a4863 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,7 +12,7 @@ --- -**Documentation:** [https://commitizen-tools.github.io/commitizen/](https://commitizen-tools.github.io/commitizen/) +[**Commitizen Documentation Site**](https://commitizen-tools.github.io/commitizen/) --- From ba1c9c0ce4cba699e61a2ab26d08d3159d0f3bdb Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 18 May 2025 21:46:08 +0800 Subject: [PATCH 581/685] docs(README): replace internal links with documentation site link --- docs/README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/README.md b/docs/README.md index 516b2a4863..078d6da06e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -42,11 +42,11 @@ This standardization makes your commit history more readable and meaningful, whi ### Features - Command-line utility to create commits with your rules. Defaults: [Conventional commits][conventional_commits] -- Bump version automatically using [semantic versioning][semver] based on the commits. [Read More](./commands/bump.md) +- Bump version automatically using [semantic versioning][semver] based on the commits. [Read More](https://commitizen-tools.github.io/commitizen/commands/bump/) - Generate a changelog using [Keep a changelog][keepchangelog] - Update your project's version files automatically - Display information about your commit rules (commands: schema, example, info) -- Create your own set of rules and publish them to pip. Read more on [Customization](./customization.md) +- Create your own set of rules and publish them to pip. Read more on [Customization](https://commitizen-tools.github.io/commitizen/customization/) ## Getting Started @@ -168,11 +168,11 @@ This command: - Updates version files You can customize: -- [Version files](./commands/bump.md#version_files) -- [Version scheme](./commands/bump.md#version_scheme) -- [Version provider](./config.md#version-providers) +- [Version files](https://commitizen-tools.github.io/commitizen/commands/bump/#version_files) +- [Version scheme](https://commitizen-tools.github.io/commitizen/commands/bump/#version_scheme) +- [Version provider](https://commitizen-tools.github.io/commitizen/config/#version-providers) -For all available options, see the [bump command documentation](./commands/bump.md). +For all available options, see the [bump command documentation](https://commitizen-tools.github.io/commitizen/commands/bump/). ### Advanced Usage @@ -219,7 +219,7 @@ pre-commit install --hook-type commit-msg --hook-type pre-push > pre-commit autoupdate > ``` -For more details about commit validation, see the [check command documentation](commands/check.md). +For more details about commit validation, see the [check command documentation](https://commitizen-tools.github.io/commitizen/commands/check/). ## Help & Reference @@ -243,9 +243,9 @@ Commitizen provides a comprehensive CLI with various commands. Here's the comple ### Additional Resources - [Conventional Commits Specification][conventional_commits] -- [Exit Codes Reference](./exit_codes.md) -- [Configuration Guide](./config.md) -- [Command Documentation](./commands/init.md) +- [Exit Codes Reference](https://commitizen-tools.github.io/commitizen/exit_codes/) +- [Configuration Guide](https://commitizen-tools.github.io/commitizen/config/) +- [Command Documentation](https://commitizen-tools.github.io/commitizen/commands/init/) ### Getting Help @@ -257,7 +257,7 @@ cz bump --help cz changelog --help ``` -For more detailed documentation, visit our [documentation site](https://commitizen-tools.github.io/commitizen/). +For more details, visit our [documentation site](https://commitizen-tools.github.io/commitizen/). ## Setting up bash completion From bb1539deb206d58f7b94c3b8ece268f8f34f287d Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 18 May 2025 21:57:02 +0800 Subject: [PATCH 582/685] docs(README): paraphase features --- docs/README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index 078d6da06e..f730c17837 100644 --- a/docs/README.md +++ b/docs/README.md @@ -41,12 +41,13 @@ This standardization makes your commit history more readable and meaningful, whi ### Features -- Command-line utility to create commits with your rules. Defaults: [Conventional commits][conventional_commits] -- Bump version automatically using [semantic versioning][semver] based on the commits. [Read More](https://commitizen-tools.github.io/commitizen/commands/bump/) -- Generate a changelog using [Keep a changelog][keepchangelog] -- Update your project's version files automatically -- Display information about your commit rules (commands: schema, example, info) -- Create your own set of rules and publish them to pip. Read more on [Customization](https://commitizen-tools.github.io/commitizen/customization/) +- Interactive CLI for standardized commits with default [Conventional Commits][conventional_commits] support +- Intelligent [version bumping](https://commitizen-tools.github.io/commitizen/commands/bump/) using [Semantic Versioning][semver] +- Automatic [keep a changelog][keepchangelog] generation +- Built-in commit validation with pre-commit hooks +- [Customizable](https://commitizen-tools.github.io/commitizen/customization/) commit rules and templates +- Multi-format version file support +- Custom rules and plugins via pip ## Getting Started From 8e65b88288328dd794e9f8046f5b1164c9afb569 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Wed, 28 May 2025 01:27:30 +0000 Subject: [PATCH 583/685] docs(cli/screenshots): update CLI screenshots [skip ci] --- docs/images/cli_help/cz___help.svg | 172 +++++++++++++++-------------- 1 file changed, 88 insertions(+), 84 deletions(-) diff --git a/docs/images/cli_help/cz___help.svg b/docs/images/cli_help/cz___help.svg index 098e7df70d..d580cfe619 100644 --- a/docs/images/cli_help/cz___help.svg +++ b/docs/images/cli_help/cz___help.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 994 928.4" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 994 952.8" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -19,183 +19,187 @@ font-weight: 700; } - .terminal-2205183093-matrix { + .terminal-1389600277-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2205183093-title { + .terminal-1389600277-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2205183093-r1 { fill: #c5c8c6 } -.terminal-2205183093-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-2205183093-r3 { fill: #d0b344 } -.terminal-2205183093-r4 { fill: #1984e9;text-decoration: underline; } -.terminal-2205183093-r5 { fill: #68a0b3;font-weight: bold } + .terminal-1389600277-r1 { fill: #c5c8c6 } +.terminal-1389600277-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-1389600277-r3 { fill: #d0b344 } +.terminal-1389600277-r4 { fill: #1984e9;text-decoration: underline; } +.terminal-1389600277-r5 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-2205183093-clip-terminal"> - <rect x="0" y="0" width="975.0" height="877.4" /> + <clipPath id="terminal-1389600277-clip-terminal"> + <rect x="0" y="0" width="975.0" height="901.8" /> </clipPath> - <clipPath id="terminal-2205183093-line-0"> + <clipPath id="terminal-1389600277-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-1"> +<clipPath id="terminal-1389600277-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-2"> +<clipPath id="terminal-1389600277-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-3"> +<clipPath id="terminal-1389600277-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-4"> +<clipPath id="terminal-1389600277-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-5"> +<clipPath id="terminal-1389600277-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-6"> +<clipPath id="terminal-1389600277-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-7"> +<clipPath id="terminal-1389600277-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-8"> +<clipPath id="terminal-1389600277-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-9"> +<clipPath id="terminal-1389600277-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-10"> +<clipPath id="terminal-1389600277-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-11"> +<clipPath id="terminal-1389600277-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-12"> +<clipPath id="terminal-1389600277-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-13"> +<clipPath id="terminal-1389600277-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-14"> +<clipPath id="terminal-1389600277-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-15"> +<clipPath id="terminal-1389600277-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-16"> +<clipPath id="terminal-1389600277-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-17"> +<clipPath id="terminal-1389600277-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-18"> +<clipPath id="terminal-1389600277-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-19"> +<clipPath id="terminal-1389600277-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-20"> +<clipPath id="terminal-1389600277-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-21"> +<clipPath id="terminal-1389600277-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-22"> +<clipPath id="terminal-1389600277-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-23"> +<clipPath id="terminal-1389600277-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-24"> +<clipPath id="terminal-1389600277-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-25"> +<clipPath id="terminal-1389600277-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-26"> +<clipPath id="terminal-1389600277-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-27"> +<clipPath id="terminal-1389600277-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-28"> +<clipPath id="terminal-1389600277-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-29"> +<clipPath id="terminal-1389600277-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-30"> +<clipPath id="terminal-1389600277-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-31"> +<clipPath id="terminal-1389600277-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-32"> +<clipPath id="terminal-1389600277-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-33"> +<clipPath id="terminal-1389600277-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-2205183093-line-34"> +<clipPath id="terminal-1389600277-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> +<clipPath id="terminal-1389600277-line-35"> + <rect x="0" y="855.5" width="976" height="24.65"/> + </clipPath> </defs> - <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="926.4" rx="8"/> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="950.8" rx="8"/> <g transform="translate(26,22)"> <circle cx="0" cy="0" r="7" fill="#ff5f57"/> <circle cx="22" cy="0" r="7" fill="#febc2e"/> <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-2205183093-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1389600277-clip-terminal)"> - <g class="terminal-2205183093-matrix"> - <text class="terminal-2205183093-r1" x="0" y="20" textLength="134.2" clip-path="url(#terminal-2205183093-line-0)">$ cz --help</text><text class="terminal-2205183093-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-2205183093-line-0)"> -</text><text class="terminal-2205183093-r1" x="0" y="44.4" textLength="122" clip-path="url(#terminal-2205183093-line-1)">usage: cz </text><text class="terminal-2205183093-r2" x="122" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="134.2" y="44.4" textLength="24.4" clip-path="url(#terminal-2205183093-line-1)">-h</text><text class="terminal-2205183093-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="195.2" y="44.4" textLength="183" clip-path="url(#terminal-2205183093-line-1)">--config CONFIG</text><text class="terminal-2205183093-r2" x="378.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="402.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="414.8" y="44.4" textLength="85.4" clip-path="url(#terminal-2205183093-line-1)">--debug</text><text class="terminal-2205183093-r2" x="500.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="536.8" y="44.4" textLength="85.4" clip-path="url(#terminal-2205183093-line-1)">-n NAME</text><text class="terminal-2205183093-r2" x="622.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r2" x="646.6" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">[</text><text class="terminal-2205183093-r1" x="658.8" y="44.4" textLength="146.4" clip-path="url(#terminal-2205183093-line-1)">-nr NO_RAISE</text><text class="terminal-2205183093-r2" x="805.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)">]</text><text class="terminal-2205183093-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-1)"> -</text><text class="terminal-2205183093-r2" x="122" y="68.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-2)">{</text><text class="terminal-2205183093-r1" x="134.2" y="68.8" textLength="829.6" clip-path="url(#terminal-2205183093-line-2)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-2205183093-r2" x="963.8" y="68.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-2)">}</text><text class="terminal-2205183093-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-2)"> -</text><text class="terminal-2205183093-r3" x="0" y="93.2" textLength="36.6" clip-path="url(#terminal-2205183093-line-3)">...</text><text class="terminal-2205183093-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-3)"> -</text><text class="terminal-2205183093-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-4)"> -</text><text class="terminal-2205183093-r1" x="0" y="142" textLength="707.6" clip-path="url(#terminal-2205183093-line-5)">Commitizen is a cli tool to generate conventional commits.</text><text class="terminal-2205183093-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-2205183093-line-5)"> -</text><text class="terminal-2205183093-r1" x="0" y="166.4" textLength="524.6" clip-path="url(#terminal-2205183093-line-6)">For more information about the topic go to </text><text class="terminal-2205183093-r4" x="524.6" y="166.4" textLength="390.4" clip-path="url(#terminal-2205183093-line-6)">https://conventionalcommits.org/</text><text class="terminal-2205183093-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-6)"> -</text><text class="terminal-2205183093-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-7)"> -</text><text class="terminal-2205183093-r1" x="0" y="215.2" textLength="97.6" clip-path="url(#terminal-2205183093-line-8)">options:</text><text class="terminal-2205183093-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-8)"> -</text><text class="terminal-2205183093-r1" x="0" y="239.6" textLength="671" clip-path="url(#terminal-2205183093-line-9)">  -h, --help            show this help message and exit</text><text class="terminal-2205183093-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-9)"> -</text><text class="terminal-2205183093-r1" x="0" y="264" textLength="658.8" clip-path="url(#terminal-2205183093-line-10)">  --config CONFIG       the path of configuration file</text><text class="terminal-2205183093-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-2205183093-line-10)"> -</text><text class="terminal-2205183093-r1" x="0" y="288.4" textLength="463.6" clip-path="url(#terminal-2205183093-line-11)">  --debug               use debug mode</text><text class="terminal-2205183093-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-11)"> -</text><text class="terminal-2205183093-r1" x="0" y="312.8" textLength="597.8" clip-path="url(#terminal-2205183093-line-12)">  -n, --name NAME       use the given commitizen </text><text class="terminal-2205183093-r2" x="597.8" y="312.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-12)">(</text><text class="terminal-2205183093-r1" x="610" y="312.8" textLength="97.6" clip-path="url(#terminal-2205183093-line-12)">default:</text><text class="terminal-2205183093-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-12)"> -</text><text class="terminal-2205183093-r1" x="0" y="337.2" textLength="573.4" clip-path="url(#terminal-2205183093-line-13)">                        cz_conventional_commits</text><text class="terminal-2205183093-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-13)">)</text><text class="terminal-2205183093-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-13)"> -</text><text class="terminal-2205183093-r1" x="0" y="361.6" textLength="317.2" clip-path="url(#terminal-2205183093-line-14)">  -nr, --no-raise NO_RAISE</text><text class="terminal-2205183093-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-14)"> -</text><text class="terminal-2205183093-r1" x="0" y="386" textLength="902.8" clip-path="url(#terminal-2205183093-line-15)">                        comma separated error codes that won't rise error,</text><text class="terminal-2205183093-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-2205183093-line-15)"> -</text><text class="terminal-2205183093-r1" x="0" y="410.4" textLength="439.2" clip-path="url(#terminal-2205183093-line-16)">                        e.g: cz -nr </text><text class="terminal-2205183093-r5" x="439.2" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">1</text><text class="terminal-2205183093-r1" x="451.4" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">,</text><text class="terminal-2205183093-r5" x="463.6" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">2</text><text class="terminal-2205183093-r1" x="475.8" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">,</text><text class="terminal-2205183093-r5" x="488" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)">3</text><text class="terminal-2205183093-r1" x="500.2" y="410.4" textLength="231.8" clip-path="url(#terminal-2205183093-line-16)"> bump. See codes at</text><text class="terminal-2205183093-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-16)"> -</text><text class="terminal-2205183093-r4" x="292.8" y="434.8" textLength="231.8" clip-path="url(#terminal-2205183093-line-17)">https://commitizen-</text><text class="terminal-2205183093-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-17)"> -</text><text class="terminal-2205183093-r1" x="0" y="459.2" textLength="756.4" clip-path="url(#terminal-2205183093-line-18)">                        tools.github.io/commitizen/exit_codes/</text><text class="terminal-2205183093-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-18)"> -</text><text class="terminal-2205183093-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-19)"> -</text><text class="terminal-2205183093-r1" x="0" y="508" textLength="109.8" clip-path="url(#terminal-2205183093-line-20)">commands:</text><text class="terminal-2205183093-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-2205183093-line-20)"> -</text><text class="terminal-2205183093-r2" x="24.4" y="532.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-21)">{</text><text class="terminal-2205183093-r1" x="36.6" y="532.4" textLength="829.6" clip-path="url(#terminal-2205183093-line-21)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-2205183093-r2" x="866.2" y="532.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-21)">}</text><text class="terminal-2205183093-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-21)"> -</text><text class="terminal-2205183093-r1" x="0" y="556.8" textLength="646.6" clip-path="url(#terminal-2205183093-line-22)">    init                init commitizen configuration</text><text class="terminal-2205183093-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-22)"> -</text><text class="terminal-2205183093-r1" x="0" y="581.2" textLength="134.2" clip-path="url(#terminal-2205183093-line-23)">    commit </text><text class="terminal-2205183093-r2" x="134.2" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)">(</text><text class="terminal-2205183093-r1" x="146.4" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)">c</text><text class="terminal-2205183093-r2" x="158.6" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)">)</text><text class="terminal-2205183093-r1" x="170.8" y="581.2" textLength="329.4" clip-path="url(#terminal-2205183093-line-23)">          create new commit</text><text class="terminal-2205183093-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-23)"> -</text><text class="terminal-2205183093-r1" x="0" y="605.6" textLength="610" clip-path="url(#terminal-2205183093-line-24)">    ls                  show available commitizens</text><text class="terminal-2205183093-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-24)"> -</text><text class="terminal-2205183093-r1" x="0" y="630" textLength="524.6" clip-path="url(#terminal-2205183093-line-25)">    example             show commit example</text><text class="terminal-2205183093-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-2205183093-line-25)"> -</text><text class="terminal-2205183093-r1" x="0" y="654.4" textLength="646.6" clip-path="url(#terminal-2205183093-line-26)">    info                show information about the cz</text><text class="terminal-2205183093-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-26)"> -</text><text class="terminal-2205183093-r1" x="0" y="678.8" textLength="512.4" clip-path="url(#terminal-2205183093-line-27)">    schema              show commit schema</text><text class="terminal-2205183093-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-27)"> -</text><text class="terminal-2205183093-r1" x="0" y="703.2" textLength="805.2" clip-path="url(#terminal-2205183093-line-28)">    bump                bump semantic version based on the git log</text><text class="terminal-2205183093-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-28)"> -</text><text class="terminal-2205183093-r1" x="0" y="727.6" textLength="170.8" clip-path="url(#terminal-2205183093-line-29)">    changelog </text><text class="terminal-2205183093-r2" x="170.8" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)">(</text><text class="terminal-2205183093-r1" x="183" y="727.6" textLength="24.4" clip-path="url(#terminal-2205183093-line-29)">ch</text><text class="terminal-2205183093-r2" x="207.4" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)">)</text><text class="terminal-2205183093-r1" x="219.6" y="727.6" textLength="305" clip-path="url(#terminal-2205183093-line-29)">      generate changelog </text><text class="terminal-2205183093-r2" x="524.6" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)">(</text><text class="terminal-2205183093-r1" x="536.8" y="727.6" textLength="329.4" clip-path="url(#terminal-2205183093-line-29)">note that it will overwrite</text><text class="terminal-2205183093-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-29)"> -</text><text class="terminal-2205183093-r1" x="0" y="752" textLength="451.4" clip-path="url(#terminal-2205183093-line-30)">                        existing file</text><text class="terminal-2205183093-r2" x="451.4" y="752" textLength="12.2" clip-path="url(#terminal-2205183093-line-30)">)</text><text class="terminal-2205183093-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-2205183093-line-30)"> -</text><text class="terminal-2205183093-r1" x="0" y="776.4" textLength="951.6" clip-path="url(#terminal-2205183093-line-31)">    check               validates that a commit message matches the commitizen</text><text class="terminal-2205183093-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-2205183093-line-31)"> -</text><text class="terminal-2205183093-r1" x="0" y="800.8" textLength="366" clip-path="url(#terminal-2205183093-line-32)">                        schema</text><text class="terminal-2205183093-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-2205183093-line-32)"> -</text><text class="terminal-2205183093-r1" x="0" y="825.2" textLength="902.8" clip-path="url(#terminal-2205183093-line-33)">    version             get the version of the installed commitizen or the</text><text class="terminal-2205183093-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-2205183093-line-33)"> -</text><text class="terminal-2205183093-r1" x="0" y="849.6" textLength="488" clip-path="url(#terminal-2205183093-line-34)">                        current project </text><text class="terminal-2205183093-r2" x="488" y="849.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-34)">(</text><text class="terminal-2205183093-r1" x="500.2" y="849.6" textLength="353.8" clip-path="url(#terminal-2205183093-line-34)">default: installed commitizen</text><text class="terminal-2205183093-r2" x="854" y="849.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-34)">)</text><text class="terminal-2205183093-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-2205183093-line-34)"> -</text><text class="terminal-2205183093-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-2205183093-line-35)"> + <g class="terminal-1389600277-matrix"> + <text class="terminal-1389600277-r1" x="0" y="20" textLength="134.2" clip-path="url(#terminal-1389600277-line-0)">$ cz --help</text><text class="terminal-1389600277-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1389600277-line-0)"> +</text><text class="terminal-1389600277-r1" x="0" y="44.4" textLength="122" clip-path="url(#terminal-1389600277-line-1)">usage: cz </text><text class="terminal-1389600277-r2" x="122" y="44.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-1)">[</text><text class="terminal-1389600277-r1" x="134.2" y="44.4" textLength="24.4" clip-path="url(#terminal-1389600277-line-1)">-h</text><text class="terminal-1389600277-r2" x="158.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-1)">]</text><text class="terminal-1389600277-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-1)">[</text><text class="terminal-1389600277-r1" x="195.2" y="44.4" textLength="183" clip-path="url(#terminal-1389600277-line-1)">--config CONFIG</text><text class="terminal-1389600277-r2" x="378.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-1)">]</text><text class="terminal-1389600277-r2" x="402.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-1)">[</text><text class="terminal-1389600277-r1" x="414.8" y="44.4" textLength="85.4" clip-path="url(#terminal-1389600277-line-1)">--debug</text><text class="terminal-1389600277-r2" x="500.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-1)">]</text><text class="terminal-1389600277-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-1)">[</text><text class="terminal-1389600277-r1" x="536.8" y="44.4" textLength="85.4" clip-path="url(#terminal-1389600277-line-1)">-n NAME</text><text class="terminal-1389600277-r2" x="622.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-1)">]</text><text class="terminal-1389600277-r2" x="646.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-1)">[</text><text class="terminal-1389600277-r1" x="658.8" y="44.4" textLength="146.4" clip-path="url(#terminal-1389600277-line-1)">-nr NO_RAISE</text><text class="terminal-1389600277-r2" x="805.2" y="44.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-1)">]</text><text class="terminal-1389600277-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-1)"> +</text><text class="terminal-1389600277-r2" x="122" y="68.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-2)">{</text><text class="terminal-1389600277-r1" x="134.2" y="68.8" textLength="829.6" clip-path="url(#terminal-1389600277-line-2)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-1389600277-r2" x="963.8" y="68.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-2)">}</text><text class="terminal-1389600277-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-2)"> +</text><text class="terminal-1389600277-r3" x="0" y="93.2" textLength="36.6" clip-path="url(#terminal-1389600277-line-3)">...</text><text class="terminal-1389600277-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1389600277-line-3)"> +</text><text class="terminal-1389600277-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1389600277-line-4)"> +</text><text class="terminal-1389600277-r1" x="0" y="142" textLength="915" clip-path="url(#terminal-1389600277-line-5)">Commitizen is a powerful release management tool that helps teams maintain </text><text class="terminal-1389600277-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1389600277-line-5)"> +</text><text class="terminal-1389600277-r1" x="0" y="166.4" textLength="951.6" clip-path="url(#terminal-1389600277-line-6)">consistent and meaningful commit messages while automating version management.</text><text class="terminal-1389600277-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-6)"> +</text><text class="terminal-1389600277-r1" x="0" y="190.8" textLength="427" clip-path="url(#terminal-1389600277-line-7)">For more information, please visit </text><text class="terminal-1389600277-r4" x="427" y="190.8" textLength="549" clip-path="url(#terminal-1389600277-line-7)">https://commitizen-tools.github.io/commitizen</text><text class="terminal-1389600277-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-7)"> +</text><text class="terminal-1389600277-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1389600277-line-8)"> +</text><text class="terminal-1389600277-r1" x="0" y="239.6" textLength="97.6" clip-path="url(#terminal-1389600277-line-9)">options:</text><text class="terminal-1389600277-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1389600277-line-9)"> +</text><text class="terminal-1389600277-r1" x="0" y="264" textLength="671" clip-path="url(#terminal-1389600277-line-10)">  -h, --help            show this help message and exit</text><text class="terminal-1389600277-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1389600277-line-10)"> +</text><text class="terminal-1389600277-r1" x="0" y="288.4" textLength="658.8" clip-path="url(#terminal-1389600277-line-11)">  --config CONFIG       the path of configuration file</text><text class="terminal-1389600277-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-11)"> +</text><text class="terminal-1389600277-r1" x="0" y="312.8" textLength="463.6" clip-path="url(#terminal-1389600277-line-12)">  --debug               use debug mode</text><text class="terminal-1389600277-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-12)"> +</text><text class="terminal-1389600277-r1" x="0" y="337.2" textLength="597.8" clip-path="url(#terminal-1389600277-line-13)">  -n, --name NAME       use the given commitizen </text><text class="terminal-1389600277-r2" x="597.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1389600277-line-13)">(</text><text class="terminal-1389600277-r1" x="610" y="337.2" textLength="97.6" clip-path="url(#terminal-1389600277-line-13)">default:</text><text class="terminal-1389600277-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1389600277-line-13)"> +</text><text class="terminal-1389600277-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-1389600277-line-14)">                        cz_conventional_commits</text><text class="terminal-1389600277-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-1389600277-line-14)">)</text><text class="terminal-1389600277-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1389600277-line-14)"> +</text><text class="terminal-1389600277-r1" x="0" y="386" textLength="317.2" clip-path="url(#terminal-1389600277-line-15)">  -nr, --no-raise NO_RAISE</text><text class="terminal-1389600277-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1389600277-line-15)"> +</text><text class="terminal-1389600277-r1" x="0" y="410.4" textLength="915" clip-path="url(#terminal-1389600277-line-16)">                        comma separated error codes that won't raise error,</text><text class="terminal-1389600277-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-16)"> +</text><text class="terminal-1389600277-r1" x="0" y="434.8" textLength="439.2" clip-path="url(#terminal-1389600277-line-17)">                        e.g: cz -nr </text><text class="terminal-1389600277-r5" x="439.2" y="434.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-17)">1</text><text class="terminal-1389600277-r1" x="451.4" y="434.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-17)">,</text><text class="terminal-1389600277-r5" x="463.6" y="434.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-17)">2</text><text class="terminal-1389600277-r1" x="475.8" y="434.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-17)">,</text><text class="terminal-1389600277-r5" x="488" y="434.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-17)">3</text><text class="terminal-1389600277-r1" x="500.2" y="434.8" textLength="231.8" clip-path="url(#terminal-1389600277-line-17)"> bump. See codes at</text><text class="terminal-1389600277-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-17)"> +</text><text class="terminal-1389600277-r4" x="292.8" y="459.2" textLength="231.8" clip-path="url(#terminal-1389600277-line-18)">https://commitizen-</text><text class="terminal-1389600277-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1389600277-line-18)"> +</text><text class="terminal-1389600277-r1" x="0" y="483.6" textLength="756.4" clip-path="url(#terminal-1389600277-line-19)">                        tools.github.io/commitizen/exit_codes/</text><text class="terminal-1389600277-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1389600277-line-19)"> +</text><text class="terminal-1389600277-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1389600277-line-20)"> +</text><text class="terminal-1389600277-r1" x="0" y="532.4" textLength="109.8" clip-path="url(#terminal-1389600277-line-21)">commands:</text><text class="terminal-1389600277-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-21)"> +</text><text class="terminal-1389600277-r2" x="24.4" y="556.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-22)">{</text><text class="terminal-1389600277-r1" x="36.6" y="556.8" textLength="829.6" clip-path="url(#terminal-1389600277-line-22)">init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version</text><text class="terminal-1389600277-r2" x="866.2" y="556.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-22)">}</text><text class="terminal-1389600277-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-22)"> +</text><text class="terminal-1389600277-r1" x="0" y="581.2" textLength="646.6" clip-path="url(#terminal-1389600277-line-23)">    init                init commitizen configuration</text><text class="terminal-1389600277-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1389600277-line-23)"> +</text><text class="terminal-1389600277-r1" x="0" y="605.6" textLength="134.2" clip-path="url(#terminal-1389600277-line-24)">    commit </text><text class="terminal-1389600277-r2" x="134.2" y="605.6" textLength="12.2" clip-path="url(#terminal-1389600277-line-24)">(</text><text class="terminal-1389600277-r1" x="146.4" y="605.6" textLength="12.2" clip-path="url(#terminal-1389600277-line-24)">c</text><text class="terminal-1389600277-r2" x="158.6" y="605.6" textLength="12.2" clip-path="url(#terminal-1389600277-line-24)">)</text><text class="terminal-1389600277-r1" x="170.8" y="605.6" textLength="329.4" clip-path="url(#terminal-1389600277-line-24)">          create new commit</text><text class="terminal-1389600277-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1389600277-line-24)"> +</text><text class="terminal-1389600277-r1" x="0" y="630" textLength="610" clip-path="url(#terminal-1389600277-line-25)">    ls                  show available commitizens</text><text class="terminal-1389600277-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1389600277-line-25)"> +</text><text class="terminal-1389600277-r1" x="0" y="654.4" textLength="524.6" clip-path="url(#terminal-1389600277-line-26)">    example             show commit example</text><text class="terminal-1389600277-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-26)"> +</text><text class="terminal-1389600277-r1" x="0" y="678.8" textLength="646.6" clip-path="url(#terminal-1389600277-line-27)">    info                show information about the cz</text><text class="terminal-1389600277-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-27)"> +</text><text class="terminal-1389600277-r1" x="0" y="703.2" textLength="512.4" clip-path="url(#terminal-1389600277-line-28)">    schema              show commit schema</text><text class="terminal-1389600277-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-1389600277-line-28)"> +</text><text class="terminal-1389600277-r1" x="0" y="727.6" textLength="805.2" clip-path="url(#terminal-1389600277-line-29)">    bump                bump semantic version based on the git log</text><text class="terminal-1389600277-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-1389600277-line-29)"> +</text><text class="terminal-1389600277-r1" x="0" y="752" textLength="170.8" clip-path="url(#terminal-1389600277-line-30)">    changelog </text><text class="terminal-1389600277-r2" x="170.8" y="752" textLength="12.2" clip-path="url(#terminal-1389600277-line-30)">(</text><text class="terminal-1389600277-r1" x="183" y="752" textLength="24.4" clip-path="url(#terminal-1389600277-line-30)">ch</text><text class="terminal-1389600277-r2" x="207.4" y="752" textLength="12.2" clip-path="url(#terminal-1389600277-line-30)">)</text><text class="terminal-1389600277-r1" x="219.6" y="752" textLength="305" clip-path="url(#terminal-1389600277-line-30)">      generate changelog </text><text class="terminal-1389600277-r2" x="524.6" y="752" textLength="12.2" clip-path="url(#terminal-1389600277-line-30)">(</text><text class="terminal-1389600277-r1" x="536.8" y="752" textLength="329.4" clip-path="url(#terminal-1389600277-line-30)">note that it will overwrite</text><text class="terminal-1389600277-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-1389600277-line-30)"> +</text><text class="terminal-1389600277-r1" x="0" y="776.4" textLength="451.4" clip-path="url(#terminal-1389600277-line-31)">                        existing file</text><text class="terminal-1389600277-r2" x="451.4" y="776.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-31)">)</text><text class="terminal-1389600277-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-31)"> +</text><text class="terminal-1389600277-r1" x="0" y="800.8" textLength="951.6" clip-path="url(#terminal-1389600277-line-32)">    check               validates that a commit message matches the commitizen</text><text class="terminal-1389600277-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-1389600277-line-32)"> +</text><text class="terminal-1389600277-r1" x="0" y="825.2" textLength="366" clip-path="url(#terminal-1389600277-line-33)">                        schema</text><text class="terminal-1389600277-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-1389600277-line-33)"> +</text><text class="terminal-1389600277-r1" x="0" y="849.6" textLength="902.8" clip-path="url(#terminal-1389600277-line-34)">    version             get the version of the installed commitizen or the</text><text class="terminal-1389600277-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-1389600277-line-34)"> +</text><text class="terminal-1389600277-r1" x="0" y="874" textLength="488" clip-path="url(#terminal-1389600277-line-35)">                        current project </text><text class="terminal-1389600277-r2" x="488" y="874" textLength="12.2" clip-path="url(#terminal-1389600277-line-35)">(</text><text class="terminal-1389600277-r1" x="500.2" y="874" textLength="353.8" clip-path="url(#terminal-1389600277-line-35)">default: installed commitizen</text><text class="terminal-1389600277-r2" x="854" y="874" textLength="12.2" clip-path="url(#terminal-1389600277-line-35)">)</text><text class="terminal-1389600277-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-1389600277-line-35)"> +</text><text class="terminal-1389600277-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-1389600277-line-36)"> </text> </g> </g> From aaa64aca07db9acd52ee069fc4abb572524e0cf4 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 24 May 2025 00:56:51 +0800 Subject: [PATCH 584/685] docs(faq): add features we wont add Closes #1129 --- docs/faq.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/faq.md b/docs/faq.md index ceabac2e10..920f533d73 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -1,3 +1,11 @@ +## Features we won't add + +For a comprehensive list of features that have been considered but won't be implemented, please refer to our [issue tracker](https://github.com/commitizen-tools/commitizen/issues?q=is:issue%20state:closed%20label:%22issue-status:%20wont-fix%22%20OR%20label:%22issue-status:%20wont-implement%22). + +- Enable multiple locations of config file `.cz.*` [#955](https://github.com/commitizen-tools/commitizen/issues/955) +- Create a flag to build the changelog from commits in multiple git repositories [#790](https://github.com/commitizen-tools/commitizen/issues/790) +- Global Configuration [#597](https://github.com/commitizen-tools/commitizen/issues/597) + ## Support for PEP621 PEP621 establishes a `[project]` definition inside `pyproject.toml` From 3560156e518416846baec3cd7d3b772a7478ffb8 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 24 May 2025 01:17:32 +0800 Subject: [PATCH 585/685] docs(bump): rewrite bump about section, fix incorrect version increment rules Closes #781 --- docs/commands/bump.md | 92 ++++++++++++++++++++++++++++--------------- 1 file changed, 60 insertions(+), 32 deletions(-) diff --git a/docs/commands/bump.md b/docs/commands/bump.md index ee3d77430a..d399ec9eb8 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -2,51 +2,79 @@ ## About -`cz bump` **automatically** increases the version, based on the commits. +`cz bump` is a powerful command that **automatically** determines and increases your project's version number based on your commit history. It analyzes your commits to determine the appropriate version increment according to semantic versioning principles. -The commits should follow the rules established by the committer in order to be parsed correctly. +### Key Features -**prerelease** versions are supported (alpha, beta, release candidate). +- **Automatic Version Detection**: Analyzes commit history to determine the appropriate version bump +- **Manual Version Control**: Supports manual version specification when needed +- **Pre-release Support**: Handles alpha, beta, and release candidate versions +- **Multiple Version Schemes**: Supports both [PEP 0440][pep440] and [semantic versioning][semver] formats -The version can also be **manually** bumped. +### Version Increment Rules -The version format follows [PEP 0440][pep440] and [semantic versioning][semver]. - -This means `MAJOR.MINOR.PATCH` +The version follows the `MAJOR.MINOR.PATCH` format, with increments determined by your commit types: | Increment | Description | Conventional commit map | | --------- | --------------------------- | ----------------------- | -| `MAJOR` | Breaking changes introduced | `BREAKING CHANGE` | +| `MAJOR` | Breaking changes introduced | `BREAKING CHANGE`, bang (e.g. `feat!`)| | `MINOR` | New features | `feat` | -| `PATCH` | Fixes | `fix` + everything else | +| `PATCH` | Fixes and improvements | `fix`, `perf`, `refactor`| + +### Version Schemes -[PEP 0440][pep440] is the default, you can switch by using the setting `version_scheme` or the cli: +By default, Commitizen uses [PEP 0440][pep440] for version formatting. You can switch to semantic versioning using either: +1. Command line: ```sh cz bump --version-scheme semver ``` -Some examples of pep440: +2. Configuration file: +```toml +[tool.commitizen] +version_scheme = "semver" +``` -```bash -0.9.0 -0.9.1 -0.9.2 -0.9.10 -0.9.11 -1.0.0a0 # alpha -1.0.0a1 -1.0.0b0 # beta -1.0.0rc0 # release candidate -1.0.0rc1 -1.0.0 -1.0.1 -1.1.0 -2.0.0 -2.0.1a -``` - -`post` releases are not supported yet. +### PEP440 Version Examples + +Commitizen supports the [PEP 440][pep440] version format, which includes several version types. Here are examples of each: + +#### Standard Releases +```text +0.9.0 # Initial development release +0.9.1 # Patch release +0.9.2 # Another patch release +0.9.10 # Tenth patch release +0.9.11 # Eleventh patch release +1.0.0 # First stable release +1.0.1 # Patch release after stable +1.1.0 # Minor feature release +2.0.0 # Major version release +``` + +#### Pre-releases +```text +1.0.0a0 # Alpha release 0 +1.0.0a1 # Alpha release 1 +1.0.0b0 # Beta release 0 +1.0.0rc0 # Release candidate 0 +1.0.0rc1 # Release candidate 1 +``` + +#### Development Releases +```text +1.0.0.dev0 # Development release 0 +1.0.0.dev1 # Development release 1 +``` + +#### Combined Pre-release and Development +```text +1.0.0a1.dev0 # Development release 0 of alpha 1 +1.0.0b2.dev1 # Development release 1 of beta 2 +``` + +> **Note**: `post` releases (e.g., `1.0.0.post1`) are not currently supported. ## Usage @@ -97,7 +125,7 @@ by their precedence and showcase how a release might flow through a development By default, `--increment-mode` is set to `linear`, which ensures that bumping pre-releases _maintains linearity_: bumping of a pre-release with lower precedence than the current pre-release phase maintains the current phase of higher precedence. For example, if the current version is `1.0.0b1` then bumping with `--prerelease alpha` will -continue to bump the “beta” phase. +continue to bump the "beta" phase. Setting `--increment-mode` to `exact` instructs `cz bump` to instead apply the exact changes that have been specified with `--increment` or determined from the commit log. For example, @@ -223,7 +251,7 @@ If used together with a manual version the command also fails. We recommend setting `major_version_zero = true` in your configuration file while a project is in its initial development. Remove that configuration using a breaking-change commit to bump -your project’s major version to `v1.0.0` once your project has reached maturity. +your project's major version to `v1.0.0` once your project has reached maturity. ### `--version-scheme` From 08ced5dbfc6a3283be7cfac87afb86a652069622 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Wed, 28 May 2025 18:04:31 +0800 Subject: [PATCH 586/685] docs(README): fix broken bullet points --- docs/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/README.md b/docs/README.md index f730c17837..31f2a77d15 100644 --- a/docs/README.md +++ b/docs/README.md @@ -163,12 +163,14 @@ cz bump ``` This command: + - Bumps your project's version - Creates a git tag - Updates the changelog (if `update_changelog_on_bump` is enabled) - Updates version files You can customize: + - [Version files](https://commitizen-tools.github.io/commitizen/commands/bump/#version_files) - [Version scheme](https://commitizen-tools.github.io/commitizen/commands/bump/#version_scheme) - [Version provider](https://commitizen-tools.github.io/commitizen/config/#version-providers) @@ -187,6 +189,7 @@ cz changelog --dry-run "$(cz version -p)" ``` This command is particularly useful for automation scripts and CI/CD pipelines. + For example, you can use the output of the command `cz changelog --dry-run "$(cz version -p)"` to notify your team about a new release in Slack. #### Pre-commit Integration From 59e7532cccabf08a0a4b633a13ee174853f5c6f0 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Wed, 28 May 2025 18:31:53 +0800 Subject: [PATCH 587/685] docs(external_links): typo --- docs/external_links.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/external_links.md b/docs/external_links.md index 24e4127d86..a90bbd085b 100644 --- a/docs/external_links.md +++ b/docs/external_links.md @@ -4,7 +4,7 @@ | Name | Speaker | Occasion | Language | Extra | | ------------------------------------------------------------------------- | --------------- | ---------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- | -| commitizen-tools: What can we gain from crafting a git message convention | Wei Lee | Taipey.py 2020 June Meetup, Remote Python Pizza 2020 | English | [slides](https://speakerdeck.com/leew/commitizen-tools-what-can-we-gain-from-crafting-a-git-message-convention-at-taipey-dot-py) | +| commitizen-tools: What can we gain from crafting a git message convention | Wei Lee | Taipei.py 2020 June Meetup, Remote Python Pizza 2020 | English | [slides](https://speakerdeck.com/leew/commitizen-tools-what-can-we-gain-from-crafting-a-git-message-convention-at-taipey-dot-py) | | Automating release cycles | Santiago Fraire | PyAmsterdam June 24, 2020, Online | English | [slides](https://woile.github.io/commitizen-presentation/) | | [Automatizando Releases con Commitizen y Github Actions][automatizando] | Santiago Fraire | PyConAr 2020, Remote | Español | [slides](https://woile.github.io/automating-releases-github-actions-presentation/#/) | From 739abd50a12f996144fc73a5f5dc0fa668b252dc Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Wed, 28 May 2025 17:52:14 +0800 Subject: [PATCH 588/685] docs(init): rewrite commands init page --- docs/commands/init.md | 67 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 14 deletions(-) diff --git a/docs/commands/init.md b/docs/commands/init.md index a799c44810..4d92112d34 100644 --- a/docs/commands/init.md +++ b/docs/commands/init.md @@ -1,27 +1,66 @@ +The `cz init` command helps you set up Commitizen in your project by creating a configuration file with your preferred settings. + ## Usage ![cz init --help](../images/cli_help/cz_init___help.svg) -## Example - -To start using Commitizen, the recommended approach is to run +## Command ```sh cz init ``` +## Interactive Configuration + +When you run `cz init`, Commitizen will guide you through an interactive setup process: + ![init](../images/init.gif) -This command will ask you for information about the project and will -configure the selected file type (`pyproject.toml`, `.cz.toml`, etc.). +## Configuration File + +The initialization process will create a configuration file in your project root. + +Choose the configuration file format based on your project type: + +- Use `pyproject.toml` for Python projects +- Use `.cz.toml`, `.cz.yaml`, `.cz.json`, etc. for other projects. + +## Configuration Options + +During the initialization process, you'll be prompted to configure the following settings: + +1. **Convention Rules**: Select the commit message convention to follow (e.g., conventional commits) +2. **Version Provider**: Choose how to manage versioning in your project. Commitizen supports multiple version management systems: + - `commitizen`: Uses Commitizen's built-in version management system + - `npm`: Manages version in `package.json` for Node.js projects + - `cargo`: Manages version in `Cargo.toml` for Rust projects + - `composer`: Manages version in `composer.json` for PHP projects + - `pep621`: Uses `pyproject.toml` with PEP 621 standard + - `poetry`: Uses `pyproject.toml` with Poetry configuration + - `uv`: Uses `pyproject.toml` and `uv.lock` for Python projects + - `scm`: Reads version directly from git tags without modifying files +3. **Project Version**: The current version of your project will be detected automatically +4. **Tag Format**: The format used for version tags in your repository +5. **Version Type**: Choose between: + - `semver` or `semver2`: Semantic Versioning (MAJOR.MINOR.PATCH) + - `pep440`: Python Package Versioning +6. **Changelog Generation**: Configure whether to automatically generate changelog during version bumps +7. **Alpha Versioning**: Option to keep major version at 0 for alpha/beta software +8. **Pre-commit Hooks**: Set up Git pre-commit hooks for automated commit message validation + +## Example + +```sh +# Start the initialization process +cz init + +# Follow the interactive prompts to configure your project +``` + +## Next Steps -The `init` will help you with +After initialization, you can: -1. Choose a convention rules (`name`) -2. Choosing a version provider (`commitizen` or for example `Cargo.toml`) -3. Detecting your project's version -4. Detecting the tag format used -5. Choosing a version type (`semver` or `pep440`) -6. Whether to create the changelog automatically or not during bump -7. Whether you want to keep the major as zero while building alpha software. -8. Whether to setup pre-commit hooks. +1. Start using `cz commit` to create conventional commits +2. Use `cz bump` to manage versioning +3. Configure additional settings in your project's configuration file From ceb2b7afef13b48a1fe978de3e4cbba472fb6609 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Wed, 28 May 2025 18:25:30 +0800 Subject: [PATCH 589/685] docs: correct case GitHub --- docs/commands/bump.md | 2 +- docs/tutorials/github_actions.md | 2 +- mkdocs.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/commands/bump.md b/docs/commands/bump.md index d399ec9eb8..8219cc3461 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -219,7 +219,7 @@ understand that the user wants to create a changelog. It is recommended to be explicit and use `--changelog` (or the setting `update_changelog_on_bump`). This command is useful to "transport" the newly created changelog. -It can be sent to an auditing system, or to create a Github Release. +It can be sent to an auditing system, or to create a GitHub Release. Example: diff --git a/docs/tutorials/github_actions.md b/docs/tutorials/github_actions.md index bf08eb3bc5..2cb58cfee6 100644 --- a/docs/tutorials/github_actions.md +++ b/docs/tutorials/github_actions.md @@ -1,4 +1,4 @@ -## Create a new release with Github Actions +## Create a new release with GitHub Actions ### Automatic bumping of version diff --git a/mkdocs.yml b/mkdocs.yml index a8a2fe2d44..7b1e0feb30 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -50,7 +50,7 @@ nav: - Auto check commits: "tutorials/auto_check.md" - Auto prepare commit message: "tutorials/auto_prepare_commit_message.md" - GitLab CI: "tutorials/gitlab_ci.md" - - Github Actions: "tutorials/github_actions.md" + - GitHub Actions: "tutorials/github_actions.md" - Jenkins pipeline: "tutorials/jenkins_pipeline.md" - Developmental releases: "tutorials/dev_releases.md" - Monorepo support: "tutorials/monorepo_guidance.md" From 4b6b3fb4f9782ed0d55db5518b1e1523e0779eea Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Wed, 28 May 2025 18:16:16 +0800 Subject: [PATCH 590/685] docs(commit): rewrite command commit page --- docs/commands/commit.md | 75 ++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 31 deletions(-) diff --git a/docs/commands/commit.md b/docs/commands/commit.md index febaee3cf2..5a073a2644 100644 --- a/docs/commands/commit.md +++ b/docs/commands/commit.md @@ -1,52 +1,65 @@ +## Usage + +![cz commit --help](../images/cli_help/cz_commit___help.svg) + +## Overview + ![Using Commitizen cli](../images/demo.gif) -## About +The `commit` command provides an interactive way to create structured commits. Use either: -In your terminal run `cz commit` or the shortcut `cz c` to generate a guided git commit. +- `cz commit` +- `cz c` (shortcut) -You can run `cz commit --write-message-to-file COMMIT_MSG_FILE` to additionally save the -generated message to a file. This can be combined with the `--dry-run` flag to only -write the message to a file and not modify files and create a commit. A possible use -case for this is to [automatically prepare a commit message](../tutorials/auto_prepare_commit_message.md). +By default, Commitizen uses conventional commits, but you can customize the commit rules to match your project's needs. See the [customization guide](../customization.md) for details. +## Basic Usage -!!! note - To maintain platform compatibility, the `commit` command disable ANSI escaping in its output. - In particular pre-commit hooks coloring will be deactivated as discussed in [commitizen-tools/commitizen#417](https://github.com/commitizen-tools/commitizen/issues/417). +### Interactive Commit Creation -## Usage +Simply run `cz commit` in your terminal to start the interactive commit creation process. The command will guide you through creating a properly formatted commit message according to your configured rules. -![cz commit --help](../images/cli_help/cz_commit___help.svg) +### Writing Messages to File -### git options +You can save the generated commit message to a file using: +```sh +cz commit --write-message-to-file COMMIT_MSG_FILE +``` -`git` command options that are not implemented by Commitizen can be use via the `--` syntax for the `commit` command. -The syntax separates Commitizen arguments from `git commit` arguments by a double dash. This is the resulting syntax: +This can be combined with `--dry-run` to only write the message without creating a commit. This is particularly useful for [automatically preparing commit messages](../tutorials/auto_prepare_commit_message.md). + +## Advanced Features + +### Git Command Options + +You can pass any git commit options using the `--` syntax: ```sh cz commit <commitizen-args> -- <git-cli-args> -# e.g., cz commit --dry-run -- -a -S +# Examples: +cz c --dry-run -- -a -S # Stage all changes and sign the commit +cz c -a -- -n # Stage all changes and skip the pre-commit and commit-msg hooks ``` -For example, using the `-S` option on `git commit` to sign a commit is now Commitizen compatible: `cz c -- -S` -!!! note - Deprecation warning: A commit can be signed off using `cz commit --signoff` or the shortcut `cz commit -s`. - This syntax is now deprecated in favor of the new `cz commit -- -s` syntax. +!!! warning + The `--signoff` option (or `-s`) is now recommended being used with the new syntax: `cz commit -- -s`. The old syntax `cz commit --signoff` is deprecated. ### Retry -You can use `cz commit --retry` to reuse the last commit message when the previous commit attempt failed. -To automatically retry when running `cz commit`, you can set the `retry_after_failure` -configuration option to `true`. Running `cz commit --no-retry` makes Commitizen ignore `retry_after_failure`, forcing -a new commit message to be prompted. +- Use `cz commit --retry` to reuse the last commit message after a failed commit attempt +- Set `retry_after_failure: true` in your configuration to automatically retry +- Use `cz commit --no-retry` to force a new commit message prompt + +### Message Length Control -### Commit message length limit +Control the length of your commit messages using the `-l` or `--message-length-limit` option: +```sh +cz commit -l 72 # Limits message length to 72 characters +``` + +!!! note + The length limit only applies to the first line of the commit message. For conventional commits, this means the limit applies from the type of change through the subject. The body and footer are not counted. -The argument `-l` (or `--message-length-limit`) followed by a positive number can limit the length of commit messages. -An exception would be raised when the message length exceeds the limit. -For example, `cz commit -l 72` will limit the length of commit messages to 72 characters. -By default, the limit is set to 0, which means no limit on the length. +## Technical Notes -**Note that the limit applies only to the first line of the message.** -Specifically, for `ConventionalCommitsCz` the length only counts from the type of change to the subject, -while the body and the footer are not counted. +For platform compatibility, the `commit` command disables ANSI escaping in its output. This means pre-commit hooks coloring will be deactivated as discussed in [commitizen-tools/commitizen#417](https://github.com/commitizen-tools/commitizen/issues/417). From 13e4aaacbde5bcfc4bd2aea1a1c060508b86dcec Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 14:03:53 +0800 Subject: [PATCH 591/685] docs(contributing): improve documentation for first-time contributors --- docs/contributing.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/contributing.md b/docs/contributing.md index e9e162d2df..8389e9370d 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -1,10 +1,14 @@ -## Contributing to commitizen +## Contributing to Commitizen -First, thank you for taking the time to contribute! 🎉 +First, thank you for taking the time to contribute! 🎉 Your contributions help make Commitizen better for everyone. -When contributing to [commitizen](https://github.com/commitizen-tools/commitizen), please first create an [issue](https://github.com/commitizen-tools/commitizen/issues) to discuss the change you wish to make before making a change. +When contributing to Commitizen, we encourage you to: -If you're a first-time contributor, you can check the issues with the [good first issue](https://github.com/commitizen-tools/commitizen/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) tag. +1. First, check out the [issues](https://github.com/commitizen-tools/commitizen/issues) and [Features we won't add](faq.md#features-we-wont-add) to see if there's already a discussion about the change you wish to make. +2. If there's no discussion, [create an issue](https://github.com/commitizen-tools/commitizen/issues/new) to discuss your proposed changes. +3. Follow our [development workflow](#development-workflow) and guidelines below. + +If you're a first-time contributor, please check out issues labeled [good first issue](https://github.com/commitizen-tools/commitizen/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) - these are specifically chosen to be beginner-friendly. ## Prerequisites & Setup From 47beadc563d8272b64f88ddbf3e9a37351b8f535 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 14:15:29 +0800 Subject: [PATCH 592/685] docs(pull_request_template): add task to fix broken external links in the docs --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 5686474709..e37148c0a1 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -25,7 +25,7 @@ Please fill in the following content to let us know better about this change. ### Documentation Changes - [ ] Run `poetry doc` locally to ensure the documentation pages renders correctly - - [ ] Check if there are any broken links in the documentation +- [ ] Check and fix any broken links (internal or external) in the documentation > When running `poetry doc`, any broken internal documentation links will be reported in the console output like this: > From 596038c68a51ad2485ca924d394ee1282eec9472 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 2 Jun 2025 14:59:09 +0800 Subject: [PATCH 593/685] docs(feature_request): eliminate duplicated label --- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 4bd19b9b3a..da3bd5af8a 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -26,6 +26,6 @@ body: - type: textarea id: related-issue attributes: - label: Additional context + label: Related issues description: | If applicable, add link to existing issue also help us know better. From a4c87bc0ecb71028d327f82bdba64798518eacc3 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 31 May 2025 22:41:41 +0800 Subject: [PATCH 594/685] docs(contributing): add Contributing TL;DR page --- docs/contributing_tldr.md | 28 ++++++++++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 29 insertions(+) create mode 100644 docs/contributing_tldr.md diff --git a/docs/contributing_tldr.md b/docs/contributing_tldr.md new file mode 100644 index 0000000000..278fa520a3 --- /dev/null +++ b/docs/contributing_tldr.md @@ -0,0 +1,28 @@ +Feel free to send a PR to update this file if you find anything useful. 🙇 + +## Environment + +- Python `>=3.9` +- [Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer) `>=2.0.0` + +## Useful commands + +Please check the [pyproject.toml](https://github.com/commitizen-tools/commitizen/blob/master/pyproject.toml) for a comprehensive list of commands. + +```bash +# Ensure you have the correct dependencies +poetry install + +# Make ruff happy +poetry format + +# Check if ruff and mypy are happy +poetry lint + +# Check if mypy is happy in python 3.9 +mypy --python-version 3.9 + +# Run tests in parallel. +pytest -n auto # This may take a while. +pytest -n auto <test_suite> +``` diff --git a/mkdocs.yml b/mkdocs.yml index 7b1e0feb30..dec8d3fd5d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -58,6 +58,7 @@ nav: - Exit Codes: "exit_codes.md" - Third-Party Commitizen Templates: "third-party-commitizen.md" - Contributing: "contributing.md" + - Contributing TL;DR: "contributing_tldr.md" - Resources: "external_links.md" markdown_extensions: From 195ed16275eb197fe7b2bd78f7120f59d0e84424 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 14:26:31 +0800 Subject: [PATCH 595/685] docs(contributing-tldr): add documentation changes section --- docs/contributing_tldr.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/contributing_tldr.md b/docs/contributing_tldr.md index 278fa520a3..f5483cddcd 100644 --- a/docs/contributing_tldr.md +++ b/docs/contributing_tldr.md @@ -9,6 +9,8 @@ Feel free to send a PR to update this file if you find anything useful. 🙇 Please check the [pyproject.toml](https://github.com/commitizen-tools/commitizen/blob/master/pyproject.toml) for a comprehensive list of commands. +### Code Changes + ```bash # Ensure you have the correct dependencies poetry install @@ -26,3 +28,10 @@ mypy --python-version 3.9 pytest -n auto # This may take a while. pytest -n auto <test_suite> ``` + +### Documentation Changes + +```bash +# Build the documentation locally and check for broken links +poetry doc +``` From c1884bddbeb6afa0af72c9526e18fac16c46e766 Mon Sep 17 00:00:00 2001 From: Anas Hasan <anas.hassan9417@gmail.com> Date: Sun, 1 Jun 2025 15:45:02 +0530 Subject: [PATCH 596/685] docs(faq): explain why Pydantic is not used --- docs/faq.md | 14 +++++++++++ poetry.lock | 68 +++++++++++++++++++++++++++++++++++++------------- pyproject.toml | 1 + 3 files changed, 65 insertions(+), 18 deletions(-) diff --git a/docs/faq.md b/docs/faq.md index 920f533d73..ee9d97068d 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -82,6 +82,20 @@ git revert --no-commit <SHA> git commit -m "revert: foo bar" ``` +## Why don't we use Pydantic? + +While Pydantic is a powerful and popular library for data validation, we intentionally avoid using it in this project to keep our dependency tree minimal and maintainable. + +Including Pydantic would increase the chances of version conflicts for users - especially with major changes introduced in Pydantic v3. Because we pin dependencies tightly, adding Pydantic could unintentionally restrict what other tools or libraries users can install alongside `commitizen`. + +Moreover we don't rely on the full feature set of Pydantic. Simpler alternatives like Python's built-in `TypedDict` offer sufficient type safety for our use cases, without the runtime overhead or dependency burden. + +In short, avoiding Pydantic helps us: +- Keep dependencies lightweight +- Reduce compatibility issues for users +- Maintain clarity about what contributors should and shouldn't use + + ## I got `Exception [WinError 995] The I/O operation ...` error This error was caused by a Python bug on Windows. It's been fixed by [this PR](https://github.com/python/cpython/pull/22017), and according to Python's changelog, [3.8.6rc1](https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-6-release-candidate-1) and [3.9.0rc2](https://docs.python.org/3.9/whatsnew/changelog.html#python-3-9-0-release-candidate-2) should be the accurate versions first contain this fix. In conclusion, upgrade your Python version might solve this issue. diff --git a/poetry.lock b/poetry.lock index cccd7a532a..64ec358bb3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. [[package]] name = "argcomplete" @@ -31,8 +31,8 @@ files = [ six = ">=1.12.0" [package.extras] -astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] -test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] +astroid = ["astroid (>=1,<2) ; python_version < \"3\"", "astroid (>=2,<4) ; python_version >= \"3\""] +test = ["astroid (>=1,<2) ; python_version < \"3\"", "astroid (>=2,<4) ; python_version >= \"3\"", "pytest"] [[package]] name = "babel" @@ -302,7 +302,7 @@ files = [ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} [package.extras] -toml = ["tomli"] +toml = ["tomli ; python_full_version <= \"3.11.0a6\""] [[package]] name = "decli" @@ -344,7 +344,7 @@ files = [ wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools", "tox"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"] [[package]] name = "distlib" @@ -402,7 +402,7 @@ files = [ ] [package.extras] -tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich ; python_version >= \"3.11\""] [[package]] name = "filelock" @@ -419,7 +419,7 @@ files = [ [package.extras] docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] -typing = ["typing-extensions (>=4.12.2)"] +typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] [[package]] name = "freezegun" @@ -491,7 +491,7 @@ description = "Read metadata from Python packages" optional = false python-versions = ">=3.9" groups = ["main", "documentation"] -markers = "python_version < \"3.10\"" +markers = "python_version == \"3.9\"" files = [ {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, @@ -501,12 +501,12 @@ files = [ zipp = ">=3.20" [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -test = ["flufl.flake8", "importlib_resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] type = ["pytest-mypy"] [[package]] @@ -781,7 +781,7 @@ watchdog = ">=2.0" [package.extras] i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4) ; platform_system == \"Windows\"", "ghp-import (==1.0)", "importlib-metadata (==4.4) ; python_version < \"3.10\"", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] [[package]] name = "mkdocs-get-deps" @@ -971,6 +971,18 @@ files = [ qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["docopt", "pytest"] +[[package]] +name = "pastel" +version = "0.2.1" +description = "Bring colors to your terminal." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["dev"] +files = [ + {file = "pastel-0.2.1-py2.py3-none-any.whl", hash = "sha256:4349225fcdf6c2bb34d483e523475de5bb04a5c10ef711263452cb37d7dd4364"}, + {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"}, +] + [[package]] name = "pathspec" version = "0.12.1" @@ -1032,6 +1044,26 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "poethepoet" +version = "0.34.0" +description = "A task runner that works well with poetry." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "poethepoet-0.34.0-py3-none-any.whl", hash = "sha256:c472d6f0fdb341b48d346f4ccd49779840c15b30dfd6bc6347a80d6274b5e34e"}, + {file = "poethepoet-0.34.0.tar.gz", hash = "sha256:86203acce555bbfe45cb6ccac61ba8b16a5784264484195874da457ddabf5850"}, +] + +[package.dependencies] +pastel = ">=0.2.1,<0.3.0" +pyyaml = ">=6.0.2,<7.0" +tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} + +[package.extras] +poetry-plugin = ["poetry (>=1.2.0,<3.0.0) ; python_version < \"4.0\""] + [[package]] name = "pre-commit" version = "4.1.0" @@ -1304,7 +1336,7 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" -groups = ["main", "documentation", "linters", "test"] +groups = ["main", "dev", "documentation", "linters", "test"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -1785,7 +1817,7 @@ files = [ ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -1809,7 +1841,7 @@ platformdirs = ">=3.9.1,<5" [package.extras] docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] [[package]] name = "watchdog" @@ -1948,21 +1980,21 @@ description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" groups = ["main", "documentation"] -markers = "python_version < \"3.10\"" +markers = "python_version == \"3.9\"" files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "e15b424a0569f939e297c8abfcf09753f1fbcc5b4ad891163cc0982accd3b372" +content-hash = "2951e44d1ec238ddef2139c76de3c838976a018b0993f7b84c6fd686e26fc5d0" diff --git a/pyproject.toml b/pyproject.toml index a653ecdb5d..cff51a2094 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -107,6 +107,7 @@ packages = [{ include = "commitizen" }, { include = "commitizen/py.typed" }] [tool.poetry.group.dev.dependencies] ipython = "^8.0" tox = ">4" +poethepoet = "^0.34.0" [tool.poetry.group.test.dependencies] pytest = ">=7.2,<9.0" From 612ef79eec468c9cbd1b88a36aa45d036989f754 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 16 May 2025 02:03:30 +0800 Subject: [PATCH 597/685] refactor: improve readability and fix typos --- commitizen/bump.py | 18 ++++++++++-------- commitizen/changelog.py | 2 +- commitizen/cli.py | 8 ++------ commitizen/cz/utils.py | 11 +++++------ commitizen/defaults.py | 6 +++--- commitizen/tags.py | 6 +----- tests/test_changelog.py | 2 +- 7 files changed, 23 insertions(+), 30 deletions(-) diff --git a/commitizen/bump.py b/commitizen/bump.py index 76a8e15893..b8ae18ba64 100644 --- a/commitizen/bump.py +++ b/commitizen/bump.py @@ -76,7 +76,7 @@ def update_version_in_files( """ # TODO: separate check step and write step updated = [] - for path, regex in files_and_regexs(files, current_version): + for path, regex in _files_and_regexes(files, current_version): current_version_found, version_file = _bump_with_regex( path, current_version, @@ -99,7 +99,7 @@ def update_version_in_files( return updated -def files_and_regexs(patterns: list[str], version: str) -> list[tuple[str, str]]: +def _files_and_regexes(patterns: list[str], version: str) -> list[tuple[str, str]]: """ Resolve all distinct files with their regexp from a list of glob patterns with optional regexp """ @@ -128,13 +128,15 @@ def _bump_with_regex( pattern = re.compile(regex) with open(version_filepath, encoding=encoding) as f: for line in f: - if pattern.search(line): - bumped_line = line.replace(current_version, new_version) - if bumped_line != line: - current_version_found = True - lines.append(bumped_line) - else: + if not pattern.search(line): lines.append(line) + continue + + bumped_line = line.replace(current_version, new_version) + if bumped_line != line: + current_version_found = True + lines.append(bumped_line) + return current_version_found, "".join(lines) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index 704efe6071..d8ab56069b 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -190,7 +190,7 @@ def process_commit_message( def order_changelog_tree(tree: Iterable, change_type_order: list[str]) -> Iterable: if len(set(change_type_order)) != len(change_type_order): raise InvalidConfigurationError( - f"Change types contain duplicates types ({change_type_order})" + f"Change types contain duplicated types ({change_type_order})" ) sorted_tree = [] diff --git a/commitizen/cli.py b/commitizen/cli.py index cb834c5d6f..b566fc596d 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -636,14 +636,10 @@ def main(): extra_args = " ".join(unknown_args[1:]) arguments["extra_cli_args"] = extra_args - if args.config: - conf = config.read_cfg(args.config) - else: - conf = config.read_cfg() - + conf = config.read_cfg(args.config) if args.name: conf.update({"name": args.name}) - elif not args.name and not conf.path: + elif not conf.path: conf.update({"name": "cz_conventional_commits"}) if args.debug: diff --git a/commitizen/cz/utils.py b/commitizen/cz/utils.py index 7bc89673c6..cb79d65d1a 100644 --- a/commitizen/cz/utils.py +++ b/commitizen/cz/utils.py @@ -5,6 +5,8 @@ from commitizen import git from commitizen.cz import exceptions +_RE_LOCAL_VERSION = re.compile(r"\+.+") + def required_validator(answer, msg=None): if not answer: @@ -17,16 +19,13 @@ def multiple_line_breaker(answer, sep="|"): def strip_local_version(version: str) -> str: - return re.sub(r"\+.+", "", version) + return _RE_LOCAL_VERSION.sub("", version) def get_backup_file_path() -> str: project_root = git.find_git_project_root() - - if project_root is None: - project = "" - else: - project = project_root.as_posix().replace("/", "%") + project = project_root.as_posix().replace("/", "%") if project_root else "" user = os.environ.get("USER", "") + return os.path.join(tempfile.gettempdir(), f"cz.commit%{user}%{project}.backup") diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 0b6c28e6a9..1885848618 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -141,7 +141,7 @@ class Settings(TypedDict, total=False): def get_tag_regexes( version_regex: str, ) -> dict[str, str]: - regexs = { + regexes = { "version": version_regex, "major": r"(?P<major>\d+)", "minor": r"(?P<minor>\d+)", @@ -150,6 +150,6 @@ def get_tag_regexes( "devrelease": r"(?P<devrelease>\.dev\d+)?", } return { - **{f"${k}": v for k, v in regexs.items()}, - **{f"${{{k}}}": v for k, v in regexs.items()}, + **{f"${k}": v for k, v in regexes.items()}, + **{f"${{{k}}}": v for k, v in regexes.items()}, } diff --git a/commitizen/tags.py b/commitizen/tags.py index 2b9a4b091a..c5f06884fe 100644 --- a/commitizen/tags.py +++ b/commitizen/tags.py @@ -174,11 +174,7 @@ def include_in_changelog(self, tag: GitTag) -> bool: version = self.extract_version(tag) except InvalidVersion: return False - - if self.merge_prereleases and version.is_prerelease: - return False - - return True + return not (self.merge_prereleases and version.is_prerelease) def search_version(self, text: str, last: bool = False) -> VersionTag | None: """ diff --git a/tests/test_changelog.py b/tests/test_changelog.py index b1c7c802e1..511cd1a3df 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1236,7 +1236,7 @@ def test_order_changelog_tree_raises(): with pytest.raises(InvalidConfigurationError) as excinfo: changelog.order_changelog_tree(COMMITS_TREE, change_type_order) - assert "Change types contain duplicates types" in str(excinfo) + assert "Change types contain duplicated types" in str(excinfo) def test_render_changelog( From 33453b753676161db343c56dc4a9abda31c2d864 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 17 May 2025 23:26:54 +0800 Subject: [PATCH 598/685] refactor(version_scheme): cleanup --- commitizen/version_schemes.py | 94 +++++++++++++++++------------------ 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index 84ded9316e..d5370b2c6c 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -41,7 +41,9 @@ Increment: TypeAlias = Literal["MAJOR", "MINOR", "PATCH"] Prerelease: TypeAlias = Literal["alpha", "beta", "rc"] -DEFAULT_VERSION_PARSER = r"v?(?P<version>([0-9]+)\.([0-9]+)(?:\.([0-9]+))?(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z.]+)?(\w+)?)" +_DEFAULT_VERSION_PARSER = re.compile( + r"v?(?P<version>([0-9]+)\.([0-9]+)(?:\.([0-9]+))?(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z.]+)?(\w+)?)" +) @runtime_checkable @@ -156,7 +158,7 @@ class BaseVersion(_BaseVersion): A base class implementing the `VersionProtocol` for PEP440-like versions. """ - parser: ClassVar[re.Pattern] = re.compile(DEFAULT_VERSION_PARSER) + parser: ClassVar[re.Pattern] = _DEFAULT_VERSION_PARSER """Regex capturing this version scheme into a `version` group""" @property @@ -265,39 +267,35 @@ def bump( if self.local and is_local_version: local_version = self.scheme(self.local).bump(increment) return self.scheme(f"{self.public}+{local_version}") # type: ignore - else: - if not self.is_prerelease: - base = self.increment_base(increment) - elif exact_increment: - base = self.increment_base(increment) - else: - base = f"{self.major}.{self.minor}.{self.micro}" - if increment == PATCH: - pass - elif increment == MINOR: - if self.micro != 0: - base = self.increment_base(increment) - elif increment == MAJOR: - if self.minor != 0 or self.micro != 0: - base = self.increment_base(increment) - dev_version = self.generate_devrelease(devrelease) - - release = list(self.release) - if len(release) < 3: - release += [0] * (3 - len(release)) - current_base = ".".join(str(part) for part in release) - if base == current_base: - pre_version = self.generate_prerelease( - prerelease, offset=prerelease_offset - ) - else: - base_version = cast(BaseVersion, self.scheme(base)) - pre_version = base_version.generate_prerelease( - prerelease, offset=prerelease_offset - ) - build_metadata = self.generate_build_metadata(build_metadata) - # TODO: post version - return self.scheme(f"{base}{pre_version}{dev_version}{build_metadata}") # type: ignore + + base = self._get_increment_base(increment, exact_increment) + dev_version = self.generate_devrelease(devrelease) + + release = list(self.release) + if len(release) < 3: + release += [0] * (3 - len(release)) + current_base = ".".join(str(part) for part in release) + + pre_version = ( + self if base == current_base else cast(BaseVersion, self.scheme(base)) + ).generate_prerelease(prerelease, offset=prerelease_offset) + + # TODO: post version + return self.scheme( + f"{base}{pre_version}{dev_version}{self.generate_build_metadata(build_metadata)}" + ) # type: ignore + + def _get_increment_base( + self, increment: Increment | None, exact_increment: bool + ) -> str: + if ( + not self.is_prerelease + or exact_increment + or (increment == MINOR and self.micro != 0) + or (increment == MAJOR and (self.minor != 0 or self.micro != 0)) + ): + return self.increment_base(increment) + return f"{self.major}.{self.minor}.{self.micro}" class Pep440(BaseVersion): @@ -316,7 +314,7 @@ class SemVer(BaseVersion): """ def __str__(self) -> str: - parts = [] + parts: list[str] = [] # Epoch if self.epoch != 0: @@ -364,7 +362,7 @@ def prerelease(self) -> str | None: return None def __str__(self) -> str: - parts = [] + parts: list[str] = [] # Epoch if self.epoch != 0: @@ -373,9 +371,19 @@ def __str__(self) -> str: # Release segment parts.append(".".join(str(x) for x in self.release)) + if prerelease := self._get_prerelease(): + parts.append(f"-{prerelease}") + + # Local version segment + if self.local: + parts.append(f"+{self.local}") + + return "".join(parts) + + def _get_prerelease(self) -> str: # Pre-release identifiers # See: https://semver.org/spec/v2.0.0.html#spec-item-9 - prerelease_parts = [] + prerelease_parts: list[str] = [] if self.prerelease: prerelease_parts.append(f"{self.prerelease}") @@ -387,15 +395,7 @@ def __str__(self) -> str: if self.dev is not None: prerelease_parts.append(f"dev.{self.dev}") - if prerelease_parts: - parts.append("-") - parts.append(".".join(prerelease_parts)) - - # Local version segment - if self.local: - parts.append(f"+{self.local}") - - return "".join(parts) + return ".".join(prerelease_parts) DEFAULT_SCHEME: VersionScheme = Pep440 From 8cfb859ffad0538cb17a1b1bb565df6c47e48ded Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 17 May 2025 19:05:40 +0800 Subject: [PATCH 599/685] refactor(commit): simplify call --- commitizen/commands/commit.py | 64 +++++++++++++++-------------------- 1 file changed, 28 insertions(+), 36 deletions(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index cb34c41a50..eedf77e079 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -92,41 +92,36 @@ def manual_edit(self, message: str) -> str: os.unlink(file.name) return message - def __call__(self): - extra_args: str = self.arguments.get("extra_cli_args", "") + def _get_message(self) -> str: + if self.arguments.get("retry"): + m = self.read_backup_message() + if m is None: + raise NoCommitBackupError() + return m - allow_empty: bool = "--allow-empty" in extra_args + if self.config.settings.get("retry_after_failure") and not self.arguments.get( + "no_retry" + ): + return self.read_backup_message() or self.prompt_commit_questions() + return self.prompt_commit_questions() + def __call__(self): + extra_args: str = self.arguments.get("extra_cli_args", "") dry_run: bool = self.arguments.get("dry_run") write_message_to_file: bool = self.arguments.get("write_message_to_file") - manual_edit: bool = self.arguments.get("edit") + signoff: bool = self.arguments.get("signoff") - is_all: bool = self.arguments.get("all") - if is_all: - c = git.add("-u") + if self.arguments.get("all"): + git.add("-u") - if git.is_staging_clean() and not (dry_run or allow_empty): + if git.is_staging_clean() and not (dry_run or "--allow-empty" in extra_args): raise NothingToCommitError("No files added to staging!") if write_message_to_file is not None and write_message_to_file.is_dir(): raise NotAllowed(f"{write_message_to_file} is a directory") - retry: bool = self.arguments.get("retry") - no_retry: bool = self.arguments.get("no_retry") - retry_after_failure: bool = self.config.settings.get("retry_after_failure") - - if retry: - m = self.read_backup_message() - if m is None: - raise NoCommitBackupError() - elif retry_after_failure and not no_retry: - m = self.read_backup_message() - if m is None: - m = self.prompt_commit_questions() - else: - m = self.prompt_commit_questions() - - if manual_edit: + m = self._get_message() + if self.arguments.get("edit"): m = self.manual_edit(m) out.info(f"\n{m}\n") @@ -138,19 +133,15 @@ def __call__(self): if dry_run: raise DryRunExit() - always_signoff: bool = self.config.settings["always_signoff"] - signoff: bool = self.arguments.get("signoff") - if signoff: out.warn( "signoff mechanic is deprecated, please use `cz commit -- -s` instead." ) - if always_signoff or signoff: + if self.config.settings["always_signoff"] or signoff: extra_args = f"{extra_args} -s".strip() c = git.commit(m, args=extra_args) - if c.return_code != 0: out.error(c.err) @@ -160,11 +151,12 @@ def __call__(self): raise CommitError() - if "nothing added" in c.out or "no changes added to commit" in c.out: + if any(s in c.out for s in ("nothing added", "no changes added to commit")): out.error(c.out) - else: - with contextlib.suppress(FileNotFoundError): - os.remove(self.temp_file) - out.write(c.err) - out.write(c.out) - out.success("Commit successful!") + return + + with contextlib.suppress(FileNotFoundError): + os.remove(self.temp_file) + out.write(c.err) + out.write(c.out) + out.success("Commit successful!") From 471b778e18937cb0291bf266fa1cd2a58a53e081 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 17 May 2025 19:43:14 +0800 Subject: [PATCH 600/685] test(commit): when nothing is added to commit --- tests/commands/test_commit_command.py | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/commands/test_commit_command.py b/tests/commands/test_commit_command.py index 3a92f5af48..930e1a7a9b 100644 --- a/tests/commands/test_commit_command.py +++ b/tests/commands/test_commit_command.py @@ -523,3 +523,34 @@ def test_commit_command_shows_description_when_use_help_option( out, _ = capsys.readouterr() file_regression.check(out, extension=".txt") + + +@pytest.mark.usefixtures("staging_is_clean") +@pytest.mark.parametrize( + "out", ["no changes added to commit", "nothing added to commit"] +) +def test_commit_when_nothing_added_to_commit(config, mocker: MockFixture, out): + prompt_mock = mocker.patch("questionary.prompt") + prompt_mock.return_value = { + "prefix": "feat", + "subject": "user created", + "scope": "", + "is_breaking_change": False, + "body": "", + "footer": "", + } + + commit_mock = mocker.patch("commitizen.git.commit") + commit_mock.return_value = cmd.Command( + out=out, + err="", + stdout=out.encode(), + stderr=b"", + return_code=0, + ) + error_mock = mocker.patch("commitizen.out.error") + + commands.Commit(config, {})() + + commit_mock.assert_called_once() + error_mock.assert_called_once_with(out) From 5b3b6efbbb30980616aa218af35e66587d79a6da Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 16 May 2025 02:18:37 +0800 Subject: [PATCH 601/685] refactor(git): code cleanup and better test coverage --- commitizen/git.py | 133 +++++++++++++++------------------------------- tests/test_git.py | 32 ++++++----- 2 files changed, 61 insertions(+), 104 deletions(-) diff --git a/commitizen/git.py b/commitizen/git.py index 19ca46b6c3..d0cc901a61 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -1,34 +1,14 @@ from __future__ import annotations import os -from enum import Enum -from os import linesep from pathlib import Path from tempfile import NamedTemporaryFile from commitizen import cmd, out from commitizen.exceptions import GitCommandError -UNIX_EOL = "\n" -WINDOWS_EOL = "\r\n" - - -class EOLTypes(Enum): - """The EOL type from `git config core.eol`.""" - - LF = "lf" - CRLF = "crlf" - NATIVE = "native" - - def get_eol_for_open(self) -> str: - """Get the EOL character for `open()`.""" - map = { - EOLTypes.CRLF: WINDOWS_EOL, - EOLTypes.LF: UNIX_EOL, - EOLTypes.NATIVE: linesep, - } - - return map[self] +_UNIX_EOL = "\n" +_WINDOWS_EOL = "\r\n" class GitObject: @@ -37,9 +17,7 @@ class GitObject: date: str def __eq__(self, other) -> bool: - if not hasattr(other, "rev"): - return False - return self.rev == other.rev # type: ignore + return hasattr(other, "rev") and self.rev == other.rev class GitCommit(GitObject): @@ -63,6 +41,20 @@ def __init__( def message(self): return f"{self.title}\n\n{self.body}".strip() + @classmethod + def from_rev_and_commit(cls, rev_and_commit: str) -> GitCommit: + rev, parents, title, author, author_email, *body_list = rev_and_commit.split( + "\n" + ) + return cls( + rev=rev.strip(), + title=title.strip(), + body="\n".join(body_list).strip(), + author=author, + author_email=author_email, + parents=[p for p in parents.strip().split(" ") if p], + ) + def __repr__(self): return f"{self.title} ({self.rev})" @@ -101,13 +93,11 @@ def tag( # according to https://git-scm.com/book/en/v2/Git-Basics-Tagging, # we're not able to create lightweight tag with message. # by adding message, we make it a annotated tags - c = cmd.run(f'git tag {_opt} "{tag if _opt == "" or msg is None else msg}"') - return c + return cmd.run(f'git tag {_opt} "{tag if _opt == "" or msg is None else msg}"') def add(*args: str) -> cmd.Command: - c = cmd.run(f"git add {' '.join(args)}") - return c + return cmd.run(f"git add {' '.join(args)}") def commit( @@ -140,24 +130,10 @@ def get_commits( ) -> list[GitCommit]: """Get the commits between start and end.""" git_log_entries = _get_log_as_str_list(start, end, args) - git_commits = [] - for rev_and_commit in git_log_entries: - if not rev_and_commit: - continue - rev, parents, title, author, author_email, *body_list = rev_and_commit.split( - "\n" - ) - if rev_and_commit: - git_commit = GitCommit( - rev=rev.strip(), - title=title.strip(), - body="\n".join(body_list).strip(), - author=author, - author_email=author_email, - parents=[p for p in parents.strip().split(" ") if p], - ) - git_commits.append(git_commit) - return git_commits + return [ + GitCommit.from_rev_and_commit(rev_and_commit) + for rev_and_commit in filter(None, git_log_entries) + ] def get_filenames_in_commit(git_reference: str = ""): @@ -170,8 +146,7 @@ def get_filenames_in_commit(git_reference: str = ""): c = cmd.run(f"git show --name-only --pretty=format: {git_reference}") if c.return_code == 0: return c.out.strip().split("\n") - else: - raise GitCommandError(c.err) + raise GitCommandError(c.err) def get_tags( @@ -197,16 +172,11 @@ def get_tags( if c.err: out.warn(f"Attempting to proceed after: {c.err}") - if not c.out: - return [] - - git_tags = [ + return [ GitTag.from_line(line=line, inner_delimiter=inner_delimiter) for line in c.out.split("\n")[:-1] ] - return git_tags - def tag_exist(tag: str) -> bool: c = cmd.run(f"git tag --list {tag}") @@ -231,18 +201,18 @@ def get_tag_message(tag: str) -> str | None: return c.out.strip() -def get_tag_names() -> list[str | None]: +def get_tag_names() -> list[str]: c = cmd.run("git tag --list") if c.err: return [] - return [tag.strip() for tag in c.out.split("\n") if tag.strip()] + return list(filter(None, (tag.strip() for tag in c.out.split("\n")))) def find_git_project_root() -> Path | None: c = cmd.run("git rev-parse --show-toplevel") - if not c.err: - return Path(c.out.strip()) - return None + if c.err: + return None + return Path(c.out.strip()) def is_staging_clean() -> bool: @@ -253,32 +223,19 @@ def is_staging_clean() -> bool: def is_git_project() -> bool: c = cmd.run("git rev-parse --is-inside-work-tree") - if c.out.strip() == "true": - return True - return False + return c.out.strip() == "true" -def get_eol_style() -> EOLTypes: +def get_eol_for_open() -> str: + # See: https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreeol c = cmd.run("git config core.eol") eol = c.out.strip().lower() - # We enumerate the EOL types of the response of - # `git config core.eol`, and map it to our enumration EOLTypes. - # - # It is just like the variant of the "match" syntax. - map = { - "lf": EOLTypes.LF, - "crlf": EOLTypes.CRLF, - "native": EOLTypes.NATIVE, - } - - # If the response of `git config core.eol` is in the map: - if eol in map: - return map[eol] - else: - # The default value is "native". - # https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreeol - return map["native"] + if eol == "lf": + return _UNIX_EOL + if eol == "crlf": + return _WINDOWS_EOL + return os.linesep def get_core_editor() -> str | None: @@ -288,22 +245,18 @@ def get_core_editor() -> str | None: return None -def smart_open(*args, **kargs): +def smart_open(*args, **kwargs): """Open a file with the EOL style determined from Git.""" - return open(*args, newline=get_eol_style().get_eol_for_open(), **kargs) + return open(*args, newline=get_eol_for_open(), **kwargs) def _get_log_as_str_list(start: str | None, end: str, args: str) -> list[str]: """Get string representation of each log entry""" delimiter = "----------commit-delimiter----------" log_format: str = "%H%n%P%n%s%n%an%n%ae%n%b" - git_log_cmd = ( - f"git -c log.showSignature=False log --pretty={log_format}{delimiter} {args}" - ) - if start: - command = f"{git_log_cmd} {start}..{end}" - else: - command = f"{git_log_cmd} {end}" + command_range = f"{start}..{end}" if start else end + command = f"git -c log.showSignature=False log --pretty={log_format}{delimiter} {args} {command_range}" + c = cmd.run(command) if c.return_code != 0: raise GitCommandError(c.err) diff --git a/tests/test_git.py b/tests/test_git.py index 8b2fc2b86e..4e4b61ffe2 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -79,8 +79,7 @@ def test_get_reachable_tags_with_commits( monkeypatch.setenv("LANGUAGE", f"{locale}.UTF-8") monkeypatch.setenv("LC_ALL", f"{locale}.UTF-8") with tmp_commitizen_project.as_cwd(): - tags = git.get_tags(reachable_only=True) - assert tags == [] + assert git.get_tags(reachable_only=True) == [] def test_get_tag_names(mocker: MockFixture): @@ -271,7 +270,7 @@ def test_get_commits_with_signature(): def test_get_tag_names_has_correct_arrow_annotation(): arrow_annotation = inspect.getfullargspec(git.get_tag_names).annotations["return"] - assert arrow_annotation == "list[str | None]" + assert arrow_annotation == "list[str]" def test_get_latest_tag_name(tmp_commitizen_project): @@ -317,24 +316,18 @@ def test_is_staging_clean_when_updating_file(tmp_commitizen_project): assert git.is_staging_clean() is False -def test_git_eol_style(tmp_commitizen_project): +def test_get_eol_for_open(tmp_commitizen_project): with tmp_commitizen_project.as_cwd(): - assert git.get_eol_style() == git.EOLTypes.NATIVE + assert git.get_eol_for_open() == os.linesep cmd.run("git config core.eol lf") - assert git.get_eol_style() == git.EOLTypes.LF + assert git.get_eol_for_open() == "\n" cmd.run("git config core.eol crlf") - assert git.get_eol_style() == git.EOLTypes.CRLF + assert git.get_eol_for_open() == "\r\n" cmd.run("git config core.eol native") - assert git.get_eol_style() == git.EOLTypes.NATIVE - - -def test_eoltypes_get_eol_for_open(): - assert git.EOLTypes.get_eol_for_open(git.EOLTypes.NATIVE) == os.linesep - assert git.EOLTypes.get_eol_for_open(git.EOLTypes.LF) == "\n" - assert git.EOLTypes.get_eol_for_open(git.EOLTypes.CRLF) == "\r\n" + assert git.get_eol_for_open() == os.linesep def test_get_core_editor(mocker): @@ -401,3 +394,14 @@ def test_commit_with_spaces_in_path(mocker, file_path, expected_cmd): mock_run.assert_called_once_with(expected_cmd) mock_unlink.assert_called_once_with(file_path) + + +def test_get_filenames_in_commit_error(mocker: MockFixture): + """Test that GitCommandError is raised when git command fails.""" + mocker.patch( + "commitizen.cmd.run", + return_value=FakeCommand(out="", err="fatal: bad object HEAD", return_code=1), + ) + with pytest.raises(exceptions.GitCommandError) as excinfo: + git.get_filenames_in_commit() + assert str(excinfo.value) == "fatal: bad object HEAD" From 755a04113f1a32256de86ea73d3301ba5875bd8f Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 17 May 2025 16:04:08 +0800 Subject: [PATCH 602/685] test(git): add test for from_rev_and_commit --- tests/test_git.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tests/test_git.py b/tests/test_git.py index 4e4b61ffe2..cb4ea93375 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -405,3 +405,47 @@ def test_get_filenames_in_commit_error(mocker: MockFixture): with pytest.raises(exceptions.GitCommandError) as excinfo: git.get_filenames_in_commit() assert str(excinfo.value) == "fatal: bad object HEAD" + + +def test_git_commit_from_rev_and_commit(): + # Test data with all fields populated + rev_and_commit = ( + "abc123\n" # rev + "def456 ghi789\n" # parents + "feat: add new feature\n" # title + "John Doe\n" # author + "john@example.com\n" # author_email + "This is a detailed description\n" # body + "of the new feature\n" + "with multiple lines" + ) + + commit = git.GitCommit.from_rev_and_commit(rev_and_commit) + + assert commit.rev == "abc123" + assert commit.title == "feat: add new feature" + assert ( + commit.body + == "This is a detailed description\nof the new feature\nwith multiple lines" + ) + assert commit.author == "John Doe" + assert commit.author_email == "john@example.com" + assert commit.parents == ["def456", "ghi789"] + + # Test with minimal data + minimal_commit = ( + "abc123\n" # rev + "\n" # no parents + "feat: minimal commit\n" # title + "John Doe\n" # author + "john@example.com\n" # author_email + ) + + commit = git.GitCommit.from_rev_and_commit(minimal_commit) + + assert commit.rev == "abc123" + assert commit.title == "feat: minimal commit" + assert commit.body == "" + assert commit.author == "John Doe" + assert commit.author_email == "john@example.com" + assert commit.parents == [] From 1deffcab679bcecc619652d6175d6ef97167ba25 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 17 May 2025 16:04:38 +0800 Subject: [PATCH 603/685] docs(git): from_rev_and_commit docstring --- commitizen/git.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/commitizen/git.py b/commitizen/git.py index d0cc901a61..d80545bc44 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -43,6 +43,48 @@ def message(self): @classmethod def from_rev_and_commit(cls, rev_and_commit: str) -> GitCommit: + """Create a GitCommit instance from a formatted commit string. + + This method parses a multi-line string containing commit information in the following format: + ``` + <rev> + <parents> + <title> + <author> + <author_email> + <body_line_1> + <body_line_2> + ... + ``` + + Args: + rev_and_commit (str): A string containing commit information with fields separated by newlines. + - rev: The commit hash/revision + - parents: Space-separated list of parent commit hashes + - title: The commit title/message + - author: The commit author's name + - author_email: The commit author's email + - body: Optional multi-line commit body + + Returns: + GitCommit: A new GitCommit instance with the parsed information. + + Example: + >>> commit_str = '''abc123 + ... def456 ghi789 + ... feat: add new feature + ... John Doe + ... john@example.com + ... This is a detailed description + ... of the new feature''' + >>> commit = GitCommit.from_rev_and_commit(commit_str) + >>> commit.rev + 'abc123' + >>> commit.title + 'feat: add new feature' + >>> commit.parents + ['def456', 'ghi789'] + """ rev, parents, title, author, author_email, *body_list = rev_and_commit.split( "\n" ) From 1eb35c80ca731518d6f0194904ac390a5fcad021 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 18 May 2025 19:11:52 +0800 Subject: [PATCH 604/685] refactor(EOLType): add eol enum back and reorganize methods --- commitizen/git.py | 48 ++++++++++++++++++++++++++++++++--------------- tests/test_git.py | 8 ++++---- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/commitizen/git.py b/commitizen/git.py index d80545bc44..ef4e0452e3 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -1,14 +1,44 @@ from __future__ import annotations import os +from enum import Enum +from functools import lru_cache from pathlib import Path from tempfile import NamedTemporaryFile from commitizen import cmd, out from commitizen.exceptions import GitCommandError -_UNIX_EOL = "\n" -_WINDOWS_EOL = "\r\n" + +class EOLType(Enum): + """The EOL type from `git config core.eol`.""" + + LF = "lf" + CRLF = "crlf" + NATIVE = "native" + + @classmethod + def for_open(cls) -> str: + c = cmd.run("git config core.eol") + eol = c.out.strip().upper() + return cls._char_for_open()[cls._safe_cast(eol)] + + @classmethod + def _safe_cast(cls, eol: str) -> EOLType: + try: + return cls[eol] + except KeyError: + return cls.NATIVE + + @classmethod + @lru_cache + def _char_for_open(cls) -> dict[EOLType, str]: + """Get the EOL character for `open()`.""" + return { + cls.LF: "\n", + cls.CRLF: "\r\n", + cls.NATIVE: os.linesep, + } class GitObject: @@ -268,18 +298,6 @@ def is_git_project() -> bool: return c.out.strip() == "true" -def get_eol_for_open() -> str: - # See: https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreeol - c = cmd.run("git config core.eol") - eol = c.out.strip().lower() - - if eol == "lf": - return _UNIX_EOL - if eol == "crlf": - return _WINDOWS_EOL - return os.linesep - - def get_core_editor() -> str | None: c = cmd.run("git var GIT_EDITOR") if c.out: @@ -289,7 +307,7 @@ def get_core_editor() -> str | None: def smart_open(*args, **kwargs): """Open a file with the EOL style determined from Git.""" - return open(*args, newline=get_eol_for_open(), **kwargs) + return open(*args, newline=EOLType.for_open(), **kwargs) def _get_log_as_str_list(start: str | None, end: str, args: str) -> list[str]: diff --git a/tests/test_git.py b/tests/test_git.py index cb4ea93375..de3130412b 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -318,16 +318,16 @@ def test_is_staging_clean_when_updating_file(tmp_commitizen_project): def test_get_eol_for_open(tmp_commitizen_project): with tmp_commitizen_project.as_cwd(): - assert git.get_eol_for_open() == os.linesep + assert git.EOLType.for_open() == os.linesep cmd.run("git config core.eol lf") - assert git.get_eol_for_open() == "\n" + assert git.EOLType.for_open() == "\n" cmd.run("git config core.eol crlf") - assert git.get_eol_for_open() == "\r\n" + assert git.EOLType.for_open() == "\r\n" cmd.run("git config core.eol native") - assert git.get_eol_for_open() == os.linesep + assert git.EOLType.for_open() == os.linesep def test_get_core_editor(mocker): From f67b29b0970bc72d36e27c6d9a50dc68d21759fd Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 18 May 2025 19:26:22 +0800 Subject: [PATCH 605/685] refactor(git): refactor get_tag_names --- commitizen/git.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/git.py b/commitizen/git.py index ef4e0452e3..fa59e34d48 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -277,7 +277,7 @@ def get_tag_names() -> list[str]: c = cmd.run("git tag --list") if c.err: return [] - return list(filter(None, (tag.strip() for tag in c.out.split("\n")))) + return [tag for raw in c.out.split("\n") if (tag := raw.strip())] def find_git_project_root() -> Path | None: From febd0d6296430e7c49f13e4522092741a102cbed Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Tue, 20 May 2025 00:46:16 +0800 Subject: [PATCH 606/685] refactor(changelog): minor cleanup --- commitizen/commands/changelog.py | 45 ++++++++++++++++---------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 0e4efabfa1..9ab8fdc37c 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -2,10 +2,10 @@ import os import os.path +from collections.abc import Generator from difflib import SequenceMatcher from operator import itemgetter from pathlib import Path -from typing import Callable, cast from commitizen import changelog, defaults, factory, git, out from commitizen.changelog_formats import get_changelog_format @@ -32,9 +32,10 @@ def __init__(self, config: BaseConfig, args): if not git.is_git_project(): raise NotAGitProjectError() - self.config: BaseConfig = config - changelog_file_name = args.get("file_name") or cast( - str, self.config.settings.get("changelog_file") + self.config = config + + changelog_file_name = args.get("file_name") or self.config.settings.get( + "changelog_file" ) if not isinstance(changelog_file_name, str): raise NotAllowed( @@ -114,28 +115,28 @@ def _find_incremental_rev(self, latest_version: str, tags: list[GitTag]) -> str: on our experience. """ SIMILARITY_THRESHOLD = 0.89 - tag_ratio = map( - lambda tag: ( - SequenceMatcher( + scores_and_tag_names: Generator[tuple[float, str]] = ( + ( + score, + tag.name, + ) + for tag in tags + if ( + score := SequenceMatcher( None, latest_version, strip_local_version(tag.name) - ).ratio(), - tag, - ), - tags, + ).ratio() + ) + >= SIMILARITY_THRESHOLD ) try: - score, tag = max(tag_ratio, key=itemgetter(0)) + _, start_rev = max(scores_and_tag_names, key=itemgetter(0)) except ValueError: raise NoRevisionError() - if score < SIMILARITY_THRESHOLD: - raise NoRevisionError() - start_rev = tag.name return start_rev def write_changelog( self, changelog_out: str, lines: list[str], changelog_meta: changelog.Metadata ): - changelog_hook: Callable | None = self.cz.changelog_hook with smart_open(self.file_name, "w", encoding=self.encoding) as changelog_file: partial_changelog: str | None = None if self.incremental: @@ -145,8 +146,8 @@ def write_changelog( changelog_out = "".join(new_lines) partial_changelog = changelog_out - if changelog_hook: - changelog_out = changelog_hook(changelog_out, partial_changelog) + if self.cz.changelog_hook: + changelog_out = self.cz.changelog_hook(changelog_out, partial_changelog) changelog_file.write(changelog_out) @@ -221,14 +222,12 @@ def __call__(self): extras.update(self.extras) changelog_out = changelog.render_changelog( tree, loader=self.cz.template_loader, template=self.template, **extras - ) - changelog_out = changelog_out.lstrip("\n") + ).lstrip("\n") # Dry_run is executed here to avoid checking and reading the files if self.dry_run: - changelog_hook: Callable | None = self.cz.changelog_hook - if changelog_hook: - changelog_out = changelog_hook(changelog_out, "") + if self.cz.changelog_hook: + changelog_out = self.cz.changelog_hook(changelog_out, "") out.write(changelog_out) raise DryRunExit() From f3fa22cefe0ac681e2c6e1f80ad119d1df135903 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Tue, 20 May 2025 21:23:30 +0800 Subject: [PATCH 607/685] refactor(BaseConfig): use setter --- commitizen/config/base_config.py | 12 +++++++++--- commitizen/config/json_config.py | 2 +- commitizen/config/toml_config.py | 2 +- commitizen/config/yaml_config.py | 2 +- tests/commands/test_init_command.py | 2 +- tests/test_changelog.py | 4 +++- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/commitizen/config/base_config.py b/commitizen/config/base_config.py index 478691aa14..fd034412fe 100644 --- a/commitizen/config/base_config.py +++ b/commitizen/config/base_config.py @@ -19,6 +19,15 @@ def settings(self) -> Settings: def path(self) -> Path | None: return self._path + @path.setter + def path(self, path: str | Path) -> None: + """ + mypy does not like this until 1.16 + See https://github.com/python/mypy/pull/18510 + TODO: remove "type: ignore" from the call sites when 1.16 is available + """ + self._path = Path(path) + def set_key(self, key, value): """Set or update a key in the conf. @@ -30,8 +39,5 @@ def set_key(self, key, value): def update(self, data: Settings) -> None: self._settings.update(data) - def add_path(self, path: str | Path) -> None: - self._path = Path(path) - def _parse_setting(self, data: bytes | str) -> None: raise NotImplementedError() diff --git a/commitizen/config/json_config.py b/commitizen/config/json_config.py index b6a07f4ced..d413d73383 100644 --- a/commitizen/config/json_config.py +++ b/commitizen/config/json_config.py @@ -13,7 +13,7 @@ class JsonConfig(BaseConfig): def __init__(self, *, data: bytes | str, path: Path | str): super().__init__() self.is_empty_config = False - self.add_path(path) + self.path = path # type: ignore self._parse_setting(data) def init_empty_config_content(self): diff --git a/commitizen/config/toml_config.py b/commitizen/config/toml_config.py index 813389cbcf..e2cfcc9340 100644 --- a/commitizen/config/toml_config.py +++ b/commitizen/config/toml_config.py @@ -14,7 +14,7 @@ class TomlConfig(BaseConfig): def __init__(self, *, data: bytes | str, path: Path | str): super().__init__() self.is_empty_config = False - self.add_path(path) + self.path = path # type: ignore self._parse_setting(data) def init_empty_config_content(self): diff --git a/commitizen/config/yaml_config.py b/commitizen/config/yaml_config.py index 2bb6fe3af8..c5721c8d4b 100644 --- a/commitizen/config/yaml_config.py +++ b/commitizen/config/yaml_config.py @@ -14,7 +14,7 @@ class YAMLConfig(BaseConfig): def __init__(self, *, data: bytes | str, path: Path | str): super().__init__() self.is_empty_config = False - self.add_path(path) + self.path = path # type: ignore self._parse_setting(data) def init_empty_config_content(self): diff --git a/tests/commands/test_init_command.py b/tests/commands/test_init_command.py index f617c51d8f..3f12d0bd7f 100644 --- a/tests/commands/test_init_command.py +++ b/tests/commands/test_init_command.py @@ -86,7 +86,7 @@ def test_init_without_setup_pre_commit_hook(tmpdir, mocker: MockFixture, config) def test_init_when_config_already_exists(config, capsys): # Set config path path = os.sep.join(["tests", "pyproject.toml"]) - config.add_path(path) + config.path = path commands.Init(config)() captured = capsys.readouterr() diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 511cd1a3df..d42176f09a 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1639,7 +1639,9 @@ def test_tags_rules_get_version_tags(capsys: pytest.CaptureFixture): def test_changelog_file_name_from_args_and_config(): mock_config = Mock(spec=BaseConfig) - mock_config.path.parent = "/my/project" + mock_path = Mock(spec=Path) + mock_path.parent = Path("/my/project") + mock_config.path = mock_path mock_config.settings = { "name": "cz_conventional_commits", "changelog_file": "CHANGELOG.md", From c939df1f46e8aa9c28e1ddff60d523ff540cfab5 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Tue, 20 May 2025 23:34:37 +0800 Subject: [PATCH 608/685] build(poetry): upgrade mypy version to ^1.15.0 --- poetry.lock | 1086 +++++++++++++++++++++++------------------------- pyproject.toml | 14 +- 2 files changed, 513 insertions(+), 587 deletions(-) diff --git a/poetry.lock b/poetry.lock index 64ec358bb3..ceccd3da1c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -17,60 +17,76 @@ test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] [[package]] name = "asttokens" -version = "2.4.1" +version = "3.0.0" description = "Annotate AST trees with source code positions" optional = false -python-versions = "*" +python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, - {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, + {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, + {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, ] -[package.dependencies] -six = ">=1.12.0" - [package.extras] -astroid = ["astroid (>=1,<2) ; python_version < \"3\"", "astroid (>=2,<4) ; python_version >= \"3\""] -test = ["astroid (>=1,<2) ; python_version < \"3\"", "astroid (>=2,<4) ; python_version >= \"3\"", "pytest"] +astroid = ["astroid (>=2,<4)"] +test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "babel" -version = "2.16.0" +version = "2.17.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" groups = ["documentation"] files = [ - {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, - {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, + {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, + {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, +] + +[package.extras] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""] + +[[package]] +name = "backrefs" +version = "5.8" +description = "A wrapper around re and regex that adds additional back references." +optional = false +python-versions = ">=3.9" +groups = ["documentation"] +files = [ + {file = "backrefs-5.8-py310-none-any.whl", hash = "sha256:c67f6638a34a5b8730812f5101376f9d41dc38c43f1fdc35cb54700f6ed4465d"}, + {file = "backrefs-5.8-py311-none-any.whl", hash = "sha256:2e1c15e4af0e12e45c8701bd5da0902d326b2e200cafcd25e49d9f06d44bb61b"}, + {file = "backrefs-5.8-py312-none-any.whl", hash = "sha256:bbef7169a33811080d67cdf1538c8289f76f0942ff971222a16034da88a73486"}, + {file = "backrefs-5.8-py313-none-any.whl", hash = "sha256:e3a63b073867dbefd0536425f43db618578528e3896fb77be7141328642a1585"}, + {file = "backrefs-5.8-py39-none-any.whl", hash = "sha256:a66851e4533fb5b371aa0628e1fee1af05135616b86140c9d787a2ffdf4b8fdc"}, + {file = "backrefs-5.8.tar.gz", hash = "sha256:2cab642a205ce966af3dd4b38ee36009b31fa9502a35fd61d59ccc116e40a6bd"}, ] [package.extras] -dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] +extras = ["regex"] [[package]] name = "cachetools" -version = "5.5.1" +version = "6.0.0" description = "Extensible memoizing collections and decorators" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "cachetools-5.5.1-py3-none-any.whl", hash = "sha256:b76651fdc3b24ead3c648bbdeeb940c1b04d365b38b4af66788f9ec4a81d42bb"}, - {file = "cachetools-5.5.1.tar.gz", hash = "sha256:70f238fbba50383ef62e55c6aff6d9673175fe59f7c6782c7a0b9e38f4a9df95"}, + {file = "cachetools-6.0.0-py3-none-any.whl", hash = "sha256:82e73ba88f7b30228b5507dce1a1f878498fc669d972aef2dde4f3a3c24f103e"}, + {file = "cachetools-6.0.0.tar.gz", hash = "sha256:f225782b84438f828328fc2ad74346522f27e5b1440f4e9fd18b20ebfd1aa2cf"}, ] [[package]] name = "certifi" -version = "2024.8.30" +version = "2025.4.26" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" groups = ["documentation"] files = [ - {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, - {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, + {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"}, + {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"}, ] [[package]] @@ -99,116 +115,116 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.4.1" +version = "3.4.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" groups = ["main", "documentation"] files = [ - {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, - {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, - {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-win32.whl", hash = "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-win32.whl", hash = "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-win32.whl", hash = "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e"}, + {file = "charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0"}, + {file = "charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63"}, ] [[package]] name = "click" -version = "8.1.7" +version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" groups = ["documentation"] files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, ] [package.dependencies] @@ -228,74 +244,79 @@ files = [ [[package]] name = "coverage" -version = "7.6.8" +version = "7.8.2" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" groups = ["test"] files = [ - {file = "coverage-7.6.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b39e6011cd06822eb964d038d5dff5da5d98652b81f5ecd439277b32361a3a50"}, - {file = "coverage-7.6.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:63c19702db10ad79151a059d2d6336fe0c470f2e18d0d4d1a57f7f9713875dcf"}, - {file = "coverage-7.6.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3985b9be361d8fb6b2d1adc9924d01dec575a1d7453a14cccd73225cb79243ee"}, - {file = "coverage-7.6.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:644ec81edec0f4ad17d51c838a7d01e42811054543b76d4ba2c5d6af741ce2a6"}, - {file = "coverage-7.6.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f188a2402f8359cf0c4b1fe89eea40dc13b52e7b4fd4812450da9fcd210181d"}, - {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e19122296822deafce89a0c5e8685704c067ae65d45e79718c92df7b3ec3d331"}, - {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13618bed0c38acc418896005732e565b317aa9e98d855a0e9f211a7ffc2d6638"}, - {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:193e3bffca48ad74b8c764fb4492dd875038a2f9925530cb094db92bb5e47bed"}, - {file = "coverage-7.6.8-cp310-cp310-win32.whl", hash = "sha256:3988665ee376abce49613701336544041f2117de7b7fbfe91b93d8ff8b151c8e"}, - {file = "coverage-7.6.8-cp310-cp310-win_amd64.whl", hash = "sha256:f56f49b2553d7dd85fd86e029515a221e5c1f8cb3d9c38b470bc38bde7b8445a"}, - {file = "coverage-7.6.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:86cffe9c6dfcfe22e28027069725c7f57f4b868a3f86e81d1c62462764dc46d4"}, - {file = "coverage-7.6.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d82ab6816c3277dc962cfcdc85b1efa0e5f50fb2c449432deaf2398a2928ab94"}, - {file = "coverage-7.6.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13690e923a3932e4fad4c0ebfb9cb5988e03d9dcb4c5150b5fcbf58fd8bddfc4"}, - {file = "coverage-7.6.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4be32da0c3827ac9132bb488d331cb32e8d9638dd41a0557c5569d57cf22c9c1"}, - {file = "coverage-7.6.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44e6c85bbdc809383b509d732b06419fb4544dca29ebe18480379633623baafb"}, - {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:768939f7c4353c0fac2f7c37897e10b1414b571fd85dd9fc49e6a87e37a2e0d8"}, - {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e44961e36cb13c495806d4cac67640ac2866cb99044e210895b506c26ee63d3a"}, - {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ea8bb1ab9558374c0ab591783808511d135a833c3ca64a18ec927f20c4030f0"}, - {file = "coverage-7.6.8-cp311-cp311-win32.whl", hash = "sha256:629a1ba2115dce8bf75a5cce9f2486ae483cb89c0145795603d6554bdc83e801"}, - {file = "coverage-7.6.8-cp311-cp311-win_amd64.whl", hash = "sha256:fb9fc32399dca861584d96eccd6c980b69bbcd7c228d06fb74fe53e007aa8ef9"}, - {file = "coverage-7.6.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e683e6ecc587643f8cde8f5da6768e9d165cd31edf39ee90ed7034f9ca0eefee"}, - {file = "coverage-7.6.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1defe91d41ce1bd44b40fabf071e6a01a5aa14de4a31b986aa9dfd1b3e3e414a"}, - {file = "coverage-7.6.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7ad66e8e50225ebf4236368cc43c37f59d5e6728f15f6e258c8639fa0dd8e6d"}, - {file = "coverage-7.6.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fe47da3e4fda5f1abb5709c156eca207eacf8007304ce3019eb001e7a7204cb"}, - {file = "coverage-7.6.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:202a2d645c5a46b84992f55b0a3affe4f0ba6b4c611abec32ee88358db4bb649"}, - {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4674f0daa1823c295845b6a740d98a840d7a1c11df00d1fd62614545c1583787"}, - {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:74610105ebd6f33d7c10f8907afed696e79c59e3043c5f20eaa3a46fddf33b4c"}, - {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37cda8712145917105e07aab96388ae76e787270ec04bcb9d5cc786d7cbb8443"}, - {file = "coverage-7.6.8-cp312-cp312-win32.whl", hash = "sha256:9e89d5c8509fbd6c03d0dd1972925b22f50db0792ce06324ba069f10787429ad"}, - {file = "coverage-7.6.8-cp312-cp312-win_amd64.whl", hash = "sha256:379c111d3558272a2cae3d8e57e6b6e6f4fe652905692d54bad5ea0ca37c5ad4"}, - {file = "coverage-7.6.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b0c69f4f724c64dfbfe79f5dfb503b42fe6127b8d479b2677f2b227478db2eb"}, - {file = "coverage-7.6.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c15b32a7aca8038ed7644f854bf17b663bc38e1671b5d6f43f9a2b2bd0c46f63"}, - {file = "coverage-7.6.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63068a11171e4276f6ece913bde059e77c713b48c3a848814a6537f35afb8365"}, - {file = "coverage-7.6.8-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f4548c5ead23ad13fb7a2c8ea541357474ec13c2b736feb02e19a3085fac002"}, - {file = "coverage-7.6.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4b4299dd0d2c67caaaf286d58aef5e75b125b95615dda4542561a5a566a1e3"}, - {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c9ebfb2507751f7196995142f057d1324afdab56db1d9743aab7f50289abd022"}, - {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c1b4474beee02ede1eef86c25ad4600a424fe36cff01a6103cb4533c6bf0169e"}, - {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d9fd2547e6decdbf985d579cf3fc78e4c1d662b9b0ff7cc7862baaab71c9cc5b"}, - {file = "coverage-7.6.8-cp313-cp313-win32.whl", hash = "sha256:8aae5aea53cbfe024919715eca696b1a3201886ce83790537d1c3668459c7146"}, - {file = "coverage-7.6.8-cp313-cp313-win_amd64.whl", hash = "sha256:ae270e79f7e169ccfe23284ff5ea2d52a6f401dc01b337efb54b3783e2ce3f28"}, - {file = "coverage-7.6.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:de38add67a0af869b0d79c525d3e4588ac1ffa92f39116dbe0ed9753f26eba7d"}, - {file = "coverage-7.6.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b07c25d52b1c16ce5de088046cd2432b30f9ad5e224ff17c8f496d9cb7d1d451"}, - {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a66ff235e4c2e37ed3b6104d8b478d767ff73838d1222132a7a026aa548764"}, - {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09b9f848b28081e7b975a3626e9081574a7b9196cde26604540582da60235fdf"}, - {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:093896e530c38c8e9c996901858ac63f3d4171268db2c9c8b373a228f459bbc5"}, - {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9a7b8ac36fd688c8361cbc7bf1cb5866977ece6e0b17c34aa0df58bda4fa18a4"}, - {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:38c51297b35b3ed91670e1e4efb702b790002e3245a28c76e627478aa3c10d83"}, - {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2e4e0f60cb4bd7396108823548e82fdab72d4d8a65e58e2c19bbbc2f1e2bfa4b"}, - {file = "coverage-7.6.8-cp313-cp313t-win32.whl", hash = "sha256:6535d996f6537ecb298b4e287a855f37deaf64ff007162ec0afb9ab8ba3b8b71"}, - {file = "coverage-7.6.8-cp313-cp313t-win_amd64.whl", hash = "sha256:c79c0685f142ca53256722a384540832420dff4ab15fec1863d7e5bc8691bdcc"}, - {file = "coverage-7.6.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ac47fa29d8d41059ea3df65bd3ade92f97ee4910ed638e87075b8e8ce69599e"}, - {file = "coverage-7.6.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:24eda3a24a38157eee639ca9afe45eefa8d2420d49468819ac5f88b10de84f4c"}, - {file = "coverage-7.6.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4c81ed2820b9023a9a90717020315e63b17b18c274a332e3b6437d7ff70abe0"}, - {file = "coverage-7.6.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd55f8fc8fa494958772a2a7302b0354ab16e0b9272b3c3d83cdb5bec5bd1779"}, - {file = "coverage-7.6.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f39e2f3530ed1626c66e7493be7a8423b023ca852aacdc91fb30162c350d2a92"}, - {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:716a78a342679cd1177bc8c2fe957e0ab91405bd43a17094324845200b2fddf4"}, - {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:177f01eeaa3aee4a5ffb0d1439c5952b53d5010f86e9d2667963e632e30082cc"}, - {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:912e95017ff51dc3d7b6e2be158dedc889d9a5cc3382445589ce554f1a34c0ea"}, - {file = "coverage-7.6.8-cp39-cp39-win32.whl", hash = "sha256:4db3ed6a907b555e57cc2e6f14dc3a4c2458cdad8919e40b5357ab9b6db6c43e"}, - {file = "coverage-7.6.8-cp39-cp39-win_amd64.whl", hash = "sha256:428ac484592f780e8cd7b6b14eb568f7c85460c92e2a37cb0c0e5186e1a0d076"}, - {file = "coverage-7.6.8-pp39.pp310-none-any.whl", hash = "sha256:5c52a036535d12590c32c49209e79cabaad9f9ad8aa4cbd875b68c4d67a9cbce"}, - {file = "coverage-7.6.8.tar.gz", hash = "sha256:8b2b8503edb06822c86d82fa64a4a5cb0760bb8f31f26e138ec743f422f37cfc"}, + {file = "coverage-7.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd8ec21e1443fd7a447881332f7ce9d35b8fbd2849e761bb290b584535636b0a"}, + {file = "coverage-7.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4c26c2396674816deaeae7ded0e2b42c26537280f8fe313335858ffff35019be"}, + {file = "coverage-7.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1aec326ed237e5880bfe69ad41616d333712c7937bcefc1343145e972938f9b3"}, + {file = "coverage-7.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e818796f71702d7a13e50c70de2a1924f729228580bcba1607cccf32eea46e6"}, + {file = "coverage-7.8.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:546e537d9e24efc765c9c891328f30f826e3e4808e31f5d0f87c4ba12bbd1622"}, + {file = "coverage-7.8.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab9b09a2349f58e73f8ebc06fac546dd623e23b063e5398343c5270072e3201c"}, + {file = "coverage-7.8.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fd51355ab8a372d89fb0e6a31719e825cf8df8b6724bee942fb5b92c3f016ba3"}, + {file = "coverage-7.8.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0774df1e093acb6c9e4d58bce7f86656aeed6c132a16e2337692c12786b32404"}, + {file = "coverage-7.8.2-cp310-cp310-win32.whl", hash = "sha256:00f2e2f2e37f47e5f54423aeefd6c32a7dbcedc033fcd3928a4f4948e8b96af7"}, + {file = "coverage-7.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:145b07bea229821d51811bf15eeab346c236d523838eda395ea969d120d13347"}, + {file = "coverage-7.8.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b99058eef42e6a8dcd135afb068b3d53aff3921ce699e127602efff9956457a9"}, + {file = "coverage-7.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5feb7f2c3e6ea94d3b877def0270dff0947b8d8c04cfa34a17be0a4dc1836879"}, + {file = "coverage-7.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:670a13249b957bb9050fab12d86acef7bf8f6a879b9d1a883799276e0d4c674a"}, + {file = "coverage-7.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bdc8bf760459a4a4187b452213e04d039990211f98644c7292adf1e471162b5"}, + {file = "coverage-7.8.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07a989c867986c2a75f158f03fdb413128aad29aca9d4dbce5fc755672d96f11"}, + {file = "coverage-7.8.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2db10dedeb619a771ef0e2949ccba7b75e33905de959c2643a4607bef2f3fb3a"}, + {file = "coverage-7.8.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e6ea7dba4e92926b7b5f0990634b78ea02f208d04af520c73a7c876d5a8d36cb"}, + {file = "coverage-7.8.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ef2f22795a7aca99fc3c84393a55a53dd18ab8c93fb431004e4d8f0774150f54"}, + {file = "coverage-7.8.2-cp311-cp311-win32.whl", hash = "sha256:641988828bc18a6368fe72355df5f1703e44411adbe49bba5644b941ce6f2e3a"}, + {file = "coverage-7.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:8ab4a51cb39dc1933ba627e0875046d150e88478dbe22ce145a68393e9652975"}, + {file = "coverage-7.8.2-cp311-cp311-win_arm64.whl", hash = "sha256:8966a821e2083c74d88cca5b7dcccc0a3a888a596a04c0b9668a891de3a0cc53"}, + {file = "coverage-7.8.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e2f6fe3654468d061942591aef56686131335b7a8325684eda85dacdf311356c"}, + {file = "coverage-7.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76090fab50610798cc05241bf83b603477c40ee87acd358b66196ab0ca44ffa1"}, + {file = "coverage-7.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bd0a0a5054be160777a7920b731a0570284db5142abaaf81bcbb282b8d99279"}, + {file = "coverage-7.8.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da23ce9a3d356d0affe9c7036030b5c8f14556bd970c9b224f9c8205505e3b99"}, + {file = "coverage-7.8.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9392773cffeb8d7e042a7b15b82a414011e9d2b5fdbbd3f7e6a6b17d5e21b20"}, + {file = "coverage-7.8.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:876cbfd0b09ce09d81585d266c07a32657beb3eaec896f39484b631555be0fe2"}, + {file = "coverage-7.8.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3da9b771c98977a13fbc3830f6caa85cae6c9c83911d24cb2d218e9394259c57"}, + {file = "coverage-7.8.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a990f6510b3292686713bfef26d0049cd63b9c7bb17e0864f133cbfd2e6167f"}, + {file = "coverage-7.8.2-cp312-cp312-win32.whl", hash = "sha256:bf8111cddd0f2b54d34e96613e7fbdd59a673f0cf5574b61134ae75b6f5a33b8"}, + {file = "coverage-7.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:86a323a275e9e44cdf228af9b71c5030861d4d2610886ab920d9945672a81223"}, + {file = "coverage-7.8.2-cp312-cp312-win_arm64.whl", hash = "sha256:820157de3a589e992689ffcda8639fbabb313b323d26388d02e154164c57b07f"}, + {file = "coverage-7.8.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ea561010914ec1c26ab4188aef8b1567272ef6de096312716f90e5baa79ef8ca"}, + {file = "coverage-7.8.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cb86337a4fcdd0e598ff2caeb513ac604d2f3da6d53df2c8e368e07ee38e277d"}, + {file = "coverage-7.8.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a4636ddb666971345541b59899e969f3b301143dd86b0ddbb570bd591f1e85"}, + {file = "coverage-7.8.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5040536cf9b13fb033f76bcb5e1e5cb3b57c4807fef37db9e0ed129c6a094257"}, + {file = "coverage-7.8.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc67994df9bcd7e0150a47ef41278b9e0a0ea187caba72414b71dc590b99a108"}, + {file = "coverage-7.8.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e6c86888fd076d9e0fe848af0a2142bf606044dc5ceee0aa9eddb56e26895a0"}, + {file = "coverage-7.8.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:684ca9f58119b8e26bef860db33524ae0365601492e86ba0b71d513f525e7050"}, + {file = "coverage-7.8.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8165584ddedb49204c4e18da083913bdf6a982bfb558632a79bdaadcdafd0d48"}, + {file = "coverage-7.8.2-cp313-cp313-win32.whl", hash = "sha256:34759ee2c65362163699cc917bdb2a54114dd06d19bab860725f94ef45a3d9b7"}, + {file = "coverage-7.8.2-cp313-cp313-win_amd64.whl", hash = "sha256:2f9bc608fbafaee40eb60a9a53dbfb90f53cc66d3d32c2849dc27cf5638a21e3"}, + {file = "coverage-7.8.2-cp313-cp313-win_arm64.whl", hash = "sha256:9fe449ee461a3b0c7105690419d0b0aba1232f4ff6d120a9e241e58a556733f7"}, + {file = "coverage-7.8.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8369a7c8ef66bded2b6484053749ff220dbf83cba84f3398c84c51a6f748a008"}, + {file = "coverage-7.8.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:159b81df53a5fcbc7d45dae3adad554fdbde9829a994e15227b3f9d816d00b36"}, + {file = "coverage-7.8.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6fcbbd35a96192d042c691c9e0c49ef54bd7ed865846a3c9d624c30bb67ce46"}, + {file = "coverage-7.8.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05364b9cc82f138cc86128dc4e2e1251c2981a2218bfcd556fe6b0fbaa3501be"}, + {file = "coverage-7.8.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46d532db4e5ff3979ce47d18e2fe8ecad283eeb7367726da0e5ef88e4fe64740"}, + {file = "coverage-7.8.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4000a31c34932e7e4fa0381a3d6deb43dc0c8f458e3e7ea6502e6238e10be625"}, + {file = "coverage-7.8.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:43ff5033d657cd51f83015c3b7a443287250dc14e69910577c3e03bd2e06f27b"}, + {file = "coverage-7.8.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94316e13f0981cbbba132c1f9f365cac1d26716aaac130866ca812006f662199"}, + {file = "coverage-7.8.2-cp313-cp313t-win32.whl", hash = "sha256:3f5673888d3676d0a745c3d0e16da338c5eea300cb1f4ada9c872981265e76d8"}, + {file = "coverage-7.8.2-cp313-cp313t-win_amd64.whl", hash = "sha256:2c08b05ee8d7861e45dc5a2cc4195c8c66dca5ac613144eb6ebeaff2d502e73d"}, + {file = "coverage-7.8.2-cp313-cp313t-win_arm64.whl", hash = "sha256:1e1448bb72b387755e1ff3ef1268a06617afd94188164960dba8d0245a46004b"}, + {file = "coverage-7.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:496948261eaac5ac9cf43f5d0a9f6eb7a6d4cb3bedb2c5d294138142f5c18f2a"}, + {file = "coverage-7.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eacd2de0d30871eff893bab0b67840a96445edcb3c8fd915e6b11ac4b2f3fa6d"}, + {file = "coverage-7.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b039ffddc99ad65d5078ef300e0c7eed08c270dc26570440e3ef18beb816c1ca"}, + {file = "coverage-7.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e49824808d4375ede9dd84e9961a59c47f9113039f1a525e6be170aa4f5c34d"}, + {file = "coverage-7.8.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b069938961dfad881dc2f8d02b47645cd2f455d3809ba92a8a687bf513839787"}, + {file = "coverage-7.8.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:de77c3ba8bb686d1c411e78ee1b97e6e0b963fb98b1637658dd9ad2c875cf9d7"}, + {file = "coverage-7.8.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1676628065a498943bd3f64f099bb573e08cf1bc6088bbe33cf4424e0876f4b3"}, + {file = "coverage-7.8.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8e1a26e7e50076e35f7afafde570ca2b4d7900a491174ca357d29dece5aacee7"}, + {file = "coverage-7.8.2-cp39-cp39-win32.whl", hash = "sha256:6782a12bf76fa61ad9350d5a6ef5f3f020b57f5e6305cbc663803f2ebd0f270a"}, + {file = "coverage-7.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:1efa4166ba75ccefd647f2d78b64f53f14fb82622bc94c5a5cb0a622f50f1c9e"}, + {file = "coverage-7.8.2-pp39.pp310.pp311-none-any.whl", hash = "sha256:ec455eedf3ba0bbdf8f5a570012617eb305c63cb9f03428d39bf544cb2b94837"}, + {file = "coverage-7.8.2-py3-none-any.whl", hash = "sha256:726f32ee3713f7359696331a18daf0c3b3a70bb0ae71141b9d3c52be7c595e32"}, + {file = "coverage-7.8.2.tar.gz", hash = "sha256:a886d531373a1f6ff9fad2a2ba4a045b68467b779ae729ee0b3b10ac20033b27"}, ] [package.dependencies] @@ -306,26 +327,26 @@ toml = ["tomli ; python_full_version <= \"3.11.0a6\""] [[package]] name = "decli" -version = "0.6.2" +version = "0.6.3" description = "Minimal, easy-to-use, declarative cli tool" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "decli-0.6.2-py3-none-any.whl", hash = "sha256:2fc84106ce9a8f523ed501ca543bdb7e416c064917c12a59ebdc7f311a97b7ed"}, - {file = "decli-0.6.2.tar.gz", hash = "sha256:36f71eb55fd0093895efb4f416ec32b7f6e00147dda448e3365cf73ceab42d6f"}, + {file = "decli-0.6.3-py3-none-any.whl", hash = "sha256:5152347c7bb8e3114ad65db719e5709b28d7f7f45bdb709f70167925e55640f3"}, + {file = "decli-0.6.3.tar.gz", hash = "sha256:87f9d39361adf7f16b9ca6e3b614badf7519da13092f2db3c80ca223c53c7656"}, ] [[package]] name = "decorator" -version = "5.1.1" +version = "5.2.1" description = "Decorators for Humans" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, + {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, + {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, ] [[package]] @@ -360,17 +381,20 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.2" +version = "1.3.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["dev", "test"] markers = "python_version < \"3.11\"" files = [ - {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, - {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, + {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, + {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, ] +[package.dependencies] +typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} + [package.extras] test = ["pytest (>=6)"] @@ -391,14 +415,14 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "executing" -version = "2.1.0" +version = "2.2.0" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, - {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, + {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, + {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, ] [package.extras] @@ -406,31 +430,31 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "filelock" -version = "3.16.1" +version = "3.18.0" description = "A platform independent file lock." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev", "linters"] files = [ - {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, - {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, + {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, + {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, ] [package.extras] -docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] [[package]] name = "freezegun" -version = "1.5.1" +version = "1.5.2" description = "Let your Python tests travel through time" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" groups = ["test"] files = [ - {file = "freezegun-1.5.1-py3-none-any.whl", hash = "sha256:bf111d7138a8abe55ab48a71755673dbaa4ab87f4cff5634a4442dfec34c15f1"}, - {file = "freezegun-1.5.1.tar.gz", hash = "sha256:b29dedfcda6d5e8e083ce71b2b542753ad48cfec44037b3fc79702e2980a89e9"}, + {file = "freezegun-1.5.2-py3-none-any.whl", hash = "sha256:5aaf3ba229cda57afab5bd311f0108d86b6fb119ae89d2cd9c43ec8c1733c85b"}, + {file = "freezegun-1.5.2.tar.gz", hash = "sha256:a54ae1d2f9c02dbf42e02c18a3ab95ab4295818b549a34dac55592d72a905181"}, ] [package.dependencies] @@ -456,14 +480,14 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "identify" -version = "2.6.3" +version = "2.6.12" description = "File identification library for Python" optional = false python-versions = ">=3.9" groups = ["linters"] files = [ - {file = "identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"}, - {file = "identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02"}, + {file = "identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2"}, + {file = "identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6"}, ] [package.extras] @@ -486,15 +510,15 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 [[package]] name = "importlib-metadata" -version = "8.6.1" +version = "8.7.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.9" groups = ["main", "documentation"] markers = "python_version == \"3.9\"" files = [ - {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, - {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, + {file = "importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd"}, + {file = "importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000"}, ] [package.dependencies] @@ -511,14 +535,14 @@ type = ["pytest-mypy"] [[package]] name = "iniconfig" -version = "2.0.0" +version = "2.1.0" description = "brain-dead simple config-ini parsing" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" groups = ["test"] files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, + {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, + {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, ] [[package]] @@ -581,14 +605,14 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jinja2" -version = "3.1.5" +version = "3.1.6" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" groups = ["main", "documentation"] files = [ - {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, - {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, ] [package.dependencies] @@ -599,21 +623,21 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "markdown" -version = "3.7" +version = "3.8" description = "Python implementation of John Gruber's Markdown." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["documentation"] files = [ - {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, - {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, + {file = "markdown-3.8-py3-none-any.whl", hash = "sha256:794a929b79c5af141ef5ab0f2f642d0f7b1872981250230e72682346f7cc90dc"}, + {file = "markdown-3.8.tar.gz", hash = "sha256:7df81e63f0df5c4b24b7d156eb81e4690595239b7d70937d0409f1b0de319c6f"}, ] [package.dependencies] importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} [package.extras] -docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +docs = ["mdx_gh_links (>=0.2)", "mkdocs (>=1.6)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] [[package]] @@ -803,27 +827,27 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.50" +version = "9.6.14" description = "Documentation that simply works" optional = false python-versions = ">=3.8" groups = ["documentation"] files = [ - {file = "mkdocs_material-9.5.50-py3-none-any.whl", hash = "sha256:f24100f234741f4d423a9d672a909d859668a4f404796be3cf035f10d6050385"}, - {file = "mkdocs_material-9.5.50.tar.gz", hash = "sha256:ae5fe16f3d7c9ccd05bb6916a7da7420cf99a9ce5e33debd9d40403a090d5825"}, + {file = "mkdocs_material-9.6.14-py3-none-any.whl", hash = "sha256:3b9cee6d3688551bf7a8e8f41afda97a3c39a12f0325436d76c86706114b721b"}, + {file = "mkdocs_material-9.6.14.tar.gz", hash = "sha256:39d795e90dce6b531387c255bd07e866e027828b7346d3eba5ac3de265053754"}, ] [package.dependencies] babel = ">=2.10,<3.0" +backrefs = ">=5.7.post1,<6.0" colorama = ">=0.4,<1.0" -jinja2 = ">=3.0,<4.0" +jinja2 = ">=3.1,<4.0" markdown = ">=3.2,<4.0" mkdocs = ">=1.6,<2.0" mkdocs-material-extensions = ">=1.3,<2.0" paginate = ">=0.5,<1.0" pygments = ">=2.16,<3.0" pymdown-extensions = ">=10.2,<11.0" -regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] @@ -845,54 +869,49 @@ files = [ [[package]] name = "mypy" -version = "1.14.1" +version = "1.16.0" description = "Optional static typing for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["linters"] files = [ - {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, - {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, - {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d"}, - {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b"}, - {file = "mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427"}, - {file = "mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f"}, - {file = "mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c"}, - {file = "mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1"}, - {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8"}, - {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f"}, - {file = "mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1"}, - {file = "mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae"}, - {file = "mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14"}, - {file = "mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9"}, - {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11"}, - {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e"}, - {file = "mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89"}, - {file = "mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b"}, - {file = "mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255"}, - {file = "mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34"}, - {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a"}, - {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9"}, - {file = "mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd"}, - {file = "mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107"}, - {file = "mypy-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31"}, - {file = "mypy-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6"}, - {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319"}, - {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac"}, - {file = "mypy-1.14.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b"}, - {file = "mypy-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837"}, - {file = "mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35"}, - {file = "mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc"}, - {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9"}, - {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb"}, - {file = "mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60"}, - {file = "mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c"}, - {file = "mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1"}, - {file = "mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6"}, + {file = "mypy-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7909541fef256527e5ee9c0a7e2aeed78b6cda72ba44298d1334fe7881b05c5c"}, + {file = "mypy-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e71d6f0090c2256c713ed3d52711d01859c82608b5d68d4fa01a3fe30df95571"}, + {file = "mypy-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:936ccfdd749af4766be824268bfe22d1db9eb2f34a3ea1d00ffbe5b5265f5491"}, + {file = "mypy-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4086883a73166631307fdd330c4a9080ce24913d4f4c5ec596c601b3a4bdd777"}, + {file = "mypy-1.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:feec38097f71797da0231997e0de3a58108c51845399669ebc532c815f93866b"}, + {file = "mypy-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:09a8da6a0ee9a9770b8ff61b39c0bb07971cda90e7297f4213741b48a0cc8d93"}, + {file = "mypy-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9f826aaa7ff8443bac6a494cf743f591488ea940dd360e7dd330e30dd772a5ab"}, + {file = "mypy-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:82d056e6faa508501af333a6af192c700b33e15865bda49611e3d7d8358ebea2"}, + {file = "mypy-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:089bedc02307c2548eb51f426e085546db1fa7dd87fbb7c9fa561575cf6eb1ff"}, + {file = "mypy-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6a2322896003ba66bbd1318c10d3afdfe24e78ef12ea10e2acd985e9d684a666"}, + {file = "mypy-1.16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:021a68568082c5b36e977d54e8f1de978baf401a33884ffcea09bd8e88a98f4c"}, + {file = "mypy-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:54066fed302d83bf5128632d05b4ec68412e1f03ef2c300434057d66866cea4b"}, + {file = "mypy-1.16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c5436d11e89a3ad16ce8afe752f0f373ae9620841c50883dc96f8b8805620b13"}, + {file = "mypy-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f2622af30bf01d8fc36466231bdd203d120d7a599a6d88fb22bdcb9dbff84090"}, + {file = "mypy-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d045d33c284e10a038f5e29faca055b90eee87da3fc63b8889085744ebabb5a1"}, + {file = "mypy-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b4968f14f44c62e2ec4a038c8797a87315be8df7740dc3ee8d3bfe1c6bf5dba8"}, + {file = "mypy-1.16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eb14a4a871bb8efb1e4a50360d4e3c8d6c601e7a31028a2c79f9bb659b63d730"}, + {file = "mypy-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:bd4e1ebe126152a7bbaa4daedd781c90c8f9643c79b9748caa270ad542f12bec"}, + {file = "mypy-1.16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a9e056237c89f1587a3be1a3a70a06a698d25e2479b9a2f57325ddaaffc3567b"}, + {file = "mypy-1.16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0b07e107affb9ee6ce1f342c07f51552d126c32cd62955f59a7db94a51ad12c0"}, + {file = "mypy-1.16.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c6fb60cbd85dc65d4d63d37cb5c86f4e3a301ec605f606ae3a9173e5cf34997b"}, + {file = "mypy-1.16.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7e32297a437cc915599e0578fa6bc68ae6a8dc059c9e009c628e1c47f91495d"}, + {file = "mypy-1.16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:afe420c9380ccec31e744e8baff0d406c846683681025db3531b32db56962d52"}, + {file = "mypy-1.16.0-cp313-cp313-win_amd64.whl", hash = "sha256:55f9076c6ce55dd3f8cd0c6fff26a008ca8e5131b89d5ba6d86bd3f47e736eeb"}, + {file = "mypy-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f56236114c425620875c7cf71700e3d60004858da856c6fc78998ffe767b73d3"}, + {file = "mypy-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:15486beea80be24ff067d7d0ede673b001d0d684d0095803b3e6e17a886a2a92"}, + {file = "mypy-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f2ed0e0847a80655afa2c121835b848ed101cc7b8d8d6ecc5205aedc732b1436"}, + {file = "mypy-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb5fbc8063cb4fde7787e4c0406aa63094a34a2daf4673f359a1fb64050e9cb2"}, + {file = "mypy-1.16.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a5fcfdb7318c6a8dd127b14b1052743b83e97a970f0edb6c913211507a255e20"}, + {file = "mypy-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:2e7e0ad35275e02797323a5aa1be0b14a4d03ffdb2e5f2b0489fa07b89c67b21"}, + {file = "mypy-1.16.0-py3-none-any.whl", hash = "sha256:29e1499864a3888bca5c1542f2d7232c6e586295183320caa95758fc84034031"}, + {file = "mypy-1.16.0.tar.gz", hash = "sha256:84b94283f817e2aa6350a14b4a8fb2a35a53c286f97c9d30f53b63620e7af8ab"}, ] [package.dependencies] mypy_extensions = ">=1.0.0" +pathspec = ">=0.9.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing_extensions = ">=4.6.0" @@ -905,14 +924,14 @@ reports = ["lxml"] [[package]] name = "mypy-extensions" -version = "1.0.0" +version = "1.1.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" groups = ["linters"] files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, + {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, + {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, ] [[package]] @@ -929,14 +948,14 @@ files = [ [[package]] name = "packaging" -version = "24.2" +version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" groups = ["main", "dev", "documentation", "test"] files = [ - {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, - {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, + {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, ] [[package]] @@ -989,7 +1008,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" -groups = ["documentation"] +groups = ["documentation", "linters"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -1013,36 +1032,36 @@ ptyprocess = ">=0.5" [[package]] name = "platformdirs" -version = "4.3.6" +version = "4.3.8" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev", "documentation", "linters"] files = [ - {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, - {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, + {file = "platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4"}, + {file = "platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc"}, ] [package.extras] -docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] -type = ["mypy (>=1.11.2)"] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.14.1)"] [[package]] name = "pluggy" -version = "1.5.0" +version = "1.6.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev", "test"] files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, ] [package.extras] dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] +testing = ["coverage", "pytest", "pytest-benchmark"] [[package]] name = "poethepoet" @@ -1066,14 +1085,14 @@ poetry-plugin = ["poetry (>=1.2.0,<3.0.0) ; python_version < \"4.0\""] [[package]] name = "pre-commit" -version = "4.1.0" +version = "4.2.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" groups = ["linters"] files = [ - {file = "pre_commit-4.1.0-py2.py3-none-any.whl", hash = "sha256:d29e7cb346295bcc1cc75fc3e92e343495e3ea0196c9ec6ba53f49f10ab6ae7b"}, - {file = "pre_commit-4.1.0.tar.gz", hash = "sha256:ae3f018575a588e30dfddfab9a05448bfbd6b73d78709617b5a2b853549716d4"}, + {file = "pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd"}, + {file = "pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146"}, ] [package.dependencies] @@ -1085,14 +1104,14 @@ virtualenv = ">=20.10.0" [[package]] name = "prompt-toolkit" -version = "3.0.48" +version = "3.0.51" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8" groups = ["main", "dev"] files = [ - {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, - {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, + {file = "prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07"}, + {file = "prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed"}, ] [package.dependencies] @@ -1128,14 +1147,14 @@ tests = ["pytest"] [[package]] name = "pygments" -version = "2.18.0" +version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" -groups = ["dev", "documentation", "script"] +groups = ["dev", "documentation", "script", "test"] files = [ - {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, - {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, + {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, + {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, ] [package.extras] @@ -1143,14 +1162,14 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.12" +version = "10.15" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" groups = ["documentation"] files = [ - {file = "pymdown_extensions-10.12-py3-none-any.whl", hash = "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77"}, - {file = "pymdown_extensions-10.12.tar.gz", hash = "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7"}, + {file = "pymdown_extensions-10.15-py3-none-any.whl", hash = "sha256:46e99bb272612b0de3b7e7caf6da8dd5f4ca5212c0b273feb9304e236c484e5f"}, + {file = "pymdown_extensions-10.15.tar.gz", hash = "sha256:0e5994e32155f4b03504f939e501b981d306daf7ec2aa1cd2eb6bd300784f8f7"}, ] [package.dependencies] @@ -1158,61 +1177,62 @@ markdown = ">=3.6" pyyaml = "*" [package.extras] -extra = ["pygments (>=2.12)"] +extra = ["pygments (>=2.19.1)"] [[package]] name = "pyproject-api" -version = "1.9.0" +version = "1.9.1" description = "API to interact with the python pyproject.toml based projects" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "pyproject_api-1.9.0-py3-none-any.whl", hash = "sha256:326df9d68dea22d9d98b5243c46e3ca3161b07a1b9b18e213d1e24fd0e605766"}, - {file = "pyproject_api-1.9.0.tar.gz", hash = "sha256:7e8a9854b2dfb49454fae421cb86af43efbb2b2454e5646ffb7623540321ae6e"}, + {file = "pyproject_api-1.9.1-py3-none-any.whl", hash = "sha256:7d6238d92f8962773dd75b5f0c4a6a27cce092a14b623b811dba656f3b628948"}, + {file = "pyproject_api-1.9.1.tar.gz", hash = "sha256:43c9918f49daab37e302038fc1aed54a8c7a91a9fa935d00b9a485f37e0f5335"}, ] [package.dependencies] -packaging = ">=24.2" +packaging = ">=25" tomli = {version = ">=2.2.1", markers = "python_version < \"3.11\""} [package.extras] -docs = ["furo (>=2024.8.6)", "sphinx-autodoc-typehints (>=3)"] -testing = ["covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "setuptools (>=75.8)"] +docs = ["furo (>=2024.8.6)", "sphinx-autodoc-typehints (>=3.2)"] +testing = ["covdefaults (>=2.3)", "pytest (>=8.3.5)", "pytest-cov (>=6.1.1)", "pytest-mock (>=3.14)", "setuptools (>=80.3.1)"] [[package]] name = "pytest" -version = "8.3.4" +version = "8.4.0" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["test"] files = [ - {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, - {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, + {file = "pytest-8.4.0-py3-none-any.whl", hash = "sha256:f40f825768ad76c0977cbacdf1fd37c6f7a468e460ea6a0636078f8972d4517e"}, + {file = "pytest-8.4.0.tar.gz", hash = "sha256:14d920b48472ea0dbf68e45b96cd1ffda4705f33307dcc86c676c1b5104838a6"}, ] [package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" +colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""} +iniconfig = ">=1" +packaging = ">=20" pluggy = ">=1.5,<2" +pygments = ">=2.7.2" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" -version = "6.0.0" +version = "6.1.1" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.9" groups = ["test"] files = [ - {file = "pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0"}, - {file = "pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35"}, + {file = "pytest_cov-6.1.1-py3-none-any.whl", hash = "sha256:bddf29ed2d0ab6f4df17b4c55b0a657287db8684af9c42ea546b21b1041b3dde"}, + {file = "pytest_cov-6.1.1.tar.gz", hash = "sha256:46935f7aaefba760e716c2ebfbe1c216240b9592966e7da99ea8292d4d3e2a0a"}, ] [package.dependencies] @@ -1224,18 +1244,22 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] [[package]] name = "pytest-datadir" -version = "1.5.0" +version = "1.7.2" description = "pytest plugin for test data directories and files" optional = false python-versions = ">=3.8" groups = ["test"] files = [ - {file = "pytest-datadir-1.5.0.tar.gz", hash = "sha256:1617ed92f9afda0c877e4eac91904b5f779d24ba8f5e438752e3ae39d8d2ee3f"}, - {file = "pytest_datadir-1.5.0-py3-none-any.whl", hash = "sha256:34adf361bcc7b37961bbc1dfa8d25a4829e778bab461703c38a5c50ca9c36dc8"}, + {file = "pytest_datadir-1.7.2-py3-none-any.whl", hash = "sha256:8392ba0e9eaf37030e663dcd91cc5123dec99c44300f0c5eac44f35f13f0e086"}, + {file = "pytest_datadir-1.7.2.tar.gz", hash = "sha256:15f5228a35d0a3205e4968e75d3b9cca91762424e1eafc21eb637d380a48443e"}, ] [package.dependencies] -pytest = ">=5.0" +pytest = ">=7.0" + +[package.extras] +dev = ["pre-commit", "pytest-datadir[testing]"] +testing = ["pytest", "tox"] [[package]] name = "pytest-freezer" @@ -1255,14 +1279,14 @@ pytest = ">=3.6" [[package]] name = "pytest-mock" -version = "3.14.0" +version = "3.14.1" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" groups = ["test"] files = [ - {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, - {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, + {file = "pytest_mock-3.14.1-py3-none-any.whl", hash = "sha256:178aefcd11307d874b4cd3100344e7e2d888d9791a6a1d9bfe90fbc1b74fd1d0"}, + {file = "pytest_mock-3.14.1.tar.gz", hash = "sha256:159e9edac4c451ce77a5cdb9fc5d1100708d2dd4ba3c3df572f14097351af80e"}, ] [package.dependencies] @@ -1273,19 +1297,19 @@ dev = ["pre-commit", "pytest-asyncio", "tox"] [[package]] name = "pytest-regressions" -version = "2.7.0" +version = "2.8.0" description = "Easy to use fixtures to write regression tests." optional = false python-versions = ">=3.9" groups = ["test"] files = [ - {file = "pytest_regressions-2.7.0-py3-none-any.whl", hash = "sha256:69f5e3f03493cf0ef84d96d23e50a546617c198b1d7746f2e2b9e441cbab4847"}, - {file = "pytest_regressions-2.7.0.tar.gz", hash = "sha256:4c30064e0923929012c94f5d6f35205be06fd8709c7f0dba0228e05c460af05e"}, + {file = "pytest_regressions-2.8.0-py3-none-any.whl", hash = "sha256:2926f37efa5fd6793806b10352e274c5284a5469a845aeab6243e86f9214766f"}, + {file = "pytest_regressions-2.8.0.tar.gz", hash = "sha256:775044e17117f5427df2caad3ab1c66889abe770a0ce2bc3f24fdeac99af76fe"}, ] [package.dependencies] pytest = ">=6.2.0" -pytest-datadir = ">=1.2.0" +pytest-datadir = ">=1.7.0" pyyaml = "*" [package.extras] @@ -1296,14 +1320,14 @@ num = ["numpy", "pandas"] [[package]] name = "pytest-xdist" -version = "3.6.1" +version = "3.7.0" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["test"] files = [ - {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, - {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, + {file = "pytest_xdist-3.7.0-py3-none-any.whl", hash = "sha256:7d3fbd255998265052435eb9daa4e99b62e6fb9cfb6efd1f858d4d8c0c7f0ca0"}, + {file = "pytest_xdist-3.7.0.tar.gz", hash = "sha256:f9248c99a7c15b7d2f90715df93610353a485827bc06eefb6566d23f6400f126"}, ] [package.dependencies] @@ -1395,14 +1419,14 @@ files = [ [[package]] name = "pyyaml-env-tag" -version = "0.1" -description = "A custom YAML tag for referencing environment variables in YAML files. " +version = "1.1" +description = "A custom YAML tag for referencing environment variables in YAML files." optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" groups = ["documentation"] files = [ - {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, - {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, + {file = "pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04"}, + {file = "pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff"}, ] [package.dependencies] @@ -1423,110 +1447,6 @@ files = [ [package.dependencies] prompt_toolkit = ">=2.0,<4.0" -[[package]] -name = "regex" -version = "2024.11.6" -description = "Alternative regular expression module, to replace re." -optional = false -python-versions = ">=3.8" -groups = ["documentation"] -files = [ - {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, - {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, - {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, - {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, - {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, - {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, - {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, - {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, - {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, - {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, - {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, - {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, - {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, - {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, - {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, - {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, -] - [[package]] name = "requests" version = "2.32.3" @@ -1571,42 +1491,42 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.9.4" +version = "0.9.10" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" groups = ["linters"] files = [ - {file = "ruff-0.9.4-py3-none-linux_armv6l.whl", hash = "sha256:64e73d25b954f71ff100bb70f39f1ee09e880728efb4250c632ceed4e4cdf706"}, - {file = "ruff-0.9.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6ce6743ed64d9afab4fafeaea70d3631b4d4b28b592db21a5c2d1f0ef52934bf"}, - {file = "ruff-0.9.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:54499fb08408e32b57360f6f9de7157a5fec24ad79cb3f42ef2c3f3f728dfe2b"}, - {file = "ruff-0.9.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37c892540108314a6f01f105040b5106aeb829fa5fb0561d2dcaf71485021137"}, - {file = "ruff-0.9.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:de9edf2ce4b9ddf43fd93e20ef635a900e25f622f87ed6e3047a664d0e8f810e"}, - {file = "ruff-0.9.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87c90c32357c74f11deb7fbb065126d91771b207bf9bfaaee01277ca59b574ec"}, - {file = "ruff-0.9.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:56acd6c694da3695a7461cc55775f3a409c3815ac467279dfa126061d84b314b"}, - {file = "ruff-0.9.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0c93e7d47ed951b9394cf352d6695b31498e68fd5782d6cbc282425655f687a"}, - {file = "ruff-0.9.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d4c8772670aecf037d1bf7a07c39106574d143b26cfe5ed1787d2f31e800214"}, - {file = "ruff-0.9.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfc5f1d7afeda8d5d37660eeca6d389b142d7f2b5a1ab659d9214ebd0e025231"}, - {file = "ruff-0.9.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:faa935fc00ae854d8b638c16a5f1ce881bc3f67446957dd6f2af440a5fc8526b"}, - {file = "ruff-0.9.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a6c634fc6f5a0ceae1ab3e13c58183978185d131a29c425e4eaa9f40afe1e6d6"}, - {file = "ruff-0.9.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:433dedf6ddfdec7f1ac7575ec1eb9844fa60c4c8c2f8887a070672b8d353d34c"}, - {file = "ruff-0.9.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d612dbd0f3a919a8cc1d12037168bfa536862066808960e0cc901404b77968f0"}, - {file = "ruff-0.9.4-py3-none-win32.whl", hash = "sha256:db1192ddda2200671f9ef61d9597fcef89d934f5d1705e571a93a67fb13a4402"}, - {file = "ruff-0.9.4-py3-none-win_amd64.whl", hash = "sha256:05bebf4cdbe3ef75430d26c375773978950bbf4ee3c95ccb5448940dc092408e"}, - {file = "ruff-0.9.4-py3-none-win_arm64.whl", hash = "sha256:585792f1e81509e38ac5123492f8875fbc36f3ede8185af0a26df348e5154f41"}, - {file = "ruff-0.9.4.tar.gz", hash = "sha256:6907ee3529244bb0ed066683e075f09285b38dd5b4039370df6ff06041ca19e7"}, + {file = "ruff-0.9.10-py3-none-linux_armv6l.whl", hash = "sha256:eb4d25532cfd9fe461acc83498361ec2e2252795b4f40b17e80692814329e42d"}, + {file = "ruff-0.9.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:188a6638dab1aa9bb6228a7302387b2c9954e455fb25d6b4470cb0641d16759d"}, + {file = "ruff-0.9.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5284dcac6b9dbc2fcb71fdfc26a217b2ca4ede6ccd57476f52a587451ebe450d"}, + {file = "ruff-0.9.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47678f39fa2a3da62724851107f438c8229a3470f533894b5568a39b40029c0c"}, + {file = "ruff-0.9.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99713a6e2766b7a17147b309e8c915b32b07a25c9efd12ada79f217c9c778b3e"}, + {file = "ruff-0.9.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524ee184d92f7c7304aa568e2db20f50c32d1d0caa235d8ddf10497566ea1a12"}, + {file = "ruff-0.9.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:df92aeac30af821f9acf819fc01b4afc3dfb829d2782884f8739fb52a8119a16"}, + {file = "ruff-0.9.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de42e4edc296f520bb84954eb992a07a0ec5a02fecb834498415908469854a52"}, + {file = "ruff-0.9.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d257f95b65806104b6b1ffca0ea53f4ef98454036df65b1eda3693534813ecd1"}, + {file = "ruff-0.9.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60dec7201c0b10d6d11be00e8f2dbb6f40ef1828ee75ed739923799513db24c"}, + {file = "ruff-0.9.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d838b60007da7a39c046fcdd317293d10b845001f38bcb55ba766c3875b01e43"}, + {file = "ruff-0.9.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ccaf903108b899beb8e09a63ffae5869057ab649c1e9231c05ae354ebc62066c"}, + {file = "ruff-0.9.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f9567d135265d46e59d62dc60c0bfad10e9a6822e231f5b24032dba5a55be6b5"}, + {file = "ruff-0.9.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5f202f0d93738c28a89f8ed9eaba01b7be339e5d8d642c994347eaa81c6d75b8"}, + {file = "ruff-0.9.10-py3-none-win32.whl", hash = "sha256:bfb834e87c916521ce46b1788fbb8484966e5113c02df216680102e9eb960029"}, + {file = "ruff-0.9.10-py3-none-win_amd64.whl", hash = "sha256:f2160eeef3031bf4b17df74e307d4c5fb689a6f3a26a2de3f7ef4044e3c484f1"}, + {file = "ruff-0.9.10-py3-none-win_arm64.whl", hash = "sha256:5fd804c0327a5e5ea26615550e706942f348b197d5475ff34c19733aee4b2e69"}, + {file = "ruff-0.9.10.tar.gz", hash = "sha256:9bacb735d7bada9cfb0f2c227d3658fc443d90a727b47f206fb33f52f3c0eac7"}, ] [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -groups = ["dev", "documentation", "test"] +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["documentation", "test"] files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] [[package]] @@ -1689,30 +1609,30 @@ markers = {dev = "python_version < \"3.11\"", linters = "python_version < \"3.11 [[package]] name = "tomlkit" -version = "0.13.2" +version = "0.13.3" description = "Style preserving TOML library" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, - {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, + {file = "tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0"}, + {file = "tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1"}, ] [[package]] name = "tox" -version = "4.24.1" +version = "4.26.0" description = "tox is a generic virtualenv management and test command line tool" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "tox-4.24.1-py3-none-any.whl", hash = "sha256:57ba7df7d199002c6df8c2db9e6484f3de6ca8f42013c083ea2d4d1e5c6bdc75"}, - {file = "tox-4.24.1.tar.gz", hash = "sha256:083a720adbc6166fff0b7d1df9d154f9d00bfccb9403b8abf6bc0ee435d6a62e"}, + {file = "tox-4.26.0-py3-none-any.whl", hash = "sha256:75f17aaf09face9b97bd41645028d9f722301e912be8b4c65a3f938024560224"}, + {file = "tox-4.26.0.tar.gz", hash = "sha256:a83b3b67b0159fa58e44e646505079e35a43317a62d2ae94725e0586266faeca"}, ] [package.dependencies] -cachetools = ">=5.5" +cachetools = ">=5.5.1" chardet = ">=5.2" colorama = ">=0.4.6" filelock = ">=3.16.1" @@ -1720,12 +1640,12 @@ packaging = ">=24.2" platformdirs = ">=4.3.6" pluggy = ">=1.5" pyproject-api = ">=1.8" -tomli = {version = ">=2.1", markers = "python_version < \"3.11\""} +tomli = {version = ">=2.2.1", markers = "python_version < \"3.11\""} typing-extensions = {version = ">=4.12.2", markers = "python_version < \"3.11\""} -virtualenv = ">=20.27.1" +virtualenv = ">=20.31" [package.extras] -test = ["devpi-process (>=1.0.2)", "pytest (>=8.3.3)", "pytest-mock (>=3.14)"] +test = ["devpi-process (>=1.0.2)", "pytest (>=8.3.4)", "pytest-mock (>=3.14)"] [[package]] name = "traitlets" @@ -1745,38 +1665,38 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "types-deprecated" -version = "1.2.15.20241117" +version = "1.2.15.20250304" description = "Typing stubs for Deprecated" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["linters"] files = [ - {file = "types-Deprecated-1.2.15.20241117.tar.gz", hash = "sha256:924002c8b7fddec51ba4949788a702411a2e3636cd9b2a33abd8ee119701d77e"}, - {file = "types_Deprecated-1.2.15.20241117-py3-none-any.whl", hash = "sha256:a0cc5e39f769fc54089fd8e005416b55d74aa03f6964d2ed1a0b0b2e28751884"}, + {file = "types_deprecated-1.2.15.20250304-py3-none-any.whl", hash = "sha256:86a65aa550ea8acf49f27e226b8953288cd851de887970fbbdf2239c116c3107"}, + {file = "types_deprecated-1.2.15.20250304.tar.gz", hash = "sha256:c329030553029de5cc6cb30f269c11f4e00e598c4241290179f63cda7d33f719"}, ] [[package]] name = "types-python-dateutil" -version = "2.9.0.20241206" +version = "2.9.0.20250516" description = "Typing stubs for python-dateutil" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["linters"] files = [ - {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, - {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, + {file = "types_python_dateutil-2.9.0.20250516-py3-none-any.whl", hash = "sha256:2b2b3f57f9c6a61fba26a9c0ffb9ea5681c9b83e69cd897c6b5f668d9c0cab93"}, + {file = "types_python_dateutil-2.9.0.20250516.tar.gz", hash = "sha256:13e80d6c9c47df23ad773d54b2826bd52dbbb41be87c3f339381c1700ad21ee5"}, ] [[package]] name = "types-pyyaml" -version = "6.0.12.20241230" +version = "6.0.12.20250516" description = "Typing stubs for PyYAML" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["linters"] files = [ - {file = "types_PyYAML-6.0.12.20241230-py3-none-any.whl", hash = "sha256:fa4d32565219b68e6dee5f67534c722e53c00d1cfc09c435ef04d7353e1e96e6"}, - {file = "types_pyyaml-6.0.12.20241230.tar.gz", hash = "sha256:7f07622dbd34bb9c8b264fe860a17e0efcad00d50b5f27e93984909d9363498c"}, + {file = "types_pyyaml-6.0.12.20250516-py3-none-any.whl", hash = "sha256:8478208feaeb53a34cb5d970c56a7cd76b72659442e733e268a94dc72b2d0530"}, + {file = "types_pyyaml-6.0.12.20250516.tar.gz", hash = "sha256:9f21a70216fc0fa1b216a8176db5f9e0af6eb35d2f2932acb87689d03a5bf6ba"}, ] [[package]] @@ -1793,27 +1713,27 @@ files = [ [[package]] name = "typing-extensions" -version = "4.12.2" -description = "Backported and Experimental Type Hints for Python 3.8+" +version = "4.14.0" +description = "Backported and Experimental Type Hints for Python 3.9+" optional = false -python-versions = ">=3.8" -groups = ["main", "dev", "linters", "script"] +python-versions = ">=3.9" +groups = ["main", "dev", "linters", "script", "test"] files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, + {file = "typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af"}, + {file = "typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4"}, ] -markers = {main = "python_version < \"3.11\"", dev = "python_version < \"3.11\"", script = "python_version < \"3.11\""} +markers = {main = "python_version < \"3.11\"", dev = "python_version < \"3.11\"", script = "python_version < \"3.11\"", test = "python_version < \"3.11\""} [[package]] name = "urllib3" -version = "2.2.3" +version = "2.4.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["documentation"] files = [ - {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, - {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, + {file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"}, + {file = "urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466"}, ] [package.extras] @@ -1824,14 +1744,14 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.27.1" +version = "20.31.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" groups = ["dev", "linters"] files = [ - {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, - {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, + {file = "virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11"}, + {file = "virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af"}, ] [package.dependencies] @@ -1841,7 +1761,7 @@ platformdirs = ">=3.9.1,<5" [package.extras] docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"GraalVM\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] [[package]] name = "watchdog" @@ -1900,90 +1820,104 @@ files = [ [[package]] name = "wrapt" -version = "1.17.0" +version = "1.17.2" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" groups = ["test"] files = [ - {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, - {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, - {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df"}, - {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d"}, - {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea"}, - {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb"}, - {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301"}, - {file = "wrapt-1.17.0-cp310-cp310-win32.whl", hash = "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22"}, - {file = "wrapt-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575"}, - {file = "wrapt-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a"}, - {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed"}, - {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489"}, - {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9"}, - {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339"}, - {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d"}, - {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b"}, - {file = "wrapt-1.17.0-cp311-cp311-win32.whl", hash = "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346"}, - {file = "wrapt-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a"}, - {file = "wrapt-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569"}, - {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504"}, - {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451"}, - {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1"}, - {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106"}, - {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada"}, - {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4"}, - {file = "wrapt-1.17.0-cp312-cp312-win32.whl", hash = "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635"}, - {file = "wrapt-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7"}, - {file = "wrapt-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181"}, - {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393"}, - {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4"}, - {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b"}, - {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721"}, - {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90"}, - {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a"}, - {file = "wrapt-1.17.0-cp313-cp313-win32.whl", hash = "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045"}, - {file = "wrapt-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838"}, - {file = "wrapt-1.17.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b"}, - {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379"}, - {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d"}, - {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f"}, - {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c"}, - {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b"}, - {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab"}, - {file = "wrapt-1.17.0-cp313-cp313t-win32.whl", hash = "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf"}, - {file = "wrapt-1.17.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a"}, - {file = "wrapt-1.17.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13"}, - {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f"}, - {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c"}, - {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d"}, - {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce"}, - {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627"}, - {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f"}, - {file = "wrapt-1.17.0-cp38-cp38-win32.whl", hash = "sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea"}, - {file = "wrapt-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed"}, - {file = "wrapt-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1"}, - {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c"}, - {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578"}, - {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33"}, - {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad"}, - {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9"}, - {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0"}, - {file = "wrapt-1.17.0-cp39-cp39-win32.whl", hash = "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88"}, - {file = "wrapt-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977"}, - {file = "wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371"}, - {file = "wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62"}, + {file = "wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563"}, + {file = "wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72"}, + {file = "wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317"}, + {file = "wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9"}, + {file = "wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9"}, + {file = "wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504"}, + {file = "wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a"}, + {file = "wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f"}, + {file = "wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555"}, + {file = "wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f"}, + {file = "wrapt-1.17.2-cp38-cp38-win32.whl", hash = "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7"}, + {file = "wrapt-1.17.2-cp38-cp38-win_amd64.whl", hash = "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9"}, + {file = "wrapt-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb"}, + {file = "wrapt-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb"}, + {file = "wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8"}, + {file = "wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3"}, ] [[package]] name = "zipp" -version = "3.21.0" +version = "3.22.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" groups = ["main", "documentation"] markers = "python_version == \"3.9\"" files = [ - {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, - {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, + {file = "zipp-3.22.0-py3-none-any.whl", hash = "sha256:fe208f65f2aca48b81f9e6fd8cf7b8b32c26375266b009b413d45306b6148343"}, + {file = "zipp-3.22.0.tar.gz", hash = "sha256:dd2f28c3ce4bc67507bfd3781d21b7bb2be31103b51a4553ad7d90b84e57ace5"}, ] [package.extras] @@ -1991,10 +1925,10 @@ check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \" cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +test = ["big-O", "importlib_resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more_itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "2951e44d1ec238ddef2139c76de3c838976a018b0993f7b84c6fd686e26fc5d0" +content-hash = "7375bf9072066831425c1b72fec016c42791695338c061324fb47420dafd2c8d" diff --git a/pyproject.toml b/pyproject.toml index cff51a2094..8215595737 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -121,7 +121,7 @@ deprecated = "^1.2.13" [tool.poetry.group.linters.dependencies] ruff = ">=0.5.0,<0.10.0" pre-commit = ">=2.18,<5.0" -mypy = "^1.4" +mypy = "^1.15.0" types-deprecated = "^1.2.9.2" types-python-dateutil = "^2.8.19.13" types-PyYAML = ">=5.4.3,<7.0.0" @@ -251,12 +251,7 @@ cover.help = "Run the test suite with coverage" cover.ref = "test --cov-report term-missing --cov-report=xml:coverage.xml --cov=commitizen" all.help = "Run all tasks" -all.sequence = [ - "format", - "lint", - "cover", - "check-commit", -] +all.sequence = ["format", "lint", "cover", "check-commit"] "doc:screenshots".help = "Render documentation screenshots" "doc:screenshots".script = "scripts.gen_cli_help_screenshots:gen_cli_help_screenshots" @@ -268,10 +263,7 @@ doc.help = "Live documentation server" doc.cmd = "mkdocs serve" ci.help = "Run all tasks in CI" -ci.sequence = [ - { cmd = "pre-commit run --all-files" }, - "cover", -] +ci.sequence = [{ cmd = "pre-commit run --all-files" }, "cover"] ci.env = { SKIP = "no-commit-to-branch" } setup-pre-commit.help = "Install pre-commit hooks" From 18705031c303d3264e7402fb71c31170a7db23bb Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 17 May 2025 22:08:12 +0800 Subject: [PATCH 609/685] refactor(bump): add type for out, replace function with re escape --- commitizen/bump.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/commitizen/bump.py b/commitizen/bump.py index b8ae18ba64..2fa814f7c8 100644 --- a/commitizen/bump.py +++ b/commitizen/bump.py @@ -103,13 +103,13 @@ def _files_and_regexes(patterns: list[str], version: str) -> list[tuple[str, str """ Resolve all distinct files with their regexp from a list of glob patterns with optional regexp """ - out = [] + out: list[tuple[str, str]] = [] for pattern in patterns: drive, tail = os.path.splitdrive(pattern) path, _, regex = tail.partition(":") filepath = drive + path if not regex: - regex = _version_to_regex(version) + regex = re.escape(version) for path in iglob(filepath): out.append((path, regex)) @@ -140,10 +140,6 @@ def _bump_with_regex( return current_version_found, "".join(lines) -def _version_to_regex(version: str) -> str: - return version.replace(".", r"\.").replace("+", r"\+") - - def create_commit_message( current_version: Version | str, new_version: Version | str, From 69a220c362c8a0dab364299a053dcb111c57157e Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 17 May 2025 03:09:58 +0800 Subject: [PATCH 610/685] refactor(bump): clean up --- commitizen/commands/bump.py | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 0a2bbe37fc..d022599c76 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -105,19 +105,18 @@ def is_initial_tag( self, current_tag: git.GitTag | None, is_yes: bool = False ) -> bool: """Check if reading the whole git tree up to HEAD is needed.""" - is_initial = False - if not current_tag: - if is_yes: - is_initial = True - else: - out.info("No tag matching configuration could not be found.") - out.info( - "Possible causes:\n" - "- version in configuration is not the current version\n" - "- tag_format or legacy_tag_formats is missing, check them using 'git tag --list'\n" - ) - is_initial = questionary.confirm("Is this the first tag created?").ask() - return is_initial + if current_tag: + return False + if is_yes: + return True + + out.info("No tag matching configuration could not be found.") + out.info( + "Possible causes:\n" + "- version in configuration is not the current version\n" + "- tag_format or legacy_tag_formats is missing, check them using 'git tag --list'\n" + ) + return bool(questionary.confirm("Is this the first tag created?").ask()) def find_increment(self, commits: list[git.GitCommit]) -> Increment | None: # Update the bump map to ensure major version doesn't increment. @@ -134,10 +133,7 @@ def find_increment(self, commits: list[git.GitCommit]) -> Increment | None: raise NoPatternMapError( f"'{self.config.settings['name']}' rule does not support bump" ) - increment = bump.find_increment( - commits, regex=bump_pattern, increments_map=bump_map - ) - return increment + return bump.find_increment(commits, regex=bump_pattern, increments_map=bump_map) def __call__(self) -> None: # noqa: C901 """Steps executed to bump.""" @@ -148,7 +144,7 @@ def __call__(self) -> None: # noqa: C901 except TypeError: raise NoVersionSpecifiedError() - bump_commit_message: str = self.bump_settings["bump_message"] + bump_commit_message: str | None = self.bump_settings["bump_message"] version_files: list[str] = self.bump_settings["version_files"] major_version_zero: bool = self.bump_settings["major_version_zero"] prerelease_offset: int = self.bump_settings["prerelease_offset"] From b0f0d40ece88ca14c05b16d8fe760269096d7ca4 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 17 May 2025 03:14:56 +0800 Subject: [PATCH 611/685] test(bump): improve test coverage --- commitizen/commands/bump.py | 4 +-- tests/commands/test_bump_command.py | 55 +++++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index d022599c76..a2d98c2451 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -65,7 +65,7 @@ def __init__(self, config: BaseConfig, arguments: dict): "template", "file_name", ] - if arguments[key] is not None + if arguments.get(key) is not None }, } self.cz = factory.committer_factory(self.config) @@ -110,7 +110,7 @@ def is_initial_tag( if is_yes: return True - out.info("No tag matching configuration could not be found.") + out.info("No tag matching configuration could be found.") out.info( "Possible causes:\n" "- version in configuration is not the current version\n" diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index e15539d8a7..2af7bec121 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -12,8 +12,9 @@ from pytest_mock import MockFixture import commitizen.commands.bump as bump -from commitizen import cli, cmd, git, hooks +from commitizen import cli, cmd, defaults, git, hooks from commitizen.changelog_formats import ChangelogFormat +from commitizen.config.base_config import BaseConfig from commitizen.cz.base import BaseCommitizen from commitizen.exceptions import ( BumpTagFailedError, @@ -41,8 +42,8 @@ "fix(user): username exception", "refactor: remove ini configuration support", "refactor(config): remove ini configuration support", - "perf: update to use multiproess", - "perf(worker): update to use multiproess", + "perf: update to use multiprocess", + "perf(worker): update to use multiprocess", ), ) @pytest.mark.usefixtures("tmp_commitizen_project") @@ -1688,3 +1689,51 @@ def test_bump_warn_but_dont_fail_on_invalid_tags( assert err.count("Invalid version tag: '0.4.3.deadbeaf'") == 1 assert git.tag_exist("0.4.3") + + +def test_is_initial_tag(mocker: MockFixture, tmp_commitizen_project): + """Test the is_initial_tag method behavior.""" + # Create a commit but no tags + create_file_and_commit("feat: initial commit") + + # Initialize Bump with minimal config + config = BaseConfig() + config.settings.update( + { + "name": defaults.DEFAULT_SETTINGS["name"], + "encoding": "utf-8", + "pre_bump_hooks": [], + "post_bump_hooks": [], + } + ) + + # Initialize with required arguments + arguments = { + "changelog": False, + "changelog_to_stdout": False, + "git_output_to_stderr": False, + "no_verify": False, + "check_consistency": False, + "retry": False, + "version_scheme": None, + "file_name": None, + "template": None, + "extras": None, + } + + bump_cmd = bump.Bump(config, arguments) + + # Test case 1: No current tag, not yes mode + mocker.patch("questionary.confirm", return_value=mocker.Mock(ask=lambda: True)) + assert bump_cmd.is_initial_tag(None, is_yes=False) is True + + # Test case 2: No current tag, yes mode + assert bump_cmd.is_initial_tag(None, is_yes=True) is True + + # Test case 3: Has current tag + mock_tag = mocker.Mock() + assert bump_cmd.is_initial_tag(mock_tag, is_yes=False) is False + + # Test case 4: No current tag, user denies + mocker.patch("questionary.confirm", return_value=mocker.Mock(ask=lambda: False)) + assert bump_cmd.is_initial_tag(None, is_yes=False) is False From 74d3bc53d10cde3de9f56fec429416ff47fbbd18 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Thu, 22 May 2025 22:55:50 +0800 Subject: [PATCH 612/685] fix(defaults): add non-capitalized default constants back and deprecated warning relates #1446 --- commitizen/defaults.py | 29 +++++++++++++++++++++++++++++ tests/test_defaults.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 tests/test_defaults.py diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 1885848618..10d55b8621 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -1,6 +1,7 @@ from __future__ import annotations import pathlib +import warnings from collections import OrderedDict from collections.abc import Iterable, MutableMapping, Sequence from typing import Any, TypedDict @@ -153,3 +154,31 @@ def get_tag_regexes( **{f"${k}": v for k, v in regexes.items()}, **{f"${{{k}}}": v for k, v in regexes.items()}, } + + +def __getattr__(name: str) -> Any: + # PEP-562: deprecate module-level variable + + # {"deprecated key": (value, "new key")} + deprecated_vars = { + "bump_pattern": (BUMP_PATTERN, "BUMP_PATTERN"), + "bump_map": (BUMP_MAP, "BUMP_MAP"), + "bump_map_major_version_zero": ( + BUMP_MAP_MAJOR_VERSION_ZERO, + "BUMP_MAP_MAJOR_VERSION_ZERO", + ), + "bump_message": (BUMP_MESSAGE, "BUMP_MESSAGE"), + "change_type_order": (CHANGE_TYPE_ORDER, "CHANGE_TYPE_ORDER"), + "encoding": (ENCODING, "ENCODING"), + "name": (DEFAULT_SETTINGS["name"], "DEFAULT_SETTINGS['name']"), + } + if name in deprecated_vars: + value, replacement = deprecated_vars[name] + warnings.warn( + f"{name} is deprecated and will be removed in a future version. " + f"Use {replacement} instead.", + DeprecationWarning, + stacklevel=2, + ) + return value + raise AttributeError(f"{name} is not an attribute of {__name__}") diff --git a/tests/test_defaults.py b/tests/test_defaults.py new file mode 100644 index 0000000000..2298068662 --- /dev/null +++ b/tests/test_defaults.py @@ -0,0 +1,31 @@ +import pytest + +from commitizen import defaults + + +def test_getattr_deprecated_vars(): + # Test each deprecated variable + with pytest.warns(DeprecationWarning) as record: + assert defaults.bump_pattern == defaults.BUMP_PATTERN + assert defaults.bump_map == defaults.BUMP_MAP + assert ( + defaults.bump_map_major_version_zero == defaults.BUMP_MAP_MAJOR_VERSION_ZERO + ) + assert defaults.bump_message == defaults.BUMP_MESSAGE + assert defaults.change_type_order == defaults.CHANGE_TYPE_ORDER + assert defaults.encoding == defaults.ENCODING + assert defaults.name == defaults.DEFAULT_SETTINGS["name"] + + # Verify warning messages + assert len(record) == 7 + for warning in record: + assert "is deprecated and will be removed in a future version" in str( + warning.message + ) + + +def test_getattr_non_existent(): + # Test non-existent attribute + with pytest.raises(AttributeError) as exc_info: + _ = defaults.non_existent_attribute + assert "is not an attribute of" in str(exc_info.value) From 815f514b00300e628fad49e0400da760ab517bfb Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 17 May 2025 20:42:34 +0800 Subject: [PATCH 613/685] refactor: misc cleanup --- .../conventional_commits.py | 21 +++++++------------ commitizen/cz/jira/jira.py | 6 ++---- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index af29a209fc..9a2b9016b7 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -41,7 +41,7 @@ class ConventionalCommitsCz(BaseCommitizen): changelog_pattern = defaults.BUMP_PATTERN def questions(self) -> Questions: - questions: Questions = [ + return [ { "type": "list", "name": "prefix", @@ -146,7 +146,6 @@ def questions(self) -> Questions: ), }, ] - return questions def message(self, answers: dict) -> str: prefix = answers["prefix"] @@ -165,9 +164,7 @@ def message(self, answers: dict) -> str: if footer: footer = f"\n\n{footer}" - message = f"{prefix}{scope}: {subject}{body}{footer}" - - return message + return f"{prefix}{scope}: {subject}{body}{footer}" def example(self) -> str: return ( @@ -188,25 +185,21 @@ def schema(self) -> str: ) def schema_pattern(self) -> str: - PATTERN = ( + return ( r"(?s)" # To explicitly make . match new line r"(build|ci|docs|feat|fix|perf|refactor|style|test|chore|revert|bump)" # type r"(\(\S+\))?!?:" # scope r"( [^\n\r]+)" # subject r"((\n\n.*)|(\s*))?$" ) - return PATTERN def info(self) -> str: dir_path = os.path.dirname(os.path.realpath(__file__)) filepath = os.path.join(dir_path, "conventional_commits_info.txt") with open(filepath, encoding=self.config.settings["encoding"]) as f: - content = f.read() - return content + return f.read() def process_commit(self, commit: str) -> str: - pat = re.compile(self.schema_pattern()) - m = re.match(pat, commit) - if m is None: - return "" - return m.group(3).strip() + if m := re.match(self.schema_pattern(), commit): + return m.group(3).strip() + return "" diff --git a/commitizen/cz/jira/jira.py b/commitizen/cz/jira/jira.py index b8fd056a71..f43de2177c 100644 --- a/commitizen/cz/jira/jira.py +++ b/commitizen/cz/jira/jira.py @@ -8,7 +8,7 @@ class JiraSmartCz(BaseCommitizen): def questions(self) -> Questions: - questions = [ + return [ { "type": "input", "name": "message", @@ -42,7 +42,6 @@ def questions(self) -> Questions: "filter": lambda x: "#comment " + x if x else "", }, ] - return questions def message(self, answers: dict) -> str: return " ".join( @@ -77,5 +76,4 @@ def info(self) -> str: dir_path = os.path.dirname(os.path.realpath(__file__)) filepath = os.path.join(dir_path, "jira_info.txt") with open(filepath, encoding=self.config.settings["encoding"]) as f: - content = f.read() - return content + return f.read() From 03eff5cd86399c3d1ca16c0bfdba43cd29b2f996 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Tue, 20 May 2025 00:06:03 +0800 Subject: [PATCH 614/685] refactor(git): extract _create_commit_cmd_string --- commitizen/git.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/commitizen/git.py b/commitizen/git.py index fa59e34d48..ab2866ac48 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -181,19 +181,22 @@ def commit( f.write(message.encode("utf-8")) f.close() - command = f'git commit {args} -F "{f.name}"' - - if committer_date and os.name == "nt": # pragma: no cover - # Using `cmd /v /c "{command}"` sets environment variables only for that command - command = f'cmd /v /c "set GIT_COMMITTER_DATE={committer_date}&& {command}"' - elif committer_date: - command = f"GIT_COMMITTER_DATE={committer_date} {command}" - + command = _create_commit_cmd_string(args, committer_date, f.name) c = cmd.run(command) os.unlink(f.name) return c +def _create_commit_cmd_string(args: str, committer_date: str | None, name: str) -> str: + command = f'git commit {args} -F "{name}"' + if not committer_date: + return command + if os.name != "nt": + return f"GIT_COMMITTER_DATE={committer_date} {command}" + # Using `cmd /v /c "{command}"` sets environment variables only for that command + return f'cmd /v /c "set GIT_COMMITTER_DATE={committer_date}&& {command}"' + + def get_commits( start: str | None = None, end: str = "HEAD", From 3153e0795142f2b6d0f863d372cb547cfcdad57f Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 23 May 2025 16:24:05 +0800 Subject: [PATCH 615/685] test(test_git): mock os --- tests/test_git.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/test_git.py b/tests/test_git.py index de3130412b..3fecaabafd 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -449,3 +449,27 @@ def test_git_commit_from_rev_and_commit(): assert commit.author == "John Doe" assert commit.author_email == "john@example.com" assert commit.parents == [] + + +@pytest.mark.parametrize( + "os_name,committer_date,expected_cmd", + [ + ( + "nt", + "2024-03-20", + 'cmd /v /c "set GIT_COMMITTER_DATE=2024-03-20&& git commit -F "temp.txt""', + ), + ( + "posix", + "2024-03-20", + 'GIT_COMMITTER_DATE=2024-03-20 git commit -F "temp.txt"', + ), + ("nt", None, 'git commit -F "temp.txt"'), + ("posix", None, 'git commit -F "temp.txt"'), + ], +) +def test_create_commit_cmd_string(mocker, os_name, committer_date, expected_cmd): + """Test the OS-specific behavior of _create_commit_cmd_string""" + mocker.patch("os.name", os_name) + result = git._create_commit_cmd_string("", committer_date, "temp.txt") + assert result == expected_cmd From 876de4f8c1b1c4c3d0d4222c9affc1f2ab5f29c4 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 23 May 2025 22:20:58 +0800 Subject: [PATCH 616/685] refactor(cli): early return and improve test coverage --- commitizen/cli.py | 21 ++++++++--------- tests/test_cli.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 10 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index b566fc596d..deb5644d27 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -553,19 +553,20 @@ def commitizen_excepthook( type, value, traceback, debug=False, no_raise: list[int] | None = None ): traceback = traceback if isinstance(traceback, TracebackType) else None + if not isinstance(value, CommitizenException): + original_excepthook(type, value, traceback) + return + if not no_raise: no_raise = [] - if isinstance(value, CommitizenException): - if value.message: - value.output_method(value.message) - if debug: - original_excepthook(type, value, traceback) - exit_code = value.exit_code - if exit_code in no_raise: - exit_code = ExitCode.EXPECTED_EXIT - sys.exit(exit_code) - else: + if value.message: + value.output_method(value.message) + if debug: original_excepthook(type, value, traceback) + exit_code = value.exit_code + if exit_code in no_raise: + exit_code = ExitCode.EXPECTED_EXIT + sys.exit(exit_code) commitizen_debug_excepthook = partial(commitizen_excepthook, debug=True) diff --git a/tests/test_cli.py b/tests/test_cli.py index a91e633128..31371caea4 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1,6 +1,7 @@ import os import subprocess import sys +import types from functools import partial import pytest @@ -182,3 +183,59 @@ def test_unknown_args_before_double_dash_raises(mocker: MockFixture): assert "Invalid commitizen arguments were found before -- separator" in str( excinfo.value ) + + +def test_commitizen_excepthook_non_commitizen_exception(mocker: MockFixture): + """Test that commitizen_excepthook delegates to original_excepthook for non-CommitizenException.""" + # Mock the original excepthook + mock_original_excepthook = mocker.Mock() + mocker.patch("commitizen.cli.original_excepthook", mock_original_excepthook) + + # Create a regular exception + test_exception = ValueError("test error") + + # Call commitizen_excepthook with the regular exception + cli.commitizen_excepthook(ValueError, test_exception, None) + + # Verify original_excepthook was called with correct arguments + mock_original_excepthook.assert_called_once_with(ValueError, test_exception, None) + + +def test_commitizen_excepthook_non_commitizen_exception_with_traceback( + mocker: MockFixture, +): + """Test that commitizen_excepthook handles traceback correctly for non-CommitizenException.""" + # Mock the original excepthook + mock_original_excepthook = mocker.Mock() + mocker.patch("commitizen.cli.original_excepthook", mock_original_excepthook) + + # Create a regular exception with a traceback + test_exception = ValueError("test error") + test_traceback = mocker.Mock(spec=types.TracebackType) + + # Call commitizen_excepthook with the regular exception and traceback + cli.commitizen_excepthook(ValueError, test_exception, test_traceback) + + # Verify original_excepthook was called with correct arguments including traceback + mock_original_excepthook.assert_called_once_with( + ValueError, test_exception, test_traceback + ) + + +def test_commitizen_excepthook_non_commitizen_exception_with_invalid_traceback( + mocker: MockFixture, +): + """Test that commitizen_excepthook handles invalid traceback correctly for non-CommitizenException.""" + # Mock the original excepthook + mock_original_excepthook = mocker.Mock() + mocker.patch("commitizen.cli.original_excepthook", mock_original_excepthook) + + # Create a regular exception with an invalid traceback + test_exception = ValueError("test error") + test_traceback = mocker.Mock() # Not a TracebackType + + # Call commitizen_excepthook with the regular exception and invalid traceback + cli.commitizen_excepthook(ValueError, test_exception, test_traceback) + + # Verify original_excepthook was called with None as traceback + mock_original_excepthook.assert_called_once_with(ValueError, test_exception, None) From 52e44e5b4bcf62286d6545b5e3218bb54bafd6aa Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 24 May 2025 00:25:11 +0800 Subject: [PATCH 617/685] build(termcolor): remove termcolor <3 restriction --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index ceccd3da1c..b5dbcd9898 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1551,14 +1551,14 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "termcolor" -version = "2.5.0" +version = "3.1.0" description = "ANSI color formatting for output in terminal" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "termcolor-2.5.0-py3-none-any.whl", hash = "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8"}, - {file = "termcolor-2.5.0.tar.gz", hash = "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f"}, + {file = "termcolor-3.1.0-py3-none-any.whl", hash = "sha256:591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa"}, + {file = "termcolor-3.1.0.tar.gz", hash = "sha256:6a6dd7fbee581909eeec6a756cff1d7f7c376063b14e4a298dc4980309e55970"}, ] [package.extras] @@ -1931,4 +1931,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "7375bf9072066831425c1b72fec016c42791695338c061324fb47420dafd2c8d" +content-hash = "5e42ee6a3a2b13c6f277b29f063fd8d71bf89841b1564636dffe56f7c65c33b4" diff --git a/pyproject.toml b/pyproject.toml index 8215595737..ac1eab66ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ dependencies = [ "questionary (>=2.0,<3.0)", "decli (>=0.6.0,<1.0)", "colorama (>=0.4.1,<1.0)", - "termcolor (>=1.1,<3)", + "termcolor (>=1.1.0,<4.0.0)", "packaging>=19", "tomlkit (>=0.5.3,<1.0.0)", "jinja2>=2.10.3", From edb21df5703332ae7320f7266021ec26c89891aa Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 25 May 2025 23:58:56 +0800 Subject: [PATCH 618/685] build: specify importlib-metadata version to fix unit tests --- poetry.lock | 95 ++++++++++++++++++++++++++++++++++++++++++++++---- pyproject.toml | 4 +-- 2 files changed, 91 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index b5dbcd9898..6a31d292fe 100644 --- a/poetry.lock +++ b/poetry.lock @@ -222,6 +222,7 @@ description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" groups = ["documentation"] +markers = "python_version == \"3.9\"" files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -230,6 +231,22 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} +[[package]] +name = "click" +version = "8.2.1" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.10" +groups = ["documentation"] +markers = "python_version != \"3.9\"" +files = [ + {file = "click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b"}, + {file = "click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + [[package]] name = "colorama" version = "0.4.6" @@ -510,12 +527,37 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 [[package]] name = "importlib-metadata" -version = "8.7.0" +version = "8.6.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.9" groups = ["main", "documentation"] markers = "python_version == \"3.9\"" +files = [ + {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, + {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, +] + +[package.dependencies] +zipp = ">=3.20" + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +perf = ["ipython"] +test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] + +[[package]] +name = "importlib-metadata" +version = "8.7.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version != \"3.9\"" files = [ {file = "importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd"}, {file = "importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000"}, @@ -552,6 +594,7 @@ description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.9" groups = ["dev"] +markers = "python_version == \"3.9\"" files = [ {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, @@ -583,6 +626,46 @@ qtconsole = ["qtconsole"] test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] +[[package]] +name = "ipython" +version = "8.37.0" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.10" +groups = ["dev"] +markers = "python_version != \"3.9\"" +files = [ + {file = "ipython-8.37.0-py3-none-any.whl", hash = "sha256:ed87326596b878932dbcb171e3e698845434d8c61b8d8cd474bf663041a9dcf2"}, + {file = "ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} +prompt_toolkit = ">=3.0.41,<3.1.0" +pygments = ">=2.4.0" +stack_data = "*" +traitlets = ">=5.13.0" +typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} + +[package.extras] +all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli ; python_version < \"3.11\"", "typing_extensions"] +kernel = ["ipykernel"] +matplotlib = ["matplotlib"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "ipython[test]", "jupyter_ai", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] + [[package]] name = "jedi" version = "0.19.2" @@ -1021,7 +1104,7 @@ description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" groups = ["dev"] -markers = "sys_platform != \"win32\"" +markers = "python_version == \"3.9\" and sys_platform != \"win32\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, @@ -1124,7 +1207,7 @@ description = "Run a subprocess in a pseudo terminal" optional = false python-versions = "*" groups = ["dev"] -markers = "sys_platform != \"win32\"" +markers = "python_version == \"3.9\" and sys_platform != \"win32\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -1722,7 +1805,7 @@ files = [ {file = "typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af"}, {file = "typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4"}, ] -markers = {main = "python_version < \"3.11\"", dev = "python_version < \"3.11\"", script = "python_version < \"3.11\"", test = "python_version < \"3.11\""} +markers = {main = "python_version < \"3.11\"", dev = "python_version < \"3.12\"", script = "python_version < \"3.11\"", test = "python_version < \"3.11\""} [[package]] name = "urllib3" @@ -1914,11 +1997,11 @@ description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" groups = ["main", "documentation"] -markers = "python_version == \"3.9\"" files = [ {file = "zipp-3.22.0-py3-none-any.whl", hash = "sha256:fe208f65f2aca48b81f9e6fd8cf7b8b32c26375266b009b413d45306b6148343"}, {file = "zipp-3.22.0.tar.gz", hash = "sha256:dd2f28c3ce4bc67507bfd3781d21b7bb2be31103b51a4553ad7d90b84e57ace5"}, ] +markers = {documentation = "python_version == \"3.9\""} [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] @@ -1931,4 +2014,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "5e42ee6a3a2b13c6f277b29f063fd8d71bf89841b1564636dffe56f7c65c33b4" +content-hash = "146cae2abe0cdb8a831b9ece0aa1ee98366e3e4e17ef734f0e7001c4eb7508b3" diff --git a/pyproject.toml b/pyproject.toml index ac1eab66ca..144868e197 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,8 +23,8 @@ dependencies = [ "typing-extensions (>=4.0.1,<5.0.0) ; python_version < '3.11'", "charset-normalizer (>=2.1.0,<4)", # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility - "importlib_metadata (>=8.0.0,<9) ; python_version < '3.10'", - + "importlib-metadata >=8.0.0,!=8.7.0,<9.0.0 ; python_version == '3.9'", # importlib-metadata@8.7.0 + python3.9 breaks our unit test + "importlib-metadata >=8.0.0,<9.0.0 ; python_version != '3.9'", ] keywords = ["commitizen", "conventional", "commits", "git"] # See also: https://pypi.org/classifiers/ From 7750f420822ff4be81e103da34051c866c5a944f Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 24 May 2025 15:50:21 +0800 Subject: [PATCH 619/685] refactor(changelog): better typing, yield --- commitizen/changelog.py | 33 +++++++++++++++++--------------- commitizen/commands/changelog.py | 4 +++- tests/test_changelog.py | 16 ++++++++-------- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index d8ab56069b..bac4d824f9 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -29,10 +29,10 @@ import re from collections import OrderedDict, defaultdict -from collections.abc import Iterable +from collections.abc import Generator, Iterable, Mapping from dataclasses import dataclass from datetime import date -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Any from jinja2 import ( BaseLoader, @@ -84,7 +84,7 @@ def generate_tree_from_commits( changelog_message_builder_hook: MessageBuilderHook | None = None, changelog_release_hook: ChangelogReleaseHook | None = None, rules: TagRules | None = None, -) -> Iterable[dict]: +) -> Generator[dict[str, Any], None, None]: pat = re.compile(changelog_pattern) map_pat = re.compile(commit_parser, re.MULTILINE) body_map_pat = re.compile(commit_parser, re.MULTILINE | re.DOTALL) @@ -187,24 +187,27 @@ def process_commit_message( changes[change_type].append(msg) -def order_changelog_tree(tree: Iterable, change_type_order: list[str]) -> Iterable: +def generate_ordered_changelog_tree( + tree: Iterable[Mapping[str, Any]], change_type_order: list[str] +) -> Generator[dict[str, Any], None, None]: if len(set(change_type_order)) != len(change_type_order): raise InvalidConfigurationError( f"Change types contain duplicated types ({change_type_order})" ) - sorted_tree = [] for entry in tree: - ordered_change_types = change_type_order + sorted( - set(entry["changes"].keys()) - set(change_type_order) - ) - changes = [ - (ct, entry["changes"][ct]) - for ct in ordered_change_types - if ct in entry["changes"] - ] - sorted_tree.append({**entry, **{"changes": OrderedDict(changes)}}) - return sorted_tree + yield { + **entry, + "changes": _calculate_sorted_changes(change_type_order, entry["changes"]), + } + + +def _calculate_sorted_changes( + change_type_order: list[str], changes: Mapping[str, Any] +) -> OrderedDict[str, Any]: + remaining_change_types = set(changes.keys()) - set(change_type_order) + sorted_change_types = change_type_order + sorted(remaining_change_types) + return OrderedDict((ct, changes[ct]) for ct in sorted_change_types if ct in changes) def get_changelog_template(loader: BaseLoader, template: str) -> Template: diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 9ab8fdc37c..7bf644a934 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -215,7 +215,9 @@ def __call__(self): rules=self.tag_rules, ) if self.change_type_order: - tree = changelog.order_changelog_tree(tree, self.change_type_order) + tree = changelog.generate_ordered_changelog_tree( + tree, self.change_type_order + ) extras = self.cz.template_extras.copy() extras.update(self.config.settings["extras"]) diff --git a/tests/test_changelog.py b/tests/test_changelog.py index d42176f09a..ed90ed08e4 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1215,26 +1215,26 @@ def test_generate_tree_from_commits_with_no_commits(tags): ), ), ) -def test_order_changelog_tree(change_type_order, expected_reordering): - tree = changelog.order_changelog_tree(COMMITS_TREE, change_type_order) +def test_generate_ordered_changelog_tree(change_type_order, expected_reordering): + tree = changelog.generate_ordered_changelog_tree(COMMITS_TREE, change_type_order) for index, entry in enumerate(tuple(tree)): - version = tree[index]["version"] + version = entry["version"] if version in expected_reordering: # Verify that all keys are present - assert [*tree[index].keys()] == [*COMMITS_TREE[index].keys()] + assert [*entry.keys()] == [*COMMITS_TREE[index].keys()] # Verify that the reorder only impacted the returned dict and not the original expected = expected_reordering[version] - assert [*tree[index]["changes"].keys()] == expected["sorted"] + assert [*entry["changes"].keys()] == expected["sorted"] assert [*COMMITS_TREE[index]["changes"].keys()] == expected["original"] else: - assert [*entry["changes"].keys()] == [*tree[index]["changes"].keys()] + assert [*entry["changes"].keys()] == [*entry["changes"].keys()] -def test_order_changelog_tree_raises(): +def test_generate_ordered_changelog_tree_raises(): change_type_order = ["BREAKING CHANGE", "feat", "refactor", "feat"] with pytest.raises(InvalidConfigurationError) as excinfo: - changelog.order_changelog_tree(COMMITS_TREE, change_type_order) + list(changelog.generate_ordered_changelog_tree(COMMITS_TREE, change_type_order)) assert "Change types contain duplicated types" in str(excinfo) From fcd609e72ba71ec14d83fb7a64e64503f268f314 Mon Sep 17 00:00:00 2001 From: gbaian10 <gbaian10@gmail.com> Date: Sat, 31 May 2025 13:28:42 +0800 Subject: [PATCH 620/685] build(deps-dev): bump mypy to 1.16.0 --- poetry.lock | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6a31d292fe..cbe0fb0e3c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2014,4 +2014,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "146cae2abe0cdb8a831b9ece0aa1ee98366e3e4e17ef734f0e7001c4eb7508b3" +content-hash = "6eea6e061a2ece897c2fb37b0b5116085057e6d97e1f22c0fcd4294fb0ad1dbf" diff --git a/pyproject.toml b/pyproject.toml index 144868e197..1a29ca6bf9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -121,7 +121,7 @@ deprecated = "^1.2.13" [tool.poetry.group.linters.dependencies] ruff = ">=0.5.0,<0.10.0" pre-commit = ">=2.18,<5.0" -mypy = "^1.15.0" +mypy = "^1.16.0" types-deprecated = "^1.2.9.2" types-python-dateutil = "^2.8.19.13" types-PyYAML = ">=5.4.3,<7.0.0" From b4c8aa35e70e1ca6438497f658dedecfcbdc7656 Mon Sep 17 00:00:00 2001 From: gbaian10 <gbaian10@gmail.com> Date: Sat, 31 May 2025 13:28:57 +0800 Subject: [PATCH 621/685] refactor(mypy): remove `unused-ignore` --- commitizen/config/json_config.py | 2 +- commitizen/config/toml_config.py | 2 +- commitizen/config/yaml_config.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/commitizen/config/json_config.py b/commitizen/config/json_config.py index d413d73383..28fac25662 100644 --- a/commitizen/config/json_config.py +++ b/commitizen/config/json_config.py @@ -13,7 +13,7 @@ class JsonConfig(BaseConfig): def __init__(self, *, data: bytes | str, path: Path | str): super().__init__() self.is_empty_config = False - self.path = path # type: ignore + self.path = path self._parse_setting(data) def init_empty_config_content(self): diff --git a/commitizen/config/toml_config.py b/commitizen/config/toml_config.py index e2cfcc9340..a7050214ba 100644 --- a/commitizen/config/toml_config.py +++ b/commitizen/config/toml_config.py @@ -14,7 +14,7 @@ class TomlConfig(BaseConfig): def __init__(self, *, data: bytes | str, path: Path | str): super().__init__() self.is_empty_config = False - self.path = path # type: ignore + self.path = path self._parse_setting(data) def init_empty_config_content(self): diff --git a/commitizen/config/yaml_config.py b/commitizen/config/yaml_config.py index c5721c8d4b..2c384cf17d 100644 --- a/commitizen/config/yaml_config.py +++ b/commitizen/config/yaml_config.py @@ -14,7 +14,7 @@ class YAMLConfig(BaseConfig): def __init__(self, *, data: bytes | str, path: Path | str): super().__init__() self.is_empty_config = False - self.path = path # type: ignore + self.path = path self._parse_setting(data) def init_empty_config_content(self): From 94b9796453e250c76f1bc4455c5542c2339cf7be Mon Sep 17 00:00:00 2001 From: gbaian10 <gbaian10@gmail.com> Date: Sat, 31 May 2025 11:08:12 +0800 Subject: [PATCH 622/685] refactor(cli.py): add type hints --- commitizen/cli.py | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index deb5644d27..04a99e8c37 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -8,7 +8,7 @@ from functools import partial from pathlib import Path from types import TracebackType -from typing import Any +from typing import TYPE_CHECKING, Any, cast import argcomplete from decli import cli @@ -596,8 +596,33 @@ def parse_no_raise(comma_separated_no_raise: str) -> list[int]: return no_raise_codes +if TYPE_CHECKING: + + class Args(argparse.Namespace): + config: str | None = None + debug: bool = False + name: str | None = None + no_raise: str | None = None + report: bool = False + project: bool = False + commitizen: bool = False + verbose: bool = False + func: type[ + commands.Init # init + | commands.Commit # commit (c) + | commands.ListCz # ls + | commands.Example # example + | commands.Info # info + | commands.Schema # schema + | commands.Bump # bump + | commands.Changelog # changelog (ch) + | commands.Check # check + | commands.Version # version + ] + + def main(): - parser = cli(data) + parser: argparse.ArgumentParser = cli(data) argcomplete.autocomplete(parser) # Show help if no arg provided if len(sys.argv) == 1: @@ -611,7 +636,7 @@ def main(): # https://github.com/commitizen-tools/commitizen/issues/429 # argparse raises TypeError when non exist command is provided on Python < 3.9 # but raise SystemExit with exit code == 2 on Python 3.9 - if isinstance(e, TypeError) or (isinstance(e, SystemExit) and e.code == 2): + if isinstance(e, TypeError) or e.code == 2: raise NoCommandFoundError() raise e @@ -638,6 +663,7 @@ def main(): arguments["extra_cli_args"] = extra_args conf = config.read_cfg(args.config) + args = cast("Args", args) if args.name: conf.update({"name": args.name}) elif not conf.path: From a5033ab42c75bc859be94872ff80d474425a109d Mon Sep 17 00:00:00 2001 From: gbaian10 <gbaian10@gmail.com> Date: Sat, 31 May 2025 13:55:34 +0800 Subject: [PATCH 623/685] refactor: add comment clarifying `no_raise` parsing to `list[int]` --- commitizen/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 04a99e8c37..861ba578a9 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -602,7 +602,7 @@ class Args(argparse.Namespace): config: str | None = None debug: bool = False name: str | None = None - no_raise: str | None = None + no_raise: str | None = None # comma-separated string, later parsed as list[int] report: bool = False project: bool = False commitizen: bool = False From 8055c9509283227def93235561b8675f504f4c18 Mon Sep 17 00:00:00 2001 From: gbaian10 <gbaian10@gmail.com> Date: Sat, 31 May 2025 14:24:07 +0800 Subject: [PATCH 624/685] refactor: remove `TypeError` handling since `Python >=3.9` is required Since the project requires Python >=3.9, argparse only raises SystemExit when non-existent commands are provided, making TypeError handling unnecessary. --- commitizen/cli.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 861ba578a9..d245f731e3 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -632,11 +632,8 @@ def main(): # This is for the command required constraint in 2.0 try: args, unknown_args = parser.parse_known_args() - except (TypeError, SystemExit) as e: - # https://github.com/commitizen-tools/commitizen/issues/429 - # argparse raises TypeError when non exist command is provided on Python < 3.9 - # but raise SystemExit with exit code == 2 on Python 3.9 - if isinstance(e, TypeError) or e.code == 2: + except SystemExit as e: + if e.code == 2: raise NoCommandFoundError() raise e From 9f67a43286c28778458faa76e66f81e588523b39 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 2 Jun 2025 01:16:21 +0800 Subject: [PATCH 625/685] fix(deprecated): mark deprecate in v5 --- commitizen/commands/bump.py | 2 +- commitizen/defaults.py | 2 +- commitizen/version_schemes.py | 2 +- docs/commands/commit.md | 2 +- tests/test_defaults.py | 4 +--- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index a2d98c2451..3f909d97cb 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -82,7 +82,7 @@ def __init__(self, config: BaseConfig, arguments: dict): if deprecated_version_type: warnings.warn( DeprecationWarning( - "`--version-type` parameter is deprecated and will be removed in commitizen 4. " + "`--version-type` parameter is deprecated and will be removed in v5. " "Please use `--version-scheme` instead" ) ) diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 10d55b8621..adbb9e6d1a 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -175,7 +175,7 @@ def __getattr__(name: str) -> Any: if name in deprecated_vars: value, replacement = deprecated_vars[name] warnings.warn( - f"{name} is deprecated and will be removed in a future version. " + f"{name} is deprecated and will be removed in v5. " f"Use {replacement} instead.", DeprecationWarning, stacklevel=2, diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index d5370b2c6c..2a5f7dc6e0 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -419,7 +419,7 @@ def get_version_scheme(settings: Settings, name: str | None = None) -> VersionSc if deprecated_setting: warnings.warn( DeprecationWarning( - "`version_type` setting is deprecated and will be removed in commitizen 4. " + "`version_type` setting is deprecated and will be removed in v5. " "Please use `version_scheme` instead" ) ) diff --git a/docs/commands/commit.md b/docs/commands/commit.md index 5a073a2644..be9d193b97 100644 --- a/docs/commands/commit.md +++ b/docs/commands/commit.md @@ -42,7 +42,7 @@ cz c -a -- -n # Stage all changes and skip the pre-commit and commit- ``` !!! warning - The `--signoff` option (or `-s`) is now recommended being used with the new syntax: `cz commit -- -s`. The old syntax `cz commit --signoff` is deprecated. + The `--signoff` option (or `-s`) is now recommended being used with the new syntax: `cz commit -- -s`. The old syntax `cz commit --signoff` is deprecated and will be removed in v5. ### Retry diff --git a/tests/test_defaults.py b/tests/test_defaults.py index 2298068662..73cd35b80c 100644 --- a/tests/test_defaults.py +++ b/tests/test_defaults.py @@ -19,9 +19,7 @@ def test_getattr_deprecated_vars(): # Verify warning messages assert len(record) == 7 for warning in record: - assert "is deprecated and will be removed in a future version" in str( - warning.message - ) + assert "is deprecated and will be removed" in str(warning.message) def test_getattr_non_existent(): From 1f9578fcbc9c23d0ff221e3e61f96b7e69b3bb96 Mon Sep 17 00:00:00 2001 From: gbaian10 <gbaian10@gmail.com> Date: Sat, 31 May 2025 15:25:28 +0800 Subject: [PATCH 626/685] build(deps-dev): bump ruff --- poetry.lock | 40 ++++++++++++++++++++-------------------- pyproject.toml | 3 ++- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/poetry.lock b/poetry.lock index cbe0fb0e3c..f9f74513a8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1574,30 +1574,30 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.9.10" +version = "0.11.13" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" groups = ["linters"] files = [ - {file = "ruff-0.9.10-py3-none-linux_armv6l.whl", hash = "sha256:eb4d25532cfd9fe461acc83498361ec2e2252795b4f40b17e80692814329e42d"}, - {file = "ruff-0.9.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:188a6638dab1aa9bb6228a7302387b2c9954e455fb25d6b4470cb0641d16759d"}, - {file = "ruff-0.9.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5284dcac6b9dbc2fcb71fdfc26a217b2ca4ede6ccd57476f52a587451ebe450d"}, - {file = "ruff-0.9.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47678f39fa2a3da62724851107f438c8229a3470f533894b5568a39b40029c0c"}, - {file = "ruff-0.9.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99713a6e2766b7a17147b309e8c915b32b07a25c9efd12ada79f217c9c778b3e"}, - {file = "ruff-0.9.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524ee184d92f7c7304aa568e2db20f50c32d1d0caa235d8ddf10497566ea1a12"}, - {file = "ruff-0.9.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:df92aeac30af821f9acf819fc01b4afc3dfb829d2782884f8739fb52a8119a16"}, - {file = "ruff-0.9.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de42e4edc296f520bb84954eb992a07a0ec5a02fecb834498415908469854a52"}, - {file = "ruff-0.9.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d257f95b65806104b6b1ffca0ea53f4ef98454036df65b1eda3693534813ecd1"}, - {file = "ruff-0.9.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60dec7201c0b10d6d11be00e8f2dbb6f40ef1828ee75ed739923799513db24c"}, - {file = "ruff-0.9.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d838b60007da7a39c046fcdd317293d10b845001f38bcb55ba766c3875b01e43"}, - {file = "ruff-0.9.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ccaf903108b899beb8e09a63ffae5869057ab649c1e9231c05ae354ebc62066c"}, - {file = "ruff-0.9.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f9567d135265d46e59d62dc60c0bfad10e9a6822e231f5b24032dba5a55be6b5"}, - {file = "ruff-0.9.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5f202f0d93738c28a89f8ed9eaba01b7be339e5d8d642c994347eaa81c6d75b8"}, - {file = "ruff-0.9.10-py3-none-win32.whl", hash = "sha256:bfb834e87c916521ce46b1788fbb8484966e5113c02df216680102e9eb960029"}, - {file = "ruff-0.9.10-py3-none-win_amd64.whl", hash = "sha256:f2160eeef3031bf4b17df74e307d4c5fb689a6f3a26a2de3f7ef4044e3c484f1"}, - {file = "ruff-0.9.10-py3-none-win_arm64.whl", hash = "sha256:5fd804c0327a5e5ea26615550e706942f348b197d5475ff34c19733aee4b2e69"}, - {file = "ruff-0.9.10.tar.gz", hash = "sha256:9bacb735d7bada9cfb0f2c227d3658fc443d90a727b47f206fb33f52f3c0eac7"}, + {file = "ruff-0.11.13-py3-none-linux_armv6l.whl", hash = "sha256:4bdfbf1240533f40042ec00c9e09a3aade6f8c10b6414cf11b519488d2635d46"}, + {file = "ruff-0.11.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aef9c9ed1b5ca28bb15c7eac83b8670cf3b20b478195bd49c8d756ba0a36cf48"}, + {file = "ruff-0.11.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53b15a9dfdce029c842e9a5aebc3855e9ab7771395979ff85b7c1dedb53ddc2b"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab153241400789138d13f362c43f7edecc0edfffce2afa6a68434000ecd8f69a"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c51f93029d54a910d3d24f7dd0bb909e31b6cd989a5e4ac513f4eb41629f0dc"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1808b3ed53e1a777c2ef733aca9051dc9bf7c99b26ece15cb59a0320fbdbd629"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d28ce58b5ecf0f43c1b71edffabe6ed7f245d5336b17805803312ec9bc665933"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55e4bc3a77842da33c16d55b32c6cac1ec5fb0fbec9c8c513bdce76c4f922165"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:633bf2c6f35678c56ec73189ba6fa19ff1c5e4807a78bf60ef487b9dd272cc71"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ffbc82d70424b275b089166310448051afdc6e914fdab90e08df66c43bb5ca9"}, + {file = "ruff-0.11.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a9ddd3ec62a9a89578c85842b836e4ac832d4a2e0bfaad3b02243f930ceafcc"}, + {file = "ruff-0.11.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d237a496e0778d719efb05058c64d28b757c77824e04ffe8796c7436e26712b7"}, + {file = "ruff-0.11.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:26816a218ca6ef02142343fd24c70f7cd8c5aa6c203bca284407adf675984432"}, + {file = "ruff-0.11.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:51c3f95abd9331dc5b87c47ac7f376db5616041173826dfd556cfe3d4977f492"}, + {file = "ruff-0.11.13-py3-none-win32.whl", hash = "sha256:96c27935418e4e8e77a26bb05962817f28b8ef3843a6c6cc49d8783b5507f250"}, + {file = "ruff-0.11.13-py3-none-win_amd64.whl", hash = "sha256:29c3189895a8a6a657b7af4e97d330c8a3afd2c9c8f46c81e2fc5a31866517e3"}, + {file = "ruff-0.11.13-py3-none-win_arm64.whl", hash = "sha256:b4385285e9179d608ff1d2fb9922062663c658605819a6876d8beef0c30b7f3b"}, + {file = "ruff-0.11.13.tar.gz", hash = "sha256:26fa247dc68d1d4e72c179e08889a25ac0c7ba4d78aecfc835d49cbfd60bf514"}, ] [[package]] @@ -2014,4 +2014,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "6eea6e061a2ece897c2fb37b0b5116085057e6d97e1f22c0fcd4294fb0ad1dbf" +content-hash = "10e298e9b4d2f2d81a82b43649a68d557ed3e9824b3b210b5b6a607935f9fe9d" diff --git a/pyproject.toml b/pyproject.toml index 1a29ca6bf9..d1e89cbed0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -119,7 +119,7 @@ pytest-xdist = "^3.1.0" deprecated = "^1.2.13" [tool.poetry.group.linters.dependencies] -ruff = ">=0.5.0,<0.10.0" +ruff = "^0.11.5" pre-commit = ">=2.18,<5.0" mypy = "^1.16.0" types-deprecated = "^1.2.9.2" @@ -182,6 +182,7 @@ commands_pre = [["poetry", "install", "--only", "main,test"]] commands = [["pytest", { replace = "posargs", extend = true }]] [tool.ruff] +required-version = ">=0.11.5" line-length = 88 [tool.ruff.lint] From 82cdfff22fa1bdf7ed3bf2fb673e6a07d5adf33d Mon Sep 17 00:00:00 2001 From: gbaian10 <gbaian10@gmail.com> Date: Sat, 31 May 2025 15:30:28 +0800 Subject: [PATCH 627/685] style(ruff): resolve F401 --- commitizen/version_schemes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index 2a5f7dc6e0..96a68b05fd 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -19,7 +19,7 @@ else: import importlib_metadata as metadata -from packaging.version import InvalidVersion # noqa: F401: expose the common exception +from packaging.version import InvalidVersion # noqa: F401 (expose the common exception) from packaging.version import Version as _BaseVersion from commitizen.defaults import MAJOR, MINOR, PATCH, Settings From ac3318dd19a7569dc8e887b956d6ef447aec25c8 Mon Sep 17 00:00:00 2001 From: gbaian10 <gbaian10@gmail.com> Date: Sat, 31 May 2025 15:40:08 +0800 Subject: [PATCH 628/685] build(ruff): add RUF022 & RUF100 rules --- pyproject.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index d1e89cbed0..757c72bc0a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -195,6 +195,10 @@ select = [ "UP", # isort "I", + # unsorted-dunder-all + "RUF022", + # unused-noqa + "RUF100", ] ignore = ["E501", "D1", "D415"] From 922bdc30cb9aa679f2be4fa19997d0d05b394fe9 Mon Sep 17 00:00:00 2001 From: gbaian10 <gbaian10@gmail.com> Date: Sat, 31 May 2025 15:41:42 +0800 Subject: [PATCH 629/685] style(ruff): run `ruff check --fix` Auto fix RUF022 and RUF100 --- commitizen/commands/__init__.py | 4 ++-- commitizen/commands/bump.py | 2 +- commitizen/cz/conventional_commits/conventional_commits.py | 2 +- commitizen/cz/jira/jira.py | 2 +- commitizen/providers/__init__.py | 2 +- tests/conftest.py | 2 +- tests/test_bump_find_increment.py | 4 ++-- tests/test_cz_conventional_commits.py | 4 ++-- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/commitizen/commands/__init__.py b/commitizen/commands/__init__.py index 806e384522..58b18297dc 100644 --- a/commitizen/commands/__init__.py +++ b/commitizen/commands/__init__.py @@ -11,13 +11,13 @@ __all__ = ( "Bump", + "Changelog", "Check", "Commit", - "Changelog", "Example", "Info", + "Init", "ListCz", "Schema", "Version", - "Init", ) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 3f909d97cb..9556492499 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -135,7 +135,7 @@ def find_increment(self, commits: list[git.GitCommit]) -> Increment | None: ) return bump.find_increment(commits, regex=bump_pattern, increments_map=bump_map) - def __call__(self) -> None: # noqa: C901 + def __call__(self) -> None: """Steps executed to bump.""" provider = get_provider(self.config) diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 9a2b9016b7..ff79119886 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -31,7 +31,7 @@ class ConventionalCommitsCz(BaseCommitizen): bump_pattern = defaults.BUMP_PATTERN bump_map = defaults.BUMP_MAP bump_map_major_version_zero = defaults.BUMP_MAP_MAJOR_VERSION_ZERO - commit_parser = r"^((?P<change_type>feat|fix|refactor|perf|BREAKING CHANGE)(?:\((?P<scope>[^()\r\n]*)\)|\()?(?P<breaking>!)?|\w+!):\s(?P<message>.*)?" # noqa + commit_parser = r"^((?P<change_type>feat|fix|refactor|perf|BREAKING CHANGE)(?:\((?P<scope>[^()\r\n]*)\)|\()?(?P<breaking>!)?|\w+!):\s(?P<message>.*)?" change_type_map = { "feat": "Feat", "fix": "Fix", diff --git a/commitizen/cz/jira/jira.py b/commitizen/cz/jira/jira.py index f43de2177c..05e23e1690 100644 --- a/commitizen/cz/jira/jira.py +++ b/commitizen/cz/jira/jira.py @@ -67,7 +67,7 @@ def example(self) -> str: ) def schema(self) -> str: - return "<ignored text> <ISSUE_KEY> <ignored text> #<COMMAND> <optional COMMAND_ARGUMENTS>" # noqa + return "<ignored text> <ISSUE_KEY> <ignored text> #<COMMAND> <optional COMMAND_ARGUMENTS>" def schema_pattern(self) -> str: return r".*[A-Z]{2,}\-[0-9]+( #| .* #).+( #.+)*" diff --git a/commitizen/providers/__init__.py b/commitizen/providers/__init__.py index 9cf4ce5927..3e01fe22f8 100644 --- a/commitizen/providers/__init__.py +++ b/commitizen/providers/__init__.py @@ -21,7 +21,6 @@ from commitizen.providers.uv_provider import UvProvider __all__ = [ - "get_provider", "CargoProvider", "CommitizenProvider", "ComposerProvider", @@ -30,6 +29,7 @@ "PoetryProvider", "ScmProvider", "UvProvider", + "get_provider", ] PROVIDER_ENTRYPOINT = "commitizen.provider" diff --git a/tests/conftest.py b/tests/conftest.py index 60c586f2e6..1b49dcbfaa 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -169,7 +169,7 @@ class SemverCommitizen(BaseCommitizen): "patch": "PATCH", } changelog_pattern = r"^(patch|minor|major)" - commit_parser = r"^(?P<change_type>patch|minor|major)(?:\((?P<scope>[^()\r\n]*)\)|\()?:?\s(?P<message>.+)" # noqa + commit_parser = r"^(?P<change_type>patch|minor|major)(?:\((?P<scope>[^()\r\n]*)\)|\()?:?\s(?P<message>.+)" change_type_map = { "major": "Breaking Changes", "minor": "Features", diff --git a/tests/test_bump_find_increment.py b/tests/test_bump_find_increment.py index ff24ff17a7..77e11c78c7 100644 --- a/tests/test_bump_find_increment.py +++ b/tests/test_bump_find_increment.py @@ -32,14 +32,14 @@ MAJOR_INCREMENTS_BREAKING_CHANGE_CC = [ "feat(cli): added version", "docs(README): motivation", - "BREAKING CHANGE: `extends` key in config file is now used for extending other config files", # noqa + "BREAKING CHANGE: `extends` key in config file is now used for extending other config files", "fix(setup.py): future is now required for every python version", ] MAJOR_INCREMENTS_BREAKING_CHANGE_ALT_CC = [ "feat(cli): added version", "docs(README): motivation", - "BREAKING-CHANGE: `extends` key in config file is now used for extending other config files", # noqa + "BREAKING-CHANGE: `extends` key in config file is now used for extending other config files", "fix(setup.py): future is now required for every python version", ] diff --git a/tests/test_cz_conventional_commits.py b/tests/test_cz_conventional_commits.py index 6d4e0f7435..7863e2f38c 100644 --- a/tests/test_cz_conventional_commits.py +++ b/tests/test_cz_conventional_commits.py @@ -89,7 +89,7 @@ def test_long_answer(config): message = conventional_commits.message(answers) assert ( message - == "fix(users): email pattern corrected\n\ncomplete content\n\ncloses #24" # noqa + == "fix(users): email pattern corrected\n\ncomplete content\n\ncloses #24" ) @@ -107,7 +107,7 @@ def test_breaking_change_in_footer(config): print(message) assert ( message - == "fix(users): email pattern corrected\n\ncomplete content\n\nBREAKING CHANGE: migrate by renaming user to users" # noqa + == "fix(users): email pattern corrected\n\ncomplete content\n\nBREAKING CHANGE: migrate by renaming user to users" ) From b6ad3d23cd3cd90f2f235f0fc7e501e551097087 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 12:10:17 +0800 Subject: [PATCH 630/685] refactor(BaseCommitizen): remove unused process_commit --- commitizen/cz/base.py | 7 ------ .../conventional_commits.py | 6 ----- tests/test_cz_base.py | 6 ----- tests/test_cz_conventional_commits.py | 23 ------------------- 4 files changed, 42 deletions(-) diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index 43455a74ca..7463a67c24 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -99,10 +99,3 @@ def schema_pattern(self) -> str: def info(self) -> str: """Information about the standardized commit message.""" raise NotImplementedError("Not Implemented yet") - - def process_commit(self, commit: str) -> str: - """Process commit for changelog. - - If not overwritten, it returns the first line of commit. - """ - return commit.split("\n")[0] diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index ff79119886..320aa9b324 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -1,5 +1,4 @@ import os -import re from commitizen import defaults from commitizen.cz.base import BaseCommitizen @@ -198,8 +197,3 @@ def info(self) -> str: filepath = os.path.join(dir_path, "conventional_commits_info.txt") with open(filepath, encoding=self.config.settings["encoding"]) as f: return f.read() - - def process_commit(self, commit: str) -> str: - if m := re.match(self.schema_pattern(), commit): - return m.group(3).strip() - return "" diff --git a/tests/test_cz_base.py b/tests/test_cz_base.py index 4ee1cc6eda..be93b4ca0f 100644 --- a/tests/test_cz_base.py +++ b/tests/test_cz_base.py @@ -42,9 +42,3 @@ def test_info(config): cz = DummyCz(config) with pytest.raises(NotImplementedError): cz.info() - - -def test_process_commit(config): - cz = DummyCz(config) - message = cz.process_commit("test(test_scope): this is test msg") - assert message == "test(test_scope): this is test msg" diff --git a/tests/test_cz_conventional_commits.py b/tests/test_cz_conventional_commits.py index 7863e2f38c..89653f4c63 100644 --- a/tests/test_cz_conventional_commits.py +++ b/tests/test_cz_conventional_commits.py @@ -130,26 +130,3 @@ def test_info(config): conventional_commits = ConventionalCommitsCz(config) info = conventional_commits.info() assert isinstance(info, str) - - -@pytest.mark.parametrize( - ("commit_message", "expected_message"), - [ - ( - "test(test_scope): this is test msg", - "this is test msg", - ), - ( - "test(test_scope)!: this is test msg", - "this is test msg", - ), - ( - "test!(test_scope): this is test msg", - "", - ), - ], -) -def test_process_commit(commit_message, expected_message, config): - conventional_commits = ConventionalCommitsCz(config) - message = conventional_commits.process_commit(commit_message) - assert message == expected_message From 8c335705aef9acc83276d4be1c8798a1d2a0f1f6 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Thu, 29 May 2025 22:13:11 +0800 Subject: [PATCH 631/685] style(tags): improve types --- commitizen/tags.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/commitizen/tags.py b/commitizen/tags.py index c5f06884fe..4231e0053e 100644 --- a/commitizen/tags.py +++ b/commitizen/tags.py @@ -2,7 +2,7 @@ import re import warnings -from collections.abc import Sequence +from collections.abc import Iterable, Sequence from dataclasses import dataclass, field from functools import cached_property from string import Template @@ -89,14 +89,14 @@ class TagRules: merge_prereleases: bool = False @cached_property - def version_regexes(self) -> Sequence[re.Pattern]: + def version_regexes(self) -> list[re.Pattern]: """Regexes for all legit tag formats, current and legacy""" tag_formats = [self.tag_format, *self.legacy_tag_formats] regexes = (self._format_regex(p) for p in tag_formats) return [re.compile(r) for r in regexes] @cached_property - def ignored_regexes(self) -> Sequence[re.Pattern]: + def ignored_regexes(self) -> list[re.Pattern]: """Regexes for known but ignored tag formats""" regexes = (self._format_regex(p, star=True) for p in self.ignored_tag_formats) return [re.compile(r) for r in regexes] @@ -135,8 +135,8 @@ def is_ignored_tag(self, tag: str | GitTag) -> bool: return any(regex.match(tag) for regex in self.ignored_regexes) def get_version_tags( - self, tags: Sequence[GitTag], warn: bool = False - ) -> Sequence[GitTag]: + self, tags: Iterable[GitTag], warn: bool = False + ) -> list[GitTag]: """Filter in version tags and warn on unexpected tags""" return [tag for tag in tags if self.is_version_tag(tag, warn)] @@ -236,7 +236,7 @@ def normalize_tag( ) def find_tag_for( - self, tags: Sequence[GitTag], version: Version | str + self, tags: Iterable[GitTag], version: Version | str ) -> GitTag | None: """Find the first matching tag for a given version.""" version = self.scheme(version) if isinstance(version, str) else version From 28b3b9b8b553acb379a18f313ba8ec88e895ab6a Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Thu, 29 May 2025 22:18:06 +0800 Subject: [PATCH 632/685] perf(tags): use set --- commitizen/tags.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/commitizen/tags.py b/commitizen/tags.py index 4231e0053e..b19bb89e09 100644 --- a/commitizen/tags.py +++ b/commitizen/tags.py @@ -240,11 +240,11 @@ def find_tag_for( ) -> GitTag | None: """Find the first matching tag for a given version.""" version = self.scheme(version) if isinstance(version, str) else version - possible_tags = [ + possible_tags = set( self.normalize_tag(version, f) for f in (self.tag_format, *self.legacy_tag_formats) - ] - candidates = [t for t in tags if any(t.name == p for p in possible_tags)] + ) + candidates = [t for t in tags if t.name in possible_tags] if len(candidates) > 1: warnings.warn( UserWarning( From 898d054a443d6fd591e5a7e8c4156f7e95038287 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Thu, 29 May 2025 23:20:33 +0800 Subject: [PATCH 633/685] refactor: fix mypy output and better type --- commitizen/changelog.py | 10 ++++---- commitizen/cli.py | 14 +++++++---- commitizen/cmd.py | 5 ++-- commitizen/commands/changelog.py | 24 ++++++++++--------- commitizen/commands/check.py | 10 ++++---- commitizen/commands/commit.py | 14 +++++++---- commitizen/commands/info.py | 4 ++-- commitizen/commands/init.py | 8 +++---- commitizen/commands/list_cz.py | 4 ++-- commitizen/commands/version.py | 6 +++-- commitizen/config/base_config.py | 2 +- .../conventional_commits.py | 4 ++-- commitizen/cz/utils.py | 5 ++-- commitizen/exceptions.py | 7 +++--- commitizen/git.py | 20 +++++++++------- commitizen/out.py | 7 +++--- tests/test_git.py | 7 ++++++ 17 files changed, 90 insertions(+), 61 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index bac4d824f9..6526b4c540 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -29,7 +29,7 @@ import re from collections import OrderedDict, defaultdict -from collections.abc import Generator, Iterable, Mapping +from collections.abc import Generator, Iterable, Mapping, Sequence from dataclasses import dataclass from datetime import date from typing import TYPE_CHECKING, Any @@ -225,7 +225,7 @@ def render_changelog( tree: Iterable, loader: BaseLoader, template: str, - **kwargs, + **kwargs: Any, ) -> str: jinja_template = get_changelog_template(loader, template) changelog: str = jinja_template.render(tree=tree, **kwargs) @@ -282,7 +282,7 @@ def incremental_build( def get_smart_tag_range( - tags: list[GitTag], newest: str, oldest: str | None = None + tags: Sequence[GitTag], newest: str, oldest: str | None = None ) -> list[GitTag]: """Smart because it finds the N+1 tag. @@ -308,10 +308,10 @@ def get_smart_tag_range( def get_oldest_and_newest_rev( - tags: list[GitTag], + tags: Sequence[GitTag], version: str, rules: TagRules, -) -> tuple[str | None, str | None]: +) -> tuple[str | None, str]: """Find the tags for the given version. `version` may come in different formats: diff --git a/commitizen/cli.py b/commitizen/cli.py index d245f731e3..9998691f41 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -50,7 +50,7 @@ def __call__( namespace: argparse.Namespace, kwarg: str | Sequence[Any] | None, option_string: str | None = None, - ): + ) -> None: if not isinstance(kwarg, str): return if "=" not in kwarg: @@ -550,8 +550,12 @@ def __call__( def commitizen_excepthook( - type, value, traceback, debug=False, no_raise: list[int] | None = None -): + type: type[BaseException], + value: BaseException, + traceback: TracebackType | None, + debug: bool = False, + no_raise: list[int] | None = None, +) -> None: traceback = traceback if isinstance(traceback, TracebackType) else None if not isinstance(value, CommitizenException): original_excepthook(type, value, traceback) @@ -581,7 +585,7 @@ def parse_no_raise(comma_separated_no_raise: str) -> list[int]: represents the exit code found in exceptions. """ no_raise_items: list[str] = comma_separated_no_raise.split(",") - no_raise_codes = [] + no_raise_codes: list[int] = [] for item in no_raise_items: if item.isdecimal(): no_raise_codes.append(int(item)) @@ -621,7 +625,7 @@ class Args(argparse.Namespace): ] -def main(): +def main() -> None: parser: argparse.ArgumentParser = cli(data) argcomplete.autocomplete(parser) # Show help if no arg provided diff --git a/commitizen/cmd.py b/commitizen/cmd.py index ba48ac7881..9d6b2f6d2a 100644 --- a/commitizen/cmd.py +++ b/commitizen/cmd.py @@ -1,6 +1,7 @@ import os import subprocess -from typing import NamedTuple +from collections.abc import Mapping +from typing import NamedTuple, Union from charset_normalizer import from_bytes @@ -28,7 +29,7 @@ def _try_decode(bytes_: bytes) -> str: raise CharacterSetDecodeError() from e -def run(cmd: str, env=None) -> Command: +def run(cmd: str, env: Union[Mapping[str, str], None] = None) -> Command: if env is not None: env = {**os.environ, **env} process = subprocess.Popen( diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 7bf644a934..181531dee2 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -2,10 +2,11 @@ import os import os.path -from collections.abc import Generator +from collections.abc import Generator, Iterable, Mapping from difflib import SequenceMatcher from operator import itemgetter from pathlib import Path +from typing import Any, cast from commitizen import changelog, defaults, factory, git, out from commitizen.changelog_formats import get_changelog_format @@ -28,7 +29,7 @@ class Changelog: """Generate a changelog based on the commit history.""" - def __init__(self, config: BaseConfig, args): + def __init__(self, config: BaseConfig, args: Mapping[str, Any]): if not git.is_git_project(): raise NotAGitProjectError() @@ -76,10 +77,11 @@ def __init__(self, config: BaseConfig, args): self.change_type_map = ( self.config.settings.get("change_type_map") or self.cz.change_type_map ) - self.change_type_order = ( + self.change_type_order = cast( + list[str], self.config.settings.get("change_type_order") or self.cz.change_type_order - or defaults.CHANGE_TYPE_ORDER + or defaults.CHANGE_TYPE_ORDER, ) self.rev_range = args.get("rev_range") self.tag_format: str = ( @@ -102,7 +104,7 @@ def __init__(self, config: BaseConfig, args): self.extras = args.get("extras") or {} self.export_template_to = args.get("export_template") - def _find_incremental_rev(self, latest_version: str, tags: list[GitTag]) -> str: + def _find_incremental_rev(self, latest_version: str, tags: Iterable[GitTag]) -> str: """Try to find the 'start_rev'. We use a similarity approach. We know how to parse the version from the markdown @@ -151,18 +153,18 @@ def write_changelog( changelog_file.write(changelog_out) - def export_template(self): + def export_template(self) -> None: tpl = changelog.get_changelog_template(self.cz.template_loader, self.template) - src = Path(tpl.filename) - Path(self.export_template_to).write_text(src.read_text()) + src = Path(tpl.filename) # type: ignore + Path(self.export_template_to).write_text(src.read_text()) # type: ignore - def __call__(self): + def __call__(self) -> None: commit_parser = self.cz.commit_parser changelog_pattern = self.cz.changelog_pattern start_rev = self.start_rev unreleased_version = self.unreleased_version changelog_meta = changelog.Metadata() - change_type_map: dict | None = self.change_type_map + change_type_map: dict[str, str] | None = self.change_type_map # type: ignore changelog_message_builder_hook: MessageBuilderHook | None = ( self.cz.changelog_message_builder_hook ) @@ -190,7 +192,7 @@ def __call__(self): changelog_meta = self.changelog_format.get_metadata(self.file_name) if changelog_meta.latest_version: start_rev = self._find_incremental_rev( - strip_local_version(changelog_meta.latest_version_tag), tags + strip_local_version(changelog_meta.latest_version_tag or ""), tags ) if self.rev_range: start_rev, end_rev = changelog.get_oldest_and_newest_rev( diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index 1e3b8464e1..6cf91bb926 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -17,7 +17,9 @@ class Check: """Check if the current commit msg matches the commitizen format.""" - def __init__(self, config: BaseConfig, arguments: dict[str, Any], cwd=os.getcwd()): + def __init__( + self, config: BaseConfig, arguments: dict[str, Any], cwd: str = os.getcwd() + ): """Initial check command. Args: @@ -48,7 +50,7 @@ def __init__(self, config: BaseConfig, arguments: dict[str, Any], cwd=os.getcwd( self.encoding = config.settings["encoding"] self.cz = factory.committer_factory(self.config) - def _valid_command_argument(self): + def _valid_command_argument(self) -> None: num_exclusive_args_provided = sum( arg is not None for arg in (self.commit_msg_file, self.commit_msg, self.rev_range) @@ -61,7 +63,7 @@ def _valid_command_argument(self): "See 'cz check -h' for more information" ) - def __call__(self): + def __call__(self) -> None: """Validate if commit messages follows the conventional pattern. Raises: @@ -97,7 +99,7 @@ def _get_commit_message(self) -> str | None: # Get commit message from file (--commit-msg-file) return commit_file.read() - def _get_commits(self): + def _get_commits(self) -> list[git.GitCommit]: if (msg := self._get_commit_message()) is not None: return [git.GitCommit(rev="", title="", body=self._filter_comments(msg))] diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index eedf77e079..3e7a850a05 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -5,6 +5,8 @@ import shutil import subprocess import tempfile +from pathlib import Path +from typing import Union, cast import questionary @@ -105,11 +107,13 @@ def _get_message(self) -> str: return self.read_backup_message() or self.prompt_commit_questions() return self.prompt_commit_questions() - def __call__(self): - extra_args: str = self.arguments.get("extra_cli_args", "") - dry_run: bool = self.arguments.get("dry_run") - write_message_to_file: bool = self.arguments.get("write_message_to_file") - signoff: bool = self.arguments.get("signoff") + def __call__(self) -> None: + extra_args = cast(str, self.arguments.get("extra_cli_args", "")) + dry_run = cast(bool, self.arguments.get("dry_run")) + write_message_to_file = cast( + Union[Path, None], self.arguments.get("write_message_to_file") + ) + signoff = cast(bool, self.arguments.get("signoff")) if self.arguments.get("all"): git.add("-u") diff --git a/commitizen/commands/info.py b/commitizen/commands/info.py index abd4197e7f..5b649ceb5d 100644 --- a/commitizen/commands/info.py +++ b/commitizen/commands/info.py @@ -5,9 +5,9 @@ class Info: """Show in depth explanation of your rules.""" - def __init__(self, config: BaseConfig, *args): + def __init__(self, config: BaseConfig, *args: object): self.config: BaseConfig = config self.cz = factory.committer_factory(self.config) - def __call__(self): + def __call__(self) -> None: out.write(self.cz.info()) diff --git a/commitizen/commands/init.py b/commitizen/commands/init.py index 0eb3d99d17..a7e1b56665 100644 --- a/commitizen/commands/init.py +++ b/commitizen/commands/init.py @@ -207,7 +207,7 @@ def _ask_tag(self) -> str: raise NoAnswersError("Tag is required!") return latest_tag - def _ask_tag_format(self, latest_tag) -> str: + def _ask_tag_format(self, latest_tag: str) -> str: is_correct_format = False if latest_tag.startswith("v"): tag_format = r"v$version" @@ -302,7 +302,7 @@ def _ask_update_changelog_on_bump(self) -> bool: ).unsafe_ask() return update_changelog_on_bump - def _exec_install_pre_commit_hook(self, hook_types: list[str]): + def _exec_install_pre_commit_hook(self, hook_types: list[str]) -> None: cmd_str = self._gen_pre_commit_cmd(hook_types) c = cmd.run(cmd_str) if c.return_code != 0: @@ -323,7 +323,7 @@ def _gen_pre_commit_cmd(self, hook_types: list[str]) -> str: ) return cmd_str - def _install_pre_commit_hook(self, hook_types: list[str] | None = None): + def _install_pre_commit_hook(self, hook_types: list[str] | None = None) -> None: pre_commit_config_filename = ".pre-commit-config.yaml" cz_hook_config = { "repo": "https://github.com/commitizen-tools/commitizen", @@ -369,6 +369,6 @@ def _install_pre_commit_hook(self, hook_types: list[str] | None = None): self._exec_install_pre_commit_hook(hook_types) out.write("commitizen pre-commit hook is now installed in your '.git'\n") - def _update_config_file(self, values: dict[str, Any]): + def _update_config_file(self, values: dict[str, Any]) -> None: for key, value in values.items(): self.config.set_key(key, value) diff --git a/commitizen/commands/list_cz.py b/commitizen/commands/list_cz.py index 99701865af..ff4e12ad44 100644 --- a/commitizen/commands/list_cz.py +++ b/commitizen/commands/list_cz.py @@ -6,8 +6,8 @@ class ListCz: """List currently installed rules.""" - def __init__(self, config: BaseConfig, *args): + def __init__(self, config: BaseConfig, *args: object): self.config: BaseConfig = config - def __call__(self): + def __call__(self) -> None: out.write("\n".join(registry.keys())) diff --git a/commitizen/commands/version.py b/commitizen/commands/version.py index 45d553c710..55d0a950a3 100644 --- a/commitizen/commands/version.py +++ b/commitizen/commands/version.py @@ -1,5 +1,7 @@ import platform import sys +from collections.abc import Mapping +from typing import Any from commitizen import out from commitizen.__version__ import __version__ @@ -10,13 +12,13 @@ class Version: """Get the version of the installed commitizen or the current project.""" - def __init__(self, config: BaseConfig, *args): + def __init__(self, config: BaseConfig, *args: Mapping[str, Any]): self.config: BaseConfig = config self.parameter = args[0] self.operating_system = platform.system() self.python_version = sys.version - def __call__(self): + def __call__(self) -> None: if self.parameter.get("report"): out.write(f"Commitizen Version: {__version__}") out.write(f"Python Version: {self.python_version}") diff --git a/commitizen/config/base_config.py b/commitizen/config/base_config.py index fd034412fe..587b72aee6 100644 --- a/commitizen/config/base_config.py +++ b/commitizen/config/base_config.py @@ -6,7 +6,7 @@ class BaseConfig: - def __init__(self): + def __init__(self) -> None: self._settings: Settings = DEFAULT_SETTINGS.copy() self.encoding = self.settings["encoding"] self._path: Path | None = None diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 320aa9b324..5b4889114f 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -8,7 +8,7 @@ __all__ = ["ConventionalCommitsCz"] -def parse_scope(text): +def parse_scope(text: str) -> str: if not text: return "" @@ -19,7 +19,7 @@ def parse_scope(text): return "-".join(scope) -def parse_subject(text): +def parse_subject(text: str) -> str: if isinstance(text, str): text = text.strip(".").strip() diff --git a/commitizen/cz/utils.py b/commitizen/cz/utils.py index cb79d65d1a..430bda2d43 100644 --- a/commitizen/cz/utils.py +++ b/commitizen/cz/utils.py @@ -1,6 +1,7 @@ import os import re import tempfile +from typing import Union from commitizen import git from commitizen.cz import exceptions @@ -8,13 +9,13 @@ _RE_LOCAL_VERSION = re.compile(r"\+.+") -def required_validator(answer, msg=None): +def required_validator(answer: str, msg: Union[str, None] = None) -> str: if not answer: raise exceptions.AnswerRequiredError(msg) return answer -def multiple_line_breaker(answer, sep="|"): +def multiple_line_breaker(answer: str, sep: str = "|") -> str: return "\n".join(line.strip() for line in answer.split(sep) if line) diff --git a/commitizen/exceptions.py b/commitizen/exceptions.py index 29733b624b..87efabe2ab 100644 --- a/commitizen/exceptions.py +++ b/commitizen/exceptions.py @@ -1,4 +1,5 @@ import enum +from typing import Any from commitizen import out @@ -40,7 +41,7 @@ class ExitCode(enum.IntEnum): class CommitizenException(Exception): - def __init__(self, *args, **kwargs): + def __init__(self, *args: str, **kwargs: Any): self.output_method = kwargs.get("output_method") or out.error self.exit_code: ExitCode = self.__class__.exit_code if args: @@ -50,14 +51,14 @@ def __init__(self, *args, **kwargs): else: self.message = "" - def __str__(self): + def __str__(self) -> str: return self.message class ExpectedExit(CommitizenException): exit_code = ExitCode.EXPECTED_EXIT - def __init__(self, *args, **kwargs): + def __init__(self, *args: str, **kwargs: Any): output_method = kwargs.get("output_method") or out.write kwargs["output_method"] = output_method super().__init__(*args, **kwargs) diff --git a/commitizen/git.py b/commitizen/git.py index ab2866ac48..48fa13ec52 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -46,15 +46,15 @@ class GitObject: name: str date: str - def __eq__(self, other) -> bool: + def __eq__(self, other: object) -> bool: return hasattr(other, "rev") and self.rev == other.rev class GitCommit(GitObject): def __init__( self, - rev, - title, + rev: str, + title: str, body: str = "", author: str = "", author_email: str = "", @@ -68,7 +68,7 @@ def __init__( self.parents = parents or [] @property - def message(self): + def message(self) -> str: return f"{self.title}\n\n{self.body}".strip() @classmethod @@ -127,23 +127,27 @@ def from_rev_and_commit(cls, rev_and_commit: str) -> GitCommit: parents=[p for p in parents.strip().split(" ") if p], ) - def __repr__(self): + def __repr__(self) -> str: return f"{self.title} ({self.rev})" class GitTag(GitObject): - def __init__(self, name, rev, date): + def __init__(self, name: str, rev: str, date: str): self.rev = rev.strip() self.name = name.strip() self._date = date.strip() - def __repr__(self): + def __repr__(self) -> str: return f"GitTag('{self.name}', '{self.rev}', '{self.date}')" @property - def date(self): + def date(self) -> str: return self._date + @date.setter + def date(self, value: str) -> None: + self._date = value + @classmethod def from_line(cls, line: str, inner_delimiter: str) -> GitTag: name, objectname, date, obj = line.split(inner_delimiter) diff --git a/commitizen/out.py b/commitizen/out.py index 40342e9de5..1bbfe4329d 100644 --- a/commitizen/out.py +++ b/commitizen/out.py @@ -1,5 +1,6 @@ import io import sys +from typing import Any from termcolor import colored @@ -8,12 +9,12 @@ sys.stdout.reconfigure(encoding="utf-8") -def write(value: str, *args) -> None: +def write(value: str, *args: object) -> None: """Intended to be used when value is multiline.""" print(value, *args) -def line(value: str, *args, **kwargs) -> None: +def line(value: str, *args: object, **kwargs: Any) -> None: """Wrapper in case I want to do something different later.""" print(value, *args, **kwargs) @@ -33,7 +34,7 @@ def info(value: str) -> None: line(message) -def diagnostic(value: str): +def diagnostic(value: str) -> None: line(value, file=sys.stderr) diff --git a/tests/test_git.py b/tests/test_git.py index 3fecaabafd..e242b3a2ae 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -18,6 +18,13 @@ ) +@pytest.mark.parametrize("date", ["2020-01-21", "1970-01-01"]) +def test_git_tag_date(date: str): + git_tag = git.GitTag(rev="sha1-code", name="0.0.1", date="2025-05-30") + git_tag.date = date + assert git_tag.date == date + + def test_git_object_eq(): git_commit = git.GitCommit( rev="sha1-code", title="this is title", body="this is body" From 1647841d83c8047421f5bc75edadd55fd74ae795 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 01:25:06 +0800 Subject: [PATCH 634/685] refactor(conventional_commits): remove unnecessary checks --- .../conventional_commits.py | 22 +++----- tests/test_cz_conventional_commits.py | 54 +++++++++---------- 2 files changed, 30 insertions(+), 46 deletions(-) diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 5b4889114f..912770a726 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -8,22 +8,12 @@ __all__ = ["ConventionalCommitsCz"] -def parse_scope(text: str) -> str: - if not text: - return "" +def _parse_scope(text: str) -> str: + return "-".join(text.strip().split()) - scope = text.strip().split() - if len(scope) == 1: - return scope[0] - return "-".join(scope) - - -def parse_subject(text: str) -> str: - if isinstance(text, str): - text = text.strip(".").strip() - - return required_validator(text, msg="Subject is required.") +def _parse_subject(text: str) -> str: + return required_validator(text.strip(".").strip(), msg="Subject is required.") class ConventionalCommitsCz(BaseCommitizen): @@ -112,12 +102,12 @@ def questions(self) -> Questions: "message": ( "What is the scope of this change? (class or file name): (press [enter] to skip)\n" ), - "filter": parse_scope, + "filter": _parse_scope, }, { "type": "input", "name": "subject", - "filter": parse_subject, + "filter": _parse_subject, "message": ( "Write a short and imperative summary of the code changes: (lower case and no period)\n" ), diff --git a/tests/test_cz_conventional_commits.py b/tests/test_cz_conventional_commits.py index 89653f4c63..c96e036707 100644 --- a/tests/test_cz_conventional_commits.py +++ b/tests/test_cz_conventional_commits.py @@ -2,48 +2,42 @@ from commitizen.cz.conventional_commits.conventional_commits import ( ConventionalCommitsCz, - parse_scope, - parse_subject, + _parse_scope, + _parse_subject, ) from commitizen.cz.exceptions import AnswerRequiredError -valid_scopes = ["", "simple", "dash-separated", "camelCaseUPPERCASE"] -scopes_transformations = [["with spaces", "with-spaces"], [None, ""]] - -valid_subjects = ["this is a normal text", "aword"] - -subjects_transformations = [["with dot.", "with dot"]] - -invalid_subjects = ["", " ", ".", " .", "", None] - - -def test_parse_scope_valid_values(): - for valid_scope in valid_scopes: - assert valid_scope == parse_scope(valid_scope) +@pytest.mark.parametrize( + "valid_scope", ["", "simple", "dash-separated", "camelCaseUPPERCASE"] +) +def test_parse_scope_valid_values(valid_scope): + assert valid_scope == _parse_scope(valid_scope) -def test_scopes_transformations(): - for scopes_transformation in scopes_transformations: - invalid_scope, transformed_scope = scopes_transformation - assert transformed_scope == parse_scope(invalid_scope) +@pytest.mark.parametrize( + "scopes_transformation", [["with spaces", "with-spaces"], ["", ""]] +) +def test_scopes_transformations(scopes_transformation): + invalid_scope, transformed_scope = scopes_transformation + assert transformed_scope == _parse_scope(invalid_scope) -def test_parse_subject_valid_values(): - for valid_subject in valid_subjects: - assert valid_subject == parse_subject(valid_subject) +@pytest.mark.parametrize("valid_subject", ["this is a normal text", "aword"]) +def test_parse_subject_valid_values(valid_subject): + assert valid_subject == _parse_subject(valid_subject) -def test_parse_subject_invalid_values(): - for valid_subject in invalid_subjects: - with pytest.raises(AnswerRequiredError): - parse_subject(valid_subject) +@pytest.mark.parametrize("invalid_subject", ["", " ", ".", " .", "\t\t."]) +def test_parse_subject_invalid_values(invalid_subject): + with pytest.raises(AnswerRequiredError): + _parse_subject(invalid_subject) -def test_subject_transformations(): - for subject_transformation in subjects_transformations: - invalid_subject, transformed_subject = subject_transformation - assert transformed_subject == parse_subject(invalid_subject) +@pytest.mark.parametrize("subject_transformation", [["with dot.", "with dot"]]) +def test_subject_transformations(subject_transformation): + invalid_subject, transformed_subject = subject_transformation + assert transformed_subject == _parse_subject(invalid_subject) def test_questions(config): From 37eac1f292a6593935dfe32c0389f016947116ff Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 14:25:50 +0800 Subject: [PATCH 635/685] refactor: make methods protected, better type --- commitizen/commands/bump.py | 8 ++++---- commitizen/commands/changelog.py | 8 ++++---- commitizen/commands/commit.py | 10 +++++----- commitizen/commands/init.py | 4 ++-- commitizen/config/base_config.py | 3 +++ tests/commands/test_bump_command.py | 10 +++++----- 6 files changed, 23 insertions(+), 20 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 9556492499..0607c7ef73 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -101,7 +101,7 @@ def __init__(self, config: BaseConfig, arguments: dict): ) self.extras = arguments["extras"] - def is_initial_tag( + def _is_initial_tag( self, current_tag: git.GitTag | None, is_yes: bool = False ) -> bool: """Check if reading the whole git tree up to HEAD is needed.""" @@ -118,7 +118,7 @@ def is_initial_tag( ) return bool(questionary.confirm("Is this the first tag created?").ask()) - def find_increment(self, commits: list[git.GitCommit]) -> Increment | None: + def _find_increment(self, commits: list[git.GitCommit]) -> Increment | None: # Update the bump map to ensure major version doesn't increment. is_major_version_zero: bool = self.bump_settings["major_version_zero"] # self.cz.bump_map = defaults.bump_map_major_version_zero @@ -227,7 +227,7 @@ def __call__(self) -> None: current_tag, "name", rules.normalize_tag(current_version) ) - is_initial = self.is_initial_tag(current_tag, is_yes) + is_initial = self._is_initial_tag(current_tag, is_yes) if manual_version: try: @@ -255,7 +255,7 @@ def __call__(self) -> None: "[NO_COMMITS_FOUND]\nNo new commits found." ) - increment = self.find_increment(commits) + increment = self._find_increment(commits) # It may happen that there are commits, but they are not eligible # for an increment, this generates a problem when using prerelease (#281) diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 181531dee2..11f72cba18 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -136,7 +136,7 @@ def _find_incremental_rev(self, latest_version: str, tags: Iterable[GitTag]) -> raise NoRevisionError() return start_rev - def write_changelog( + def _write_changelog( self, changelog_out: str, lines: list[str], changelog_meta: changelog.Metadata ): with smart_open(self.file_name, "w", encoding=self.encoding) as changelog_file: @@ -153,7 +153,7 @@ def write_changelog( changelog_file.write(changelog_out) - def export_template(self) -> None: + def _export_template(self) -> None: tpl = changelog.get_changelog_template(self.cz.template_loader, self.template) src = Path(tpl.filename) # type: ignore Path(self.export_template_to).write_text(src.read_text()) # type: ignore @@ -173,7 +173,7 @@ def __call__(self) -> None: ) if self.export_template_to: - return self.export_template() + return self._export_template() if not changelog_pattern or not commit_parser: raise NoPatternMapError( @@ -240,4 +240,4 @@ def __call__(self) -> None: with open(self.file_name, encoding=self.encoding) as changelog_file: lines = changelog_file.readlines() - self.write_changelog(changelog_out, lines, changelog_meta) + self._write_changelog(changelog_out, lines, changelog_meta) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 3e7a850a05..22ad642c43 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -41,7 +41,7 @@ def __init__(self, config: BaseConfig, arguments: dict): self.arguments = arguments self.temp_file: str = get_backup_file_path() - def read_backup_message(self) -> str | None: + def _read_backup_message(self) -> str | None: # Check the commit backup file exists if not os.path.isfile(self.temp_file): return None @@ -50,7 +50,7 @@ def read_backup_message(self) -> str | None: with open(self.temp_file, encoding=self.encoding) as f: return f.read().strip() - def prompt_commit_questions(self) -> str: + def _prompt_commit_questions(self) -> str: # Prompt user for the commit message cz = self.cz questions = cz.questions() @@ -96,7 +96,7 @@ def manual_edit(self, message: str) -> str: def _get_message(self) -> str: if self.arguments.get("retry"): - m = self.read_backup_message() + m = self._read_backup_message() if m is None: raise NoCommitBackupError() return m @@ -104,8 +104,8 @@ def _get_message(self) -> str: if self.config.settings.get("retry_after_failure") and not self.arguments.get( "no_retry" ): - return self.read_backup_message() or self.prompt_commit_questions() - return self.prompt_commit_questions() + return self._read_backup_message() or self._prompt_commit_questions() + return self._prompt_commit_questions() def __call__(self) -> None: extra_args = cast(str, self.arguments.get("extra_cli_args", "")) diff --git a/commitizen/commands/init.py b/commitizen/commands/init.py index a7e1b56665..e03103d4cb 100644 --- a/commitizen/commands/init.py +++ b/commitizen/commands/init.py @@ -85,7 +85,7 @@ def __init__(self, config: BaseConfig, *args): self.cz = factory.committer_factory(self.config) self.project_info = ProjectInfo() - def __call__(self): + def __call__(self) -> None: if self.config.path: out.line(f"Config file {self.config.path} already exists") return @@ -120,7 +120,7 @@ def __call__(self): self.config = JsonConfig(data="{}", path=config_path) elif "yaml" in config_path: self.config = YAMLConfig(data="", path=config_path) - values_to_add = {} + values_to_add: dict[str, Any] = {} values_to_add["name"] = cz_name values_to_add["tag_format"] = tag_format values_to_add["version_scheme"] = version_scheme diff --git a/commitizen/config/base_config.py b/commitizen/config/base_config.py index 587b72aee6..2c7bce206d 100644 --- a/commitizen/config/base_config.py +++ b/commitizen/config/base_config.py @@ -41,3 +41,6 @@ def update(self, data: Settings) -> None: def _parse_setting(self, data: bytes | str) -> None: raise NotImplementedError() + + def init_empty_config_content(self) -> None: + raise NotImplementedError() diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 2af7bec121..41da985704 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -1692,7 +1692,7 @@ def test_bump_warn_but_dont_fail_on_invalid_tags( def test_is_initial_tag(mocker: MockFixture, tmp_commitizen_project): - """Test the is_initial_tag method behavior.""" + """Test the _is_initial_tag method behavior.""" # Create a commit but no tags create_file_and_commit("feat: initial commit") @@ -1725,15 +1725,15 @@ def test_is_initial_tag(mocker: MockFixture, tmp_commitizen_project): # Test case 1: No current tag, not yes mode mocker.patch("questionary.confirm", return_value=mocker.Mock(ask=lambda: True)) - assert bump_cmd.is_initial_tag(None, is_yes=False) is True + assert bump_cmd._is_initial_tag(None, is_yes=False) is True # Test case 2: No current tag, yes mode - assert bump_cmd.is_initial_tag(None, is_yes=True) is True + assert bump_cmd._is_initial_tag(None, is_yes=True) is True # Test case 3: Has current tag mock_tag = mocker.Mock() - assert bump_cmd.is_initial_tag(mock_tag, is_yes=False) is False + assert bump_cmd._is_initial_tag(mock_tag, is_yes=False) is False # Test case 4: No current tag, user denies mocker.patch("questionary.confirm", return_value=mocker.Mock(ask=lambda: False)) - assert bump_cmd.is_initial_tag(None, is_yes=False) is False + assert bump_cmd._is_initial_tag(None, is_yes=False) is False From c62aac03ee55c8d616ba078357dbbfe973cf5567 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 14:30:57 +0800 Subject: [PATCH 636/685] style: type untyped methods --- commitizen/changelog.py | 6 +++--- commitizen/commands/changelog.py | 2 +- commitizen/commands/example.py | 4 ++-- commitizen/commands/init.py | 2 +- commitizen/commands/schema.py | 4 ++-- commitizen/config/base_config.py | 12 +++++++++++- commitizen/config/json_config.py | 14 ++++++++++++-- commitizen/config/toml_config.py | 18 ++++++++++++++---- commitizen/config/yaml_config.py | 14 ++++++++++++-- commitizen/cz/base.py | 4 ++-- commitizen/git.py | 4 ++-- commitizen/hooks.py | 5 +++-- commitizen/providers/base_provider.py | 10 +++++----- commitizen/providers/cargo_provider.py | 2 +- commitizen/providers/commitizen_provider.py | 2 +- commitizen/providers/poetry_provider.py | 2 +- commitizen/providers/scm_provider.py | 2 +- 17 files changed, 74 insertions(+), 33 deletions(-) diff --git a/commitizen/changelog.py b/commitizen/changelog.py index 6526b4c540..ba6fbbc6b3 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -63,7 +63,7 @@ class Metadata: latest_version_position: int | None = None latest_version_tag: str | None = None - def __post_init__(self): + def __post_init__(self) -> None: if self.latest_version and not self.latest_version_tag: # Test syntactic sugar # latest version tag is optional if same as latest version @@ -169,8 +169,8 @@ def process_commit_message( commit: GitCommit, changes: dict[str | None, list], change_type_map: dict[str, str] | None = None, -): - message: dict = { +) -> None: + message: dict[str, Any] = { "sha1": commit.rev, "parents": commit.parents, "author": commit.author, diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 11f72cba18..5a1270dfd8 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -138,7 +138,7 @@ def _find_incremental_rev(self, latest_version: str, tags: Iterable[GitTag]) -> def _write_changelog( self, changelog_out: str, lines: list[str], changelog_meta: changelog.Metadata - ): + ) -> None: with smart_open(self.file_name, "w", encoding=self.encoding) as changelog_file: partial_changelog: str | None = None if self.incremental: diff --git a/commitizen/commands/example.py b/commitizen/commands/example.py index a28ad85f16..818e217530 100644 --- a/commitizen/commands/example.py +++ b/commitizen/commands/example.py @@ -5,9 +5,9 @@ class Example: """Show an example so people understands the rules.""" - def __init__(self, config: BaseConfig, *args): + def __init__(self, config: BaseConfig, *args: object): self.config: BaseConfig = config self.cz = factory.committer_factory(self.config) - def __call__(self): + def __call__(self) -> None: out.write(self.cz.example()) diff --git a/commitizen/commands/init.py b/commitizen/commands/init.py index e03103d4cb..ca6426b0bd 100644 --- a/commitizen/commands/init.py +++ b/commitizen/commands/init.py @@ -79,7 +79,7 @@ def is_pre_commit_installed(self) -> bool: class Init: - def __init__(self, config: BaseConfig, *args): + def __init__(self, config: BaseConfig, *args: object): self.config: BaseConfig = config self.encoding = config.settings["encoding"] self.cz = factory.committer_factory(self.config) diff --git a/commitizen/commands/schema.py b/commitizen/commands/schema.py index 4af5679cf5..5c77898d8a 100644 --- a/commitizen/commands/schema.py +++ b/commitizen/commands/schema.py @@ -5,9 +5,9 @@ class Schema: """Show structure of the rule.""" - def __init__(self, config: BaseConfig, *args): + def __init__(self, config: BaseConfig, *args: object): self.config: BaseConfig = config self.cz = factory.committer_factory(self.config) - def __call__(self): + def __call__(self) -> None: out.write(self.cz.schema()) diff --git a/commitizen/config/base_config.py b/commitizen/config/base_config.py index 2c7bce206d..10a26e3f0c 100644 --- a/commitizen/config/base_config.py +++ b/commitizen/config/base_config.py @@ -1,9 +1,19 @@ from __future__ import annotations from pathlib import Path +from typing import TYPE_CHECKING, Any from commitizen.defaults import DEFAULT_SETTINGS, Settings +if TYPE_CHECKING: + import sys + + # Self is Python 3.11+ but backported in typing-extensions + if sys.version_info < (3, 11): + from typing_extensions import Self + else: + from typing import Self + class BaseConfig: def __init__(self) -> None: @@ -28,7 +38,7 @@ def path(self, path: str | Path) -> None: """ self._path = Path(path) - def set_key(self, key, value): + def set_key(self, key: str, value: Any) -> Self: """Set or update a key in the conf. For now only strings are supported. diff --git a/commitizen/config/json_config.py b/commitizen/config/json_config.py index 28fac25662..83e0a928a0 100644 --- a/commitizen/config/json_config.py +++ b/commitizen/config/json_config.py @@ -2,12 +2,22 @@ import json from pathlib import Path +from typing import TYPE_CHECKING, Any from commitizen.exceptions import InvalidConfigurationError from commitizen.git import smart_open from .base_config import BaseConfig +if TYPE_CHECKING: + import sys + + # Self is Python 3.11+ but backported in typing-extensions + if sys.version_info < (3, 11): + from typing_extensions import Self + else: + from typing import Self + class JsonConfig(BaseConfig): def __init__(self, *, data: bytes | str, path: Path | str): @@ -16,11 +26,11 @@ def __init__(self, *, data: bytes | str, path: Path | str): self.path = path self._parse_setting(data) - def init_empty_config_content(self): + def init_empty_config_content(self) -> None: with smart_open(self.path, "a", encoding=self.encoding) as json_file: json.dump({"commitizen": {}}, json_file) - def set_key(self, key, value): + def set_key(self, key: str, value: Any) -> Self: """Set or update a key in the conf. For now only strings are supported. diff --git a/commitizen/config/toml_config.py b/commitizen/config/toml_config.py index a7050214ba..9bab994fd5 100644 --- a/commitizen/config/toml_config.py +++ b/commitizen/config/toml_config.py @@ -2,6 +2,7 @@ import os from pathlib import Path +from typing import TYPE_CHECKING, Any from tomlkit import exceptions, parse, table @@ -9,6 +10,15 @@ from .base_config import BaseConfig +if TYPE_CHECKING: + import sys + + # Self is Python 3.11+ but backported in typing-extensions + if sys.version_info < (3, 11): + from typing_extensions import Self + else: + from typing import Self + class TomlConfig(BaseConfig): def __init__(self, *, data: bytes | str, path: Path | str): @@ -17,7 +27,7 @@ def __init__(self, *, data: bytes | str, path: Path | str): self.path = path self._parse_setting(data) - def init_empty_config_content(self): + def init_empty_config_content(self) -> None: if os.path.isfile(self.path): with open(self.path, "rb") as input_toml_file: parser = parse(input_toml_file.read()) @@ -27,10 +37,10 @@ def init_empty_config_content(self): with open(self.path, "wb") as output_toml_file: if parser.get("tool") is None: parser["tool"] = table() - parser["tool"]["commitizen"] = table() + parser["tool"]["commitizen"] = table() # type: ignore output_toml_file.write(parser.as_string().encode(self.encoding)) - def set_key(self, key, value): + def set_key(self, key: str, value: Any) -> Self: """Set or update a key in the conf. For now only strings are supported. @@ -39,7 +49,7 @@ def set_key(self, key, value): with open(self.path, "rb") as f: parser = parse(f.read()) - parser["tool"]["commitizen"][key] = value + parser["tool"]["commitizen"][key] = value # type: ignore with open(self.path, "wb") as f: f.write(parser.as_string().encode(self.encoding)) return self diff --git a/commitizen/config/yaml_config.py b/commitizen/config/yaml_config.py index 2c384cf17d..8eac9bb785 100644 --- a/commitizen/config/yaml_config.py +++ b/commitizen/config/yaml_config.py @@ -1,6 +1,7 @@ from __future__ import annotations from pathlib import Path +from typing import TYPE_CHECKING, Any import yaml @@ -9,6 +10,15 @@ from .base_config import BaseConfig +if TYPE_CHECKING: + import sys + + # Self is Python 3.11+ but backported in typing-extensions + if sys.version_info < (3, 11): + from typing_extensions import Self + else: + from typing import Self + class YAMLConfig(BaseConfig): def __init__(self, *, data: bytes | str, path: Path | str): @@ -17,7 +27,7 @@ def __init__(self, *, data: bytes | str, path: Path | str): self.path = path self._parse_setting(data) - def init_empty_config_content(self): + def init_empty_config_content(self) -> None: with smart_open(self.path, "a", encoding=self.encoding) as json_file: yaml.dump({"commitizen": {}}, json_file, explicit_start=True) @@ -41,7 +51,7 @@ def _parse_setting(self, data: bytes | str) -> None: except (KeyError, TypeError): self.is_empty_config = True - def set_key(self, key, value): + def set_key(self, key: str, value: Any) -> Self: """Set or update a key in the conf. For now only strings are supported. diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index 7463a67c24..9e803c3d01 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -76,13 +76,13 @@ def message(self, answers: dict) -> str: """Format your git message.""" @property - def style(self): + def style(self) -> Style: return merge_styles( [ Style(BaseCommitizen.default_style_config), Style(self.config.settings["style"]), ] - ) + ) # type: ignore[return-value] def example(self) -> str: """Example of the commit message.""" diff --git a/commitizen/git.py b/commitizen/git.py index 48fa13ec52..54d57f69bb 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -215,7 +215,7 @@ def get_commits( ] -def get_filenames_in_commit(git_reference: str = ""): +def get_filenames_in_commit(git_reference: str = "") -> list[str]: """Get the list of files that were committed in the requested git reference. :param git_reference: a git reference as accepted by `git show`, default: the last commit @@ -312,7 +312,7 @@ def get_core_editor() -> str | None: return None -def smart_open(*args, **kwargs): +def smart_open(*args, **kwargs): # type: ignore[no-untyped-def,unused-ignore] """Open a file with the EOL style determined from Git.""" return open(*args, newline=EOLType.for_open(), **kwargs) diff --git a/commitizen/hooks.py b/commitizen/hooks.py index f5505d0e82..f60bd9b43e 100644 --- a/commitizen/hooks.py +++ b/commitizen/hooks.py @@ -1,12 +1,13 @@ from __future__ import annotations import os +from collections.abc import Mapping from commitizen import cmd, out from commitizen.exceptions import RunHookError -def run(hooks, _env_prefix="CZ_", **env): +def run(hooks: str | list[str], _env_prefix: str = "CZ_", **env: object) -> None: if isinstance(hooks, str): hooks = [hooks] @@ -24,7 +25,7 @@ def run(hooks, _env_prefix="CZ_", **env): raise RunHookError(f"Running hook '{hook}' failed") -def _format_env(prefix: str, env: dict[str, str]) -> dict[str, str]: +def _format_env(prefix: str, env: Mapping[str, object]) -> dict[str, str]: """_format_env() prefixes all given environment variables with the given prefix so it can be passed directly to cmd.run().""" penv = dict(os.environ) diff --git a/commitizen/providers/base_provider.py b/commitizen/providers/base_provider.py index 34048318e2..9c1e0f7a98 100644 --- a/commitizen/providers/base_provider.py +++ b/commitizen/providers/base_provider.py @@ -29,7 +29,7 @@ def get_version(self) -> str: """ @abstractmethod - def set_version(self, version: str): + def set_version(self, version: str) -> None: """ Set the new current version """ @@ -58,7 +58,7 @@ def get_version(self) -> str: document = json.loads(self.file.read_text()) return self.get(document) - def set_version(self, version: str): + def set_version(self, version: str) -> None: document = json.loads(self.file.read_text()) self.set(document, version) self.file.write_text(json.dumps(document, indent=self.indent) + "\n") @@ -66,7 +66,7 @@ def set_version(self, version: str): def get(self, document: dict[str, Any]) -> str: return document["version"] # type: ignore - def set(self, document: dict[str, Any], version: str): + def set(self, document: dict[str, Any], version: str) -> None: document["version"] = version @@ -79,7 +79,7 @@ def get_version(self) -> str: document = tomlkit.parse(self.file.read_text()) return self.get(document) - def set_version(self, version: str): + def set_version(self, version: str) -> None: document = tomlkit.parse(self.file.read_text()) self.set(document, version) self.file.write_text(tomlkit.dumps(document)) @@ -87,5 +87,5 @@ def set_version(self, version: str): def get(self, document: tomlkit.TOMLDocument) -> str: return document["project"]["version"] # type: ignore - def set(self, document: tomlkit.TOMLDocument, version: str): + def set(self, document: tomlkit.TOMLDocument, version: str) -> None: document["project"]["version"] = version # type: ignore diff --git a/commitizen/providers/cargo_provider.py b/commitizen/providers/cargo_provider.py index 2e73ff35a1..87e45cd71c 100644 --- a/commitizen/providers/cargo_provider.py +++ b/commitizen/providers/cargo_provider.py @@ -28,7 +28,7 @@ def get(self, document: tomlkit.TOMLDocument) -> str: ... return document["workspace"]["package"]["version"] # type: ignore - def set(self, document: tomlkit.TOMLDocument, version: str): + def set(self, document: tomlkit.TOMLDocument, version: str) -> None: try: document["workspace"]["package"]["version"] = version # type: ignore return diff --git a/commitizen/providers/commitizen_provider.py b/commitizen/providers/commitizen_provider.py index a1da25ff72..7ce177a604 100644 --- a/commitizen/providers/commitizen_provider.py +++ b/commitizen/providers/commitizen_provider.py @@ -11,5 +11,5 @@ class CommitizenProvider(VersionProvider): def get_version(self) -> str: return self.config.settings["version"] # type: ignore - def set_version(self, version: str): + def set_version(self, version: str) -> None: self.config.set_key("version", version) diff --git a/commitizen/providers/poetry_provider.py b/commitizen/providers/poetry_provider.py index 7aa28f56d9..1dd33f053e 100644 --- a/commitizen/providers/poetry_provider.py +++ b/commitizen/providers/poetry_provider.py @@ -15,5 +15,5 @@ class PoetryProvider(TomlProvider): def get(self, pyproject: tomlkit.TOMLDocument) -> str: return pyproject["tool"]["poetry"]["version"] # type: ignore - def set(self, pyproject: tomlkit.TOMLDocument, version: str): + def set(self, pyproject: tomlkit.TOMLDocument, version: str) -> None: pyproject["tool"]["poetry"]["version"] = version # type: ignore diff --git a/commitizen/providers/scm_provider.py b/commitizen/providers/scm_provider.py index cb575148cb..3085b16efa 100644 --- a/commitizen/providers/scm_provider.py +++ b/commitizen/providers/scm_provider.py @@ -23,6 +23,6 @@ def get_version(self) -> str: return "0.0.0" return str(versions[-1]) - def set_version(self, version: str): + def set_version(self, version: str) -> None: # Not necessary pass From 2e65d17cd086443f9f848755dd6d673052bb3189 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 18:48:20 +0800 Subject: [PATCH 637/685] style: remove Union --- commitizen/cmd.py | 6 ++++-- commitizen/cz/utils.py | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/commitizen/cmd.py b/commitizen/cmd.py index 9d6b2f6d2a..3f13087233 100644 --- a/commitizen/cmd.py +++ b/commitizen/cmd.py @@ -1,7 +1,9 @@ +from __future__ import annotations + import os import subprocess from collections.abc import Mapping -from typing import NamedTuple, Union +from typing import NamedTuple from charset_normalizer import from_bytes @@ -29,7 +31,7 @@ def _try_decode(bytes_: bytes) -> str: raise CharacterSetDecodeError() from e -def run(cmd: str, env: Union[Mapping[str, str], None] = None) -> Command: +def run(cmd: str, env: Mapping[str, str] | None = None) -> Command: if env is not None: env = {**os.environ, **env} process = subprocess.Popen( diff --git a/commitizen/cz/utils.py b/commitizen/cz/utils.py index 430bda2d43..a6f687226c 100644 --- a/commitizen/cz/utils.py +++ b/commitizen/cz/utils.py @@ -1,7 +1,6 @@ import os import re import tempfile -from typing import Union from commitizen import git from commitizen.cz import exceptions @@ -9,7 +8,7 @@ _RE_LOCAL_VERSION = re.compile(r"\+.+") -def required_validator(answer: str, msg: Union[str, None] = None) -> str: +def required_validator(answer: str, msg: object = None) -> str: if not answer: raise exceptions.AnswerRequiredError(msg) return answer From 59531a6482330d96ebe58fc7eb286a53b52eca74 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 19:00:05 +0800 Subject: [PATCH 638/685] style: better type --- commitizen/cli.py | 4 ++-- commitizen/providers/base_provider.py | 5 +++-- commitizen/providers/npm_provider.py | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 9998691f41..fa05fb2f73 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -8,7 +8,7 @@ from functools import partial from pathlib import Path from types import TracebackType -from typing import TYPE_CHECKING, Any, cast +from typing import TYPE_CHECKING, cast import argcomplete from decli import cli @@ -48,7 +48,7 @@ def __call__( self, parser: argparse.ArgumentParser, namespace: argparse.Namespace, - kwarg: str | Sequence[Any] | None, + kwarg: str | Sequence[object] | None, option_string: str | None = None, ) -> None: if not isinstance(kwarg, str): diff --git a/commitizen/providers/base_provider.py b/commitizen/providers/base_provider.py index 9c1e0f7a98..7a7e1205b4 100644 --- a/commitizen/providers/base_provider.py +++ b/commitizen/providers/base_provider.py @@ -2,6 +2,7 @@ import json from abc import ABC, abstractmethod +from collections.abc import Mapping from pathlib import Path from typing import Any, ClassVar @@ -63,8 +64,8 @@ def set_version(self, version: str) -> None: self.set(document, version) self.file.write_text(json.dumps(document, indent=self.indent) + "\n") - def get(self, document: dict[str, Any]) -> str: - return document["version"] # type: ignore + def get(self, document: Mapping[str, str]) -> str: + return document["version"] def set(self, document: dict[str, Any], version: str) -> None: document["version"] = version diff --git a/commitizen/providers/npm_provider.py b/commitizen/providers/npm_provider.py index 12900ff7de..3125447250 100644 --- a/commitizen/providers/npm_provider.py +++ b/commitizen/providers/npm_provider.py @@ -1,6 +1,7 @@ from __future__ import annotations import json +from collections.abc import Mapping from pathlib import Path from typing import Any, ClassVar @@ -58,8 +59,8 @@ def set_version(self, version: str) -> None: json.dumps(shrinkwrap_document, indent=self.indent) + "\n" ) - def get_package_version(self, document: dict[str, Any]) -> str: - return document["version"] # type: ignore + def get_package_version(self, document: Mapping[str, str]) -> str: + return document["version"] def set_package_version( self, document: dict[str, Any], version: str From e86d80ead8b1684c389f8ef76edb2723ee339e20 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 22:12:30 +0800 Subject: [PATCH 639/685] style: add `-> None` to __init__ --- commitizen/changelog_formats/__init__.py | 2 +- commitizen/changelog_formats/base.py | 2 +- commitizen/commands/bump.py | 2 +- commitizen/commands/changelog.py | 2 +- commitizen/commands/check.py | 2 +- commitizen/commands/commit.py | 2 +- commitizen/commands/example.py | 2 +- commitizen/commands/info.py | 2 +- commitizen/commands/init.py | 2 +- commitizen/commands/list_cz.py | 2 +- commitizen/commands/schema.py | 2 +- commitizen/commands/version.py | 2 +- commitizen/config/json_config.py | 2 +- commitizen/config/toml_config.py | 2 +- commitizen/config/yaml_config.py | 2 +- commitizen/cz/customize/customize.py | 2 +- commitizen/exceptions.py | 4 ++-- commitizen/git.py | 4 ++-- commitizen/providers/base_provider.py | 2 +- commitizen/version_schemes.py | 2 +- 20 files changed, 22 insertions(+), 22 deletions(-) diff --git a/commitizen/changelog_formats/__init__.py b/commitizen/changelog_formats/__init__.py index 782bfb24cb..b7b3cac01d 100644 --- a/commitizen/changelog_formats/__init__.py +++ b/commitizen/changelog_formats/__init__.py @@ -25,7 +25,7 @@ class ChangelogFormat(Protocol): config: BaseConfig - def __init__(self, config: BaseConfig): + def __init__(self, config: BaseConfig) -> None: self.config = config @property diff --git a/commitizen/changelog_formats/base.py b/commitizen/changelog_formats/base.py index f69cf8f00f..cb5d385bf8 100644 --- a/commitizen/changelog_formats/base.py +++ b/commitizen/changelog_formats/base.py @@ -20,7 +20,7 @@ class BaseFormat(ChangelogFormat, metaclass=ABCMeta): extension: ClassVar[str] = "" alternative_extensions: ClassVar[set[str]] = set() - def __init__(self, config: BaseConfig): + def __init__(self, config: BaseConfig) -> None: # Constructor needs to be redefined because `Protocol` prevent instantiation by default # See: https://bugs.python.org/issue44807 self.config = config diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 0607c7ef73..0aee74a817 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -40,7 +40,7 @@ class Bump: """Show prompt for the user to create a guided commit.""" - def __init__(self, config: BaseConfig, arguments: dict): + def __init__(self, config: BaseConfig, arguments: dict) -> None: if not git.is_git_project(): raise NotAGitProjectError() diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 5a1270dfd8..59d799b037 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -29,7 +29,7 @@ class Changelog: """Generate a changelog based on the commit history.""" - def __init__(self, config: BaseConfig, args: Mapping[str, Any]): + def __init__(self, config: BaseConfig, args: Mapping[str, Any]) -> None: if not git.is_git_project(): raise NotAGitProjectError() diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index 6cf91bb926..82a8039fa3 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -19,7 +19,7 @@ class Check: def __init__( self, config: BaseConfig, arguments: dict[str, Any], cwd: str = os.getcwd() - ): + ) -> None: """Initial check command. Args: diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 22ad642c43..68095d0e0c 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -31,7 +31,7 @@ class Commit: """Show prompt for the user to create a guided commit.""" - def __init__(self, config: BaseConfig, arguments: dict): + def __init__(self, config: BaseConfig, arguments: dict) -> None: if not git.is_git_project(): raise NotAGitProjectError() diff --git a/commitizen/commands/example.py b/commitizen/commands/example.py index 818e217530..ba9f34adc4 100644 --- a/commitizen/commands/example.py +++ b/commitizen/commands/example.py @@ -5,7 +5,7 @@ class Example: """Show an example so people understands the rules.""" - def __init__(self, config: BaseConfig, *args: object): + def __init__(self, config: BaseConfig, *args: object) -> None: self.config: BaseConfig = config self.cz = factory.committer_factory(self.config) diff --git a/commitizen/commands/info.py b/commitizen/commands/info.py index 5b649ceb5d..5ea8227313 100644 --- a/commitizen/commands/info.py +++ b/commitizen/commands/info.py @@ -5,7 +5,7 @@ class Info: """Show in depth explanation of your rules.""" - def __init__(self, config: BaseConfig, *args: object): + def __init__(self, config: BaseConfig, *args: object) -> None: self.config: BaseConfig = config self.cz = factory.committer_factory(self.config) diff --git a/commitizen/commands/init.py b/commitizen/commands/init.py index ca6426b0bd..1207cd02ee 100644 --- a/commitizen/commands/init.py +++ b/commitizen/commands/init.py @@ -79,7 +79,7 @@ def is_pre_commit_installed(self) -> bool: class Init: - def __init__(self, config: BaseConfig, *args: object): + def __init__(self, config: BaseConfig, *args: object) -> None: self.config: BaseConfig = config self.encoding = config.settings["encoding"] self.cz = factory.committer_factory(self.config) diff --git a/commitizen/commands/list_cz.py b/commitizen/commands/list_cz.py index ff4e12ad44..412266f6c3 100644 --- a/commitizen/commands/list_cz.py +++ b/commitizen/commands/list_cz.py @@ -6,7 +6,7 @@ class ListCz: """List currently installed rules.""" - def __init__(self, config: BaseConfig, *args: object): + def __init__(self, config: BaseConfig, *args: object) -> None: self.config: BaseConfig = config def __call__(self) -> None: diff --git a/commitizen/commands/schema.py b/commitizen/commands/schema.py index 5c77898d8a..a7aeb53569 100644 --- a/commitizen/commands/schema.py +++ b/commitizen/commands/schema.py @@ -5,7 +5,7 @@ class Schema: """Show structure of the rule.""" - def __init__(self, config: BaseConfig, *args: object): + def __init__(self, config: BaseConfig, *args: object) -> None: self.config: BaseConfig = config self.cz = factory.committer_factory(self.config) diff --git a/commitizen/commands/version.py b/commitizen/commands/version.py index 55d0a950a3..ecf1f03129 100644 --- a/commitizen/commands/version.py +++ b/commitizen/commands/version.py @@ -12,7 +12,7 @@ class Version: """Get the version of the installed commitizen or the current project.""" - def __init__(self, config: BaseConfig, *args: Mapping[str, Any]): + def __init__(self, config: BaseConfig, *args: Mapping[str, Any]) -> None: self.config: BaseConfig = config self.parameter = args[0] self.operating_system = platform.system() diff --git a/commitizen/config/json_config.py b/commitizen/config/json_config.py index 83e0a928a0..be1f1c36b0 100644 --- a/commitizen/config/json_config.py +++ b/commitizen/config/json_config.py @@ -20,7 +20,7 @@ class JsonConfig(BaseConfig): - def __init__(self, *, data: bytes | str, path: Path | str): + def __init__(self, *, data: bytes | str, path: Path | str) -> None: super().__init__() self.is_empty_config = False self.path = path diff --git a/commitizen/config/toml_config.py b/commitizen/config/toml_config.py index 9bab994fd5..3571c9c882 100644 --- a/commitizen/config/toml_config.py +++ b/commitizen/config/toml_config.py @@ -21,7 +21,7 @@ class TomlConfig(BaseConfig): - def __init__(self, *, data: bytes | str, path: Path | str): + def __init__(self, *, data: bytes | str, path: Path | str) -> None: super().__init__() self.is_empty_config = False self.path = path diff --git a/commitizen/config/yaml_config.py b/commitizen/config/yaml_config.py index 8eac9bb785..f2a79e6937 100644 --- a/commitizen/config/yaml_config.py +++ b/commitizen/config/yaml_config.py @@ -21,7 +21,7 @@ class YAMLConfig(BaseConfig): - def __init__(self, *, data: bytes | str, path: Path | str): + def __init__(self, *, data: bytes | str, path: Path | str) -> None: super().__init__() self.is_empty_config = False self.path = path diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index 53ada4b2c0..8f844501ec 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -26,7 +26,7 @@ class CustomizeCommitsCz(BaseCommitizen): bump_map_major_version_zero = defaults.BUMP_MAP_MAJOR_VERSION_ZERO change_type_order = defaults.CHANGE_TYPE_ORDER - def __init__(self, config: BaseConfig): + def __init__(self, config: BaseConfig) -> None: super().__init__(config) if "customize" not in self.config.settings: diff --git a/commitizen/exceptions.py b/commitizen/exceptions.py index 87efabe2ab..8c0956be53 100644 --- a/commitizen/exceptions.py +++ b/commitizen/exceptions.py @@ -41,7 +41,7 @@ class ExitCode(enum.IntEnum): class CommitizenException(Exception): - def __init__(self, *args: str, **kwargs: Any): + def __init__(self, *args: str, **kwargs: Any) -> None: self.output_method = kwargs.get("output_method") or out.error self.exit_code: ExitCode = self.__class__.exit_code if args: @@ -58,7 +58,7 @@ def __str__(self) -> str: class ExpectedExit(CommitizenException): exit_code = ExitCode.EXPECTED_EXIT - def __init__(self, *args: str, **kwargs: Any): + def __init__(self, *args: str, **kwargs: Any) -> None: output_method = kwargs.get("output_method") or out.write kwargs["output_method"] = output_method super().__init__(*args, **kwargs) diff --git a/commitizen/git.py b/commitizen/git.py index 54d57f69bb..b8528e3f77 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -59,7 +59,7 @@ def __init__( author: str = "", author_email: str = "", parents: list[str] | None = None, - ): + ) -> None: self.rev = rev.strip() self.title = title.strip() self.body = body.strip() @@ -132,7 +132,7 @@ def __repr__(self) -> str: class GitTag(GitObject): - def __init__(self, name: str, rev: str, date: str): + def __init__(self, name: str, rev: str, date: str) -> None: self.rev = rev.strip() self.name = name.strip() self._date = date.strip() diff --git a/commitizen/providers/base_provider.py b/commitizen/providers/base_provider.py index 7a7e1205b4..27c3123416 100644 --- a/commitizen/providers/base_provider.py +++ b/commitizen/providers/base_provider.py @@ -20,7 +20,7 @@ class VersionProvider(ABC): config: BaseConfig - def __init__(self, config: BaseConfig): + def __init__(self, config: BaseConfig) -> None: self.config = config @abstractmethod diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index 96a68b05fd..a59d3c0aa0 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -51,7 +51,7 @@ class VersionProtocol(Protocol): parser: ClassVar[re.Pattern] """Regex capturing this version scheme into a `version` group""" - def __init__(self, version: str): + def __init__(self, version: str) -> None: """ Initialize a version object from its string representation. From 44123c41b8afb58b67d889fd25b90d935f14399a Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 22:35:44 +0800 Subject: [PATCH 640/685] build(ruff,mypy): more strict rules --- commitizen/git.py | 2 +- pyproject.toml | 21 ++++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/commitizen/git.py b/commitizen/git.py index b8528e3f77..fb59750eaf 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -312,7 +312,7 @@ def get_core_editor() -> str | None: return None -def smart_open(*args, **kwargs): # type: ignore[no-untyped-def,unused-ignore] +def smart_open(*args, **kwargs): # type: ignore[no-untyped-def,unused-ignore] # noqa: ANN201 """Open a file with the EOL style determined from Git.""" return open(*args, newline=EOLType.for_open(), **kwargs) diff --git a/pyproject.toml b/pyproject.toml index 757c72bc0a..9961a2f409 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -187,6 +187,9 @@ line-length = 88 [tool.ruff.lint] select = [ + # flake8-annotations + "ANN001", + "ANN2", # pycodestyle "E", # Pyflakes @@ -202,6 +205,9 @@ select = [ ] ignore = ["E501", "D1", "D415"] +[tool.ruff.lint.per-file-ignores] +"tests/*" = ["ANN"] + [tool.ruff.lint.isort] known-first-party = ["commitizen", "tests"] @@ -209,7 +215,8 @@ known-first-party = ["commitizen", "tests"] convention = "google" [tool.mypy] -files = "commitizen" +files = ["commitizen", "tests"] +disallow_untyped_defs = true disallow_untyped_decorators = true disallow_subclassing_any = true warn_return_any = true @@ -217,6 +224,10 @@ warn_redundant_casts = true warn_unused_ignores = true warn_unused_configs = true +[[tool.mypy.overrides]] +module = "tests/*" +disallow_untyped_defs = false + [[tool.mypy.overrides]] module = "py.*" # Legacy pytest dependencies ignore_missing_imports = true @@ -233,14 +244,14 @@ poetry_command = "" [tool.poe.tasks] format.help = "Format the code" format.sequence = [ - { cmd = "ruff check --fix commitizen tests" }, - { cmd = "ruff format commitizen tests" }, + { cmd = "ruff check --fix" }, + { cmd = "ruff format" }, ] lint.help = "Lint the code" lint.sequence = [ - { cmd = "ruff check commitizen/ tests/ --fix" }, - { cmd = "mypy commitizen/ tests/" }, + { cmd = "ruff check" }, + { cmd = "mypy" }, ] check-commit.help = "Check the commit message" From 20dda31eb1da62eab4839dcfc910d3130f7dfe7b Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 31 May 2025 18:20:41 +0800 Subject: [PATCH 641/685] fix(BaseConfig): mypy error --- commitizen/config/base_config.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/commitizen/config/base_config.py b/commitizen/config/base_config.py index 10a26e3f0c..59c0d16a06 100644 --- a/commitizen/config/base_config.py +++ b/commitizen/config/base_config.py @@ -26,16 +26,11 @@ def settings(self) -> Settings: return self._settings @property - def path(self) -> Path | None: - return self._path + def path(self) -> Path: + return self._path # type: ignore @path.setter def path(self, path: str | Path) -> None: - """ - mypy does not like this until 1.16 - See https://github.com/python/mypy/pull/18510 - TODO: remove "type: ignore" from the call sites when 1.16 is available - """ self._path = Path(path) def set_key(self, key: str, value: Any) -> Self: From 001fe8d2711f50fa093cb0f9e230856da660c316 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 31 May 2025 22:04:10 +0800 Subject: [PATCH 642/685] build(mypy): remove disallow_untyped_defs because it's already done by ruff rules --- pyproject.toml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9961a2f409..ee0ecc9ced 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -216,7 +216,6 @@ convention = "google" [tool.mypy] files = ["commitizen", "tests"] -disallow_untyped_defs = true disallow_untyped_decorators = true disallow_subclassing_any = true warn_return_any = true @@ -224,10 +223,6 @@ warn_redundant_casts = true warn_unused_ignores = true warn_unused_configs = true -[[tool.mypy.overrides]] -module = "tests/*" -disallow_untyped_defs = false - [[tool.mypy.overrides]] module = "py.*" # Legacy pytest dependencies ignore_missing_imports = true From f66e577442305255b7f2fdc9ce4e26c742921538 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 31 May 2025 00:45:15 +0800 Subject: [PATCH 643/685] refactor(bump): TypedDict for bump argument --- commitizen/cli.py | 2 +- commitizen/commands/bump.py | 129 ++++++++++++++++------------ commitizen/defaults.py | 38 ++++---- tests/commands/test_bump_command.py | 2 +- 4 files changed, 97 insertions(+), 74 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index fa05fb2f73..e1bd57b523 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -680,7 +680,7 @@ def main() -> None: ) sys.excepthook = no_raise_debug_excepthook - args.func(conf, arguments)() + args.func(conf, arguments)() # type: ignore if __name__ == "__main__": diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 0aee74a817..beed384b78 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -37,37 +37,65 @@ logger = getLogger("commitizen") +class BumpArguments(Settings, total=False): + allow_no_commit: bool | None + annotated_tag_message: str | None + annotated_tag: bool + build_metadata: str | None + changelog_to_stdout: bool + changelog: bool + check_consistency: bool + devrelease: int | None + dry_run: bool + file_name: str + files_only: bool | None + get_next: bool + git_output_to_stderr: bool + gpg_sign: bool + increment_mode: str + increment: Increment | None + local_version: bool + manual_version: str | None + no_verify: bool + prerelease: Prerelease | None + retry: bool + yes: bool + + class Bump: """Show prompt for the user to create a guided commit.""" - def __init__(self, config: BaseConfig, arguments: dict) -> None: + def __init__(self, config: BaseConfig, arguments: BumpArguments) -> None: if not git.is_git_project(): raise NotAGitProjectError() self.config: BaseConfig = config self.encoding = config.settings["encoding"] - self.arguments: dict = arguments - self.bump_settings: dict = { - **config.settings, - **{ - key: arguments[key] - for key in [ - "tag_format", - "prerelease", - "increment", - "increment_mode", - "bump_message", - "gpg_sign", - "annotated_tag", - "annotated_tag_message", - "major_version_zero", - "prerelease_offset", - "template", - "file_name", - ] - if arguments.get(key) is not None + self.arguments = arguments + self.bump_settings = cast( + BumpArguments, + { + **config.settings, + **{ + k: v + for k, v in { + "annotated_tag_message": arguments.get("annotated_tag_message"), + "annotated_tag": arguments.get("annotated_tag"), + "bump_message": arguments.get("bump_message"), + "file_name": arguments.get("file_name"), + "gpg_sign": arguments.get("gpg_sign"), + "increment_mode": arguments.get("increment_mode"), + "increment": arguments.get("increment"), + "major_version_zero": arguments.get("major_version_zero"), + "prerelease_offset": arguments.get("prerelease_offset"), + "prerelease": arguments.get("prerelease"), + "tag_format": arguments.get("tag_format"), + "template": arguments.get("template"), + }.items() + if v is not None + }, }, - } + ) self.cz = factory.committer_factory(self.config) self.changelog_flag = arguments["changelog"] self.changelog_config = self.config.settings.get("update_changelog_on_bump") @@ -120,11 +148,10 @@ def _is_initial_tag( def _find_increment(self, commits: list[git.GitCommit]) -> Increment | None: # Update the bump map to ensure major version doesn't increment. - is_major_version_zero: bool = self.bump_settings["major_version_zero"] # self.cz.bump_map = defaults.bump_map_major_version_zero bump_map = ( self.cz.bump_map_major_version_zero - if is_major_version_zero + if self.bump_settings["major_version_zero"] else self.cz.bump_map ) bump_pattern = self.cz.bump_pattern @@ -144,23 +171,14 @@ def __call__(self) -> None: except TypeError: raise NoVersionSpecifiedError() - bump_commit_message: str | None = self.bump_settings["bump_message"] - version_files: list[str] = self.bump_settings["version_files"] - major_version_zero: bool = self.bump_settings["major_version_zero"] - prerelease_offset: int = self.bump_settings["prerelease_offset"] - - dry_run: bool = self.arguments["dry_run"] - is_yes: bool = self.arguments["yes"] - increment: Increment | None = self.arguments["increment"] - prerelease: Prerelease | None = self.arguments["prerelease"] - devrelease: int | None = self.arguments["devrelease"] - is_files_only: bool | None = self.arguments["files_only"] - is_local_version: bool = self.arguments["local_version"] + increment = self.arguments["increment"] + prerelease = self.arguments["prerelease"] + devrelease = self.arguments["devrelease"] + is_local_version = self.arguments["local_version"] manual_version = self.arguments["manual_version"] build_metadata = self.arguments["build_metadata"] - increment_mode: str = self.arguments["increment_mode"] - get_next: bool = self.arguments["get_next"] - allow_no_commit: bool | None = self.arguments["allow_no_commit"] + get_next = self.arguments["get_next"] + allow_no_commit = self.arguments["allow_no_commit"] if manual_version: if increment: @@ -182,7 +200,7 @@ def __call__(self) -> None: "--build-metadata cannot be combined with MANUAL_VERSION" ) - if major_version_zero: + if self.bump_settings["major_version_zero"]: raise NotAllowed( "--major-version-zero cannot be combined with MANUAL_VERSION" ) @@ -190,7 +208,7 @@ def __call__(self) -> None: if get_next: raise NotAllowed("--get-next cannot be combined with MANUAL_VERSION") - if major_version_zero: + if self.bump_settings["major_version_zero"]: if not current_version.release[0] == 0: raise NotAllowed( f"--major-version-zero is meaningless for current version {current_version}" @@ -215,7 +233,7 @@ def __call__(self) -> None: else: # If user specified changelog_to_stdout, they probably want the # changelog to be generated as well, this is the most intuitive solution - self.changelog_flag = ( + self.changelog_flag = bool( self.changelog_flag or bool(self.changelog_to_stdout) or self.changelog_config @@ -227,7 +245,7 @@ def __call__(self) -> None: current_tag, "name", rules.normalize_tag(current_version) ) - is_initial = self._is_initial_tag(current_tag, is_yes) + is_initial = self._is_initial_tag(current_tag, self.arguments["yes"]) if manual_version: try: @@ -273,16 +291,16 @@ def __call__(self) -> None: new_version = current_version.bump( increment, prerelease=prerelease, - prerelease_offset=prerelease_offset, + prerelease_offset=self.bump_settings["prerelease_offset"], devrelease=devrelease, is_local_version=is_local_version, build_metadata=build_metadata, - exact_increment=increment_mode == "exact", + exact_increment=self.arguments["increment_mode"] == "exact", ) new_tag_version = rules.normalize_tag(new_version) message = bump.create_commit_message( - current_version, new_version, bump_commit_message + current_version, new_version, self.bump_settings["bump_message"] ) if get_next: @@ -314,6 +332,7 @@ def __call__(self) -> None: ) files: list[str] = [] + dry_run = self.arguments["dry_run"] if self.changelog_flag: args = { "unreleased_version": new_tag_version, @@ -342,7 +361,7 @@ def __call__(self) -> None: bump.update_version_in_files( str(current_version), str(new_version), - version_files, + self.bump_settings["version_files"], check_consistency=self.check_consistency, encoding=self.encoding, ) @@ -366,7 +385,7 @@ def __call__(self) -> None: else None, ) - if is_files_only: + if self.arguments["files_only"]: raise ExpectedExit() # FIXME: check if any changes have been staged @@ -395,11 +414,15 @@ def __call__(self) -> None: c = git.tag( new_tag_version, - signed=self.bump_settings.get("gpg_sign", False) - or bool(self.config.settings.get("gpg_sign", False)), - annotated=self.bump_settings.get("annotated_tag", False) - or bool(self.config.settings.get("annotated_tag", False)) - or bool(self.bump_settings.get("annotated_tag_message", False)), + signed=bool( + self.bump_settings.get("gpg_sign") + or self.config.settings.get("gpg_sign") + ), + annotated=bool( + self.bump_settings.get("annotated_tag") + or self.config.settings.get("annotated_tag") + or self.bump_settings.get("annotated_tag_message") + ), msg=self.bump_settings.get("annotated_tag_message", None), # TODO: also get from self.config.settings? ) diff --git a/commitizen/defaults.py b/commitizen/defaults.py index adbb9e6d1a..4ad7ae4d8f 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -29,36 +29,36 @@ class CzSettings(TypedDict, total=False): class Settings(TypedDict, total=False): - name: str - version: str | None - version_files: list[str] - version_provider: str | None - version_scheme: str | None - version_type: str | None - tag_format: str - legacy_tag_formats: Sequence[str] - ignored_tag_formats: Sequence[str] - bump_message: str | None - retry_after_failure: bool allow_abort: bool allowed_prefixes: list[str] + always_signoff: bool + bump_message: str | None changelog_file: str changelog_format: str | None changelog_incremental: bool - changelog_start_rev: str | None changelog_merge_prerelease: bool - update_changelog_on_bump: bool - use_shortcuts: bool - style: list[tuple[str, str]] + changelog_start_rev: str | None customize: CzSettings + encoding: str + extras: dict[str, Any] + ignored_tag_formats: Sequence[str] + legacy_tag_formats: Sequence[str] major_version_zero: bool - pre_bump_hooks: list[str] | None + name: str post_bump_hooks: list[str] | None + pre_bump_hooks: list[str] | None prerelease_offset: int - encoding: str - always_signoff: bool + retry_after_failure: bool + style: list[tuple[str, str]] + tag_format: str template: str | None - extras: dict[str, Any] + update_changelog_on_bump: bool + use_shortcuts: bool + version_files: list[str] + version_provider: str | None + version_scheme: str | None + version_type: str | None + version: str | None CONFIG_FILES: list[str] = [ diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 41da985704..64b810e4de 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -1721,7 +1721,7 @@ def test_is_initial_tag(mocker: MockFixture, tmp_commitizen_project): "extras": None, } - bump_cmd = bump.Bump(config, arguments) + bump_cmd = bump.Bump(config, arguments) # type: ignore # Test case 1: No current tag, not yes mode mocker.patch("questionary.confirm", return_value=mocker.Mock(ask=lambda: True)) From 8e88d8cf1766cc78c6975c7663480cc5752b64d5 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 00:57:10 +0800 Subject: [PATCH 644/685] refactor(changelog): type untyped arguments --- commitizen/commands/bump.py | 4 ++-- commitizen/commands/changelog.py | 38 +++++++++++++++++++++++--------- commitizen/defaults.py | 1 + 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index beed384b78..65827d406e 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -342,14 +342,14 @@ def __call__(self) -> None: "dry_run": dry_run, } if self.changelog_to_stdout: - changelog_cmd = Changelog(self.config, {**args, "dry_run": True}) + changelog_cmd = Changelog(self.config, {**args, "dry_run": True}) # type: ignore try: changelog_cmd() except DryRunExit: pass args["file_name"] = self.file_name - changelog_cmd = Changelog(self.config, args) + changelog_cmd = Changelog(self.config, args) # type: ignore changelog_cmd() files.append(changelog_cmd.file_name) diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 59d799b037..6d150b03f9 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -2,11 +2,11 @@ import os import os.path -from collections.abc import Generator, Iterable, Mapping +from collections.abc import Generator, Iterable from difflib import SequenceMatcher from operator import itemgetter from pathlib import Path -from typing import Any, cast +from typing import Any, TypedDict, cast from commitizen import changelog, defaults, factory, git, out from commitizen.changelog_formats import get_changelog_format @@ -26,10 +26,28 @@ from commitizen.version_schemes import get_version_scheme +class ChangelogArgs(TypedDict, total=False): + change_type_map: dict[str, str] + change_type_order: list[str] + current_version: str + dry_run: bool + file_name: str + incremental: bool + merge_prerelease: bool + rev_range: str + start_rev: str + tag_format: str + unreleased_version: str | None + version_scheme: str + template: str + extras: dict[str, Any] + export_template: str + + class Changelog: """Generate a changelog based on the commit history.""" - def __init__(self, config: BaseConfig, args: Mapping[str, Any]) -> None: + def __init__(self, config: BaseConfig, args: ChangelogArgs) -> None: if not git.is_git_project(): raise NotAGitProjectError() @@ -59,17 +77,17 @@ def __init__(self, config: BaseConfig, args: Mapping[str, Any]) -> None: self.changelog_format = get_changelog_format(self.config, self.file_name) - self.incremental = args["incremental"] or self.config.settings.get( - "changelog_incremental" + self.incremental = bool( + args.get("incremental") or self.config.settings.get("changelog_incremental") ) - self.dry_run = args["dry_run"] + self.dry_run = bool(args.get("dry_run")) self.scheme = get_version_scheme( self.config.settings, args.get("version_scheme") ) current_version = ( - args.get("current_version", config.settings.get("version")) or "" + args.get("current_version") or self.config.settings.get("version") or "" ) self.current_version = self.scheme(current_version) if current_version else None @@ -84,9 +102,7 @@ def __init__(self, config: BaseConfig, args: Mapping[str, Any]) -> None: or defaults.CHANGE_TYPE_ORDER, ) self.rev_range = args.get("rev_range") - self.tag_format: str = ( - args.get("tag_format") or self.config.settings["tag_format"] - ) + self.tag_format = args.get("tag_format") or self.config.settings["tag_format"] self.tag_rules = TagRules( scheme=self.scheme, tag_format=self.tag_format, @@ -164,7 +180,7 @@ def __call__(self) -> None: start_rev = self.start_rev unreleased_version = self.unreleased_version changelog_meta = changelog.Metadata() - change_type_map: dict[str, str] | None = self.change_type_map # type: ignore + change_type_map: dict[str, str] | None = self.change_type_map changelog_message_builder_hook: MessageBuilderHook | None = ( self.cz.changelog_message_builder_hook ) diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 4ad7ae4d8f..29c9f2a494 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -37,6 +37,7 @@ class Settings(TypedDict, total=False): changelog_format: str | None changelog_incremental: bool changelog_merge_prerelease: bool + change_type_map: dict[str, str] changelog_start_rev: str | None customize: CzSettings encoding: str From 49bb8547a3366a22ddd10973fad5623a5662c0a9 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 00:59:21 +0800 Subject: [PATCH 645/685] refactor(check): remove unused argument --- commitizen/commands/check.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index 82a8039fa3..a293b6f855 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -1,6 +1,5 @@ from __future__ import annotations -import os import re import sys from typing import Any @@ -17,9 +16,7 @@ class Check: """Check if the current commit msg matches the commitizen format.""" - def __init__( - self, config: BaseConfig, arguments: dict[str, Any], cwd: str = os.getcwd() - ) -> None: + def __init__(self, config: BaseConfig, arguments: dict[str, Any]) -> None: """Initial check command. Args: From 296b1b6281ce843d99d9f9c76c51675683c086c4 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 01:01:08 +0800 Subject: [PATCH 646/685] style(bump): rename class for consistency --- commitizen/commands/bump.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 65827d406e..4bad83f5d6 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -37,7 +37,7 @@ logger = getLogger("commitizen") -class BumpArguments(Settings, total=False): +class BumpArgs(Settings, total=False): allow_no_commit: bool | None annotated_tag_message: str | None annotated_tag: bool @@ -65,7 +65,7 @@ class BumpArguments(Settings, total=False): class Bump: """Show prompt for the user to create a guided commit.""" - def __init__(self, config: BaseConfig, arguments: BumpArguments) -> None: + def __init__(self, config: BaseConfig, arguments: BumpArgs) -> None: if not git.is_git_project(): raise NotAGitProjectError() @@ -73,7 +73,7 @@ def __init__(self, config: BaseConfig, arguments: BumpArguments) -> None: self.encoding = config.settings["encoding"] self.arguments = arguments self.bump_settings = cast( - BumpArguments, + BumpArgs, { **config.settings, **{ From 1ded688bf13fd13ab465b4236290ac0ed8aaea8b Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 01:08:03 +0800 Subject: [PATCH 647/685] refactor(check): type CheckArgs arguments --- commitizen/commands/check.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index a293b6f855..ba0beeeb4e 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -2,7 +2,7 @@ import re import sys -from typing import Any +from typing import TypedDict from commitizen import factory, git, out from commitizen.config import BaseConfig @@ -13,10 +13,20 @@ ) +class CheckArgs(TypedDict, total=False): + commit_msg_file: str + commit_msg: str + rev_range: str + allow_abort: bool + message_length_limit: int + allowed_prefixes: list[str] + message: str + + class Check: """Check if the current commit msg matches the commitizen format.""" - def __init__(self, config: BaseConfig, arguments: dict[str, Any]) -> None: + def __init__(self, config: BaseConfig, arguments: CheckArgs) -> None: """Initial check command. Args: @@ -24,16 +34,15 @@ def __init__(self, config: BaseConfig, arguments: dict[str, Any]) -> None: arguments: All the flags provided by the user cwd: Current work directory """ - self.commit_msg_file: str | None = arguments.get("commit_msg_file") - self.commit_msg: str | None = arguments.get("message") - self.rev_range: str | None = arguments.get("rev_range") - self.allow_abort: bool = bool( + self.commit_msg_file = arguments.get("commit_msg_file") + self.commit_msg = arguments.get("message") + self.rev_range = arguments.get("rev_range") + self.allow_abort = bool( arguments.get("allow_abort", config.settings["allow_abort"]) ) - self.max_msg_length: int = arguments.get("message_length_limit", 0) + self.max_msg_length = arguments.get("message_length_limit", 0) # we need to distinguish between None and [], which is a valid value - allowed_prefixes = arguments.get("allowed_prefixes") self.allowed_prefixes: list[str] = ( allowed_prefixes From e32778afb257706c7bea839ec784d5fc5b9020b3 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 01:16:52 +0800 Subject: [PATCH 648/685] refactor(commit): type commit args --- commitizen/commands/commit.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 68095d0e0c..43feb272ba 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -6,7 +6,7 @@ import subprocess import tempfile from pathlib import Path -from typing import Union, cast +from typing import TypedDict import questionary @@ -28,10 +28,22 @@ from commitizen.git import smart_open +class CommitArgs(TypedDict, total=False): + all: bool + dry_run: bool + edit: bool + extra_cli_args: str + message_length_limit: int + no_retry: bool + signoff: bool + write_message_to_file: Path | None + retry: bool + + class Commit: """Show prompt for the user to create a guided commit.""" - def __init__(self, config: BaseConfig, arguments: dict) -> None: + def __init__(self, config: BaseConfig, arguments: CommitArgs) -> None: if not git.is_git_project(): raise NotAGitProjectError() @@ -69,7 +81,7 @@ def _prompt_commit_questions(self) -> str: message = cz.message(answers) message_len = len(message.partition("\n")[0].strip()) - message_length_limit: int = self.arguments.get("message_length_limit", 0) + message_length_limit = self.arguments.get("message_length_limit", 0) if 0 < message_length_limit < message_len: raise CommitMessageLengthExceededError( f"Length of commit message exceeds limit ({message_len}/{message_length_limit})" @@ -108,12 +120,10 @@ def _get_message(self) -> str: return self._prompt_commit_questions() def __call__(self) -> None: - extra_args = cast(str, self.arguments.get("extra_cli_args", "")) - dry_run = cast(bool, self.arguments.get("dry_run")) - write_message_to_file = cast( - Union[Path, None], self.arguments.get("write_message_to_file") - ) - signoff = cast(bool, self.arguments.get("signoff")) + extra_args = self.arguments.get("extra_cli_args", "") + dry_run = bool(self.arguments.get("dry_run")) + write_message_to_file = self.arguments.get("write_message_to_file") + signoff = bool(self.arguments.get("signoff")) if self.arguments.get("all"): git.add("-u") From c60a3b877336c119cbece2e923a1cacfc4dcb974 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 01:30:59 +0800 Subject: [PATCH 649/685] refactor(commands): remove unused args, type version command args --- commitizen/commands/version.py | 13 +++++++++---- tests/commands/test_version_command.py | 1 - 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/commitizen/commands/version.py b/commitizen/commands/version.py index ecf1f03129..6b0aa331ad 100644 --- a/commitizen/commands/version.py +++ b/commitizen/commands/version.py @@ -1,7 +1,6 @@ import platform import sys -from collections.abc import Mapping -from typing import Any +from typing import TypedDict from commitizen import out from commitizen.__version__ import __version__ @@ -9,12 +8,18 @@ from commitizen.providers import get_provider +class VersionArgs(TypedDict, total=False): + report: bool + project: bool + verbose: bool + + class Version: """Get the version of the installed commitizen or the current project.""" - def __init__(self, config: BaseConfig, *args: Mapping[str, Any]) -> None: + def __init__(self, config: BaseConfig, arguments: VersionArgs) -> None: self.config: BaseConfig = config - self.parameter = args[0] + self.parameter = arguments self.operating_system = platform.system() self.python_version = sys.version diff --git a/tests/commands/test_version_command.py b/tests/commands/test_version_command.py index 927cf55f25..3dcbed168b 100644 --- a/tests/commands/test_version_command.py +++ b/tests/commands/test_version_command.py @@ -97,7 +97,6 @@ def test_version_use_version_provider( { "report": False, "project": project, - "commitizen": False, "verbose": not project, }, )() From 289198e938d28348d21dc4b52d0d93ab3e20ba40 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 01:38:22 +0800 Subject: [PATCH 650/685] style(cli): shorten arg type --- commitizen/cli.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index e1bd57b523..b5c03527d3 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -3,7 +3,6 @@ import argparse import logging import sys -from collections.abc import Sequence from copy import deepcopy from functools import partial from pathlib import Path @@ -48,7 +47,7 @@ def __call__( self, parser: argparse.ArgumentParser, namespace: argparse.Namespace, - kwarg: str | Sequence[object] | None, + kwarg: object, option_string: str | None = None, ) -> None: if not isinstance(kwarg, str): From e9758e1dad46f514901851d68d624c3d73e50523 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 01:41:39 +0800 Subject: [PATCH 651/685] docs(bump): comment on a stupid looking pattern --- commitizen/commands/bump.py | 1 + 1 file changed, 1 insertion(+) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 4bad83f5d6..fa49d37d5e 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -79,6 +79,7 @@ def __init__(self, config: BaseConfig, arguments: BumpArgs) -> None: **{ k: v for k, v in { + # All these are for making mypy happy "annotated_tag_message": arguments.get("annotated_tag_message"), "annotated_tag": arguments.get("annotated_tag"), "bump_message": arguments.get("bump_message"), From b04ebdf70b2c9e04f69a9b36f893db12532c231d Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 01:50:37 +0800 Subject: [PATCH 652/685] fix(Check): make parameters backward compatiable --- commitizen/commands/check.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index ba0beeeb4e..8a7d0dd019 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -26,7 +26,7 @@ class CheckArgs(TypedDict, total=False): class Check: """Check if the current commit msg matches the commitizen format.""" - def __init__(self, config: BaseConfig, arguments: CheckArgs) -> None: + def __init__(self, config: BaseConfig, arguments: CheckArgs, *args: object) -> None: """Initial check command. Args: From b9a181cc70ab60c736a91cbf042a12cc9f12b30e Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 01:52:12 +0800 Subject: [PATCH 653/685] style(changelog): rename parameter for consistency --- commitizen/commands/changelog.py | 33 ++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 6d150b03f9..f0dd1c516c 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -47,13 +47,13 @@ class ChangelogArgs(TypedDict, total=False): class Changelog: """Generate a changelog based on the commit history.""" - def __init__(self, config: BaseConfig, args: ChangelogArgs) -> None: + def __init__(self, config: BaseConfig, arguments: ChangelogArgs) -> None: if not git.is_git_project(): raise NotAGitProjectError() self.config = config - changelog_file_name = args.get("file_name") or self.config.settings.get( + changelog_file_name = arguments.get("file_name") or self.config.settings.get( "changelog_file" ) if not isinstance(changelog_file_name, str): @@ -71,27 +71,30 @@ def __init__(self, config: BaseConfig, args: ChangelogArgs) -> None: self.encoding = self.config.settings["encoding"] self.cz = factory.committer_factory(self.config) - self.start_rev = args.get("start_rev") or self.config.settings.get( + self.start_rev = arguments.get("start_rev") or self.config.settings.get( "changelog_start_rev" ) self.changelog_format = get_changelog_format(self.config, self.file_name) self.incremental = bool( - args.get("incremental") or self.config.settings.get("changelog_incremental") + arguments.get("incremental") + or self.config.settings.get("changelog_incremental") ) - self.dry_run = bool(args.get("dry_run")) + self.dry_run = bool(arguments.get("dry_run")) self.scheme = get_version_scheme( - self.config.settings, args.get("version_scheme") + self.config.settings, arguments.get("version_scheme") ) current_version = ( - args.get("current_version") or self.config.settings.get("version") or "" + arguments.get("current_version") + or self.config.settings.get("version") + or "" ) self.current_version = self.scheme(current_version) if current_version else None - self.unreleased_version = args["unreleased_version"] + self.unreleased_version = arguments["unreleased_version"] self.change_type_map = ( self.config.settings.get("change_type_map") or self.cz.change_type_map ) @@ -101,24 +104,26 @@ def __init__(self, config: BaseConfig, args: ChangelogArgs) -> None: or self.cz.change_type_order or defaults.CHANGE_TYPE_ORDER, ) - self.rev_range = args.get("rev_range") - self.tag_format = args.get("tag_format") or self.config.settings["tag_format"] + self.rev_range = arguments.get("rev_range") + self.tag_format = ( + arguments.get("tag_format") or self.config.settings["tag_format"] + ) self.tag_rules = TagRules( scheme=self.scheme, tag_format=self.tag_format, legacy_tag_formats=self.config.settings["legacy_tag_formats"], ignored_tag_formats=self.config.settings["ignored_tag_formats"], - merge_prereleases=args.get("merge_prerelease") + merge_prereleases=arguments.get("merge_prerelease") or self.config.settings["changelog_merge_prerelease"], ) self.template = ( - args.get("template") + arguments.get("template") or self.config.settings.get("template") or self.changelog_format.template ) - self.extras = args.get("extras") or {} - self.export_template_to = args.get("export_template") + self.extras = arguments.get("extras") or {} + self.export_template_to = arguments.get("export_template") def _find_incremental_rev(self, latest_version: str, tags: Iterable[GitTag]) -> str: """Try to find the 'start_rev'. From 15a090069d0324f52a4ecf9b29719310ca942848 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 01:55:38 +0800 Subject: [PATCH 654/685] refactor(bump): improve readability and still bypass mypy check --- commitizen/commands/bump.py | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index fa49d37d5e..5edf59e9e8 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -78,22 +78,21 @@ def __init__(self, config: BaseConfig, arguments: BumpArgs) -> None: **config.settings, **{ k: v - for k, v in { - # All these are for making mypy happy - "annotated_tag_message": arguments.get("annotated_tag_message"), - "annotated_tag": arguments.get("annotated_tag"), - "bump_message": arguments.get("bump_message"), - "file_name": arguments.get("file_name"), - "gpg_sign": arguments.get("gpg_sign"), - "increment_mode": arguments.get("increment_mode"), - "increment": arguments.get("increment"), - "major_version_zero": arguments.get("major_version_zero"), - "prerelease_offset": arguments.get("prerelease_offset"), - "prerelease": arguments.get("prerelease"), - "tag_format": arguments.get("tag_format"), - "template": arguments.get("template"), - }.items() - if v is not None + for k in ( + "annotated_tag_message", + "annotated_tag", + "bump_message", + "file_name", + "gpg_sign", + "increment_mode", + "increment", + "major_version_zero", + "prerelease_offset", + "prerelease", + "tag_format", + "template", + ) + if (v := arguments.get(k)) is not None }, }, ) From 48f06e313724438794a3027262aa921deb1715f3 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 1 Jun 2025 02:05:23 +0800 Subject: [PATCH 655/685] refactor: remove unnecessary bool() and remove Any type from TypedDict get --- commitizen/commands/bump.py | 8 ++------ commitizen/defaults.py | 4 +++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 5edf59e9e8..9f8bc08244 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -40,7 +40,6 @@ class BumpArgs(Settings, total=False): allow_no_commit: bool | None annotated_tag_message: str | None - annotated_tag: bool build_metadata: str | None changelog_to_stdout: bool changelog: bool @@ -51,7 +50,6 @@ class BumpArgs(Settings, total=False): files_only: bool | None get_next: bool git_output_to_stderr: bool - gpg_sign: bool increment_mode: str increment: Increment | None local_version: bool @@ -222,7 +220,7 @@ def __call__(self) -> None: if get_next: # if trying to use --get-next, we should not allow --changelog or --changelog-to-stdout - if self.changelog_flag or bool(self.changelog_to_stdout): + if self.changelog_flag or self.changelog_to_stdout: raise NotAllowed( "--changelog or --changelog-to-stdout is not allowed with --get-next" ) @@ -234,9 +232,7 @@ def __call__(self) -> None: # If user specified changelog_to_stdout, they probably want the # changelog to be generated as well, this is the most intuitive solution self.changelog_flag = bool( - self.changelog_flag - or bool(self.changelog_to_stdout) - or self.changelog_config + self.changelog_flag or self.changelog_to_stdout or self.changelog_config ) rules = TagRules.from_settings(cast(Settings, self.bump_settings)) diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 29c9f2a494..7a51389b7a 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -32,16 +32,18 @@ class Settings(TypedDict, total=False): allow_abort: bool allowed_prefixes: list[str] always_signoff: bool + annotated_tag: bool bump_message: str | None + change_type_map: dict[str, str] changelog_file: str changelog_format: str | None changelog_incremental: bool changelog_merge_prerelease: bool - change_type_map: dict[str, str] changelog_start_rev: str | None customize: CzSettings encoding: str extras: dict[str, Any] + gpg_sign: bool ignored_tag_formats: Sequence[str] legacy_tag_formats: Sequence[str] major_version_zero: bool From 8e9d40fbc8842651674257b7bb3c42969ae53418 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Wed, 4 Jun 2025 23:24:59 +0800 Subject: [PATCH 656/685] style(changelog): add TODO to fixable type ignores --- commitizen/commands/changelog.py | 1 + 1 file changed, 1 insertion(+) diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index f0dd1c516c..8ca36bdb9a 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -176,6 +176,7 @@ def _write_changelog( def _export_template(self) -> None: tpl = changelog.get_changelog_template(self.cz.template_loader, self.template) + # TODO: fix the following type ignores src = Path(tpl.filename) # type: ignore Path(self.export_template_to).write_text(src.read_text()) # type: ignore From c49a55c27bc09ba5f18ff2fe056d387233e52018 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Wed, 4 Jun 2025 23:26:37 +0800 Subject: [PATCH 657/685] style(cli): more specific type ignore --- commitizen/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index b5c03527d3..c13f713a27 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -679,7 +679,7 @@ def main() -> None: ) sys.excepthook = no_raise_debug_excepthook - args.func(conf, arguments)() # type: ignore + args.func(conf, arguments)() # type: ignore[arg-type] if __name__ == "__main__": From 150b35dc8e2aad836077887a0086a5c5f5f4fbe8 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Wed, 4 Jun 2025 23:35:19 +0800 Subject: [PATCH 658/685] style(cli): rename kwarg to values --- commitizen/cli.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index c13f713a27..12db01711c 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -47,17 +47,17 @@ def __call__( self, parser: argparse.ArgumentParser, namespace: argparse.Namespace, - kwarg: object, + values: object, option_string: str | None = None, ) -> None: - if not isinstance(kwarg, str): + if not isinstance(values, str): return - if "=" not in kwarg: + if "=" not in values: raise InvalidCommandArgumentError( f"Option {option_string} expect a key=value format" ) kwargs = getattr(namespace, self.dest, None) or {} - key, value = kwarg.split("=", 1) + key, value = values.split("=", 1) if not key: raise InvalidCommandArgumentError( f"Option {option_string} expect a key=value format" From 773575598eac2ab520e698935ded1896f14da137 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 6 Jun 2025 11:24:46 +0800 Subject: [PATCH 659/685] refactor(bump): use any to replace 'or' chain --- commitizen/commands/bump.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 9f8bc08244..a4024eee35 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -231,8 +231,8 @@ def __call__(self) -> None: else: # If user specified changelog_to_stdout, they probably want the # changelog to be generated as well, this is the most intuitive solution - self.changelog_flag = bool( - self.changelog_flag or self.changelog_to_stdout or self.changelog_config + self.changelog_flag = any( + (self.changelog_flag, self.changelog_to_stdout, self.changelog_config) ) rules = TagRules.from_settings(cast(Settings, self.bump_settings)) @@ -410,14 +410,18 @@ def __call__(self) -> None: c = git.tag( new_tag_version, - signed=bool( - self.bump_settings.get("gpg_sign") - or self.config.settings.get("gpg_sign") + signed=any( + ( + self.bump_settings.get("gpg_sign"), + self.config.settings.get("gpg_sign"), + ) ), - annotated=bool( - self.bump_settings.get("annotated_tag") - or self.config.settings.get("annotated_tag") - or self.bump_settings.get("annotated_tag_message") + annotated=any( + ( + self.bump_settings.get("annotated_tag"), + self.config.settings.get("annotated_tag"), + self.bump_settings.get("annotated_tag_message"), + ) ), msg=self.bump_settings.get("annotated_tag_message", None), # TODO: also get from self.config.settings? From 2966cf938b17a37537949e4ee2bbee99919f8999 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 6 Jun 2025 00:46:21 +0800 Subject: [PATCH 660/685] perf(bump): avoid unnecessary list construction and rename variable to avoid confusion --- commitizen/bump.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/commitizen/bump.py b/commitizen/bump.py index 2fa814f7c8..6d6b6dc069 100644 --- a/commitizen/bump.py +++ b/commitizen/bump.py @@ -3,6 +3,7 @@ import os import re from collections import OrderedDict +from collections.abc import Iterable from glob import iglob from logging import getLogger from string import Template @@ -61,7 +62,7 @@ def find_increment( def update_version_in_files( current_version: str, new_version: str, - files: list[str], + files: Iterable[str], *, check_consistency: bool = False, encoding: str = ENCODING, @@ -99,11 +100,11 @@ def update_version_in_files( return updated -def _files_and_regexes(patterns: list[str], version: str) -> list[tuple[str, str]]: +def _files_and_regexes(patterns: Iterable[str], version: str) -> list[tuple[str, str]]: """ Resolve all distinct files with their regexp from a list of glob patterns with optional regexp """ - out: list[tuple[str, str]] = [] + out: set[tuple[str, str]] = set() for pattern in patterns: drive, tail = os.path.splitdrive(pattern) path, _, regex = tail.partition(":") @@ -111,9 +112,10 @@ def _files_and_regexes(patterns: list[str], version: str) -> list[tuple[str, str if not regex: regex = re.escape(version) - for path in iglob(filepath): - out.append((path, regex)) - return sorted(list(set(out))) + for file in iglob(filepath): + out.add((file, regex)) + + return sorted(out) def _bump_with_regex( From 303d2ebc356f8753a1d7ebbffd68d51d924971a9 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 7 Jun 2025 23:29:10 +0800 Subject: [PATCH 661/685] refactor(bump): eliminate similar patterns in code --- commitizen/commands/bump.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index a4024eee35..7fe01393a2 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -397,16 +397,10 @@ def __call__(self) -> None: err = c.err.strip() or c.out raise BumpCommitFailedError(f'2nd git.commit error: "{err}"') - if c.out: - if self.git_output_to_stderr: - out.diagnostic(c.out) - else: - out.write(c.out) - if c.err: - if self.git_output_to_stderr: - out.diagnostic(c.err) - else: - out.write(c.err) + for msg in (c.out, c.err): + if msg: + out_func = out.diagnostic if self.git_output_to_stderr else out.write + out_func(msg) c = git.tag( new_tag_version, From af50d8572b611667690110bd540b10afafd4684a Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 6 Jun 2025 02:03:32 +0800 Subject: [PATCH 662/685] refactor(git): simplify tag logic --- commitizen/git.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/commitizen/git.py b/commitizen/git.py index fb59750eaf..0f5f820eb2 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -160,16 +160,14 @@ def from_line(cls, line: str, inner_delimiter: str) -> GitTag: def tag( tag: str, annotated: bool = False, signed: bool = False, msg: str | None = None ) -> cmd.Command: - _opt = "" - if annotated: - _opt = f"-a {tag} -m" - if signed: - _opt = f"-s {tag} -m" + if not annotated and not signed: + return cmd.run(f"git tag {tag}") # according to https://git-scm.com/book/en/v2/Git-Basics-Tagging, # we're not able to create lightweight tag with message. # by adding message, we make it a annotated tags - return cmd.run(f'git tag {_opt} "{tag if _opt == "" or msg is None else msg}"') + option = "-s" if signed else "-a" # The else case is for annotated tags + return cmd.run(f'git tag {option} {tag} -m "{msg or tag}"') def add(*args: str) -> cmd.Command: From 654f4a03b34c094b5b718f3b2a66f0905689c15c Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 6 Jun 2025 01:50:14 +0800 Subject: [PATCH 663/685] refactor(git): retype get_commits parameter to make it more friendly to call sites --- commitizen/commands/bump.py | 5 +---- commitizen/commands/check.py | 2 +- commitizen/git.py | 7 +++++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 7fe01393a2..ec4cb0b0b6 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -253,10 +253,7 @@ def __call__(self) -> None: ) from exc else: if increment is None: - if current_tag: - commits = git.get_commits(current_tag.name) - else: - commits = git.get_commits() + commits = git.get_commits(current_tag.name if current_tag else None) # No commits, there is no need to create an empty tag. # Unless we previously had a prerelease. diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index 8a7d0dd019..ba003cf3cc 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -110,7 +110,7 @@ def _get_commits(self) -> list[git.GitCommit]: return [git.GitCommit(rev="", title="", body=self._filter_comments(msg))] # Get commit messages from git log (--rev-range) - return git.get_commits(end=self.rev_range or "HEAD") + return git.get_commits(end=self.rev_range) @staticmethod def _filter_comments(msg: str) -> str: diff --git a/commitizen/git.py b/commitizen/git.py index 0f5f820eb2..8025041abb 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -201,15 +201,18 @@ def _create_commit_cmd_string(args: str, committer_date: str | None, name: str) def get_commits( start: str | None = None, - end: str = "HEAD", + end: str | None = None, *, args: str = "", ) -> list[GitCommit]: """Get the commits between start and end.""" + if end is None: + end = "HEAD" git_log_entries = _get_log_as_str_list(start, end, args) return [ GitCommit.from_rev_and_commit(rev_and_commit) - for rev_and_commit in filter(None, git_log_entries) + for rev_and_commit in git_log_entries + if rev_and_commit ] From 6abbc530b02e3d6d5c3def020b18fd771ed111c3 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 6 Jun 2025 01:33:04 +0800 Subject: [PATCH 664/685] refactor(bump): simplify nested if --- commitizen/commands/bump.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index ec4cb0b0b6..ba252fcf21 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -206,17 +206,13 @@ def __call__(self) -> None: if get_next: raise NotAllowed("--get-next cannot be combined with MANUAL_VERSION") - if self.bump_settings["major_version_zero"]: - if not current_version.release[0] == 0: - raise NotAllowed( - f"--major-version-zero is meaningless for current version {current_version}" - ) + if self.bump_settings["major_version_zero"] and current_version.release[0]: + raise NotAllowed( + f"--major-version-zero is meaningless for current version {current_version}" + ) - if build_metadata: - if is_local_version: - raise NotAllowed( - "--local-version cannot be combined with --build-metadata" - ) + if build_metadata and is_local_version: + raise NotAllowed("--local-version cannot be combined with --build-metadata") if get_next: # if trying to use --get-next, we should not allow --changelog or --changelog-to-stdout From f4fe43c363bf7d37e02e8fb633e197e3eab85f1e Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 2 Jun 2025 00:11:57 +0800 Subject: [PATCH 665/685] fix(commit): emit deprecated warning of cz commit -s --- commitizen/commands/commit.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 43feb272ba..bb4c2fdc94 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -125,6 +125,11 @@ def __call__(self) -> None: write_message_to_file = self.arguments.get("write_message_to_file") signoff = bool(self.arguments.get("signoff")) + if signoff: + out.warn( + "Deprecated warning: `cz commit -s` is deprecated and will be removed in v5, please use `cz commit -- -s` instead." + ) + if self.arguments.get("all"): git.add("-u") @@ -147,11 +152,6 @@ def __call__(self) -> None: if dry_run: raise DryRunExit() - if signoff: - out.warn( - "signoff mechanic is deprecated, please use `cz commit -- -s` instead." - ) - if self.config.settings["always_signoff"] or signoff: extra_args = f"{extra_args} -s".strip() From a9c4e0a87eb3004cb02181d536fcb9d117aff2d6 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 2 Jun 2025 00:26:32 +0800 Subject: [PATCH 666/685] fix(cli): update description for deprecate warning Closes #1135 --- commitizen/cli.py | 4 ++-- ...st_bump_command_shows_description_when_use_help_option.txt | 2 +- ..._commit_command_shows_description_when_use_help_option.txt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/commitizen/cli.py b/commitizen/cli.py index 12db01711c..6f7556df49 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -147,7 +147,7 @@ def __call__( { "name": ["-s", "--signoff"], "action": "store_true", - "help": "sign off the commit", + "help": "Deprecated, use 'cz commit -- -s' instead", }, { "name": ["-a", "--all"], @@ -347,7 +347,7 @@ def __call__( }, { "name": ["--version-type"], - "help": "Deprecated, use --version-scheme", + "help": "Deprecated, use --version-scheme instead", "default": None, "choices": version_schemes.KNOWN_SCHEMES, }, diff --git a/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt b/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt index 5d4438875d..4cf8e6c91b 100644 --- a/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_bump_command/test_bump_command_shows_description_when_use_help_option.txt @@ -74,7 +74,7 @@ options: --version-scheme {pep440,semver,semver2} choose version scheme --version-type {pep440,semver,semver2} - Deprecated, use --version-scheme + Deprecated, use --version-scheme instead --build-metadata BUILD_METADATA Add additional build-metadata to the version-number --get-next Determine the next version and write to stdout diff --git a/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt index dd1f53f3da..ba531042aa 100644 --- a/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt @@ -12,7 +12,7 @@ options: --write-message-to-file FILE_PATH write message to file before committing (can be combined with --dry-run) - -s, --signoff sign off the commit + -s, --signoff Deprecated, use 'cz commit -- -s' instead -a, --all Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected. From fa5f3c8062bfde36fa3bdb79d9e06c5a3dfe7dd6 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sat, 31 May 2025 23:30:27 +0800 Subject: [PATCH 667/685] refactor(questions): type questions with TypedDict --- commitizen/commands/commit.py | 2 +- commitizen/cz/base.py | 4 +-- .../conventional_commits.py | 6 ++-- commitizen/cz/customize/customize.py | 7 ++-- commitizen/cz/jira/jira.py | 4 +-- commitizen/defaults.py | 6 ++-- commitizen/question.py | 32 +++++++++++++++++++ tests/conftest.py | 3 +- 8 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 commitizen/question.py diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index bb4c2fdc94..19bb72fb00 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -66,7 +66,7 @@ def _prompt_commit_questions(self) -> str: # Prompt user for the commit message cz = self.cz questions = cz.questions() - for question in filter(lambda q: q["type"] == "list", questions): + for question in (q for q in questions if q["type"] == "list"): question["use_shortcuts"] = self.config.settings["use_shortcuts"] try: answers = questionary.prompt(questions, style=cz.style) diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index 9e803c3d01..a30540cae6 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -9,7 +9,7 @@ from commitizen import git from commitizen.config.base_config import BaseConfig -from commitizen.defaults import Questions +from commitizen.question import CzQuestion class MessageBuilderHook(Protocol): @@ -68,7 +68,7 @@ def __init__(self, config: BaseConfig) -> None: self.config.settings.update({"style": BaseCommitizen.default_style_config}) @abstractmethod - def questions(self) -> Questions: + def questions(self) -> Iterable[CzQuestion]: """Questions regarding the commit message.""" @abstractmethod diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 912770a726..ca4809a90e 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -3,7 +3,7 @@ from commitizen import defaults from commitizen.cz.base import BaseCommitizen from commitizen.cz.utils import multiple_line_breaker, required_validator -from commitizen.defaults import Questions +from commitizen.question import CzQuestion __all__ = ["ConventionalCommitsCz"] @@ -29,7 +29,7 @@ class ConventionalCommitsCz(BaseCommitizen): } changelog_pattern = defaults.BUMP_PATTERN - def questions(self) -> Questions: + def questions(self) -> list[CzQuestion]: return [ { "type": "list", @@ -122,8 +122,8 @@ def questions(self) -> Questions: }, { "type": "confirm", - "message": "Is this a BREAKING CHANGE? Correlates with MAJOR in SemVer", "name": "is_breaking_change", + "message": "Is this a BREAKING CHANGE? Correlates with MAJOR in SemVer", "default": False, }, { diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index 8f844501ec..6581ad444e 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -2,6 +2,8 @@ from typing import TYPE_CHECKING +from commitizen.question import CzQuestion + if TYPE_CHECKING: from jinja2 import Template else: @@ -14,7 +16,6 @@ from commitizen import defaults from commitizen.config import BaseConfig from commitizen.cz.base import BaseCommitizen -from commitizen.defaults import Questions from commitizen.exceptions import MissingCzCustomizeConfigError __all__ = ["CustomizeCommitsCz"] @@ -45,8 +46,8 @@ def __init__(self, config: BaseConfig) -> None: if value := self.custom_settings.get(attr_name): setattr(self, attr_name, value) - def questions(self) -> Questions: - return self.custom_settings.get("questions", [{}]) + def questions(self) -> list[CzQuestion]: + return self.custom_settings.get("questions", [{}]) # type: ignore def message(self, answers: dict) -> str: message_template = Template(self.custom_settings.get("message_template", "")) diff --git a/commitizen/cz/jira/jira.py b/commitizen/cz/jira/jira.py index 05e23e1690..eafded615e 100644 --- a/commitizen/cz/jira/jira.py +++ b/commitizen/cz/jira/jira.py @@ -1,13 +1,13 @@ import os from commitizen.cz.base import BaseCommitizen -from commitizen.defaults import Questions +from commitizen.question import CzQuestion __all__ = ["JiraSmartCz"] class JiraSmartCz(BaseCommitizen): - def questions(self) -> Questions: + def questions(self) -> list[CzQuestion]: return [ { "type": "input", diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 7a51389b7a..a49d6d9428 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -6,8 +6,10 @@ from collections.abc import Iterable, MutableMapping, Sequence from typing import Any, TypedDict +from commitizen.question import CzQuestion + # Type -Questions = Iterable[MutableMapping[str, Any]] +Questions = Iterable[MutableMapping[str, Any]] # TODO: deprecate this? class CzSettings(TypedDict, total=False): @@ -16,7 +18,7 @@ class CzSettings(TypedDict, total=False): bump_map_major_version_zero: OrderedDict[str, str] change_type_order: list[str] - questions: Questions + questions: Iterable[CzQuestion] example: str | None schema_pattern: str | None schema: str | None diff --git a/commitizen/question.py b/commitizen/question.py new file mode 100644 index 0000000000..393e386092 --- /dev/null +++ b/commitizen/question.py @@ -0,0 +1,32 @@ +from typing import Callable, Literal, TypedDict, Union + + +class Choice(TypedDict, total=False): + value: str + name: str + key: str + + +class ListQuestion(TypedDict, total=False): + type: Literal["list"] + name: str + message: str + choices: list[Choice] + use_shortcuts: bool + + +class InputQuestion(TypedDict, total=False): + type: Literal["input"] + name: str + message: str + filter: Callable[[str], str] + + +class ConfirmQuestion(TypedDict): + type: Literal["confirm"] + name: str + message: str + default: bool + + +CzQuestion = Union[ListQuestion, InputQuestion, ConfirmQuestion] diff --git a/tests/conftest.py b/tests/conftest.py index 1b49dcbfaa..a4815b3d5a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -17,6 +17,7 @@ from commitizen.config import BaseConfig from commitizen.cz import registry from commitizen.cz.base import BaseCommitizen +from commitizen.question import CzQuestion from tests.utils import create_file_and_commit SIGNER = "GitHub Action" @@ -222,7 +223,7 @@ def use_cz_semver(mocker): class MockPlugin(BaseCommitizen): - def questions(self) -> defaults.Questions: + def questions(self) -> list[CzQuestion]: return [] def message(self, answers: dict) -> str: From 547836617d8fbae1197a7e7306f554c4446dea35 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 12:31:14 +0800 Subject: [PATCH 668/685] refactor(check): compile once and rename variable --- commitizen/commands/check.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index ba003cf3cc..69147bcfbe 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -79,20 +79,19 @@ def __call__(self) -> None: if not commits: raise NoCommitsFoundError(f"No commit found with range: '{self.rev_range}'") - pattern = self.cz.schema_pattern() - displayed_msgs_content = "\n".join( - [ - f'commit "{commit.rev}": "{commit.message}"' - for commit in commits - if not self.validate_commit_message(commit.message, pattern) - ] + pattern = re.compile(self.cz.schema_pattern()) + invalid_msgs_content = "\n".join( + f'commit "{commit.rev}": "{commit.message}"' + for commit in commits + if not self._validate_commit_message(commit.message, pattern) ) - if displayed_msgs_content: + if invalid_msgs_content: + # TODO: capitalize the first letter of the error message for consistency in v5 raise InvalidCommitMessageError( "commit validation: failed!\n" "please enter a commit message in the commitizen format.\n" - f"{displayed_msgs_content}\n" - f"pattern: {pattern}" + f"{invalid_msgs_content}\n" + f"pattern: {pattern.pattern}" ) out.success("Commit validation: successful!") @@ -143,14 +142,18 @@ def _filter_comments(msg: str) -> str: lines.append(line) return "\n".join(lines) - def validate_commit_message(self, commit_msg: str, pattern: str) -> bool: + def _validate_commit_message( + self, commit_msg: str, pattern: re.Pattern[str] + ) -> bool: if not commit_msg: return self.allow_abort if any(map(commit_msg.startswith, self.allowed_prefixes)): return True + if self.max_msg_length: msg_len = len(commit_msg.partition("\n")[0].strip()) if msg_len > self.max_msg_length: return False - return bool(re.match(pattern, commit_msg)) + + return bool(pattern.match(commit_msg)) From 7fc35151829335d09a9428e306ad18a161810a91 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 21:10:05 +0800 Subject: [PATCH 669/685] refactor: do not guess if changelog format is provided --- commitizen/changelog_formats/__init__.py | 17 +++++++++++------ commitizen/factory.py | 4 +--- tests/test_changelog_formats.py | 8 ++++---- tests/{test_defaults.py => test_deprecated.py} | 6 +++++- 4 files changed, 21 insertions(+), 14 deletions(-) rename tests/{test_defaults.py => test_deprecated.py} (84%) diff --git a/commitizen/changelog_formats/__init__.py b/commitizen/changelog_formats/__init__.py index b7b3cac01d..9a5eea7ab2 100644 --- a/commitizen/changelog_formats/__init__.py +++ b/commitizen/changelog_formats/__init__.py @@ -1,7 +1,7 @@ from __future__ import annotations import sys -from typing import ClassVar, Protocol +from typing import Callable, ClassVar, Protocol if sys.version_info >= (3, 10): from importlib import metadata @@ -64,10 +64,9 @@ def get_changelog_format( :raises FormatUnknown: if a non-empty name is provided but cannot be found in the known formats """ name: str | None = config.settings.get("changelog_format") - format: type[ChangelogFormat] | None = guess_changelog_format(filename) - - if name and name in KNOWN_CHANGELOG_FORMATS: - format = KNOWN_CHANGELOG_FORMATS[name] + format = ( + name and KNOWN_CHANGELOG_FORMATS.get(name) or _guess_changelog_format(filename) + ) if not format: raise ChangelogFormatUnknown(f"Unknown changelog format '{name}'") @@ -75,7 +74,7 @@ def get_changelog_format( return format(config) -def guess_changelog_format(filename: str | None) -> type[ChangelogFormat] | None: +def _guess_changelog_format(filename: str | None) -> type[ChangelogFormat] | None: """ Try guessing the file format from the filename. @@ -91,3 +90,9 @@ def guess_changelog_format(filename: str | None) -> type[ChangelogFormat] | None if filename.endswith(f".{alt_extension}"): return format return None + + +def __getattr__(name: str) -> Callable[[str], type[ChangelogFormat] | None]: + if name == "guess_changelog_format": + return _guess_changelog_format + raise AttributeError(f"module {__name__} has no attribute {name}") diff --git a/commitizen/factory.py b/commitizen/factory.py index b5d665b65e..d9e99fb771 100644 --- a/commitizen/factory.py +++ b/commitizen/factory.py @@ -8,12 +8,10 @@ def committer_factory(config: BaseConfig) -> BaseCommitizen: """Return the correct commitizen existing in the registry.""" name: str = config.settings["name"] try: - _cz = registry[name](config) + return registry[name](config) except KeyError: msg_error = ( "The committer has not been found in the system.\n\n" f"Try running 'pip install {name}'\n" ) raise NoCommitizenFoundException(msg_error) - else: - return _cz diff --git a/tests/test_changelog_formats.py b/tests/test_changelog_formats.py index dec23720dc..e0d99e0325 100644 --- a/tests/test_changelog_formats.py +++ b/tests/test_changelog_formats.py @@ -6,8 +6,8 @@ from commitizen.changelog_formats import ( KNOWN_CHANGELOG_FORMATS, ChangelogFormat, + _guess_changelog_format, get_changelog_format, - guess_changelog_format, ) from commitizen.config.base_config import BaseConfig from commitizen.exceptions import ChangelogFormatUnknown @@ -15,14 +15,14 @@ @pytest.mark.parametrize("format", KNOWN_CHANGELOG_FORMATS.values()) def test_guess_format(format: type[ChangelogFormat]): - assert guess_changelog_format(f"CHANGELOG.{format.extension}") is format + assert _guess_changelog_format(f"CHANGELOG.{format.extension}") is format for ext in format.alternative_extensions: - assert guess_changelog_format(f"CHANGELOG.{ext}") is format + assert _guess_changelog_format(f"CHANGELOG.{ext}") is format @pytest.mark.parametrize("filename", ("CHANGELOG", "NEWS", "file.unknown", None)) def test_guess_format_unknown(filename: str): - assert guess_changelog_format(filename) is None + assert _guess_changelog_format(filename) is None @pytest.mark.parametrize( diff --git a/tests/test_defaults.py b/tests/test_deprecated.py similarity index 84% rename from tests/test_defaults.py rename to tests/test_deprecated.py index 73cd35b80c..41bea81a73 100644 --- a/tests/test_defaults.py +++ b/tests/test_deprecated.py @@ -1,6 +1,6 @@ import pytest -from commitizen import defaults +from commitizen import changelog_formats, defaults def test_getattr_deprecated_vars(): @@ -15,6 +15,10 @@ def test_getattr_deprecated_vars(): assert defaults.change_type_order == defaults.CHANGE_TYPE_ORDER assert defaults.encoding == defaults.ENCODING assert defaults.name == defaults.DEFAULT_SETTINGS["name"] + assert ( + changelog_formats._guess_changelog_format + == changelog_formats.guess_changelog_format + ) # Verify warning messages assert len(record) == 7 From 2d23942fe77e547bb0ecb65e883a9921e094eca9 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 12:37:11 +0800 Subject: [PATCH 670/685] refactor(conventional_commits): make schema_pattern more readable --- .../conventional_commits.py | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index ca4809a90e..8e6caac1f5 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -174,11 +174,27 @@ def schema(self) -> str: ) def schema_pattern(self) -> str: + change_types = ( + "build", + "bump", + "chore", + "ci", + "docs", + "feat", + "fix", + "perf", + "refactor", + "revert", + "style", + "test", + ) return ( r"(?s)" # To explicitly make . match new line - r"(build|ci|docs|feat|fix|perf|refactor|style|test|chore|revert|bump)" # type - r"(\(\S+\))?!?:" # scope - r"( [^\n\r]+)" # subject + r"(" + "|".join(change_types) + r")" # type + r"(\(\S+\))?" # scope + r"!?" + r": " + r"([^\n\r]+)" # subject r"((\n\n.*)|(\s*))?$" ) From 451e0fc50577d9081266b8bd0c36b82d903bc21d Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 21:46:10 +0800 Subject: [PATCH 671/685] refactor(conventional_commits): use TypedDict for answers --- .../cz/conventional_commits/conventional_commits.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 8e6caac1f5..6893423478 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -1,4 +1,5 @@ import os +from typing import TypedDict from commitizen import defaults from commitizen.cz.base import BaseCommitizen @@ -16,6 +17,15 @@ def _parse_subject(text: str) -> str: return required_validator(text.strip(".").strip(), msg="Subject is required.") +class ConventionalCommitsAnswers(TypedDict): + prefix: str + scope: str + subject: str + body: str + footer: str + is_breaking_change: bool + + class ConventionalCommitsCz(BaseCommitizen): bump_pattern = defaults.BUMP_PATTERN bump_map = defaults.BUMP_MAP @@ -136,7 +146,7 @@ def questions(self) -> list[CzQuestion]: }, ] - def message(self, answers: dict) -> str: + def message(self, answers: ConventionalCommitsAnswers) -> str: # type: ignore[override] prefix = answers["prefix"] scope = answers["scope"] subject = answers["subject"] From 18b9729640b7c311831475af7c91d0360de527d7 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 21:46:31 +0800 Subject: [PATCH 672/685] refactor(jira): refactor message --- commitizen/cz/jira/jira.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/commitizen/cz/jira/jira.py b/commitizen/cz/jira/jira.py index eafded615e..8bf8c210b3 100644 --- a/commitizen/cz/jira/jira.py +++ b/commitizen/cz/jira/jira.py @@ -43,18 +43,11 @@ def questions(self) -> list[CzQuestion]: }, ] - def message(self, answers: dict) -> str: + def message(self, answers: dict[str, str]) -> str: return " ".join( - filter( - bool, - [ - answers["message"], - answers["issues"], - answers["workflow"], - answers["time"], - answers["comment"], - ], - ) + x + for k in ("message", "issues", "workflow", "time", "comment") + if (x := answers.get(k)) ) def example(self) -> str: From c1eea63240c1b24f39699f7001717bcc7cd80e93 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Fri, 30 May 2025 22:04:34 +0800 Subject: [PATCH 673/685] style: replace dict with Mapping --- commitizen/cz/base.py | 4 ++-- commitizen/cz/customize/customize.py | 5 +++-- commitizen/cz/jira/jira.py | 3 ++- tests/conftest.py | 6 +++--- tests/test_cz_base.py | 4 +++- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index a30540cae6..cdc1476694 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -1,7 +1,7 @@ from __future__ import annotations from abc import ABCMeta, abstractmethod -from collections.abc import Iterable +from collections.abc import Iterable, Mapping from typing import Any, Callable, Protocol from jinja2 import BaseLoader, PackageLoader @@ -72,7 +72,7 @@ def questions(self) -> Iterable[CzQuestion]: """Questions regarding the commit message.""" @abstractmethod - def message(self, answers: dict) -> str: + def message(self, answers: Mapping[str, Any]) -> str: """Format your git message.""" @property diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index 6581ad444e..d6e9f9a5c3 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -1,6 +1,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any from commitizen.question import CzQuestion @@ -49,7 +50,7 @@ def __init__(self, config: BaseConfig) -> None: def questions(self) -> list[CzQuestion]: return self.custom_settings.get("questions", [{}]) # type: ignore - def message(self, answers: dict) -> str: + def message(self, answers: Mapping[str, Any]) -> str: message_template = Template(self.custom_settings.get("message_template", "")) if getattr(Template, "substitute", None): return message_template.substitute(**answers) # type: ignore diff --git a/commitizen/cz/jira/jira.py b/commitizen/cz/jira/jira.py index 8bf8c210b3..4e6024ff74 100644 --- a/commitizen/cz/jira/jira.py +++ b/commitizen/cz/jira/jira.py @@ -1,4 +1,5 @@ import os +from collections.abc import Mapping from commitizen.cz.base import BaseCommitizen from commitizen.question import CzQuestion @@ -43,7 +44,7 @@ def questions(self) -> list[CzQuestion]: }, ] - def message(self, answers: dict[str, str]) -> str: + def message(self, answers: Mapping[str, str]) -> str: return " ".join( x for k in ("message", "issues", "workflow", "time", "comment") diff --git a/tests/conftest.py b/tests/conftest.py index a4815b3d5a..324ef9bebb 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,7 +3,7 @@ import os import re import tempfile -from collections.abc import Iterator +from collections.abc import Iterator, Mapping from pathlib import Path import pytest @@ -210,7 +210,7 @@ def questions(self) -> list: }, ] - def message(self, answers: dict) -> str: + def message(self, answers: Mapping) -> str: prefix = answers["prefix"] subject = answers.get("subject", "default message").trim() return f"{prefix}: {subject}" @@ -226,7 +226,7 @@ class MockPlugin(BaseCommitizen): def questions(self) -> list[CzQuestion]: return [] - def message(self, answers: dict) -> str: + def message(self, answers: Mapping) -> str: return "" diff --git a/tests/test_cz_base.py b/tests/test_cz_base.py index be93b4ca0f..0ee5a23fb8 100644 --- a/tests/test_cz_base.py +++ b/tests/test_cz_base.py @@ -1,3 +1,5 @@ +from collections.abc import Mapping + import pytest from commitizen.cz.base import BaseCommitizen @@ -7,7 +9,7 @@ class DummyCz(BaseCommitizen): def questions(self): return [{"type": "input", "name": "commit", "message": "Initial commit:\n"}] - def message(self, answers: dict): + def message(self, answers: Mapping): return answers["commit"] From 5df4b1651d58037d604fda1af7b3eca724dfc2c9 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 2 Jun 2025 13:33:19 +0800 Subject: [PATCH 674/685] ci(pyproject.toml): strict check for invalid commit messages --- pyproject.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ee0ecc9ced..58425a81ac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -249,8 +249,8 @@ lint.sequence = [ { cmd = "mypy" }, ] -check-commit.help = "Check the commit message" -check-commit.cmd = "cz -nr 3 check --rev-range origin/master.." +check-commit.help = "Check the commit messages" +check-commit.cmd = "poetry run cz --no-raise 3 check --rev-range origin/master.." test.help = "Run the test suite" test.cmd = "pytest -n 3 --dist=loadfile" @@ -262,7 +262,7 @@ cover.help = "Run the test suite with coverage" cover.ref = "test --cov-report term-missing --cov-report=xml:coverage.xml --cov=commitizen" all.help = "Run all tasks" -all.sequence = ["format", "lint", "cover", "check-commit"] +all.sequence = ["check-commit", "format", "lint", "cover"] "doc:screenshots".help = "Render documentation screenshots" "doc:screenshots".script = "scripts.gen_cli_help_screenshots:gen_cli_help_screenshots" @@ -274,7 +274,7 @@ doc.help = "Live documentation server" doc.cmd = "mkdocs serve" ci.help = "Run all tasks in CI" -ci.sequence = [{ cmd = "pre-commit run --all-files" }, "cover"] +ci.sequence = ["check-commit", { cmd = "pre-commit run --all-files" }, "cover"] ci.env = { SKIP = "no-commit-to-branch" } setup-pre-commit.help = "Install pre-commit hooks" From 188bc3faf96ea2f7eac34b5eee65bf9fcc2648c3 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 2 Jun 2025 14:30:22 +0800 Subject: [PATCH 675/685] docs(pyproject.toml): move check-commit before cover --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 58425a81ac..1de17464a3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -262,7 +262,7 @@ cover.help = "Run the test suite with coverage" cover.ref = "test --cov-report term-missing --cov-report=xml:coverage.xml --cov=commitizen" all.help = "Run all tasks" -all.sequence = ["check-commit", "format", "lint", "cover"] +all.sequence = ["format", "lint", "check-commit", "cover"] "doc:screenshots".help = "Render documentation screenshots" "doc:screenshots".script = "scripts.gen_cli_help_screenshots:gen_cli_help_screenshots" From 8675c289df0e5c37b2867bf16c7c2c41f7eef438 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Sun, 8 Jun 2025 23:10:04 +0800 Subject: [PATCH 676/685] build: add PGH003 and PGH004, add types-colorama --- commitizen/__init__.py | 2 +- commitizen/commands/bump.py | 4 ++-- commitizen/commands/changelog.py | 4 ++-- commitizen/config/base_config.py | 2 +- commitizen/config/toml_config.py | 6 +++--- commitizen/cz/customize/__init__.py | 2 +- commitizen/cz/customize/customize.py | 4 ++-- commitizen/providers/base_provider.py | 4 ++-- commitizen/providers/cargo_provider.py | 12 ++++++------ commitizen/providers/commitizen_provider.py | 2 +- commitizen/providers/poetry_provider.py | 4 ++-- commitizen/version_schemes.py | 4 ++-- poetry.lock | 14 +++++++++++++- pyproject.toml | 14 ++++++-------- tests/commands/test_bump_command.py | 2 +- 15 files changed, 45 insertions(+), 35 deletions(-) diff --git a/commitizen/__init__.py b/commitizen/__init__.py index f16def4441..6db9e6e7db 100644 --- a/commitizen/__init__.py +++ b/commitizen/__init__.py @@ -1,7 +1,7 @@ import logging import logging.config -from colorama import init # type: ignore +from colorama import init from commitizen.cz.base import BaseCommitizen diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index ba252fcf21..2a84483c94 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -331,14 +331,14 @@ def __call__(self) -> None: "dry_run": dry_run, } if self.changelog_to_stdout: - changelog_cmd = Changelog(self.config, {**args, "dry_run": True}) # type: ignore + changelog_cmd = Changelog(self.config, {**args, "dry_run": True}) # type: ignore[typeddict-item] try: changelog_cmd() except DryRunExit: pass args["file_name"] = self.file_name - changelog_cmd = Changelog(self.config, args) # type: ignore + changelog_cmd = Changelog(self.config, args) # type: ignore[arg-type] changelog_cmd() files.append(changelog_cmd.file_name) diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 8ca36bdb9a..dc50eb3ad2 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -177,8 +177,8 @@ def _write_changelog( def _export_template(self) -> None: tpl = changelog.get_changelog_template(self.cz.template_loader, self.template) # TODO: fix the following type ignores - src = Path(tpl.filename) # type: ignore - Path(self.export_template_to).write_text(src.read_text()) # type: ignore + src = Path(tpl.filename) # type: ignore[arg-type] + Path(self.export_template_to).write_text(src.read_text()) # type: ignore[arg-type] def __call__(self) -> None: commit_parser = self.cz.commit_parser diff --git a/commitizen/config/base_config.py b/commitizen/config/base_config.py index 59c0d16a06..4b8f5f05fc 100644 --- a/commitizen/config/base_config.py +++ b/commitizen/config/base_config.py @@ -27,7 +27,7 @@ def settings(self) -> Settings: @property def path(self) -> Path: - return self._path # type: ignore + return self._path # type: ignore[return-value] @path.setter def path(self, path: str | Path) -> None: diff --git a/commitizen/config/toml_config.py b/commitizen/config/toml_config.py index 3571c9c882..2164d3f992 100644 --- a/commitizen/config/toml_config.py +++ b/commitizen/config/toml_config.py @@ -37,7 +37,7 @@ def init_empty_config_content(self) -> None: with open(self.path, "wb") as output_toml_file: if parser.get("tool") is None: parser["tool"] = table() - parser["tool"]["commitizen"] = table() # type: ignore + parser["tool"]["commitizen"] = table() # type: ignore[index] output_toml_file.write(parser.as_string().encode(self.encoding)) def set_key(self, key: str, value: Any) -> Self: @@ -49,7 +49,7 @@ def set_key(self, key: str, value: Any) -> Self: with open(self.path, "rb") as f: parser = parse(f.read()) - parser["tool"]["commitizen"][key] = value # type: ignore + parser["tool"]["commitizen"][key] = value # type: ignore[index] with open(self.path, "wb") as f: f.write(parser.as_string().encode(self.encoding)) return self @@ -68,6 +68,6 @@ def _parse_setting(self, data: bytes | str) -> None: raise InvalidConfigurationError(f"Failed to parse {self.path}: {e}") try: - self.settings.update(doc["tool"]["commitizen"]) # type: ignore + self.settings.update(doc["tool"]["commitizen"]) # type: ignore[index,typeddict-item] # TODO: fix this except exceptions.NonExistentKey: self.is_empty_config = True diff --git a/commitizen/cz/customize/__init__.py b/commitizen/cz/customize/__init__.py index c5af001a79..0aedb9337a 100644 --- a/commitizen/cz/customize/__init__.py +++ b/commitizen/cz/customize/__init__.py @@ -1 +1 @@ -from .customize import CustomizeCommitsCz # noqa +from .customize import CustomizeCommitsCz # noqa: F401 diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index d6e9f9a5c3..dde2685496 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -48,12 +48,12 @@ def __init__(self, config: BaseConfig) -> None: setattr(self, attr_name, value) def questions(self) -> list[CzQuestion]: - return self.custom_settings.get("questions", [{}]) # type: ignore + return self.custom_settings.get("questions", [{}]) # type: ignore[return-value] def message(self, answers: Mapping[str, Any]) -> str: message_template = Template(self.custom_settings.get("message_template", "")) if getattr(Template, "substitute", None): - return message_template.substitute(**answers) # type: ignore + return message_template.substitute(**answers) # type: ignore[attr-defined,no-any-return] # pragma: no cover # TODO: check if we can fix this return message_template.render(**answers) def example(self) -> str: diff --git a/commitizen/providers/base_provider.py b/commitizen/providers/base_provider.py index 27c3123416..c91bfdae20 100644 --- a/commitizen/providers/base_provider.py +++ b/commitizen/providers/base_provider.py @@ -86,7 +86,7 @@ def set_version(self, version: str) -> None: self.file.write_text(tomlkit.dumps(document)) def get(self, document: tomlkit.TOMLDocument) -> str: - return document["project"]["version"] # type: ignore + return document["project"]["version"] # type: ignore[index,return-value] def set(self, document: tomlkit.TOMLDocument, version: str) -> None: - document["project"]["version"] = version # type: ignore + document["project"]["version"] = version # type: ignore[index] diff --git a/commitizen/providers/cargo_provider.py b/commitizen/providers/cargo_provider.py index 87e45cd71c..d453a4aa5b 100644 --- a/commitizen/providers/cargo_provider.py +++ b/commitizen/providers/cargo_provider.py @@ -23,18 +23,18 @@ def lock_file(self) -> Path: def get(self, document: tomlkit.TOMLDocument) -> str: try: - return document["package"]["version"] # type: ignore + return document["package"]["version"] # type: ignore[index,return-value] except tomlkit.exceptions.NonExistentKey: ... - return document["workspace"]["package"]["version"] # type: ignore + return document["workspace"]["package"]["version"] # type: ignore[index,return-value] def set(self, document: tomlkit.TOMLDocument, version: str) -> None: try: - document["workspace"]["package"]["version"] = version # type: ignore + document["workspace"]["package"]["version"] = version # type: ignore[index] return except tomlkit.exceptions.NonExistentKey: ... - document["package"]["version"] = version # type: ignore + document["package"]["version"] = version # type: ignore[index] def set_version(self, version: str) -> None: super().set_version(version) @@ -44,9 +44,9 @@ def set_version(self, version: str) -> None: def set_lock_version(self, version: str) -> None: cargo_toml_content = tomlkit.parse(self.file.read_text()) try: - package_name = cargo_toml_content["package"]["name"] # type: ignore + package_name = cargo_toml_content["package"]["name"] # type: ignore[index] except tomlkit.exceptions.NonExistentKey: - package_name = cargo_toml_content["workspace"]["package"]["name"] # type: ignore + package_name = cargo_toml_content["workspace"]["package"]["name"] # type: ignore[index] cargo_lock_content = tomlkit.parse(self.lock_file.read_text()) packages: tomlkit.items.AoT = cargo_lock_content["package"] # type: ignore[assignment] diff --git a/commitizen/providers/commitizen_provider.py b/commitizen/providers/commitizen_provider.py index 7ce177a604..d9207b19ff 100644 --- a/commitizen/providers/commitizen_provider.py +++ b/commitizen/providers/commitizen_provider.py @@ -9,7 +9,7 @@ class CommitizenProvider(VersionProvider): """ def get_version(self) -> str: - return self.config.settings["version"] # type: ignore + return self.config.settings["version"] # type: ignore[return-value] # TODO: check if we can fix this by tweaking the `Settings` type def set_version(self, version: str) -> None: self.config.set_key("version", version) diff --git a/commitizen/providers/poetry_provider.py b/commitizen/providers/poetry_provider.py index 1dd33f053e..f63b13b793 100644 --- a/commitizen/providers/poetry_provider.py +++ b/commitizen/providers/poetry_provider.py @@ -13,7 +13,7 @@ class PoetryProvider(TomlProvider): filename = "pyproject.toml" def get(self, pyproject: tomlkit.TOMLDocument) -> str: - return pyproject["tool"]["poetry"]["version"] # type: ignore + return pyproject["tool"]["poetry"]["version"] # type: ignore[index,return-value] def set(self, pyproject: tomlkit.TOMLDocument, version: str) -> None: - pyproject["tool"]["poetry"]["version"] = version # type: ignore + pyproject["tool"]["poetry"]["version"] = version # type: ignore[index] diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index a59d3c0aa0..e9f99c5514 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -266,7 +266,7 @@ def bump( if self.local and is_local_version: local_version = self.scheme(self.local).bump(increment) - return self.scheme(f"{self.public}+{local_version}") # type: ignore + return self.scheme(f"{self.public}+{local_version}") # type: ignore[return-value] base = self._get_increment_base(increment, exact_increment) dev_version = self.generate_devrelease(devrelease) @@ -283,7 +283,7 @@ def bump( # TODO: post version return self.scheme( f"{base}{pre_version}{dev_version}{self.generate_build_metadata(build_metadata)}" - ) # type: ignore + ) # type: ignore[return-value] def _get_increment_base( self, increment: Increment | None, exact_increment: bool diff --git a/poetry.lock b/poetry.lock index f9f74513a8..c5c893931a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1746,6 +1746,18 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] +[[package]] +name = "types-colorama" +version = "0.4.15.20240311" +description = "Typing stubs for colorama" +optional = false +python-versions = ">=3.8" +groups = ["linters"] +files = [ + {file = "types-colorama-0.4.15.20240311.tar.gz", hash = "sha256:a28e7f98d17d2b14fb9565d32388e419f4108f557a7d939a66319969b2b99c7a"}, + {file = "types_colorama-0.4.15.20240311-py3-none-any.whl", hash = "sha256:6391de60ddc0db3f147e31ecb230006a6823e81e380862ffca1e4695c13a0b8e"}, +] + [[package]] name = "types-deprecated" version = "1.2.15.20250304" @@ -2014,4 +2026,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "10e298e9b4d2f2d81a82b43649a68d557ed3e9824b3b210b5b6a607935f9fe9d" +content-hash = "f35cf57718e28836cf1e70b33edab9ce623b01a7f2d31d712585554721f6d403" diff --git a/pyproject.toml b/pyproject.toml index 1de17464a3..0d135954a5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -126,6 +126,7 @@ types-deprecated = "^1.2.9.2" types-python-dateutil = "^2.8.19.13" types-PyYAML = ">=5.4.3,<7.0.0" types-termcolor = "^0.1.1" +types-colorama = "^0.4.15.20240311" [tool.poetry.group.documentation.dependencies] mkdocs = "^1.4.2" @@ -198,6 +199,9 @@ select = [ "UP", # isort "I", + # pygrep-hooks + "PGH003", + "PGH004", # unsorted-dunder-all "RUF022", # unused-noqa @@ -238,16 +242,10 @@ poetry_command = "" [tool.poe.tasks] format.help = "Format the code" -format.sequence = [ - { cmd = "ruff check --fix" }, - { cmd = "ruff format" }, -] +format.sequence = [{ cmd = "ruff check --fix" }, { cmd = "ruff format" }] lint.help = "Lint the code" -lint.sequence = [ - { cmd = "ruff check" }, - { cmd = "mypy" }, -] +lint.sequence = [{ cmd = "ruff check" }, { cmd = "mypy" }] check-commit.help = "Check the commit messages" check-commit.cmd = "poetry run cz --no-raise 3 check --rev-range origin/master.." diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index 64b810e4de..59297b1726 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -1721,7 +1721,7 @@ def test_is_initial_tag(mocker: MockFixture, tmp_commitizen_project): "extras": None, } - bump_cmd = bump.Bump(config, arguments) # type: ignore + bump_cmd = bump.Bump(config, arguments) # type: ignore[arg-type] # Test case 1: No current tag, not yes mode mocker.patch("questionary.confirm", return_value=mocker.Mock(ask=lambda: True)) From c710c9f541ae452547fdce5c360929f007ec4867 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 14:18:28 +0000 Subject: [PATCH 677/685] =?UTF-8?q?bump:=20version=204.8.2=20=E2=86=92=204?= =?UTF-8?q?.8.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 60 +++++++++++++++++++++++++++++++++++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 +-- 4 files changed, 64 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4e108eb9b9..9e09fb63e8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.8.2 # automatically updated by Commitizen + rev: v4.8.3 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b737a851a..76b6e36e94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,63 @@ +## v4.8.3 (2025-06-09) + +### Fix + +- **cli**: update description for deprecate warning +- **commit**: emit deprecated warning of cz commit -s +- **Check**: make parameters backward compatiable +- **BaseConfig**: mypy error +- **deprecated**: mark deprecate in v5 +- **defaults**: add non-capitalized default constants back and deprecated warning + +### Refactor + +- **jira**: refactor message +- **conventional_commits**: use TypedDict for answers +- **conventional_commits**: make schema_pattern more readable +- do not guess if changelog format is provided +- **check**: compile once and rename variable +- **questions**: type questions with TypedDict +- **bump**: simplify nested if +- **git**: retype get_commits parameter to make it more friendly to call sites +- **git**: simplify tag logic +- **bump**: eliminate similar patterns in code +- **bump**: use any to replace 'or' chain +- remove unnecessary bool() and remove Any type from TypedDict get +- **bump**: improve readability and still bypass mypy check +- **commands**: remove unused args, type version command args +- **commit**: type commit args +- **check**: type CheckArgs arguments +- **check**: remove unused argument +- **changelog**: type untyped arguments +- **bump**: TypedDict for bump argument +- make methods protected, better type +- **conventional_commits**: remove unnecessary checks +- fix mypy output and better type +- **BaseCommitizen**: remove unused process_commit +- remove `TypeError` handling since `Python >=3.9` is required +- add comment clarifying `no_raise` parsing to `list[int]` +- **cli.py**: add type hints +- **mypy**: remove `unused-ignore` +- **changelog**: better typing, yield +- **cli**: early return and improve test coverage +- **git**: extract _create_commit_cmd_string +- misc cleanup +- **bump**: clean up +- **bump**: add type for out, replace function with re escape +- **BaseConfig**: use setter +- **changelog**: minor cleanup +- **git**: refactor get_tag_names +- **EOLType**: add eol enum back and reorganize methods +- **git**: code cleanup and better test coverage +- **commit**: simplify call +- **version_scheme**: cleanup +- improve readability and fix typos + +### Perf + +- **bump**: avoid unnecessary list construction and rename variable to avoid confusion +- **tags**: use set + ## v4.8.2 (2025-05-22) ### Refactor diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 8e288a597c..af82c57223 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.8.2" +__version__ = "4.8.3" diff --git a/pyproject.toml b/pyproject.toml index 0d135954a5..6990741957 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.8.2" +version = "4.8.3" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ @@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "4.8.2" +version = "4.8.3" tag_format = "v$version" version_files = [ "pyproject.toml:version", From a5e3cc6e11148f4978a4771cb9ed46137ee61b0e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 14:18:53 +0000 Subject: [PATCH 678/685] docs(cli/screenshots): update CLI screenshots [skip ci] --- docs/images/cli_help/cz_bump___help.svg | 348 +++++++++++----------- docs/images/cli_help/cz_commit___help.svg | 111 +++---- 2 files changed, 230 insertions(+), 229 deletions(-) diff --git a/docs/images/cli_help/cz_bump___help.svg b/docs/images/cli_help/cz_bump___help.svg index 7f27636ddf..7d007df312 100644 --- a/docs/images/cli_help/cz_bump___help.svg +++ b/docs/images/cli_help/cz_bump___help.svg @@ -19,273 +19,273 @@ font-weight: 700; } - .terminal-243650528-matrix { + .terminal-1655558888-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-243650528-title { + .terminal-1655558888-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-243650528-r1 { fill: #c5c8c6 } -.terminal-243650528-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-243650528-r3 { fill: #68a0b3;font-weight: bold } -.terminal-243650528-r4 { fill: #98a84b } + .terminal-1655558888-r1 { fill: #c5c8c6 } +.terminal-1655558888-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-1655558888-r3 { fill: #68a0b3;font-weight: bold } +.terminal-1655558888-r4 { fill: #98a84b } </style> <defs> - <clipPath id="terminal-243650528-clip-terminal"> + <clipPath id="terminal-1655558888-clip-terminal"> <rect x="0" y="0" width="975.0" height="2024.1999999999998" /> </clipPath> - <clipPath id="terminal-243650528-line-0"> + <clipPath id="terminal-1655558888-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-1"> +<clipPath id="terminal-1655558888-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-2"> +<clipPath id="terminal-1655558888-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-3"> +<clipPath id="terminal-1655558888-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-4"> +<clipPath id="terminal-1655558888-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-5"> +<clipPath id="terminal-1655558888-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-6"> +<clipPath id="terminal-1655558888-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-7"> +<clipPath id="terminal-1655558888-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-8"> +<clipPath id="terminal-1655558888-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-9"> +<clipPath id="terminal-1655558888-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-10"> +<clipPath id="terminal-1655558888-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-11"> +<clipPath id="terminal-1655558888-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-12"> +<clipPath id="terminal-1655558888-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-13"> +<clipPath id="terminal-1655558888-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-14"> +<clipPath id="terminal-1655558888-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-15"> +<clipPath id="terminal-1655558888-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-16"> +<clipPath id="terminal-1655558888-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-17"> +<clipPath id="terminal-1655558888-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-18"> +<clipPath id="terminal-1655558888-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-19"> +<clipPath id="terminal-1655558888-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-20"> +<clipPath id="terminal-1655558888-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-21"> +<clipPath id="terminal-1655558888-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-22"> +<clipPath id="terminal-1655558888-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-23"> +<clipPath id="terminal-1655558888-line-23"> <rect x="0" y="562.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-24"> +<clipPath id="terminal-1655558888-line-24"> <rect x="0" y="587.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-25"> +<clipPath id="terminal-1655558888-line-25"> <rect x="0" y="611.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-26"> +<clipPath id="terminal-1655558888-line-26"> <rect x="0" y="635.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-27"> +<clipPath id="terminal-1655558888-line-27"> <rect x="0" y="660.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-28"> +<clipPath id="terminal-1655558888-line-28"> <rect x="0" y="684.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-29"> +<clipPath id="terminal-1655558888-line-29"> <rect x="0" y="709.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-30"> +<clipPath id="terminal-1655558888-line-30"> <rect x="0" y="733.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-31"> +<clipPath id="terminal-1655558888-line-31"> <rect x="0" y="757.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-32"> +<clipPath id="terminal-1655558888-line-32"> <rect x="0" y="782.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-33"> +<clipPath id="terminal-1655558888-line-33"> <rect x="0" y="806.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-34"> +<clipPath id="terminal-1655558888-line-34"> <rect x="0" y="831.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-35"> +<clipPath id="terminal-1655558888-line-35"> <rect x="0" y="855.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-36"> +<clipPath id="terminal-1655558888-line-36"> <rect x="0" y="879.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-37"> +<clipPath id="terminal-1655558888-line-37"> <rect x="0" y="904.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-38"> +<clipPath id="terminal-1655558888-line-38"> <rect x="0" y="928.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-39"> +<clipPath id="terminal-1655558888-line-39"> <rect x="0" y="953.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-40"> +<clipPath id="terminal-1655558888-line-40"> <rect x="0" y="977.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-41"> +<clipPath id="terminal-1655558888-line-41"> <rect x="0" y="1001.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-42"> +<clipPath id="terminal-1655558888-line-42"> <rect x="0" y="1026.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-43"> +<clipPath id="terminal-1655558888-line-43"> <rect x="0" y="1050.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-44"> +<clipPath id="terminal-1655558888-line-44"> <rect x="0" y="1075.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-45"> +<clipPath id="terminal-1655558888-line-45"> <rect x="0" y="1099.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-46"> +<clipPath id="terminal-1655558888-line-46"> <rect x="0" y="1123.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-47"> +<clipPath id="terminal-1655558888-line-47"> <rect x="0" y="1148.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-48"> +<clipPath id="terminal-1655558888-line-48"> <rect x="0" y="1172.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-49"> +<clipPath id="terminal-1655558888-line-49"> <rect x="0" y="1197.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-50"> +<clipPath id="terminal-1655558888-line-50"> <rect x="0" y="1221.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-51"> +<clipPath id="terminal-1655558888-line-51"> <rect x="0" y="1245.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-52"> +<clipPath id="terminal-1655558888-line-52"> <rect x="0" y="1270.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-53"> +<clipPath id="terminal-1655558888-line-53"> <rect x="0" y="1294.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-54"> +<clipPath id="terminal-1655558888-line-54"> <rect x="0" y="1319.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-55"> +<clipPath id="terminal-1655558888-line-55"> <rect x="0" y="1343.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-56"> +<clipPath id="terminal-1655558888-line-56"> <rect x="0" y="1367.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-57"> +<clipPath id="terminal-1655558888-line-57"> <rect x="0" y="1392.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-58"> +<clipPath id="terminal-1655558888-line-58"> <rect x="0" y="1416.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-59"> +<clipPath id="terminal-1655558888-line-59"> <rect x="0" y="1441.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-60"> +<clipPath id="terminal-1655558888-line-60"> <rect x="0" y="1465.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-61"> +<clipPath id="terminal-1655558888-line-61"> <rect x="0" y="1489.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-62"> +<clipPath id="terminal-1655558888-line-62"> <rect x="0" y="1514.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-63"> +<clipPath id="terminal-1655558888-line-63"> <rect x="0" y="1538.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-64"> +<clipPath id="terminal-1655558888-line-64"> <rect x="0" y="1563.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-65"> +<clipPath id="terminal-1655558888-line-65"> <rect x="0" y="1587.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-66"> +<clipPath id="terminal-1655558888-line-66"> <rect x="0" y="1611.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-67"> +<clipPath id="terminal-1655558888-line-67"> <rect x="0" y="1636.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-68"> +<clipPath id="terminal-1655558888-line-68"> <rect x="0" y="1660.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-69"> +<clipPath id="terminal-1655558888-line-69"> <rect x="0" y="1685.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-70"> +<clipPath id="terminal-1655558888-line-70"> <rect x="0" y="1709.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-71"> +<clipPath id="terminal-1655558888-line-71"> <rect x="0" y="1733.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-72"> +<clipPath id="terminal-1655558888-line-72"> <rect x="0" y="1758.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-73"> +<clipPath id="terminal-1655558888-line-73"> <rect x="0" y="1782.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-74"> +<clipPath id="terminal-1655558888-line-74"> <rect x="0" y="1807.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-75"> +<clipPath id="terminal-1655558888-line-75"> <rect x="0" y="1831.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-76"> +<clipPath id="terminal-1655558888-line-76"> <rect x="0" y="1855.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-77"> +<clipPath id="terminal-1655558888-line-77"> <rect x="0" y="1880.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-78"> +<clipPath id="terminal-1655558888-line-78"> <rect x="0" y="1904.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-79"> +<clipPath id="terminal-1655558888-line-79"> <rect x="0" y="1929.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-80"> +<clipPath id="terminal-1655558888-line-80"> <rect x="0" y="1953.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-243650528-line-81"> +<clipPath id="terminal-1655558888-line-81"> <rect x="0" y="1977.9" width="976" height="24.65"/> </clipPath> </defs> @@ -297,92 +297,92 @@ <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-243650528-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-1655558888-clip-terminal)"> - <g class="terminal-243650528-matrix"> - <text class="terminal-243650528-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-243650528-line-0)">$ cz bump --help</text><text class="terminal-243650528-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-243650528-line-0)"> -</text><text class="terminal-243650528-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-243650528-line-1)">usage: cz bump </text><text class="terminal-243650528-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">[</text><text class="terminal-243650528-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-243650528-line-1)">-h</text><text class="terminal-243650528-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">]</text><text class="terminal-243650528-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">[</text><text class="terminal-243650528-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-243650528-line-1)">--dry-run</text><text class="terminal-243650528-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">]</text><text class="terminal-243650528-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">[</text><text class="terminal-243650528-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-243650528-line-1)">--files-only</text><text class="terminal-243650528-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">]</text><text class="terminal-243650528-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">[</text><text class="terminal-243650528-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-243650528-line-1)">--local-version</text><text class="terminal-243650528-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">]</text><text class="terminal-243650528-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">[</text><text class="terminal-243650528-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-243650528-line-1)">--changelog</text><text class="terminal-243650528-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)">]</text><text class="terminal-243650528-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-243650528-line-1)"> -</text><text class="terminal-243650528-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)">[</text><text class="terminal-243650528-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-243650528-line-2)">--no-verify</text><text class="terminal-243650528-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)">]</text><text class="terminal-243650528-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)">[</text><text class="terminal-243650528-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-243650528-line-2)">--yes</text><text class="terminal-243650528-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)">]</text><text class="terminal-243650528-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)">[</text><text class="terminal-243650528-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-243650528-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-243650528-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)">]</text><text class="terminal-243650528-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-243650528-line-2)"> -</text><text class="terminal-243650528-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)">[</text><text class="terminal-243650528-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-243650528-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-243650528-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)">]</text><text class="terminal-243650528-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)">[</text><text class="terminal-243650528-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-243650528-line-3)">--prerelease </text><text class="terminal-243650528-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)">{</text><text class="terminal-243650528-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-243650528-line-3)">alpha,beta,rc</text><text class="terminal-243650528-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)">}</text><text class="terminal-243650528-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)">]</text><text class="terminal-243650528-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-243650528-line-3)"> -</text><text class="terminal-243650528-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)">[</text><text class="terminal-243650528-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-243650528-line-4)">--devrelease DEVRELEASE</text><text class="terminal-243650528-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)">]</text><text class="terminal-243650528-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)">[</text><text class="terminal-243650528-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-243650528-line-4)">--increment </text><text class="terminal-243650528-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)">{</text><text class="terminal-243650528-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-243650528-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-243650528-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)">}</text><text class="terminal-243650528-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)">]</text><text class="terminal-243650528-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-243650528-line-4)"> -</text><text class="terminal-243650528-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)">[</text><text class="terminal-243650528-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-243650528-line-5)">--increment-mode </text><text class="terminal-243650528-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)">{</text><text class="terminal-243650528-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-243650528-line-5)">linear,exact</text><text class="terminal-243650528-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)">}</text><text class="terminal-243650528-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)">]</text><text class="terminal-243650528-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)">[</text><text class="terminal-243650528-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-243650528-line-5)">--check-consistency</text><text class="terminal-243650528-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)">]</text><text class="terminal-243650528-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-243650528-line-5)"> -</text><text class="terminal-243650528-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-243650528-line-6)">[</text><text class="terminal-243650528-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-243650528-line-6)">--annotated-tag</text><text class="terminal-243650528-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-243650528-line-6)">]</text><text class="terminal-243650528-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-243650528-line-6)"> -</text><text class="terminal-243650528-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-243650528-line-7)">[</text><text class="terminal-243650528-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-243650528-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-243650528-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-243650528-line-7)">]</text><text class="terminal-243650528-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-243650528-line-7)">[</text><text class="terminal-243650528-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-243650528-line-7)">--gpg-sign</text><text class="terminal-243650528-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-243650528-line-7)">]</text><text class="terminal-243650528-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-243650528-line-7)"> -</text><text class="terminal-243650528-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)">[</text><text class="terminal-243650528-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-243650528-line-8)">--changelog-to-stdout</text><text class="terminal-243650528-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)">]</text><text class="terminal-243650528-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)">[</text><text class="terminal-243650528-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-243650528-line-8)">--git-output-to-stderr</text><text class="terminal-243650528-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)">]</text><text class="terminal-243650528-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)">[</text><text class="terminal-243650528-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-243650528-line-8)">--retry</text><text class="terminal-243650528-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)">]</text><text class="terminal-243650528-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-243650528-line-8)"> -</text><text class="terminal-243650528-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)">[</text><text class="terminal-243650528-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-243650528-line-9)">--major-version-zero</text><text class="terminal-243650528-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)">]</text><text class="terminal-243650528-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)">[</text><text class="terminal-243650528-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-243650528-line-9)">--template TEMPLATE</text><text class="terminal-243650528-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)">]</text><text class="terminal-243650528-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)">[</text><text class="terminal-243650528-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-243650528-line-9)">--extra EXTRA</text><text class="terminal-243650528-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)">]</text><text class="terminal-243650528-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-243650528-line-9)"> -</text><text class="terminal-243650528-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-243650528-line-10)">[</text><text class="terminal-243650528-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-243650528-line-10)">--file-name FILE_NAME</text><text class="terminal-243650528-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-243650528-line-10)">]</text><text class="terminal-243650528-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-243650528-line-10)">[</text><text class="terminal-243650528-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-243650528-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-243650528-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-243650528-line-10)">]</text><text class="terminal-243650528-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-243650528-line-10)"> -</text><text class="terminal-243650528-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-243650528-line-11)">[</text><text class="terminal-243650528-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-243650528-line-11)">--version-scheme </text><text class="terminal-243650528-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-243650528-line-11)">{</text><text class="terminal-243650528-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-243650528-line-11)">pep440,semver,semver2</text><text class="terminal-243650528-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-243650528-line-11)">}</text><text class="terminal-243650528-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-243650528-line-11)">]</text><text class="terminal-243650528-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-243650528-line-11)"> -</text><text class="terminal-243650528-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-243650528-line-12)">[</text><text class="terminal-243650528-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-243650528-line-12)">--version-type </text><text class="terminal-243650528-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-243650528-line-12)">{</text><text class="terminal-243650528-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-243650528-line-12)">pep440,semver,semver2</text><text class="terminal-243650528-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-243650528-line-12)">}</text><text class="terminal-243650528-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-243650528-line-12)">]</text><text class="terminal-243650528-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-243650528-line-12)"> -</text><text class="terminal-243650528-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-243650528-line-13)">[</text><text class="terminal-243650528-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-243650528-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-243650528-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-243650528-line-13)">]</text><text class="terminal-243650528-r2" x="597.8" y="337.2" textLength="12.2" clip-path="url(#terminal-243650528-line-13)">[</text><text class="terminal-243650528-r1" x="610" y="337.2" textLength="122" clip-path="url(#terminal-243650528-line-13)">--get-next</text><text class="terminal-243650528-r2" x="732" y="337.2" textLength="12.2" clip-path="url(#terminal-243650528-line-13)">]</text><text class="terminal-243650528-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-243650528-line-13)"> -</text><text class="terminal-243650528-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-243650528-line-14)">[</text><text class="terminal-243650528-r1" x="195.2" y="361.6" textLength="207.4" clip-path="url(#terminal-243650528-line-14)">--allow-no-commit</text><text class="terminal-243650528-r2" x="402.6" y="361.6" textLength="12.2" clip-path="url(#terminal-243650528-line-14)">]</text><text class="terminal-243650528-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-243650528-line-14)"> -</text><text class="terminal-243650528-r2" x="183" y="386" textLength="12.2" clip-path="url(#terminal-243650528-line-15)">[</text><text class="terminal-243650528-r1" x="195.2" y="386" textLength="170.8" clip-path="url(#terminal-243650528-line-15)">MANUAL_VERSION</text><text class="terminal-243650528-r2" x="366" y="386" textLength="12.2" clip-path="url(#terminal-243650528-line-15)">]</text><text class="terminal-243650528-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-243650528-line-15)"> -</text><text class="terminal-243650528-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-243650528-line-16)"> -</text><text class="terminal-243650528-r1" x="0" y="434.8" textLength="512.4" clip-path="url(#terminal-243650528-line-17)">bump semantic version based on the git log</text><text class="terminal-243650528-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-243650528-line-17)"> -</text><text class="terminal-243650528-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-243650528-line-18)"> -</text><text class="terminal-243650528-r1" x="0" y="483.6" textLength="256.2" clip-path="url(#terminal-243650528-line-19)">positional arguments:</text><text class="terminal-243650528-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-243650528-line-19)"> -</text><text class="terminal-243650528-r1" x="0" y="508" textLength="610" clip-path="url(#terminal-243650528-line-20)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-243650528-r2" x="610" y="508" textLength="12.2" clip-path="url(#terminal-243650528-line-20)">(</text><text class="terminal-243650528-r1" x="622.2" y="508" textLength="61" clip-path="url(#terminal-243650528-line-20)">e.g: </text><text class="terminal-243650528-r3" x="683.2" y="508" textLength="36.6" clip-path="url(#terminal-243650528-line-20)">1.5</text><text class="terminal-243650528-r1" x="719.8" y="508" textLength="12.2" clip-path="url(#terminal-243650528-line-20)">.</text><text class="terminal-243650528-r3" x="732" y="508" textLength="12.2" clip-path="url(#terminal-243650528-line-20)">3</text><text class="terminal-243650528-r2" x="744.2" y="508" textLength="12.2" clip-path="url(#terminal-243650528-line-20)">)</text><text class="terminal-243650528-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-243650528-line-20)"> -</text><text class="terminal-243650528-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-243650528-line-21)"> -</text><text class="terminal-243650528-r1" x="0" y="556.8" textLength="97.6" clip-path="url(#terminal-243650528-line-22)">options:</text><text class="terminal-243650528-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-243650528-line-22)"> -</text><text class="terminal-243650528-r1" x="0" y="581.2" textLength="671" clip-path="url(#terminal-243650528-line-23)">  -h, --help            show this help message and exit</text><text class="terminal-243650528-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-243650528-line-23)"> -</text><text class="terminal-243650528-r1" x="0" y="605.6" textLength="915" clip-path="url(#terminal-243650528-line-24)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-243650528-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-243650528-line-24)"> -</text><text class="terminal-243650528-r1" x="0" y="630" textLength="793" clip-path="url(#terminal-243650528-line-25)">  --files-only          bump version in the files from the config</text><text class="terminal-243650528-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-243650528-line-25)"> -</text><text class="terminal-243650528-r1" x="0" y="654.4" textLength="719.8" clip-path="url(#terminal-243650528-line-26)">  --local-version       bump only the local version portion</text><text class="terminal-243650528-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-243650528-line-26)"> -</text><text class="terminal-243650528-r1" x="0" y="678.8" textLength="841.8" clip-path="url(#terminal-243650528-line-27)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-243650528-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-243650528-line-27)"> -</text><text class="terminal-243650528-r1" x="0" y="703.2" textLength="902.8" clip-path="url(#terminal-243650528-line-28)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-243650528-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-243650528-line-28)"> -</text><text class="terminal-243650528-r1" x="0" y="727.6" textLength="353.8" clip-path="url(#terminal-243650528-line-29)">                        hooks</text><text class="terminal-243650528-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-243650528-line-29)"> -</text><text class="terminal-243650528-r1" x="0" y="752" textLength="719.8" clip-path="url(#terminal-243650528-line-30)">  --yes                 accept automatically questions done</text><text class="terminal-243650528-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-243650528-line-30)"> -</text><text class="terminal-243650528-r1" x="0" y="776.4" textLength="305" clip-path="url(#terminal-243650528-line-31)">  --tag-format TAG_FORMAT</text><text class="terminal-243650528-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-243650528-line-31)"> -</text><text class="terminal-243650528-r1" x="0" y="800.8" textLength="939.4" clip-path="url(#terminal-243650528-line-32)">                        the format used to tag the commit and read it, use it</text><text class="terminal-243650528-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-243650528-line-32)"> -</text><text class="terminal-243650528-r1" x="0" y="825.2" textLength="866.2" clip-path="url(#terminal-243650528-line-33)">                        in existing projects, wrap around simple quotes</text><text class="terminal-243650528-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-243650528-line-33)"> -</text><text class="terminal-243650528-r1" x="0" y="849.6" textLength="353.8" clip-path="url(#terminal-243650528-line-34)">  --bump-message BUMP_MESSAGE</text><text class="terminal-243650528-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-243650528-line-34)"> -</text><text class="terminal-243650528-r1" x="0" y="874" textLength="902.8" clip-path="url(#terminal-243650528-line-35)">                        template used to create the release commit, useful</text><text class="terminal-243650528-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-243650528-line-35)"> -</text><text class="terminal-243650528-r1" x="0" y="898.4" textLength="536.8" clip-path="url(#terminal-243650528-line-36)">                        when working with CI</text><text class="terminal-243650528-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-243650528-line-36)"> -</text><text class="terminal-243650528-r1" x="0" y="922.8" textLength="244" clip-path="url(#terminal-243650528-line-37)">  --prerelease, -pr </text><text class="terminal-243650528-r2" x="244" y="922.8" textLength="12.2" clip-path="url(#terminal-243650528-line-37)">{</text><text class="terminal-243650528-r1" x="256.2" y="922.8" textLength="158.6" clip-path="url(#terminal-243650528-line-37)">alpha,beta,rc</text><text class="terminal-243650528-r2" x="414.8" y="922.8" textLength="12.2" clip-path="url(#terminal-243650528-line-37)">}</text><text class="terminal-243650528-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-243650528-line-37)"> -</text><text class="terminal-243650528-r1" x="0" y="947.2" textLength="597.8" clip-path="url(#terminal-243650528-line-38)">                        choose type of prerelease</text><text class="terminal-243650528-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-243650528-line-38)"> -</text><text class="terminal-243650528-r1" x="0" y="971.6" textLength="353.8" clip-path="url(#terminal-243650528-line-39)">  --devrelease, -d DEVRELEASE</text><text class="terminal-243650528-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-243650528-line-39)"> -</text><text class="terminal-243650528-r1" x="0" y="996" textLength="841.8" clip-path="url(#terminal-243650528-line-40)">                        specify non-negative integer for dev. release</text><text class="terminal-243650528-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-243650528-line-40)"> -</text><text class="terminal-243650528-r1" x="0" y="1020.4" textLength="170.8" clip-path="url(#terminal-243650528-line-41)">  --increment </text><text class="terminal-243650528-r2" x="170.8" y="1020.4" textLength="12.2" clip-path="url(#terminal-243650528-line-41)">{</text><text class="terminal-243650528-r1" x="183" y="1020.4" textLength="207.4" clip-path="url(#terminal-243650528-line-41)">MAJOR,MINOR,PATCH</text><text class="terminal-243650528-r2" x="390.4" y="1020.4" textLength="12.2" clip-path="url(#terminal-243650528-line-41)">}</text><text class="terminal-243650528-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-243650528-line-41)"> -</text><text class="terminal-243650528-r1" x="0" y="1044.8" textLength="756.4" clip-path="url(#terminal-243650528-line-42)">                        manually specify the desired increment</text><text class="terminal-243650528-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-243650528-line-42)"> -</text><text class="terminal-243650528-r1" x="0" y="1069.2" textLength="231.8" clip-path="url(#terminal-243650528-line-43)">  --increment-mode </text><text class="terminal-243650528-r2" x="231.8" y="1069.2" textLength="12.2" clip-path="url(#terminal-243650528-line-43)">{</text><text class="terminal-243650528-r1" x="244" y="1069.2" textLength="146.4" clip-path="url(#terminal-243650528-line-43)">linear,exact</text><text class="terminal-243650528-r2" x="390.4" y="1069.2" textLength="12.2" clip-path="url(#terminal-243650528-line-43)">}</text><text class="terminal-243650528-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-243650528-line-43)"> -</text><text class="terminal-243650528-r1" x="0" y="1093.6" textLength="902.8" clip-path="url(#terminal-243650528-line-44)">                        set the method by which the new version is chosen.</text><text class="terminal-243650528-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-243650528-line-44)"> -</text><text class="terminal-243650528-r4" x="292.8" y="1118" textLength="97.6" clip-path="url(#terminal-243650528-line-45)">'linear'</text><text class="terminal-243650528-r2" x="402.6" y="1118" textLength="12.2" clip-path="url(#terminal-243650528-line-45)">(</text><text class="terminal-243650528-r1" x="414.8" y="1118" textLength="85.4" clip-path="url(#terminal-243650528-line-45)">default</text><text class="terminal-243650528-r2" x="500.2" y="1118" textLength="12.2" clip-path="url(#terminal-243650528-line-45)">)</text><text class="terminal-243650528-r1" x="512.4" y="1118" textLength="414.8" clip-path="url(#terminal-243650528-line-45)"> guesses the next version based on</text><text class="terminal-243650528-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-243650528-line-45)"> -</text><text class="terminal-243650528-r1" x="0" y="1142.4" textLength="939.4" clip-path="url(#terminal-243650528-line-46)">                        typical linear version progression, such that bumping</text><text class="terminal-243650528-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-243650528-line-46)"> -</text><text class="terminal-243650528-r1" x="0" y="1166.8" textLength="866.2" clip-path="url(#terminal-243650528-line-47)">                        of a pre-release with lower precedence than the</text><text class="terminal-243650528-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-243650528-line-47)"> -</text><text class="terminal-243650528-r1" x="0" y="1191.2" textLength="939.4" clip-path="url(#terminal-243650528-line-48)">                        current pre-release phase maintains the current phase</text><text class="terminal-243650528-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-243650528-line-48)"> -</text><text class="terminal-243650528-r1" x="0" y="1215.6" textLength="561.2" clip-path="url(#terminal-243650528-line-49)">                        of higher precedence. </text><text class="terminal-243650528-r4" x="561.2" y="1215.6" textLength="85.4" clip-path="url(#terminal-243650528-line-49)">'exact'</text><text class="terminal-243650528-r1" x="646.6" y="1215.6" textLength="305" clip-path="url(#terminal-243650528-line-49)"> applies the changes that</text><text class="terminal-243650528-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-243650528-line-49)"> -</text><text class="terminal-243650528-r1" x="0" y="1240" textLength="536.8" clip-path="url(#terminal-243650528-line-50)">                        have been specified </text><text class="terminal-243650528-r2" x="536.8" y="1240" textLength="12.2" clip-path="url(#terminal-243650528-line-50)">(</text><text class="terminal-243650528-r1" x="549" y="1240" textLength="353.8" clip-path="url(#terminal-243650528-line-50)">or determined from the commit</text><text class="terminal-243650528-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-243650528-line-50)"> -</text><text class="terminal-243650528-r1" x="0" y="1264.4" textLength="329.4" clip-path="url(#terminal-243650528-line-51)">                        log</text><text class="terminal-243650528-r2" x="329.4" y="1264.4" textLength="12.2" clip-path="url(#terminal-243650528-line-51)">)</text><text class="terminal-243650528-r1" x="341.6" y="1264.4" textLength="585.6" clip-path="url(#terminal-243650528-line-51)"> without interpretation, such that the increment</text><text class="terminal-243650528-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-243650528-line-51)"> -</text><text class="terminal-243650528-r1" x="0" y="1288.8" textLength="707.6" clip-path="url(#terminal-243650528-line-52)">                        and pre-release are always honored</text><text class="terminal-243650528-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-243650528-line-52)"> -</text><text class="terminal-243650528-r1" x="0" y="1313.2" textLength="317.2" clip-path="url(#terminal-243650528-line-53)">  --check-consistency, -cc</text><text class="terminal-243650528-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-243650528-line-53)"> -</text><text class="terminal-243650528-r1" x="0" y="1337.6" textLength="951.6" clip-path="url(#terminal-243650528-line-54)">                        check consistency among versions defined in commitizen</text><text class="terminal-243650528-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-243650528-line-54)"> -</text><text class="terminal-243650528-r1" x="0" y="1362" textLength="671" clip-path="url(#terminal-243650528-line-55)">                        configuration and version_files</text><text class="terminal-243650528-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-243650528-line-55)"> -</text><text class="terminal-243650528-r1" x="0" y="1386.4" textLength="866.2" clip-path="url(#terminal-243650528-line-56)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-243650528-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-243650528-line-56)"> -</text><text class="terminal-243650528-r1" x="0" y="1410.8" textLength="646.6" clip-path="url(#terminal-243650528-line-57)">  --annotated-tag-message, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-243650528-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-243650528-line-57)"> -</text><text class="terminal-243650528-r1" x="0" y="1435.2" textLength="634.4" clip-path="url(#terminal-243650528-line-58)">                        create annotated tag message</text><text class="terminal-243650528-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-243650528-line-58)"> -</text><text class="terminal-243650528-r1" x="0" y="1459.6" textLength="719.8" clip-path="url(#terminal-243650528-line-59)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-243650528-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-243650528-line-59)"> -</text><text class="terminal-243650528-r1" x="0" y="1484" textLength="280.6" clip-path="url(#terminal-243650528-line-60)">  --changelog-to-stdout</text><text class="terminal-243650528-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-243650528-line-60)"> -</text><text class="terminal-243650528-r1" x="0" y="1508.4" textLength="658.8" clip-path="url(#terminal-243650528-line-61)">                        Output changelog to the stdout</text><text class="terminal-243650528-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-243650528-line-61)"> -</text><text class="terminal-243650528-r1" x="0" y="1532.8" textLength="292.8" clip-path="url(#terminal-243650528-line-62)">  --git-output-to-stderr</text><text class="terminal-243650528-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-243650528-line-62)"> -</text><text class="terminal-243650528-r1" x="0" y="1557.2" textLength="646.6" clip-path="url(#terminal-243650528-line-63)">                        Redirect git output to stderr</text><text class="terminal-243650528-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-243650528-line-63)"> -</text><text class="terminal-243650528-r1" x="0" y="1581.6" textLength="744.2" clip-path="url(#terminal-243650528-line-64)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-243650528-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-243650528-line-64)"> -</text><text class="terminal-243650528-r1" x="0" y="1606" textLength="939.4" clip-path="url(#terminal-243650528-line-65)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-243650528-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-243650528-line-65)"> -</text><text class="terminal-243650528-r1" x="0" y="1630.4" textLength="305" clip-path="url(#terminal-243650528-line-66)">  --template, -t TEMPLATE</text><text class="terminal-243650528-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-243650528-line-66)"> -</text><text class="terminal-243650528-r1" x="0" y="1654.8" textLength="646.6" clip-path="url(#terminal-243650528-line-67)">                        changelog template file name </text><text class="terminal-243650528-r2" x="646.6" y="1654.8" textLength="12.2" clip-path="url(#terminal-243650528-line-67)">(</text><text class="terminal-243650528-r1" x="658.8" y="1654.8" textLength="280.6" clip-path="url(#terminal-243650528-line-67)">relative to the current</text><text class="terminal-243650528-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-243650528-line-67)"> -</text><text class="terminal-243650528-r1" x="0" y="1679.2" textLength="500.2" clip-path="url(#terminal-243650528-line-68)">                        working directory</text><text class="terminal-243650528-r2" x="500.2" y="1679.2" textLength="12.2" clip-path="url(#terminal-243650528-line-68)">)</text><text class="terminal-243650528-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-243650528-line-68)"> -</text><text class="terminal-243650528-r1" x="0" y="1703.6" textLength="622.2" clip-path="url(#terminal-243650528-line-69)">  --extra, -e EXTRA     a changelog extra variable </text><text class="terminal-243650528-r2" x="622.2" y="1703.6" textLength="12.2" clip-path="url(#terminal-243650528-line-69)">(</text><text class="terminal-243650528-r1" x="634.4" y="1703.6" textLength="146.4" clip-path="url(#terminal-243650528-line-69)">in the form </text><text class="terminal-243650528-r4" x="780.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-243650528-line-69)">'</text><text class="terminal-243650528-r4" x="793" y="1703.6" textLength="36.6" clip-path="url(#terminal-243650528-line-69)">key</text><text class="terminal-243650528-r4" x="829.6" y="1703.6" textLength="12.2" clip-path="url(#terminal-243650528-line-69)">=</text><text class="terminal-243650528-r4" x="841.8" y="1703.6" textLength="61" clip-path="url(#terminal-243650528-line-69)">value</text><text class="terminal-243650528-r4" x="902.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-243650528-line-69)">'</text><text class="terminal-243650528-r2" x="915" y="1703.6" textLength="12.2" clip-path="url(#terminal-243650528-line-69)">)</text><text class="terminal-243650528-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-243650528-line-69)"> -</text><text class="terminal-243650528-r1" x="0" y="1728" textLength="280.6" clip-path="url(#terminal-243650528-line-70)">  --file-name FILE_NAME</text><text class="terminal-243650528-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-243650528-line-70)"> -</text><text class="terminal-243650528-r1" x="0" y="1752.4" textLength="573.4" clip-path="url(#terminal-243650528-line-71)">                        file name of changelog </text><text class="terminal-243650528-r2" x="573.4" y="1752.4" textLength="12.2" clip-path="url(#terminal-243650528-line-71)">(</text><text class="terminal-243650528-r1" x="585.6" y="1752.4" textLength="109.8" clip-path="url(#terminal-243650528-line-71)">default: </text><text class="terminal-243650528-r4" x="695.4" y="1752.4" textLength="170.8" clip-path="url(#terminal-243650528-line-71)">'CHANGELOG.md'</text><text class="terminal-243650528-r2" x="866.2" y="1752.4" textLength="12.2" clip-path="url(#terminal-243650528-line-71)">)</text><text class="terminal-243650528-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-243650528-line-71)"> -</text><text class="terminal-243650528-r1" x="0" y="1776.8" textLength="475.8" clip-path="url(#terminal-243650528-line-72)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-243650528-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-243650528-line-72)"> -</text><text class="terminal-243650528-r1" x="0" y="1801.2" textLength="719.8" clip-path="url(#terminal-243650528-line-73)">                        start pre-releases with this offset</text><text class="terminal-243650528-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-243650528-line-73)"> -</text><text class="terminal-243650528-r1" x="0" y="1825.6" textLength="231.8" clip-path="url(#terminal-243650528-line-74)">  --version-scheme </text><text class="terminal-243650528-r2" x="231.8" y="1825.6" textLength="12.2" clip-path="url(#terminal-243650528-line-74)">{</text><text class="terminal-243650528-r1" x="244" y="1825.6" textLength="256.2" clip-path="url(#terminal-243650528-line-74)">pep440,semver,semver2</text><text class="terminal-243650528-r2" x="500.2" y="1825.6" textLength="12.2" clip-path="url(#terminal-243650528-line-74)">}</text><text class="terminal-243650528-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-243650528-line-74)"> -</text><text class="terminal-243650528-r1" x="0" y="1850" textLength="549" clip-path="url(#terminal-243650528-line-75)">                        choose version scheme</text><text class="terminal-243650528-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-243650528-line-75)"> -</text><text class="terminal-243650528-r1" x="0" y="1874.4" textLength="207.4" clip-path="url(#terminal-243650528-line-76)">  --version-type </text><text class="terminal-243650528-r2" x="207.4" y="1874.4" textLength="12.2" clip-path="url(#terminal-243650528-line-76)">{</text><text class="terminal-243650528-r1" x="219.6" y="1874.4" textLength="256.2" clip-path="url(#terminal-243650528-line-76)">pep440,semver,semver2</text><text class="terminal-243650528-r2" x="475.8" y="1874.4" textLength="12.2" clip-path="url(#terminal-243650528-line-76)">}</text><text class="terminal-243650528-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-243650528-line-76)"> -</text><text class="terminal-243650528-r1" x="0" y="1898.8" textLength="683.2" clip-path="url(#terminal-243650528-line-77)">                        Deprecated, use --version-scheme</text><text class="terminal-243650528-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-243650528-line-77)"> -</text><text class="terminal-243650528-r1" x="0" y="1923.2" textLength="402.6" clip-path="url(#terminal-243650528-line-78)">  --build-metadata BUILD_METADATA</text><text class="terminal-243650528-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-243650528-line-78)"> -</text><text class="terminal-243650528-r1" x="0" y="1947.6" textLength="915" clip-path="url(#terminal-243650528-line-79)">                        Add additional build-metadata to the version-number</text><text class="terminal-243650528-r1" x="976" y="1947.6" textLength="12.2" clip-path="url(#terminal-243650528-line-79)"> -</text><text class="terminal-243650528-r1" x="0" y="1972" textLength="854" clip-path="url(#terminal-243650528-line-80)">  --get-next            Determine the next version and write to stdout</text><text class="terminal-243650528-r1" x="976" y="1972" textLength="12.2" clip-path="url(#terminal-243650528-line-80)"> -</text><text class="terminal-243650528-r1" x="0" y="1996.4" textLength="744.2" clip-path="url(#terminal-243650528-line-81)">  --allow-no-commit     bump version without eligible commits</text><text class="terminal-243650528-r1" x="976" y="1996.4" textLength="12.2" clip-path="url(#terminal-243650528-line-81)"> -</text><text class="terminal-243650528-r1" x="976" y="2020.8" textLength="12.2" clip-path="url(#terminal-243650528-line-82)"> + <g class="terminal-1655558888-matrix"> + <text class="terminal-1655558888-r1" x="0" y="20" textLength="195.2" clip-path="url(#terminal-1655558888-line-0)">$ cz bump --help</text><text class="terminal-1655558888-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-1655558888-line-0)"> +</text><text class="terminal-1655558888-r1" x="0" y="44.4" textLength="183" clip-path="url(#terminal-1655558888-line-1)">usage: cz bump </text><text class="terminal-1655558888-r2" x="183" y="44.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-1)">[</text><text class="terminal-1655558888-r1" x="195.2" y="44.4" textLength="24.4" clip-path="url(#terminal-1655558888-line-1)">-h</text><text class="terminal-1655558888-r2" x="219.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-1)">]</text><text class="terminal-1655558888-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-1)">[</text><text class="terminal-1655558888-r1" x="256.2" y="44.4" textLength="109.8" clip-path="url(#terminal-1655558888-line-1)">--dry-run</text><text class="terminal-1655558888-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-1)">]</text><text class="terminal-1655558888-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-1)">[</text><text class="terminal-1655558888-r1" x="402.6" y="44.4" textLength="146.4" clip-path="url(#terminal-1655558888-line-1)">--files-only</text><text class="terminal-1655558888-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-1)">]</text><text class="terminal-1655558888-r2" x="573.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-1)">[</text><text class="terminal-1655558888-r1" x="585.6" y="44.4" textLength="183" clip-path="url(#terminal-1655558888-line-1)">--local-version</text><text class="terminal-1655558888-r2" x="768.6" y="44.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-1)">]</text><text class="terminal-1655558888-r2" x="793" y="44.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-1)">[</text><text class="terminal-1655558888-r1" x="805.2" y="44.4" textLength="134.2" clip-path="url(#terminal-1655558888-line-1)">--changelog</text><text class="terminal-1655558888-r2" x="939.4" y="44.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-1)">]</text><text class="terminal-1655558888-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-1)"> +</text><text class="terminal-1655558888-r2" x="183" y="68.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-2)">[</text><text class="terminal-1655558888-r1" x="195.2" y="68.8" textLength="134.2" clip-path="url(#terminal-1655558888-line-2)">--no-verify</text><text class="terminal-1655558888-r2" x="329.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-2)">]</text><text class="terminal-1655558888-r2" x="353.8" y="68.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-2)">[</text><text class="terminal-1655558888-r1" x="366" y="68.8" textLength="61" clip-path="url(#terminal-1655558888-line-2)">--yes</text><text class="terminal-1655558888-r2" x="427" y="68.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-2)">]</text><text class="terminal-1655558888-r2" x="451.4" y="68.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-2)">[</text><text class="terminal-1655558888-r1" x="463.6" y="68.8" textLength="280.6" clip-path="url(#terminal-1655558888-line-2)">--tag-format TAG_FORMAT</text><text class="terminal-1655558888-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-2)">]</text><text class="terminal-1655558888-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-2)"> +</text><text class="terminal-1655558888-r2" x="183" y="93.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-3)">[</text><text class="terminal-1655558888-r1" x="195.2" y="93.2" textLength="329.4" clip-path="url(#terminal-1655558888-line-3)">--bump-message BUMP_MESSAGE</text><text class="terminal-1655558888-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-3)">]</text><text class="terminal-1655558888-r2" x="549" y="93.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-3)">[</text><text class="terminal-1655558888-r1" x="561.2" y="93.2" textLength="158.6" clip-path="url(#terminal-1655558888-line-3)">--prerelease </text><text class="terminal-1655558888-r2" x="719.8" y="93.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-3)">{</text><text class="terminal-1655558888-r1" x="732" y="93.2" textLength="158.6" clip-path="url(#terminal-1655558888-line-3)">alpha,beta,rc</text><text class="terminal-1655558888-r2" x="890.6" y="93.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-3)">}</text><text class="terminal-1655558888-r2" x="902.8" y="93.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-3)">]</text><text class="terminal-1655558888-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-3)"> +</text><text class="terminal-1655558888-r2" x="183" y="117.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-4)">[</text><text class="terminal-1655558888-r1" x="195.2" y="117.6" textLength="280.6" clip-path="url(#terminal-1655558888-line-4)">--devrelease DEVRELEASE</text><text class="terminal-1655558888-r2" x="475.8" y="117.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-4)">]</text><text class="terminal-1655558888-r2" x="500.2" y="117.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-4)">[</text><text class="terminal-1655558888-r1" x="512.4" y="117.6" textLength="146.4" clip-path="url(#terminal-1655558888-line-4)">--increment </text><text class="terminal-1655558888-r2" x="658.8" y="117.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-4)">{</text><text class="terminal-1655558888-r1" x="671" y="117.6" textLength="207.4" clip-path="url(#terminal-1655558888-line-4)">MAJOR,MINOR,PATCH</text><text class="terminal-1655558888-r2" x="878.4" y="117.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-4)">}</text><text class="terminal-1655558888-r2" x="890.6" y="117.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-4)">]</text><text class="terminal-1655558888-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-4)"> +</text><text class="terminal-1655558888-r2" x="183" y="142" textLength="12.2" clip-path="url(#terminal-1655558888-line-5)">[</text><text class="terminal-1655558888-r1" x="195.2" y="142" textLength="207.4" clip-path="url(#terminal-1655558888-line-5)">--increment-mode </text><text class="terminal-1655558888-r2" x="402.6" y="142" textLength="12.2" clip-path="url(#terminal-1655558888-line-5)">{</text><text class="terminal-1655558888-r1" x="414.8" y="142" textLength="146.4" clip-path="url(#terminal-1655558888-line-5)">linear,exact</text><text class="terminal-1655558888-r2" x="561.2" y="142" textLength="12.2" clip-path="url(#terminal-1655558888-line-5)">}</text><text class="terminal-1655558888-r2" x="573.4" y="142" textLength="12.2" clip-path="url(#terminal-1655558888-line-5)">]</text><text class="terminal-1655558888-r2" x="597.8" y="142" textLength="12.2" clip-path="url(#terminal-1655558888-line-5)">[</text><text class="terminal-1655558888-r1" x="610" y="142" textLength="231.8" clip-path="url(#terminal-1655558888-line-5)">--check-consistency</text><text class="terminal-1655558888-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-1655558888-line-5)">]</text><text class="terminal-1655558888-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-1655558888-line-5)"> +</text><text class="terminal-1655558888-r2" x="183" y="166.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-6)">[</text><text class="terminal-1655558888-r1" x="195.2" y="166.4" textLength="183" clip-path="url(#terminal-1655558888-line-6)">--annotated-tag</text><text class="terminal-1655558888-r2" x="378.2" y="166.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-6)">]</text><text class="terminal-1655558888-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-6)"> +</text><text class="terminal-1655558888-r2" x="183" y="190.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-7)">[</text><text class="terminal-1655558888-r1" x="195.2" y="190.8" textLength="549" clip-path="url(#terminal-1655558888-line-7)">--annotated-tag-message ANNOTATED_TAG_MESSAGE</text><text class="terminal-1655558888-r2" x="744.2" y="190.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-7)">]</text><text class="terminal-1655558888-r2" x="768.6" y="190.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-7)">[</text><text class="terminal-1655558888-r1" x="780.8" y="190.8" textLength="122" clip-path="url(#terminal-1655558888-line-7)">--gpg-sign</text><text class="terminal-1655558888-r2" x="902.8" y="190.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-7)">]</text><text class="terminal-1655558888-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-7)"> +</text><text class="terminal-1655558888-r2" x="183" y="215.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-8)">[</text><text class="terminal-1655558888-r1" x="195.2" y="215.2" textLength="256.2" clip-path="url(#terminal-1655558888-line-8)">--changelog-to-stdout</text><text class="terminal-1655558888-r2" x="451.4" y="215.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-8)">]</text><text class="terminal-1655558888-r2" x="475.8" y="215.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-8)">[</text><text class="terminal-1655558888-r1" x="488" y="215.2" textLength="268.4" clip-path="url(#terminal-1655558888-line-8)">--git-output-to-stderr</text><text class="terminal-1655558888-r2" x="756.4" y="215.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-8)">]</text><text class="terminal-1655558888-r2" x="780.8" y="215.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-8)">[</text><text class="terminal-1655558888-r1" x="793" y="215.2" textLength="85.4" clip-path="url(#terminal-1655558888-line-8)">--retry</text><text class="terminal-1655558888-r2" x="878.4" y="215.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-8)">]</text><text class="terminal-1655558888-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-8)"> +</text><text class="terminal-1655558888-r2" x="183" y="239.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-9)">[</text><text class="terminal-1655558888-r1" x="195.2" y="239.6" textLength="244" clip-path="url(#terminal-1655558888-line-9)">--major-version-zero</text><text class="terminal-1655558888-r2" x="439.2" y="239.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-9)">]</text><text class="terminal-1655558888-r2" x="463.6" y="239.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-9)">[</text><text class="terminal-1655558888-r1" x="475.8" y="239.6" textLength="231.8" clip-path="url(#terminal-1655558888-line-9)">--template TEMPLATE</text><text class="terminal-1655558888-r2" x="707.6" y="239.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-9)">]</text><text class="terminal-1655558888-r2" x="732" y="239.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-9)">[</text><text class="terminal-1655558888-r1" x="744.2" y="239.6" textLength="158.6" clip-path="url(#terminal-1655558888-line-9)">--extra EXTRA</text><text class="terminal-1655558888-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-9)">]</text><text class="terminal-1655558888-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-9)"> +</text><text class="terminal-1655558888-r2" x="183" y="264" textLength="12.2" clip-path="url(#terminal-1655558888-line-10)">[</text><text class="terminal-1655558888-r1" x="195.2" y="264" textLength="256.2" clip-path="url(#terminal-1655558888-line-10)">--file-name FILE_NAME</text><text class="terminal-1655558888-r2" x="451.4" y="264" textLength="12.2" clip-path="url(#terminal-1655558888-line-10)">]</text><text class="terminal-1655558888-r2" x="475.8" y="264" textLength="12.2" clip-path="url(#terminal-1655558888-line-10)">[</text><text class="terminal-1655558888-r1" x="488" y="264" textLength="451.4" clip-path="url(#terminal-1655558888-line-10)">--prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-1655558888-r2" x="939.4" y="264" textLength="12.2" clip-path="url(#terminal-1655558888-line-10)">]</text><text class="terminal-1655558888-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-1655558888-line-10)"> +</text><text class="terminal-1655558888-r2" x="183" y="288.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-11)">[</text><text class="terminal-1655558888-r1" x="195.2" y="288.4" textLength="207.4" clip-path="url(#terminal-1655558888-line-11)">--version-scheme </text><text class="terminal-1655558888-r2" x="402.6" y="288.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-11)">{</text><text class="terminal-1655558888-r1" x="414.8" y="288.4" textLength="256.2" clip-path="url(#terminal-1655558888-line-11)">pep440,semver,semver2</text><text class="terminal-1655558888-r2" x="671" y="288.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-11)">}</text><text class="terminal-1655558888-r2" x="683.2" y="288.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-11)">]</text><text class="terminal-1655558888-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-11)"> +</text><text class="terminal-1655558888-r2" x="183" y="312.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-12)">[</text><text class="terminal-1655558888-r1" x="195.2" y="312.8" textLength="183" clip-path="url(#terminal-1655558888-line-12)">--version-type </text><text class="terminal-1655558888-r2" x="378.2" y="312.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-12)">{</text><text class="terminal-1655558888-r1" x="390.4" y="312.8" textLength="256.2" clip-path="url(#terminal-1655558888-line-12)">pep440,semver,semver2</text><text class="terminal-1655558888-r2" x="646.6" y="312.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-12)">}</text><text class="terminal-1655558888-r2" x="658.8" y="312.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-12)">]</text><text class="terminal-1655558888-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-12)"> +</text><text class="terminal-1655558888-r2" x="183" y="337.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-13)">[</text><text class="terminal-1655558888-r1" x="195.2" y="337.2" textLength="378.2" clip-path="url(#terminal-1655558888-line-13)">--build-metadata BUILD_METADATA</text><text class="terminal-1655558888-r2" x="573.4" y="337.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-13)">]</text><text class="terminal-1655558888-r2" x="597.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-13)">[</text><text class="terminal-1655558888-r1" x="610" y="337.2" textLength="122" clip-path="url(#terminal-1655558888-line-13)">--get-next</text><text class="terminal-1655558888-r2" x="732" y="337.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-13)">]</text><text class="terminal-1655558888-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-13)"> +</text><text class="terminal-1655558888-r2" x="183" y="361.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-14)">[</text><text class="terminal-1655558888-r1" x="195.2" y="361.6" textLength="207.4" clip-path="url(#terminal-1655558888-line-14)">--allow-no-commit</text><text class="terminal-1655558888-r2" x="402.6" y="361.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-14)">]</text><text class="terminal-1655558888-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-14)"> +</text><text class="terminal-1655558888-r2" x="183" y="386" textLength="12.2" clip-path="url(#terminal-1655558888-line-15)">[</text><text class="terminal-1655558888-r1" x="195.2" y="386" textLength="170.8" clip-path="url(#terminal-1655558888-line-15)">MANUAL_VERSION</text><text class="terminal-1655558888-r2" x="366" y="386" textLength="12.2" clip-path="url(#terminal-1655558888-line-15)">]</text><text class="terminal-1655558888-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-1655558888-line-15)"> +</text><text class="terminal-1655558888-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-16)"> +</text><text class="terminal-1655558888-r1" x="0" y="434.8" textLength="512.4" clip-path="url(#terminal-1655558888-line-17)">bump semantic version based on the git log</text><text class="terminal-1655558888-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-17)"> +</text><text class="terminal-1655558888-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-18)"> +</text><text class="terminal-1655558888-r1" x="0" y="483.6" textLength="256.2" clip-path="url(#terminal-1655558888-line-19)">positional arguments:</text><text class="terminal-1655558888-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-19)"> +</text><text class="terminal-1655558888-r1" x="0" y="508" textLength="610" clip-path="url(#terminal-1655558888-line-20)">  MANUAL_VERSION        bump to the given version </text><text class="terminal-1655558888-r2" x="610" y="508" textLength="12.2" clip-path="url(#terminal-1655558888-line-20)">(</text><text class="terminal-1655558888-r1" x="622.2" y="508" textLength="61" clip-path="url(#terminal-1655558888-line-20)">e.g: </text><text class="terminal-1655558888-r3" x="683.2" y="508" textLength="36.6" clip-path="url(#terminal-1655558888-line-20)">1.5</text><text class="terminal-1655558888-r1" x="719.8" y="508" textLength="12.2" clip-path="url(#terminal-1655558888-line-20)">.</text><text class="terminal-1655558888-r3" x="732" y="508" textLength="12.2" clip-path="url(#terminal-1655558888-line-20)">3</text><text class="terminal-1655558888-r2" x="744.2" y="508" textLength="12.2" clip-path="url(#terminal-1655558888-line-20)">)</text><text class="terminal-1655558888-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-1655558888-line-20)"> +</text><text class="terminal-1655558888-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-21)"> +</text><text class="terminal-1655558888-r1" x="0" y="556.8" textLength="97.6" clip-path="url(#terminal-1655558888-line-22)">options:</text><text class="terminal-1655558888-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-22)"> +</text><text class="terminal-1655558888-r1" x="0" y="581.2" textLength="671" clip-path="url(#terminal-1655558888-line-23)">  -h, --help            show this help message and exit</text><text class="terminal-1655558888-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-23)"> +</text><text class="terminal-1655558888-r1" x="0" y="605.6" textLength="915" clip-path="url(#terminal-1655558888-line-24)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-1655558888-r1" x="976" y="605.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-24)"> +</text><text class="terminal-1655558888-r1" x="0" y="630" textLength="793" clip-path="url(#terminal-1655558888-line-25)">  --files-only          bump version in the files from the config</text><text class="terminal-1655558888-r1" x="976" y="630" textLength="12.2" clip-path="url(#terminal-1655558888-line-25)"> +</text><text class="terminal-1655558888-r1" x="0" y="654.4" textLength="719.8" clip-path="url(#terminal-1655558888-line-26)">  --local-version       bump only the local version portion</text><text class="terminal-1655558888-r1" x="976" y="654.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-26)"> +</text><text class="terminal-1655558888-r1" x="0" y="678.8" textLength="841.8" clip-path="url(#terminal-1655558888-line-27)">  --changelog, -ch      generate the changelog for the newest version</text><text class="terminal-1655558888-r1" x="976" y="678.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-27)"> +</text><text class="terminal-1655558888-r1" x="0" y="703.2" textLength="902.8" clip-path="url(#terminal-1655558888-line-28)">  --no-verify           this option bypasses the pre-commit and commit-msg</text><text class="terminal-1655558888-r1" x="976" y="703.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-28)"> +</text><text class="terminal-1655558888-r1" x="0" y="727.6" textLength="353.8" clip-path="url(#terminal-1655558888-line-29)">                        hooks</text><text class="terminal-1655558888-r1" x="976" y="727.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-29)"> +</text><text class="terminal-1655558888-r1" x="0" y="752" textLength="719.8" clip-path="url(#terminal-1655558888-line-30)">  --yes                 accept automatically questions done</text><text class="terminal-1655558888-r1" x="976" y="752" textLength="12.2" clip-path="url(#terminal-1655558888-line-30)"> +</text><text class="terminal-1655558888-r1" x="0" y="776.4" textLength="305" clip-path="url(#terminal-1655558888-line-31)">  --tag-format TAG_FORMAT</text><text class="terminal-1655558888-r1" x="976" y="776.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-31)"> +</text><text class="terminal-1655558888-r1" x="0" y="800.8" textLength="939.4" clip-path="url(#terminal-1655558888-line-32)">                        the format used to tag the commit and read it, use it</text><text class="terminal-1655558888-r1" x="976" y="800.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-32)"> +</text><text class="terminal-1655558888-r1" x="0" y="825.2" textLength="866.2" clip-path="url(#terminal-1655558888-line-33)">                        in existing projects, wrap around simple quotes</text><text class="terminal-1655558888-r1" x="976" y="825.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-33)"> +</text><text class="terminal-1655558888-r1" x="0" y="849.6" textLength="353.8" clip-path="url(#terminal-1655558888-line-34)">  --bump-message BUMP_MESSAGE</text><text class="terminal-1655558888-r1" x="976" y="849.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-34)"> +</text><text class="terminal-1655558888-r1" x="0" y="874" textLength="902.8" clip-path="url(#terminal-1655558888-line-35)">                        template used to create the release commit, useful</text><text class="terminal-1655558888-r1" x="976" y="874" textLength="12.2" clip-path="url(#terminal-1655558888-line-35)"> +</text><text class="terminal-1655558888-r1" x="0" y="898.4" textLength="536.8" clip-path="url(#terminal-1655558888-line-36)">                        when working with CI</text><text class="terminal-1655558888-r1" x="976" y="898.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-36)"> +</text><text class="terminal-1655558888-r1" x="0" y="922.8" textLength="244" clip-path="url(#terminal-1655558888-line-37)">  --prerelease, -pr </text><text class="terminal-1655558888-r2" x="244" y="922.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-37)">{</text><text class="terminal-1655558888-r1" x="256.2" y="922.8" textLength="158.6" clip-path="url(#terminal-1655558888-line-37)">alpha,beta,rc</text><text class="terminal-1655558888-r2" x="414.8" y="922.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-37)">}</text><text class="terminal-1655558888-r1" x="976" y="922.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-37)"> +</text><text class="terminal-1655558888-r1" x="0" y="947.2" textLength="597.8" clip-path="url(#terminal-1655558888-line-38)">                        choose type of prerelease</text><text class="terminal-1655558888-r1" x="976" y="947.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-38)"> +</text><text class="terminal-1655558888-r1" x="0" y="971.6" textLength="353.8" clip-path="url(#terminal-1655558888-line-39)">  --devrelease, -d DEVRELEASE</text><text class="terminal-1655558888-r1" x="976" y="971.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-39)"> +</text><text class="terminal-1655558888-r1" x="0" y="996" textLength="841.8" clip-path="url(#terminal-1655558888-line-40)">                        specify non-negative integer for dev. release</text><text class="terminal-1655558888-r1" x="976" y="996" textLength="12.2" clip-path="url(#terminal-1655558888-line-40)"> +</text><text class="terminal-1655558888-r1" x="0" y="1020.4" textLength="170.8" clip-path="url(#terminal-1655558888-line-41)">  --increment </text><text class="terminal-1655558888-r2" x="170.8" y="1020.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-41)">{</text><text class="terminal-1655558888-r1" x="183" y="1020.4" textLength="207.4" clip-path="url(#terminal-1655558888-line-41)">MAJOR,MINOR,PATCH</text><text class="terminal-1655558888-r2" x="390.4" y="1020.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-41)">}</text><text class="terminal-1655558888-r1" x="976" y="1020.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-41)"> +</text><text class="terminal-1655558888-r1" x="0" y="1044.8" textLength="756.4" clip-path="url(#terminal-1655558888-line-42)">                        manually specify the desired increment</text><text class="terminal-1655558888-r1" x="976" y="1044.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-42)"> +</text><text class="terminal-1655558888-r1" x="0" y="1069.2" textLength="231.8" clip-path="url(#terminal-1655558888-line-43)">  --increment-mode </text><text class="terminal-1655558888-r2" x="231.8" y="1069.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-43)">{</text><text class="terminal-1655558888-r1" x="244" y="1069.2" textLength="146.4" clip-path="url(#terminal-1655558888-line-43)">linear,exact</text><text class="terminal-1655558888-r2" x="390.4" y="1069.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-43)">}</text><text class="terminal-1655558888-r1" x="976" y="1069.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-43)"> +</text><text class="terminal-1655558888-r1" x="0" y="1093.6" textLength="902.8" clip-path="url(#terminal-1655558888-line-44)">                        set the method by which the new version is chosen.</text><text class="terminal-1655558888-r1" x="976" y="1093.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-44)"> +</text><text class="terminal-1655558888-r4" x="292.8" y="1118" textLength="97.6" clip-path="url(#terminal-1655558888-line-45)">'linear'</text><text class="terminal-1655558888-r2" x="402.6" y="1118" textLength="12.2" clip-path="url(#terminal-1655558888-line-45)">(</text><text class="terminal-1655558888-r1" x="414.8" y="1118" textLength="85.4" clip-path="url(#terminal-1655558888-line-45)">default</text><text class="terminal-1655558888-r2" x="500.2" y="1118" textLength="12.2" clip-path="url(#terminal-1655558888-line-45)">)</text><text class="terminal-1655558888-r1" x="512.4" y="1118" textLength="414.8" clip-path="url(#terminal-1655558888-line-45)"> guesses the next version based on</text><text class="terminal-1655558888-r1" x="976" y="1118" textLength="12.2" clip-path="url(#terminal-1655558888-line-45)"> +</text><text class="terminal-1655558888-r1" x="0" y="1142.4" textLength="939.4" clip-path="url(#terminal-1655558888-line-46)">                        typical linear version progression, such that bumping</text><text class="terminal-1655558888-r1" x="976" y="1142.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-46)"> +</text><text class="terminal-1655558888-r1" x="0" y="1166.8" textLength="866.2" clip-path="url(#terminal-1655558888-line-47)">                        of a pre-release with lower precedence than the</text><text class="terminal-1655558888-r1" x="976" y="1166.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-47)"> +</text><text class="terminal-1655558888-r1" x="0" y="1191.2" textLength="939.4" clip-path="url(#terminal-1655558888-line-48)">                        current pre-release phase maintains the current phase</text><text class="terminal-1655558888-r1" x="976" y="1191.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-48)"> +</text><text class="terminal-1655558888-r1" x="0" y="1215.6" textLength="561.2" clip-path="url(#terminal-1655558888-line-49)">                        of higher precedence. </text><text class="terminal-1655558888-r4" x="561.2" y="1215.6" textLength="85.4" clip-path="url(#terminal-1655558888-line-49)">'exact'</text><text class="terminal-1655558888-r1" x="646.6" y="1215.6" textLength="305" clip-path="url(#terminal-1655558888-line-49)"> applies the changes that</text><text class="terminal-1655558888-r1" x="976" y="1215.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-49)"> +</text><text class="terminal-1655558888-r1" x="0" y="1240" textLength="536.8" clip-path="url(#terminal-1655558888-line-50)">                        have been specified </text><text class="terminal-1655558888-r2" x="536.8" y="1240" textLength="12.2" clip-path="url(#terminal-1655558888-line-50)">(</text><text class="terminal-1655558888-r1" x="549" y="1240" textLength="353.8" clip-path="url(#terminal-1655558888-line-50)">or determined from the commit</text><text class="terminal-1655558888-r1" x="976" y="1240" textLength="12.2" clip-path="url(#terminal-1655558888-line-50)"> +</text><text class="terminal-1655558888-r1" x="0" y="1264.4" textLength="329.4" clip-path="url(#terminal-1655558888-line-51)">                        log</text><text class="terminal-1655558888-r2" x="329.4" y="1264.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-51)">)</text><text class="terminal-1655558888-r1" x="341.6" y="1264.4" textLength="585.6" clip-path="url(#terminal-1655558888-line-51)"> without interpretation, such that the increment</text><text class="terminal-1655558888-r1" x="976" y="1264.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-51)"> +</text><text class="terminal-1655558888-r1" x="0" y="1288.8" textLength="707.6" clip-path="url(#terminal-1655558888-line-52)">                        and pre-release are always honored</text><text class="terminal-1655558888-r1" x="976" y="1288.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-52)"> +</text><text class="terminal-1655558888-r1" x="0" y="1313.2" textLength="317.2" clip-path="url(#terminal-1655558888-line-53)">  --check-consistency, -cc</text><text class="terminal-1655558888-r1" x="976" y="1313.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-53)"> +</text><text class="terminal-1655558888-r1" x="0" y="1337.6" textLength="951.6" clip-path="url(#terminal-1655558888-line-54)">                        check consistency among versions defined in commitizen</text><text class="terminal-1655558888-r1" x="976" y="1337.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-54)"> +</text><text class="terminal-1655558888-r1" x="0" y="1362" textLength="671" clip-path="url(#terminal-1655558888-line-55)">                        configuration and version_files</text><text class="terminal-1655558888-r1" x="976" y="1362" textLength="12.2" clip-path="url(#terminal-1655558888-line-55)"> +</text><text class="terminal-1655558888-r1" x="0" y="1386.4" textLength="866.2" clip-path="url(#terminal-1655558888-line-56)">  --annotated-tag, -at  create annotated tag instead of lightweight one</text><text class="terminal-1655558888-r1" x="976" y="1386.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-56)"> +</text><text class="terminal-1655558888-r1" x="0" y="1410.8" textLength="646.6" clip-path="url(#terminal-1655558888-line-57)">  --annotated-tag-message, -atm ANNOTATED_TAG_MESSAGE</text><text class="terminal-1655558888-r1" x="976" y="1410.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-57)"> +</text><text class="terminal-1655558888-r1" x="0" y="1435.2" textLength="634.4" clip-path="url(#terminal-1655558888-line-58)">                        create annotated tag message</text><text class="terminal-1655558888-r1" x="976" y="1435.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-58)"> +</text><text class="terminal-1655558888-r1" x="0" y="1459.6" textLength="719.8" clip-path="url(#terminal-1655558888-line-59)">  --gpg-sign, -s        sign tag instead of lightweight one</text><text class="terminal-1655558888-r1" x="976" y="1459.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-59)"> +</text><text class="terminal-1655558888-r1" x="0" y="1484" textLength="280.6" clip-path="url(#terminal-1655558888-line-60)">  --changelog-to-stdout</text><text class="terminal-1655558888-r1" x="976" y="1484" textLength="12.2" clip-path="url(#terminal-1655558888-line-60)"> +</text><text class="terminal-1655558888-r1" x="0" y="1508.4" textLength="658.8" clip-path="url(#terminal-1655558888-line-61)">                        Output changelog to the stdout</text><text class="terminal-1655558888-r1" x="976" y="1508.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-61)"> +</text><text class="terminal-1655558888-r1" x="0" y="1532.8" textLength="292.8" clip-path="url(#terminal-1655558888-line-62)">  --git-output-to-stderr</text><text class="terminal-1655558888-r1" x="976" y="1532.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-62)"> +</text><text class="terminal-1655558888-r1" x="0" y="1557.2" textLength="646.6" clip-path="url(#terminal-1655558888-line-63)">                        Redirect git output to stderr</text><text class="terminal-1655558888-r1" x="976" y="1557.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-63)"> +</text><text class="terminal-1655558888-r1" x="0" y="1581.6" textLength="744.2" clip-path="url(#terminal-1655558888-line-64)">  --retry               retry commit if it fails the 1st time</text><text class="terminal-1655558888-r1" x="976" y="1581.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-64)"> +</text><text class="terminal-1655558888-r1" x="0" y="1606" textLength="939.4" clip-path="url(#terminal-1655558888-line-65)">  --major-version-zero  keep major version at zero, even for breaking changes</text><text class="terminal-1655558888-r1" x="976" y="1606" textLength="12.2" clip-path="url(#terminal-1655558888-line-65)"> +</text><text class="terminal-1655558888-r1" x="0" y="1630.4" textLength="305" clip-path="url(#terminal-1655558888-line-66)">  --template, -t TEMPLATE</text><text class="terminal-1655558888-r1" x="976" y="1630.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-66)"> +</text><text class="terminal-1655558888-r1" x="0" y="1654.8" textLength="646.6" clip-path="url(#terminal-1655558888-line-67)">                        changelog template file name </text><text class="terminal-1655558888-r2" x="646.6" y="1654.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-67)">(</text><text class="terminal-1655558888-r1" x="658.8" y="1654.8" textLength="280.6" clip-path="url(#terminal-1655558888-line-67)">relative to the current</text><text class="terminal-1655558888-r1" x="976" y="1654.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-67)"> +</text><text class="terminal-1655558888-r1" x="0" y="1679.2" textLength="500.2" clip-path="url(#terminal-1655558888-line-68)">                        working directory</text><text class="terminal-1655558888-r2" x="500.2" y="1679.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-68)">)</text><text class="terminal-1655558888-r1" x="976" y="1679.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-68)"> +</text><text class="terminal-1655558888-r1" x="0" y="1703.6" textLength="622.2" clip-path="url(#terminal-1655558888-line-69)">  --extra, -e EXTRA     a changelog extra variable </text><text class="terminal-1655558888-r2" x="622.2" y="1703.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-69)">(</text><text class="terminal-1655558888-r1" x="634.4" y="1703.6" textLength="146.4" clip-path="url(#terminal-1655558888-line-69)">in the form </text><text class="terminal-1655558888-r4" x="780.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-69)">'</text><text class="terminal-1655558888-r4" x="793" y="1703.6" textLength="36.6" clip-path="url(#terminal-1655558888-line-69)">key</text><text class="terminal-1655558888-r4" x="829.6" y="1703.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-69)">=</text><text class="terminal-1655558888-r4" x="841.8" y="1703.6" textLength="61" clip-path="url(#terminal-1655558888-line-69)">value</text><text class="terminal-1655558888-r4" x="902.8" y="1703.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-69)">'</text><text class="terminal-1655558888-r2" x="915" y="1703.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-69)">)</text><text class="terminal-1655558888-r1" x="976" y="1703.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-69)"> +</text><text class="terminal-1655558888-r1" x="0" y="1728" textLength="280.6" clip-path="url(#terminal-1655558888-line-70)">  --file-name FILE_NAME</text><text class="terminal-1655558888-r1" x="976" y="1728" textLength="12.2" clip-path="url(#terminal-1655558888-line-70)"> +</text><text class="terminal-1655558888-r1" x="0" y="1752.4" textLength="573.4" clip-path="url(#terminal-1655558888-line-71)">                        file name of changelog </text><text class="terminal-1655558888-r2" x="573.4" y="1752.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-71)">(</text><text class="terminal-1655558888-r1" x="585.6" y="1752.4" textLength="109.8" clip-path="url(#terminal-1655558888-line-71)">default: </text><text class="terminal-1655558888-r4" x="695.4" y="1752.4" textLength="170.8" clip-path="url(#terminal-1655558888-line-71)">'CHANGELOG.md'</text><text class="terminal-1655558888-r2" x="866.2" y="1752.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-71)">)</text><text class="terminal-1655558888-r1" x="976" y="1752.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-71)"> +</text><text class="terminal-1655558888-r1" x="0" y="1776.8" textLength="475.8" clip-path="url(#terminal-1655558888-line-72)">  --prerelease-offset PRERELEASE_OFFSET</text><text class="terminal-1655558888-r1" x="976" y="1776.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-72)"> +</text><text class="terminal-1655558888-r1" x="0" y="1801.2" textLength="719.8" clip-path="url(#terminal-1655558888-line-73)">                        start pre-releases with this offset</text><text class="terminal-1655558888-r1" x="976" y="1801.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-73)"> +</text><text class="terminal-1655558888-r1" x="0" y="1825.6" textLength="231.8" clip-path="url(#terminal-1655558888-line-74)">  --version-scheme </text><text class="terminal-1655558888-r2" x="231.8" y="1825.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-74)">{</text><text class="terminal-1655558888-r1" x="244" y="1825.6" textLength="256.2" clip-path="url(#terminal-1655558888-line-74)">pep440,semver,semver2</text><text class="terminal-1655558888-r2" x="500.2" y="1825.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-74)">}</text><text class="terminal-1655558888-r1" x="976" y="1825.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-74)"> +</text><text class="terminal-1655558888-r1" x="0" y="1850" textLength="549" clip-path="url(#terminal-1655558888-line-75)">                        choose version scheme</text><text class="terminal-1655558888-r1" x="976" y="1850" textLength="12.2" clip-path="url(#terminal-1655558888-line-75)"> +</text><text class="terminal-1655558888-r1" x="0" y="1874.4" textLength="207.4" clip-path="url(#terminal-1655558888-line-76)">  --version-type </text><text class="terminal-1655558888-r2" x="207.4" y="1874.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-76)">{</text><text class="terminal-1655558888-r1" x="219.6" y="1874.4" textLength="256.2" clip-path="url(#terminal-1655558888-line-76)">pep440,semver,semver2</text><text class="terminal-1655558888-r2" x="475.8" y="1874.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-76)">}</text><text class="terminal-1655558888-r1" x="976" y="1874.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-76)"> +</text><text class="terminal-1655558888-r1" x="0" y="1898.8" textLength="780.8" clip-path="url(#terminal-1655558888-line-77)">                        Deprecated, use --version-scheme instead</text><text class="terminal-1655558888-r1" x="976" y="1898.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-77)"> +</text><text class="terminal-1655558888-r1" x="0" y="1923.2" textLength="402.6" clip-path="url(#terminal-1655558888-line-78)">  --build-metadata BUILD_METADATA</text><text class="terminal-1655558888-r1" x="976" y="1923.2" textLength="12.2" clip-path="url(#terminal-1655558888-line-78)"> +</text><text class="terminal-1655558888-r1" x="0" y="1947.6" textLength="915" clip-path="url(#terminal-1655558888-line-79)">                        Add additional build-metadata to the version-number</text><text class="terminal-1655558888-r1" x="976" y="1947.6" textLength="12.2" clip-path="url(#terminal-1655558888-line-79)"> +</text><text class="terminal-1655558888-r1" x="0" y="1972" textLength="854" clip-path="url(#terminal-1655558888-line-80)">  --get-next            Determine the next version and write to stdout</text><text class="terminal-1655558888-r1" x="976" y="1972" textLength="12.2" clip-path="url(#terminal-1655558888-line-80)"> +</text><text class="terminal-1655558888-r1" x="0" y="1996.4" textLength="744.2" clip-path="url(#terminal-1655558888-line-81)">  --allow-no-commit     bump version without eligible commits</text><text class="terminal-1655558888-r1" x="976" y="1996.4" textLength="12.2" clip-path="url(#terminal-1655558888-line-81)"> +</text><text class="terminal-1655558888-r1" x="976" y="2020.8" textLength="12.2" clip-path="url(#terminal-1655558888-line-82)"> </text> </g> </g> diff --git a/docs/images/cli_help/cz_commit___help.svg b/docs/images/cli_help/cz_commit___help.svg index 5aea02232f..59cdd12b9b 100644 --- a/docs/images/cli_help/cz_commit___help.svg +++ b/docs/images/cli_help/cz_commit___help.svg @@ -19,95 +19,96 @@ font-weight: 700; } - .terminal-463778956-matrix { + .terminal-905765158-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-463778956-title { + .terminal-905765158-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-463778956-r1 { fill: #c5c8c6 } -.terminal-463778956-r2 { fill: #c5c8c6;font-weight: bold } -.terminal-463778956-r3 { fill: #68a0b3;font-weight: bold } + .terminal-905765158-r1 { fill: #c5c8c6 } +.terminal-905765158-r2 { fill: #c5c8c6;font-weight: bold } +.terminal-905765158-r3 { fill: #98a84b } +.terminal-905765158-r4 { fill: #68a0b3;font-weight: bold } </style> <defs> - <clipPath id="terminal-463778956-clip-terminal"> + <clipPath id="terminal-905765158-clip-terminal"> <rect x="0" y="0" width="975.0" height="584.5999999999999" /> </clipPath> - <clipPath id="terminal-463778956-line-0"> + <clipPath id="terminal-905765158-line-0"> <rect x="0" y="1.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-1"> +<clipPath id="terminal-905765158-line-1"> <rect x="0" y="25.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-2"> +<clipPath id="terminal-905765158-line-2"> <rect x="0" y="50.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-3"> +<clipPath id="terminal-905765158-line-3"> <rect x="0" y="74.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-4"> +<clipPath id="terminal-905765158-line-4"> <rect x="0" y="99.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-5"> +<clipPath id="terminal-905765158-line-5"> <rect x="0" y="123.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-6"> +<clipPath id="terminal-905765158-line-6"> <rect x="0" y="147.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-7"> +<clipPath id="terminal-905765158-line-7"> <rect x="0" y="172.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-8"> +<clipPath id="terminal-905765158-line-8"> <rect x="0" y="196.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-9"> +<clipPath id="terminal-905765158-line-9"> <rect x="0" y="221.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-10"> +<clipPath id="terminal-905765158-line-10"> <rect x="0" y="245.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-11"> +<clipPath id="terminal-905765158-line-11"> <rect x="0" y="269.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-12"> +<clipPath id="terminal-905765158-line-12"> <rect x="0" y="294.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-13"> +<clipPath id="terminal-905765158-line-13"> <rect x="0" y="318.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-14"> +<clipPath id="terminal-905765158-line-14"> <rect x="0" y="343.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-15"> +<clipPath id="terminal-905765158-line-15"> <rect x="0" y="367.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-16"> +<clipPath id="terminal-905765158-line-16"> <rect x="0" y="391.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-17"> +<clipPath id="terminal-905765158-line-17"> <rect x="0" y="416.3" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-18"> +<clipPath id="terminal-905765158-line-18"> <rect x="0" y="440.7" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-19"> +<clipPath id="terminal-905765158-line-19"> <rect x="0" y="465.1" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-20"> +<clipPath id="terminal-905765158-line-20"> <rect x="0" y="489.5" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-21"> +<clipPath id="terminal-905765158-line-21"> <rect x="0" y="513.9" width="976" height="24.65"/> </clipPath> -<clipPath id="terminal-463778956-line-22"> +<clipPath id="terminal-905765158-line-22"> <rect x="0" y="538.3" width="976" height="24.65"/> </clipPath> </defs> @@ -119,33 +120,33 @@ <circle cx="44" cy="0" r="7" fill="#28c840"/> </g> - <g transform="translate(9, 41)" clip-path="url(#terminal-463778956-clip-terminal)"> + <g transform="translate(9, 41)" clip-path="url(#terminal-905765158-clip-terminal)"> - <g class="terminal-463778956-matrix"> - <text class="terminal-463778956-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-463778956-line-0)">$ cz commit --help</text><text class="terminal-463778956-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-463778956-line-0)"> -</text><text class="terminal-463778956-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-463778956-line-1)">usage: cz commit </text><text class="terminal-463778956-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-463778956-line-1)">-h</text><text class="terminal-463778956-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-463778956-line-1)">--retry</text><text class="terminal-463778956-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-463778956-line-1)">--no-retry</text><text class="terminal-463778956-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">[</text><text class="terminal-463778956-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-463778956-line-1)">--dry-run</text><text class="terminal-463778956-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)">]</text><text class="terminal-463778956-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-463778956-line-1)"> -</text><text class="terminal-463778956-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-463778956-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-463778956-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-463778956-line-2)">-s</text><text class="terminal-463778956-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-463778956-line-2)">-a</text><text class="terminal-463778956-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r2" x="768.6" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">[</text><text class="terminal-463778956-r1" x="780.8" y="68.8" textLength="24.4" clip-path="url(#terminal-463778956-line-2)">-e</text><text class="terminal-463778956-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)">]</text><text class="terminal-463778956-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-463778956-line-2)"> -</text><text class="terminal-463778956-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">[</text><text class="terminal-463778956-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-463778956-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-463778956-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">]</text><text class="terminal-463778956-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">[</text><text class="terminal-463778956-r1" x="536.8" y="93.2" textLength="24.4" clip-path="url(#terminal-463778956-line-3)">--</text><text class="terminal-463778956-r2" x="561.2" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)">]</text><text class="terminal-463778956-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-463778956-line-3)"> -</text><text class="terminal-463778956-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-463778956-line-4)"> -</text><text class="terminal-463778956-r1" x="0" y="142" textLength="207.4" clip-path="url(#terminal-463778956-line-5)">create new commit</text><text class="terminal-463778956-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-463778956-line-5)"> -</text><text class="terminal-463778956-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-463778956-line-6)"> -</text><text class="terminal-463778956-r1" x="0" y="190.8" textLength="97.6" clip-path="url(#terminal-463778956-line-7)">options:</text><text class="terminal-463778956-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-463778956-line-7)"> -</text><text class="terminal-463778956-r1" x="0" y="215.2" textLength="671" clip-path="url(#terminal-463778956-line-8)">  -h, --help            show this help message and exit</text><text class="terminal-463778956-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-463778956-line-8)"> -</text><text class="terminal-463778956-r1" x="0" y="239.6" textLength="500.2" clip-path="url(#terminal-463778956-line-9)">  --retry               retry last commit</text><text class="terminal-463778956-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-463778956-line-9)"> -</text><text class="terminal-463778956-r1" x="0" y="264" textLength="878.4" clip-path="url(#terminal-463778956-line-10)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-463778956-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-463778956-line-10)"> -</text><text class="terminal-463778956-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-463778956-line-11)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-463778956-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-463778956-line-11)"> -</text><text class="terminal-463778956-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-463778956-line-12)">  --write-message-to-file FILE_PATH</text><text class="terminal-463778956-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-463778956-line-12)"> -</text><text class="terminal-463778956-r1" x="0" y="337.2" textLength="780.8" clip-path="url(#terminal-463778956-line-13)">                        write message to file before committing </text><text class="terminal-463778956-r2" x="780.8" y="337.2" textLength="12.2" clip-path="url(#terminal-463778956-line-13)">(</text><text class="terminal-463778956-r1" x="793" y="337.2" textLength="73.2" clip-path="url(#terminal-463778956-line-13)">can be</text><text class="terminal-463778956-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-463778956-line-13)"> -</text><text class="terminal-463778956-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-463778956-line-14)">                        combined with --dry-run</text><text class="terminal-463778956-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-463778956-line-14)">)</text><text class="terminal-463778956-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-463778956-line-14)"> -</text><text class="terminal-463778956-r1" x="0" y="386" textLength="524.6" clip-path="url(#terminal-463778956-line-15)">  -s, --signoff         sign off the commit</text><text class="terminal-463778956-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-463778956-line-15)"> -</text><text class="terminal-463778956-r1" x="0" y="410.4" textLength="902.8" clip-path="url(#terminal-463778956-line-16)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-463778956-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-463778956-line-16)"> -</text><text class="terminal-463778956-r1" x="0" y="434.8" textLength="951.6" clip-path="url(#terminal-463778956-line-17)">                        have been modified and deleted, but new files you have</text><text class="terminal-463778956-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-463778956-line-17)"> -</text><text class="terminal-463778956-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-463778956-line-18)">                        not told Git about are not affected.</text><text class="terminal-463778956-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-463778956-line-18)"> -</text><text class="terminal-463778956-r1" x="0" y="483.6" textLength="793" clip-path="url(#terminal-463778956-line-19)">  -e, --edit            edit the commit message before committing</text><text class="terminal-463778956-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-463778956-line-19)"> -</text><text class="terminal-463778956-r1" x="0" y="508" textLength="597.8" clip-path="url(#terminal-463778956-line-20)">  -l, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-463778956-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-463778956-line-20)"> -</text><text class="terminal-463778956-r1" x="0" y="532.4" textLength="732" clip-path="url(#terminal-463778956-line-21)">                        length limit of the commit message; </text><text class="terminal-463778956-r3" x="732" y="532.4" textLength="12.2" clip-path="url(#terminal-463778956-line-21)">0</text><text class="terminal-463778956-r1" x="744.2" y="532.4" textLength="158.6" clip-path="url(#terminal-463778956-line-21)"> for no limit</text><text class="terminal-463778956-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-463778956-line-21)"> -</text><text class="terminal-463778956-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-463778956-line-22)">  --                    Positional arguments separator </text><text class="terminal-463778956-r2" x="671" y="556.8" textLength="12.2" clip-path="url(#terminal-463778956-line-22)">(</text><text class="terminal-463778956-r1" x="683.2" y="556.8" textLength="134.2" clip-path="url(#terminal-463778956-line-22)">recommended</text><text class="terminal-463778956-r2" x="817.4" y="556.8" textLength="12.2" clip-path="url(#terminal-463778956-line-22)">)</text><text class="terminal-463778956-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-463778956-line-22)"> -</text><text class="terminal-463778956-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-463778956-line-23)"> + <g class="terminal-905765158-matrix"> + <text class="terminal-905765158-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-905765158-line-0)">$ cz commit --help</text><text class="terminal-905765158-r1" x="976" y="20" textLength="12.2" clip-path="url(#terminal-905765158-line-0)"> +</text><text class="terminal-905765158-r1" x="0" y="44.4" textLength="207.4" clip-path="url(#terminal-905765158-line-1)">usage: cz commit </text><text class="terminal-905765158-r2" x="207.4" y="44.4" textLength="12.2" clip-path="url(#terminal-905765158-line-1)">[</text><text class="terminal-905765158-r1" x="219.6" y="44.4" textLength="24.4" clip-path="url(#terminal-905765158-line-1)">-h</text><text class="terminal-905765158-r2" x="244" y="44.4" textLength="12.2" clip-path="url(#terminal-905765158-line-1)">]</text><text class="terminal-905765158-r2" x="268.4" y="44.4" textLength="12.2" clip-path="url(#terminal-905765158-line-1)">[</text><text class="terminal-905765158-r1" x="280.6" y="44.4" textLength="85.4" clip-path="url(#terminal-905765158-line-1)">--retry</text><text class="terminal-905765158-r2" x="366" y="44.4" textLength="12.2" clip-path="url(#terminal-905765158-line-1)">]</text><text class="terminal-905765158-r2" x="390.4" y="44.4" textLength="12.2" clip-path="url(#terminal-905765158-line-1)">[</text><text class="terminal-905765158-r1" x="402.6" y="44.4" textLength="122" clip-path="url(#terminal-905765158-line-1)">--no-retry</text><text class="terminal-905765158-r2" x="524.6" y="44.4" textLength="12.2" clip-path="url(#terminal-905765158-line-1)">]</text><text class="terminal-905765158-r2" x="549" y="44.4" textLength="12.2" clip-path="url(#terminal-905765158-line-1)">[</text><text class="terminal-905765158-r1" x="561.2" y="44.4" textLength="109.8" clip-path="url(#terminal-905765158-line-1)">--dry-run</text><text class="terminal-905765158-r2" x="671" y="44.4" textLength="12.2" clip-path="url(#terminal-905765158-line-1)">]</text><text class="terminal-905765158-r1" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-905765158-line-1)"> +</text><text class="terminal-905765158-r2" x="207.4" y="68.8" textLength="12.2" clip-path="url(#terminal-905765158-line-2)">[</text><text class="terminal-905765158-r1" x="219.6" y="68.8" textLength="402.6" clip-path="url(#terminal-905765158-line-2)">--write-message-to-file FILE_PATH</text><text class="terminal-905765158-r2" x="622.2" y="68.8" textLength="12.2" clip-path="url(#terminal-905765158-line-2)">]</text><text class="terminal-905765158-r2" x="646.6" y="68.8" textLength="12.2" clip-path="url(#terminal-905765158-line-2)">[</text><text class="terminal-905765158-r1" x="658.8" y="68.8" textLength="24.4" clip-path="url(#terminal-905765158-line-2)">-s</text><text class="terminal-905765158-r2" x="683.2" y="68.8" textLength="12.2" clip-path="url(#terminal-905765158-line-2)">]</text><text class="terminal-905765158-r2" x="707.6" y="68.8" textLength="12.2" clip-path="url(#terminal-905765158-line-2)">[</text><text class="terminal-905765158-r1" x="719.8" y="68.8" textLength="24.4" clip-path="url(#terminal-905765158-line-2)">-a</text><text class="terminal-905765158-r2" x="744.2" y="68.8" textLength="12.2" clip-path="url(#terminal-905765158-line-2)">]</text><text class="terminal-905765158-r2" x="768.6" y="68.8" textLength="12.2" clip-path="url(#terminal-905765158-line-2)">[</text><text class="terminal-905765158-r1" x="780.8" y="68.8" textLength="24.4" clip-path="url(#terminal-905765158-line-2)">-e</text><text class="terminal-905765158-r2" x="805.2" y="68.8" textLength="12.2" clip-path="url(#terminal-905765158-line-2)">]</text><text class="terminal-905765158-r1" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-905765158-line-2)"> +</text><text class="terminal-905765158-r2" x="207.4" y="93.2" textLength="12.2" clip-path="url(#terminal-905765158-line-3)">[</text><text class="terminal-905765158-r1" x="219.6" y="93.2" textLength="280.6" clip-path="url(#terminal-905765158-line-3)">-l MESSAGE_LENGTH_LIMIT</text><text class="terminal-905765158-r2" x="500.2" y="93.2" textLength="12.2" clip-path="url(#terminal-905765158-line-3)">]</text><text class="terminal-905765158-r2" x="524.6" y="93.2" textLength="12.2" clip-path="url(#terminal-905765158-line-3)">[</text><text class="terminal-905765158-r1" x="536.8" y="93.2" textLength="24.4" clip-path="url(#terminal-905765158-line-3)">--</text><text class="terminal-905765158-r2" x="561.2" y="93.2" textLength="12.2" clip-path="url(#terminal-905765158-line-3)">]</text><text class="terminal-905765158-r1" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-905765158-line-3)"> +</text><text class="terminal-905765158-r1" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-905765158-line-4)"> +</text><text class="terminal-905765158-r1" x="0" y="142" textLength="207.4" clip-path="url(#terminal-905765158-line-5)">create new commit</text><text class="terminal-905765158-r1" x="976" y="142" textLength="12.2" clip-path="url(#terminal-905765158-line-5)"> +</text><text class="terminal-905765158-r1" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-905765158-line-6)"> +</text><text class="terminal-905765158-r1" x="0" y="190.8" textLength="97.6" clip-path="url(#terminal-905765158-line-7)">options:</text><text class="terminal-905765158-r1" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-905765158-line-7)"> +</text><text class="terminal-905765158-r1" x="0" y="215.2" textLength="671" clip-path="url(#terminal-905765158-line-8)">  -h, --help            show this help message and exit</text><text class="terminal-905765158-r1" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-905765158-line-8)"> +</text><text class="terminal-905765158-r1" x="0" y="239.6" textLength="500.2" clip-path="url(#terminal-905765158-line-9)">  --retry               retry last commit</text><text class="terminal-905765158-r1" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-905765158-line-9)"> +</text><text class="terminal-905765158-r1" x="0" y="264" textLength="878.4" clip-path="url(#terminal-905765158-line-10)">  --no-retry            skip retry if retry_after_failure is set to true</text><text class="terminal-905765158-r1" x="976" y="264" textLength="12.2" clip-path="url(#terminal-905765158-line-10)"> +</text><text class="terminal-905765158-r1" x="0" y="288.4" textLength="915" clip-path="url(#terminal-905765158-line-11)">  --dry-run             show output to stdout, no commit, no modified files</text><text class="terminal-905765158-r1" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-905765158-line-11)"> +</text><text class="terminal-905765158-r1" x="0" y="312.8" textLength="427" clip-path="url(#terminal-905765158-line-12)">  --write-message-to-file FILE_PATH</text><text class="terminal-905765158-r1" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-905765158-line-12)"> +</text><text class="terminal-905765158-r1" x="0" y="337.2" textLength="780.8" clip-path="url(#terminal-905765158-line-13)">                        write message to file before committing </text><text class="terminal-905765158-r2" x="780.8" y="337.2" textLength="12.2" clip-path="url(#terminal-905765158-line-13)">(</text><text class="terminal-905765158-r1" x="793" y="337.2" textLength="73.2" clip-path="url(#terminal-905765158-line-13)">can be</text><text class="terminal-905765158-r1" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-905765158-line-13)"> +</text><text class="terminal-905765158-r1" x="0" y="361.6" textLength="573.4" clip-path="url(#terminal-905765158-line-14)">                        combined with --dry-run</text><text class="terminal-905765158-r2" x="573.4" y="361.6" textLength="12.2" clip-path="url(#terminal-905765158-line-14)">)</text><text class="terminal-905765158-r1" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-905765158-line-14)"> +</text><text class="terminal-905765158-r1" x="0" y="386" textLength="488" clip-path="url(#terminal-905765158-line-15)">  -s, --signoff         Deprecated, use </text><text class="terminal-905765158-r3" x="488" y="386" textLength="207.4" clip-path="url(#terminal-905765158-line-15)">'cz commit -- -s'</text><text class="terminal-905765158-r1" x="695.4" y="386" textLength="97.6" clip-path="url(#terminal-905765158-line-15)"> instead</text><text class="terminal-905765158-r1" x="976" y="386" textLength="12.2" clip-path="url(#terminal-905765158-line-15)"> +</text><text class="terminal-905765158-r1" x="0" y="410.4" textLength="902.8" clip-path="url(#terminal-905765158-line-16)">  -a, --all             Tell the command to automatically stage files that</text><text class="terminal-905765158-r1" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-905765158-line-16)"> +</text><text class="terminal-905765158-r1" x="0" y="434.8" textLength="951.6" clip-path="url(#terminal-905765158-line-17)">                        have been modified and deleted, but new files you have</text><text class="terminal-905765158-r1" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-905765158-line-17)"> +</text><text class="terminal-905765158-r1" x="0" y="459.2" textLength="732" clip-path="url(#terminal-905765158-line-18)">                        not told Git about are not affected.</text><text class="terminal-905765158-r1" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-905765158-line-18)"> +</text><text class="terminal-905765158-r1" x="0" y="483.6" textLength="793" clip-path="url(#terminal-905765158-line-19)">  -e, --edit            edit the commit message before committing</text><text class="terminal-905765158-r1" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-905765158-line-19)"> +</text><text class="terminal-905765158-r1" x="0" y="508" textLength="597.8" clip-path="url(#terminal-905765158-line-20)">  -l, --message-length-limit MESSAGE_LENGTH_LIMIT</text><text class="terminal-905765158-r1" x="976" y="508" textLength="12.2" clip-path="url(#terminal-905765158-line-20)"> +</text><text class="terminal-905765158-r1" x="0" y="532.4" textLength="732" clip-path="url(#terminal-905765158-line-21)">                        length limit of the commit message; </text><text class="terminal-905765158-r4" x="732" y="532.4" textLength="12.2" clip-path="url(#terminal-905765158-line-21)">0</text><text class="terminal-905765158-r1" x="744.2" y="532.4" textLength="158.6" clip-path="url(#terminal-905765158-line-21)"> for no limit</text><text class="terminal-905765158-r1" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-905765158-line-21)"> +</text><text class="terminal-905765158-r1" x="0" y="556.8" textLength="671" clip-path="url(#terminal-905765158-line-22)">  --                    Positional arguments separator </text><text class="terminal-905765158-r2" x="671" y="556.8" textLength="12.2" clip-path="url(#terminal-905765158-line-22)">(</text><text class="terminal-905765158-r1" x="683.2" y="556.8" textLength="134.2" clip-path="url(#terminal-905765158-line-22)">recommended</text><text class="terminal-905765158-r2" x="817.4" y="556.8" textLength="12.2" clip-path="url(#terminal-905765158-line-22)">)</text><text class="terminal-905765158-r1" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-905765158-line-22)"> +</text><text class="terminal-905765158-r1" x="976" y="581.2" textLength="12.2" clip-path="url(#terminal-905765158-line-23)"> </text> </g> </g> From 6b4f8b0c888e0b59a95f12826c6466227e221da8 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Mon, 9 Jun 2025 22:49:58 +0800 Subject: [PATCH 679/685] docs(CHANGELOG): run `pre-commit run --all-files` to fix CI --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76b6e36e94..9d7a31cc40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ - **cli**: update description for deprecate warning - **commit**: emit deprecated warning of cz commit -s -- **Check**: make parameters backward compatiable +- **Check**: make parameters backward compatible - **BaseConfig**: mypy error - **deprecated**: mark deprecate in v5 - **defaults**: add non-capitalized default constants back and deprecated warning From 98a81f89bd3f512067835cfa77fc55701673fbb6 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Tue, 10 Jun 2025 19:13:10 +0800 Subject: [PATCH 680/685] build: remove not needed importlib-metadata dependency for python >= 3.10 --- poetry.lock | 93 +++----------------------------------------------- pyproject.toml | 3 +- 2 files changed, 6 insertions(+), 90 deletions(-) diff --git a/poetry.lock b/poetry.lock index c5c893931a..e7f0e96e51 100644 --- a/poetry.lock +++ b/poetry.lock @@ -222,7 +222,6 @@ description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" groups = ["documentation"] -markers = "python_version == \"3.9\"" files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -231,22 +230,6 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} -[[package]] -name = "click" -version = "8.2.1" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.10" -groups = ["documentation"] -markers = "python_version != \"3.9\"" -files = [ - {file = "click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b"}, - {file = "click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - [[package]] name = "colorama" version = "0.4.6" @@ -550,31 +533,6 @@ perf = ["ipython"] test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] type = ["pytest-mypy"] -[[package]] -name = "importlib-metadata" -version = "8.7.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.9" -groups = ["main"] -markers = "python_version != \"3.9\"" -files = [ - {file = "importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd"}, - {file = "importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000"}, -] - -[package.dependencies] -zipp = ">=3.20" - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -perf = ["ipython"] -test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] -type = ["pytest-mypy"] - [[package]] name = "iniconfig" version = "2.1.0" @@ -594,7 +552,6 @@ description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.9" groups = ["dev"] -markers = "python_version == \"3.9\"" files = [ {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, @@ -626,46 +583,6 @@ qtconsole = ["qtconsole"] test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] -[[package]] -name = "ipython" -version = "8.37.0" -description = "IPython: Productive Interactive Computing" -optional = false -python-versions = ">=3.10" -groups = ["dev"] -markers = "python_version != \"3.9\"" -files = [ - {file = "ipython-8.37.0-py3-none-any.whl", hash = "sha256:ed87326596b878932dbcb171e3e698845434d8c61b8d8cd474bf663041a9dcf2"}, - {file = "ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} -prompt_toolkit = ">=3.0.41,<3.1.0" -pygments = ">=2.4.0" -stack_data = "*" -traitlets = ">=5.13.0" -typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} - -[package.extras] -all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] -black = ["black"] -doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli ; python_version < \"3.11\"", "typing_extensions"] -kernel = ["ipykernel"] -matplotlib = ["matplotlib"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["ipywidgets", "notebook"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] -test-extra = ["curio", "ipython[test]", "jupyter_ai", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] - [[package]] name = "jedi" version = "0.19.2" @@ -1104,7 +1021,7 @@ description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" groups = ["dev"] -markers = "python_version == \"3.9\" and sys_platform != \"win32\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +markers = "sys_platform != \"win32\"" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, @@ -1207,7 +1124,7 @@ description = "Run a subprocess in a pseudo terminal" optional = false python-versions = "*" groups = ["dev"] -markers = "python_version == \"3.9\" and sys_platform != \"win32\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +markers = "sys_platform != \"win32\"" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -1817,7 +1734,7 @@ files = [ {file = "typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af"}, {file = "typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4"}, ] -markers = {main = "python_version < \"3.11\"", dev = "python_version < \"3.12\"", script = "python_version < \"3.11\"", test = "python_version < \"3.11\""} +markers = {main = "python_version < \"3.11\"", dev = "python_version < \"3.11\"", script = "python_version < \"3.11\"", test = "python_version < \"3.11\""} [[package]] name = "urllib3" @@ -2009,11 +1926,11 @@ description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" groups = ["main", "documentation"] +markers = "python_version == \"3.9\"" files = [ {file = "zipp-3.22.0-py3-none-any.whl", hash = "sha256:fe208f65f2aca48b81f9e6fd8cf7b8b32c26375266b009b413d45306b6148343"}, {file = "zipp-3.22.0.tar.gz", hash = "sha256:dd2f28c3ce4bc67507bfd3781d21b7bb2be31103b51a4553ad7d90b84e57ace5"}, ] -markers = {documentation = "python_version == \"3.9\""} [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] @@ -2026,4 +1943,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "f35cf57718e28836cf1e70b33edab9ce623b01a7f2d31d712585554721f6d403" +content-hash = "c98af83d4ce726bbfba04eea3de90e642fb7bdb08bedf0bf1b00b92a1b140e76" diff --git a/pyproject.toml b/pyproject.toml index 6990741957..ab3ba39ee1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,8 +23,7 @@ dependencies = [ "typing-extensions (>=4.0.1,<5.0.0) ; python_version < '3.11'", "charset-normalizer (>=2.1.0,<4)", # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility - "importlib-metadata >=8.0.0,!=8.7.0,<9.0.0 ; python_version == '3.9'", # importlib-metadata@8.7.0 + python3.9 breaks our unit test - "importlib-metadata >=8.0.0,<9.0.0 ; python_version != '3.9'", + "importlib-metadata >=8.0.0,<8.7.0 ; python_version < '3.10'", ] keywords = ["commitizen", "conventional", "commits", "git"] # See also: https://pypi.org/classifiers/ From db94c4dbc12f153cb340654ba7f2458c3c652d3d Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Tue, 10 Jun 2025 19:31:34 +0800 Subject: [PATCH 681/685] docs(defaults): deprecate type Questions --- commitizen/defaults.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/commitizen/defaults.py b/commitizen/defaults.py index a49d6d9428..94d4d97b22 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -8,9 +8,6 @@ from commitizen.question import CzQuestion -# Type -Questions = Iterable[MutableMapping[str, Any]] # TODO: deprecate this? - class CzSettings(TypedDict, total=False): bump_pattern: str @@ -161,6 +158,10 @@ def get_tag_regexes( } +# Type +Questions = Iterable[MutableMapping[str, Any]] # TODO: remove this in v5 + + def __getattr__(name: str) -> Any: # PEP-562: deprecate module-level variable @@ -176,6 +177,7 @@ def __getattr__(name: str) -> Any: "change_type_order": (CHANGE_TYPE_ORDER, "CHANGE_TYPE_ORDER"), "encoding": (ENCODING, "ENCODING"), "name": (DEFAULT_SETTINGS["name"], "DEFAULT_SETTINGS['name']"), + "Questions": (Questions, "Iterable[CzQuestion]"), } if name in deprecated_vars: value, replacement = deprecated_vars[name] From f80292e15be28014c820eabc5ec652f46fe5a3a4 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Tue, 10 Jun 2025 20:44:06 +0800 Subject: [PATCH 682/685] docs(customization.md): fix grammar mistake, add title to code blocks --- docs/customization.md | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/docs/customization.md b/docs/customization.md index e97558a308..df77171077 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -10,7 +10,7 @@ The basic steps are: Example: -```toml +```toml title="pyproject.toml" [tool.commitizen] name = "cz_customize" @@ -50,7 +50,7 @@ message = "Do you want to add body message in commit?" The equivalent example for a json config file: -```json +```json title=".cz.json" { "commitizen": { "name": "cz_customize", @@ -106,7 +106,7 @@ The equivalent example for a json config file: And the correspondent example for a yaml file: -```yaml +```yaml title=".cz.yaml" commitizen: name: cz_customize customize: @@ -149,16 +149,16 @@ commitizen: | Parameter | Type | Default | Description | | ------------------- | ------ | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `questions` | `Questions` | `None` | Questions regarding the commit message. Detailed below. The type `Questions` is an alias to `Iterable[MutableMapping[str, Any]]` which is defined in `commitizen.defaults`. It expects a list of dictionaries. | +| `questions` | `Questions` | `None` | Questions regarding the commit message. Detailed below. The type `Questions` is an alias to `Iterable[MutableMapping[str, Any]]` which is defined in `commitizen.defaults`. It expects a list of dictionaries. | | `message_template` | `str` | `None` | The template for generating message from the given answers. `message_template` should either follow [Jinja2][jinja2] formatting specification, and all the variables in this template should be defined in `name` in `questions` | -| `example` | `str` | `""` | (OPTIONAL) Provide an example to help understand the style. Used by `cz example`. | -| `schema` | `str` | `""` | (OPTIONAL) Show the schema used. Used by `cz schema`. | -| `schema_pattern` | `str` | `""` | (OPTIONAL) The regular expression used to do commit message validation. Used by `cz check`. | -| `info_path` | `str` | `""` | (OPTIONAL) The path to the file that contains explanation of the commit rules. Used by `cz info`. If not provided `cz info`, will load `info` instead. | -| `info` | `str` | `""` | (OPTIONAL) Explanation of the commit rules. Used by `cz info`. | +| `example` | `str` | `""` | (OPTIONAL) Provide an example to help understand the style. Used by `cz example`. | +| `schema` | `str` | `""` | (OPTIONAL) Show the schema used. Used by `cz schema`. | +| `schema_pattern` | `str` | `""` | (OPTIONAL) The regular expression used to do commit message validation. Used by `cz check`. | +| `info_path` | `str` | `""` | (OPTIONAL) The path to the file that contains explanation of the commit rules. Used by `cz info`. If not provided `cz info`, will load `info` instead. | +| `info` | `str` | `""` | (OPTIONAL) Explanation of the commit rules. Used by `cz info`. | | `bump_map` | `dict` | `None` | (OPTIONAL) Dictionary mapping the extracted information to a `SemVer` increment type (`MAJOR`, `MINOR`, `PATCH`) | | `bump_pattern` | `str` | `None` | (OPTIONAL) Regex to extract information from commit (subject and body) | -| `change_type_order`| `str` | `None` | (OPTIONAL) List of strings used to order the Changelog. All other types will be sorted alphabetically. Default is `["BREAKING CHANGE", "Feat", "Fix", "Refactor", "Perf"]` | +| `change_type_order` | `str` | `None` | (OPTIONAL) List of strings used to order the Changelog. All other types will be sorted alphabetically. Default is `["BREAKING CHANGE", "Feat", "Fix", "Refactor", "Perf"]` | | `commit_parser` | `str` | `None` | (OPTIONAL) Regex to extract information used in creating changelog. [See more][changelog-spec] | | `changelog_pattern` | `str` | `None` | (OPTIONAL) Regex to understand which commits to include in the changelog | | `change_type_map` | `dict` | `None` | (OPTIONAL) Dictionary mapping the type of the commit to a changelog entry | @@ -215,7 +215,7 @@ Create a Python module, for example `cz_jira.py`. Inherit from `BaseCommitizen`, and you must define `questions` and `message`. The others are optional. -```python +```python title="cz_jira.py" from commitizen.cz.base import BaseCommitizen from commitizen.defaults import Questions @@ -259,7 +259,7 @@ class JiraCz(BaseCommitizen): The next file required is `setup.py` modified from flask version. -```python +```python title="setup.py" from setuptools import setup setup( @@ -295,7 +295,7 @@ You need to define 2 parameters inside your custom `BaseCommitizen`. Let's see an example. -```python +```python title="cz_strange.py" from commitizen.cz.base import BaseCommitizen @@ -315,7 +315,7 @@ cz -n cz_strange bump ### Custom changelog generator The changelog generator should just work in a very basic manner without touching anything. -You can customize it of course, and this are the variables you need to add to your custom `BaseCommitizen`. +You can customize it of course, and the following variables are the ones you need to add to your custom `BaseCommitizen`. | Parameter | Type | Required | Description | | -------------------------------- | ------------------------------------------------------------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -326,7 +326,7 @@ You can customize it of course, and this are the variables you need to add to yo | `changelog_hook` | `method: (full_changelog: str, partial_changelog: Optional[str]) -> str` | NO | Receives the whole and partial (if used incremental) changelog. Useful to send slack messages or notify a compliance department. Must return the full_changelog | | `changelog_release_hook` | `method: (release: dict, tag: git.GitTag) -> dict` | NO | Receives each generated changelog release and its associated tag. Useful to enrich releases before they are rendered. Must return the update release -```python +```python title="cz_strange.py" from commitizen.cz.base import BaseCommitizen import chat import compliance @@ -376,8 +376,6 @@ class StrangeCommitizen(BaseCommitizen): return full_changelog ``` -[changelog-des]: ./commands/changelog.md#description - ### Raise Customize Exception If you want `commitizen` to catch your exception and print the message, you'll have to inherit `CzException`. @@ -528,3 +526,4 @@ by: [template-config]: config.md#template [extras-config]: config.md#extras +[changelog-des]: ./commands/changelog.md#description From 7ef1f7e8d6519270df63387b50c2c0cd2591c832 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung <bear890707@gmail.com> Date: Wed, 11 Jun 2025 14:21:02 +0800 Subject: [PATCH 683/685] docs(bump.md): add titles to code blocks and fix minor grammar issues --- docs/commands/bump.md | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/commands/bump.md b/docs/commands/bump.md index 8219cc3461..1320e30a7a 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -31,7 +31,7 @@ cz bump --version-scheme semver ``` 2. Configuration file: -```toml +```toml title="pyproject.toml" [tool.commitizen] version_scheme = "semver" ``` @@ -113,7 +113,7 @@ Note that as per [semantic versioning spec](https://semver.org/#spec-item-9) For example, the following versions (using the [PEP 440](https://peps.python.org/pep-0440/) scheme) are ordered by their precedence and showcase how a release might flow through a development cycle: -- `1.0.0` is the current published version +- `1.0.0` is the currently published version - `1.0.1a0` after committing a `fix:` for pre-release - `1.1.0a1` after committing an additional `feat:` for pre-release - `1.1.0b0` after bumping a beta release @@ -153,7 +153,7 @@ cz bump --check-consistency For example, if we have `pyproject.toml` -```toml +```toml title="pyproject.toml" [tool.commitizen] version = "1.21.0" version_files = [ @@ -162,15 +162,16 @@ version_files = [ ] ``` -`src/__version__.py`, +`src/__version__.py` -```python + +```python title="src/__version__.py" __version__ = "1.21.0" ``` -and `setup.py`. +and `setup.py` -```python +```python title="setup.py" from setuptools import setup setup(..., version="1.0.5", ...) @@ -193,7 +194,7 @@ cz bump --local-version For example, if we have `pyproject.toml` -```toml +```toml title="pyproject.toml" [tool.commitizen] version = "5.3.5+0.1.0" ``` @@ -454,7 +455,7 @@ In your `pyproject.toml` or `.cz.toml` tag_format = "v$major.$minor.$patch$prerelease" ``` -The variables must be preceded by a `$` sign and optionally can be wrapped in `{}` . Default is `$version`. +The variables must be preceded by a `$` sign and optionally can be wrapped in `{}`. The default is `$version`. Supported variables: @@ -483,7 +484,7 @@ Some examples `pyproject.toml`, `.cz.toml` or `cz.toml` -```toml +```toml title="pyproject.toml" [tool.commitizen] version_files = [ "src/__version__.py", @@ -496,8 +497,7 @@ This means that it will find a file `setup.py` and will only make a change in a line containing the `version` substring. !!! note - Files can be specified using relative (to the execution) paths, absolute paths - or glob patterns. + Files can be specified using relative (to the execution) paths, absolute paths, or glob patterns. --- @@ -516,7 +516,7 @@ Some examples `pyproject.toml`, `.cz.toml` or `cz.toml` -```toml +```toml title="pyproject.toml" [tool.commitizen] bump_message = "release $current_version → $new_version [skip-ci]" ``` @@ -529,7 +529,7 @@ When set to `true` the changelog is always updated incrementally when running `c Defaults to: `false` -```toml +```toml title="pyproject.toml" [tool.commitizen] update_changelog_on_bump = true ``` @@ -540,7 +540,7 @@ update_changelog_on_bump = true When set to `true`, Commitizen will create annotated tags. -```toml +```toml title="pyproject.toml" [tool.commitizen] annotated_tag = true ``` @@ -551,7 +551,7 @@ annotated_tag = true When set to `true`, Commitizen will create gpg signed tags. -```toml +```toml title="pyproject.toml" [tool.commitizen] gpg_sign = true ``` @@ -565,7 +565,7 @@ Useful during the initial development stage of your project. Defaults to: `false` -```toml +```toml title="pyproject.toml" [tool.commitizen] major_version_zero = true ``` @@ -591,7 +591,7 @@ execution of the script, some environment variables are available: | `CZ_PRE_INCREMENT` | Whether this is a `MAJOR`, `MINOR` or `PATH` release | | `CZ_PRE_CHANGELOG_FILE_NAME` | Path to the changelog file, if available | -```toml +```toml title="pyproject.toml" [tool.commitizen] pre_bump_hooks = [ "scripts/generate_documentation.sh" @@ -618,7 +618,7 @@ release. During execution of the script, some environment variables are availabl | `CZ_POST_INCREMENT` | Whether this was a `MAJOR`, `MINOR` or `PATH` release | | `CZ_POST_CHANGELOG_FILE_NAME` | Path to the changelog file, if available | -```toml +```toml title="pyproject.toml" [tool.commitizen] post_bump_hooks = [ "scripts/slack_notification.sh" @@ -631,7 +631,7 @@ Offset with which to start counting prereleases. Defaults to: `0` -```toml +```toml title="pyproject.toml" [tool.commitizen] prerelease_offset = 1 ``` @@ -651,7 +651,7 @@ Options: `pep440`, `semver`, `semver2` Defaults to: `pep440` -```toml +```toml title="pyproject.toml" [tool.commitizen] version_scheme = "semver" ``` From 2c230107f39778a74d61c2c39a808f0ad76a6cb4 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Fri, 13 Jun 2025 23:22:08 +0800 Subject: [PATCH 684/685] ci(github-actions): set organization to true for JamesIves/github-sponsors-readme-action@v1 --- .github/workflows/docspublish.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml index a871d3c379..e6bb9c7226 100644 --- a/.github/workflows/docspublish.yml +++ b/.github/workflows/docspublish.yml @@ -68,6 +68,7 @@ jobs: with: token: ${{ secrets.PERSONAL_ACCESS_TOKEN_FOR_ORG }} file: "docs/README.md" + organization: true - name: Push doc to Github Page uses: peaceiris/actions-gh-pages@v4 with: From d0c89afc74baa5ca9ea79b8a2846b7682482edbc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 01:17:47 +0000 Subject: [PATCH 685/685] ci(deps): bump dawidd6/action-homebrew-bump-formula from 4 to 5 Bumps [dawidd6/action-homebrew-bump-formula](https://github.com/dawidd6/action-homebrew-bump-formula) from 4 to 5. - [Release notes](https://github.com/dawidd6/action-homebrew-bump-formula/releases) - [Commits](https://github.com/dawidd6/action-homebrew-bump-formula/compare/v4...v5) --- updated-dependencies: - dependency-name: dawidd6/action-homebrew-bump-formula dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> --- .github/workflows/homebrewpublish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/homebrewpublish.yml b/.github/workflows/homebrewpublish.yml index 443a13b1ba..f5d8004e73 100644 --- a/.github/workflows/homebrewpublish.yml +++ b/.github/workflows/homebrewpublish.yml @@ -24,7 +24,7 @@ jobs: run: | echo "project_version=$(cz version --project)" >> $GITHUB_ENV - name: Update Homebrew formula - uses: dawidd6/action-homebrew-bump-formula@v4 + uses: dawidd6/action-homebrew-bump-formula@v5 with: token: ${{secrets.PERSONAL_ACCESS_TOKEN}} formula: commitizen