Skip to content

150630 git for windows update t0027 #228

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jul 1, 2015
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
252 changes: 135 additions & 117 deletions t/t0027-auto-crlf.sh
Original file line number Diff line number Diff line change
Expand Up @@ -55,36 +55,37 @@ create_gitattributes () {
esac
}

# Some warnings depend on the native end-of-line marker

test_have_prereq NATIVE_CRLF &&
NATIVE_CRLF=t ||
NATIVE_CRLF=

check_warning () {
case "$1,$NATIVE_CRLF" in
LF_CRLF,*|MAYBE_CRLF,t|MIX,t) grep "LF will be replaced by CRLF" $2;;
CRLF_LF,*|MAYBE_LF,|MIX,) grep "CRLF will be replaced by LF" $2;;
,*|MAYBE_CRLF,|MAYBE_LF,t)
>expect
grep "will be replaced by" $2 >actual
test_cmp expect actual
;;
*) false ;;
case "$1" in
LF_CRLF) echo "warning: LF will be replaced by CRLF" >"$2".expect ;;
CRLF_LF) echo "warning: CRLF will be replaced by LF" >"$2".expect ;;
'') >"$2".expect ;;
*) echo >&2 "Illegal 1": "$1" ; return false ;;
esac
grep "will be replaced by" "$2" | sed -e "s/\(.*\) in [^ ]*$/\1/" >"$2".actual
test_cmp "$2".expect "$2".actual
}

