# : ${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- # or AddPatches- 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= # nmu-upload-1 # 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 }