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
signature.asc
Description: PGP signature