feat(commit): implement questions 'filter' support with handlers
Description
Supported APIs: Common Python, commitizen.cz.utils.* functions
Example YAML configurations:
commitizen:
name: cz_customize
customize:
questions:
- ...
- type: input
name: scope
message: 'Scope of the change :'
filter: 'lambda text: commitizen.cz.utils.required_validator(text, msg="! Error: Scope is required")'
default: ''
- type: input
name: subject
message: 'Title of the commit (starting in lower case and without period) :'
filter: 'lambda text: commitizen.cz.utils.required_validator(text.strip(".").strip(), msg="! Error: Title is required")'
default: ''
- type: input
name: body
message: 'Additional contextual message (Empty to skip) :'
default: 'Issue: #...'
filter: 'commitizen.cz.utils.multiple_line_breaker'
Additional commits to add missing YAML tests, fix YAML configurations, and then add the keys for this feature.
Checklist
- [x] Add test cases to all the changes you introduce
- [x] Run
./scripts/formatand./scripts/testlocally to ensure this change passes linter check and test - [x] Test the changes on the local machine manually
- [x] Update the documentation for the changes
Expected behavior
? Title of the commit (starting in lower case and without period) :
Hello
! Error: Title is required
Steps to Test This Pull Request
Example provided in the description
Additional context
Codecov Report
:white_check_mark: All modified and coverable lines are covered by tests.
:white_check_mark: Project coverage is 98.26%. Comparing base (120d514) to head (e01b323).
:warning: Report is 805 commits behind head on master.
Additional details and impacted files
@@ Coverage Diff @@
## master #1207 +/- ##
==========================================
+ Coverage 97.33% 98.26% +0.92%
==========================================
Files 42 58 +16
Lines 2104 2712 +608
==========================================
+ Hits 2048 2665 +617
+ Misses 56 47 -9
| Flag | Coverage Δ | |
|---|---|---|
| unittests | 98.26% <100.00%> (+0.92%) |
:arrow_up: |
Flags with carried forward coverage won't be shown. Click here to find out more.
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
:rocket: New features to boost your workflow:
- :snowflake: Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
- Coverage resolved, 100% over commit.py
- TOML faulty types fixed
- Local containerized tests fixed for 'safe.directory' ownership issues
- Tests for 'cz_customize' using the
.customizeconfig rather than unrelatedcz_jira - Contents of the questions prompts tested for coverage and types around
commands.Commit
Refactored as discussed : feat(commit): implement questions 'filter' support with handlers
Supported APIs:
multiple_line_breakerrequired_validatorrequired_validator_scoperequired_validator_subject_striprequired_validator_title_strip
Example YAML configurations:
commitizen:
name: cz_customize
customize:
questions:
- ...
- type: input
name: scope
message: 'Scope of the change :'
filter: 'required_validator_scope'
default: ''
- type: input
name: subject
message: 'Title of the commit (starting in lower case and without period) :'
filter: 'required_validator_subject_strip'
default: ''
- type: input
name: body
message: 'Additional contextual message (Empty to skip) :'
default: 'Issue: #...'
filter: 'multiple_line_breaker'
Rebased :wink: .
Please cherry-pick at least the coverage improvements and minor fixes before the filter features review :+1: .
I'll come back to this one after 4.8.3 release. As for another PR, I'll take a look at these 2 days. Sorry for the long waiting and thanks so much for still being around!
Rebased from last year's PR, to update towards 4.9.1+adriandc.20250914
for pre-commit-crocodile 8.0.0 (prek becoming default btw).
Feel free to edit the PR or cherry-pick at will.
I also implemented a check-commitizen-branch wrapper to the commitizen-branch hook,
handling set-head if needed, covering #704, also #593, but fixing upstream needs analysis.
For the record, I'm not a fan of pinning to a patched & customized fork for so long, blocking my users + coworkers on a specific version of commitizen-tools that I rebase 2-3 times a year, including now v5-moved fixes and questions features, but works fine since August 2024.