Your message dated Mon, 22 Jul 2019 21:08:27 +0000
with message-id <[email protected]>
and subject line Bug#932459: fixed in dgit 9.5
has caused the Debian Bug report #932459,
regarding git-debpush: support forcing individual checks
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
932459: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=932459
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: git-debpush
Version: 9.3
Tags: patch

Hello,

Please find attached patches to make git-debpush support forcing
individual checks.

Also available in branch 'git-debpush-force-check-v1' of repo
<https://git.spwhitton.name/dgit>.

The tagupl, tagupl-baredebian and tagupl-native checks pass under
tests/using-intree.

-- 
Sean Whitton
From 01e082f0dc1bb5fcb2b3de8258db93904f0004aa Mon Sep 17 00:00:00 2001
From: Sean Whitton <[email protected]>
Date: Fri, 19 Jul 2019 16:22:50 +0100
Subject: [PATCH 1/3] git-debpush(1): Correct description of --force

Checks are still performed, but turned from errors into warnings.

Signed-off-by: Sean Whitton <[email protected]>
---
 git-debpush.1.pod | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/git-debpush.1.pod b/git-debpush.1.pod
index 0cd274d7..242bf677 100644
--- a/git-debpush.1.pod
+++ b/git-debpush.1.pod
@@ -148,7 +148,7 @@ Just tag, don't push.
 
 =item B<--force>|B<-f>
 
-Don't perform checks designed to prevent broken uploads.
+Ignore the results of all checks designed to prevent broken uploads.
 
 =item B<-u> I<keyid>
 
-- 
2.20.1

From a9a967bac26667eaa6bb235bba1a181d781f3e54 Mon Sep 17 00:00:00 2001
From: Sean Whitton <[email protected]>
Date: Fri, 19 Jul 2019 16:33:01 +0100
Subject: [PATCH 2/3] git-debpush: Subheaders

No functional change.

Signed-off-by: Sean Whitton <[email protected]>
---
 git-debpush | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/git-debpush b/git-debpush
index 0ddbfc47..e2ea2b64 100755
--- a/git-debpush
+++ b/git-debpush
@@ -35,7 +35,7 @@ set -o pipefail
 #   mode; if there is a previous tag, and no quilt mode provided, assume
 #   same quilt mode as in previous tag created by this script
 
-# ---- Helper functions and variables
+# **** Helper functions and variables ****
 
 us="$(basename $0)"
 
@@ -86,7 +86,7 @@ find_last_tag () {
     set -o pipefail
 }
 
-# ---- Parse command line
+# **** Parse command line ****
 
 getopt=$(getopt -s bash -o 'nfu:' \
               -l 'no-push,force,branch:,remote:,distro:,upstream:,quilt:,gbp,dpm,\
@@ -137,7 +137,7 @@ case "$quilt_mode" in
     *) badusage "invalid quilt mode: $quilt_mode" ;;
 esac
 
-# ---- Gather git information
+# **** Gather git information ****
 
 remoteconfigs=()
 to_push=()
@@ -186,7 +186,7 @@ if $pushing && [ "x$remote" = "x" ]; then
     fi
 fi
 
-# ---- Gather source package information
+# **** Gather source package information ****
 
 temp=$(mktemp -d)
 trap cleanup EXIT
@@ -216,7 +216,7 @@ case "$format" in
 	;;
 esac
 
-# ---- Gather git history information
+# **** Gather git history information ****
 
 last_debian_tag=$(find_last_tag "debian/")
 last_archive_tag=$(find_last_tag "archive/debian/")
@@ -247,12 +247,16 @@ if $upstream; then
     to_push+=("$upstream_tag")
 fi
 
-# ---- Useful sanity checks
+# **** Useful sanity checks ****
+
+# ---- UNRELEASED suite
 
 if [ "$target" = "UNRELEASED" ]; then
     fail_check "UNRELEASED changelog"
 fi
 
