chiark / gitweb /
git-debrebase: test: check branch structure
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 16 Feb 2018 11:49:05 +0000 (11:49 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 16 Jun 2018 11:25:49 +0000 (12:25 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
tests/lib-gdr
tests/tests/gdr-edits

index 4e08ff7ee8e8496e918de21f04cdfdbb8657dfeb..fb58bf9c08a1556d4297acc0af99e64c8a52bc6d 100644 (file)
@@ -11,3 +11,72 @@ t-git-debrebase () {
        : '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
 '
 }
+
+t-gdr-branch-structure () {
+       local state=$1
+       # state should be one of
+       #   laundered
+       #   stitched
+       #   patches
+
+       case $state in
+       laundered)      etype=Upstream  ;;
+       stitched)       etype=Pseudomerge ;;
+       patches)        etype=XXX-TODO ;;
+       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=$etype
+               if [ "x$ctype" = "x$etype" ]; 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)
+                       expect=${info#Contributor=}
+                       expect=${expect%% *}
+                       enparents=2
+                       git diff --quiet $expect..$cid
+                       etype=Upstream
+                       ;;
+               Packaging/SAME|\
+               Packaging/Upstream)
+                       git diff --quiet $expect..$cid -- ':.' ':!debian' 
+                       git diff --quiet $expect..$cid -- ':debian/patches'
+                       etype=Packaging
+                       ;;
+               Changelog/Packaging|\
+               Changelog/Upstream)
+                       git diff --quiet $expect..$cid -- \
+                               ':.' ':!debian/changelog'
+                       etype=Packaging
+                       ;;
+               Upstream/SAME)
+                       git diff --quiet $expect..$cid -- ':debian'
+                       ;;
+               BreakwaterUpstreamMerge/Upstream| \
+               BreakwaterUpstreamMerge/Packaging)
+                       break
+                       ;;
+               *)
+                       fail "etype=$etype ctype=$ctype cetype=$cetype $cid"
+                       ;;
+               esac
+
+               local cnparents=`printf "%s" "$parents" | wc -w`
+               test $cnparents = $enparents
+
+               case "$parents" in
+               *"$expect"*)    ;;
+               *)              fail 'unexpected parent' ;;
+               esac
+
+       done
+}
index ddb354d8f870036425f70554a4a3fedf12a6372c..70735e9e3991e0ec7b8c449c3086deedeb4f9600 100755 (executable)
@@ -30,7 +30,7 @@ t-git-debrebase
 
 git diff t.before -- ':.' ':!debian/patches'
 
-: todo 'check that the branch has the expected structure'
+t-gdr-branch-structure laundered
 
 t-git-debrebase stitch --prose=wombat