V10/cmd/dist/cmd/insdist.sh
#! /bin/sh
PATH=%LDIR%:/bin:/usr/bin
export PATH
usage='usage: insdist [-Dold=new...] [-Rrootdir]'
backup=%SDIR%/backup.$$ # no huge temporaries in /tmp
contents=/tmp/contents.$$
cmd=/tmp/cmd.$$
cmdfile=/tmp/cmdfile.$$
newlist=/tmp/newlist.$$
oldlist=/tmp/oldlist.$$
remove=/tmp/remove.$$
rootdir=
subst="-Dcontents=$contents -Dcmd=$cmd -Dcmdfile=$cmdfile"
rm -f $backup $contents $cmd $cmdfile $newlist $oldlist $remove
set -- `qargs getopt D:R: "$@"` || { echo "$usage" 1>&2; exit 1; }
while :
do
case $1 in
-D) subst="$subst -D$2"; shift 2;;
-R) root=$2; shift 2;;
--) shift; break;;
esac
done
if [ "$root/" != "/" ]
then
subst=`echo $subst | sed "s -D\(/[^ =]*\)=/*\([^ =]*\) -D\1=$root/\2 g"`
subst="$subst -D/=$root/"
fi
uargs tarf $subst | {
tarx -f
files=`cat $contents | sedsubst $subst`
realfiles=
for f in $files
do
if uargs test -d $f -o -f $f
then
realfiles="$realfiles $f"
fi
done
uargs tarc $realfiles | tee $backup | tarf -qt | sort > $oldlist
if tarx -qt > $newlist
then
sort -o $newlist $newlist
comm -23 $oldlist $newlist > $remove
test -s $remove && xargs uargs rm -fr < $remove
test -f $cmd && uargs sh -c `cat $cmd`
test -f $cmdfile && uargs sh -c `sedsubst $subst < $cmdfile`
else
sort -o $newlist $newlist
tarx < $backup
comm -13 $oldlist $newlist > $remove
test -s $remove && xargs uargs rm -fr < $remove
fi
}
rm -f $backup $contents $cmd $cmdfile $newlist $oldlist $remove