+# ---- Pushing dgit view to maintainer view
+
 if ! [ "x$last_debian_tag" = "x" ] && ! [ "x$last_archive_tag" = "x" ]; then
     last_debian_tag_c=$(git rev-parse "$last_debian_tag"^{})
     last_archive_tag_c=$(git rev-parse "$last_archive_tag"^{})
@@ -264,6 +268,8 @@ if ! [ "x$last_debian_tag" = "x" ] && ! [ "x$last_archive_tag" = "x" ]; then
     fi
 fi
 
+# ---- Targeting different suite
+
 if ! [ "x$last_debian_tag" = "x" ]; then
     temp=$(mktemp -d)
     trap cleanup EXIT
@@ -279,6 +285,8 @@ if ! [ "x$last_debian_tag" = "x" ]; then
     fi
 fi
 
+# ---- Upstream tag is not ancestor of $branch
+
 if ! [ "x$upstream_tag" = "x" ] \
         && ! git merge-base --is-ancestor "$upstream_tag" "$branch" \
         && ! [ "$quilt_mode" = "baredebian" ]; then
@@ -286,12 +294,13 @@ if ! [ "x$upstream_tag" = "x" ] \
  "upstream tag $upstream_tag is not an ancestor of $branch; probably a mistake"
 fi
 
+# ---- Summary
 
 if ! $force && $failed_check; then
     fail "some checks failed; you can override with --force"
 fi
 
-# ---- Create the git tag
+# **** Create the git tag ****
 
 # convert according to DEP-14 rules
 git_version=$(echo $version | tr ':~' '%_' | sed 's/\.(?=\.|$|lock$)/.#/g')
@@ -330,7 +339,7 @@ $source release $version for $target
 [dgit please-upload$upstream_info]
 EOF
 
-# ---- Do a git push
+# **** Do a git push ****
 
 if $pushing; then
     git push "$remote" "${to_push[@]}"
-- 
2.20.1

From d4eb98459932da1925744297fdf8ddf1cb80642e Mon Sep 17 00:00:00 2001
From: Sean Whitton <[email protected]>
Date: Fri, 19 Jul 2019 17:11:22 +0100
Subject: [PATCH 3/3] git-debpush: Support forcing individual checks

While using git-debpush interactively, if the user sees that checks
have failed which they know to be safe to override, they typically
just use --force or -f.

However, it is useful for scripts to be able to skip single checks,
and if the user knows that a check will fail in advance of running
git-debpush, it is convenient to be able to specify that but still see
whether other checks fail, where those failures were unexpected.  This
can avoid the user having to run git-debpush more than once.

The list of any checks which failed but were overridden is not stored
in the generated tag.  git-debpush's checks are for the convenience of
the local user only, and the list of failed but overridden checks is
not considered to be metadata for the upload.  Not recording failed
but overridden checks in the git tag keeps git-debpush's checking
independent of its wrapping of git-tag and git-push, which makes
git-debpush simpler and easier to understand.  The complexity is on
the server side, in tag2upload.

git-debpush(1): We want the list of checks that can be overridden to
be at the bottom of the list of options because most users will not
need to look at it.  We also want the description of --force|-f to be
adjacent to the description of --force=<check>.  So move the
description of --force|-f to the end of the list of options.

Signed-off-by: Sean Whitton <[email protected]>
---
 git-debpush        | 48 +++++++++++++++++++++++++++++++++++++---------
 git-debpush.1.pod  | 38 ++++++++++++++++++++++++++++++++----
 tests/tests/tagupl |  9 ++++++++-
 3 files changed, 81 insertions(+), 14 deletions(-)

