#!/bin/bash 
#set -e -v -x 
#         Esempi di lettura file ed interpretazione singole righe, con bash shell
#         m.galli, 14-june-2005 
#
#  problema: per i sources i files di descrizione dei pacchetti Debian hanno records del tipo: 
# 
# Package: agrep
# Binary: agrep
# Version: 2.04-3
# Priority: optional
# Section: non-free/text
# Maintainer: Daniel Baumann <daniel.baumann@panthera-systems.net>
# Build-Depends: debhelper (>= 4.0.0)
# Architecture: any
# Standards-Version: 3.6.1
# Format: 1.0
# Directory: pool/non-free/a/agrep
# Files:
#  c94cb952248cafa28f37cc26ef87b1d3 577 agrep_2.04-3.dsc
#  73ce47d3726d2f849b642eb8121dde32 38039 agrep_2.04.orig.tar.gz
#  0d98749f34c83a8df06464fd4e48bc68 96460 agrep_2.04-3.diff.gz
# 
# Package: album
# ......... e cosi' via 
# Devo recuperare i files corrispondenti al pacchetto dalla directory pool dell'archivio
# nella subdirectory su specificata 
#
# Devo quindi leggere le richge del file, una per una, assegnare la direcotry,
# attaccarci il nome del file ed infine, con wget, recupero il file
#
#  Se i nomi dei files contenesssero anche il path completo potrei procedere
# nel modo seguente, ma non e' cosi': 

#        file=$s$j${k}Sources.gz 
#                             echo $file 
#     if [ -f $file ] ; then 
#
#          for xxx in  `zcat $file | grep -e "^ [0-9a-z]\{30\}"  | cut -f4 -d" " ` ; 
#	  do  
#	       echo " wget --no-clobber --force-directories -i $prot$s$xxx  "    
#	  done 	
#   
#         "^ [0-9a-z]\{30\}"  significa: a inizio riga un blank e poi 30 alfanumerici  
#    fi 
# 
# Ho diversi modi di procedere: 


# ---------------- definizioni variabili iniziali 

file=Sources.gz 

#file=Sources

prot=http
s=_path_

echo $prot$s
echo $file
# ----------------

#  Intanto vediamo come si fa a leggere un file con read: si usa il redirect
# relativo ad un blocco di istruzioni : 

#  redirect relatico ad un blocco  .. ; do .. done  
#while read a b c d  ; 
#do 
#  echo $a $b $c $d 
#done < $file 

# ----------------	

#  redirect relativo ad un blocco  .. ; do .. done , che esce da pipe 
#  le righe sono del tipo :  
#  identificatoreitem:  dato
#  Files:
#   md5sum size nomefile 
#
#        utilizzo i : per identificare i comandi 
#        utilizzo l'avere una stringa esadecimale all'inizio per il nome file
# ----------------------------------

# Ho diversi modi di procedere: 

# 1 --------------------------   uso istruzione case, con case ho possibilita'
#                                limitate per i pattern, ma utilizzo il fatto che
#                                tutte le righe, esclusi i nomi dei files, hanno ":" 

# zcat $file | \
# while read a b c d  ; 
# do 
#   echo $a  
# 
#   case $a in 
#     Directory: ) poolpath=$b ; echo " pool directory: $poolpath " ;; 
#     *: )         echo "nothing to do for line $a $b $c $d  " ;;
#     [0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]*[!:] ) nomefile=$c ; echo "fetching file: $poolpath$nomefile " ;;
#     * ) echo "unknown line line $a $b $c $d  " ;;
#    esac 
# 
# 
# done  
#         
# 1 --------------------------   uso istruzione grep , con opzione -q  
#                                che non scrive in out, ma da return code
#                                abbino il grep ad una serie di if then elif .. . 
 
 zcat $file | \
 while read a b c d  ; 
 do 
   #echo $a  
   if echo $a | grep -q  "Directory:"  ; then 
      echo " directory found: $a $b "
   elif  echo $a |    grep -q -e "[0-9a-z]\{30\}" ; then 
      echo " pool file found: $c "
   else 
      echo "nothing to do for line $a $b $c $d  " 
   fi
done   









