X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=tests%2Flib;h=23daeace743e6e06e0fa36c5e81bdee43670eaa1;hp=ddef5f021a37e9d4dbb7a16f87b9374b44806ad5;hb=00be23b629b1a1dd04cfa1c9d10a778d30d904b6;hpb=6ce82b29dc651abd46de2cc36c07f41f02c159ed diff --git a/tests/lib b/tests/lib index ddef5f02..23daeace 100644 --- 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 @@ -65,7 +65,7 @@ incoming = $tmp/incoming run_dinstall = 0 END -: ${tagpfx:=test-dummy} +: ${tagpfx:=archive/test-dummy} : ${suitespecs:=sid:unstable} t-git-next-date () { @@ -188,6 +188,8 @@ t-git-merge-base () { } t-has-ancestor () { + # t-has-ancestor ANCESTOR + # (CHILD is implicit, HEAD) local now=`git rev-parse HEAD` local ancestor=`git rev-parse $1^{}` local mbase=`t-git-merge-base $ancestor $now` @@ -196,6 +198,18 @@ t-has-ancestor () { fi } +t-has-parent-or-is () { + # t-has-parent-or-is CHILD PARENT + local child=$1 + local parent=$2 + local parents=$(git show --pretty=format:' %P %H ' "$child") + parent=$(git rev-parse "$parent~0") + case "$parents" in + *" $parent "*) ;; + *) fail "child $child lacks parent $parent" ;; + esac +} + t-prep-newpackage () { t-select-package $1 v=$2 @@ -228,7 +242,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 <>$tmp/aq/suites $jsondelim @@ -278,7 +292,7 @@ t-archive-updated () { t-archive-process-incoming () { local suite=$1 - mv $tmp/incoming/${p}_${v}[._]* $tmp/mirror/pool/main/ + mv $tmp/incoming/${p}_* $tmp/mirror/pool/main/ t-archive-query "$suite" } @@ -379,7 +393,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 +403,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 +425,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" \ @@ -474,17 +489,19 @@ t-ref-head () { t-ref-same-val () { local name="$1" local val=$2 - case "$t_ref_val" in - '') ;; + case "${t_ref_val-unset}" in + unset) ;; "$val") ;; - *) fail "ref varies: $name:\ - ${val:-nothing} != ${t_ref_val:-nothing}" ;; + *) fail "ref varies: ($name)\ + ${val:-nothing} != ${t_ref_val:-nothing} (${t_ref_names[*]})" ;; esac t_ref_val="$val" + t_ref_names+=("$name") } t-refs-same-start () { - t_ref_val='' + unset t_ref_val + t_ref_names=() } t-refs-same () { @@ -566,12 +583,13 @@ 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 cd t-unpack ln -s $tmp/mirror/pool/main/*.orig*.tar* . + ln -s $tmp/incoming/*.orig*.tar* . ||: ln -s $incoming_dsc . ln -s ${incoming_dsc/.dsc/.debian.tar}* . dpkg-source "$@" -x *.dsc @@ -580,21 +598,20 @@ 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 @@ -602,12 +619,38 @@ t-gbp-pushed-good () { git merge-base --is-ancestor $dep14tag $dgittag t-refs-same-start + t-ref-same refs/heads/split.p + case "$(t-git-get-ref refs/heads/split.b)" in + "$t_ref_val") ;; + "$(git rev-parse refs/heads/split.p^0)") ;; + "$(git rev-parse refs/heads/split.p^1)") ;; + *) fail 'bad b/p' ;; + esac t-pushed-good-core 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 @@ -615,20 +658,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#; @@ -640,9 +677,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 () { @@ -672,11 +721,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' ' } @@ -738,7 +789,19 @@ 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 @@ -748,7 +811,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 @@ -758,8 +821,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 } @@ -782,7 +849,7 @@ t-drs () { t-git-config dgit-distro.test-dummy.git-url "ext::$troot/drs-git-ext %S " t-git-config dgit-distro.test-dummy.git-check true t-git-config dgit-distro.test-dummy.git-create true - t-git-config dgit-distro.test-dummy.dgit-tag-format old,new + t-git-config dgit-distro.test-dummy.dgit-tag-format new,old,maint cp $troot/gnupg/{dd.gpg,dm.gpg,dm.txt} $tmp/. cp $troot/suites $tmp/. cp $troot/suites $tmp/suites-master @@ -806,9 +873,10 @@ 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 () { + export tagpfx=test-dummy t-git-config dgit-distro.test-dummy.dgit-tag-format old } @@ -880,6 +948,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" } @@ -889,3 +958,8 @@ t-alt-test () { t-${t%%-*} t-chain-test "${t#*-}" } + +case "$0" in +*/gnupg) ;; +*) t-setup-import gnupg ;; +esac