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 () {
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
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`