diff options
Diffstat (limited to 'split/old-mksplit.sh')
-rw-r--r-- | split/old-mksplit.sh | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/split/old-mksplit.sh b/split/old-mksplit.sh new file mode 100644 index 000000000..8743f9446 --- /dev/null +++ b/split/old-mksplit.sh @@ -0,0 +1,113 @@ +#!/bin/bash +# This script is only supposed to be called by dpkg-split. +# Its arguments are: +# <sourcefile> <partsize> <prefix> <totalsize> <partsizeallow> <msdostruncyesno> +# Stdin is also redirected from the source archive by dpkg-split. + +# Copyright (C) 1995 Ian Jackson <ijackson@nyx.cs.du.edu> +# +# This is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2, +# or (at your option) any later version. +# +# This is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with dpkg; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +set -ex + +if [ "$#" != 6 ]; then echo >&2 'Bad invocation of mksplit.sh.'; exit 1; fi + +sourcefile="$1" +partsize="$2" +prefix="$3" +orgsize="$4" +partsizeallow="$5" +msdos="$6" + +myversion=2.1 +csum=`md5sum <"$sourcefile"` +package="`dpkg-deb --field \"$sourcefile\" Package`" +version="`dpkg-deb --field \"$sourcefile\" Version`" +revision="`dpkg-deb --field \"$sourcefile\" Package_Revision`" +if [ "x$revision" != x ]; then version="$version-$revision"; fi +nparts=$[($orgsize+$partsize-1)/$partsize] +startat=0 +partnum=0 + +td=/tmp/ds$$ +mkdir $td +ec=1 +trap "rm -r $td; exit $ec" 0 +dsp=$td/debian-split + +echo -n "Splitting package $package into $nparts parts: " + +if [ yes = "$msdos" ] +then + prefixdir="`dirname \"$prefix\"`" + cleanprefix="`basename \"$prefix\" | tr A-Z+ a-zx | tr -dc 0-9a-z-`" +fi + +ar-include () { + perl -e ' + $f= $ARGV[0]; + (@s= stat(STDIN)) || die "$f: $!"; + undef $/; read(STDIN,$d,$s[7]) == $s[7] || die "$f: $!"; + printf("%-16s%-12d0 0 100644 %-10d%c\n%s%s", + $f, time, $s[7], 0140, $d, + ($s[7] & 1) ? "\n" : "") || die "$f: $!"; + close(STDOUT) || die "$f: $!"; + ' "$1" <"$td/$1" +} + +while [ $startat -lt $orgsize ] +do + showpartnum=$[$partnum+1] + echo $myversion >$dsp + echo $package >>$dsp + echo $version >>$dsp + echo $csum >>$dsp + echo $orgsize >>$dsp + echo $partsize >>$dsp + echo $showpartnum/$nparts >>$dsp + dd bs=$partsize skip=$partnum count=1 \ + of=$td/data.$showpartnum \ + 2>&1 | (egrep -v '.* records (in|out)' || true) + rm -f $td/part + echo -n "$showpartnum " + echo '!<arch>' >$td/part + ar-include debian-split >>$td/part + ar-include data.$showpartnum >>$td/part + thispartreallen="`ls -l $td/part | awk '{print $5}'`" + if ! [ "$thispartreallen" -le "$partsizeallow" ] + then + cat >&2 <<END + +Header is too long, making part too long. Your package name or version +numbers must be extraordinarily long, or something. Giving up. +END + exit 1 + fi + if [ yes = "$msdos" ] + then + basename="`echo ${showpartnum}of$nparts.\"$cleanprefix\" | \ + dd bs=9 count=1 2>/dev/null | \ + sed -e 's/^\([^.]*\)\.\(.*\)$/\2\1/'`" + basename="$prefixdir/$basename" + else + basename="$prefix.${showpartnum}of$nparts" + fi + mv $td/part $basename.deb + startat=$[$startat+$partsize] + partnum=$showpartnum +done +echo "done" + +ec=0 |