ref-filter: add support to sort by version
Add support to sort by version using the "v:refname" and "version:refname" option. This is achieved by using the 'versioncmp()' function as the comparing function for qsort. This option is included to support sorting by versions in `git tag -l` which will eventually be ported to use ref-filter APIs. Add documentation and tests for the same. Mentored-by: Christian Couder <christian.couder@gmail.com> Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr> Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
1bb38e5a6a
commit
90c004085c
@ -219,4 +219,40 @@ test_expect_success '`%(contents:lines=-1)` should fail' '
|
||||
test_must_fail git for-each-ref --format="%(refname:short) |%(contents:lines=-1)"
|
||||
'
|
||||
|
||||
test_expect_success 'setup for version sort' '
|
||||
test_commit foo1.3 &&
|
||||
test_commit foo1.6 &&
|
||||
test_commit foo1.10
|
||||
'
|
||||
|
||||
test_expect_success 'version sort' '
|
||||
git for-each-ref --sort=version:refname --format="%(refname:short)" refs/tags/ | grep "foo" >actual &&
|
||||
cat >expect <<-\EOF &&
|
||||
foo1.3
|
||||
foo1.6
|
||||
foo1.10
|
||||
EOF
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'version sort (shortened)' '
|
||||
git for-each-ref --sort=v:refname --format="%(refname:short)" refs/tags/ | grep "foo" >actual &&
|
||||
cat >expect <<-\EOF &&
|
||||
foo1.3
|
||||
foo1.6
|
||||
foo1.10
|
||||
EOF
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'reverse version sort' '
|
||||
git for-each-ref --sort=-version:refname --format="%(refname:short)" refs/tags/ | grep "foo" >actual &&
|
||||
cat >expect <<-\EOF &&
|
||||
foo1.10
|
||||
foo1.6
|
||||
foo1.3
|
||||
EOF
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Reference in New Issue
Block a user