X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=tests%2Flib;h=ce89a7091d015ead95d70602224c5212970c7af7;hp=cf7d4cfb008fd3a3f87a60d4e67f02a45fc635c5;hb=63911b5d576e7250c132d117c53e66aaf34b7f47;hpb=030ae37385ca7cb5d3ad6a05ecf381df15c49867 diff --git a/tests/lib b/tests/lib index cf7d4cfb..ce89a709 100644 --- a/tests/lib +++ b/tests/lib @@ -12,6 +12,7 @@ t-report-failure () { rc=$1 cat <&2 TEST FAILED +cwd: $PWD funcs: ${FUNCNAME[*]} lines: ${BASH_LINENO[*]} files: ${BASH_SOURCE[*]} @@ -28,12 +29,15 @@ t-set-intree : ${DGIT_TEST_DEBUG=-D} export DGIT_TEST_DEBUG +: ${DGIT_TEST_DISTRO+ ${distro=${DGIT_TEST_DISTRO}}} + export GIT_COMMITTER_DATE='1440253867 +0100' export GIT_AUTHOR_DATE='1440253867 +0100' root=`pwd` troot=$root/tests testname="${DGIT_TEST_TESTNAME-${0##*/}}" +export DGIT_TEST_TROOT=$troot tmp=$ADTTMP if [ x"$tmp" = x ]; then @@ -51,6 +55,7 @@ tmp=`pwd` t-set-using-tmp +test -f $tmp/.save-env || \ env -0 >$tmp/.save-env ln -f $troot/ssh ssh @@ -114,7 +119,7 @@ t-grep-mpat () { t-expect-push-fail () { local mpat="$1"; shift - local triedpush=`git rev-parse HEAD` + local triedpush; triedpush=`git rev-parse HEAD` t-reporefs pre-push t-expect-fail "$mpat" "$@" @@ -191,9 +196,9 @@ t-git-merge-base () { t-has-ancestor () { # t-has-ancestor ANCESTOR # (CHILD is implicit, HEAD) - local now=`git rev-parse HEAD` - local ancestor=`git rev-parse $1^{}` - local mbase=`t-git-merge-base $ancestor $now` + local now; now=`git rev-parse HEAD` + local ancestor; ancestor=`git rev-parse $1^{}` + local mbase; mbase=`t-git-merge-base $ancestor $now` if [ x$mbase != x$ancestor ]; then fail "not ff $ancestor..$now, $mbase != $ancestor" fi @@ -203,7 +208,8 @@ 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 %H ' "$child") + local parents + parents=$(git show --pretty=format:' %P %H ' "$child") parent=$(git rev-parse "$parent~0") case "$parents" in *" $parent "*) ;; @@ -310,7 +316,7 @@ t-archive-query-aq () { local p=$2 local v=$3 local dscf=$4 - local sha=`sha256sum <$tmp/mirror/pool/$dscf` + local sha; sha=`sha256sum <$tmp/mirror/pool/$dscf` echo "${v} ${sha% -} $dscf" >>$tmp/aq/package.$suite.${p} t-aq-archive-updated $suite $p } @@ -354,9 +360,11 @@ t-expect-fsck-fail () { } t-git-fsck () { + local fsckerrs=$(git rev-parse --git-dir)/dgit-test-fsck.errs + set +e LC_MESSAGES=C git fsck --no-dangling --strict 2>&1 \ - | tee dgit-test-fsck.errs + | tee $fsckerrs ps="${PIPESTATUS[*]}" set -e @@ -370,7 +378,7 @@ t-git-fsck () { pats+=(-e 'notice: No default references') set +e - grep -v "${pats[@]}" dgit-test-fsck.errs + grep -v "${pats[@]}" $fsckerrs rc=$? set -e case $rc in @@ -384,13 +392,14 @@ t-fscks () { ( shopt -s nullglob for d in $tmp/*/.git $tmp/git/*.git; do - cd "$d" + cd "${d%/.git}" t-git-fsck done ) } t-ok () { + : '========================================' t-fscks echo ok. } @@ -401,16 +410,29 @@ t-rm-dput-dropping () { t-dgit () { local dgit=${DGIT_TEST-dgit} - pwd + pwd >&2 : ' {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{' $dgit --dgit=$dgit --dget:-u --dput:--config=$tmp/dput.cf \ - -dtest-dummy $DGIT_TEST_OPTS $DGIT_TEST_DEBUG \ - -k39B13D8A $t_dgit_xopts "$@" + ${dgit_config_debian_alias-"--config-lookup-explode=dgit-distro.debian.alias-canon"} \ + ${distro+${distro:+-d}}${distro--dtest-dummy} \ + $DGIT_TEST_OPTS $DGIT_TEST_DEBUG \ + -kBCD22CD83243B79D3DFAC33EA3DBCBC039B13D8A $t_dgit_xopts "$@" : '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} ' } +t-dgit-manpage () { + local section=$1 + local page=$2 + (export LC_ALL=C.UTF-8 + if [ "$DGIT_TEST_INTREE" ]; then + make -C $DGIT_TEST_INTREE $page.$section.view + else + man $section $page + fi) +} + t-diff-nogit () { diff --exclude=.git --exclude=.pc -ruN $* } @@ -528,18 +550,18 @@ t-git-get-ref () { t-ref-same-exact () { local name="$1" - local val=`t-git-get-ref-exact $name` + local val; val=`t-git-get-ref-exact $name` t-ref-same-val "$name" $val } t-ref-same () { local name="$1" - local val=`t-git-get-ref $name` + local val; val=`t-git-get-ref $name` t-ref-same-val "$name" $val } t-ref-head () { - local val=`git rev-parse HEAD` + local val; val=`git rev-parse HEAD` t-ref-same-val HEAD $val } @@ -589,11 +611,11 @@ t-format-ref () { t-sametree-parent () { local ref=$1 local parent - local ctree=$(t-format-ref '%T' "$ref") + local ctree; ctree=$(t-format-ref '%T' "$ref") while :; do local psame='' for parent in $(t-format-ref '%P' "$ref"); do - local ptree=$(t-format-ref '%T' "$parent") + local ptree; ptree=$(t-format-ref '%T' "$parent") if [ "x$ptree" = "x$ctree" ]; then psame+=" $parent" fi @@ -605,14 +627,29 @@ t-sametree-parent () { } t-check-pushed-master () { - local master=`t-git-get-ref refs/heads/master` + local master; master=`t-git-get-ref refs/heads/master` if [ x$master = x$t_ref_val ]; then return; fi if [ x$master = x ]; then fail "failed to push master"; fi # didn't update master, it must be not FF - local mbase=`t-git-merge-base $master $t_ref_val` + local mbase; mbase=`t-git-merge-base $master $t_ref_val` if [ x$mbase = x$master ]; then fail "failed to ff master"; fi } +t-push-was-source-only () { + local f + t-files-notexist $tmp/incoming/${p}_${v}_*.deb \ + $tmp/incoming/${p}_${v}_*.udeb + # we permit _source.buildinfo files; see test_changes_source_only() + for f in $tmp/incoming/${p}_${v}_*.buildinfo; do + if [ -e $f ]; then + case "$f" in + *_source.buildinfo) ;; + *) fail "non-source-only file $f exists!" ;; + esac + fi + done +} + t-pushed-good () { local branch=$1 local suite=${2:-sid} @@ -774,6 +811,12 @@ t-822-field () { ' <$file } +t-defdistro () { + export DGIT_TEST_DISTRO='' + distro='' + t-git-config dgit-suite.unstable.distro test-dummy +} + t-stunt-envvar () { local var=$1 local tstunt=$2 @@ -788,12 +831,48 @@ t-stunt-envvar () { ' } +t-tstunt--save-real () { + local f="$1" + case "$f" in + */*) return ;; + esac + + local rc + local real + set +e + real=$( + p=":$PATH:" + p="${p/:"$tmp/tstunt":/:}" + p="${p%:}" + p="${p#:}" + PATH="$p" + type -p "$f" + ) + rc=$? + set -e + + case $rc in + 1) return ;; + 0) ;; + *) fail "did not find $f on PATH $PATH" ;; + esac + + local varname=${f//[^_0-9a-zA-Z]/_} + varname=DGIT_TEST_REAL_${varname^^} + + eval " + : \${$varname:=\$real} + export $varname + " +} + t-tstunt () { local tstunt=$tmp/tstunt t-stunt-envvar PATH $tstunt t-stunt-envvar PERLLIB $tstunt local f for f in "$@"; do + t-tstunt--save-real $f f="./$f" local d="$tstunt/${f%/*}" mkdir -p $d @@ -810,8 +889,6 @@ t-tstunt-lintian () { } t-tstunt-debuild () { - : ${DGIT_TEST_REAL_DEBUILD:=$(type -p debuild)} - export DGIT_TEST_REAL_DEBUILD t-tstunt debuild } @@ -822,8 +899,12 @@ t-incoming-dsc () { t-ref-dsc-dgit () { t-incoming-dsc - local val=`t-822-field $incoming_dsc Dgit` - perl -e '$_=shift @ARGV; die "Dgit $_ ?" unless m/^\w+\b/;' "$val" + local val; val=`t-822-field $incoming_dsc Dgit` + val=$( perl -e ' + $_=shift @ARGV; + die "Dgit $_ ?" unless m/^\w+\b/; + print $&,"\n" or die $!; + ' "$val") t-ref-same-val $incoming_dsc "$val" } @@ -901,7 +982,7 @@ t-gbp-example-prep () { t-make-badcommit () { badcommit=$( git cat-file commit HEAD | \ - perl -pe 's/^committer.*\n//' | \ + perl -pe 's/^committer /commiter /' | \ git hash-object -w -t commit --stdin ) t-expect-fsck-fail $badcommit @@ -921,7 +1002,6 @@ t-git-config () { } t-drs () { - export DGIT_TEST_TROOT=$troot t-git-config dgit-distro.test-dummy.git-url "ext::$troot/drs-git-ext %S " t-git-config dgit-distro.test-dummy.git-check true t-git-config dgit-distro.test-dummy.git-create true @@ -974,7 +1054,9 @@ t-dsd () { } t-policy-admin () { + : '((((((((((((((((((((((((((((((((((((((((' ${DGIT_INFRA_PFX}dgit-repos-admin-debian --repos $tmp/git "$@" + : '))))))))))))))))))))))))))))))))))))))))' } t-policy-nonexist () { @@ -1006,8 +1088,10 @@ t-debpolicy () { } t-policy-periodic () { + : '((((((((((((((((((((((((((((((((((((((((' ${DGIT_REPOS_SERVER_TEST-dgit-repos-server} \ test-dummy $drs_dispatch '' --cron + : '))))))))))))))))))))))))))))))))))))))))' } t-restrict () { @@ -1035,6 +1119,8 @@ t-alt-test () { t-chain-test "${t#*-}" } +t-git-config dgit.default.old-dsc-distro test-dummy + case "$0" in */gnupg) ;; *) t-setup-import gnupg ;;