Skip to content

Pre-commit shallow cloning strategy fails to grab the tag (git itself does) #2610

@ssbarnea

Description

@ssbarnea

search you tried in the issue tracker

yes, found two related closed issues

describe your issue

As a user of ansible-lint reported that the hook reported its own version incorrectly as 0.1dev1 I had to research what happens. This allowed me to find #2354 and #1593 which reported the same kind of issue across different python projects using setuptools-scm.

I did look at the cloning logic of pre-commit tool which attempts to perform a shallow cloning first and only if this fails tries to make a full one. I manually repeated the steps and discovered that its operation does not created any local tags, so not surprise that any project using setuptools-scm would have wrong versioning:

Test using pre-commit internal cloning strategy

git init --template= ansible-lint
cd ansible-lint
git remote add origin https://github.com/ansible/ansible-lint
git -c protocol.version=2 fetch origin v6.8.7 --depth=1
git checkout FETCH_HEAD
git -c protocol.version=2 submodule update --init --recursive --depth=1
# done, now testing if we have any tags:
git tag --points-at HEAD
# ... ooops, no tag.

Test using official git shallow cloning:

git clone --depth=1 --branch v6.8.7  https://github.com/ansible/ansible-lint
cd ansible-lint
git tag --points-at HEAD
v6.8.7
# So it worked fine as tag is present!

As seen, is not the shallow-cloning that is the source of the problem but the absence of the tag . When using a single git command to clone, this is added, but with the more complex logic of pre-commit, this is not added.

I guess that this issue could be avoided by including the tag addition in pre-commit internal shallow cloning strategy.

pre-commit --version

2.20.0

.pre-commit-config.yaml

- repo: https://github.com/ansible/ansible-lint
    rev: v6.8.7
    hooks:
      - id: ansible-lint

~/.cache/pre-commit/pre-commit.log (if present)

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions