diff options
Diffstat (limited to 'scripts/flxrescan')
-rwxr-xr-x | scripts/flxrescan | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/scripts/flxrescan b/scripts/flxrescan new file mode 100755 index 0000000..f5bd0a1 --- /dev/null +++ b/scripts/flxrescan @@ -0,0 +1,137 @@ +#!/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 |