From dc9b0c03cc6f37735f64f64e18bfb691dbd44010 Mon Sep 17 00:00:00 2001 From: Dave Hibberd Date: Sun, 3 Jan 2016 18:29:10 +0000 Subject: [PATCH] test dfsg repack --- debian/changelog | 2 +- debian/repack.local | 2 + debian/repack.sh | 220 ++++++++++++++++++++++++++++++++++++++++++++ debian/repack.stub | 92 ++++++++++++++++++ debian/watch | 7 +- 5 files changed, 319 insertions(+), 4 deletions(-) create mode 100644 debian/repack.local create mode 100644 debian/repack.sh create mode 100644 debian/repack.stub diff --git a/debian/changelog b/debian/changelog index 31150b4..d868e7d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -uronode (2.4-1) UNRELEASED; urgency=medium +uronode (2.4-1+dfsg) UNRELEASED; urgency=medium * New upstream release diff --git a/debian/repack.local b/debian/repack.local new file mode 100644 index 0000000..e916c0e --- /dev/null +++ b/debian/repack.local @@ -0,0 +1,2 @@ +MANIFEST=1 +rm calibrate diff --git a/debian/repack.sh b/debian/repack.sh new file mode 100644 index 0000000..a85a229 --- /dev/null +++ b/debian/repack.sh @@ -0,0 +1,220 @@ +#!/bin/sh + +# see the repack.stub for how to use + +# Copyright 2009, Ryan Niebur +# Copyright 2009-2011, gregor herrmann +# License: Artistic or GPL-1+ + +# TODO: provide example watch files and repack.locals +# TODO: test suite. problems fixed that need to be tested: +# * globbing +# * whitespace and then comments in the MANIFEST +# TODO: does / in weird places work? test suite too. +# TODO: I actually broke stuff with the MANIFEST change not thinking.. +# TODO: allow for a sepearate (and multiple) MANIFEST files, then +# de-uglify libsyntax-highlight-engine-kate-perl. +# TODO: have each mv and rm check that something actually changed, and +# if not, die + +set -e +set -u + +usage() { + echo "Usage: repack.sh --upstream-version " + exit 1 +} + +if [ "$#" != "3" ]; then + usage +fi +if [ "$1" != "--upstream-version" ]; then + usage +fi +if [ ! -f "$3" ]; then + if [ -n "$3" ]; then + echo "$3 doesn't exist" + fi + usage +fi +VER="$2" +FILE="$3" +PKG=`dpkg-parsechangelog --show-field Source` + +SUFFIX="+dfsg" + +echo +echo "Repackaging $FILE" +echo + +DIR=`mktemp -d ./tmpRepackXXXXXX` +DIR=$(readlink -f "$DIR") +trap "/bin/rm -rf \"$DIR\"" QUIT INT EXIT + +# Create an extra directory to cope with rootless tarballs +UP_BASE="$DIR/unpack" +mkdir "$UP_BASE" +tar xf "$FILE" -C "$UP_BASE" || unzip "$FILE" -d "$UP_BASE" + +if [ `ls -1 "$UP_BASE" | wc -l` -eq 1 ]; then + # Tarball does contain a root directory + UP_BASE="$UP_BASE/`ls -1 "$UP_BASE"`" +fi + +RM_OPTS="-vrf" + +real_rm(){ + /bin/rm "$@" +} + +real_mv(){ + /bin/mv "$@" +} + +rm(){ + set +f + MYOLDPWD=$(pwd) + cd "$UP_BASE" + if [ "$MANIFEST" = "1" ]; then + PERM=$(stat --format=%a "MANIFEST") + chmod u+w "MANIFEST" + fi + for i in $@; do + if [ "$MANIFEST" = "1" ]; then + PATTERN="^$i" + if [ -d "$i" ]; then + if ! { echo "$PATTERN" | grep -q "/$" ; }; then + PATTERN="${PATTERN}/" + fi + else + PATTERN="${PATTERN}\s?" + fi + grep -Ev "$PATTERN" "MANIFEST" > "$DIR/MANIFEST" + real_mv "$DIR/MANIFEST" "MANIFEST" + fi + real_rm "$RM_OPTS" "$i" + done + if [ "$MANIFEST" = "1" ]; then + chmod $PERM "MANIFEST" + fi + cd $MYOLDPWD + set -f +} + +mv(){ + set +f + OLD=$(pwd) + cd $UP_BASE + real_mv "$@" + cd $OLD + if [ "$MANIFEST" = "1" ]; then + echo "MANIFEST cannot be manipulated with mv yet, patches welcome" + exit 1 + fi + set -f +} + +# bump with incompatible changes +REPACK_VERSION=4 + +requires_version(){ + if [ $REPACK_VERSION -lt $1 ]; then + echo "repack.sh is not up to date enough for this package. you need at least version $1, while this script is only version $REPACK_VERSION" + exit 1 + fi +} + +MANIFEST=0 +## Remove stuff +set -f +MYORIGPWD=$(pwd) +cd "$UP_BASE" +. "$MYORIGPWD/debian/repack.local" +cd $MYORIGPWD +set +f +## End + +REPACK_DIR="$PKG-${VER}${SUFFIX}.orig" # DevRef ยง 6.7.8.2 +DFSG_TAR="$(dirname $FILE)/${PKG}_${VER}${SUFFIX}.orig.tar" + +real_mv "$UP_BASE" "$DIR/$REPACK_DIR" + +# .gz or .bz2? +FILETYPE=$(file --brief --mime-type --dereference "$FILE") +case "$FILETYPE" in + application/x-gzip|application/gzip|application/zip) + C_PROGRAM="gzip" + C_SUFFIX="gz" + ;; + application/x-bzip2|application/bzip2) + C_PROGRAM="bzip2" + C_SUFFIX="bz2" + ;; + application/x-xz|application/xz) + C_PROGRAM="xz" + C_SUFFIX="xz" + ;; + *) + echo "E: Unknown filetye $FILETYPE" + exit 1 + ;; +esac + +# Using a pipe hides tar errors! +tar cfC "$DIR/repacked.tar" "$DIR" "$REPACK_DIR" +$C_PROGRAM -9 < "$DIR/repacked.tar" > "$DIR/repacked.tar.$C_SUFFIX" + +real_mv "$DIR/repacked.tar.$C_SUFFIX" "$DFSG_TAR.$C_SUFFIX" + +echo "*** $DFSG_TAR.$C_SUFFIX ready" + +exit 0 +POD=< --upstream-version I I" + +=head1 DESCRIPTION + +B helps creating repackaged tarballs, suitable for feeding +L. + +Work is commenced in three stages: + +=over + +=item + +B unpacks the provided upstream tarball. + +=item + +F is sourced to remove unsuitable content. + +=item + +B packs the sources again, under a suitable file name in the +form C (suffix depending on initial compression). + +=back + +B invokes F in an environment where B and +B are replaced with functions that reflect the operations in the +F file, if present. + +=head1 COPYRIGHT & LICENSE + +Copyright 2009, Ryan Niebur L + +Copyright 2009-2011, gregor herrmann L + +This program is free software and can be distributed under the same terms as +Perl. + +=cut +EOF + diff --git a/debian/repack.stub b/debian/repack.stub new file mode 100644 index 0000000..64486f6 --- /dev/null +++ b/debian/repack.stub @@ -0,0 +1,92 @@ +#!/bin/sh + +: <<=cut +=pod + +=head1 NAME + +repack.stub - script to repack upstream tarballs from uscan + +=head1 INSTRUCTIONS + +put this in debian/repack.stub and add "debian sh debian/repack.stub" to +the end of the line in debian/watch. you will also need to add a version +mangle to debian/watch. + +then create a debian/repack.local. this is a shell script that is +sourced under "set -e", so be careful to check returns codes. + +=head1 FUNCTIONS + +=over 4 + +=item rm + +rm is replaced by a function that does some magic ("rm -rv" by default), but also changes MANIFEST if $MANIFEST is 1 + +=item mv + +mv is replaced by a function that just does mv (by default), but also changes MANIFEST if $MANIFEST is 1 + +=item requires_version + +requires_version is there for future usage for requiring certain versions of the script + +=back + +=head1 VARIABLES + +=over 4 + +=item SUFFIX + +defaults to +dfsg + +what to append to the upstream version + +=item RM_OPTS + +defaults to -vrf + +options to pass to rm + +=item MANIFEST + +defaults to 0, set to 1 to turn on. + +this will manipulate MANIFEST files in CPAN tarballs. + +=item UP_BASE + +this is the directory where the upstream source is. + +=back + +=head1 COPYRIGHT AND LICENSE + +Copyright 2009, Ryan Niebur + +This program is free software; you can redistribute it and/or modify it +under the same terms as Perl itself. + +=cut + +if [ -z "$REPACK_SH" ]; then + if [ -x /usr/share/pkg-perl-tools/repack.sh ]; then + REPACK_SH='/usr/share/pkg-perl-tools/repack.sh' + elif [ -f ../../scripts/repack.sh ]; then + REPACK_SH=../../scripts/repack.sh + fi + if [ -z "$REPACK_SH" ] && which repack.sh > /dev/null; then + REPACK_SH=$(which repack.sh) + fi +fi + +if [ ! -f "$REPACK_SH" ]; then + echo "Couldn't find a repack.sh. please put it in your PATH, put it at ../../scripts/repack.sh, or put it somewhere else and set the REPACK_SH variable" + echo "You can get it from http://anonscm.debian.org/gitweb/?p=pkg-perl/packages/pkg-perl-tools.git;a=blob_plain;f=scripts/repack.sh;hb=HEAD" + exit 1 +fi + +exec "$REPACK_SH" "$@" + diff --git a/debian/watch b/debian/watch index aa8f510..b17055a 100644 --- a/debian/watch +++ b/debian/watch @@ -1,4 +1,5 @@ version=3 - -http://sf.net/uronode/uronode-(\d[\d\.]+)\.(?:tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) - +opts=dversionmangle=s/\+dfsg$// \ + http://sf.net/uronode/uronode-(\d[\d\.]+)\.(?:tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) + export REPACK_SH=debian/repack.sh + debian sh debian/repack.stub