Hello,

On Sat 20 Jul 2019 at 06:59PM +01, Ian Jackson wrote:

> I'm afraid I don't like this very much.
>
> * Can we lead with a case which switches on the quilt mode ?
>   That will provide a place to add other checks for other quilt modes.
>
> * Please use the git file selector syntax and git-diff --exit-code
>   rather than grepping the output of git diff-tree --numstat.
>
>   You will want to be careful to distinguish exit status 1 meaning
>   "different" from other failures, to avoid something like
>       git: diff: arrgh, my innards have exploded!
>       git-debpush: the upstream source in tag blah is not identical ...
>   So set +e, rc=$?; set -e.
>
> * I think in gbp and unapplied quilt modes, $upstream_tag will always
>   be set by now (if not, then this code is too early), so don't
>   check for that.
>
> * In gbp mode you must tolerate .gitignore differences.

New patch attached addressing all of this -- thanks for the review!

-- 
Sean Whitton
From 203296439394525f60fccc03c93e258a9368680c Mon Sep 17 00:00:00 2001
From: Sean Whitton <spwhit...@spwhitton.name>
Date: Sat, 20 Jul 2019 17:17:06 +0100
Subject: [PATCH] git-debpush: Check upstream source is identical in the
 upstream tag

Closes: #932476

Signed-off-by: Sean Whitton <spwhit...@spwhitton.name>
---
 git-debpush        | 35 +++++++++++++++++++++++++++++++++++
 git-debpush.1.pod  |  6 ++++++
 tests/tests/tagupl |  9 +++++++++
 3 files changed, 50 insertions(+)

diff --git a/git-debpush b/git-debpush
index dee358b2..1bfb0936 100755
--- a/git-debpush
+++ b/git-debpush
@@ -79,6 +79,11 @@ fail_check () {
     fi
 }
 
+fail_check_upstream_nonidentical () {
+    fail_check upstream-nonidentical \
+ "the upstream source in tag $upstream_tag is not identical to the upstream source in $branch"
+}
+
 find_last_tag () {
     local prefix=$1
 
@@ -92,6 +97,23 @@ find_last_tag () {
     set -o pipefail
 }
 
+check_treesame () {
+    local first=$1
+    local second=$2
+    shift 2
+
+    set +e
+    git diff --exit-code "$first".."$second" -- . "$@"
+    git_diff_rc=$?
+    set -e
+
+    if [ $git_diff_rc -le 1 ]; then
+        return $git_diff_rc
+    else
+        fail "'git diff' exited with unexpected code $git_diff_rc"
+    fi
+}
+
 # **** Parse command line ****
 
 getopt=$(getopt -s bash -o 'nfu:' \
@@ -313,6 +335,19 @@ if ! [ "x$upstream_tag" = "x" ] \
  "upstream tag $upstream_tag is not an ancestor of $branch; probably a mistake"
 fi
 
+# ---- Upstream tag tree nonidentical
+
+case "$quilt_mode" in
+    gbp)
+        check_treesame "$upstream_tag" "$branch" ':!debian' ':!**.gitignore' \
+            || fail_check_upstream_nonidentical
+        ;;
+    unapplied)
+        check_treesame "$upstream_tag" "$branch" ':!debian' \
+            || fail_check_upstream_nonidentical
+        ;;
+esac
+
 # ---- Summary
 
 if $failed_check; then
diff --git a/git-debpush.1.pod b/git-debpush.1.pod
index 429148d4..a554fd56 100644
--- a/git-debpush.1.pod
+++ b/git-debpush.1.pod
@@ -200,6 +200,12 @@ Debian unstable after uploading to Debian experimental).
 Ignore the fact that the upstream tag is not an ancestor of the branch
 to be tagged (skipping this check is implied by B<--quilt=baredebian>).
 
+=item B<upstream-nonidentical>
+
+Ignore any differences between the upstream source in the upstream tag
+and the upstream source in the branch to be tagged (this check is only
+run when using B<--quilt=gbp> or B<--quilt=unapplied>).
+
 =item B<unreleased>
 
 Permit upload to a suite called UNRELEASED.
diff --git a/tests/tests/tagupl b/tests/tests/tagupl
index 9845b29b..ddda3565 100755
--- a/tests/tests/tagupl
+++ b/tests/tests/tagupl
@@ -23,10 +23,19 @@ git tag $upstreamtag
 
 git checkout -B master quilt-tip-2
 
+echo foo >bar
+git add bar
+git commit -m"corrupt the upstream source to test upstream-nonidentical check"
+
 t-tagupl-settings
 
 tagname=test-dummy/$v
 
+t-expect-fail "the upstream source in tag $upstreamtag is not identical to the upstream source in refs/heads/master" \
+t-tagupl-test --quilt=gbp --upstream=$upstreamtag
+
+git reset --hard HEAD~1
+
 t-expect-fail "upstream tag $upstreamtag is not an ancestor of refs/heads/master" \
 t-tagupl-test --quilt=gbp --upstream=$upstreamtag
 
-- 
2.20.1

Attachment: signature.asc
Description: PGP signature

Reply via email to