Thanks to visit codestin.com
Credit goes to github.com

Skip to content

tags_only autoupdate picks first (alphabetical?) tag when multiple on SHA #2311

@mblayman

Description

@mblayman

describe your issue

I got an autoupdate PR from pre-commit.ci at https://github.com/mblayman/atlas/pull/29/files

The autoupdate is trying to update the luacheck hook from v0.26.0 to latest. This is not ideal because latest is a moving target while v0.26.0 is fixed.

As of this writing, luacheck has three tags on the latest tagged release:
image

I inspected the autoupdate command and found the source of this issue at

tag_cmd = (
*git_cmd, 'describe',
'FETCH_HEAD', '--tags', '--abbrev=0',
)

autoupdate basically runs git describe FETCH_HEAD --tags --abbrev=0. In the case of the luacheck repo, this returns latest.

➜  luacheck git:(master) git describe FETCH_HEAD --tags --abbrev=0
latest

I was able to replicate the behavior of this command in the pre-commit repo itself by adding a latest tag to the same SHA as v2.17.0.

git tag latest d3bdf1403d92f8cf2dc77bd99a5da42f0a6cef17
git describe --tags FETCH_HEAD --abbrev=0 
latest

While git describe FETCH_HEAD --tags --abbrev=0 is elegant in its simplicity, it can only return a single tag, so it's limited in this multiple tags case.

Possible solution

pre-commit could look for the latest tag, then check to see if there are multiple tags on that SHA. If so, a tag could be preferred if it looks more "version-y." Maybe that's a semver style regex or something like that.

One of the tricks, I think, is to figure out how to check for multiple tags. I think the simplest way would be to get the output from tag_cmd and run that through git tag --points-at <tag_cmd output>. If there are multiple lines, then the version checking kind of stuff could occur.

Before trying this out, I wanted to check if this seems like a reasonable path or if there are other preferential ways to tackle this kind of thing.

pre-commit --version

pre-commit 2.17.0

.pre-commit-config.yaml

ci:
  # The compilation time is too long so CI hits a timeout.
  skip: [luaformatter]

repos:
- repo: https://github.com/lunarmodules/luacheck
  rev: "v0.26.0"
  hooks:
  - id: luacheck
- repo: https://github.com/mblayman/LuaFormatter
  rev: "ad94bea01ca027ca46541af727e15d002aa5ce74"
  hooks:
  - id: luaformatter

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

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions