chiark / gitweb /
test suite: gitattributes: Change a comment from xxx to todo
[dgit.git] / tests / tests / gitattributes
index 74dbddef4579be432e623aaa123f82cc4252e923..9ebc2161c83bb600f4eaf2a5156d4a4a159469b6 100755 (executable)
@@ -3,9 +3,11 @@ set -e
 . tests/lib
 
 t-dependencies bsdgames
+t-dependencies man-db git-man
 t-tstunt-parsechangelog
 
 t-archive-none example
+t-git-none
 bv=1.0
 t-worktree $bv
 
@@ -20,12 +22,20 @@ badattr1 () {
        printf >>af/$filename 'crlf: \r\n'
        echo >>af/$filename 'id $Id: $'
        echo >>af/$filename 'id $Id: SPLARK $'
+       printf >>af/$filename '\xEF\xBB\xBF <- UTF-8 BOM\n'
        echo >>gitattrs "af/$filename" "$attrspec"
 }
 
 badattr () {
        attrname=$1; shift
-       badattr1 $attrname-set $attrname
+
+       case "$attrname" in
+       working-tree-encoding) ;;
+       *)
+               badattr1 $attrname-set $attrname
+               ;;
+       esac
+
        badattr1 $attrname-unset -$attrname
        badattr1 $attrname-unspec \!$attrname
        local val
@@ -34,10 +44,13 @@ badattr () {
        done
 }
 
-# xxx want to make each of these files into a quilt patch
+# todo: want to make each of these files into a quilt patch
 
 t-git-config core.eol crlf
 
+printf >>.dotfile-attr 'dotfiles too?\n'
+echo >>gitattrs '.dotfile-attr filter=dgit-test-crazy-f'
+
 badattr        text auto
 badattr eol lf crlf
 badattr ident
@@ -55,8 +68,18 @@ badattr export-ignore
 badattr export-subst
 badattr delta
 badattr encoding no-such-encoding
+badattr working-tree-encoding ISO-8859-1 UTF-16
+
+man gitattributes \
+| perl -ne 'print $1,"\n" if m/^ *(\w[-a-z]*)$/' \
+> grepped-attrs
 
