set -u
# version of this script
-backports_dsc_version=0.1
+backports_dsc_version=0.2
############
# Defaults #
############
-bp_distribution=${BACKPORT_DISTRIBUTION:-lenny-backports}
-bp_version_suffix=${BACKPORT_VERSION_SUFFIX:-bpo50}
+bp_distribution=${BACKPORT_DISTRIBUTION:-squeeze-backports}
+bp_version_prefix=${BACKPORT_VERSION_PREFIX:-\~}
+bp_version_suffix=${BACKPORT_VERSION_SUFFIX:-bpo60}
bp_maintainer_name=${DEBFULLNAME:-unamed}
bp_maintainer_email=${DEBEMAIL:-unknown}
bp_update_maintainer=1
cat << EOT
backport-dsc $backports_dsc_version
-Copyright (C) 2010 Michael Hanke <michael.hanke@gmail.com>
+Copyright (C) 2010-2012 Michael Hanke <michael.hanke@gmail.com>
Licensed under GNU Public License version 2 or later.
This is free software; see the source for copying conditions. There is NO
via arbitrary 'sed' expressions.
Backport relevant patches can be embedded in source packages for use with
-backport-dsc. The distribution name (see --target-dsitribution) serves as an
+backport-dsc. The distribution name (see --target-distribution) serves as an
identifier to search for patches in the source package that shall be applied
for a particular distribution. For packages using format the 3.0 (quilt),
backport-dsc will look for debian/patches/series-<distname> and append it to
Options:
-d <distname>, --target-distribution <distname>
- Arbitrary distribution name (e.g. lenny-backports). This will be the target
+ Arbitrary distribution name (e.g. squeeze-backports). This will be the target
distribution used for the backport changelog entry. The distribution name
also serves as an identifier to search for backport patches in the source
package.
--mod-control <expression>
sed expression to modify debian/control. The option can be given multiple
- times and all expressions wil be passed to sed in the order of appearance.
+ times and all expressions will be passed to sed in the order of appearance.
This can be used to, e.g. change build or runtime dependencies.
--no-backport-patches
backport and identify herself as the maintainer.
-s <string>, --version-suffix <string>
- Version suffix that will be appended to the orginal source package version,
+ Version suffix that will be appended to the original source package version,
ideally indicating the backport target distribution. The resulting package
version will follow this schema:
- <originalversion>~<suffix>+<digit>
+ <originalversion><prefix><suffix>+<digit>
- e.g.: 1.2.3-4~bpo50+1
+ e.g.: 1.2.3-4~bpo60+1 with default <prefix>=~
+
+-p <string>, --version-prefix <string>
+ Version prefix that will be prepended to the backport version. By default it
+ is ~ but want to be changed (e.g. to +) for forward-porting to next releases.
--verbose
Enable additional status messages.
Create backport for some custom distribution with custom version suffix.
backport-dsc -d ubuntu-lucid -v myppa --mod-control "-e 's/iceweasel/firefox/g'" examplepkg_1.2.3-4.dsc
- Create a backport for a fake ubuntu PPA repository, replacing all occurences
+ Create a backport for a fake Ubuntu PPA repository, replacing all occurrences
of iceweasel in debian/control with firefox.
be sourced by backport-dsc. The following variables (each shown with an
example setting) can be used to pre-configure backport-dsc:
-bp_distribution="lenny-backports"
+bp_distribution="squeeze-backports"
Backport target distribution (see --backport-distribution)
-bp_version_suffix="bpo50"
+bp_version_prefix="~"
+ Version prefix (see --version-prefix)
+
+bp_version_suffix="bpo60"
Version suffix (see --version-suffix)
-bp_maintainer_name="Unkown fellow"
+bp_maintainer_name="Unknown fellow"
Name of the backport maintainer (see --maint-name)
bp_maintainer_email="user@example.net"
# Note that we use `"$@"' to let each command-line parameter expand to a
# separate word. The quotes around `$@' are essential!
# We need CLOPTS as the `eval set --' would nuke the return value of getopt.
-CLOPTS=`getopt -o h,d:,s: --long help,verbose-help,version,target-distribution:,version-suffix:,maint-name:,maint-email:,no-color,no-backport-patches,verbose,mod-control:,no-maintainer-update, -n 'backport-dsc' -- "$@"`
+CLOPTS=`getopt -o h,d:,s:,p: --long help,verbose-help,version,target-distribution:,version-suffix:,version-prefix:,maint-name:,maint-email:,no-color,no-backport-patches,verbose,mod-control:,no-maintainer-update, -n 'backport-dsc' -- "$@"`
if [ $? != 0 ] ; then
echo "Terminating..." >&2
while true ; do
case "$1" in
-d|--target-distribution) shift; bp_distribution=$1; shift;;
- -s|--version-suffix) shift; backport_version=$1; shift;;
+ -s|--version-suffix) shift; bp_version_suffix=$1; shift;;
+ -p|--version-prefix) shift; bp_version_prefix=$1; shift;;
--maint-name) shift; bp_maintainer_name=$1; shift;;
--maint-email) shift; bp_maintainer_email=$1; shift;;
--no-maintainer-update) bp_update_maintainer=0; shift;;
wdir=$(mktemp -d -t backport-dsc.XXXXXX)
sdir=$wdir/${src_name}-${src_version}
-bp_version="~${bp_version_suffix}+"
+bp_version="${bp_version_prefix}${bp_version_suffix}+"
# setup environment for dpkg
# extract the original source package
dpkg-source -x $dsc_file $sdir
# note backport in changelog
+# This will create a new changelog entry
+# All subsequent calls to dch should use -a to assure that those entries
+# are appended to the existing entry (otherwise with wheezy new entries will be added)
$bp_dch_cmd -D ${bp_distribution} -l "${bp_version}" "Backported for ${bp_distribution}."
if [ "$bp_update_maintainer" = 1 ]; then
printf "${green}Enabling additional quilt patch series for $bp_distribution.\n${NC}"
fi
cat $sdir/debian/patches/series-$bp_distribution >> $sdir/debian/patches/series
- $bp_dch_cmd "Added 'series-$bp_distribution' in quilt patch series."
+ $bp_dch_cmd -a "Added 'series-$bp_distribution' in quilt patch series."
fi
# look for backport patches
for p in $(ls -1 $sdir/debian/patches/$bp_distribution-dsc-patch* 2> /dev/null || true); do
printf "${green}Applying additional patch $(basename "$p").\n${NC}"
fi
patch -p1 --directory=$sdir < "$p"
- $bp_dch_cmd "Applied additional patch from debian/patches/$(basename "$p")."
+ $bp_dch_cmd -a "Applied additional patch from debian/patches/$(basename "$p")."
done
fi
printf "${green}Modifying debian/control with given instructions.\n${NC}"
fi
bash -c "sed -i $bp_mod_control $sdir/debian/control"
- $bp_dch_cmd "Used following sed expression to modify debian/control:$bp_mod_control."
+ $bp_dch_cmd -a "Used following sed expression to modify debian/control:$bp_mod_control."
fi
# extract final version