Re: Bugreport: Prefix - is ignored when sorting (on committerdate)

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

 



Hej Fredrik,

On Tue, 10 Jan 2023 at 10:50, Fredrik Öberg <fredrik@xxxxxxxxxxx> wrote:
> - Create a new repository
> - Add a new file to the repository and commit
> - Create a tag
> $ git tag -a TagOne -m ""
> - Update the file and commit the change
> - Create a tag
> $ git tag -a TagTwo -m ""
> - List tags by committerdate:
> $ git tag -l --sort=committerdate
> (oldest tag is listed first)
> - List tags by reversed committerdate:
> $ git tag -l --sort=-committerdate
> (oldest tag it still listed first)

> Anything else you want to add:
> The correct behaviour (reversing sort-order by using the minus-prefix)
> has been verified in
> version 2.11.0, 2.11.1, 2.14.2, 2.19.1, 2.19.2, 2.23.0 on CentOS 7.4
> version 2.31.1 and 2.35.1 on CentOS 7.4 contains the error
> version 2.34.1.windows.1 contains the error

This bisects to 7c5045fc18 ("ref-filter: apply fallback refname sort
only after all user sorts", 2020-05-03). I've cc-ed the author. That
commit does change the behavior for the kind of test repo you describe.

That said, you're using "committerdate" here. If you use "taggerdate"
(or "creatordate") I think you'll get the output you expect, even for
newer Git versions. Does that help?

Since you just have two commits in the reproducer, there's a strong
correlation between tag names and the timestamps involved. You actually
end up sorting by refname: because there is no committerdate for these
tags, the refnames are compared as a fallback. While the old code then
applied the reversal ('-') to *that*, the new code first fails to find
any difference, so doesn't have anything to reverse, then falls back to
comparing the refnames, at which point it doesn't consider reversing the
result.

All of this is based on my understanding. I could obviously be wrong.

I suppose it could be argued that the '-' should be applied to the
fallback as well, e.g., to uphold some sort of "using '-' should give
the same result as piping the whole thing through tac" (i.e., respecting
`s->reverse` in `compare_refs()`, if you're following along in
7c5045fc18). With multiple sort keys, some with '-' and some
without, we'd grab the '-' from the first key. It seems like that could
make sense, actually.

I might post such a patch, but as noted above, I think what you really
want to use is "taggerdate". I hope that helps.

Martin




[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