diff --git a/git-debpush b/git-debpush
index e2ea2b64..86e94621 100755
--- a/git-debpush
+++ b/git-debpush
@@ -65,7 +65,17 @@ get_file_from_ref () {
 
 failed_check=false
 fail_check () {
-    if $force; then
+    local check=$1; shift
+    local check_is_forced=false
+
+    for c in "${force[@]}"; do
+        if [ "$c" = "$check" ]; then
+            check_is_forced=true
+            break
+        fi
+    done
+
+    if $force_all || $check_is_forced; then
         echo >&2 "$us: warning: $*"
     else
         echo >&2 "$us: $*"
@@ -89,7 +99,7 @@ find_last_tag () {
 # **** Parse command line ****
 
 getopt=$(getopt -s bash -o 'nfu:' \
-              -l 'no-push,force,branch:,remote:,distro:,upstream:,quilt:,gbp,dpm,\
+              -l 'no-push,force::,branch:,remote:,distro:,upstream:,quilt:,gbp,dpm,\
 baredebian,baredebian+git,baredebian+tarball' \
               -n "$us" -- "$@")
 eval "set - $getopt"
@@ -97,7 +107,8 @@ set -e$DGIT_TEST_DEBPUSH_DEBUG
 
 git_tag_opts=()
 pushing=true
-force=false
+force_all=false
+force=()
 distro=debian
 quilt_mode=""
 branch="HEAD"
@@ -106,7 +117,7 @@ while true; do
     case "$1" in
         '-n'|'--no-push') pushing=false;           shift;   continue ;;
 	'-u')             git_tag_opts+=(-u "$2"); shift 2; continue ;;
-        '-f'|'--force')   force=true;              shift;   continue ;;
+        '-f')             force_all=true;          shift;   continue ;;
         '--gbp')          quilt_mode='gbp';        shift;   continue ;;
         '--dpm')          quilt_mode='dpm';        shift;   continue ;;
         '--branch')       branch=$2;               shift 2; continue ;;
@@ -121,6 +132,20 @@ while true; do
             fail "--baredebian+tarball quilt mode not supported"
             ;;
 
+        # we require the long form of the option to skip individual
+        # checks, not permitting `-f check`, to avoid problems if we
+        # later want to introduce positional args
+        '--force')
+            case "$2" in
+                'suite'|'upstream-nonancestor'|'unreleased'|'dgit-view')
+                    force+=("$2")                             ;;
+                '')
+                    force_all=true                            ;;
+                *)
+                    fail "invalid name of check to force: $2" ;;
+            esac
+            shift 2; continue ;;
+
         '--') shift; break ;;
 	*) badusage "unknown option $1" ;;
     esac
@@ -252,7 +277,7 @@ fi
 # ---- UNRELEASED suite
 
 if [ "$target" = "UNRELEASED" ]; then
-    fail_check "UNRELEASED changelog"
+    fail_check "unreleased" "UNRELEASED changelog"
 fi
 
 # ---- Pushing dgit view to maintainer view
@@ -263,7 +288,7 @@ if ! [ "x$last_debian_tag" = "x" ] && ! [ "x$last_archive_tag" = "x" ]; then
     if ! [ "$last_debian_tag_c" = "$last_archive_tag_c" ] \
             && git merge-base --is-ancestor \
                    "$last_debian_tag" "$last_archive_tag"; then
-        fail_check \
+        fail_check "dgit-view" \
 "looks like you might be trying to push the dgit view to the maintainer branch?"
     fi
 fi
@@ -280,7 +305,7 @@ if ! [ "x$last_debian_tag" = "x" ]; then
     trap - EXIT
 
     if ! [ "$prev_target" = "$target" ] && ! [ "$target" = "UNRELEASED" ]; then
-        fail_check \
+        fail_check "suite" \
 "last upload targeted $prev_target, now targeting $target; might be a mistake?"
     fi
 fi
@@ -290,13 +315,18 @@ fi
 if ! [ "x$upstream_tag" = "x" ] \
         && ! git merge-base --is-ancestor "$upstream_tag" "$branch" \
         && ! [ "$quilt_mode" = "baredebian" ]; then
-    fail_check \
+    fail_check "upstream-nonancestor" \
  "upstream tag $upstream_tag is not an ancestor of $branch; probably a mistake"
 fi
 
 # ---- Summary
 