create_file_in_repo () {
commit_check_warn () {
crlf=$1
attr=$2
lfname=$3
crlfname=$4
lfmixcrlf=$5
lfmixcr=$6
crlfnul=$7
create_gitattributes "$attr" &&
repoMIX=$5
lfmixcrlf=$6
lfmixcr=$7
crlfnul=$8
pfx=crlf_${crlf}_attr_${attr}
for f in LF CRLF LF_mix_CR CRLF_mix_LF CRLF_nul
# Special handling for repoMIX: It should already be in the repo
# with CRLF
f=repoMIX
fname=${pfx}_$f.txt
echo >.gitattributes &&
cp $f $fname &&
git -c core.autocrlf=false add $fname 2>"${pfx}_$f.err" &&
git commit -m "repoMIX" &&
create_gitattributes "$attr" &&
for f in LF CRLF repoMIX LF_mix_CR CRLF_mix_LF LF_nul CRLF_nul
do
fname=${pfx}_$f.txt &&
cp $f $fname &&
Expand Down Expand Up @@ -115,7 +116,7 @@ check_files_in_repo () {
}


check_files_in_ws () {
checkout_files () {
eol=$1
crlf=$2
attr=$3
Expand All @@ -128,7 +129,7 @@ check_files_in_ws () {
git config core.autocrlf $crlf &&
pfx=eol_${eol}_crlf_${crlf}_attr_${attr}_ &&
src=crlf_false_attr__ &&
for f in LF CRLF LF_mix_CR CRLF_mix_LF CRLF_nul
for f in LF CRLF LF_mix_CR CRLF_mix_LF LF_nul
do
rm $src$f.txt &&
if test -z "$eol"; then
Expand All @@ -150,8 +151,8 @@ check_files_in_ws () {
test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=LF_mix_CR" "
compare_ws_file $pfx $lfmixcr ${src}LF_mix_CR.txt
"
test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=CRLF_nul" "
compare_ws_file $pfx $crlfnul ${src}CRLF_nul.txt
test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=LF_nul" "
compare_ws_file $pfx $crlfnul ${src}LF_nul.txt
"
}

Expand All @@ -163,6 +164,7 @@ test_expect_success 'setup master' '
git commit -m "add .gitattributes" "" &&
printf "line1\nline2\nline3" >LF &&
printf "line1\r\nline2\r\nline3" >CRLF &&
printf "line1\r\nline2\nline3" >repoMIX &&
printf "line1\r\nline2\nline3" >CRLF_mix_LF &&
printf "line1\nline2\rline3" >LF_mix_CR &&
printf "line1\r\nline2\rline3" >CRLF_mix_CR &&
Expand All @@ -175,41 +177,55 @@ test_expect_success 'setup master' '
warn_LF_CRLF="LF will be replaced by CRLF"
warn_CRLF_LF="CRLF will be replaced by LF"

test_expect_success 'add files empty attr' '
create_file_in_repo false "" "" "" "" "" "" &&
create_file_in_repo true "" "LF_CRLF" "" "LF_CRLF" "" "" &&
create_file_in_repo input "" "" "CRLF_LF" "CRLF_LF" "" ""
'
# WILC stands for "Warn if (this OS) converts LF into CRLF".
# WICL: Warn if CRLF becomes LF
# WAMIX: Mixed line endings: either CRLF->LF or LF->CRLF
if test_have_prereq NATIVE_CRLF
then
WILC=LF_CRLF
WICL=
WAMIX=LF_CRLF
else
WILC=
WICL=CRLF_LF
WAMIX=CRLF_LF
fi

# attr LF CRLF repoMIX CRLFmixLF LFmixCR CRLFNUL
test_expect_success 'commit files empty attr' '
commit_check_warn false "" "" "" "" "" "" "" &&
commit_check_warn true "" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" "" &&
commit_check_warn input "" "" "CRLF_LF" "CRLF_LF" "CRLF_LF" "" ""
'

test_expect_success 'add files attr=auto' '
create_file_in_repo false "auto" "MAYBE_CRLF" "MAYBE_LF" "MIX" "" "" &&
create_file_in_repo true "auto" "LF_CRLF" "" "LF_CRLF" "" "" &&
create_file_in_repo input "auto" "" "CRLF_LF" "CRLF_LF" "" ""
test_expect_success 'commit files attr=auto' '
commit_check_warn false "auto" "$WILC" "$WICL" "$WAMIX" "$WAMIX" "" "" &&
commit_check_warn true "auto" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" "" &&
commit_check_warn input "auto" "" "CRLF_LF" "CRLF_LF" "CRLF_LF" "" ""
'

test_expect_success 'add files attr=text' '
create_file_in_repo false "text" "MAYBE_CRLF" "MAYBE_LF" "MIX" "MAYBE_CRLF" "MAYBE_LF" &&
create_file_in_repo true "text" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" &&
create_file_in_repo input "text" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
test_expect_success 'commit files attr=text' '
commit_check_warn false "text" "$WILC" "$WICL" "$WAMIX" "$WAMIX" "$WILC" "$WICL" &&
commit_check_warn true "text" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "LF_CRLF" "" &&
commit_check_warn input "text" "" "CRLF_LF" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
'

test_expect_success 'add files attr=-text' '
create_file_in_repo false "-text" "" "" "" "" "" &&
create_file_in_repo true "-text" "" "" "" "" "" &&
create_file_in_repo input "-text" "" "" "" "" ""
test_expect_success 'commit files attr=-text' '
commit_check_warn false "-text" "" "" "" "" "" "" &&
commit_check_warn true "-text" "" "" "" "" "" "" &&
commit_check_warn input "-text" "" "" "" "" "" ""
'

test_expect_success 'add files attr=lf' '
create_file_in_repo false "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF" &&
create_file_in_repo true "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF" &&
create_file_in_repo input "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
test_expect_success 'commit files attr=lf' '
commit_check_warn false "lf" "" "CRLF_LF" "CRLF_LF" "CRLF_LF" "" "CRLF_LF" &&
commit_check_warn true "lf" "" "CRLF_LF" "CRLF_LF" "CRLF_LF" "" "CRLF_LF" &&
commit_check_warn input "lf" "" "CRLF_LF" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
'

test_expect_success 'add files attr=crlf' '
create_file_in_repo false "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" &&
create_file_in_repo true "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" &&
create_file_in_repo input "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" ""
test_expect_success 'commit files attr=crlf' '
commit_check_warn false "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "LF_CRLF" "" &&
commit_check_warn true "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "LF_CRLF" "" &&
commit_check_warn input "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "LF_CRLF" ""
'

test_expect_success 'create files cleanup' '
Expand Down Expand Up @@ -244,7 +260,7 @@ test_expect_success 'commit -text' '
################################################################################
# Check how files in the repo are changed when they are checked out
# How to read the table below:
# - check_files_in_ws will check multiple files with a combination of settings
# - checkout_files will check multiple files with a combination of settings
# and attributes (core.autocrlf=input is forbidden with core.eol=crlf)
# - parameter $1 : core.eol lf | crlf
# - parameter $2 : core.autocrlf false | true | input
Expand All @@ -256,87 +272,89 @@ test_expect_success 'commit -text' '
# - parameter $8 : reference for a file with CRLF and a NUL (should be handled as binary when auto)

# What we have in the repo:
# ----------------- EOL in repo ----------------
# LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
# ----------------- EOL in repo ----------------
# LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
# settings with checkout:
# core. core. .gitattr
# eol acrlf
# ----------------------------------------------
# What we want to have in the working tree:
if test_have_prereq MINGW
if test_have_prereq NATIVE_CRLF
then
MIX_CRLF_LF=CRLF
MIX_LF_CR=CRLF_mix_CR
NL=CRLF
LFNUL=CRLF_nul
else
MIX_CRLF_LF=CRLF_mix_LF
MIX_LF_CR=LF_mix_CR
NL=LF
LFNUL=LF_nul
fi
export CRLF_MIX_LF_CR MIX NL

check_files_in_ws lf false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf input "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf false "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws lf input "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf false "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws lf input "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf input "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws lf true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws lf input "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul

check_files_in_ws crlf false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf false "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws crlf true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws crlf false "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws crlf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws crlf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws crlf true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul

check_files_in_ws "" false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" input "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR CRLF_nul
check_files_in_ws "" true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws "" input "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR CRLF_nul
check_files_in_ws "" true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws "" input "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" input "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws "" true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws "" input "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul

check_files_in_ws native false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR CRLF_nul
check_files_in_ws native true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws native false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR CRLF_nul
check_files_in_ws native true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws native false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws native true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
checkout_files lf false "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files lf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files lf input "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files lf false "auto" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files lf true "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
checkout_files lf input "auto" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files lf false "text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files lf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
checkout_files lf input "text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files lf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files lf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files lf input "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files lf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files lf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files lf input "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files lf false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
checkout_files lf true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
checkout_files lf input "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul

checkout_files crlf false "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files crlf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files crlf false "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
checkout_files crlf true "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
checkout_files crlf false "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
checkout_files crlf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
checkout_files crlf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files crlf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files crlf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files crlf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files crlf false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
checkout_files crlf true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul

checkout_files "" false "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files "" true "" CRLF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files "" input "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files "" false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR LF_nul
checkout_files "" true "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
checkout_files "" input "auto" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files "" false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR $LFNUL
checkout_files "" true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
checkout_files "" input "text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files "" false "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files "" true "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files "" input "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files "" false "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files "" true "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files "" input "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files "" false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
checkout_files "" true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
checkout_files "" input "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul

checkout_files native false "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files native true "" CRLF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files native false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR LF_nul
checkout_files native true "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
checkout_files native false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR $LFNUL
checkout_files native true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
checkout_files native false "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files native true "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files native false "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files native true "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
checkout_files native false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
checkout_files native true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul

test_done