chiark / gitweb /
Test suite: Introduce setup/gnupg
[dgit.git] / tests / lib
index bf3237dc549e33a78d692f63b2b57ff9b7a494fd..39763c6169430058237f1b3d5752b072866798f6 100644 (file)
--- a/tests/lib
+++ b/tests/lib
@@ -21,6 +21,8 @@ END
 
 trap 'test $? = 0 || t-report-failure' EXIT
 
+t-filter-out-git-hyphen-dir
+
 t-set-intree
 
 : ${DGIT_TEST_DEBUG=-D}
@@ -40,6 +42,8 @@ if [ x"$tmp" = x ]; then
        tmp=tests/tmp/$testname
        rm -rf $tmp
        mkdir $tmp
+elif [ "x$DGIT_TEST_TMPBASE" != x ]; then
+       tmpbase="$DGIT_TEST_TMPBASE"
 fi
 cd $tmp
 
@@ -51,10 +55,6 @@ env -0 >$tmp/.save-env
 
 ln -f $troot/ssh ssh
 
-mkdir -p $tmp/gnupg
-cp $troot/gnupg/* $tmp/gnupg
-chmod go-rw $tmp/gnupg/*
-
 export DEBCHANGE_VENDOR=dpkg
 
 mkdir -p $tmp/incoming
@@ -228,7 +228,7 @@ t-archive-none () {
                >$tmp/aq/package.new.$p
                t-archive-updated new $p
 
-               ln -s $suite $tmp/aq/dsc_in_suite/$sname
+               ln -sf $suite $tmp/aq/dsc_in_suite/$sname
 
                cat <<END >>$tmp/aq/suites
 $jsondelim
@@ -379,7 +379,8 @@ t-setup-done () {
        local savedirs=$2
        local importeval=$3
 
-       exec 4>$tmp/IMPORT.new
+       local import=IMPORT.${0##*/}
+       exec 4>$tmp/$import.new
 
        local vn
        for vn in $savevars; do
