summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rwxr-xr-xtests/enumerate-tests19
-rw-r--r--tests/lib23
-rw-r--r--tests/lib-core1
-rw-r--r--tests/lib-gdr290
-rw-r--r--tests/lib-restricts4
-rwxr-xr-xtests/run-all5
-rwxr-xr-xtests/setup/gdr-convert-gbp100
-rwxr-xr-xtests/setup/gdr-convert-gbp-noarchive9
-rwxr-xr-xtests/tests/gdr-diverge-nmu61
-rwxr-xr-xtests/tests/gdr-diverge-nmu-dgit55
-rwxr-xr-xtests/tests/gdr-edits40
-rwxr-xr-xtests/tests/gdr-import-dgit68
-rwxr-xr-xtests/tests/gdr-makepatches737
-rwxr-xr-xtests/tests/gdr-newupstream65
-rwxr-xr-xtests/tests/gdr-subcommands226
-rwxr-xr-xtests/tests/gdr-viagit40
-rwxr-xr-xtests/tests/gitattributes48
-rwxr-xr-xtests/tests/hint-testsuite-triggers10
-rwxr-xr-xtests/tests/quilt-singlepatch6
-rwxr-xr-xtests/tests/version-opt2
20 files changed, 1090 insertions, 19 deletions
diff --git a/tests/enumerate-tests b/tests/enumerate-tests
index 2c00f97..0599b69 100755
--- a/tests/enumerate-tests
+++ b/tests/enumerate-tests
@@ -42,15 +42,30 @@ finish- () {
test-begin-gencontrol () {
restrictions=''
- dependencies=''
+ dependencies='dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin'
}
restriction-gencontrol () {
restrictions+=" $r"
}
+gencontrol-add-deps () {
+ for dep in "$@"; do
+ dependencies+="${dependencies:+, }$dep"
+ done
+}
+
dependencies-gencontrol () {
- dependencies+=", $deps"
+ for dep in "$deps"; do
+ case "$dep" in
+ NO-DGIT) dependencies='chiark-utils-bin' ;;
+ NO-DEFAULT) dependencies='' ;;
+ GDR) gencontrol-add-deps \
+ git-debrebase git-buildpackage faketime
+ ;;
+ *) gencontrol-add-deps "$dep" ;;
+ esac
+ done
}
test-done-gencontrol () {
diff --git a/tests/lib b/tests/lib
index e4554e3..bd06d20 100644
--- a/tests/lib
+++ b/tests/lib
@@ -31,8 +31,8 @@ export DGIT_TEST_DEBUG
: ${DGIT_TEST_DISTRO+ ${distro=${DGIT_TEST_DISTRO}}}
-export GIT_COMMITTER_DATE='1440253867 +0100'
-export GIT_AUTHOR_DATE='1440253867 +0100'
+export GIT_COMMITTER_DATE='1515000000 +0100'
+export GIT_AUTHOR_DATE='1515000000 +0100'
root=`pwd`
troot=$root/tests
@@ -189,6 +189,13 @@ t-git-none () {
(set -e; cd $tmp/git; tar xf $troot/git-template.tar)
}
+t-salsa-add-remote () {
+ local d=$tmp/salsa/$p
+ mkdir -p $d
+ (set -e; cd $d; git init --bare)
+ git remote add ${1-origin} $d
+}
+
t-git-merge-base () {
git merge-base $1 $2 || test $? = 1
}
@@ -415,9 +422,10 @@ t-dgit () {
{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{'
$dgit --dgit=$dgit --dget:-u --dput:--config=$tmp/dput.cf \
${dgit_config_debian_alias-"--config-lookup-explode=dgit-distro.debian.alias-canon"} \
+ ${DGIT_GITDEBREBASE_TEST+--git-debrebase=}${DGIT_GITDEBREBASE_TEST} \
${distro+${distro:+-d}}${distro--dtest-dummy} \
$DGIT_TEST_OPTS $DGIT_TEST_DEBUG \
- -k39B13D8A $t_dgit_xopts "$@"
+ -kBCD22CD83243B79D3DFAC33EA3DBCBC039B13D8A $t_dgit_xopts "$@"
: '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
'
}
@@ -472,12 +480,12 @@ t-setup-done () {
local savedirs=$2
local importeval=$3
- local import=IMPORT.${0##*/}
+ local import=IMPORT.${DGIT_TEST_TESTNAME-${0##*/}}
exec 4>$tmp/$import.new
local vn
for vn in $savevars; do
- perl >&4 -I. -MDebian::Dgit -e '
+ perl >&4 -"I$root" -MDebian::Dgit -e '
printf "%s=%s\n", $ARGV[0], shellquote $ARGV[1]
' $vn "$(eval "printf '%s\n' \"\$$vn\"")"
done
@@ -997,6 +1005,11 @@ t-commit () {
revision=$(( ${revision-0} + 1 ))
}
+t-dch-commit () {
+ faketime @"${GIT_AUTHOR_DATE% *}" dch "$@"
+ git commit -m "dch $*" debian/changelog
+}
+
t-git-config () {
git config --global "$@"
}
diff --git a/tests/lib-core b/tests/lib-core
index d65a1ff..c3a04cb 100644
--- a/tests/lib-core
+++ b/tests/lib-core
@@ -12,6 +12,7 @@ t-set-intree () {
: ${DGIT_REPOS_SERVER_TEST:=$DGIT_TEST_INTREE/infra/dgit-repos-server}
: ${DGIT_SSH_DISPATCH_TEST:=$DGIT_TEST_INTREE/infra/dgit-ssh-dispatch}
: ${DGIT_INFRA_PFX:=$DGIT_TEST_INTREE${DGIT_TEST_INTREE:+/infra/}}
+ : ${DGIT_GITDEBREBASE_TEST:=$DGIT_TEST_INTREE/git-debrebase}
export DGIT_TEST DGIT_BADCOMMIT_FIXUP
export DGIT_REPOS_SERVER_TEST DGIT_SSH_DISPATCH_TEST
export PERLLIB="$DGIT_TEST_INTREE${PERLLIB:+:}${PERLLIB}"
diff --git a/tests/lib-gdr b/tests/lib-gdr
new file mode 100644
index 0000000..7b4f085
--- /dev/null
+++ b/tests/lib-gdr
@@ -0,0 +1,290 @@
+#
+
+: ${GDR_TEST_DEBUG=-D}
+export GDR_TEST_DEBUG
+
+t-git-debrebase () {
+ local gdr=${DGIT_GITDEBREBASE_TEST-git-debrebase}
+ : '
+{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{'
+ $gdr $GDR_TEST_OPTS $GDR_TEST_DEBUG $t_gdr_xopts "$@"
+ : '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+'
+}
+
+t-gdr-good () {
+ local state=$1
+ local beforetag=$2 # say HEAD to skip this check
+ # state should be one of
+ # laundered
+ # stitched
+ # pushed
+
+ git diff --quiet ${beforetag-t.before} -- ':.' ':!debian/patches'
+
+ local etypes bwtip
+
+ LC_MESSAGES=C t-git-debrebase status >../status.check
+ case $state in
+ laundered)
+ egrep '^ *branch is laundered' ../status.check
+ ;;
+ stitched|pushed)
+ egrep \
+ '^ *branch contains furniture|^ *branch is unlaundered|^ *branch needs laundering' ../status.check
+ egrep '^ stitched$' ../status.check
+ ;;
+ esac
+
+ # etypes is either a type,
+ # or PseudoMerge-<more etypes>
+ # or AddPatches-<more etypes>
+
+ case $state in
+ laundered)
+ etypes=Upstream
+ bwtip=Y:`t-git-debrebase breakwater`
+ ;;
+ stitched) etypes=Pseudomerge-Upstream ;;
+ pushed) etypes=AddPatches-Pseudomerge-Upstream ;;
+ pushed-interop) etypes=Pseudomerge-AddPatchesInterop-Upstream ;;
+ esac
+
+ t-git-debrebase analyse >../anal.check
+ expect=`git rev-parse HEAD`
+ exec <../anal.check
+ local cid ctype info nparents
+ while read cid ctype info; do
+ : ===== $cid $ctype $info =====
+ test $cid = $expect
+ local cetype=${etypes%%-*}
+ if [ "x$ctype" = "x$cetype" ]; then cetype=SAME; fi
+ local parents="`git log -n1 --pretty=format:%P $cid`"
+ expect="$parents"
+ enparents=1
+ : "$ctype/$cetype" "$parents"
+
+ case "$ctype/$cetype" in
+ Pseudomerge/SAME) ;;
+ Packaging/SAME) ;;
+ Packaging/Upstream) ;;
+ AddPatches/SAME) ;;
+ AddPatches/AddPatchesInterop) ;;
+ Changelog/Packaging) ;;
+ Changelog/Upstream) ;;
+ Upstream/SAME) ;;
+ Anchor/Upstream) ;;
+ Anchor/Packaging) ;;
+ *)
+ fail "etypes=$etypes ctype=$ctype cetype=$cetype $cid"
+ ;;
+ esac
+
+ case "$ctype/$etypes" in
+ Packaging/Upstream|\
+ Changelog/Upstream)
+ if [ "x$bwtip" != x ]; then
+ test "$bwtip" = "Y:$cid"
+ bwtip=''
+ fi
+ esac
+
+ case "$cetype" in
+ AddPatchesInterop)
+ git log -n1 --pretty=format:%B \
+ | grep '^\[git-debrebase[ :]'
+ ;;
+ esac
+
+ case "$ctype" in
+ Pseudomerge)
+ expect=${info#Contributor=}
+ expect=${expect%% *}
+ enparents=2
+ git diff --quiet $expect..$cid
+ etypes=${etypes#*-}
+
+ : 'reject pointless pseudomerges'
+ local overwritten=${parents/$expect/}
+ overwritten=${overwritten// /}
+ t-git-debrebase analyse $overwritten >../anal.overwr
+ local ocid otype oinfo
+ read <../anal.overwr ocid otype oinfo
+ case "$otype" in
+ Pseudomerge) test "x$info" != "x$oinfo" ;;
+ esac
+ ;;
+ Packaging)
+ git diff --quiet $expect..$cid -- ':.' ':!debian'
+ git diff --quiet $expect..$cid -- ':debian/patches'
+ etypes=Packaging
+ ;;
+ AddPatches)
+ git diff --quiet $expect..$cid -- \
+ ':.' ':!debian/patches'
+ etypes=${etypes#*-}
+ ;;
+ Changelog)
+ git diff --quiet $expect..$cid -- \
+ ':.' ':!debian/changelog'
+ etypes=Packaging
+ ;;
+ Upstream/SAME)
+ git diff --quiet $expect..$cid -- ':debian'
+ ;;
+ Anchor)
+ break
+ ;;
+ esac
+
+ local cnparents=`printf "%s" "$parents" | wc -w`
+ test $cnparents = $enparents
+
+ local cndparents=`
+ for f in $parents; do echo $f; done | sort -u | wc -w
+ `
+ test $cndparents = $cnparents
+
+ case "$parents" in
+ *"$expect"*) ;;
+ *) fail 'unexpected parent' ;;
+ esac
+
+ done
+}
+
+t-some-changes () {
+ local token=$1
+ local which=${2-dum}
+
+ t-git-next-date
+
+ case "$which" in
+ *d*)
+ echo >>debian/zorkmid "// debian $token"
+ git add debian/zorkmid
+ git commit -m "DEBIAN add zorkmid ($token)"
+ ;;
+ esac
+
+ case "$which" in
+ *u*)
+ echo >>src.c "// upstream $token"
+ git commit -a -m "UPSTREAM edit src.c ($token)"
+ ;;
+ esac
+
+ case "$which" in
+ *m*)
+ for f in debian/zorkmid src.c; do
+ echo "// both! $token" >>$f
+ git add $f
+ done
+ git commit -m "MIXED add both ($token)"
+ ;;
+ esac
+
+ t-git-next-date
+}
+
+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-nmu-upload-1 () {
+ # usage:
+ # v=<full version>
+ # nmu-upload-1 <nmubranch>
+ # gbp pq import or perhaps other similar things
+ # nmu-upload-2
+ # maybe make some dgit-covertible commits
+ # nmu-upload-3
+
+ t-git-next-date
+ nmubranch=$1
+ git checkout -f -b $nmubranch
+ t-git-debrebase
+ t-git-debrebase convert-to-gbp
+ t-git-next-date
+ # now we are on a gbp patched-unapplied branch
+}
+
+
+t-nmu-upload-2 () {
+ t-git-next-date
+ t-dch-commit -v $v -m "nmu $nmubranch $v"
+}
+
+t-nmu-upload-3 () {
+ t-dch-commit -r sid
+
+ t-dgit -wgf build-source
+
+ cd ..
+ c=${p}_${v}_source.changes
+ debsign -kBCD22CD83243B79D3DFAC33EA3DBCBC039B13D8A $c
+ dput -c $tmp/dput.cf test-dummy $c
+
+ t-archive-process-incoming sid
+ t-git-next-date
+ cd $p
+ git checkout master
+}
+
+t-nmu-commit-an-upstream-change () {
+ echo >>newsrc.c "// more upstream"
+ git add newsrc.c
+ git commit -m 'UPSTREAM NMU'
+}
+
+t-maintainer-commit-some-changes () {
+ t-dch-commit -v$v -m "start $v"
+
+ t-some-changes "maintainer $v"
+ t-git-debrebase
+ t-git-debrebase stitch
+
+ git branch did.maintainer
+
+ t-git-next-date
+}
+
+t-nmu-causes-ff-fail () {
+ t-dgit fetch
+
+ t-expect-fail E:'Not.*fast-forward' \
+ git merge --ff-only dgit/dgit/sid
+
+ t-expect-fail E:'-fdiverged.*refs/remotes/dgit/dgit/sid' \
+ t-git-debrebase
+}
+
+t-nmu-reconciled-good () {
+ local nmutree=$1
+
+ : 'check that what we have is what is expected'
+
+ git checkout -b compare.nmu origin/master~0
+ git checkout $nmutree .
+ git rm -rf debian/patches
+ git commit -m 'rm patches nmu'
+
+ git checkout -b compare.maintainer origin/master~0
+ git checkout did.maintainer .
+ git rm -rf --ignore-unmatch debian/patches
+ git commit --allow-empty -m 'rm patches maintainer'
+
+ git merge compare.nmu
+ git diff --quiet master
+
+ : 'check that dgit still likes it'
+
+ git checkout master
+ t-dgit -wgf quilt-fixup
+}
diff --git a/tests/lib-restricts b/tests/lib-restricts
index bffe13a..bb695c4 100644
--- a/tests/lib-restricts
+++ b/tests/lib-restricts
@@ -20,3 +20,7 @@ t-restriction-x-dgit-unfinished () {
echo 'unfinished test, or unfinished feature'
return 1
}
+
+t-restriction-hint-testsuite-triggers () {
+ :
+}
diff --git a/tests/run-all b/tests/run-all
index cfa5ce2..f72b9fa 100755
--- a/tests/run-all
+++ b/tests/run-all
@@ -5,9 +5,8 @@ set -e
set -o pipefail
-set +e
-jcpus=`perl -MSys::CPU -we 'printf "-j%d\n", 1.34 * Sys::CPU::cpu_count()'`
-set -e
+ncpus=$(nproc || echo 1)
+jcpus=-j$(( ncpus * 134 / 100 ))
if [ $# != 0 ]; then
set TESTSCRIPTS="$*"
diff --git a/tests/setup/gdr-convert-gbp b/tests/setup/gdr-convert-gbp
new file mode 100755
index 0000000..0b525c8
--- /dev/null
+++ b/tests/setup/gdr-convert-gbp
@@ -0,0 +1,100 @@
+#!/bin/bash
+set -e
+. tests/lib
+. $troot/lib-gdr
+
+t-dependencies GDR
+
+t-tstunt-parsechangelog
+
+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)"
+
+not-gdr-processable
+
+: 'fake up an upstream 2.0'
+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 \
+ quilt-tip-1.1 \
+ patch-queue/quilt-tip \
+ indep-arch \
+; do
+ git branch -D $b
+done
+
+: 'see what gbp import-orig does'
+git checkout master
+gbp import-orig --upstream-version=2.0 ../$ust
+
+not-gdr-processable
+
+t-dch-commit -v 2.0-1 -m 'new upstream (did gbp import-orig)'
+t-dch-commit -r sid
+
+$ifarchive t-archive-none $p
+$ifarchive t-git-none
+$ifarchive t-dgit -wgf --gbp push-source --new
+
+t-salsa-add-remote
+git push --set-upstream origin master
+
+# OK now this looks like something more normal.
+# We have:
+# maintainer (gbp) view dgit view
+# master
+# debian/2.0-1 archive/debian/2.0-1
+# remotes/origin/master remotes/dgit/dgit/sid
+
+t-git-debrebase -fupstream-has-debian convert-from-gbp
+
+v=2.0-2
+t-dch-commit -v $v -m 'switch to git-debrebase, no other changes'
+t-dch-commit -r sid
+
+$ifarchive t-dgit -wgf push-source --new --overwrite
+git push
+
+cd ..
+
+$ifarchive t-archive-process-incoming sid
+
+t-setup-done '' "$(echo $p*) salsa $($ifarchive echo git mirror aq)" '
+ . $troot/lib-gdr
+ t-tstunt-parsechangelog
+ p=example
+ t-git-next-date
+'
+
+t-ok
diff --git a/tests/setup/gdr-convert-gbp-noarchive b/tests/setup/gdr-convert-gbp-noarchive
new file mode 100755
index 0000000..dfeea3b
--- /dev/null
+++ b/tests/setup/gdr-convert-gbp-noarchive
@@ -0,0 +1,9 @@
+#!/bin/bash
+set -e
+. tests/lib
+. $troot/lib-gdr
+
+t-dependencies GDR
+
+export ifarchive=:
+t-chain-test gdr-convert-gbp
diff --git a/tests/tests/gdr-diverge-nmu b/tests/tests/gdr-diverge-nmu
new file mode 100755
index 0000000..15bf901
--- /dev/null
+++ b/tests/tests/gdr-diverge-nmu
@@ -0,0 +1,61 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-dependencies GDR
+
+t-setup-import gdr-convert-gbp
+
+cd $p
+
+t-dgit setup-mergechangelogs
+
+: 'maintainer'
+
+v=2.0-3
+t-maintainer-commit-some-changes
+
+t-git-next-date
+
+: 'non-dgit upload (but we prepare it with dgit anyway)'
+
+t-git-next-date
+git checkout origin/master
+
+v=2.0-2+nmu1
+t-nmu-upload-1 nmu
+gbp pq import
+t-nmu-upload-2
+t-nmu-commit-an-upstream-change
+t-nmu-upload-3
+
+: 'ad hocery'
+
+t-git-next-date
+git checkout master
+t-nmu-causes-ff-fail
+
+git cherry-pick 'dgit/dgit/sid^{/UPSTREAM NMU}'
+
+t-expect-fail 'Automatic merge failed; fix conflicts' \
+git merge --squash -m 'Incorporate NMU' dgit/dgit/sid
+
+git rm -rf debian/patches
+git commit -m 'Incorporate NMU'
+
+git merge -s ours -m 'Declare incorporate NMU' dgit/dgit/sid
+
+: 'right, how are we'
+
+t-git-next-date
+
+t-git-debrebase
+t-gdr-good laundered
+
+t-git-debrebase stitch
+t-gdr-good stitched
+
+
+t-nmu-reconciled-good patch-queue/nmu
+
+t-ok
diff --git a/tests/tests/gdr-diverge-nmu-dgit b/tests/tests/gdr-diverge-nmu-dgit
new file mode 100755
index 0000000..4b5907a
--- /dev/null
+++ b/tests/tests/gdr-diverge-nmu-dgit
@@ -0,0 +1,55 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-dependencies GDR
+
+t-setup-import gdr-convert-gbp
+
+cd $p
+
+t-dgit setup-mergechangelogs
+
+: 'maintainer'
+
+git checkout master
+
+v=2.0-3
+t-maintainer-commit-some-changes
+
+t-git-next-date
+
+: 'nmu'
+
+git checkout -b nmu origin/master~0
+
+t-git-next-date
+
+v=2.0-2+nmu1
+t-nmu-commit-an-upstream-change
+t-dch-commit -v$v -m finalise
+t-dch-commit -r sid
+
+t-dgit -wgf push-source
+
+t-archive-process-incoming sid
+
+: 'rebase nmu onto our branch'
+
+t-git-next-date
+git checkout master
+t-nmu-causes-ff-fail
+
+git checkout dgit/dgit/sid # detach
+
+t-expect-fail 'E:CONFLICT.*Commit Debian 3\.0 \(quilt\) metadata' \
+git rebase master
+git rebase --skip
+
+git push . HEAD:master
+git checkout master
+
+
+t-nmu-reconciled-good nmu
+
+t-ok
diff --git a/tests/tests/gdr-edits b/tests/tests/gdr-edits
new file mode 100755
index 0000000..6c77184
--- /dev/null
+++ b/tests/tests/gdr-edits
@@ -0,0 +1,40 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-dependencies GDR
+
+t-setup-import gdr-convert-gbp
+
+cd $p
+
+v=2.0-3
+t-dch-commit -v $v -m testing
+
+t-git-debrebase analyse |tee ../anal.1
+cat ../anal.1
+
+t-some-changes edits
+
+t-dch-commit -r sid
+
+git tag t.before
+
+t-git-debrebase
+t-gdr-good laundered
+
+t-dgit push-source
+t-gdr-good pushed-interop
+
+git branch before-noop
+
+t-git-next-date
+t-git-debrebase
+t-git-debrebase stitch
+t-gdr-good pushed-interop
+
+t-refs-same-start
+t-ref-same refs/heads/before-noop
+t-ref-head
+
+t-ok
diff --git a/tests/tests/gdr-import-dgit b/tests/tests/gdr-import-dgit
new file mode 100755
index 0000000..19918d8
--- /dev/null
+++ b/tests/tests/gdr-import-dgit
@@ -0,0 +1,68 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-dependencies GDR
+
+t-setup-import gdr-convert-gbp
+
+cd $p
+
+: 'non-dgit upload (but we prepare it with dgit anyway)'
+
+v=2.0-2+nmu1
+t-nmu-upload-1 nmu
+gbp pq import
+t-nmu-upload-2
+t-some-changes $numbranch
+t-nmu-upload-3
+
+: 'done the nmu, switching back to the maintainer hat'
+
+nmu-fold () {
+ t-git-next-date
+ t-dgit fetch
+ t-git-next-date
+ git merge --ff-only dgit/dgit/sid
+
+ git diff --exit-code patch-queue/$nmubranch
+
+ git branch unlaundered.$nmubranch
+
+ t-git-debrebase
+ t-gdr-good laundered
+
+ t-git-debrebase stitch
+ t-gdr-good stitched
+}
+
+nmu-fold
+
+v=2.0-3
+t-dch-commit -v $v -m "incorporate nmu"
+t-dch-commit -r sid
+t-dgit -wgf push-source
+
+: 'now test a new upstream'
+
+t-make-new-upstream-tarball 2.1
+
+git checkout master
+v=2.1-0+nmu1
+t-nmu-upload-1 nmu2
+
+gbp import-orig --upstream-version=2.1 --debian-branch=nmu2 ../$ust
+t-dch-commit -v $v -m "new upstream $v"
+gbp pq import
+
+#t-dgit -wgf build-source
+
+t-nmu-upload-2
+t-some-changes $numbranch
+t-nmu-upload-3
+
+: 'done the nmu, back to the maintainer'
+
+nmu-fold
+
+t-ok
diff --git a/tests/tests/gdr-makepatches7 b/tests/tests/gdr-makepatches7
new file mode 100755
index 0000000..9c39710
--- /dev/null
+++ b/tests/tests/gdr-makepatches7
@@ -0,0 +1,37 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-dependencies GDR
+
+t-setup-import gdr-convert-gbp
+
+cd $p
+
+t-some-changes for-rebase-fixup m
+
+t-git-debrebase
+t-git-debrebase make-patches
+
+t-some-changes for-dgit-fixup m
+
+t-git-debrebase
+
+t-expect-fail 'dgit: failed command: test-suite-break-git-debrebase' \
+t-dgit -wgf --git-debrebase=test-suite-break-git-debrebase quilt-fixup
+
+t-dgit -wgf --git-debrebase=true quilt-fixup
+
+t-some-changes for-make-patches-fails-then-dgit-fixup m
+
+t-expect-fail 'Patch export produced patch amendments' \
+t-git-debrebase make-patches
+
+t-dgit -wgf quilt-fixup
+
+t-refs-same-start
+t-ref-head
+t-dgit -wg quilt-fixup
+t-ref-head
+
+t-ok
diff --git a/tests/tests/gdr-newupstream b/tests/tests/gdr-newupstream
new file mode 100755
index 0000000..536f49c
--- /dev/null
+++ b/tests/tests/gdr-newupstream
@@ -0,0 +1,65 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-dependencies NO-DGIT GDR
+
+t-setup-import gdr-convert-gbp-noarchive
+
+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
+
+: 'maintainer hat'
+
+git branch startpoint
+v=2.1-1
+
+git checkout master
+
+t-expect-fail F:'Could not determine appropriate upstream commitish' \
+t-git-debrebase new-upstream $v
+
+git tag v2.1 upstream
+
+t-git-debrebase new-upstream $v
+t-gdr-good laundered
+
+t-git-debrebase stitch
+t-gdr-good stitched
+
+git branch ordinary
+
+: 'with --anchor'
+
+git reset --hard startpoint
+
+t-git-debrebase analyse >../anal.anch
+anchor=$(perl <../anal.anch -ne '
+ next unless m/^(\w+) Anchor\s/;
+ print $1,"\n";
+ exit;
+')
+
+t-git-debrebase --anchor=$anchor -fanchor-treated new-upstream $v upstream
+t-gdr-good laundered
+
+t-git-debrebase stitch
+t-gdr-good stitched
+
+git diff --quiet ordinary
+
+t-ok
diff --git a/tests/tests/gdr-subcommands b/tests/tests/gdr-subcommands
new file mode 100755
index 0000000..e59fc07
--- /dev/null
+++ b/tests/tests/gdr-subcommands
@@ -0,0 +1,226 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-dependencies GDR
+
+t-setup-import gdr-convert-gbp
+
+cd $p
+
+t-dgit setup-mergechangelogs
+
+mix-it () {
+ t-git-next-date
+
+ local m=$(git symbolic-ref HEAD)
+ t-some-changes "subcommands $m 1"
+
+ # we want patches mde by dgit, not gdr, for our test cases
+ t-dgit --git-debrebase=true -wgf quilt-fixup
+ t-git-next-date
+
+ t-some-changes "subcommands $m 2"
+ t-git-next-date
+}
+
+git checkout -b stitched-laundered master
+mix-it
+t-git-debrebase quick
+t-gdr-good stitched HEAD
+
+git checkout -b stitched-mixed master
+mix-it
+
+git checkout -b unstitched-laundered master
+mix-it
+t-git-debrebase
+t-gdr-good laundered
+
+git checkout -b unstitched-mixed master
+t-git-debrebase
+mix-it
+
+t-git-next-date
+
+git show-ref
+
+subcmd () {
+ local subcmd=$1
+ shift
+ for startbranch in {stitched,unstitched}-{laundered,mixed}; do
+ work="work-$subcmd-$startbranch"
+
+ : "---------- $subcmd $startbranch ----------"
+
+ git for-each-ref "**/$startbranch"{,/**} \
+ --format='create %(refname) %(objectname)' \
+ | sed "s/$startbranch/$work/" \
+ | git update-ref --stdin
+
+ git checkout $work
+ checkletters=$1; shift
+
+ before=before-$work
+ git branch $before
+
+ local xopts=''
+
+ case "$checkletters" in
+ XX*)
+ fail "$checkletters" # for debugging
+ ;;
+ esac
+
+ case "$checkletters" in
+ X*)
+ t-expect-fail E:'snags: [0-9]* blockers' \
+ t-git-debrebase $xopts $subcmd
+ xopts+=' --force'
+ next_checkletter
+ ;;
+ esac
+
+ case "$checkletters" in
+ N*)
+ t-expect-fail E:. \
+ t-git-debrebase $xopts $subcmd
+ xopts+=' --noop-ok'
+ next_checkletter
+ ;;
+ esac
+
+ case "$checkletters" in
+ [EF]:*)
+ t-expect-fail "$checkletters" \
+ t-git-debrebase $xopts $subcmd
+ continue
+ ;;
+ *)
+ t-git-debrebase $xopts $subcmd
+ ;;
+ esac
+
+ peel=peel-$subcmd-$startbranch
+ git checkout -b $peel
+ t-clean-on-branch $peel
+
+ : "---------- $subcmd $startbranch $checkletters ----------"
+
+ while [ "x$checkletters" != x ]; do
+ : "---- $subcmd $startbranch ...$checkletters ----"
+ make_check "$checkletters"
+ checkletters="${checkletters#?}"
+ done
+ done
+
+}
+
+next_checkletter () {
+ checkletters="${checkletters#?}"
+}
+
+make_check () {
+ case "$1" in
+ [Nn]*)
+ t-refs-same-start
+ t-refs-same refs/heads/$before refs/heads/$work
+ ;;
+ U*)
+ t-refs-same-start
+ t-refs-same refs/heads/$before refs/ffq-prev/heads/$work
+ make_check u
+ ;;
+ u*)
+ t-git-get-ref refs/ffq-prev/heads/$work
+ t-refs-notexist refs/debrebase-last/heads/$work
+ ;;
+ V*)
+ t-refs-same-start
+ t-refs-same refs/ffq-prev/heads/$work \
+ refs/ffq-prev/heads/$startbranch
+ t-refs-notexist refs/debrebase-last/heads/$work
+ ;;
+ s*)
+ t-refs-notexist refs/ffq-prev/heads/$work
+ t-refs-same-start
+ t-refs-same refs/debrebase-last/heads/$work \
+ refs/debrebase-last/heads/$startbranch
+ t-has-ancestor HEAD refs/debrebase-last/heads/$work
+ ;;
+ S*)
+ t-refs-notexist refs/ffq-prev/heads/$work
+ t-refs-same-start refs/debrebase-last/heads/$work
+ t-ref-head
+ git diff --quiet HEAD^1
+ git diff HEAD^2 | grep $startbranch
+ git reset --hard HEAD^1
+ ;;
+ P*)
+ t-dgit -wgf --quilt=nofix quilt-fixup
+ git diff HEAD~ debian/patches | egrep .
+ git diff --quiet HEAD~ -- ':.' ':!debian/patches'
+ git reset --hard HEAD~
+ ;;
+ l*)
+ git diff --quiet HEAD refs/heads/$before -- ':.' ':!debian/patches'
+ t-gdr-good laundered
+ ;;
+ t*)
+ git diff --quiet HEAD refs/heads/$before
+ ;;
+ f*)
+ t-has-ancestor HEAD refs/heads/$before
+ ;;
+ *)
+ fail "$1"
+ ;;
+ esac
+}
+
+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
+#
+# "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 make-patches sPft "$Ep" uPft "$Ep"
+#subcmd dgit-upload-hook Psft "$Ep" SPft "$Ep"
+#
+# result codes, each one is a check:
+# E:$pat } this is an error (must come first)
+# F:$pat } arg is passed to expect-fail
+#
+# X should fail due to snags, but succeed when forced
+# XX crash out of script for manual debugging
+#
+# N this is a noop, error unless --noop-ok
+# n this is a silent noop
+# both of these imply tf; but, specify also one of u s
+#
+# should normally specify one of these:
+# U just unstiched: ffq-prev is exactly previous HEAD; implies u
+# u result is unstitched
+# V ffq-prev remains unchanged; implies also u
+# s result is stitched, debrebase-last exists and is unchanged
+# S result is stitch just made, remaining letters apply to result~
+#
+# P result is add-patches, remaining letters apply to result~
+#
+# should normally specify one or both of these:
+# l result is laundered, tree is same as before minus d/patches
+# t tree is exactly same as before
+#
+# f result is ff from previous HEAD
+
+t-ok
diff --git a/tests/tests/gdr-viagit b/tests/tests/gdr-viagit
new file mode 100755
index 0000000..644d2d4
--- /dev/null
+++ b/tests/tests/gdr-viagit
@@ -0,0 +1,40 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-dependencies NO-DGIT GDR
+
+t-setup-import gdr-convert-gbp-noarchive
+
+: 'set up so t-git-debrebase runs gdr via git'
+
+case "$DGIT_GITDEBREBASE_TEST" in
+''|git-debrebase) ;;
+*)
+ t-tstunt
+ st=$tmp/tstunt/git-debrebase
+ export DGIT_GITDEBREBASE_TEST_REAL="$DGIT_GITDEBREBASE_TEST"
+ cat <<'END' >$st
+#!/bin/sh
+set -x
+exec "$DGIT_GITDEBREBASE_TEST_REAL" "$@"
+END
+ chmod +x $st
+ ;;
+esac
+
+DGIT_GITDEBREBASE_TEST='git debrebase'
+
+: 'do a simple test'
+
+cd $p
+
+t-some-changes
+
+t-git-debrebase
+t-gdr-good laundered
+
+t-git-debrebase stitch --prose=wombat
+t-gdr-good stitched
+
+t-ok
diff --git a/tests/tests/gitattributes b/tests/tests/gitattributes
index 9e1c246..bdc61f8 100755
--- a/tests/tests/gitattributes
+++ b/tests/tests/gitattributes
@@ -22,12 +22,20 @@ badattr1 () {
printf >>af/$filename 'crlf: \r\n'
echo >>af/$filename 'id $Id: $'
echo >>af/$filename 'id $Id: SPLARK $'
+ printf >>af/$filename '\xEF\xBB\xBF <- UTF-8 BOM\n'
echo >>gitattrs "af/$filename" "$attrspec"
}
badattr () {
attrname=$1; shift
- badattr1 $attrname-set $attrname
+
+ case "$attrname" in
+ working-tree-encoding) ;;
+ *)
+ badattr1 $attrname-set $attrname
+ ;;
+ esac
+
badattr1 $attrname-unset -$attrname
badattr1 $attrname-unspec \!$attrname
local val
@@ -40,6 +48,9 @@ badattr () {
t-git-config core.eol crlf
+printf >>.dotfile-attr 'dotfiles too?\n'
+echo >>gitattrs '.dotfile-attr filter=dgit-test-crazy-f'
+
badattr text auto
badattr eol lf crlf
badattr ident
@@ -57,6 +68,7 @@ badattr export-ignore
badattr export-subst
badattr delta
badattr encoding no-such-encoding
+badattr working-tree-encoding ISO-8859-1 UTF-16
man gitattributes \
| perl -ne 'print $1,"\n" if m/^ *(\w[-a-z]*)$/' \
@@ -67,7 +79,7 @@ while read attr; do
badattr $attr
done
-sha256sum af/* >sums
+sha256sum .dotfile-attr af/* >sums
# ----- common to source formats -----
@@ -92,7 +104,7 @@ sfmt_setup () {
cp ../gitattrs .gitattributes
$addpatch gitattrs
- cp -a ../af .
+ cp -a ../af ../.dotfile-attr .
$addpatch files
cp ../sums .
@@ -108,10 +120,10 @@ sums_check () {
# $sums $branch
# and check out $branch
- sha256sum af/* >../$sums.checkout
+ sha256sum .dotfile-attr af/* >../$sums.checkout
diff -U0 ../sums ../$sums.checkout
- for f in af/*; do
+ for f in .dotfile-attr af/*; do
git cat-file blob "refs/heads/$branch:$f" \
| sha256sum \
| sed -e 's#-$#'$f'#' \
@@ -126,7 +138,7 @@ sums_check_broken () {
# $sums
# and check out the broken branch
- sha256sum af/* >../$sums.broken
+ sha256sum .dotfile-attr af/* >../$sums.broken
for s in ../sums ../$sums.broken; do
sed 's/[0-9a-f]* //' $s >$s.nosums
@@ -178,7 +190,7 @@ sfmt_import () {
t-dgit-warn-check 1 $dgitargs import-dsc ../$dscf +$branch
git checkout $branch
- touch af/*
+ touch .dotfile-attr af/*
git reset --hard
sums_check
@@ -239,7 +251,7 @@ t-dgit-warn-check 0 -cdgit.default.setup-gitattributes=false \
clone $p sid $p.clone.broken
cd $p.clone.broken
-sums=$p.clone.broken
+sums=sums.broken
sums_check_broken
cd ..
@@ -253,4 +265,24 @@ sums_check
cd ..
+t-dgit-warn-check 0 -cdgit.default.setup-gitattributes=false \
+ clone $p sid $p.clone.old
+
+cd $p.clone.old
+
+mkdir -p .git/info
+cat >.git/info/attributes <<'END'
+* dgit-defuse-attrs
+[attr]dgit-defuse-attrs -text -eol -crlf -ident -filter
+# ^ see GITATTRIBUTES in dgit(7) and dgit setup-new-tree in dgit(1)
+END
+
+t-dgit setup-gitattributes
+git reset --hard
+
+sums=sums.old
+sums_check
+
+cd ..
+
t-ok
diff --git a/tests/tests/hint-testsuite-triggers b/tests/tests/hint-testsuite-triggers
new file mode 100755
index 0000000..f35dd43
--- /dev/null
+++ b/tests/tests/hint-testsuite-triggers
@@ -0,0 +1,10 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+: "exists only to trigger ci.debian.net retests for some indirect deps"
+
+t-restrict hint-testsuite-triggers
+t-dependencies NO-DEFAULT gnupg patch diffutils
+
+t-ok
diff --git a/tests/tests/quilt-singlepatch b/tests/tests/quilt-singlepatch
index 3b6e228..320a31c 100755
--- a/tests/tests/quilt-singlepatch
+++ b/tests/tests/quilt-singlepatch
@@ -36,4 +36,10 @@ debian-changes
series
END
+git apply --reverse debian/patches/debian-changes
+git commit -a -m 'go back to plain upstream'
+
+t-dgit -wgf build-source
+t-dgit --damp-run push
+
t-ok
diff --git a/tests/tests/version-opt b/tests/tests/version-opt
index 22c35e7..2933912 100755
--- a/tests/tests/version-opt
+++ b/tests/tests/version-opt
@@ -14,7 +14,7 @@ git tag start
t-dgit setup-mergechangelogs
t-dgit build-source
-t-dgit push --new
+t-dgit push --new --overwrite
t-archive-process-incoming sid