X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=tests%2Flib;h=bf3237dc549e33a78d692f63b2b57ff9b7a494fd;hp=81accebf0f6f11d53639af725298416606102e33;hb=f161f45247f812f366a76e039035255450d4e522;hpb=441cf15ffbafea7aa6be4cc04bb0085c8d79063e diff --git a/tests/lib b/tests/lib index 81accebf..bf3237dc 100644 --- a/tests/lib +++ b/tests/lib @@ -335,7 +335,7 @@ t-dgit () { {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{' $dgit --dgit=$dgit --dget:-u --dput:--config=$tmp/dput.cf \ -dtest-dummy $DGIT_TEST_OPTS $DGIT_TEST_DEBUG \ - -k39B13D8A "$@" + -k39B13D8A $t_dgit_xopts "$@" : '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} ' } @@ -364,7 +364,7 @@ t-cloned-fetched-good () { } t-output () { - printf "%s\n" "$1" >$tmp/t.want + printf "%s${1:+\n}" "$1" >$tmp/t.want shift "$@" >$tmp/t.got diff $tmp/t.want $tmp/t.got @@ -398,18 +398,22 @@ t-setup-done () { t-setup-import () { local setupname=$1 + local setupsrc + local lock if [ "x$tmpbase" = x ]; then # ADTTMP was set on entry to tests/lib, so we # are not sharing tmp area between tests setupsrc="$tmp" + lock="$tmp/.dummy.lock" else setupsrc="$tmpbase/$setupname" + lock="$setupsrc.lock" fi local simport="$setupsrc/IMPORT" if ! [ -e "$simport" ]; then - with-lock-ex -w "$simport.lock" \ + with-lock-ex -w "$lock" \ xargs -0 -a $tmp/.save-env \ bash -xec ' cd "$1"; shift @@ -504,6 +508,28 @@ t-v-tag () { echo refs/tags/$tagpfx/${v//\~/_} } +t-format-ref () { + git log -n1 --pretty=format:"$1" "$2" +} + +t-sametree-parent () { + local ref=$1 + local parent + local 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") + if [ "x$ptree" = "x$ctree" ]; then + psame+=" $parent" + fi + done + case "$psame" in ""|" * *") break ;; esac + ref="${psame# }" + done + echo "$ref" +} + t-check-pushed-master () { local master=`t-git-get-ref refs/heads/master` if [ x$master = x$t_ref_val ]; then return; fi @@ -516,9 +542,14 @@ t-check-pushed-master () { t-pushed-good () { local branch=$1 local suite=${2:-sid} + t-refs-same \ + refs/heads/$branch + t-pushed-good-core +} + +t-pushed-good-core () { t-ref-dsc-dgit t-refs-same \ - refs/heads/$branch \ `t-v-tag` \ refs/remotes/dgit/dgit/$suite t-refs-notexist \ @@ -535,6 +566,84 @@ t-pushed-good () { git verify-tag `t-v-tag` } +t-gbp-pushed-good--unpack () { + cd $tmp + rm -rf t-unpack + mkdir t-unpack + cd t-unpack + ln -s $tmp/mirror/pool/main/*.orig*.tar* . + ln -s $incoming_dsc . + ln -s ${incoming_dsc/.dsc/.debian.tar}* . + dpkg-source "$@" -x *.dsc + cd */. + git init + git fetch ../../$p "refs/tags/*:refs/tags/*" +} + +t-gbp-pushed-good--checkprep () { + git add -Af . + git rm --cached -r --ignore-unmatch .pc +} + +t-gbp-pushed-good--checkdiff () { + local tag=$1 + t-gbp-pushed-good--checkprep + t-output "" git diff --stat --cached $tag +} + +t-gbp-pushed-good () { + local suite=${1:-sid} + local dep14tag=refs/tags/test-dummy/${v//\~/_} + local dgittag=$(t-v-tag) + t-output "" git status --porcelain + t-ref-head + t-refs-same $dep14tag + git merge-base --is-ancestor $dep14tag $dgittag + + t-refs-same-start + t-pushed-good-core + + t-incoming-dsc + + t-gbp-pushed-good--unpack + t-gbp-pushed-good--checkdiff $dgittag + + # Right, now we want to check that the maintainer tree and + # the dgit tree differ in exactly the ways we expect. We + # achieve this by trying to reconstruct the maintainer tree + # from the dgit tree. + + # So, unpack it withut the patches applied + t-gbp-pushed-good--unpack --skip-patches + + # dgit might have added a .gitignore patch, which we need to + # drop and remove + perl -i -pe ' + next unless $_ eq "auto-gitignore\n"; + die if $counter++; + chomp; + rename "debian/patches/$_", "../t-auto-gitignore" or die $!; + $_ = ""; + ' debian/patches/series + + # Now the result should differ only in non-debian/ .gitignores + t-gbp-pushed-good--checkprep + git diff --cached --name-only $dep14tag >../changed + perl -ne ' + next if !m#^debian/# && m#(^|/)\.gitignore#; + die "$_ mismatch"; + ' <../changed + + # If we actually apply the gitignore patch by hand, it + # should be perfect: + if [ -f ../t-auto-gitignore ]; then + patch --backup-if-mismatch -p1 -u <../t-auto-gitignore + fi + t-gbp-pushed-good--checkdiff $dep14tag + + cd $tmp/$p +} + t-commit-build-push-expect-log () { local msg=$1 local mpat=$2 @@ -587,11 +696,16 @@ t-tstunt-parsechangelog () { t-tstunt dpkg-parsechangelog Dpkg/Changelog/Parse.pm } -t-ref-dsc-dgit () { +t-incoming-dsc () { local dsc=${p}_${v}.dsc - local val=`t-822-field $tmp/incoming/$dsc Dgit` - perl -e '$_=shift @ARGV; die "$dsc Dgit $_ ?" unless m/^\w+\b/;' "$val" - t-ref-same-val $dsc "$val" + incoming_dsc=$tmp/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" + t-ref-same-val $incoming_dsc "$val" } t-apply-diff () { @@ -650,7 +764,7 @@ t-gbp-example-prep () { t-commit () { local msg=$1 - v=${2:-1.$revision} + v=${2:-${majorv:-1}.$revision} dch -v$v --distribution ${3:-unstable} "$1" git add debian/changelog debcommit