-if ! $force && $failed_check; then
+if $failed_check; then
+    # We don't mention the --force=check options here as those are
+    # mainly for use by scripts, or when you already know what check
+    # is going to fail before you invoke git-debpush.  Keep the
+    # script's terminal output as simple as possible.  No "see the
+    # manpage"!
     fail "some checks failed; you can override with --force"
 fi
 
diff --git a/git-debpush.1.pod b/git-debpush.1.pod
index 242bf677..ab0e75a4 100644
--- a/git-debpush.1.pod
+++ b/git-debpush.1.pod
@@ -146,10 +146,6 @@ upload your package.
 
 Just tag, don't push.
 
-=item B<--force>|B<-f>
-
-Ignore the results of all checks designed to prevent broken uploads.
-
 =item B<-u> I<keyid>
 
 Passed on to git-tag(1).
@@ -182,6 +178,40 @@ git would use if you typed "git push BRANCH".
 What distribution name to embed in the signed tag.  Defaults to
 "debian".
 
+=item B<--force>|B<-f>
+
+Ignore the results of all checks designed to prevent broken uploads.
+
+=item B<--force>=I<check>
+
+Override individual checks designed to prevent broken uploads.  May be
+specified more than once.  Valid values for I<check> are:
+
+=over 4
+
+=item B<suite>
+
+Permit uploading to a different suite than the target of the most
+recent upload made with B<git-debpush> (e.g. when uploading to
+Debian unstable after uploading to Debian experimental).
+
+=item B<upstream-nonancestor>
+
+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<unreleased>
+
+Permit upload to a suite called UNRELEASED.
+
+=item B<dgit-view>
+
+Ignore apparently pushing the dgit view of a package (as produced by
+B<dgit clone>) to the maintainer branch, where the dgit view and the
+maintainer view of the package are not identical.
+
+=back
+
 =back
 
 =head1 SEE ALSO
diff --git a/tests/tests/tagupl b/tests/tests/tagupl
index 3b0a7a09..b16367a1 100755
--- a/tests/tests/tagupl
+++ b/tests/tests/tagupl
@@ -29,7 +29,14 @@ tagname=test-dummy/$v
 
 t-expect-fail "upstream tag $upstreamtag is not an ancestor of refs/heads/master" \
 t-tagupl-test --quilt=gbp --upstream=$upstreamtag
-t-tagupl-test --quilt=gbp --force --upstream=$upstreamtag
+
+t-expect-fail "invalid name of check to force: upstream" \
+t-tagupl-test --quilt=gbp --force=upstream --upstream=$upstreamtag
+
+t-expect-fail "upstream tag $upstreamtag is not an ancestor of refs/heads/master" \
+t-tagupl-test --quilt=gbp --force=suite --upstream=$upstreamtag
+
+t-tagupl-test --quilt=gbp --force=suite --force=upstream-nonancestor --upstream=$upstreamtag
 t-pushed-good master
 
 # todo: test each miss/rejection
-- 
2.20.1

Attachment: signature.asc
Description: PGP signature


--- End Message ---
--- Begin Message ---
Source: dgit
Source-Version: 9.5

