On 2024-07-22 at 16:58:11, Thaina Yu wrote: > Currently there is `ls-remote` and `tag` that has option to > --sort=version:refname which is really useful when we have tag as > version format and let it sort as numeric version > > But it could be better if we can also sort and filter the version in > the range of semver format. So we can use git system as dependency > management system natively > > So I would like to propose a new sort option semver:refname > > `git ls-remote --sort=semver:refname myRepoUrl refs/tags/v{^0.*.*}` > where brace {} can be used to define semver versioning ranges for the > patterns in addition to glob filter Assuming we add such a feature, how does sorting by SemVer differ from the current version sorting? That is, where is the current version sorting deficient for SemVer? Also, what do you want to happen when a tag doesn't meet SemVer requirements (note that the "v" prefix is not allowed in SemVer, although it's customary in tags)? As for the special range syntax, I think the typical suggestion is to filter the output of ls-remote or for-each-ref by piping it to a suitable program. Perl or Ruby are common choices here, and both could easily parse SemVer tags. For example: git for-each-ref --sort=v:refname refs/tags/ | ruby -ne 'if %r[\trefs/tags/v(\d+)\.(\d+)\.(\d+)$]; ver = Regexp.last_match[1..3].map(&:to_i); puts $_ if [[2, 6, 3], ver, [2, 15, 2]].sort[1] == ver; end' Git is intentionally designed to support this kind of shell scripting. -- brian m. carlson (they/them or he/him) Toronto, Ontario, CA
Attachment:
signature.asc
Description: PGP signature