X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=tests%2Flib;h=f1ffa8b11563219b2f3082a591fca04ed4d16c9c;hp=fbe04b7d8d91a9c63728411a4f1431dfccf70261;hb=33abcd4e771e0bd3129383eb56f4ba31ff82a24c;hpb=076a8ac565082e73b3bae409df4492701654d74a diff --git a/tests/lib b/tests/lib index fbe04b7d..f1ffa8b1 100644 --- a/tests/lib +++ b/tests/lib @@ -5,12 +5,30 @@ set -x set -o pipefail . tests/lib-core +. tests/lib-restricts + +t-report-failure () { + set +x + rc=$1 + cat <&2 +TEST FAILED +funcs: ${FUNCNAME[*]} +lines: ${BASH_LINENO[*]} +files: ${BASH_SOURCE[*]} +END + exit 16 +} + +trap 'test $? = 0 || t-report-failure' EXIT t-set-intree -: ${DGIT_TEST_DEBUG:=-D} +: ${DGIT_TEST_DEBUG=-D} export DGIT_TEST_DEBUG +export GIT_COMMITTER_DATE='1440253867 +0100' +export GIT_AUTHOR_DATE='1440253867 +0100' + root=`pwd` troot=$root/tests testname="${DGIT_TEST_TESTNAME-${0##*/}}" @@ -44,9 +62,34 @@ incoming = $tmp/incoming run_dinstall = 0 END +: ${tagpfx:=test-dummy} + +t-git-next-date () { + GIT_COMMITTER_DATE="$(( ${GIT_COMMITTER_DATE%% *} + 1 )) ${GIT_COMMITTER_DATE#* }" + GIT_AUTHOR_DATE="$GIT_COMMITTER_DATE" +} + 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]:*) @@ -59,19 +102,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 () { @@ -92,7 +124,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 @@ -104,11 +136,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) } @@ -117,7 +150,7 @@ t-untar () { local tarfile=$1.tar local edittree=$1.edit if test -d "$edittree"; then - cp -al "$edittree"/* . + cp -a "$edittree"/* . else tar xf "$tarfile" fi @@ -128,8 +161,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 @@ -155,7 +193,7 @@ t-has-ancestor () { } t-prep-newpackage () { - p=$1 + t-select-package $1 v=$2 t-archive-none $p t-git-none @@ -169,7 +207,7 @@ t-prep-newpackage () { } t-archive-none () { - p=$1 + t-select-package $1 mkdir -p $tmp/aq $tmp/mirror/pool/main local suite=sid @@ -215,7 +253,8 @@ t-archive-updated () { "filename" => "$4", }; END { - print to_json \@v or die $!; + my $json = JSON->new->canonical(); + print $json->encode(\@v) or die $!; } ' } @@ -247,11 +286,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 @@ -288,6 +327,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 @@ -354,7 +402,8 @@ t-ref-same-val () { case "$t_ref_val" in '') ;; "$val") ;; - *) fail "ref varies: $name: $val != $t_ref_val" ;; + *) fail "ref varies: $name:\ + ${val:-nothing} != ${t_ref_val:-nothing}" ;; esac t_ref_val="$val" } @@ -381,7 +430,7 @@ t-refs-notexist () { } t-v-tag () { - echo refs/tags/test-dummy/${v//\~/_} + echo refs/tags/$tagpfx/${v//\~/_} } t-check-pushed-master () { @@ -403,7 +452,7 @@ 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` @@ -414,6 +463,16 @@ t-pushed-good () { 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 @@ -471,6 +530,52 @@ t-apply-diff () { | patch -p1 -u } +t-gbp-unapplied-pq2qc () { + # does `gbp pq export' + # commits the resulting debian/patches on qc/BRANCH + # leaves us on qc/BRANCH (eg "qc/quilt-tip")) + # qc/BRANCH is not fast-forwarding + + gbp pq export + + branch=`git symbolic-ref HEAD` + branch=${branch#refs/heads/} + + case "$branch" in + */*) fail "unexpected branch $branch" ;; + esac + + git branch -f qc/$branch + git checkout qc/$branch + git add debian/patches + git commit -m 'Commit patch queue' +} + +t-gbp-example-prep () { + t-archive example 1.0-1 + t-git-none + t-worktree 1.0 + + cd example + + t-dgit fetch + + git-checkout -b patch-queue/quilt-tip-2 patch-queue/quilt-tip + gbp pq rebase + + echo '/* some comment */' >>src.c + git add src.c + git commit -m 'Add a comment to an upstream file' + + t-gbp-unapplied-pq2qc + + t-commit 'some updates' 1.0-2 + + git merge -s ours \ + -m 'Pseudo-merge to make descendant of archive' \ + remotes/dgit/dgit/sid +} + t-commit () { local msg=$1 v=${2-1.$revision} @@ -510,6 +615,14 @@ t-drs () { ln -sf /bin/true $drs_dispatch/policy-hook } +t-newtag () { + export tagpfx=archive/test-dummy + t-git-config dgit-distro.test-dummy.dgit-tag-format new +} +t-oldtag () { + t-git-config dgit-distro.test-dummy.dgit-tag-format old +} + t-dsd () { t-drs t-git-config dgit-distro.test-dummy.ssh "$troot/dsd-ssh" @@ -535,14 +648,20 @@ t-policy-nonexist () { ln -sf no-such-file-or-directory $drs_dispatch/policy-hook } -t-policy () { - local policyhook=$1 - policyhook=${DGIT_INFRA_PFX}$policyhook - case $policyhook in +t-make-hook-link () { + local hook=$1 # in infra/ + local linkpath=$2 + hook=${DGIT_INFRA_PFX}$hook + case $hook in */*) ;; - *) policyhook=`type -P $policyhook` ;; + *) hook=`type -P $hook` ;; esac - ln -sf "$policyhook" $drs_dispatch/policy-hook + ln -sf "$hook" $linkpath +} + +t-policy () { + local policyhook=$1 + t-make-hook-link $policyhook $drs_dispatch/policy-hook } t-debpolicy () { @@ -558,6 +677,15 @@ t-policy-periodic () { test-dummy $drs_dispatch '' --cron } +t-restrict () { + local restriction=$1 + (cd $root; t-restriction-$restriction >&2) +} + +t-dependencies () { + : "Hopefully installed: $*" +} + t-chain-test () { local ct=$1 local d=${0%/*}