chiark / gitweb /
Test suite: Provide t-sametree-parent
[dgit.git] / tests / lib
index 5f41369e9f279570eb1ee076592aad2f08002dd5..36237a7485ed008f136ff4afd1c03dd2f3f3a6e5 100644 (file)
--- a/tests/lib
+++ b/tests/lib
@@ -36,6 +36,7 @@ testname="${DGIT_TEST_TESTNAME-${0##*/}}"
 tmp=$ADTTMP
 if [ x"$tmp" = x ]; then
        mkdir -p tests/tmp
+       tmpbase=$troot/tmp
        tmp=tests/tmp/$testname
        rm -rf $tmp
        mkdir $tmp
@@ -46,6 +47,8 @@ tmp=`pwd`
 
 t-set-using-tmp
 
+env -0 >$tmp/.save-env
+
 ln -f $troot/ssh ssh
 
 mkdir -p $tmp/gnupg
@@ -332,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 "$@"
        : '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
 '
 }
@@ -371,6 +374,64 @@ t-clean-on-branch () {
        t-output "## $1" git status -b --porcelain
 }
 
+t-setup-done () {
+       local savevars=$1
+       local savedirs=$2
+       local importeval=$3
+
+       exec 4>$tmp/IMPORT.new
+
+       local vn
+       for vn in $savevars; do
+               perl >&4 -I. -MDebian::Dgit -e '
+                       printf "%s=%s\n", $ARGV[0], shellquote $ARGV[1]
+               ' $vn "$(eval "printf '%s\n' \"\$$vn\"")"
+       done
+
+       (set -e; cd $tmp; tar cf IMPORT.tar $savedirs)
+
+       printf >&4 "\n%s\n" "$importeval"
+
+       mv -f $tmp/IMPORT.new $tmp/IMPORT
+}
+
+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 "$lock" \
+               xargs -0 -a $tmp/.save-env \
+               bash -xec '
+                       cd "$1"; shift
+                       setupname="$1"; shift
+                       simport="$1"; shift
+                       if [ -e "$simport" ]; then exit 0; fi
+                       env - "$@" \
+                       "tests/setup/$setupname"
+               ' x "$root" "$setupname" "$simport"
+       fi
+
+       if [ "x$setupsrc" != "x$tmp" ]; then
+               (set -e; cd $tmp; tar xf "$simport.tar")
+       fi
+
+       . "$simport"
+}
+
 t-git-get-ref-exact () {
        local ref=$1
        # does not dereference, unlike t-git-get-ref
@@ -447,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
@@ -458,17 +541,18 @@ t-check-pushed-master () {
 
 t-pushed-good () {
        local branch=$1
+       local suite=${2:-sid}
        t-ref-dsc-dgit
        t-refs-same \
                refs/heads/$branch \
                `t-v-tag` \
-               refs/remotes/dgit/dgit/sid
+               refs/remotes/dgit/dgit/$suite
        t-refs-notexist \
                refs/heads/dgit/unstable \
                refs/remotes/dgit/dgit/unstable
        (set -e; cd $dgitrepo
         t-refs-same \
-               refs/dgit/sid \
+               refs/dgit/$suite \
                `t-v-tag`
         ${t_check_pushed_master:- : NOT-DRS-NO-CHECK-PUSHED-MASTER}
         t-refs-notexist \
@@ -592,8 +676,8 @@ t-gbp-example-prep () {
 
 t-commit () {
        local msg=$1
-       v=${2-1.$revision}
-       dch -v$v --distribution unstable "$1"
+       v=${2:-${majorv:-1}.$revision}
+       dch -v$v --distribution ${3:-unstable} "$1"
        git add debian/changelog
        debcommit
        revision=$(( ${revision-0} + 1 ))