@@ -388,11 +389,11 @@ t-setup-done () {
                ' $vn "$(eval "printf '%s\n' \"\$$vn\"")"
        done
 
-       (set -e; cd $tmp; tar cf IMPORT.tar $savedirs)
+       (set -e; cd $tmp; tar cf $import.tar $savedirs)
 
        printf >&4 "\n%s\n" "$importeval"
 
-       mv -f $tmp/IMPORT.new $tmp/IMPORT
+       mv -f $tmp/$import.new $tmp/$import
 }
 
 t-setup-import () {
@@ -410,7 +411,7 @@ t-setup-import () {
                lock="$setupsrc.lock"
        fi
 
-       local simport="$setupsrc/IMPORT"
+       local simport="$setupsrc/IMPORT.$setupname"
 
        if ! [ -e "$simport" ]; then
                with-lock-ex -w "$lock" \
@@ -566,7 +567,7 @@ t-pushed-good-core () {
        git verify-tag `t-v-tag`
 }
 
-t-gbp-pushed-good--unpack () {
+t-splitbrain-pushed-good--unpack () {
        cd $tmp
        rm -rf t-unpack
        mkdir t-unpack
@@ -580,24 +581,24 @@ t-gbp-pushed-good--unpack () {
        git fetch ../../$p "refs/tags/*:refs/tags/*"
 }
 
-t-gbp-pushed-good--checkprep () {
+t-splitbrain-pushed-good--checkprep () {
        git add -Af .
        git rm --cached -r --ignore-unmatch .pc
 }
 
-t-gbp-pushed-good--checkdiff () {
+t-splitbrain-pushed-good--checkdiff () {
        local tag=$1
-       t-gbp-pushed-good--checkprep
+       t-splitbrain-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-splitbrain-pushed-good-start () {
+       dep14tag=refs/tags/test-dummy/${v//\~/_}
+       dgittag=$(t-v-tag)
        t-output "" git status --porcelain
        t-ref-head
        t-refs-same $dep14tag
+       (set -e; cd $dgitrepo; t-refs-same $dep14tag)
        git merge-base --is-ancestor $dep14tag $dgittag
 
        t-refs-same-start
@@ -605,8 +606,27 @@ t-gbp-pushed-good () {
 
        t-incoming-dsc
 
-       t-gbp-pushed-good--unpack
-       t-gbp-pushed-good--checkdiff $dgittag
+       t-splitbrain-pushed-good--unpack
+       t-splitbrain-pushed-good--checkdiff $dgittag
+}
+t-splitbrain-pushed-good-end-made-dep14 () {
+       t-splitbrain-pushed-good--checkdiff $dep14tag
+       cd $tmp/$p
+}
+
+t-splitbrain-rm-gitignore-patch () {
+       perl -i -pe '
+               next unless $_ eq "auto-gitignore\n";
+               die if $counter++;
+               chomp;
+               rename "debian/patches/$_", "../t-auto-gitignore" or die $!;
+               $_ = "";
+       ' debian/patches/series
+}
+
+t-gbp-pushed-good () {
+       local suite=${1:-sid}
+       t-splitbrain-pushed-good-start
 
        # Right, now we want to check that the maintainer tree and
        # the dgit tree differ in exactly the ways we expect.  We
@@ -614,20 +634,14 @@ t-gbp-pushed-good () {
        # from the dgit tree.
 
        # So, unpack it withut the patches applied
-       t-gbp-pushed-good--unpack --skip-patches
+       t-splitbrain-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
+       t-splitbrain-rm-gitignore-patch
 
        # Now the result should differ only in non-debian/ .gitignores
-       t-gbp-pushed-good--checkprep
+       t-splitbrain-pushed-good--checkprep
        git diff --cached --name-only $dep14tag >../changed
        perl -ne '
                next if !m#^debian/# && m#(^|/)\.gitignore#;
@@ -639,9 +653,21 @@ t-gbp-pushed-good () {
        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-splitbrain-pushed-good-end-made-dep14
+}
+
+t-unapplied-pushed-good () {
+       t-splitbrain-pushed-good-start
+       t-splitbrain-pushed-good--unpack --skip-patches
+       t-splitbrain-pushed-good-end-made-dep14
+}
+
+t-dpm-pushed-good () {
+       t-splitbrain-pushed-good-start
+       t-splitbrain-pushed-good--unpack
+       t-splitbrain-rm-gitignore-patch
+       t-splitbrain-pushed-good-end-made-dep14
 }
 
 t-commit-build-push-expect-log () {
@@ -671,11 +697,13 @@ t-stunt-envvar () {
        local var=$1
        local tstunt=$2
        eval '
-               case "'$var'" in
+               case "$'$var'" in
                "$tstunt:"*)    ;;
                *":$tstunt:"*)  ;;
+               "")             '$var'="$tstunt" ;;
                *)              '$var'="$tstunt:$'$var'" ;;
                esac
+               export '$var'
        '
 }
 
@@ -737,7 +765,20 @@ t-gbp-unapplied-pq2qc () {
        git commit -m 'Commit patch queue'
 }
 
-t-gbp-example-prep () {
+t-git-pseudo-merge () {
+       # like   git merge -s ours
+       if [ ! "$git_pseuomerge_opts" ]; then
+               if git merge --help \
+                | grep -q allow-unrelated-histories; then
+                       git_pseuomerge_opts='--allow-unrelated-histories'
+               fi
+               git_pseuomerge_opts+=' -s ours'
+       fi
+       git merge $git_pseuomerge_opts "$@"
+}
+
+t-gbp-example-prep-no-ff () {
+       t-tstunt-parsechangelog
        t-archive example 1.0-1
        t-git-none
        t-worktree 1.0
@@ -746,7 +787,7 @@ t-gbp-example-prep () {
 
        t-dgit fetch
 
-       git-checkout -b patch-queue/quilt-tip-2 patch-queue/quilt-tip
+       git checkout -b patch-queue/quilt-tip-2 patch-queue/quilt-tip
        gbp pq rebase
 
        echo '/* some comment */' >>src.c
@@ -756,8 +797,12 @@ t-gbp-example-prep () {
        t-gbp-unapplied-pq2qc
 
        t-commit 'some updates' 1.0-2
+}
 
-       git merge -s ours \
+t-gbp-example-prep () {
+       t-gbp-example-prep-no-ff
+
+       t-git-pseudo-merge \
                -m 'Pseudo-merge to make descendant of archive' \
                remotes/dgit/dgit/sid
 }
@@ -804,7 +849,7 @@ t-drs () {
 
 t-newtag () {
  export tagpfx=archive/test-dummy
- t-git-config dgit-distro.test-dummy.dgit-tag-format new
+ t-git-config dgit-distro.test-dummy.dgit-tag-format new,maint
 }
 t-oldtag () {
  t-git-config dgit-distro.test-dummy.dgit-tag-format old
@@ -878,6 +923,7 @@ t-chain-test () {
        local d=${0%/*}
        cd $root
        export DGIT_TEST_TESTNAME="$testname"
+       export DGIT_TEST_TMPBASE="$tmpbase"
        export ADTTMP=$tmp
        exec "$d/$ct"
 }      
@@ -887,3 +933,8 @@ t-alt-test () {
        t-${t%%-*}
        t-chain-test "${t#*-}"
 }
+
+case "$0" in
+*/gnupg) ;;
+*)     t-setup-import gnupg    ;;
+esac