@@ -650,17 +650,59 @@ test_atom refs/tags/signed-long contents "subject line
650
650
body contents
651
651
$sig "
652
652
653
- sort > expected << EOF
654
- $( git rev-parse refs/tags/bogo) <[email protected] > refs/tags/bogo
655
- $( git rev-parse refs/tags/master) <[email protected] > 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 protected] " \
662
+ git tag -m "tag $ref-$when-$email" \
663
+ multi-$ref-$when-$email || return 1
664
+ done
665
+ done
666
+ done
667
+ '
657
668
658
669
test_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 <[email protected] > refs/tags/multi-ref2-100000-user1
672
+ 100000 <[email protected] > refs/tags/multi-ref1-100000-user1
673
+ 100000 <[email protected] > refs/tags/multi-ref2-100000-user2
674
+ 100000 <[email protected] > refs/tags/multi-ref1-100000-user2
675
+ 200000 <[email protected] > refs/tags/multi-ref2-200000-user1
676
+ 200000 <[email protected] > refs/tags/multi-ref1-200000-user1
677
+ 200000 <[email protected] > refs/tags/multi-ref2-200000-user2
678
+ 200000 <[email protected] > 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 &&
661
686
test_cmp expected actual
662
687
'
663
688
689
+ test_expect_success ' equivalent sorts fall back on refname' '
690
+ cat >expected <<-\EOF &&
691
+ 100000 <[email protected] > refs/tags/multi-ref1-100000-user1
692
+ 100000 <[email protected] > refs/tags/multi-ref1-100000-user2
693
+ 100000 <[email protected] > refs/tags/multi-ref2-100000-user1
694
+ 100000 <[email protected] > refs/tags/multi-ref2-100000-user2
695
+ 200000 <[email protected] > refs/tags/multi-ref1-200000-user1
696
+ 200000 <[email protected] > refs/tags/multi-ref1-200000-user2
697
+ 200000 <[email protected] > refs/tags/multi-ref2-200000-user1
698
+ 200000 <[email protected] > 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
+ '
664
706
665
707
test_expect_success ' do not dereference NULL upon %(HEAD) on unborn branch' '
666
708
test_when_finished "git checkout master" &&
@@ -895,4 +937,44 @@ test_expect_success 'for-each-ref --ignore-case ignores case' '
895
937
test_cmp expect actual
896
938
'
897
939
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 protected] " \
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
+ <[email protected] > tag a refs/tags/icase-00
961
+ <[email protected] > tag A refs/tags/icase-01
962
+ <[email protected] > tag a refs/tags/icase-04
963
+ <[email protected] > tag A refs/tags/icase-05
964
+ <[email protected] > tag b refs/tags/icase-02
965
+ <[email protected] > tag B refs/tags/icase-03
966
+ <[email protected] > tag b refs/tags/icase-06
967
+ <[email protected] > tag B refs/tags/icase-07
968
+ <[email protected] > tag a refs/tags/icase-08
969
+ <[email protected] > tag A refs/tags/icase-09
970
+ <[email protected] > tag a refs/tags/icase-12
971
+ <[email protected] > tag A refs/tags/icase-13
972
+ <[email protected] > tag b refs/tags/icase-10
973
+ <[email protected] > tag B refs/tags/icase-11
974
+ <[email protected] > tag b refs/tags/icase-14
975
+ <[email protected] > tag B refs/tags/icase-15
976
+ EOF
977
+ test_cmp expect actual
978
+ '
979
+
898
980
test_done
0 commit comments