summaryrefslogtreecommitdiff
path: root/debian/get-orig-source
diff options
context:
space:
mode:
Diffstat (limited to 'debian/get-orig-source')
-rwxr-xr-xdebian/get-orig-source247
1 files changed, 247 insertions, 0 deletions
diff --git a/debian/get-orig-source b/debian/get-orig-source
new file mode 100755
index 0000000..8d499e8
--- /dev/null
+++ b/debian/get-orig-source
@@ -0,0 +1,247 @@
+#!/bin/bash
+# $Id$
+
+# inital version
+# Copyright 2004 Jeroen van Wolffelaar <jeroen@wolffelaar.nl>
+#
+# Generalized for components (dpkg source format 3.0 (quilt))
+# - get language packs as component archives
+# - also repackage according to several parameters when told so
+# Copyright 2010 J.M. Roth <jmroth@iip.lu>
+#
+# This script may be distributed under the conditions of the GPL v2
+
+set -e
+
+if [ "$#" -lt 2 ] ; then
+ echo "How to call: $0 <VERSION> ( <PACKAGE> [<PACKAGE> ...] | _all )"
+ exit 1
+fi
+
+if [ ! -d debian ] ; then
+ echo "No debian/ directory here. You should use 'debian/rules get-orig-source' instead of calling this script directly. Aborting."
+ exit 1
+fi
+
+cexit () {
+ rm -Rf $@
+ exit 100
+}
+
+format_supported() {
+ # Argument(s): filename
+
+ local f=$(file -b $1 | cut -d' ' -f1 | tr \[:upper:\] \[:lower:\])
+ #local ext=$(echo ${1##*.})
+ case "$f" in
+ gzip | bzip2 | lzma | zip )
+ echo $f
+ return 0
+ ;;
+ * )
+ return 1
+ ;;
+ esac
+}
+format_repackaging_required () {
+ # Argument(s): format
+
+ local needs_repackaging="zip" # make sure this is a subset of the formats from format_supported()!
+ for i in "$needs_repackaging" ; do
+ [ "$1" = "$i" ] && return 0
+ done
+ return 1
+}
+repackage () {
+ local app=$1
+ local comp=$2
+ local file=$3
+ local fromformat=$4
+ local toformat=$5
+ local cds=${6:-0}
+
+ local TMPDIR=$(mktemp -d -t repack.XXXXXX)
+ # need a second temp dir inside first one, in case we need to change directory structure
+ local TMP2=$(mktemp -p $TMPDIR -d)
+
+ # extract the stuff
+ case $fromformat in
+ zip )
+ unzip -q $file -d $TMP2
+ ;;
+ * )
+ if [ "$fromformat" = "$toformat" ] ; then
+ # keep format but change directory structure
+ tar -C $TMP2 -xf $file
+ else
+ echo Source format not supported for repackaging: $fromformat
+ cexit $TMPDIR $file
+ fi
+ ;;
+ esac
+
+ # change directory structure, if so requested
+ local ORIGDIR=$(pwd)
+ cd $TMPDIR
+ if [ "$cds" -gt 0 ] ; then
+ # need to use TMP2 since 'mv * xxx' cannot move xxx to xxx
+ dirs=${app}_${comp}.orig
+ [ "$cds" -gt 1 ] && dirs=$dirs/$(seq -s/ 2 $cds)/
+ mkdir -p $dirs
+ mv -t $dirs $TMP2/*
+ rmdir $TMP2
+ dir=$(ls -1)
+ elif [ "$cds" -lt 0 ] ; then
+ while [ "$cds" -lt 0 ] ; do
+ if [ "$(find . -maxdepth 1 -type f | wc -l)" -gt 0 ] ; then
+ echo "Warning: The extraction point contains files, cannot change directory structure"
+ elif [ "$(find . -maxdepth 1 -type d ! -iname '.' | wc -l)" -gt 1 ] ; then
+ echo "Warning: The extraction point contains more than one directory, cannot change directory structure"
+ else
+ # need to use a new directory since 'mv $dir/* .' cannot work if * == $dir or $TMP2
+ dir=$(ls -1) # ls minus one
+ mv $dir $TMP2$dir
+ mv $TMP2$dir/* .
+ rmdir $TMP2$dir
+ fi
+ cds=$((++cds))
+ done
+ else
+ mv $TMP2/* .
+ rmdir $TMP2
+ fi
+ cd $ORIGDIR
+
+ # repack the stuff
+ case $toformat in
+ gzip | bzip2 | lzma | xz )
+ tar --$toformat -C $TMPDIR -cf $file $(ls $TMPDIR)
+ rm -rf $TMPDIR
+ return 0
+ ;;
+ * )
+ echo Destination format not supported for repackaging: $toformat
+ cexit $TMPDIR $file
+ ;;
+ esac
+}
+fetch_rename_go () {
+ # Argument(s): app comp
+
+ # component name in .orig.tar must not contain anything else than alphanumeric and dash
+ local comp=${2:+-$(echo $2 | tr '_' '-' | tr -dc \[\[:alnum:\]-\])}
+ local stor=$1_$DVERSION.orig$comp.tar
+
+ # get the checksum of a potentially existing download
+ local md5=
+ for d in . .. ; do
+ if [ -f $d/$stor* ] ; then
+ md5=$(md5sum $d/$stor* | cut -f1 -d' ')
+ fi
+ done
+
+ # download the file if it's supposed to be repackaged or the checksum didn't match
+ if [ "$RepackDirectoryStructure" -ne 0 -o "$md5" != "$Md5" ] ; then
+ echo "***>" Going to get ${app}${comp}
+ local tmp=$(mktemp -t pget.XXXXXX)
+ if ! wget -nv -O$tmp $Url ; then
+ echo "failed"
+ cexit $tmp
+ fi
+ else
+ echo "Skipping ${app}${comp}..."
+ return 0
+ fi
+
+ # check downloaded file checksum
+ md5=$(md5sum $tmp | cut -f1 -d' ')
+ if [ "$md5" != "$Md5" ] ; then
+ echo "Warning: MD5 mismatch"
+ echo "[MD5] Url $md5"
+ echo "[MD5] info $Md5"
+ fi
+
+ # check format of downloaded file
+ local fmt=$(format_supported $tmp)
+ if [ $? -ne 0 ] ; then
+ echo This file format is not supported at all by this script, neither for packaging, nor for repackaging. "($fmt)"
+ cexit $tmp
+ fi
+
+ # repackage if necessary
+ if format_repackaging_required $fmt || [ "$RepackDirectoryStructure" -ne 0 ] ; then
+ local toformat=xz
+ echo "***> Repackaging $1_$2: $fmt >> $toformat ($RepackDirectoryStructure)"
+ ##! $2 can be empty, script will break when main app needs repackaging
+ repackage $1 $2 $tmp $fmt $toformat $RepackDirectoryStructure # overwrites $tmp
+ fmt=$toformat
+ else
+ # check if tar actually likes the downloaded file
+ if [ "$fmt" != "lzma" ] && ! tar tf $tmp >/dev/null 2>&1; then
+ echo $tmp does not seem to be a valid .tar.$fmt file
+ cexit $tmp
+ fi
+ fi
+
+ local gzip=gz
+ local bzip2=bz2
+ local lzma=lzma
+ local xz=xz
+ case $fmt in
+ gzip )
+ stor=$stor.gz
+ ;;
+ bzip2 )
+ stor=$stor.bz2
+ ;;
+ * )
+ stor=$stor.$fmt
+ ;;
+ esac
+ mv $tmp $stor
+}
+
+DVERSION=$1
+shift
+
+if [ "$1" = "_all" ] ; then
+ for i in debian/upstream/*.info ; do
+ i=${i#debian/upstream/}
+ i=${i%.info}
+ el="$el $i"
+ done
+else
+ el="$@"
+fi
+for i in $el ; do
+ # source the metadata
+ if [ ! -f debian/upstream/$i.info ] ; then
+ echo Warning: debian/upstream/$i.info does not exist.
+ continue
+ fi
+ . debian/upstream/$i.info
+ [ "${Include:-yes}" = "no" ] && continue
+ : ${RepackDirectoryStructure:=0}
+
+ # check versions
+ # - run only if it's the main app (not a component)
+ # - check if the info file has same version than argument provided to this script (from changelog)
+ if [ -z "$(echo $i | grep _)" -a "$Version" != "$DVERSION" ] ; then
+ echo "Notice:" Changelog/rules/.info versions seem to disagree: $i: $UPSTREAM/$DVERSION/$Version
+ echo "Enter to continue [Ctrl-C to abort]"
+ read x
+ fi
+
+ app=$(echo $i | cut -d_ -f1)
+ comp=$(echo $i | cut -d_ -f2-)${Update:+-u}${Update}
+ [ "$comp" = "$app" ] && comp=
+ fetch_rename_go $app $comp
+
+ unset RepackDirectoryStructure
+ unset Include
+ unset Version
+ unset Update
+done
+
+echo "***>" Done
+exit 0