chiark / gitweb /
test suite: Do not tolerate any stderr output from git-fsck
[dgit.git] / tests / lib
index caa69d0964d3c7b1e1aa377698eb0004668bb150..52aca71b6e27cb5818bba3f040f1f5bef76aca19 100644 (file)
--- a/tests/lib
+++ b/tests/lib
@@ -65,6 +65,7 @@ incoming              = $tmp/incoming
 run_dinstall           = 0
 END
 
+: ${t_archive_method:=aq}
 : ${tagpfx:=archive/test-dummy}
 : ${suitespecs:=sid:unstable}
 
@@ -198,11 +199,11 @@ t-has-ancestor () {
        fi
 }
 
-t-has-parent () {
-       # t-has-parent CHILD PARENT
+t-has-parent-or-is () {
+       # t-has-parent-or-is CHILD PARENT
        local child=$1
        local parent=$2
-       local parents=$(git show --pretty=format:' %P ' "$child")
+       local parents=$(git show --pretty=format:' %P %H ' "$child")
        parent=$(git rev-parse "$parent~0")
        case "$parents" in
        *" $parent "*)  ;;
@@ -226,6 +227,9 @@ t-prep-newpackage () {
 
 t-archive-none () {
        t-select-package $1
+       t-archive-none-$t_archive_method
+}
+t-archive-none-aq () {
        mkdir -p $tmp/aq/dsc_in_suite $tmp/mirror/pool/main
 
        : >$tmp/aq/suites
@@ -237,10 +241,10 @@ t-archive-none () {
                local sname=${suitespec#*:}
 
                >$tmp/aq/package.$suite.$p
-               t-archive-updated $suite $p
+               t-aq-archive-updated $suite $p
 
                >$tmp/aq/package.new.$p
-               t-archive-updated new $p
+               t-aq-archive-updated new $p
 
                ln -sf $suite $tmp/aq/dsc_in_suite/$sname
 
@@ -267,7 +271,7 @@ END
 END
 }
 
-t-archive-updated () {
+t-aq-archive-updated () {
        local suite=$1
        local p=$2
        local suitedir=$tmp/aq/dsc_in_suite/$suite
@@ -299,9 +303,16 @@ t-archive-process-incoming () {
 t-archive-query () {
        local suite=${1-sid}
        local dscf=main/${p}_${v}.dsc
+       t-archive-query-$t_archive_method "$suite" "$p" "$v" "$dscf"
+}
+t-archive-query-aq () {
+       local suite=$1
+       local p=$2
+       local v=$3
+       local dscf=$4
        local sha=`sha256sum <$tmp/mirror/pool/$dscf`
        echo "${v} ${sha%  -} $dscf" >>$tmp/aq/package.$suite.${p}
-       t-archive-updated $suite $p
+       t-aq-archive-updated $suite $p
 }
 
 t-archive () {
@@ -310,7 +321,7 @@ t-archive () {
        local dscf=${p}_$2.dsc
        rm -f $tmp/mirror/pool/main/${p}_*
        ln $troot/pkg-srcs/${p}_${2%-*}* $tmp/mirror/pool/main/
-       t-archive-query
+       t-archive-query $suite
        rm -rf $tmp/extract
        mkdir $tmp/extract
        (set -e; cd $tmp/extract; dpkg-source -x ../mirror/pool/main/$dscf)
@@ -338,6 +349,52 @@ t-git-dir-check () {
        esac
 }
 
+t-expect-fsck-fail () {
+       echo >>$tmp/fsck.expected-errors "$1"
+}
+
+t-git-fsck () {
+       set +e
+       LC_MESSAGES=C git fsck --no-dangling --strict 2>&1 \
+               | tee dgit-test-fsck.errs
+       ps="${PIPESTATUS[*]}"
+       set -e
+
+       local pats
+       if [ -f $tmp/fsck.expected-errors ]; then
+               pats=(-w -f $tmp/fsck.expected-errors)
+       else
+               test "$ps" = "0 0"
+       fi
+       pats+=(-e 'notice: HEAD points to an unborn branch')
+       pats+=(-e 'notice: No default references')
+
+       set +e
+       grep -v "${pats[@]}" dgit-test-fsck.errs
+       rc=$?
+       set -e
+       case $rc in
+       1) ;; # no unexpected errors
+       0) fail "unexpected messages from git-fsck" ;;
+       *) fail "grep of git-fsck failed" ;;
+       esac
+}
+
+t-fscks () {
+       (
+       shopt -s nullglob
+       for d in $tmp/*/.git $tmp/git/*.git; do
+               cd "$d"
+               t-git-fsck
+       done
+       )
+}
+
+t-ok () {
+       t-fscks
+       echo ok.
+}
+
 t-rm-dput-dropping () {
        rm -f $tmp/${p}_${v}_*.upload
 }
@@ -589,6 +646,7 @@ t-splitbrain-pushed-good--unpack () {
        mkdir t-unpack
        cd t-unpack
        ln -s $tmp/mirror/pool/main/*.orig*.tar* .
+       ln -s $tmp/incoming/*.orig*.tar* . ||:
        ln -s $incoming_dsc .
        ln -s ${incoming_dsc/.dsc/.debian.tar}* .
        dpkg-source "$@" -x *.dsc
@@ -747,6 +805,16 @@ t-tstunt-parsechangelog () {
        t-tstunt dpkg-parsechangelog Dpkg/Changelog/Parse.pm
 }
 
+t-tstunt-lintian () {
+       t-tstunt lintian
+}
+
+t-tstunt-debuild () {
+       : ${DGIT_TEST_REAL_DEBUILD:=$(type -p debuild)}
+       export DGIT_TEST_REAL_DEBUILD
+       t-tstunt debuild
+}
+
 t-incoming-dsc () {
        local dsc=${p}_${v}.dsc
        incoming_dsc=$tmp/incoming/$dsc
@@ -833,7 +901,7 @@ t-gbp-example-prep () {
 t-commit () {
        local msg=$1
        v=${2:-${majorv:-1}.$revision}
-       dch -v$v --distribution ${3:-unstable} "$1"
+       dch --force-distribution -v$v --distribution ${3:-unstable} "$1"
        git add debian/changelog
        debcommit
        revision=$(( ${revision-0} + 1 ))