aboutsummaryrefslogtreecommitdiff
path: root/scripts/flxrescan
blob: f5bd0a1520425942c1fd7216a380eb9cf235bcd2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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