# state should be one of
# laundered
# stitched
- # patches
+ # pushed
git diff --quiet ${beforetag-t.before} -- ':.' ':!debian/patches'
- local etype netype bwtip
+ local etypes bwtip
+ LC_MESSAGES=C t-git-debrebase status >../status.check
case $state in
laundered)
- etype=Upstream
+ 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) etype=Pseudomerge ;;
- pushed) etype=AddPatches; netype=Pseudomerge ;;
+ stitched) etypes=Pseudomerge-Upstream ;;
+ pushed) etypes=AddPatches-Pseudomerge-Upstream ;;
+ pushed-interop) etypes=Pseudomerge-AddPatchesInterop-Upstream ;;
esac
t-git-debrebase analyse >../anal.check
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
Packaging/SAME) ;;
Packaging/Upstream) ;;
AddPatches/SAME) ;;
+ AddPatches/AddPatchesInterop) ;;
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
- case "$ctype/$etype" in
+ case "$ctype/$etypes" in
Packaging/Upstream|\
Changelog/Upstream)
if [ "x$bwtip" != x ]; then
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
- 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'
- etype=Packaging
+ etypes=Packaging
;;
AddPatches)
git diff --quiet $expect..$cid -- \
':.' ':!debian/patches'
- etype=$netype
- netype=Upstream
+ etypes=${etypes#*-}
;;
Changelog)
git diff --quiet $expect..$cid -- \
':.' ':!debian/changelog'
- etype=Packaging
+ etypes=Packaging
;;
Upstream/SAME)
git diff --quiet $expect..$cid -- ':debian'
;;
- BreakwaterUpstreamMerge)
+ 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' ;;
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 () {