Re: [feature request] Is it possible to have git tag can be sorted and filtered by semver?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux