chiark / gitweb /
test suite: Break out t-make-badcommit
[dgit.git] / tests / lib
index b7763056fa2cca759e115a1421b93c0b0bc534b5..cf7d4cfb008fd3a3f87a60d4e67f02a45fc635c5 100644 (file)
--- a/tests/lib
+++ b/tests/lib
@@ -349,7 +349,49 @@ 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.
 }
 
@@ -856,6 +898,15 @@ t-gbp-example-prep () {
                remotes/dgit/dgit/sid
 }
 
+t-make-badcommit () {
+       badcommit=$(
+               git cat-file commit HEAD | \
+               perl -pe 's/^committer.*\n//' | \
+               git hash-object -w -t commit --stdin
+       )
+       t-expect-fsck-fail $badcommit
+}
+
 t-commit () {
        local msg=$1
        v=${2:-${majorv:-1}.$revision}