Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

cz commit with prepare-commit-msg hook #249

Closed
@saygox

Description

Description

cz commit is very good tool.
If prepare-commit-msg hook calls cz commit, become easy to commit by many user.

Possible Solution

like cz check, writing pre-commit config

---
repos:
- hooks:
 - id: commitizen-prepare-commit-msg
 stages: [prepare-commit-msg]

and user type git comit, then prepare-commit-msg hook works and invokes cz commit.

Is this feature accepted as this product policy?

Additional context

I did a basic research. And I found that there are two issues.

  • The current cz commit calls git. But in this case, git calls cz commit
  • Git hook is started without standard input, so we can't create commit message interactively

I made a test implementation to solve the problem by the following method

  • When called from git, write the commit message to the file which is set by "--commit-msg-file" argument
  • Open tty manualy and use as stdio.

but this change has sideffect.

tty is manually opened as io.FileIO.
But prompt_toolkit (which used by questionary) assumes tty is opened as io.TextIOWrapper.
As a workaround I added wrap class

class WrapStdin:
 def __init__(self):
 fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY)
 tty = open(fd, "wb+", buffering=0)
 self.tty = tty
 def __getattr__(self, key):
 if key == "encoding":
 return "UTF-8"
 return getattr(self.tty, key)
 def __del__(self):
 self.tty.close()

All patch code is here.
saygox@033159d

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      AltStyle によって変換されたページ (->オリジナル) /