X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=tests%2Ftests%2Fgitattributes;h=bdc61f8afd980b80d6d35309b08623ba025a456b;hb=a47f1af332372a372bf5758d1e3d9eeffe14acbd;hp=c8d1b0ae64fa353f46c9388527c6b51b456ccef5;hpb=24f513d989f503cc52eca756d15d47eaa2672918;p=dgit.git diff --git a/tests/tests/gitattributes b/tests/tests/gitattributes index c8d1b0ae..bdc61f8a 100755 --- a/tests/tests/gitattributes +++ b/tests/tests/gitattributes @@ -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 @@ -38,6 +48,9 @@ badattr () { 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 -sha256sum af/* >sums +man gitattributes \ +| perl -ne 'print $1,"\n" if m/^ *(\w[-a-z]*)$/' \ +> grepped-attrs + +exec 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,34 +115,94 @@ sfmt_setup () { cd .. } +sums_check () { + # caller should cd into working directory, set + # $sums $branch + # and check out $branch + + sha256sum .dotfile-attr af/* >../$sums.checkout + diff -U0 ../sums ../$sums.checkout + + 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 + done + diff -U0 ../sums.nosums ../$sums.broken.nosums + set +e + diff -U0 ../sums ../$sums.broken + rc=$? + set -e + test $rc = 1 +} + +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 + + test "$rc" = "$warnok" +} + sfmt_import () { inst=$1 dgitargs=$2 - refname="import.$sfmt-$inst" + branch="import.$sfmt-$inst" + dscf=${p}_${v}.dsc + sums=sums.$sfmt-$inst + wd=$pdb-import-$inst - mkdir $pdb-import-$inst - cd $pdb-import-$inst + mkdir $wd + cd $wd git init - t-dgit setup-new-tree - t-dgit $dgitargs import-dsc ../${p}_${v}.dsc +$refname - git checkout $refname + t-dgit-warn-check 0 $dgitargs import-dsc ../$dscf +$branch.broken - sums=sums.$sfmt-$inst + git checkout $branch.broken - for f in af/*; do - git cat-file blob "refs/heads/$refname:$f" | sha256sum | \ - sed -e 's#-$#'$f'#' \ - >>../$sums - done + 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 ----- @@ -137,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 @@ -159,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