chiark / gitweb /
test suite: Work if $tmp is on a different filesystem.
[dgit.git] / tests / lib-gdr
index da119bca098ee1048250c7d7e419a21a6ef64eff..cda11df5b8d5fe7d322d9f8f8168cc44c2554746 100644 (file)
@@ -3,11 +3,14 @@
 : ${GDR_TEST_DEBUG=-D}
 export GDR_TEST_DEBUG
 
 : ${GDR_TEST_DEBUG=-D}
 export GDR_TEST_DEBUG
 
+t-tstunt debchange
+
 t-git-debrebase () {
        local gdr=${DGIT_GITDEBREBASE_TEST-git-debrebase}
        : '
 {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{'
 t-git-debrebase () {
        local gdr=${DGIT_GITDEBREBASE_TEST-git-debrebase}
        : '
 {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{'
-       $gdr    $GDR_TEST_OPTS $GDR_TEST_DEBUG $t_gdr_xopts "$@"
+       $gdr "--dgit=${DGIT_TEST-dgit}" $GDR_TEST_OPTS \
+               $GDR_TEST_DEBUG $t_gdr_xopts "$@"
        : '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
 '
 }
        : '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
 '
 }
@@ -18,30 +21,63 @@ t-gdr-good () {
        # state should be one of
        #   laundered
        #   stitched
        # state should be one of
        #   laundered
        #   stitched
-       #   patches
+       #   pushed
+
+       case $state in
+       pushed*)
+               t-gdr-made-patches
+               ;;
+       esac
 
        git diff --quiet ${beforetag-t.before} -- ':.' ':!debian/patches'
 
 
        git diff --quiet ${beforetag-t.before} -- ':.' ':!debian/patches'
 
-       local etype netype 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
+
+       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>
 
        case $state in
        laundered)
 
        case $state in
        laundered)
-                       etype=Upstream
+                       etypes=Upstream
                        bwtip=Y:`t-git-debrebase breakwater`
                ;;
                        bwtip=Y:`t-git-debrebase breakwater`
                ;;
-       stitched)       etype=Pseudomerge ;;
-       pushed)         etype=AddPatches; netype=Pseudomerge ;;
+       stitched)       etypes=Pseudomerge-Upstream ;;
+       pushed)         etypes=AddPatches-Pseudomerge-Upstream ;;
+       pushed-interop) etypes=Pseudomerge-AddPatchesInterop-Upstream ;;
+       breakwater)     etypes=Packaging ;;
+       *)              fail-unknown-state-$state ;;
        esac
 
        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 =====
                test $cid = $expect
        local cid ctype info nparents
        while read cid ctype info; do
                : ===== $cid $ctype $info =====
                test $cid = $expect
-               local cetype=$etype
-               if [ "x$ctype" = "x$etype" ]; then cetype=SAME; fi
+               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
                local parents="`git log -n1 --pretty=format:%P $cid`"
                expect="$parents"
                enparents=1
@@ -51,18 +87,21 @@ t-gdr-good () {
                Pseudomerge/SAME)                       ;;
                Packaging/SAME)                         ;;
                Packaging/Upstream)                     ;;
                Pseudomerge/SAME)                       ;;
                Packaging/SAME)                         ;;
                Packaging/Upstream)                     ;;
+               MergedBreakwaters/Packaging)            ;;
+               MergedBreakwaters/Upstream)             ;;
                AddPatches/SAME)                        ;;
                AddPatches/SAME)                        ;;
+               AddPatches/AddPatchesInterop)           ;;
                Changelog/Packaging)                    ;;
                Changelog/Upstream)                     ;;
                Upstream/SAME)                          ;;
                Changelog/Packaging)                    ;;
                Changelog/Upstream)                     ;;
                Upstream/SAME)                          ;;
-               BreakwaterUpstreamMerge/Upstream)       ;;
-               BreakwaterUpstreamMerge/Packaging)      ;;
+               Anchor/Upstream)                        ;;
+               Anchor/Packaging)                       ;;
                *)
                *)
-                       fail "etype=$etype ctype=$ctype cetype=$cetype $cid"
+                       fail "etypes=$etypes ctype=$ctype cetype=$cetype $cid"
                        ;;
                esac
 
                        ;;
                esac
 
-               case "$ctype/$etype" in
+               case "$ctype/$etypes" in
                Packaging/Upstream|\
                Changelog/Upstream)
                        if [ "x$bwtip" != x ]; then
                Packaging/Upstream|\
                Changelog/Upstream)
                        if [ "x$bwtip" != x ]; then
