chiark / gitweb /
Test suite: quilt-gbp: Provide and use t-gbp-pushed-good
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 4 Sep 2016 19:47:00 +0000 (20:47 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 11 Sep 2016 17:53:45 +0000 (18:53 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
tests/lib
tests/tests/quilt-gbp

index 216ec81..bf3237d 100644 (file)
--- a/tests/lib
+++ b/tests/lib
@@ -566,6 +566,84 @@ t-pushed-good-core () {
        git verify-tag `t-v-tag`
 }
 
+t-gbp-pushed-good--unpack () {
+       cd $tmp
+       rm -rf t-unpack
+       mkdir t-unpack
+       cd t-unpack
+       ln -s $tmp/mirror/pool/main/*.orig*.tar* .
+       ln -s $incoming_dsc .
+       ln -s ${incoming_dsc/.dsc/.debian.tar}* .
+       dpkg-source "$@" -x *.dsc
+       cd */.
+       git init
+       git fetch ../../$p "refs/tags/*:refs/tags/*"
+}
+
+t-gbp-pushed-good--checkprep () {
+       git add -Af .
+       git rm --cached -r --ignore-unmatch .pc
+}
+
+t-gbp-pushed-good--checkdiff () {
+       local tag=$1
+       t-gbp-pushed-good--checkprep
+       t-output "" git diff --stat --cached $tag
+}
+
+t-gbp-pushed-good () {
+       local suite=${1:-sid}
+       local dep14tag=refs/tags/test-dummy/${v//\~/_}
+       local dgittag=$(t-v-tag)
+       t-output "" git status --porcelain
+       t-ref-head
+       t-refs-same $dep14tag
+       git merge-base --is-ancestor $dep14tag $dgittag
+
+       t-refs-same-start
+       t-pushed-good-core
+
+       t-incoming-dsc
+
+       t-gbp-pushed-good--unpack
+       t-gbp-pushed-good--checkdiff $dgittag
+
+       # Right, now we want to check that the maintainer tree and
+       # the dgit tree differ in exactly the ways we expect.  We
+       # achieve this by trying to reconstruct the maintainer tree
+       # from the dgit tree.
+
+       # So, unpack it withut the patches applied
+       t-gbp-pushed-good--unpack --skip-patches
+
+       # dgit might have added a .gitignore patch, which we need to
+       # drop and remove
+       perl -i -pe '
+               next unless $_ eq "auto-gitignore\n";
+               die if $counter++;
+               chomp;
+               rename "debian/patches/$_", "../t-auto-gitignore" or die $!;
+               $_ = "";
+       ' debian/patches/series
+
+       # Now the result should differ only in non-debian/ .gitignores
+       t-gbp-pushed-good--checkprep
+       git diff --cached --name-only $dep14tag >../changed
+       perl -ne '
+               next if !m#^debian/# && m#(^|/)\.gitignore#;
+               die "$_ mismatch";
+       ' <../changed
+
+       # If we actually apply the gitignore patch by hand, it
+       # should be perfect:
+       if [ -f ../t-auto-gitignore ]; then
+               patch --backup-if-mismatch -p1 -u <../t-auto-gitignore
+       fi
+       t-gbp-pushed-good--checkdiff $dep14tag
+
+       cd $tmp/$p
+}
+
 t-commit-build-push-expect-log () {
        local msg=$1
        local mpat=$2
index 271ea2c..e528567 100755 (executable)
@@ -4,6 +4,8 @@ set -e
 
 t-tstunt-parsechangelog
 
+t-newtag
+
 t-gbp-example-prep
 
 t-expect-fail 'quilt fixup cannot be linear' \
@@ -30,7 +32,7 @@ t-ref-head
 
 t-dgit --quilt=gbp push
 
-t-ref-head
+t-gbp-pushed-good
 
 exit 0
 
@@ -38,24 +40,6 @@ exit 0
 
 want to
 
- t-pushed-good XXX need to do something more subtle than check our branch is in repo now:
-
-    # check that:
-    # working tree is still clean
-    # DEP-14 tag refers to our HEAD, unchanged
-    # New dgit tag refers to a descendant
-    # New dgit tag and archive tag and .dsc hash are same
-    # dgit tree can be made by
-    #    - dpkg-source -x on the pushed .dsc
-    #    - modulo .pc
-    # Maintainer tree can be made by
-    #    - dpkg-source -x --skip-patches on the pushed .dsc
-    #    - deleting any auto-gitignore patch and removing it from series
-    #    - modulo .pc
-    # dgit tree can be made by
-    #    - as above, and then dpkg-source --before-build
-    #    - modulo .pc and non-debian/ .gitignores
-
 make a new change
 
 push it