@@ -650,17 +650,59 @@ test_atom refs/tags/signed-long contents "subject line
650650body contents
651651$sig "
652652
653- sort > expected << EOF
654- $( git rev-parse refs/tags/bogo) <committer@example.com> refs/tags/bogo
655- $( git rev-parse refs/tags/master) <committer@example.com> refs/tags/master
656- EOF
653+ test_expect_success ' set up multiple-sort tags' '
654+ for when in 100000 200000
655+ do
656+ for email in user1 user2
657+ do
658+ for ref in ref1 ref2
659+ do
660+ GIT_COMMITTER_DATE="@$when +0000" \
661+ GIT_COMMITTER_EMAIL="$email@example.com" \
662+ git tag -m "tag $ref-$when-$email" \
663+ multi-$ref-$when-$email || return 1
664+ done
665+ done
666+ done
667+ '
657668
658669test_expect_success ' Verify sort with multiple keys' '
659- git for-each-ref --format="%(objectname) %(taggeremail) %(refname)" --sort=objectname --sort=taggeremail \
660- refs/tags/bogo refs/tags/master > actual &&
670+ cat >expected <<-\EOF &&
671+ 100000 <user1@example.com> refs/tags/multi-ref2-100000-user1
672+ 100000 <user1@example.com> refs/tags/multi-ref1-100000-user1
673+ 100000 <user2@example.com> refs/tags/multi-ref2-100000-user2
674+ 100000 <user2@example.com> refs/tags/multi-ref1-100000-user2
675+ 200000 <user1@example.com> refs/tags/multi-ref2-200000-user1
676+ 200000 <user1@example.com> refs/tags/multi-ref1-200000-user1
677+ 200000 <user2@example.com> refs/tags/multi-ref2-200000-user2
678+ 200000 <user2@example.com> refs/tags/multi-ref1-200000-user2
679+ EOF
680+ git for-each-ref \
681+ --format="%(taggerdate:unix) %(taggeremail) %(refname)" \
682+ --sort=-refname \
683+ --sort=taggeremail \
684+ --sort=taggerdate \
685+ "refs/tags/multi-*" >actual &&
661686 test_cmp expected actual
662687'
663688
689+ test_expect_success ' equivalent sorts fall back on refname' '
690+ cat >expected <<-\EOF &&
691+ 100000 <user1@example.com> refs/tags/multi-ref1-100000-user1
692+ 100000 <user2@example.com> refs/tags/multi-ref1-100000-user2
693+ 100000 <user1@example.com> refs/tags/multi-ref2-100000-user1
694+ 100000 <user2@example.com> refs/tags/multi-ref2-100000-user2
695+ 200000 <user1@example.com> refs/tags/multi-ref1-200000-user1
696+ 200000 <user2@example.com> refs/tags/multi-ref1-200000-user2
697+ 200000 <user1@example.com> refs/tags/multi-ref2-200000-user1
698+ 200000 <user2@example.com> refs/tags/multi-ref2-200000-user2
699+ EOF
700+ git for-each-ref \
701+ --format="%(taggerdate:unix) %(taggeremail) %(refname)" \
702+ --sort=taggerdate \
703+ "refs/tags/multi-*" >actual &&
704+ test_cmp expected actual
705+ '
664706
665707test_expect_success ' do not dereference NULL upon %(HEAD) on unborn branch' '
666708 test_when_finished "git checkout master" &&
@@ -895,4 +937,44 @@ test_expect_success 'for-each-ref --ignore-case ignores case' '
895937 test_cmp expect actual
896938'
897939
940+ test_expect_success ' for-each-ref --ignore-case works on multiple sort keys' '
941+ # name refs numerically to avoid case-insensitive filesystem conflicts
942+ nr=0 &&
943+ for email in a A b B
944+ do
945+ for subject in a A b B
946+ do
947+ GIT_COMMITTER_EMAIL="$email@example.com" \
948+ git tag -m "tag $subject" icase-$(printf %02d $nr) &&
949+ nr=$((nr+1))||
950+ return 1
951+ done
952+ done &&
953+ git for-each-ref --ignore-case \
954+ --format="%(taggeremail) %(subject) %(refname)" \
955+ --sort=refname \
956+ --sort=subject \
957+ --sort=taggeremail \
958+ refs/tags/icase-* >actual &&
959+ cat >expect <<-\EOF &&
960+ <a@example.com> tag a refs/tags/icase-00
961+ <a@example.com> tag A refs/tags/icase-01
962+ <A@example.com> tag a refs/tags/icase-04
963+ <A@example.com> tag A refs/tags/icase-05
964+ <a@example.com> tag b refs/tags/icase-02
965+ <a@example.com> tag B refs/tags/icase-03
966+ <A@example.com> tag b refs/tags/icase-06
967+ <A@example.com> tag B refs/tags/icase-07
968+ <b@example.com> tag a refs/tags/icase-08
969+ <b@example.com> tag A refs/tags/icase-09
970+ <B@example.com> tag a refs/tags/icase-12
971+ <B@example.com> tag A refs/tags/icase-13
972+ <b@example.com> tag b refs/tags/icase-10
973+ <b@example.com> tag B refs/tags/icase-11
974+ <B@example.com> tag b refs/tags/icase-14
975+ <B@example.com> tag B refs/tags/icase-15
976+ EOF
977+ test_cmp expect actual
978+ '
979+
898980test_done
0 commit comments