-sha256sum af/* >sums
+exec <grepped-attrs
+while read attr; do
+       badattr $attr
+done
+
+sha256sum .dotfile-attr af/* >sums
 
 # ----- common to source formats -----
 
@@ -81,7 +104,7 @@ sfmt_setup () {
        cp ../gitattrs .gitattributes
        $addpatch gitattrs
 
-       cp -a ../af .
+       cp -a ../af ../.dotfile-attr .
        $addpatch files
 
        cp ../sums .
@@ -92,18 +115,30 @@ sfmt_setup () {
        cd ..
 }
 
-sfmt_import () {
-       inst=$1
-       dgitargs=$2
-       refname="import.$sfmt-$inst"
+sums_check () {
+       # caller should cd into working directory, set
+       #   $sums  $branch
+       # and check out $branch
 
-       mkdir $pdb-import-$inst
-       cd $pdb-import-$inst
-       git init
+       sha256sum .dotfile-attr af/* >../$sums.checkout
+       diff -U0 ../sums ../$sums.checkout
 
-       t-dgit $dgitargs import-dsc ../${p}_${v}.dsc +$refname.broken
-       git checkout $refname.broken
-       sha256sum af/* >../$sums.broken
+       for f in .dotfile-attr af/*; do
+               git cat-file blob "refs/heads/$branch:$f" \
+                       | sha256sum \
+                       | sed -e 's#-$#'$f'#' \
+               >>../$sums
+       done
+
+       diff -U0 ../sums ../$sums
+}
+
+sums_check_broken () {
+       # caller should cd into working directory, set
+       #   $sums
+       # and check out the broken branch
+
+       sha256sum .dotfile-attr af/* >../$sums.broken
 
        for s in ../sums ../$sums.broken; do
                sed 's/[0-9a-f]* //' $s >$s.nosums
@@ -114,28 +149,60 @@ sfmt_import () {
        rc=$?
        set -e
        test $rc = 1
+}
 
-       t-dgit setup-new-tree
+t-dgit-warn-check () {
+       local warnok=$1; shift
+       # warnok should be  0 if the warning is expected
+       #                   1 if the warning is NOT expected
+
+       local err=stderr.$wd
+
+       LC_MESSAGES=C t-dgit "$@" 2>&1 |tee ../$err
+
+       set +e
+       egrep 'warning: .* contains \.gitattributes' ../$err
+       rc=$?
+       set -e
 
-       t-dgit $dgitargs import-dsc ../${p}_${v}.dsc +$refname
-       git checkout $refname
+       test "$rc" = "$warnok"
+}
 
+sfmt_import () {
+       inst=$1
+       dgitargs=$2
+       branch="import.$sfmt-$inst"
+       dscf=${p}_${v}.dsc
        sums=sums.$sfmt-$inst
+       wd=$pdb-import-$inst
 
-       for f in af/*; do
-               git cat-file blob "refs/heads/$refname:$f" \
-                       | sha256sum \
-                       | sed -e 's#-$#'$f'#' \
-               >>../$sums
-       done
+       mkdir $wd
+       cd $wd
+       git init
+
+       t-dgit-warn-check 0 $dgitargs import-dsc ../$dscf +$branch.broken
+
+       git checkout $branch.broken
+
+       sums_check_broken
+
+       t-dgit setup-new-tree
+
+       t-dgit-warn-check 1 $dgitargs import-dsc ../$dscf +$branch
+       git checkout $branch
+       touch .dotfile-attr af/*
+       git reset --hard
+
+       sums_check
 
        cd ..
-       diff -U0 sums $sums
 }
 
 : ----- generate the orig -----
 
-tar --exclude=debian -zcf ${p}_${bv}.orig.tar.gz $p
+origtar=${p}_${bv}.orig.tar.gz
+
+tar --exclude=debian --exclude=.git -zcf $origtar $p
 
 : ----- test 1.0 native -----
 
@@ -153,7 +220,7 @@ diff_convert () { :; }
 sfmt_setup 1.1 diff
 sfmt_import norm
 
-: ----- test "3.0 (quilt)"
+: ----- test "3.0 (quilt)" -----
 
 quilt_addpatch () {
        pname=$1
@@ -175,4 +242,47 @@ sfmt_setup 1.0-1 quilt
 sfmt_import norm
 sfmt_import absurd --force-import-gitapply-absurd
 
-#t-ok
+: ----- 'test clone (with "3.0 (quilt)")' -----
+
+mv $origtar ${dscf%.dsc}.* $tmp/mirror/pool/main/
+t-archive-query sid
+
+t-dgit-warn-check 0 -cdgit.default.setup-gitattributes=false \
+       clone $p sid $p.clone.broken
+cd $p.clone.broken
+
+sums=sums.broken
+sums_check_broken
+
+cd ..
+
+t-dgit-warn-check 1 clone $p sid $p.clone
+
+cd $p.clone
+sums=sums.clone
+branch=dgit/sid
+sums_check
+
+cd ..
+
+t-dgit-warn-check 0 -cdgit.default.setup-gitattributes=false \
+       clone $p sid $p.clone.old
+
+cd $p.clone.old
+
+mkdir -p .git/info
+cat >.git/info/attributes <<'END'
+*       dgit-defuse-attrs
+[attr]dgit-defuse-attrs -text -eol -crlf -ident -filter
+# ^ see GITATTRIBUTES in dgit(7) and dgit setup-new-tree in dgit(1)
+END
+
+t-dgit setup-gitattributes
+git reset --hard
+
+sums=sums.old
+sums_check
+
+cd ..
+
+t-ok