1#!/bin/sh 2 3test_description='Test ref-filter and pretty APIs for commit and tag messages using CRLF' 4. ./test-lib.sh 5 6LIB_CRLF_BRANCHES="" 7 8create_crlf_ref () { 9 branch="$1" && 10 cat >.crlf-orig-$branch.txt && 11 cat .crlf-orig-$branch.txt | append_cr >.crlf-message-$branch.txt && 12 grep 'Subject' .crlf-orig-$branch.txt | tr '\n' ' ' | sed 's/[ ]*$//' | tr -d '\n' >.crlf-subject-$branch.txt && 13 grep 'Body' .crlf-message-$branch.txt >.crlf-body-$branch.txt || true && 14 LIB_CRLF_BRANCHES="${LIB_CRLF_BRANCHES} ${branch}" && 15 test_tick && 16 hash=$(git commit-tree HEAD^{tree} -p HEAD -F .crlf-message-${branch}.txt) && 17 git branch ${branch} ${hash} && 18 git tag tag-${branch} ${branch} -F .crlf-message-${branch}.txt --cleanup=verbatim 19} 20 21create_crlf_refs () { 22 create_crlf_ref crlf <<-\EOF && 23 Subject first line 24 25 Body first line 26 Body second line 27 EOF 28 create_crlf_ref crlf-empty-lines-after-subject <<-\EOF && 29 Subject first line 30 31 32 Body first line 33 Body second line 34 EOF 35 create_crlf_ref crlf-two-line-subject <<-\EOF && 36 Subject first line 37 Subject second line 38 39 Body first line 40 Body second line 41 EOF 42 create_crlf_ref crlf-two-line-subject-no-body <<-\EOF && 43 Subject first line 44 Subject second line 45 EOF 46 create_crlf_ref crlf-two-line-subject-no-body-trailing-newline <<-\EOF 47 Subject first line 48 Subject second line 49 50 EOF 51} 52 53test_crlf_subject_body_and_contents() { 54 command_and_args="$@" && 55 command=$1 && 56 if test ${command} = "branch" || test ${command} = "for-each-ref" || test ${command} = "tag" 57 then 58 atoms="(contents:subject) (contents:body) (contents)" 59 elif test ${command} = "log" || test ${command} = "show" 60 then 61 atoms="s b B" 62 fi && 63 files="subject body message" && 64 while test -n "${atoms}" 65 do 66 set ${atoms} && atom=$1 && shift && atoms="$*" && 67 set ${files} && file=$1 && shift && files="$*" && 68 test_expect_success "${command}: --format='%${atom}' works with messages using CRLF" " 69 rm -f expect && 70 for ref in ${LIB_CRLF_BRANCHES} 71 do 72 cat .crlf-${file}-\"\${ref}\".txt >>expect && 73 printf \"\n\" >>expect 74 done && 75 git $command_and_args --format=\"%${atom}\" >actual && 76 test_cmp expect actual 77 " 78 done 79} 80 81 82test_expect_success 'Setup refs with commit and tag messages using CRLF' ' 83 test_commit inital && 84 create_crlf_refs 85' 86 87test_expect_success 'branch: --verbose works with messages using CRLF' ' 88 rm -f expect && 89 for branch in $LIB_CRLF_BRANCHES 90 do 91 printf " " >>expect && 92 cat .crlf-subject-${branch}.txt >>expect && 93 printf "\n" >>expect 94 done && 95 git branch -v >tmp && 96 # Remove first two columns, and the line for the currently checked out branch 97 current=$(git branch --show-current) && 98 grep -v $current <tmp | awk "{\$1=\$2=\"\"}1" >actual && 99 test_cmp expect actual 100' 101 102test_crlf_subject_body_and_contents branch --list crlf* 103 104test_crlf_subject_body_and_contents tag --list tag-crlf* 105 106test_crlf_subject_body_and_contents for-each-ref refs/heads/crlf* 107 108test_expect_success 'log: --oneline works with messages using CRLF' ' 109 for branch in $LIB_CRLF_BRANCHES 110 do 111 cat .crlf-subject-${branch}.txt >expect && 112 printf "\n" >>expect && 113 git log --oneline -1 ${branch} >tmp-branch && 114 git log --oneline -1 tag-${branch} >tmp-tag && 115 cut -d" " -f2- <tmp-branch >actual-branch && 116 cut -d" " -f2- <tmp-tag >actual-tag && 117 test_cmp expect actual-branch && 118 test_cmp expect actual-tag || return 1 119 done 120' 121 122test_crlf_subject_body_and_contents log --all --reverse --grep Subject 123 124test_crlf_subject_body_and_contents show $LIB_CRLF_BRANCHES 125 126test_done 127