summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile4
-rwxr-xr-xtests/enumerate-tests6
-rw-r--r--tests/lib43
-rw-r--r--tests/lib-build-modes5
-rw-r--r--tests/lib-core3
-rw-r--r--tests/lib-gdr126
-rwxr-xr-xtests/run-all34
-rwxr-xr-xtests/setup/gdr-convert-gbp36
-rwxr-xr-xtests/tests/build-modes14
-rwxr-xr-xtests/tests/build-modes-long36
-rwxr-xr-xtests/tests/build-modes-source17
-rwxr-xr-xtests/tests/gdr-diverge-nmu-dgit2
-rwxr-xr-xtests/tests/gdr-edits7
-rwxr-xr-xtests/tests/gdr-fresh45
-rwxr-xr-xtests/tests/gdr-import-dgitview3
-rwxr-xr-xtests/tests/gdr-import-nostitch30
-rwxr-xr-xtests/tests/gdr-makepatches72
-rwxr-xr-xtests/tests/gdr-merge65
-rwxr-xr-xtests/tests/gdr-merge-conflicts150
-rwxr-xr-xtests/tests/gdr-newupstream65
-rwxr-xr-xtests/tests/gdr-subcommands38
-rwxr-xr-xtests/tests/gdr-unprocessable2
-rwxr-xr-xtests/tests/gdr-unprocessable-hints33
-rwxr-xr-xtests/tests/gitattributes2
-rwxr-xr-xtests/tests/sbuild-gitish1
-rwxr-xr-xtests/tests/test-list-uptodate3
-rwxr-xr-xtests/tstunt/debchange17
-rwxr-xr-xtests/tstunt/dpkg-deb4
-rw-r--r--[l---------]tests/worktrees/example_1.1.tarbin15 -> 81920 bytes
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
diff --git a/tests/lib b/tests/lib
index 6028133..57b9e38 100644
--- a/tests/lib
+++ b/tests/lib
@@ -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
index 6acd590..f58c41a 120000..100644
--- a/tests/worktrees/example_1.1.tar
+++ b/tests/worktrees/example_1.1.tar
Binary files differ