blob: f5bd0a1520425942c1fd7216a380eb9cf235bcd2 (
plain) (
tree)
|
|
#!/bin/bash
function main {
local file packages pack pkgsrc
exec 3>&0
# cette boucle permet de rechercher le package à utiliser pour trouver
# le fichier si cela est possible
while read file packages; do
echo -n \# >&2
if [ -z "$packages" ] ; then
echo "##no package## $file" >> $LOGFILE
echo "$file" >> $TMPDIR/OUTPUT
continue
fi
for pack in ${packages//,/ }; do
pkgsrc=$(find $SEARCHPATH -name ${pack}'*'.lst | head -1)
[ "$pkgsrc" ] && break
done
if [ -z "$pkgsrc" ]; then
echo "##no package## $file $packages" >> $LOGFILE
echo "$file $packages" >> $TMPDIR/OUTPUT
continue
fi
set -- $( grep "$file" $pkgsrc | awk '{ if ($8=="'$file'") print $0; }' )
if [ -z "$*" ]; then
pkgsrc=$( basename $pkgsrc .lst )
echo "##not found## $file $pkgsrc,${pkgsrc%-*},${pkgsrc%-*-*},${pkgsrc%%[._-][0-9]*}" >> $LOGFILE
echo "$file $packages" >> $TMPDIR/OUTPUT
continue
fi
pkgsrc=$( basename $pkgsrc .lst )
echo $file $pkgsrc,${pkgsrc%-*},${pkgsrc%-*-*},${pkgsrc%%[._-][0-9]*} >> $TMPDIR/OUTPUT
echo $file $pkgsrc,${pkgsrc%-*},${pkgsrc%-*-*},${pkgsrc%%[._-][0-9]*} >> $LOGFILE
done < $LFILES
echo "." >&2
}
# temporary file and directory
TMP=$(date +%y%m%d)-$RANDOM
while [ -e /tmp/pg-$TMP ] ; do TMP=$(date +%y%m%d)-$RANDOM ; done
TMPDIR=/tmp/pg-$TMP
PRINTUSAGE=0
# traitement des parametres
if [ $# -eq 0 ]; then
PRINTUSAGE=1
fi
while [ $# -gt 0 ] ; do
case "$1" in
-i) # <infile> fichierssources des autres fichiers
[ "$2" ] || PRINTUSAGE=1
INPUT=( $INPUT $2 )
shift;
;;
-u) # update first source file with results
UPDATE=1
;;
-o) # <outfile> fichier destination remis a jour
[ "$2" ] || PRINTUSAGE=1
OUTPUT=$2
shift;
;;
-l) # <logfile> fichier de reference pour les associations fichier/package
[ "$2" ] || PRINTUSAGE=1
LOGFILE="$2"
shift
;;
-p) # <pkgdir> repertoire de recherche pour les packages
[ "$2" ] || PRINTUSAGE=1
SEARCHPATH="$SEARCHPATH $2/."
shift
;;
-h) # affiche l'aide sur les paramètres
PRINTUSAGE=1
shift
;;
esac
shift
done
# repertoire contenant les .lst et les .tgz servant de source
SEARCHPATH=${SEARCHPATH:-${PKGROOT:+$PKGROOT/.}}
SEARCHPATH=${SEARCHPATH:-.}
if [ $PRINTUSAGE -gt 0 ]; then
# affiche les lignes du case ci-dessus
echo "Usage : $0 followed by these parameters :"
grep '^[ ]\+-.) #.*' $0
echo
exit 1
fi
DATE=$(date +%Y%m%d-%H%M%S)
LOGFILE=${LOGFILE:-/tmp/package-$DATE.log}
if [ -e $LOGFILE ] ; then
echo "Error : log file $LOGFILE exists."
exit 0
fi
# fabrication des fichiers temporaires
mkdir -p -m 700 $TMPDIR
# fichier contenant l'ensemble des fichiers requis
LFILES=$TMPDIR/lfiles ; touch $LFILES
# fichier contenant la correspondance non du package source du package
SFILES=$TMPDIR/sfiles ; touch $SFILES
# fabrication d'un fichier contenant la liste de tous les fichiers recherchés
# le fichier source peut contenir lui-même des informations de packages de provenance
cat $INPUT > $LFILES
sort -u $LFILES > $LFILES.new ; rm $LFILES ; mv $LFILES.new $LFILES
main
if [ -e $TMPDIR/OUTPUT ] ; then
if [ "$UPDATE" == 1 -a "$INPUT" ] ; then
set -- $INPUT
rm -f $1 ; mv $TMPDIR/OUTPUT $1
echo "Le résultat est dans $1, et les opérations sont dans $LOGFILE"
elif [ "$OUTPUT" ] ; then
mv $TMPDIR/OUTPUT $OUTPUT
echo "Le résultat est dans $OUTPUT, et les opérations sont dans $LOGFILE"
else
cat $TMPDIR/OUTPUT
fi
else
echo "Aucun résultat produit. Consulter les opérations dans $LOGFILE"
fi
rm -rf $TMPDIR
|