aboutsummaryrefslogblamecommitdiff
path: root/scripts/flxrescan
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