Package: devscripts Version: 2.15.3 Severity: wishlist File: /usr/bin/uupdate
This is still applicable to 2.15.8. The current uupdate does not use elaborate packaging tricks dpkg-source implemented. As I mentioned in https://bugs.debian.org/752364 alternative approach may be good idea. Here is a proof of concept code I wrote to support multiple upstream tarball. Please note calling convention and its name are intentionally changed. So when testing this, please be careful. Please see "./uupdate2 --help" how this command works. This command should solve all the reported issues on uupdate in principle. #278797 add option to remove any upstream debian directory before patching (I know this is not exactly as requested but should offer trouble free workflow.) #544638 Support ~ in package versions #570221 not possible to create source package with lower version number #752364 Should support multiple source archives Update of uscan is desirable to have smooth transition. That should be matched to watch version=4 which explicitly support multiple upstream tarballs. Osamu -- Package-specific info: --- /etc/devscripts.conf --- --- ~/.devscripts --- DEBUILD_DPKG_BUILDPACKAGE_OPTS="-i -us -uc" DEBUILD_LINTIAN_OPTS="-i -I --show-overrides" DEBSIGN_KEYID="1DD8D791" -- System Information: Debian Release: 8.1 APT prefers stable-updates APT policy: (500, 'stable-updates'), (500, 'proposed-updates'), (500, 'stable'), (99, 'testing'), (98, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 3.16.0-4-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) Versions of packages devscripts depends on: ii dpkg-dev 1.17.25 ii libc6 2.19-18 ii perl 5.20.2-3+deb8u1 ii python3 3.4.2-2 pn python3:any <none> Versions of packages devscripts recommends: ii at 3.1.16-1 ii curl 7.38.0-4+deb8u2 ii dctrl-tools 2.23 ii debian-keyring 2015.04.10 ii dput 0.9.6.4 ii equivs 2.0.9 ii fakeroot 1.20.2-1 ii file 1:5.22+15-2 ii gnupg 1.4.18-7 ii libdistro-info-perl 0.14 ii libencode-locale-perl 1.03-1 ii libjson-perl 2.61-1 ii liblwp-protocol-https-perl 6.06-2 ii libparse-debcontrol-perl 2.005-4 ii libsoap-lite-perl 1.11-1 ii liburi-perl 1.64-1 ii libwww-perl 6.08-1 ii lintian 2.5.35~bpo8+1 ii man-db 2.7.0.2-5 ii patch 2.7.5-1 ii patchutils 0.3.3-1 ii python3-debian 0.1.27 ii python3-magic 1:5.22+15-2 ii sensible-utils 0.0.9 ii strace 4.9-2 ii unzip 6.0-16 ii wdiff 1.2.2-1 ii wget 1.16-1 ii xz-utils 5.1.1alpha+20120614-2+b3 Versions of packages devscripts suggests: ii bsd-mailx [mailx] 8.1.2-0.20141216cvs-2 ii build-essential 11.7 pn cvs-buildpackage <none> pn debbindiff <none> pn devscripts-el <none> pn gnuplot <none> ii gpgv 1.4.18-7 ii libauthen-sasl-perl 2.1600-1 ii libfile-desktopentry-perl 0.07-1 ii libnet-smtp-ssl-perl 1.01-3 pn libterm-size-perl <none> ii libtimedate-perl 2.3000-2 ii libyaml-syck-perl 1.27-2+b2 ii mutt 1.5.23-3 ii openssh-client [ssh-client] 1:6.7p1-5 pn svn-buildpackage <none> ii w3m 0.5.3-19 -- no debconf information
#!/bin/bash # vim:se tw=78 ai ts=2 sts=2 expandtab: # Copyright 2015 Osamu Aoki <[email protected]> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. ORIGINALPWD=`pwd` PROGNAME=`basename $0` usage () { echo "NAME $PROGNAME - upgrade a source tree using new upstream tarball(s) SYNOPSIS ~~~~~~~~ $PROGNAME <version> [<comp1> <comp2> ...] $PROGNAME [--help|--version] DESCRIPTION ~~~~~~~~~~~ $PROGNAME uses the existing Debianized source tree and the new upstream tarball(s) to create the updated Debianized source tree. The workflow can be summarized as: * Move to the root of the existing Debianized source tree where the debian/ directory exists. * Download the upstream tarball(s) to the ../ directory. * Rename them as * main: <pkg>_<version>.orig.tar.{gz|bz2|lzma|xz} * comp1: <pkg>_<version>.orig-<comp1>.tar.{gz|bz2|lzma|xz} (optional) * comp2: <pkg>_<version>.orig-<comp2>.tar.{gz|bz2|lzma|xz} (optional) * ... * Execute this command in the root of the existing Debianized source tree. This command accesses following files in the existing source tree: * debian/changelog -- source package name and current package version * debian/source/format -- this is desirable to be 3.0 (quilt) The <pkg> part of the filename need to be matched with the source package name in the debian/changelog. For the normal packaging of the single upstream tarball, <version> is the only argument which indicates the next upstream version. The source package version of the updated Debianized source tree is generated from this <version> by adding epoch if it is previously used and initial Debian revision (-1 for Debian, -0ubuntu1 for Ubuntu). For the packaging of the multiple upstream tarballs, the secondary tarballs need to be renamed to <pkg>_<version>.orig-<compX>.tar.gz etc. in advance . These are unpacked by this command under the <compX>/ directory within the source tree. So these renamed filename may not be similar to the original secondar upstream tarballs. $PROGNAME [--help|--version] show this message or give version information. ENVIRONMENT ~~~~~~~~~~~ Id environmet variable $DEBUG is set to a non-zero string, this commands print out its internal states and do not remove temporary files. AUTHOR ~~~~~~ Copyright 2015, Osamu Aoki <[email protected]> This is a complete rewite of the uupdate command by * 1996 Christoph Lameter * 1999 - 2003 Julian Gilbey <[email protected]> NOTE ~~~~ This command uses \"dpkg-source -x\" as its backend to do the real work while coping with many details of the latest Debian source package formats with accuracy and simplicity. Features such as renaming and moving upstream tarballs are skipped since these are mostle covered by other tools these days. (uscan+mk-origtargz for updating the existing packages and debmake/dh_make the for new packages. For multiple upstream arballs, some manual operation is required still.) " } version () { echo "This is $PROGNAME, from the Debian devscripts package, version ###VERSION### Copyright 2015, Osamu Aoki <[email protected]> This program comes with ABSOLUTELY NO WARRANTY. You are free to redistribute this code under the terms of the GNU General Public License, version 2 or later. " } if which dpkg-vendor >/dev/null 2>&1; then VENDER="$(dpkg-vendor --query Vendor 2>/dev/null|tr 'A-Z' 'a-z')" case "$VENDER" in debian) REV="1" ;; *) REV="0${VENDER}1" ;; esac else REV="1" fi # Process Parameters case $1 in --help) usage; exit 0 ;; --version) version; exit 0 ;; esac case $# in 0) usage; exit 0 ;; *) NEW_VERSION="$1" ;; esac shift COMPONENTS="$@" if [ -n "$DEBUG" ]; then echo "NEW_VERSION=$NEW_VERSION" INDEX=1 for C in $COMPONENTS; do echo "COMPONENT$INDEX=$C" INDEX=$(($INDEX+1)) done fi # Sanity checks if [ ! -d debian ]; then echo "$PROGNAME: cannot find debian/ directory." >&2 echo "Are you in the debianized source tree?" >&2 echo "You may wish to run debmake or dh_make first." >&2 exit 1 fi if [ ! -x debian/rules ]; then echo "$PROGNAME: cannot find debian/rules." >&2 echo "Are you in the top directory of the old source tree?" >&2 exit 1 fi if [ ! -f debian/changelog ]; then echo "$PROGNAME: cannot find debian/changelog." >&2 echo "Are you in the top directory of the old source tree?" >&2 exit 1 fi # Get Parameters from the old source tree if [ -e debian/source -a -e debian/source/format ]; then FORMAT=`cat debian/source/format` else FORMAT='1.0' fi PACKAGE="`dpkg-parsechangelog -SSource`" if [ -z "$PACKAGE" ]; then echo "$PROGNAME: cannot find the source package name in debian/changelog." >&2 exit 1 fi # Variable names follow the convention of old uupdate VERSION="`dpkg-parsechangelog -SVersion`" if [ -z "$VERSION" ]; then echo "$PROGNAME: cannot find the source version name in debian/changelog." >&2 exit 1 fi EPOCH="${VERSION%:*}" if [ "$EPOCH" = "$VERSION" ]; then EPOCH="" else EPOCH="$EPOCH:" fi SVERSION="${VERSION#*:}" UVERSION="${SVERSION%-*}" if [ "$UVERSION" = "$SVERSION" ]; then echo "$PROGNAME: a native Debian package cannot take upstream updates" >&2 exit 1 fi if [ -n "$DEBUG" ]; then echo "Old: <epoch:><version>-<revision> = $VERSION" echo "Old: <epoch:> = $EPOCH" echo "Old: <version>-<revision> = $SVERSION" echo "Old: <version> = $UVERSION" echo "New: <version> = $NEW_VERSION" fi if [ "`readlink -f ../${PACKAGE}-$NEW_VERSION`" = "$ORIGINALPWD" ]; then echo "$PROGNAME: You can not execute this from ../${PACKAGE}-${NEW_VERSION}/." >&2 exit 1 fi if [ -e "../${PACKAGE}-$NEW_VERSION" ];then echo "$PROGNAME: ../${PACKAGE}-$NEW_VERSION directory exists." >&2 echo " remove ../${PACKAGE}-$NEW_VERSION directory." >&2 rm -rf ../${PACKAGE}-$NEW_VERSION fi # Move to the archive directory cd .. if [ -e "${PACKAGE}_$EPOCH$NEW_VERSION.orig.tar.xz" ]; then ARCHIVE="${PACKAGE}_$EPOCH$NEW_VERSION.orig.tar.xz" SUFFIX="xz" elif [ -e "${PACKAGE}_$EPOCH$NEW_VERSION.orig.tar.gz" ]; then ARCHIVE="${PACKAGE}_$EPOCH$NEW_VERSION.orig.tar.gz" SUFFIX="gz" elif [ -e "${PACKAGE}_$EPOCH$NEW_VERSION.orig.tar.bz2" ]; then ARCHIVE="${PACKAGE}_$EPOCH$NEW_VERSION.orig.tar.bz2" SUFFIX="bz2" elif [ -e "${PACKAGE}_$EPOCH$NEW_VERSION.orig.tar.lzma" ]; then ARCHIVE="${PACKAGE}_$EPOCH$NEW_VERSION.orig.tar.lzma" SUFFIX="lzma" else echo "$PROGNAME: Missing archive at ../${PACKAGE}_$EPOCH$NEW_VERSION.orig.tar.*" >&2 exit 1 fi if [ "$FORMAT" = "1.0" ]; then LISTDEBIAN="${PACKAGE}_$VERSION.debian.diff.xz \ ${PACKAGE}_$VERSION.debian.diff.gz \ ${PACKAGE}_$VERSION.debian.diff.bz2 \ ${PACKAGE}_$VERSION.debian.diff.lzma" else LISTDEBIAN="${PACKAGE}_$VERSION.debian.tar.xz \ ${PACKAGE}_$VERSION.debian.tar.gz \ ${PACKAGE}_$VERSION.debian.tar.bz2 \ ${PACKAGE}_$VERSION.debian.tar.lzma" fi DEBIANFILE="" for f in $LISTDEBIAN ; do if [ -f $f ] && [ ! -f ${f%.*}.${SUFFIX} ]; then DEBIANFILE="$f" last fi done # Move to the original source directory cd $ORIGINALPWD if [ -z "$DEBIANFILE" ]; then DEBIANFILE="${PACKAGE}_${VERSION}.debian.tar.xz" mkdir -p debian/source if [ "$FORMAT" != '3.0 (quilt)' ]; then echo "$PROGNAME warning: debian/source/format is overwritten as 3.0 (quilt)." >&2 fi FORMAT='3.0 (quilt)' echo $FORMAT >debian/source/format tar --xz -cf ../$DEBIANFILE debian fi FAKEDEBIAN="${PACKAGE}_${EPOCH}${NEW_VERSION}-$REV.debian.tar.xz" cp --no-clobber ../$DEBIANFILE ../$FAKEDEBIAN # Move to the archive directory cd .. # fake DSC FAKEDSC="${PACKAGE}_${EPOCH}${NEW_VERSION}-$REV.dsc" echo "Format: ${FORMAT}" > "$FAKEDSC" echo "Source: ${PACKAGE}" >> "$FAKEDSC" echo "Version: $EPOCH${NEW_VERSION}-$REV" >> "$FAKEDSC" echo "Files:" >> "$FAKEDSC" echo " 01234567890123456789012345678901 1 ${ARCHIVE}" >> "$FAKEDSC" for f in ${PACKAGE}_$EPOCH$NEW_VERSION.orig-*.tar.*z* ; do if [ -e "$f" ]; then if [ "$f" = "${f%.*}.${SUFFIX}" ] || [ ! -e ${f%.*}.${SUFFIX} ]; then echo " 01234567890123456789012345678901 1 $f" >> "$FAKEDSC" fi fi done echo " 01234567890123456789012345678901 1 ${FAKEDEBIAN}" >> "$FAKEDSC" # unpack source tree if ! dpkg-source --no-copy --no-check -x "$FAKEDSC"; then echo "$PROGNAME: Error with \"dpkg-source --no-copy --no-check -x $FAKEDSC\"" >&2 echo "Remember: Your current directory is changed back to the old source tree!" echo "Do a \"cd ..\" to see $FAKEDSC." exit 1 fi # remove bogus DSC and debian.tar files (generate them with dpkg-source -b) if [ -z "$DEBUG" ]; then rm -f $FAKEDSC $FAKEDEBIAN fi # Move to the new source directory if [ ! -d ${PACKAGE}-${NEW_VERSION} ]; then echo "$PROGNAME warning: ${PACKAGE}-${NEW_VERSION} directory missing." >&2 ls -l >&2 exit 1 fi cd ${PACKAGE}-${NEW_VERSION} # Need to set permission for format=1.0 [ -e debian/rules ] && chmod a+x debian/rules debchange -v "$EPOCH$NEW_VERSION-$REV" "New upstream release" echo "Remember: Your current directory is changed back to the old source tree!" echo "Do a \"cd ../$PACKAGE-$NEW_VERSION\" to see the new source tree and edit it to be nice Debianized source."
_______________________________________________ devscripts-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/devscripts-devel
