From dc6bcd256e972c2bc8a65e077c27ed57745c76eb Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 22 Apr 2018 22:14:55 +0100 Subject: git-debrebase: test suite: New test for subcommands Signed-off-by: Ian Jackson --- debian/tests/control | 2 +- tests/tests/gdr-subcommands | 192 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 193 insertions(+), 1 deletion(-) create mode 100755 tests/tests/gdr-subcommands diff --git a/debian/tests/control b/debian/tests/control index ff8ae85..ee9b7d7 100644 --- a/debian/tests/control +++ b/debian/tests/control @@ -16,7 +16,7 @@ Tests-Directory: tests/tests Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin Restrictions: x-dgit-intree-only x-dgit-git-only -Tests: gdr-diverge-nmu gdr-diverge-nmu-dgit gdr-edits gdr-import-dgit gdr-newupstream-v0 gdr-viagit +Tests: gdr-diverge-nmu gdr-diverge-nmu-dgit gdr-edits gdr-import-dgit gdr-newupstream-v0 gdr-subcommands gdr-viagit Tests-Directory: tests/tests Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, git-buildpackage, libfile-fnmatch-perl, faketime diff --git a/tests/tests/gdr-subcommands b/tests/tests/gdr-subcommands new file mode 100755 index 0000000..6232112 --- /dev/null +++ b/tests/tests/gdr-subcommands @@ -0,0 +1,192 @@ +#!/bin/bash +set -e +. tests/lib + +t-dependencies git-buildpackage libfile-fnmatch-perl faketime + +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" + t-dgit -wgf quilt-fixup + t-some-changes "subcommands $m 2" +} + +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 + + case "$checkletters" in + N*) + t-expect-fail E:. \ + t-git-debrebase $subcmd + t-git-debrebase --noop-ok $subcmd + ;; + [EF]:*) + t-expect-fail "$checkletters" \ + t-git-debrebase $subcmd + continue + ;; + *) + t-git-debrebase $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=check 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 + ;; + esac +} + +Ec="F:xxxdunno" + +# 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 pre-push Ns Nu Sltf Stf +subcmd quick ns Sl Sltf Sl +#subcmd conclude "$Ec" "$Ec" Sltf Sl +#subcmd make-patches sPft sPft uPft uPft +#subcmd dgit-upload-hook Psft Psft SPft SPft +# +# result codes, each one is a check: +# E:$pat } this is an error (must come first) +# F:$pat } arg is passed to expect-fail +# +# 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 -- cgit v1.2.3