/usr/share/pkg-perl-tools/repack.sh is in pkg-perl-tools 0.42.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 | #!/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 --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=<<EOF
=head1 NAME
dpt-repack -- repackaging helper
=head1 SYNOPSIS
B<dpt repack> --upstream-version I<version> I<downloaded file>"
=head1 DESCRIPTION
B<dpt repack> helps creating repackaged tarballs, suitable for feeding
L<dpkg-source(1)>.
Work is commenced in three stages:
=over
=item
B<dpt repack> unpacks the provided upstream tarball.
=item
F<debian/repack.local> is sourced to remove unsuitable content.
=item
B<dpt repack> packs the sources again, under a suitable file name in the
form C<package_ver.orig.tar.gz> (suffix depending on initial compression).
=back
B<dpt repack> invokes F<debian/repack.local> in an environment where B<rm> and
B<mv> are replaced with functions that reflect the operations in the
F<MANIFEST> file, if present.
=head1 COPYRIGHT & LICENSE
Copyright 2009, Ryan Niebur L<ryan@debian.org>
Copyright 2009-2011, gregor herrmann L<gregoa@debian.org>
This program is free software and can be distributed under the same terms as
Perl.
=cut
EOF
|