t / t4201-shortlog.shon commit git p4: handle servers without move support (249da4c)
   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        echo 1 >a1 &&
  13        git add a1 &&
  14        tree=$(git write-tree) &&
  15        commit=$(printf "%s\n" "Test" "" | git commit-tree "$tree") &&
  16        git update-ref HEAD "$commit" &&
  17
  18        echo 2 >a1 &&
  19        git commit --quiet -m "This is a very, very long first line for the commit message to see if it is wrapped correctly" a1 &&
  20
  21        # test if the wrapping is still valid
  22        # when replacing all is by treble clefs.
  23        echo 3 >a1 &&
  24        git commit --quiet -m "$(
  25                echo "This is a very, very long first line for the commit message to see if it is wrapped correctly" |
  26                sed "s/i/1234/g" |
  27                tr 1234 "\360\235\204\236")" a1 &&
  28
  29        # now fsck up the utf8
  30        git config i18n.commitencoding non-utf-8 &&
  31        echo 4 >a1 &&
  32        git commit --quiet -m "$(
  33                echo "This is a very, very long first line for the commit message to see if it is wrapped correctly" |
  34                sed "s/i/1234/g" |
  35                tr 1234 "\370\235\204\236")" a1 &&
  36
  37        echo 5 >a1 &&
  38        git commit --quiet -m "a                                                                12      34      56      78" a1 &&
  39
  40        echo 6 >a1 &&
  41        git commit --quiet -m "Commit by someone else" \
  42                --author="Someone else <not!me>" a1 &&
  43
  44        cat >expect.template <<-\EOF
  45        A U Thor (5):
  46              SUBJECT
  47              SUBJECT
  48              SUBJECT
  49              SUBJECT
  50              SUBJECT
  51
  52        Someone else (1):
  53              SUBJECT
  54
  55        EOF
  56'
  57
  58fuzz() {
  59        file=$1 &&
  60        sed "
  61                        s/$_x40/OBJECT_NAME/g
  62                        s/$_x05/OBJID/g
  63                        s/^ \{6\}[CTa].*/      SUBJECT/g
  64                        s/^ \{8\}[^ ].*/        CONTINUATION/g
  65                " <"$file" >"$file.fuzzy" &&
  66        sed "/CONTINUATION/ d" <"$file.fuzzy"
  67}
  68
  69test_expect_success 'default output format' '
  70        git shortlog HEAD >log &&
  71        fuzz log >log.predictable &&
  72        test_cmp expect.template log.predictable
  73'
  74
  75test_expect_success 'pretty format' '
  76        sed s/SUBJECT/OBJECT_NAME/ expect.template >expect &&
  77        git shortlog --format="%H" HEAD >log &&
  78        fuzz log >log.predictable &&
  79        test_cmp expect log.predictable
  80'
  81
  82test_expect_success '--abbrev' '
  83        sed s/SUBJECT/OBJID/ expect.template >expect &&
  84        git shortlog --format="%h" --abbrev=5 HEAD >log &&
  85        fuzz log >log.predictable &&
  86        test_cmp expect log.predictable
  87'
  88
  89test_expect_success 'output from user-defined format is re-wrapped' '
  90        sed "s/SUBJECT/two lines/" expect.template >expect &&
  91        git shortlog --format="two%nlines" HEAD >log &&
  92        fuzz log >log.predictable &&
  93        test_cmp expect log.predictable
  94'
  95
  96test_expect_success 'shortlog wrapping' '
  97        cat >expect <<\EOF &&
  98A U Thor (5):
  99      Test
 100      This is a very, very long first line for the commit message to see if
 101         it is wrapped correctly
 102      Th𝄞s 𝄞s a very, very long f𝄞rst l𝄞ne for the comm𝄞t message to see 𝄞f
 103         𝄞t 𝄞s wrapped correctly
 104      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
 105         message to see ø\9d\84\9ef ø\9d\84\9et ø\9d\84\9es wrapped correctly
 106      a                                                         12      34
 107         56     78
 108
 109Someone else (1):
 110      Commit by someone else
 111
 112EOF
 113        git shortlog -w HEAD >out &&
 114        test_cmp expect out
 115'
 116
 117test_expect_success 'shortlog from non-git directory' '
 118        git log HEAD >log &&
 119        GIT_DIR=non-existing git shortlog -w <log >out &&
 120        test_cmp expect out
 121'
 122
 123iconvfromutf8toiso88591() {
 124        printf "%s" "$*" | iconv -f UTF-8 -t ISO8859-1
 125}
 126
 127DSCHO="Jöhännës \"Dschö\" Schindëlin"
 128DSCHOE="$DSCHO <Johannes.Schindelin@gmx.de>"
 129MSG1="set a1 to 2 and some non-ASCII chars: Äßø"
 130MSG2="set a1 to 3 and some non-ASCII chars: áæï"
 131cat > expect << EOF
 132$DSCHO (2):
 133      $MSG1
 134      $MSG2
 135
 136EOF
 137
 138test_expect_success 'shortlog encoding' '
 139        git reset --hard "$commit" &&
 140        git config --unset i18n.commitencoding &&
 141        echo 2 > a1 &&
 142        git commit --quiet -m "$MSG1" --author="$DSCHOE" a1 &&
 143        git config i18n.commitencoding "ISO8859-1" &&
 144        echo 3 > a1 &&
 145        git commit --quiet -m "$(iconvfromutf8toiso88591 "$MSG2")" \
 146                --author="$(iconvfromutf8toiso88591 "$DSCHOE")" a1 &&
 147        git config --unset i18n.commitencoding &&
 148        git shortlog HEAD~2.. > out &&
 149test_cmp expect out'
 150
 151test_done