-#!/bin/sh
+#!/bin/bash
. ./vars.sh.frag
RELBRANCH="pending-$PKGNAME"
git fetch origin --prune
+git merge-base --is-ancestor origin/master HEAD || \
+abort 1 "You are not synced with origin/master, please do so before running this script."
+
+if [ "$RERELEASE" = 1 -o "$NOUPDATE" = 1 ]; then
+ REALVER="$(get_existing_version "$PKGDIR")"
+fi
+
if head -n1 "$PKGDIR/debian/changelog" | grep -qv UNRELEASED-FIXME-AUTOGENERATED-DEBCARGO; then
- abort 0 "Package already released."
+ if [ "$RERELEASE" = 1 ]; then
+ run_debcargo
+ ( cd "$PKGDIR" && dch -a "No-op source-only re-upload for Debian Testing Migration." )
+ export REUSE_EXISTING_ORIG_TARBALL=1
+ else
+ abort 0 \
+ "Package already released. If you want to do a source-only re-upload e.g. to" \
+ "hoop-jump through the Debian Testing migration requirements, set RERELEASE=1."
+ fi
fi
if [ -e "$PKGDIR/debian/BLOCK" ]; then
if head -n1 "$PKGDIR/debian/changelog" | grep -qv UNRELEASED-FIXME-AUTOGENERATED-DEBCARGO; then
git checkout "$PREVBRANCH"
- abort 0 "Package already released on branch $RELBRANCH. If that was a mistake then run:\ngit branch -D $RELBRANCH\nAnd re-run this script ($0 $*). You might have to delete the remote branch too:\ngit push --delete origin $RELBRANCH"
+ abort 0 "Package already released on branch $RELBRANCH. If that was a mistake then run:" \
+ " git branch -D $RELBRANCH" \
+ "And re-run this script ($0 $*). You might have to delete the remote branch too:" \
+ " git push --delete origin $RELBRANCH"
fi
( cd "$PKGDIR"
abort 1 "Release attempt failed to run debcargo, probably the package needs updating (./update.sh $*)"
fi
+# sometimes the copyright years need to be updated, try to do this automatically
+if git diff -- "$PKGDIR_REL/debian/copyright.debcargo.hint" | patch -r - --no-backup-if-mismatch "$PKGDIR_REL/debian/copyright"; then
+ git add "$PKGDIR_REL/debian/copyright.debcargo.hint" "$PKGDIR_REL/debian/copyright"
+else
+ git diff -- "$PKGDIR_REL/debian/copyright.debcargo.hint"
+ revert_git_changes
+ abort 1 \
+ "copyright file needs updating; apply the above diff to $PKGDIR_REL/debian/copyright" \
+ "then commit your changes, and run me again."
+fi
+
if ! git diff --exit-code -- "$PKGDIR_REL"; then
revert_git_changes
- abort 1 "Release attempt resulted in git diffs to $PKGDIR_REL, probably the package needs updating (./update.sh $*)"
+ abort 1 \
+ "Release attempt resulted in git diffs to $PKGDIR_REL, probably you need to update the package (./update.sh $*)." \
+ "Alternatively, set NOUPDATE=1 to override this requirement, but please have a good reason."
fi
if ! ( cd build && SOURCEONLY=1 ./build.sh "$CRATE" $VER ); then
DEBVER=$(dpkg-parsechangelog -l $BUILDDIR/debian/changelog -SVersion)
DEBSRC=$(dpkg-parsechangelog -l $BUILDDIR/debian/changelog -SSource)
DEB_HOST_ARCH=$(dpkg-architecture -q DEB_HOST_ARCH)
-cat >&2 <<eof
+
+if [ "$RERELEASE" = 1 ]; then
+
+( cd build && dput "${DEBSRC}_${DEBVER}_source.changes" )
+git push origin "$RELBRANCH"
+git checkout master
+
+cat <<eof
+Source-only re-release of $CRATE uploaded. You need to perform the following steps:
+
+eof
+
+else
+
+cat <<eof
Release of $CRATE ready as a source package in ${BUILDDIR#$PWD/}. You need to
perform the following steps:
cd build && dput ${DEBSRC}_${DEBVER}_source.changes
+For your reference, this source package builds $(grep ^Package build/${CRATE//_/-}/debian/control | wc -l) binary package(s):
+$(sed -ne 's/^Package: //pg' build/hmac/debian/control | tr '\n' ',')
+
If this is a NEW source package or introduces NEW binary packages not already
in the Debian archive, you will need to build a binary package out of it. The
recommended way is to run something like:
cd build && ./build.sh $CRATE $VER && dput ${DEBSRC}_${DEBVER}_${DEB_HOST_ARCH}.changes
-This assumes you followed the "DD instructions" in README.rst, for setting up
-a build environment for release.
+This assumes you followed the "Build environment" instructions in README.rst,
+for setting up a build environment for release.
If the build fails e.g. due to missing Build-Dependencies you should revert
what I did (see below) and package those missing Build-Dependencies first.
git push origin $RELBRANCH && git checkout master
-Merge the pending-release branch when ACCEPTED
-==============================================
+eof
+
+fi
+
+cat >&2 <<eof
+Merge the pending-release branch if/when ACCEPTED
+=================================================
When it's ACCEPTED by the Debian FTP masters, you may then merge this branch
back into the master branch, delete it, and push these updates to origin.
git checkout master && git merge $RELBRANCH && git branch -d $RELBRANCH
git push origin master :$RELBRANCH
-----
+Delete this branch without merging if/when REJECTED
+===================================================
-The above assumes you are a Debian Developer with upload rights. If not, you
-should revert what I just did. To do that, run:
+If your upload is REJECTED, or if you cannot perform an upload in the first
+place e.g. because you are not a Debian Developer, you should revert what I
+just did. To do that, run:
git checkout master && git branch -D $RELBRANCH
-Then ask a Debian Developer to re-run me ($0 $*) on your behalf. Also add your
-crate to the "Ready for upload" list in TODO.rst so it's easy to track.
+Then ask a Debian Developer to re-run me ($0 $*) on your behalf. Also, touch
+and commit ${PKGDIR_REL}/debian/RFS so we can track these easier.
eof