Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cz bump fails when running with rye #1118

Open
my1e5 opened this issue May 16, 2024 · 3 comments · May be fixed by #1124
Open

cz bump fails when running with rye #1118

my1e5 opened this issue May 16, 2024 · 3 comments · May be fixed by #1124

Comments

@my1e5
Copy link

my1e5 commented May 16, 2024

Description

I'm using rye to manage my python project - it's similar to poetry. Running cz bump through rye gives

$ rye run cz bump
fatal: not a git repository (or any of the parent directories): .git

Steps to reproduce

Similar to poetry, we add commitizen as a dev dependency.

$ rye add commitizen --dev

Then

$ rye run cz init
Welcome to commitizen!

Answer the questions to configure your project.
For further configuration visit:

https://commitizen-tools.github.io/commitizen/config/

? Please choose a supported config file:  pyproject.toml
? Please choose a cz (commit rule): (default: cz_conventional_commits) cz_conventional_commits
? Choose the source of the version: pep621: Get and set version from pyproject.toml:project.version field
No Existing Tag. Set tag to v0.0.1
? Choose version scheme:  pep440
? Please enter the correct version format: (default: "$version")
? Create changelog automatically on bump Yes
? Keep major version zero (0.x) during breaking changes Yes
? What types of pre-commit hook you want to install? (Leave blank if you don't want to install) done

You can bump the version running:

        cz bump

Configuration complete 🚀

Current behavior

The way to run a script/executable you've added to your python project is using rye run

$ rye run cz bump
fatal: not a git repository (or any of the parent directories): .git

Is this because cz.exe is stored in .venv/Scripts/cz.exe?

So it can't find the .git folder which is two levels above?

Desired behavior

No fatal errors. cz is able to find the .git repo.

Screenshots

No response

Environment

$ rye run cz version
3.25.0
$ rye run python --version
Python 3.12.2
$ rye --version
rye 0.33.0
commit: 0.33.0 (58523f69f 2024-04-24)
platform: windows (x86_64)
self-python: cpython@3.12.2
symlink support: true
uv enabled: true
@my1e5
Copy link
Author

my1e5 commented May 16, 2024

To add to this. If I install cz globally using pip.

$ pip install --user -U Commitizen

Then cz bump works in all my non-rye python projects. But in my rye project even running cz directly gives

$ cd my-rye-managed-project/
$ ls -a
.  ..  .git .gitignore  .pre-commit-config.yaml  .python-version  .ruff_cache  .venv  dist  pyproject.toml  README.md  requirements.lock  requirements-dev.lock  src
$ cz bump
fatal: not a git repository (or any of the parent directories): .git

@my1e5
Copy link
Author

my1e5 commented May 16, 2024

Did some more digging

$ rye run cz --debug bump
fatal: not a git repository (or any of the parent directories): .git
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\my1e5\Projects\my1e5\myproject\.venv\Scripts\cz.exe\__main__.py", line 8, in <module>
  File "C:\Users\my1e5\Projects\my1e5\myproject\.venv\Lib\site-packages\commitizen\cli.py", line 607, in main
    args.func(conf, arguments)()
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\my1e5\Projects\my1e5\myproject\.venv\Lib\site-packages\commitizen\commands\bump.py", line 41, in __init__
    raise NotAGitProjectError()
commitizen.exceptions.NotAGitProjectError: fatal: not a git repository (or any of the parent directories): .git

Looking specifically at the output of cmd.run

def is_git_project() -> bool:
    c = cmd.run("git rev-parse --is-inside-work-tree")
    print(c)
$ rye run cz --debug bump
Command(out='', err="'git' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n", stdout=b'', stderr=b"'git' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n", return_code=1)

But then even ls doesn't work. Changing it to c = cmd.run("ls")

$ rye run cz --debug bump
Command(out='', err="'ls' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n", stdout=b'', stderr=b"'ls' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n", return_code=1)

However, for some reason, in cmd.py if I change shell=False. Then it works.

def run(cmd: str, env=None) -> Command:
    if env is not None:
        env = {**os.environ, **env}
    process = subprocess.Popen(
        cmd,
        shell=False,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        stdin=subprocess.PIPE,
        env=env,
    )
$ rye run cz --debug bump
Tag 0.1.0 could not be found. 
Possible causes:
- version in configuration is not the current version
- tag_format is missing, check them using 'git tag --list'

? Is this the first tag created? (Y/n)

Just as a reminder - in all my rye-managed projects running cz directly (i.e. not using rye run) gives the same error. But this can also be fixed using shell=False. I have no issues running cz directly in my other python projects not managed by rye.

@woile
Copy link
Member

woile commented May 17, 2024

Would you mind submitting a PR?
I think we can set shell=Falseif the system is windows. I haven't had that issue on mac

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment