Commit 4135d096 authored by Julien Puydt's avatar Julien Puydt

Rewrite tarball repacking

parent 6a8cfba0
lcalc (1.23+dfsg-8) UNRELEASED; urgency=medium
* Rewrite the tarball repacking (next release
will use it, if necessary).
-- Julien Puydt <jpuydt@debian.org> Sat, 11 Aug 2018 15:47:33 +0200
lcalc (1.23+dfsg-7) unstable; urgency=medium
* Refresh packaging:
......
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: lcalc
Source: http://oto.math.uwaterloo.ca/~mrubinst/L_function_public/CODE/
Comment: contains spurious files, that repack.sh removes
Comment: garbage files
Files-Excluded: include/.* include/*crap include/*.bak src/.* src/Makefile.old src/libLfunction.a
Files: *
Copyright: Copyright (C) 2001,2002,2003,2004 Michael Rubinstein
......@@ -24,14 +25,6 @@ Copyright: (C) 2008, Tim Abbott <tabbott@mit.edu>
(C) 2013, Tobias Hansen <thansen@debian.org>
License: GPL-2+
Files: debian/repack.s*
Copyright: 2009, Ryan Niebur <ryan@debian.org>
2009-2011, gregor herrmann <gregoa@debian.org>
License: Artistic or GPL-1+
On Debian systems, the complete texts of the Artisitic and GPL are in
/usr/share/common-licenses/Artistic and
/usr/share/common-licenses/GPL
License: GPL-2+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
......
rm src/libLfunction.a
#!/bin/sh
# see the repack.stub for how to use
# Copyright 2009, Ryan Niebur <ryan@debian.org>
# Copyright 2009-2011, gregor herrmann <gregoa@debian.org>
# 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 <ver> <downloaded file>"
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|grep ^Source:|sed 's/^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"
#!/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 <ryan@debian.org>
License: Artistic or GPL-1+
=cut
if [ -z "$REPACK_SH" ]; then
if [ -f debian/repack.sh ]; then
REPACK_SH=debian/repack.sh
fi
if [ -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/scripts.git;a=blob_plain;f=repack.sh;hb=HEAD"
exit 1
fi
exec "$REPACK_SH" "$@"
# it's cruft, not sources
lcalc source: source-includes-file-in-files-excluded include/.DS_Store
lcalc source: source-includes-file-in-files-excluded include/.Lexplicit_formula.h.swp
lcalc source: source-includes-file-in-files-excluded include/.Lvalue.h.swp
lcalc source: source-includes-file-in-files-excluded include/._.DS_Store
lcalc source: source-includes-file-in-files-excluded include/Lexplicit_formula.h.swap.crap
lcalc source: source-includes-file-in-files-excluded include/Lvalue.h.bak
lcalc source: source-includes-file-in-files-excluded src/.DS_Store
lcalc source: source-includes-file-in-files-excluded src/.Lcommandline.ggo.swp
lcalc source: source-includes-file-in-files-excluded src/.Makefile.old.swp
lcalc source: source-includes-file-in-files-excluded src/._.DS_Store
lcalc source: source-includes-file-in-files-excluded src/Makefile.old
version=4
opts=dversionmangle=s/\+dfsg$// \
http://oto.math.uwaterloo.ca/~mrubinst/L_function_public/CODE/L-(.+).tar.gz \
debian sh debian/repack.stub
opts=\
repacksuffix=+dfsg,\
dversionmangle=s/\+dfsg$// \
http://oto.math.uwaterloo.ca/~mrubinst/L_function_public/CODE/L-(.+).tar.gz
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment