chiark / gitweb /
git-debpush: Defend against git-deborig #931509
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 6 Jul 2019 23:09:14 +0000 (00:09 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 7 Jul 2019 10:18:17 +0000 (11:18 +0100)
Without this, when git-deborig fails and #931509 isn't fixed,
git-debpush will silently exit with a nonzero exit status which is
very unfriendly.

With this change it does something like this:
  git-debpush: git-deborig failed; maybe try git-debpush --upstream=TAG
  fatal: Invalid object name 'refs/tags/couldn't find any of the following tags'.
It then exits status 127.  This is obviously daft, but making this
any better is even more complex.

When git-deborig is fixed it will do this:
  couldn't find any of the following tags: 1.0, v1.0, upstream/1.0
  tell me a tag or branch head to make an orig.tar from: git deborig --just-print '--version=1.0-1' COMMITTISH
  git-debpush: git-deborig failed; maybe try git-debpush --upstream=TAG
which is still not brilliant but I guess it will do.

The downside, if it is one, is that we lose git-deborig's original
exit status.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Acked-by: Sean Whitton <spwhitton@spwhitton.name>
git-debpush

index 5ffbd52c9e4b54012be49445ea75742e4df013bb..ae5f20f0ea967535d0cdb04a9f6619636b829391 100755 (executable)
@@ -216,8 +216,23 @@ esac
 upstream_info=""
 if $upstream; then
     if [ "x$upstream_tag" = x ]; then
-       upstream_tag=$(git deborig --just-print --version="$version" \
-                          | head -n1)
+       upstream_tag=$(
+           set +e
+           git deborig --just-print --version="$version" \
+                          | head -n1
+           ps="${PIPESTATUS[*]}"
+           set -e
+           case "$ps" in
+               "0 0"|"141 0") ;; # ok or SIGPIPE
+               *" 0")
+                   echo >&2 \
+ "$us: git-deborig failed; maybe try $us --upstream=TAG"
+                   exit 0
+                   ;;
+               *) exit 127; # presumably head will have complained
+           esac
+       )
+       if [ "x$upstream_tag" = x ]; then exit 127; fi
     fi
     upstream_committish=$(git rev-parse "refs/tags/${upstream_tag}"^{})
     upstream_info=" upstream-tag=$upstream_tag upstream=$upstream_committish"