aboutsummaryrefslogtreecommitdiff
path: root/scripts/flxextract
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/flxextract')
-rwxr-xr-xscripts/flxextract95
1 files changed, 41 insertions, 54 deletions
diff --git a/scripts/flxextract b/scripts/flxextract
index 43d4ca0..bfecb25 100755
--- a/scripts/flxextract
+++ b/scripts/flxextract
@@ -1,41 +1,55 @@
#!/bin/bash
function main {
- local file packages pack
+ 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 "$file -" >> $SFILES ; continue ; fi
- packagesgrep=${packages//,/\\|}
- files=( $(grep -m 1 "^$file .*/\($packagesgrep\).*$" $SOURCE | awk '{print $2}') )
- pkgsrc=""
- for pack in ${packages//,/ } ; do
- i=0; while [ $i -lt ${#files[*]} ] ; do
- [ ${files[$i]/$pack} != ${files[$i]} ] && pkgsrc=${files[$i]} && break
- i=$[$i+1]
- done
+ if [ -z "$packages" ] ; then echo "##no package## $file" >> $LOGFILE ; continue ; fi
+
+ for pack in ${packages//,/ }; do
+ pkgsrc=$(find $SEARCHPATH -name ${pack}'*'.lst | head -1)
[ "$pkgsrc" ] && break
- done
- if [ "$pkgsrc" ] ; then
- echo "$file $pkgsrc" >> $SFILES
+ done
+
+ if [ -z "$pkgsrc" ]; then
+ echo "##no package## $file $packages" >> $LOGFILE
+ continue
+ fi
+
+ set -- $( grep "$file" $pkgsrc | awk '{ if ($8=="'$file'") print $0; }' )
+ if [ -z "$*" ]; then
+ echo "##not found## $file $pkgsrc" >> $LOGFILE
+ continue
+ fi
+ if [ "x$1" = "xd" ]; then
+ # it's a directory
+ rm -f $ROOTDIR/$8 # just in case it was something else
+ mkdir -p $ROOTDIR/$8
+ touch -t `date -d "Jan 1 00:00:$7 UTC 1970" +"%Y%m%d%H%M.%S" ` $ROOTDIR/$8
+ chown $3:$4 $ROOTDIR/$8
+ chmod $2 $ROOTDIR/$8
+ echo "$8/" >> $LOGFILE
else
- echo "$file -" >> $SFILES
+ # it's a regular file
+ echo $8 $pkgsrc >> $SFILES
fi
done < $LFILES
- echo
+
+ echo >&2 ; echo -n "Extracting files ..." >&2
for lst in $( awk '{print $2}' $SFILES | sort -u ) ; do
- if [ "x$lst" = "x-" ] ; then continue ; fi
tgz="$(dirname $lst)/$(basename $lst .lst).tgz"
- grep -- " $lst$" $SFILES | awk '{print $1}' | tar zxpvf $tgz -C $ROOTDIR -T - >> $LOGFILE
+ grep -- " $lst$" $SFILES | awk '{print $1}' | tar zUxpvf $tgz -C $ROOTDIR -T - >> $LOGFILE
+ echo -n "." >&2
done
- grep -- " -$" $SFILES | awk '{print "##unresolved##",$1}' >> $LOGFILE
+ echo "." >&2
}
# repertoire contenant les .lst et les .tgz servant de source
SEARCHPATH=$PKGROOT
-SEARCHPATH=${SEARCHPATH:-.}
+SEARCHPATH=${SEARCHPATH:-.}/.
# temporary file and directory
TMP=$(date +%y%m%d)-$RANDOM
@@ -52,7 +66,7 @@ while [ $# -gt 0 ] ; do
case "$1" in
-i) # <infile> fichiers sources des autres fichiers
[ "$2" ] || PRINTUSAGE=1
- INPUT="$INPUT $2"
+ INPUT=( $INPUT $2 )
shift;
;;
-l) # <logfile> fichier de reference pour les associations fichier/package
@@ -62,7 +76,7 @@ while [ $# -gt 0 ] ; do
;;
-p) # <pkgdir> repertoire de recherche pour les packages
[ "$2" ] || PRINTUSAGE=1
- SEARCHPATH="$SEARCHPATH $2"
+ SEARCHPATH="$SEARCHPATH $2/."
shift
;;
-R) # <destdir> répertoire d'extraction pour les fichiers
@@ -89,12 +103,12 @@ fi
# par défaut, ROOTDIR est fonction de la date
DATE=$(date +%Y%m%d-%H%M%S)
ROOTDIR=${ROOTDIR:-/tmp/package-$DATE}
-if [ -e $ROOTDIR ] ; then
- echo "Error : directory $ROOTDIR already exists."
- exit 1
-fi
+#if [ -e $ROOTDIR ] ; then
+# echo "Error : directory $ROOTDIR already exists."
+# exit 1
+#fi
-LOGFILE=${LOGFILE:-/tmp/package-$DATE}.log
+LOGFILE=${LOGFILE:-/tmp/package-$DATE.log}
if [ -e $LOGFILE ] ; then
echo "Error : log file $LOGFILE exists."
exit 0
@@ -104,41 +118,14 @@ mkdir -p $ROOTDIR
# fabrication des fichiers temporaires
mkdir -p -m 700 $TMPDIR
-# fichier contenant l'ensemble des fichiers disponibles et leur package source
-SOURCE=$TMPDIR/source ; touch $SOURCE
# 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 l'ensemble des fichiers disponibles avec leur package
-# source
-OLDIFS=$IFS ; IFS=$'\n'
-for path in $SEARCHPATH ; do
- if [ -d $path ] ; then
- for file in $( ls $path/*.lst ) ; do
- # echo -n \# >&2
- # pkgname=$( basename $file .lst )
- # matchlist=$pkgname # ,${pkgname%-*},${pkgname%-*-*},${pkgname%%-*}
- # attention aucun traitement d'un espace (\ ) dans le nom de fichier
- awk '{print $8,"'$file'"}' $file >> $SOURCE
- done
- fi
-done
-
-IFS=$OLDIFS
-
# 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
-if [ "$INPUT" ] ; then
- for file in $INPUT ; do
- cat $file >> $LFILES
- done
-else
- cat >> $LFILES
-fi
+cat $INPUT > $LFILES
sort -u $LFILES > $LFILES.new ; rm $LFILES ; mv $LFILES.new $LFILES
main