@@ -71,34 +110,53 @@ t-gdr-good () {
                        fi
                esac
 
                        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
                case "$ctype" in
                Pseudomerge)
                        expect=${info#Contributor=}
                        expect=${expect%% *}
                        enparents=2
                        git diff --quiet $expect..$cid
-                       etype=Upstream
+                       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'
                        ;;
                Packaging)
                        git diff --quiet $expect..$cid -- ':.' ':!debian' 
                        git diff --quiet $expect..$cid -- ':debian/patches'
-                       etype=Packaging
+                       etypes=Packaging
                        ;;
                AddPatches)
                        git diff --quiet $expect..$cid -- \
                                ':.' ':!debian/patches'
                        ;;
                AddPatches)
                        git diff --quiet $expect..$cid -- \
                                ':.' ':!debian/patches'
-                       etype=$netype
-                       netype=Upstream
+                       etypes=${etypes#*-}
                        ;;
                Changelog)
                        git diff --quiet $expect..$cid -- \
                                ':.' ':!debian/changelog'
                        ;;
                Changelog)
                        git diff --quiet $expect..$cid -- \
                                ':.' ':!debian/changelog'
-                       etype=Packaging
+                       etypes=Packaging
                        ;;
                Upstream/SAME)
                        git diff --quiet $expect..$cid -- ':debian'
                        ;;
                        ;;
                Upstream/SAME)
                        git diff --quiet $expect..$cid -- ':debian'
                        ;;
-               BreakwaterUpstreamMerge)
+               MergedBreakwaters)
+                       enparents=2
+                       ;;
+               Anchor)
                        break
                        ;;
                esac
                        break
                        ;;
                esac
@@ -106,31 +164,64 @@ t-gdr-good () {
                local cnparents=`printf "%s" "$parents" | wc -w`
                test $cnparents = $enparents
 
                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
 
                case "$parents" in
                *"$expect"*)    ;;
                *)              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
        done
 }
 
 t-some-changes () {
        local token=$1
+       local which=${2:-dum}
+       local fsuffix=$3
 
        t-git-next-date
 
 
        t-git-next-date
 
-       echo >>debian/zorkmid "// debian $token"
-       git add debian/zorkmid
-       git commit -m "DEBIAN add zorkmid ($token)"
+       case "$which" in
+       *d*)
+               echo >>debian/zorkmid$fsuffix "// debian $token"
+               git add debian/zorkmid$fsuffix
+               git commit -m "DEBIAN add zorkmid$fsuffix ($token)"
+               ;;
+       esac
 
 
-       echo >>src.c "// upstream $token"
-       git commit -a -m "UPSTREAM edit src.c ($token)"
+       case "$which" in
+       *u*)
+               echo >>src$fsuffix.c "// upstream $token"
+               git add src$fsuffix.c
+               git commit -m "UPSTREAM edit src$fsuffix.c ($token)"
+               ;;
+       esac
 
 
-       for f in debian/zorkmid src.c; do
-               echo "// both! $token" >>$f
-               git add $f
-       done
-       git commit -m "MIXED add both ($token)"
+       case "$which" in
+       *m*)
+               for f in debian/zorkmid$fsuffix src$fsuffix.c; do
+                       echo "// both! $token" >>$f
+                       git add $f
+               done
+               git commit -m "MIXED add both($fsuffix) ($token)"
+               ;;
+       esac
 
        t-git-next-date
 }
 
        t-git-next-date
 }
@@ -138,11 +229,9 @@ t-some-changes () {
 t-make-new-upstream-tarball () {
        local uv=$1
        git checkout make-upstream
 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"
        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 () {
 }
 
 t-nmu-upload-1 () {
@@ -170,7 +259,7 @@ t-nmu-upload-2 () {
 }
 
 t-nmu-upload-3 () {
 }
 
 t-nmu-upload-3 () {
-       t-dch-commit -r sid
+       t-dch-commit-r
 
        t-dgit -wgf build-source
 
 
        t-dgit -wgf build-source
 
@@ -203,6 +292,16 @@ t-maintainer-commit-some-changes () {
        t-git-next-date
 }
 
        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
 
 t-nmu-reconciled-good () {
        local nmutree=$1
 
@@ -226,3 +325,53 @@ t-nmu-reconciled-good () {
        git checkout master
        t-dgit -wgf quilt-fixup
 }
        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'
+}