#!/bin/sh set -e usage() { echo >&2 "usage: $0 [options] file.dsc" echo >&2 " -s Sign" echo >&2 " -u DPUT Upload" echo >&2 " -f Force dput" echo >&2 " -D SERIES Distroseries (REQUIRED)" exit 2 } sign= dput= forcedput= series= while getopts su:fD: OPTION; do case $OPTION in s) sign=1;; u) dput=$OPTARG;; f) forcedput=1;; D) series=$OPTARG;; \?) usage;; esac done shift $(($OPTIND - 1)) if [ $# -ne 1 ] || [ -z "$series" ]; then usage fi dscfile=$1 shift tmpdir="tmp.backport.$series.$$" # Extract dpkg-source -x "$dscfile" "$tmpdir" # Tweak changelog cd "$tmpdir" dch --distributor not-ubuntu -D "$series" -b -l "~bazaar1~$series" "Rebuild in PPA for $series." # Trivial source format downgrade magic if [ -f debian/source/format ]; then case $series in hardy|jaunty) if [ -d debian/patches ]; then echo "AUTOMATIC REVERT TO SOURCE FORMAT 1.0, PATCHES BUNDLED AS diff.gz" dch -a "Reverted to source format 1.0, all of debian/patches/ bundles as the .diff.gz." rm -r .pc debian/patches rm debian/source/format else echo "AUTOMATIC REVERT TO SOURCE FORMAT 1.0" dch -a "Trivially reverted to source format 1.0." rm debian/source/format fi ;; esac fi cd .. # Package up again dpkg-source -i -b "$tmpdir" # Generate a .changes cd "$tmpdir" package=`dpkg-parsechangelog | sed -nr 's/^Source: //p'` version=`dpkg-parsechangelog | sed -nr 's/^Version: //p'` dpkg-genchanges -S -sd > "../${package}_${version}_source.changes" cd .. # Clean up rm -rf "$tmpdir" if [ "$sign" ]; then debsign "${package}_${version}_source.changes" fi if [ "$dput" ]; then dput ${forcedput+-f} "$dput" "${package}_${version}_source.changes" fi