chiark / gitweb /
test suite: editing a test script overrides DGIT_TESTS_PROGRESSIVE.
[dgit.git] / tests / lib-gdr
index 4e08ff7..95d2330 100644 (file)
@@ -11,3 +11,280 @@ t-git-debrebase () {
        : '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
 '
 }
+
+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 | t-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
+
+       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
+}