X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=tests%2Flib;h=d131e7b2a8dc4a6328a32d8cb1016135a896ba58;hp=e1bc6d941e8f66b60f1d4d5d1d089049e6da4bcc;hb=ada48ca013e77d7e821d326db40bc1a59ba639ea;hpb=6206349cffcc47da7d927aeec058e579654d2075 diff --git a/tests/lib b/tests/lib index e1bc6d94..d131e7b2 100644 --- a/tests/lib +++ b/tests/lib @@ -5,6 +5,7 @@ set -x set -o pipefail . tests/lib-core +. tests/lib-restricts t-set-intree @@ -34,6 +35,8 @@ mkdir -p $tmp/gnupg cp $troot/gnupg/* $tmp/gnupg chmod go-rw $tmp/gnupg/* +export DEBCHANGE_VENDOR=dpkg + mkdir -p $tmp/incoming cat <$tmp/dput.cf [test-dummy] @@ -45,6 +48,24 @@ END t-expect-fail () { local mpat="$1"; shift + set +o pipefail + LC_MESSAGES=C "$@" 2>&1 | tee $tmp/t.output + local ps="${PIPESTATUS[*]}" + set -o pipefail + + case $ps in + "0 0") fail "command unexpectedly succeeded (instead of: $mpat)" ;; + *" 0") ;; + *) fail "tee failed" ;; + esac + + t-grep-mpat "$mpat" $tmp/t.output +} + +t-grep-mpat () { + local mpat="$1" + local file="$2" + local grepper=fgrep case "$mpat" in [A-Z]:*) @@ -57,19 +78,8 @@ t-expect-fail () { ;; esac - set +o pipefail - LC_MESSAGES=C "$@" 2>&1 | tee $tmp/t.output - local ps="${PIPESTATUS[*]}" - set -o pipefail - - case $ps in - "0 0") fail "command unexpectedly succeeded (instead of: $mpat)" ;; - *" 0") ;; - *) fail "tee failed" ;; - esac - - $grepper -e "$mpat" $tmp/t.output || - fail "error message not found" + $grepper -e "$mpat" "$file" || + fail "message not found" } t-expect-push-fail () { @@ -90,7 +100,7 @@ t-expect-push-fail () { t-git-objects-not-present () { # t-git-objects-not-present GITDIR|'' OBJID [...] # specifying '' means the repo for package $p - local gitdir="${1-$tmp/git/$p.git}" + local gitdir="${1-$dgitrepo}" local obj if ! [ -e "$gitdir" ]; then return; fi for obj in "$@"; do @@ -102,11 +112,12 @@ t-git-objects-not-present () { t-reporefs () { local whichoutput=$1; shift + local whichrepo=${1-$dgitrepo} local outputfile="$tmp/show-refs.$whichoutput" (set -e exec >"$outputfile" - if test -d $tmp/git/$p.git; then - cd $tmp/git/$p.git + if test -d $whichrepo; then + cd $whichrepo git show-ref |sort fi) } @@ -126,8 +137,13 @@ t-worktree () { t-untar $troot/worktrees/${p}_$1 } -t-git () { +t-select-package () { p=$1 + dgitrepo=$tmp/git/$p.git +} + +t-git () { + t-select-package $1 v=$2 mkdir -p $tmp/git local gs=$troot/git-srcs/${p}_$v.git @@ -139,23 +155,27 @@ t-git-none () { (set -e; cd $tmp/git; tar xf $troot/git-template.tar) } +t-git-merge-base () { + git merge-base $1 $2 || test $? = 1 +} + t-has-ancestor () { local now=`git rev-parse HEAD` local ancestor=`git rev-parse $1^{}` - local mbase=`git merge-base $ancestor $now` + local mbase=`t-git-merge-base $ancestor $now` if [ x$mbase != x$ancestor ]; then fail "not ff $ancestor..$now, $mbase != $ancestor" fi } t-prep-newpackage () { - p=$1 + t-select-package $1 v=$2 t-archive-none $p t-git-none t-worktree $v cd $p - if ! git-show-ref --verify --quiet refs/heads/master; then + if ! git show-ref --verify --quiet refs/heads/master; then git branch -m dgit/sid master git remote rm dgit fi @@ -163,7 +183,7 @@ t-prep-newpackage () { } t-archive-none () { - p=$1 + t-select-package $1 mkdir -p $tmp/aq $tmp/mirror/pool/main local suite=sid @@ -241,11 +261,11 @@ t-archive () { } t-git-dir-time-passes () { - touch -d 'last year' $tmp/git/$p.git + touch -d 'last year' $dgitrepo } t-git-dir-check () { - local gitdir=$tmp/git/$p.git + local gitdir=$dgitrepo case "$1" in enoent) if test -e "$gitdir"; then fail "$gitdir exists"; fi @@ -268,6 +288,7 @@ t-rm-dput-dropping () { t-dgit () { local dgit=${DGIT_TEST-dgit} + pwd : ' {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{' $dgit --dgit=$dgit --dget:-u --dput:--config=$tmp/dput.cf \ @@ -281,6 +302,15 @@ t-diff-nogit () { diff --exclude=.git --exclude=.pc -ruN $* } +t-files-notexist () { + local f + for f in "$@"; do + if [ -e $f ]; then + fail "$f exists!" + fi + done +} + t-cloned-fetched-good () { t-diff-nogit ../extract/$p-${v%-*} . t-clean-on-branch dgit/sid @@ -302,6 +332,16 @@ t-clean-on-branch () { t-output "## $1" git status -b --porcelain } +t-git-get-ref-exact () { + local ref=$1 + # does not dereference, unlike t-git-get-ref + case "$ref" in + refs/*) ;; + *) fail "t-git-get-ref-exact bad $ref" ;; + esac + git for-each-ref --format='%(objectname)' "[r]efs/${ref#refs/}" +} + t-git-get-ref () { local ref=$1 case "$ref" in @@ -314,6 +354,12 @@ t-git-get-ref () { ' } +t-ref-same-exact () { + local name="$1" + local 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` @@ -350,7 +396,7 @@ t-refs-same () { t-refs-notexist () { local val for g in $*; do - val=`t-git-get-ref $g >$tmp/t.refx` + val=`t-git-get-ref $g` if [ "x$val" != x ]; then fail "ref $g unexpectedly exists ($val)" fi @@ -358,7 +404,16 @@ t-refs-notexist () { } t-v-tag () { - echo refs/tags/debian/${v//\~/_} + echo refs/tags/test-dummy/${v//\~/_} +} + +t-check-pushed-master () { + local 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` + if [ x$mbase = x$master ]; then fail "failed to ff master"; fi } t-pushed-good () { @@ -371,16 +426,27 @@ t-pushed-good () { t-refs-notexist \ refs/heads/dgit/unstable \ refs/remotes/dgit/dgit/unstable - (set -e; cd $tmp/git/$p.git + (set -e; cd $dgitrepo t-refs-same \ refs/dgit/sid \ `t-v-tag` + ${t_check_pushed_master:- : NOT-DRS-NO-CHECK-PUSHED-MASTER} t-refs-notexist \ refs/dgit/unstable ) git verify-tag `t-v-tag` } +t-commit-build-push-expect-log () { + local msg=$1 + local mpat=$2 + t-commit "$msg" + t-dgit build + LC_MESSAGES=C \ + t-dgit push --new 2>&1 |tee $tmp/push.log + t-grep-mpat "$mpat" $tmp/push.log +} + t-822-field () { local file=$1 local field=$2 @@ -423,15 +489,6 @@ t-tstunt-parsechangelog () { t-tstunt dpkg-parsechangelog Dpkg/Changelog/Parse.pm } -t-prep-mergechangelogs () { - local b=merge.dpkg-mergechangelogs - git config $b.name 'debian/changelog merge driver' - git config $b.driver 'dpkg-mergechangelogs -m %O %A %B %A' - mkdir -p .git/info - echo >>.git/info/attributes \ - 'debian/changelog merge=dpkg-mergechangelogs' -} - t-ref-dsc-dgit () { local dsc=${p}_${v}.dsc local val=`t-822-field $tmp/incoming/$dsc Dgit` @@ -449,11 +506,11 @@ t-apply-diff () { t-commit () { local msg=$1 - v=1.$revision + v=${2-1.$revision} dch -v$v --distribution unstable "$1" git add debian/changelog debcommit - revision=$(( $revision + 1 )) + revision=$(( ${revision-0} + 1 )) } t-git-config () { @@ -465,14 +522,21 @@ t-drs () { 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 - cp $root/tests/gnupg/{dd.gpg,dm.gpg,dm.txt} $tmp/. - cp $root/tests/suites $tmp/. + cp $troot/gnupg/{dd.gpg,dm.gpg,dm.txt} $tmp/. + cp $troot/suites $tmp/. + cp $troot/suites $tmp/suites-master + + export t_check_pushed_master=t-check-pushed-master drs_dispatch=$tmp/distro=test-dummy mkdir $drs_dispatch - ln -sf $root $drs_dispatch/dgit-live + + if [ "x$DGIT_TEST_INTREE" != x ]; then + ln -sf "$DGIT_TEST_INTREE" $drs_dispatch/dgit-live + fi + ln -sf $tmp/git $drs_dispatch/repos - ln -sf $tmp/suites $tmp/dm.txt $drs_dispatch/ + ln -sf $tmp/suites $tmp/suites-master $tmp/dm.txt $drs_dispatch/ mkdir -p $drs_dispatch/keyrings ln -sf $tmp/dd.gpg $drs_dispatch/keyrings/debian-keyring.gpg ln -sf $tmp/dm.gpg $drs_dispatch/keyrings/debian-maintainers.gpg @@ -500,10 +564,24 @@ t-policy-admin () { ${DGIT_INFRA_PFX}dgit-repos-admin-debian --repos $tmp/git "$@" } +t-policy-nonexist () { + ln -sf no-such-file-or-directory $drs_dispatch/policy-hook +} + +t-make-hook-link () { + local hook=$1 # in infra/ + local linkpath=$2 + hook=${DGIT_INFRA_PFX}$hook + case $hook in + */*) ;; + *) hook=`type -P $hook` ;; + esac + ln -sf "$hook" $linkpath +} + t-policy () { local policyhook=$1 - ln -sf ${DGIT_INFRA_PFX}$policyhook \ - $drs_dispatch/policy-hook + t-make-hook-link $policyhook $drs_dispatch/policy-hook } t-debpolicy () { @@ -519,6 +597,11 @@ t-policy-periodic () { test-dummy $drs_dispatch '' --cron } +t-restrict () { + local restriction=$1 + (cd $root; t-restriction-$restriction >&2) +} + t-chain-test () { local ct=$1 local d=${0%/*}