commitizen icon indicating copy to clipboard operation
commitizen copied to clipboard

feat(commit): implement questions 'filter' support with handlers

Open AdrianDC opened this issue 1 year ago • 6 comments

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/format and ./scripts/test locally 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

AdrianDC avatar Aug 13 '24 17:08 AdrianDC

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.

codecov[bot] avatar Aug 13 '24 17:08 codecov[bot]

  • 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 .customize config rather than unrelated cz_jira
  • Contents of the questions prompts tested for coverage and types around commands.Commit

AdrianDC avatar Aug 17 '24 00:08 AdrianDC

Refactored as discussed : feat(commit): implement questions 'filter' support with handlers

Supported APIs:

  • multiple_line_breaker
  • required_validator
  • required_validator_scope
  • required_validator_subject_strip
  • required_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'

AdrianDC avatar Aug 25 '24 03:08 AdrianDC

Rebased :wink: .

Please cherry-pick at least the coverage improvements and minor fixes before the filter features review :+1: .

AdrianDC avatar Dec 13 '24 22:12 AdrianDC

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!

Lee-W avatar Jun 08 '25 14:06 Lee-W

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.

AdrianDC avatar Sep 14 '25 17:09 AdrianDC