We believe that the bug you reported is fixed in the latest version of
dgit, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to [email protected],
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Sean Whitton <[email protected]> (supplier of updated dgit package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [email protected])


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Format: 1.8
Date: Mon, 22 Jul 2019 21:38:19 +0100
Source: dgit
Architecture: source
Version: 9.5
Distribution: unstable
Urgency: medium
Maintainer: Ian Jackson <[email protected]>
Changed-By: Sean Whitton <[email protected]>
Closes: 857490 926656 932459 932477 932536 932612 932630 932694
Changes:
 dgit (9.5) unstable; urgency=medium
 .
   git-debpush [Sean Whitton]:
   * Support ignoring individual checks with --force=check.  Closes:#932459.
   * Check upstream source is identical in the upstream tag.
   * Check that patches are (un)applicable.  Closes:#932477.
   * Check for an unstitched git-debrebase branch.  Closes:#932612.
   * Check for explicitly pushing detached HEAD.
 .
   dgit clone [Ian Jackson]:
   * No longer create an "origin" remote.  Closes:#932694.
 .
   Documentation:
   * dgit-maint-bpo(7): new manpage for maintainers of official Debian
     backports.  Closes:#857490.  [Sean Whitton]
   * git-debrebase(1): make this manpage a less intimidating entry point.
     Closes:#926656.
     [Sean Whitton & Ian Jackson; prompted by feedback from Sam Hartman]
 .
   Miscellaneous:
   * Correct the description of --force in git-debpush(1) [Sean Whitton].
   * git-debrebase(*): fix some crossreferences [Sean Whitton].
     Closes:#932536.
   * Break out git-playtree-setup and rewrite in shell. [Ian Jackson]
   * Fix organisation copyright attribution for Matthew Vernon's
     contributions.  Closes:#932630.
   * HACKING: new document for helping people work on the code. [Ian Jackson]
   * Update Vcs-Git etc. to point to salsa.
Checksums-Sha1:
 ca180efe4ebb7647f9641e41585e5e8fb805fbfc 2131 dgit_9.5.dsc
 8d76f681bd3f1f9d606d32ae445e20c19f4a38b7 688952 dgit_9.5.tar.gz
Checksums-Sha256:
 4c0eb3302e6d0529b8601c2a8ce448cc7e9557de53816bee64589047cbc51e7a 2131 
dgit_9.5.dsc
 d7824911126f7c1a3488d90a05b0bbd257ae7ea5c66c2ab0761dc67e355c11a8 688952 
dgit_9.5.tar.gz
Files:
 62e98c4739b46a16c1becbb63f5d66c2 2131 devel optional dgit_9.5.dsc
 af998cb37cc3c54c1b165a5b39ef1a63 688952 devel optional dgit_9.5.tar.gz

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEm5FwB64DDjbk/CSLaVt65L8GYkAFAl02H1cACgkQaVt65L8G
YkAeDw//WCFSJDhusp7JUVpnGKAwwfb1BmqOYYqJy6kH/nmAOvkdCeNGFFuncIAb
Ohr9dPiZdaOSFwvxvV7peoET9EYlryHgWu+bJ5GC60g5O4OYF9urJl3Q7p2/qxxu
kXBsIz2bj4DjvGuU8FsVx7TN7ca/394X5oPXr0PKNp+DMEcHzHgrGBcHYj94x2NU
xhVfd71jX6nBSVX6vBtBqrbFP4ZKHj8SthKdfVxfWHWYTBUUjiDX6Kmlibju40h5
pOEyCbw1QLZPV4NEd0ItwnblYa/PMZbUtWphbAovJVGoiCsUsJQyaDnCEQt3JfrZ
L7JTRRXPuj08xVmYeKyLYC4iw0G5HYRybEvxrTFrl26iBITr9hsb46tNDGO/RMKA
TdHcwg/uD11R7HmXUIfmMDVeZ0uhYuWAcGBeMmKY9Op3nKTNXN3nFyIueecE8Lhg
QqsfQAA/k8EX24ohJcZEMVxeInNusVcS6UF5yPqesfN5VgN4iHNbWFoZzuF1eHdo
q0uaZHmquyBamZ2z+sIlEjl4JLRoob1/t2il77/FvRrGCjoVlyQM3hbmhgFY+G+v
+zxdJCliBU8fsgjyFecoUvv2KFoF4DJzmy/B0NYQUCesM8DTQFT74kPnziiWjDH6
pk2DCQ1y0bKm8e/bZMObEBpGg+dwkVf8+st1lPzYsKNjjG9jM8s=
=ih71
-----END PGP SIGNATURE-----

--- End Message ---

Reply via email to