t / t4201-shortlog.shon commit t4000: make hash size independent (8cc5ff8)
   1#!/bin/sh
   2#
   3# Copyright (c) 2006 Johannes E. Schindelin
   4#
   5
   6test_description='git shortlog
   7'
   8
   9. ./test-lib.sh
  10
  11test_expect_success 'setup' '
  12        test_tick &&
  13        echo 1 >a1 &&
  14        git add a1 &&
  15        tree=$(git write-tree) &&
  16        commit=$(printf "%s\n" "Test" "" | git commit-tree "$tree") &&
  17        git update-ref HEAD "$commit" &&
  18
  19        echo 2 >a1 &&
  20        git commit --quiet -m "This is a very, very long first line for the commit message to see if it is wrapped correctly" a1 &&
  21
  22        # test if the wrapping is still valid
  23        # when replacing all is by treble clefs.
  24        echo 3 >a1 &&
  25        git commit --quiet -m "$(
  26                echo "This is a very, very long first line for the commit message to see if it is wrapped correctly" |
  27                sed "s/i/1234/g" |
  28                tr 1234 "\360\235\204\236")" a1 &&
  29
  30        # now fsck up the utf8
  31        git config i18n.commitencoding non-utf-8 &&
  32        echo 4 >a1 &&
  33        git commit --quiet -m "$(
  34                echo "This is a very, very long first line for the commit message to see if it is wrapped correctly" |
  35                sed "s/i/1234/g" |
  36                tr 1234 "\370\235\204\236")" a1 &&
  37
  38        echo 5 >a1 &&
  39        git commit --quiet -m "a                                                                12      34      56      78" a1 &&
  40
  41        echo 6 >a1 &&
  42        git commit --quiet -m "Commit by someone else" \
  43                --author="Someone else <not!me>" a1 &&
  44
  45        cat >expect.template <<-\EOF
  46        A U Thor (5):
  47              SUBJECT
  48              SUBJECT
  49              SUBJECT
  50              SUBJECT
  51              SUBJECT
  52
  53        Someone else (1):
  54              SUBJECT
  55
  56        EOF
  57'
  58
  59fuzz() {
  60        file=$1 &&
  61        sed "
  62                        s/$OID_REGEX/OBJECT_NAME/g
  63                        s/$_x35/OBJID/g
  64                        s/^ \{6\}[CTa].*/      SUBJECT/g
  65                        s/^ \{8\}[^ ].*/        CONTINUATION/g
  66                " <"$file" >"$file.fuzzy" &&
  67        sed "/CONTINUATION/ d" <"$file.fuzzy"
  68}
  69
  70test_expect_success 'default output format' '
  71        git shortlog HEAD >log &&
  72        fuzz log >log.predictable &&
  73        test_cmp expect.template log.predictable
  74'
  75
  76test_expect_success 'pretty format' '
  77        sed s/SUBJECT/OBJECT_NAME/ expect.template >expect &&
  78        git shortlog --format="%H" HEAD >log &&
  79        fuzz log >log.predictable &&
  80        test_cmp expect log.predictable
  81'
  82
  83test_expect_success '--abbrev' '
  84        sed s/SUBJECT/OBJID/ expect.template >expect &&
  85        git shortlog --format="%h" --abbrev=35 HEAD >log &&
  86        fuzz log >log.predictable &&
  87        test_cmp expect log.predictable
  88'
  89
  90test_expect_success 'output from user-defined format is re-wrapped' '
  91        sed "s/SUBJECT/two lines/" expect.template >expect &&
  92        git shortlog --format="two%nlines" HEAD >log &&
  93        fuzz log >log.predictable &&
  94        test_cmp expect log.predictable
  95'
  96
  97test_expect_success !MINGW 'shortlog wrapping' '
  98        cat >expect <<\EOF &&
  99A U Thor (5):
 100      Test
 101      This is a very, very long first line for the commit message to see if
 102         it is wrapped correctly
 103      Th𝄞s 𝄞s a very, very long f𝄞rst l𝄞ne for the comm𝄞t message to see 𝄞f
 104         𝄞t 𝄞s wrapped correctly
 105      Thø\9d\84\9es ø\9d\84\9es a very, very long fø\9d\84\9erst lø\9d\84\9ene for the commø\9d\84\9et
 106         message to see ø\9d\84\9ef ø\9d\84\9et ø\9d\84\9es wrapped correctly
 107      a                                                         12      34
 108         56     78
 109
 110Someone else (1):
 111      Commit by someone else
 112
 113EOF
 114        git shortlog -w HEAD >out &&
 115        test_cmp expect out
 116'
 117
 118test_expect_success !MINGW 'shortlog from non-git directory' '
 119        git log --no-expand-tabs HEAD >log &&
 120        GIT_DIR=non-existing git shortlog -w <log >out &&
 121        test_cmp expect out
 122'
 123
 124test_expect_success !MINGW 'shortlog can read --format=raw output' '
 125        git log --format=raw HEAD >log &&
 126        GIT_DIR=non-existing git shortlog -w <log >out &&
 127        test_cmp expect out
 128'
 129
 130test_expect_success 'shortlog from non-git directory refuses extra arguments' '
 131        test_must_fail env GIT_DIR=non-existing git shortlog foo 2>out &&
 132        test_i18ngrep "too many arguments" out
 133'
 134
 135test_expect_success 'shortlog should add newline when input line matches wraplen' '
 136        cat >expect <<\EOF &&
 137A U Thor (2):
 138      bbbbbbbbbbbbbbbbbb: bbbbbbbb bbb bbbb bbbbbbb bb bbbb bbb bbbbb bbbbbb
 139      aaaaaaaaaaaaaaaaaaaaaa: aaaaaa aaaaaaaaaa aaaa aaaaaaaa aa aaaa aa aaa
 140
 141EOF
 142        git shortlog -w >out <<\EOF &&
 143commit 0000000000000000000000000000000000000001
 144Author: A U Thor <author@example.com>
 145Date:   Thu Apr 7 15:14:13 2005 -0700
 146
 147    aaaaaaaaaaaaaaaaaaaaaa: aaaaaa aaaaaaaaaa aaaa aaaaaaaa aa aaaa aa aaa
 148
 149commit 0000000000000000000000000000000000000002
 150Author: A U Thor <author@example.com>
 151Date:   Thu Apr 7 15:14:13 2005 -0700
 152
 153    bbbbbbbbbbbbbbbbbb: bbbbbbbb bbb bbbb bbbbbbb bb bbbb bbb bbbbb bbbbbb
 154
 155EOF
 156        test_cmp expect out
 157'
 158
 159iconvfromutf8toiso88591() {
 160        printf "%s" "$*" | iconv -f UTF-8 -t ISO8859-1
 161}
 162
 163DSCHO="Jöhännës \"Dschö\" Schindëlin"
 164DSCHOE="$DSCHO <Johannes.Schindelin@gmx.de>"
 165MSG1="set a1 to 2 and some non-ASCII chars: Äßø"
 166MSG2="set a1 to 3 and some non-ASCII chars: áæï"
 167cat > expect << EOF
 168$DSCHO (2):
 169      $MSG1
 170      $MSG2
 171
 172EOF
 173
 174test_expect_success !MINGW 'shortlog encoding' '
 175        git reset --hard "$commit" &&
 176        git config --unset i18n.commitencoding &&
 177        echo 2 > a1 &&
 178        git commit --quiet -m "$MSG1" --author="$DSCHOE" a1 &&
 179        git config i18n.commitencoding "ISO8859-1" &&
 180        echo 3 > a1 &&
 181        git commit --quiet -m "$(iconvfromutf8toiso88591 "$MSG2")" \
 182                --author="$(iconvfromutf8toiso88591 "$DSCHOE")" a1 &&
 183        git config --unset i18n.commitencoding &&
 184        git shortlog HEAD~2.. > out &&
 185test_cmp expect out'
 186
 187test_expect_success 'shortlog with revision pseudo options' '
 188        git shortlog --all &&
 189        git shortlog --branches &&
 190        git shortlog --exclude=refs/heads/m* --all
 191'
 192
 193test_expect_success 'shortlog with --output=<file>' '
 194        git shortlog --output=shortlog -1 master >output &&
 195        test_must_be_empty output &&
 196        test_line_count = 3 shortlog
 197'
 198
 199test_expect_success 'shortlog --committer (internal)' '
 200        git checkout --orphan side &&
 201        git commit --allow-empty -m one &&
 202        git commit --allow-empty -m two &&
 203        GIT_COMMITTER_NAME="Sin Nombre" git commit --allow-empty -m three &&
 204
 205        cat >expect <<-\EOF &&
 206             2  C O Mitter
 207             1  Sin Nombre
 208        EOF
 209        git shortlog -nsc HEAD >actual &&
 210        test_cmp expect actual
 211'
 212
 213test_expect_success 'shortlog --committer (external)' '
 214        git log --format=full | git shortlog -nsc >actual &&
 215        test_cmp expect actual
 216'
 217
 218test_done