diff options
Diffstat (limited to 'tests')
29 files changed, 687 insertions, 106 deletions
diff --git a/tests/Makefile b/tests/Makefile index 88bc0a0..31eb7b6 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -11,11 +11,11 @@ all: $(foreach t,$(TESTNAMES),tests/tmp/$t.ok) tests/tmp/%.ok: tests/tests/% ifeq ($(DGIT_TEST_RETRY_COUNT),) - tests/tests/$* >tests/tmp/$*.log 2>&1 + $(DGIT_TEST_RUN_PFX) tests/tests/$* >tests/tmp/$*.log 2>&1 else @for retry in $$( seq 1 $(DGIT_TEST_RETRY_COUNT) ); do \ echo "[$$retry] $*"; \ - tests/tests/$* >tests/tmp/$*.$$retry.log 2>&1; \ + $(DGIT_TEST_RUN_PFX) tests/tests/$* >tests/tmp/$*.$$retry.log 2>&1; \ rc=$$?; \ if [ $$rc = 0 ]; then exit 0; fi; \ echo >&2 "[$$retry] $* TEST FAILED $$rc"; \ diff --git a/tests/enumerate-tests b/tests/enumerate-tests index 0f37c96..429d46d 100755 --- a/tests/enumerate-tests +++ b/tests/enumerate-tests @@ -42,7 +42,7 @@ finish- () { test-begin-gencontrol () { restrictions='' - dependencies='dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc' + dependencies='dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime' } restriction-gencontrol () { @@ -58,10 +58,10 @@ gencontrol-add-deps () { dependencies-gencontrol () { for dep in "$deps"; do case "$dep" in - NO-DGIT) dependencies='chiark-utils-bin' ;; + NO-DGIT) dependencies='chiark-utils-bin, faketime' ;; NO-DEFAULT) dependencies='' ;; GDR) gencontrol-add-deps \ - git-debrebase git-buildpackage faketime + git-debrebase git-buildpackage ;; *) gencontrol-add-deps "$dep" ;; esac @@ -33,8 +33,8 @@ export DGIT_TEST_DEBUG : ${DGIT_TEST_DISTRO+ ${distro=${DGIT_TEST_DISTRO}}} -export GIT_COMMITTER_DATE='1515000000 +0100' -export GIT_AUTHOR_DATE='1515000000 +0100' +export GIT_COMMITTER_DATE='1530000000 +0100' +export GIT_AUTHOR_DATE='1530000000 +0100' root=`pwd` troot=$root/tests @@ -62,10 +62,11 @@ t-set-using-tmp test -f $tmp/.save-env || \ env -0 >$tmp/.save-env -ln -f $troot/ssh ssh +ln -sf $troot/ssh ssh export DEBCHANGE_VENDOR=dpkg unset VISUAL +unset GIT_EDITOR mkdir -p $tmp/incoming cat <<END >$tmp/dput.cf @@ -341,7 +342,7 @@ t-archive () { v=$2 local dscf=${p}_$2.dsc rm -f $tmp/mirror/pool/main/${p}_* - ln $troot/pkg-srcs/${p}_${2%-*}* $tmp/mirror/pool/main/ + ln -s $troot/pkg-srcs/${p}_${2%-*}* $tmp/mirror/pool/main/ t-archive-query $suite rm -rf $tmp/extract mkdir $tmp/extract @@ -403,6 +404,13 @@ t-git-fsck () { esac } +t-check-only-bpd () { + if [ "$bpd" = .. ]; then return; fi + t-files-notexist \ + ../*.{deb,changes,dsc,buildinfo} \ + ../*.{tar,diff}.* +} + t-fscks () { ( shopt -s nullglob @@ -415,6 +423,7 @@ t-fscks () { t-ok () { : '========================================' + t-check-only-bpd t-fscks t-save-artifacts echo ok. @@ -1025,10 +1034,32 @@ t-make-badcommit () { t-expect-fsck-fail $badcommit } +t-make-orig () { + # leaves ust set to filename of orig tarball + local p=$1 + local v=$2 + local tag=${3-v$2} + ust=${p}_${v}.orig.tar.gz + GZIP=-1 git archive -o $bpd/$ust --prefix=${p}-${v}/ $tag +} + +t-merge-conflicted-stripping-conflict-markers () { + local otherbranch=$1 + local file=$2 + + t-expect-fail F:"Merge conflict in $file" \ + git merge $otherbranch + + perl -i~ -ne 'print unless m{^(?:\<\<\<|\>\>\>|===)}' "$file" + git add "$file" + git commit --no-edit +} + t-commit () { local msg=$1 v=${2:-${majorv:-1}.$revision} - dch --force-distribution -v$v --distribution ${3:-unstable} "$1" + $troot/tstunt/debchange \ + --force-distribution -v$v --distribution ${3:-unstable} "$1" git add debian/changelog debcommit revision=$(( ${revision-0} + 1 )) @@ -1045,7 +1076,7 @@ t-dch-commit-r () { } t-dch-commit () { - faketime @"${GIT_AUTHOR_DATE% *}" dch "$@" + $troot/tstunt/debchange "$@" git commit -m "dch $*" debian/changelog } diff --git a/tests/lib-build-modes b/tests/lib-build-modes index 3bb1bf3..dbceb42 100644 --- a/tests/lib-build-modes +++ b/tests/lib-build-modes @@ -14,6 +14,7 @@ END bm-prep () { t-tstunt-parsechangelog + t-tstunt dpkg-deb t-prep-newpackage example 1.0 @@ -250,3 +251,7 @@ bm-act-iterate () { done : bm-act-iterate done. } + +bm-buildproductsdir-nonworking () { + t-git-config dgit.default.build-products-dir ../bpd-dummy +} diff --git a/tests/lib-core b/tests/lib-core index 724c8ac..4550b9e 100644 --- a/tests/lib-core +++ b/tests/lib-core @@ -25,8 +25,9 @@ t-set-using-tmp () { export DGIT_TEST_DUMMY_DIR=$tmp export DGIT_TEST_TMP=$tmp export GNUPGHOME=$tmp/nonexistent + export DEBFULLNAME='dgit test git user' git config --global user.email 'dgit-test@debian.example.net' - git config --global user.name 'dgit test git user' + git config --global user.name "$DEBFULLNAME" git config --global protocol.ext.allow always } diff --git a/tests/lib-gdr b/tests/lib-gdr index 479ef41..cda11df 100644 --- a/tests/lib-gdr +++ b/tests/lib-gdr @@ -3,6 +3,8 @@ : ${GDR_TEST_DEBUG=-D} export GDR_TEST_DEBUG +t-tstunt debchange + t-git-debrebase () { local gdr=${DGIT_GITDEBREBASE_TEST-git-debrebase} : ' @@ -21,22 +23,35 @@ t-gdr-good () { # stitched # pushed - git diff --quiet ${beforetag-t.before} -- ':.' ':!debian/patches' + case $state in + pushed*) + t-gdr-made-patches + ;; + esac - local etypes bwtip + git diff --quiet ${beforetag-t.before} -- ':.' ':!debian/patches' LC_MESSAGES=C t-git-debrebase status >../status.check case $state in - laundered) + laundered*) egrep '^ *branch is laundered' ../status.check ;; - stitched|pushed) + stitched*|pushed*) egrep \ '^ *branch contains furniture|^ *branch is unlaundered|^ *branch needs laundering' ../status.check egrep '^ stitched$' ../status.check ;; esac + t-gdr-good-analyse HEAD $state +} + +t-gdr-good-analyse () { + local head=$1 + local state=$2 + local wsfx=$3 + local etypes bwtip + # etypes is either a type, # or PseudoMerge-<more etypes> # or AddPatches-<more etypes> @@ -49,11 +64,14 @@ t-gdr-good () { stitched) etypes=Pseudomerge-Upstream ;; pushed) etypes=AddPatches-Pseudomerge-Upstream ;; pushed-interop) etypes=Pseudomerge-AddPatchesInterop-Upstream ;; + breakwater) etypes=Packaging ;; + *) fail-unknown-state-$state ;; esac - t-git-debrebase analyse >../anal.check - expect=`git rev-parse HEAD` - exec <../anal.check + anal=../anal$wsfx + t-git-debrebase analyse $head >$anal.check + expect=`git rev-parse $head` + exec <$anal.check local cid ctype info nparents while read cid ctype info; do : ===== $cid $ctype $info ===== @@ -69,6 +87,8 @@ t-gdr-good () { Pseudomerge/SAME) ;; Packaging/SAME) ;; Packaging/Upstream) ;; + MergedBreakwaters/Packaging) ;; + MergedBreakwaters/Upstream) ;; AddPatches/SAME) ;; AddPatches/AddPatchesInterop) ;; Changelog/Packaging) ;; @@ -108,9 +128,9 @@ t-gdr-good () { : 'reject pointless pseudomerges' local overwritten=${parents/$expect/} overwritten=${overwritten// /} - t-git-debrebase analyse $overwritten >../anal.overwr + t-git-debrebase analyse $overwritten >$anal.overwr local ocid otype oinfo - read <../anal.overwr ocid otype oinfo + read <$anal.overwr ocid otype oinfo case "$otype" in Pseudomerge) test "x$info" != "x$oinfo" ;; esac @@ -133,6 +153,9 @@ t-gdr-good () { Upstream/SAME) git diff --quiet $expect..$cid -- ':debian' ;; + MergedBreakwaters) + enparents=2 + ;; Anchor) break ;; @@ -151,37 +174,52 @@ t-gdr-good () { *) fail 'unexpected parent' ;; esac + case "$ctype" in + MergedBreakwaters) + local f + local parent_ix=0 + for f in $parents; do + t-gdr-good-analyse $f breakwater \ + $wsfx-mp$parent_ix + parent_ix=$(( $parent_ix + 1 )) + done + return + ;; + esac + done } t-some-changes () { local token=$1 - local which=${2-dum} + local which=${2:-dum} + local fsuffix=$3 t-git-next-date case "$which" in *d*) - echo >>debian/zorkmid "// debian $token" - git add debian/zorkmid - git commit -m "DEBIAN add zorkmid ($token)" + echo >>debian/zorkmid$fsuffix "// debian $token" + git add debian/zorkmid$fsuffix + git commit -m "DEBIAN add zorkmid$fsuffix ($token)" ;; esac case "$which" in *u*) - echo >>src.c "// upstream $token" - git commit -a -m "UPSTREAM edit src.c ($token)" + echo >>src$fsuffix.c "// upstream $token" + git add src$fsuffix.c + git commit -m "UPSTREAM edit src$fsuffix.c ($token)" ;; esac case "$which" in *m*) - for f in debian/zorkmid src.c; do + for f in debian/zorkmid$fsuffix src$fsuffix.c; do echo "// both! $token" >>$f git add $f done - git commit -m "MIXED add both ($token)" + git commit -m "MIXED add both($fsuffix) ($token)" ;; esac @@ -191,11 +229,9 @@ t-some-changes () { t-make-new-upstream-tarball () { local uv=$1 git checkout make-upstream - # leaves ust set to filename of orig tarball echo "upstream $uv" >>docs/README git commit -a -m "upstream $uv tarball" - ust=example_$uv.orig.tar.gz - git archive -o ../$ust --prefix=example-2.0/ make-upstream + t-make-orig example $uv make-upstream } t-nmu-upload-1 () { @@ -289,3 +325,53 @@ t-nmu-reconciled-good () { git checkout master t-dgit -wgf quilt-fixup } + +t-gdr-prep-new-upstream () { + uv=$1 + t-git-next-date + git checkout make-upstream + git reset --hard upstream + t-make-new-upstream-tarball $uv + git push . make-upstream:upstream + git checkout master + t-git-next-date +} + +t-gdr-gbp-import-core () { + p=example + t-worktree 1.1 + + cd example + + : 'fake up some kind of upstream' + git checkout -b upstream quilt-tip + rm -rf debian + mkdir debian + echo junk >debian/rules + git add debian + git commit -m "an upstream retcon ($0)" + git tag v1.0 +} + +t-gdr-gbp-import-core-with-queue () { + t-gdr-gbp-import-core + + : 'fake up that our quilt-tip was descended from upstream' + git checkout quilt-tip + git merge --no-edit -s ours upstream + + : 'fake up that our quilt-tip had the patch queue in it' + git checkout patch-queue/quilt-tip + gbp pq export + git add debian/patches + git commit -m "patch queue update ($0)" + + : 'make branch names more conventional' + git branch -D master + git branch -m quilt-tip master +} + +t-gdr-made-patches () { + git log -n1 --'pretty=format:%B' \ + | egrep '^\[git-debrebase' +} diff --git a/tests/run-all b/tests/run-all index c930171..736e0fe 100755 --- a/tests/run-all +++ b/tests/run-all @@ -2,6 +2,9 @@ set -e # convenience script for running the tests outside adt-run # usage: tests/using-intree tests/run-all [-p|--progressive] [tests/tests/*] +# +# passing `:' as if it were tests/tests/something is +# a no-op and therefore just means to (delete and) set up the tmpdir set -o pipefail @@ -17,13 +20,36 @@ done ncpus=$(nproc || echo 1) jcpus=-j$(( ncpus * 134 / 100 )) -if [ $# != 0 ]; then - set TESTSCRIPTS="$*" +if [ "x$DGIT_TESTS_TMPDIR" != x ]; then + tmpdir="$PWD" + tmpdir="${tmpdir#/}" + tmpdir="${tmpdir//!/!#!}" + tmpdir="${tmpdir//\//!}" + tmpdir="$DGIT_TESTS_TMPDIR/$tmpdir" + rm -f tests/tmp + ln -ns -- "$tmpdir" tests/tmp +else + tmpdir=tests/tmp fi -mkdir -p tests/tmp +case "$DGIT_TESTS_PROGRESSIVE" in +''|n) + rm -rf -- "$tmpdir" + ;; +esac + +mkdir -p -- "$tmpdir" + +case "$1" in +:) + shift + if [ $# = 0 ]; then exit 0; fi + ;; +esac -${DGIT_TESTS_PROGRESSIVE+:} rm -f tests/tmp/*.ok +if [ $# != 0 ]; then + set TESTSCRIPTS="$*" +fi export DGIT_GNUPG_STUNT_ERRLOG=$( tty -s ||: ) diff --git a/tests/setup/gdr-convert-gbp b/tests/setup/gdr-convert-gbp index a3baf2d..93ed4b6 100755 --- a/tests/setup/gdr-convert-gbp +++ b/tests/setup/gdr-convert-gbp @@ -15,28 +15,7 @@ not-gdr-processable () { t-git-debrebase analyse | grep 'Unknown Unprocessable' } -p=example -t-worktree 1.1 - -cd example - -: 'fake up some kind of upstream' -git checkout -b upstream quilt-tip -rm -rf debian -mkdir debian -echo junk >debian/rules -git add debian -git commit -m "an upstream retcon ($0)" - -: 'fake up that our quilt-tip was descended from upstream' -git checkout quilt-tip -git merge --no-edit -s ours upstream - -: 'fake up that our quilt-tip had the patch queue in it' -git checkout patch-queue/quilt-tip -gbp pq export -git add debian/patches -git commit -m "patch queue update ($0)" +t-gdr-gbp-import-core-with-queue not-gdr-processable origin @@ -44,10 +23,6 @@ not-gdr-processable origin git branch make-upstream upstream t-make-new-upstream-tarball 2.0 -: 'make branch names more conventional' -git branch -D master -git branch -m quilt-tip master - for b in \ quilt-tip-2 \ gitish-only \ @@ -67,6 +42,10 @@ not-gdr-processable merge t-dch-commit -v 2.0-1 -m 'new upstream (did gbp import-orig)' t-dch-commit-r +echo garbage >debian/patches/garbage +git add debian/patches/garbage +git commit -m 'add garbage' debian/patches/garbage + $ifarchive t-archive-none $p $ifarchive t-git-none $ifarchive t-dgit -wgf --gbp push-source --new @@ -84,8 +63,13 @@ git push --set-upstream origin master t-expect-fail E:'identical in upstream files' \ t-git-debrebase -fupstream-has-debian convert-from-gbp upstream/2.0~ +t-expect-fail E:'Unused patch file garbage will be discarded' \ t-git-debrebase -fupstream-has-debian convert-from-gbp +t-git-debrebase -fupstream-has-debian -funused-patches convert-from-gbp + +git branch converted-from-gbp + v=2.0-2 t-dch-commit -v $v -m 'switch to git-debrebase, no other changes' t-dch-commit-r diff --git a/tests/tests/build-modes b/tests/tests/build-modes index c476ec8..58ec58d 100755 --- a/tests/tests/build-modes +++ b/tests/tests/build-modes @@ -3,6 +3,7 @@ set -e . tests/lib . $troot/lib-build-modes +bm-buildproductsdir-nonworking bm-prep for act in \ @@ -14,21 +15,10 @@ for act in \ 'build -F' \ 'build -g' \ 'build -G' \ - build-source \ ; do bm-guess-e-source-e-targets "$act" - - case $act in - build-source) - cleanmodes="$cleanmodes_all" - ;; - *) - cleanmodes="$cleanmodes_default" - ;; - esac - + cleanmodes="$cleanmodes_default" real_act="$act" - bm-act-iterate done diff --git a/tests/tests/build-modes-long b/tests/tests/build-modes-long new file mode 100755 index 0000000..20a2ce3 --- /dev/null +++ b/tests/tests/build-modes-long @@ -0,0 +1,36 @@ +#!/bin/bash +set -e +. tests/lib +. $troot/lib-build-modes + +bm-prep + +for build in \ + 'source' \ + 'any' \ + 'all' \ + 'binary' \ + 'full' \ + 'source,any' \ + 'all,any' \ +; do + act="build --build=$build" + + case "$build" in + *source*|*full*) e_source=true ;; + *) e_source=false ;; + esac + + case "$build" in + *binary*|*any*all*|*all*any*) + e_targets='build binary' ;; + *any*) e_targets='build-arch binary-arch' ;; + *all*) e_targets='build-indep binary-indep' ;; + esac + + cleanmodes="$cleanmodes_default" + real_act="$act" + bm-act-iterate +done + +t-ok diff --git a/tests/tests/build-modes-source b/tests/tests/build-modes-source new file mode 100755 index 0000000..480e573 --- /dev/null +++ b/tests/tests/build-modes-source @@ -0,0 +1,17 @@ +#!/bin/bash +set -e +. tests/lib +. $troot/lib-build-modes + +bm-prep + +for act in \ + build-source \ +; do + bm-guess-e-source-e-targets "$act" + cleanmodes="$cleanmodes_all" + real_act="$act" + bm-act-iterate +done + +t-ok diff --git a/tests/tests/gdr-diverge-nmu-dgit b/tests/tests/gdr-diverge-nmu-dgit index 1d136a9..007c35b 100755 --- a/tests/tests/gdr-diverge-nmu-dgit +++ b/tests/tests/gdr-diverge-nmu-dgit @@ -42,7 +42,7 @@ t-nmu-causes-ff-fail git checkout dgit/dgit/sid # detach -t-expect-fail 'E:CONFLICT.*Commit Debian 3\.0 \(quilt\) metadata' \ +t-expect-fail 'E:CONFLICT.*Commit patch queue' \ git rebase master git rebase --skip diff --git a/tests/tests/gdr-edits b/tests/tests/gdr-edits index 124de29..0bdf15f 100755 --- a/tests/tests/gdr-edits +++ b/tests/tests/gdr-edits @@ -38,4 +38,11 @@ t-refs-same-start t-ref-same refs/heads/before-noop t-ref-head +git checkout -b some-new-branch +t-some-changes 2nd-maintainer +t-dgit quilt-fixup +t-gdr-made-patches +# NB quilt-fixup doesn't always manage to call gdr; +# push does, since it will make the pseudomerge first + t-ok diff --git a/tests/tests/gdr-fresh b/tests/tests/gdr-fresh new file mode 100755 index 0000000..169181c --- /dev/null +++ b/tests/tests/gdr-fresh @@ -0,0 +1,45 @@ +#!/bin/bash +set -e +autoimport= +. tests/lib +. $troot/lib-gdr + +t-dependencies GDR + +t-gdr-gbp-import-core + +t-git-next-date + +# leaves us on upstream +git rm debian/rules +git commit -m 'strip upstream rules' +git tag -f v1.0 + +git branch -m master master.old +git checkout -b master + +t-git-next-date + +git checkout quilt-tip debian +git commit -m 'initial debianisation' + +t-make-orig example 1.0 + +dgit-quilt-fixup-uses-gdr () { + t-git-next-date + + DGIT_TEST_DEBUG=-DD t-dgit quilt-fixup 2>&1 |tee ../fixup.out + grep '^branch_is_gdr .* YES$' ../fixup.out +} + +dgit-quilt-fixup-uses-gdr + +git checkout --detach patch-queue/quilt-tip +git rebase master +git push . HEAD:master +git checkout master + +dgit-quilt-fixup-uses-gdr +t-gdr-made-patches + +t-ok diff --git a/tests/tests/gdr-import-dgitview b/tests/tests/gdr-import-dgitview index 3670deb..18d06f5 100755 --- a/tests/tests/gdr-import-dgitview +++ b/tests/tests/gdr-import-dgitview @@ -38,7 +38,8 @@ t-ref-head t-git-debrebase --noop-ok convert-from-dgit-view t-ref-head -t-git-debrebase convert-from-dgit-view --always-convert-anyway +t-git-debrebase -falready-converted convert-from-dgit-view \ + --always-convert-anyway t-expect-fail E:'ref varies' t-ref-head t-gdr-good laundered diff --git a/tests/tests/gdr-import-nostitch b/tests/tests/gdr-import-nostitch new file mode 100755 index 0000000..c32b71e --- /dev/null +++ b/tests/tests/gdr-import-nostitch @@ -0,0 +1,30 @@ +#!/bin/bash +set -e +autoimport= +. tests/lib +. $troot/lib-gdr + +t-dependencies GDR + +t-tstunt-parsechangelog + +t-gdr-gbp-import-core-with-queue + +git checkout master + +git tag -m synthetic debian/1.0-1 + +echo '# comment' >>debian/patches/series +git add debian/patches/series +git commit -m 'add a comment' + +t-expect-fail F:-fseries-comments \ +t-git-debrebase -fupstream-has-debian -funused-patches convert-from-gbp + +t-git-debrebase -fupstream-has-debian -funused-patches -fseries-comments \ + convert-from-gbp \ + 2>&1 | tee ../convert-msg + +grep -e 'dgit --overwrite will be needed' ../convert-msg >/dev/null + +t-ok diff --git a/tests/tests/gdr-makepatches7 b/tests/tests/gdr-makepatches7 index 52462d4..d6a5143 100755 --- a/tests/tests/gdr-makepatches7 +++ b/tests/tests/gdr-makepatches7 @@ -13,7 +13,7 @@ git checkout upstream/2.0 echo '*patch*' >>.gitignore git commit -m nasty .gitignore git tag v2.1 -GZIP=-1 git archive -o ../${p}_2.1.orig.tar.gz --prefix ${p}/ v2.1 +t-make-orig $p 2.1 git checkout master t-git-debrebase new-upstream 2.1-1 diff --git a/tests/tests/gdr-merge b/tests/tests/gdr-merge new file mode 100755 index 0000000..78b79e9 --- /dev/null +++ b/tests/tests/gdr-merge @@ -0,0 +1,65 @@ +#!/bin/bash +set -e +autoimport= +. tests/lib + +t-dependencies GDR + +t-tstunt-parsechangelog +t-setup-import gdr-convert-gbp-noarchive + +cd $p + +t-gdr-prep-new-upstream 2.1 +git tag v2.1 upstream + +t-some-changes before +t-git-debrebase quick + +: ----- prepare LH branch ----- + +git checkout -b other +t-some-changes other '' -other + +echo 'other-conflict' >>debian/zorkmid +git commit -m 'other-conflict' debian/zorkmid + +: ----- prepare RH branch ----- + +git checkout master +t-some-changes us-1 '' -us +t-git-debrebase new-upstream 2.1 +t-some-changes us-2 '' -us +echo 'us-conflict' >>debian/zorkmid +git commit -m 'us-conflict' debian/zorkmid +t-git-debrebase quick + +: ----- introduce a vanilla merge ----- + +t-merge-conflicted-stripping-conflict-markers other debian/zorkmid + +t-expect-fail E:'general two-parent merge' \ +t-git-debrebase + +t_gdr_xopts+=' --experimental-merge-resolution' + +: ----- expect to be able to merge ----- + +t-git-debrebase +t-gdr-good laundered + +t-refs-same-start +t-ref-head +t-git-debrebase +t-ref-head + +t-git-debrebase scrap + +t-some-changes after +t-git-debrebase +t-gdr-good laundered + +t-dgit quilt-fixup +t-gdr-made-patches + +t-ok diff --git a/tests/tests/gdr-merge-conflicts b/tests/tests/gdr-merge-conflicts new file mode 100755 index 0000000..5a3f243 --- /dev/null +++ b/tests/tests/gdr-merge-conflicts @@ -0,0 +1,150 @@ +#!/bin/bash +set -e +autoimport= +. tests/lib + +t-dependencies NO-DGIT GDR quilt + +t-tstunt-parsechangelog +t-tstunt debchange +t-setup-import gdr-convert-gbp-noarchive + +t_gdr_xopts+=' --experimental-merge-resolution' + +wreckage-before () { + junkref=refs/debrebase/wreckage/junk + git update-ref $junkref v2.1 +} + +wreckage-after () { + test '' = "$(t-git-get-ref-exact $junkref)" + git for-each-ref refs/debrebase/wreckage | egrep . +} + +no-wreckage () { + if git for-each-ref refs/debrebase/wreckage | egrep .; then + fail wreckage + fi +} + +: ----- prepare the baseline ----- + +cd $p + +t-gdr-prep-new-upstream 2.1 +git tag v2.1 upstream + +t-some-changes before +t-git-debrebase quick + +: ===== early failure in walk ===== + +: ----- prepare other ----- + +git checkout -b other +t-some-changes other '' -other + +git branch other-before-new-upstream + +t-git-debrebase new-upstream 2.1 +t-git-next-date + +: ----- prepare master ----- + +git checkout master +t-git-debrebase new-upstream 2.1 +t-git-next-date + +git branch master-before-merge + +: ----- make the merge ----- + +git merge --no-edit -s ours other + +# we have to do a little dance to make this not a pseudomerge +t-git-next-date +dch -a 'Merge, only conflict was in debian/changelog' +t-dch-r-rune dch +git commit -a --amend --no-edit + +wreckage-before + +t-expect-fail F:'divergent anchors' \ +t-git-debrebase + +wreckage-after + +: ===== late failure in apply ===== + +git checkout other +git reset --hard other-before-new-upstream + +echo other-upstream-confict >>docs/README +git commit -m 'other-upstream-conflict' docs/README + +t-git-debrebase quick + +no-wreckage + +: ----- make the merge ----- + +git checkout master +git reset --hard master-before-merge + +t-merge-conflicted-stripping-conflict-markers other docs/README +t-git-debrebase stitch + +: ----- expect failure ----- + +wreckage-before + +t-expect-fail F:'docs/README' \ +t-git-debrebase + +wreckage-after + +: ===== resolve the conflict ===== + +# omg + +quilt_faff_before () { + git checkout -b fix$1 debrebase/wreckage/merged-patchqueue + QUILT_PATCHES=debian/patches quilt push -a +} +quilt_faff_after () { + QUILT_PATCHES=debian/patches quilt refresh + git add debian/patches + git commit -m FIX + git reset --hard + git clean -xdff + t-git-debrebase record-resolved-merge + git checkout master +} + +: ----- badly ----- + +quilt_faff_before 1 +quilt_faff_after + +t-expect-fail E:'upstream files are not the same' \ +t-git-debrebase + +t-git-debrebase scrap +no-wreckage + +: ----- well ----- + +t-expect-fail F:'docs/README' \ +t-git-debrebase +wreckage-after + +quilt_faff_before 2 +git checkout master docs/README +git reset docs/README +quilt_faff_after + +t-git-debrebase + +t-gdr-good laundered + +t-ok diff --git a/tests/tests/gdr-newupstream b/tests/tests/gdr-newupstream index ada5516..3039669 100755 --- a/tests/tests/gdr-newupstream +++ b/tests/tests/gdr-newupstream @@ -12,18 +12,7 @@ cd $p : 'upstream hat' -new-upstream () { - uv=$1 - t-git-next-date - git checkout make-upstream - git reset --hard upstream - t-make-new-upstream-tarball $uv - git push . make-upstream:upstream - git checkout master - t-git-next-date -} - -new-upstream 2.1 +t-gdr-prep-new-upstream 2.1 : 'maintainer hat' @@ -37,8 +26,35 @@ t-git-debrebase new-upstream $v git tag v2.1 upstream +git branch before-new-upstream + +clog-check-1 () { + before=$1 + date=$(git log --format=%aD -n1 debian/changelog) + date=$(date -R -d "$date") + git show $before:debian/changelog >../clog.before + m=" * Update to new upstream version ${v%-*}." + e="dgit test git user <dgit-test@debian.example.net> $date" +} +clog-check-2 () { + diff -u ../clog.expected debian/changelog +} + +: ----- ordinary new upstream test ----- + t-git-debrebase new-upstream ${v%-*} +clog-check-1 before-new-upstream +cat - <<END ../clog.before >../clog.expected +example ($v) UNRELEASED; urgency=medium + +$m + + -- $e + +END +clog-check-2 + t-gdr-good laundered git reflog | egrep 'debrebase new-upstream.*checkout' @@ -47,9 +63,9 @@ t-gdr-good stitched git branch ordinary -: 'with --anchor' +: ----- 'with --anchor' ----- -git reset --hard startpoint +git checkout -b with-anchor startpoint t-git-debrebase analyse >../anal.anch anchor=$(perl <../anal.anch -ne ' @@ -69,4 +85,25 @@ t-gdr-good stitched git diff --quiet ordinary +: ----- with pre-existing changes ----- + +git checkout -b with-preexisting before-new-upstream + +t-dch-commit drivel-in-changelog +git branch before-new-upstream-with-changes + +t-git-next-date + +t-git-debrebase new-upstream ${v%-*} + +clog-check-1 before-new-upstream-with-changes +perl -pe <../clog.before >../clog.expected ' + BEGIN { ($m,$e,@ARGV) = @ARGV; } + next unless 1..m/^ --/; + s/\([^()]+\)/('$v')/ if m/^example /; + $_ .= "$m\n" if m/^ \* drivel-in-changelog/; + $_ = " -- $e\n" if m/^ -- /; +' "$m" "$e" +clog-check-2 + t-ok diff --git a/tests/tests/gdr-subcommands b/tests/tests/gdr-subcommands index b4d8f44..672ddc9 100755 --- a/tests/tests/gdr-subcommands +++ b/tests/tests/gdr-subcommands @@ -25,6 +25,11 @@ mix-it () { t-git-next-date } +git checkout -b raw-converted-from-gbp converted-from-gbp +test "$(git diff --stat HEAD^2)" +git diff --exit-code --stat HEAD^1 +git reset --hard HEAD^1 + git checkout -b stitched-laundered master mix-it t-git-debrebase quick @@ -51,7 +56,8 @@ git show-ref subcmd () { local subcmd=$1 shift - for startbranch in {stitched,unstitched}-{laundered,mixed}; do + for startbranch in {stitched,unstitched}-{laundered,mixed} \ + raw-converted-from-gbp; do work="work-$subcmd-$startbranch" : "---------- $subcmd $startbranch ----------" @@ -127,7 +133,7 @@ make_check () { case "$1" in [Nn]*) t-refs-same-start - t-refs-same refs/heads/$before refs/heads/$work + t-refs-same refs/heads/$before refs/heads/$peel ;; U*) t-refs-same-start @@ -162,6 +168,7 @@ make_check () { P*) t-dgit -wgf --quilt=nofix quilt-fixup git diff HEAD~ debian/patches | egrep . + t-gdr-made-patches git diff --quiet HEAD~ -- ':.' ':!debian/patches' git reset --hard HEAD~ ;; @@ -169,6 +176,11 @@ make_check () { git diff --quiet HEAD refs/heads/$before -- ':.' ':!debian/patches' t-gdr-good laundered ;; + A*) + t-refs-notexist \ + refs/ffq-prev/heads/$work \ + refs/debrebase-last/heads/$work + ;; t*) git diff --quiet HEAD refs/heads/$before ;; @@ -177,7 +189,7 @@ make_check () { ;; Z*) t-refs-same-start - t-refs-same refs/heads/$work + t-refs-same refs/heads/$peel t-refs-same refs/heads/before-unstitch/$startbranch t-ref-head ;; @@ -191,20 +203,21 @@ Ec="F:No ongoing git-debrebase session" Ep="F:Patch export produced patch amendments" # input state: -# stitched? st'd st'd unst'd unst'd -# laundered? laund'd mixed laund'd mixed +# stitched? st'd st'd unst'd unst'd convert +# laundered? laund'd mixed laund'd mixed -from-gbp # # "mixed" means an out of order branch # containing mixed commits and patch additions, # but which needs even more patches # -subcmd '' Ult Ull Vlt Vl -subcmd stitch Ns Nu Sltf Stf -subcmd prepush Ns Nu Sltf Stf -subcmd quick ns Sl Sltf Sl -subcmd conclude "$Ec" "$Ec" Sltf Sl -subcmd scrap Ns Ns Z Z -subcmd make-patches sPft "$Ep" uPft "$Ep" +subcmd '' Ult Ull Vlt Vl nU +subcmd stitch Ns Nu Sltf Stf Ns +subcmd prepush ns nu Sltf Stf ns +subcmd quick ns Sl Sltf Sl n +subcmd conclude "$Ec" "$Ec" Sltf Sl N +subcmd scrap Ns Ns Z Z N +subcmd make-patches sPft "$Ep" uPft "$Ep" Pn +subcmd forget-was-ever-debrebase nA nA nA nA nA # # result codes, each one is a check: # E:$pat } this is an error (must come first) @@ -224,6 +237,7 @@ subcmd make-patches sPft "$Ep" uPft "$Ep" # s result is stitched, debrebase-last exists and is unchanged # S result is stitch just made, remaining letters apply to result~ # Z result is rewind to before changes made +# A no ffq-prev or debrebase-last refs ("Amnesia") # # P result is add-patches, remaining letters apply to result~ # diff --git a/tests/tests/gdr-unprocessable b/tests/tests/gdr-unprocessable index 14d1e8e..5e86522 100755 --- a/tests/tests/gdr-unprocessable +++ b/tests/tests/gdr-unprocessable @@ -14,7 +14,7 @@ t-dgit setup-mergechangelogs subcmd () { cmd=("$@") - branch merge 'complex merge' + branch merge 'general two-parent merge' branch origin 'origin commit' } diff --git a/tests/tests/gdr-unprocessable-hints b/tests/tests/gdr-unprocessable-hints new file mode 100755 index 0000000..710d7c9 --- /dev/null +++ b/tests/tests/gdr-unprocessable-hints @@ -0,0 +1,33 @@ +#!/bin/bash +set -e +. tests/lib + +t-dependencies GDR + +t-tstunt-parsechangelog +t-setup-import gdr-convert-gbp + +cd $p + +b=gdr-unprocessable/origin + +git checkout $b +t-expect-fail E:'maybe you needed git-debrebase convert-from' \ +t-git-debrebase quick + +git update-ref refs/ffq-prev/heads/$b master +t-expect-fail E:'Consider git-debrebase scrap' \ +t-git-debrebase quick + +git update-ref -d refs/ffq-prev/heads/$b master +git update-ref refs/debrebase-last/heads/$b HEAD +t-expect-fail E:'Branch/history seems mangled' \ +t-git-debrebase quick +test "$(grep 'git-debrebase scrap' ../t.output)" = "" + +git update-ref refs/debrebase-last/heads/$b master +t-expect-fail E:'Branch/history mangled, and diverged' \ +t-git-debrebase quick +test "$(grep 'git-debrebase scrap' ../t.output)" = "" + +t-ok diff --git a/tests/tests/gitattributes b/tests/tests/gitattributes index bdc61f8..9ebc216 100755 --- a/tests/tests/gitattributes +++ b/tests/tests/gitattributes @@ -44,7 +44,7 @@ badattr () { done } -# xxx want to make each of these files into a quilt patch +# todo: want to make each of these files into a quilt patch t-git-config core.eol crlf diff --git a/tests/tests/sbuild-gitish b/tests/tests/sbuild-gitish index 7c0a30c..da90b6f 100755 --- a/tests/tests/sbuild-gitish +++ b/tests/tests/sbuild-gitish @@ -6,7 +6,6 @@ t-dependencies sbuild man-db t-restrict x-dgit-schroot-build t-tstunt-parsechangelog -t-buildproductsdir-config t-prep-newpackage example 1.1 diff --git a/tests/tests/test-list-uptodate b/tests/tests/test-list-uptodate index 1e5f199..f28f404 100755 --- a/tests/tests/test-list-uptodate +++ b/tests/tests/test-list-uptodate @@ -1,7 +1,10 @@ #!/bin/bash set -e +autoimport= . tests/lib +t-dependencies NO-DEFAULT git + : "just verifies internal consistency of test suite" cd $root diff --git a/tests/tstunt/debchange b/tests/tstunt/debchange new file mode 100755 index 0000000..452b8c9 --- /dev/null +++ b/tests/tstunt/debchange @@ -0,0 +1,17 @@ +#!/bin/sh +set -e + +spec=$(date --rfc-3339=seconds -d @"${GIT_AUTHOR_DATE% *}") +spec=${spec%+*} + +# The nonsense with TZ is to work around #907264 +tz_set=${TZ+set} +if ! test "$tz_set"; then tz_undef=-u; fi + +set -x + +exec \ +env TZ=UTC \ +faketime -f "$spec" \ +env $tz_undef TZ${tz_set:+=}"$TZ" \ +"${DGIT_TEST_REAL_DEBCHANGE-debchange}" "$@" diff --git a/tests/tstunt/dpkg-deb b/tests/tstunt/dpkg-deb new file mode 100755 index 0000000..acaadf4 --- /dev/null +++ b/tests/tstunt/dpkg-deb @@ -0,0 +1,4 @@ +#!/bin/sh +set -x +exec \ +"${DGIT_TEST_REAL_DPKG_DEB}" -Znone "$@" diff --git a/tests/worktrees/example_1.1.tar b/tests/worktrees/example_1.1.tar Binary files differindex 6acd590..f58c41a 120000..100644 --- a/tests/worktrees/example_1.1.tar +++ b/tests/worktrees/example_1.1.tar |