summaryrefslogtreecommitdiff
path: root/tests/tests/gitattributes
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tests/gitattributes')
-rwxr-xr-xtests/tests/gitattributes256
1 files changed, 256 insertions, 0 deletions
diff --git a/tests/tests/gitattributes b/tests/tests/gitattributes
new file mode 100755
index 0000000..9e1c246
--- /dev/null
+++ b/tests/tests/gitattributes
@@ -0,0 +1,256 @@
+#!/bin/bash
+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
+
+: ----- prepare badnesses -----
+
+mkdir af
+
+badattr1 () {
+ local filename=$1
+ local attrspec=$2
+ echo >>af/$filename "Test file with $attrspec"
+ printf >>af/$filename 'crlf: \r\n'
+ echo >>af/$filename 'id $Id: $'
+ echo >>af/$filename 'id $Id: SPLARK $'
+ echo >>gitattrs "af/$filename" "$attrspec"
+}
+
+badattr () {
+ attrname=$1; shift
+ badattr1 $attrname-set $attrname
+ badattr1 $attrname-unset -$attrname
+ badattr1 $attrname-unspec \!$attrname
+ local val
+ for val in "$@"; do
+ badattr1 $attrname=$val $attrname=$val
+ done
+}
+
+# xxx want to make each of these files into a quilt patch
+
+t-git-config core.eol crlf
+
+badattr text auto
+badattr eol lf crlf
+badattr ident
+
+t-git-config filter.dgit-test-crazy-f.smudge '/usr/games/rot13 2'
+t-git-config filter.dgit-test-crazy-f.clean '/usr/games/rot13 24'
+t-git-config filter.dgit-test-crazy-f.requrired true
+
+badattr filter dgit-test-crazy-f
+
+badattr diff
+badattr merge text binary union
+badattr whitespace
+badattr export-ignore
+badattr export-subst
+badattr delta
+badattr encoding no-such-encoding
+
+man gitattributes \
+| perl -ne 'print $1,"\n" if m/^ *(\w[-a-z]*)$/' \
+> grepped-attrs
+
+exec <grepped-attrs
+while read attr; do
+ badattr $attr
+done
+
+sha256sum af/* >sums
+
+# ----- common to source formats -----
+
+sfmt_setup () {
+ v=$1
+ sfmt=$2
+
+ pdb=$p.$sfmt
+
+ local addpatch=${sfmt}_addpatch
+ local convert=${sfmt}_convert
+
+ cp -a $p $pdb-edit
+ cd $pdb-edit
+
+ $convert
+
+ dch -v $v -m convert
+
+ rm -rf .git
+
+ cp ../gitattrs .gitattributes
+ $addpatch gitattrs
+
+ cp -a ../af .
+ $addpatch files
+
+ cp ../sums .
+ $addpatch sums
+
+ dpkg-source -b .
+
+ cd ..
+}
+
+sums_check () {
+ # caller should cd into working directory, set
+ # $sums $branch
+ # and check out $branch
+
+ sha256sum af/* >../$sums.checkout
+ diff -U0 ../sums ../$sums.checkout
+
+ for f in 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 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
+ branch="import.$sfmt-$inst"
+ dscf=${p}_${v}.dsc
+ sums=sums.$sfmt-$inst
+ wd=$pdb-import-$inst
+
+ 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 af/*
+ git reset --hard
+
+ sums_check
+
+ cd ..
+}
+
+: ----- generate the orig -----
+
+origtar=${p}_${bv}.orig.tar.gz
+
+tar --exclude=debian --exclude=.git -zcf $origtar $p
+
+: ----- test 1.0 native -----
+
+native_addpatch () { :; }
+native_convert () { :; }
+
+sfmt_setup 1.1 native
+sfmt_import norm
+
+: ----- test 1.0 diff -----
+
+diff_addpatch () { :; }
+diff_convert () { :; }
+
+sfmt_setup 1.1 diff
+sfmt_import norm
+
+: ----- test "3.0 (quilt)" -----
+
+quilt_addpatch () {
+ pname=$1
+ cat >../editor.pl <<END
+ next if m/^$/..0;
+ s{^(description:).*}{\$1 dgit test patch $pname}i;
+ \$_='' if m/^ /;
+END
+ EDITOR="perl -pi $tmp/editor.pl" dpkg-source -iX --commit . $pname
+ test -f debian/patches/$pname
+}
+
+quilt_convert () {
+ mkdir -p debian/source
+ echo '3.0 (quilt)' >debian/source/format
+}
+
+sfmt_setup 1.0-1 quilt
+sfmt_import norm
+sfmt_import absurd --force-import-gitapply-absurd
+
+: ----- '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=$p.clone.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-ok