summaryrefslogtreecommitdiff
path: root/debian/repack.sh
diff options
context:
space:
mode:
authorAlessio Treglia <alessio@debian.org>2014-10-04 08:51:06 +0100
committerAlessio Treglia <alessio@debian.org>2014-10-04 08:51:06 +0100
commit8f99f24ea7752d4e43cc785c1182034d2f349a10 (patch)
tree64312e0173f256cfd687eb80486064f78b8704e7 /debian/repack.sh
parent53b173e4ab87eea19351e2f843e15aa5a201ad3c (diff)
Repackaging upstream sources to get rid of
zlib/contrib/dotzlib/DotZLib.chm.
Diffstat (limited to 'debian/repack.sh')
-rwxr-xr-xdebian/repack.sh161
1 files changed, 161 insertions, 0 deletions
diff --git a/debian/repack.sh b/debian/repack.sh
new file mode 100755
index 0000000..5b7bda3
--- /dev/null
+++ b/debian/repack.sh
@@ -0,0 +1,161 @@
+#!/bin/sh
+
+# see the repack.stub for how to use
+
+# 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=3
+
+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/zip|application/gzip)
+ C_PROGRAM="gzip"
+ C_SUFFIX="gz"
+ ;;
+ application/x-bzip2)
+ C_PROGRAM="bzip2"
+ C_SUFFIX="bz2"
+ ;;
+ *)
+ 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"