exec 2>&1
set -x
+set -o pipefail
. tests/lib-core
t-expect-fail () {
local mpat="$1"; shift
+
+ local grepper=fgrep
+ case "$mpat" in
+ [A-Z]:*)
+ case "$mpat" in
+ E:*) grepper=egrep ;;
+ F:*) grepper=fgrep ;;
+ *) fail "bad mpat prefix in $mpat";;
+ esac
+ mpat=${mpat#[A-Z]:}
+ ;;
+ esac
+
+ set +o pipefail
LC_MESSAGES=C "$@" 2>&1 | tee $tmp/t.output
- test ${PIPESTATUS[0]} != 0
- egrep "$mpat" $tmp/t.output ||false
+ 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"
+}
+
+t-expect-push-fail () {
+ local mpat="$1"; shift
+
+ local triedpush=`git rev-parse HEAD`
+
+ t-reporefs pre-push
+ t-expect-fail "$mpat" "$@"
+ t-reporefs post-push
+ diff $tmp/show-refs.{pre,post}-push
+
+ t-git-objects-not-present '' $triedpush
+
+ eval "$t_expect_push_fail_hook"
+}
+
+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 obj
+ if ! [ -e "$gitdir" ]; then return; fi
+ for obj in "$@"; do
+ GIT_DIR=$gitdir \
+ t-expect-fail 'unable to find' \
+ git cat-file -t $obj
+ done
+}
+
+t-reporefs () {
+ local whichoutput=$1; shift
+ local outputfile="$tmp/show-refs.$whichoutput"
+ (set -e
+ exec >"$outputfile"
+ if test -d $tmp/git/$p.git; then
+ cd $tmp/git/$p.git
+ git show-ref |sort
+ fi)
}
t-untar () {
t-refs-same \
refs/heads/dgit/sid \
refs/remotes/dgit/dgit/sid
- t-refs-notexist dgit/unstable remotes/dgit/dgit/unstable
+ t-refs-notexist refs/dgit/unstable refs/remotes/dgit/dgit/unstable
}
t-output () {
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
- git show-ref -d $1 | perl -ne '
+ case "$ref" in
+ refs/*) ;;
+ *) fail "t-git-get-ref bad $ref" ;;
+ esac
+ (git show-ref -d $1 || test $? = 1) | perl -ne '
$x = $1 if m#^(\w+) \Q'$1'\E(?:\^\{\})?$#;
END { print "$x\n" if length $x; }
'
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`
t-apply-diff () {
local v1=$1
local v2=$2
- (cd $troot/pkg-srcs; debdiff ${p}_${v1}.dsc ${p}_${v2}.dsc) \
- | patch -p1 -u
+ (cd $troot/pkg-srcs;
+ debdiff ${p}_${v1}.dsc ${p}_${v2}.dsc || test $? = 1) \
+ | patch -p1 -u
+}
+
+t-commit () {
+ local msg=$1
+ v=1.$revision
+ dch -v$v --distribution unstable "$1"
+ git add debian/changelog
+ debcommit
+ revision=$(( $revision + 1 ))
}
t-git-config () {
${DGIT_INFRA_PFX}dgit-repos-admin-debian --repos $tmp/git "$@"
}
+t-policy () {
+ local policyhook=$1
+ ln -sf ${DGIT_INFRA_PFX}$policyhook \
+ $drs_dispatch/policy-hook
+}
+
t-debpolicy () {
t-dsd
-
- ln -sf ${DGIT_INFRA_PFX}dgit-repos-policy-debian \
- $drs_dispatch/policy-hook
+ t-policy dgit-repos-policy-debian
mkdir $tmp/git
t-policy-admin create-db