commitizen-tools / commitizen

Create committing rules for projects :rocket: auto bump versions :arrow_up: and auto changelog generation :open_file_folder:
https://commitizen-tools.github.io/commitizen/
MIT License
2.53k stars 268 forks source link

cz commit -s should fail with deprecation warning BEFORE going through dialog, --help should reflect behavior #1135

Open yarikoptic opened 5 months ago

yarikoptic commented 5 months ago

Description

Bad Dev Experience if asks for all the questions to only fail after

Steps to reproduce

Run cz commit -s -a

Current behavior

❯ cz commit -s -a
? Select the type of change you are committing style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
? What is the scope of this change? (class or file name): (press [enter] to skip)

? Write a short and imperative summary of the code changes: (lower case and no period)
 move codespell configuration to pyproject.toml
? Provide additional contextual information about the code changes: (press [enter] to skip)
 So people could just run "codespell" without pre-commit and have centralized configuration for tools (the others are already in pyproject.toml)
? Is this a BREAKING CHANGE? Correlates with MAJOR in SemVer No
? Footer. Information about Breaking Changes and reference issues that this commit closes: (press [enter] to skip)

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)

signoff mechanic is deprecated, please use `cz commit -- -s` instead.
fatal: /home/yoh/.tmp/tmpsqo29rpl: '/home/yoh/.tmp/tmpsqo29rpl' is outside repository at '/home/yoh/proj/misc/commitizen'

Desired behavior

❯ cz commit -s -a
signoff mechanic is deprecated, please use `cz commit -- -s` instead.

Also --help should mention -- -- not there at all

❯ cz commit --help
usage: cz commit [-h] [--retry] [--no-retry] [--dry-run] [--write-message-to-file FILE_PATH] [-s] [-a] [-l MESSAGE_LENGTH_LIMIT]

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

Screenshots

No response

Environment

❯ cz version
3.26.0
❯ python --version
Python 3.11.9

the rest is unrelated... and see

Lee-W commented 5 months ago

Hi @yarikoptic , thanks for reporting! This is indeed something missed.

marcosdotme commented 5 months ago

@Lee-W Can I work on that?

Lee-W commented 5 months ago

More than welcome 🙂

marcosdotme commented 5 months ago

@Lee-W @yarikoptic Guys, the behavior we expect is 1 or 2?

Behavior 1 (prints the message and exit, forcing us to use cz commit -- -s)

image

Behavior 2 (prints the warning message and continue)

image

On the background, when we use the deprecated version cz commit -s, this is replaced with -- -s already:

image

Lee-W commented 5 months ago

I would prefer 2 for now and maybe change it in v4 . We also need to add -- into the help text