Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[tool]Uno script per gestire le dir package.*
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools)
View previous topic :: View next topic  

Come preferite avvenga la suddivisione ?
1 file = 1 pacchetto (come l'albero del portage)
16%
 16%  [ 1 ]
1 file = 1 categoria
83%
 83%  [ 5 ]
Total Votes : 6

Author Message
Kernel78
Moderator
Moderator


Joined: 24 Jun 2005
Posts: 3654

PostPosted: Thu Aug 17, 2006 2:40 pm    Post subject: [tool]Uno script per gestire le dir package.* Reply with quote

L'ultima versione è reperibile sul wiki grazie agli importanti contributi di cloc3 (ormai se ne occupa praticamente lui)

Preso dalla voglia di cavoleggiare mi sono dedicato a creare un piccolo script che ho chiamato package.sh
Questo script dovrebbe (almeno nella mia mente malata) aiutare a inserire dei pacchetti nella struttura di directory package.*

Prima si poteva fare semplicemente
Code:
echo '<atom>[USE o keywords]' >> /etc/portage/package.<quello_che_ti_serve>
adesso abbiamo la possibilità di gestire, invece dei file, delle molto più organizzate directory, l'unico inconveniente è che non è più possibile farlo con un solo comando (almeno io non ne sono al corrente) e bisogna prima creare l'albero adeguato al pacchetto e successivamente mettere il nostro atom in un file avente lo stesso nome del pacchetto.
_________________
Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall).
Prima di postare un file togli i commenti con
Code:
grep -vE '(^[[:space:]]*($|(#|!|;|//)))'


Last edited by Kernel78 on Tue Aug 29, 2006 8:16 pm; edited 4 times in total
Back to top
View user's profile Send private message
randomaze
Bodhisattva
Bodhisattva


Joined: 21 Oct 2003
Posts: 9985

PostPosted: Thu Aug 17, 2006 3:54 pm    Post subject: Re: [tool]Uno script per gestire le dir package.* Reply with quote

Kernel78 wrote:
Lo script non si preoccupa se già esiste una definizione per quel pacchetto, andando a sovrascriverla.
A me sembrava una cosa carina, ditemi voi se ho buttato via 10 minuti o se a qualcuno viene utile.


Al momento non ho modo di provare se funziona... in ogni caso lo script dovrebbe essere un poco più conveniente dell'echo dato che la distrazione é sempre in agguato e le redirect >> e > non fanno esattamente la stessa cosa ;-)
_________________
Ciao da me!
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4787
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Thu Aug 17, 2006 8:03 pm    Post subject: Reply with quote

bello.

però usi una filosofia incompatibile con lo scriptino di preparazione che avevo fatto io.

Infatti, tu generi un file distinto per ogni pacchetto e lo collochi nella cartella corrispondente alla categoria di appartenenza.
Io avevo preferito raccogliere in un file singolo tutti i pacchetti appartenenti ad una stessa categoria, che dava nome al file corrispondente.

Pubblico di seguito una revisione compatibile del mio scriptino:
Code:

s939 ~ # cat split_package_list-2.sh
#!/bin/bash
HELP="
questo programma: \n
 1. genera un backup di /etc/portage/package.""$""1; \n
 2. genera la cartella /etc/portage/package.""$""1; \n
 3. suddivide in file distinti per cateoria il contenuto di package.""$""1. \n
\n
sintassi: split_package_list-2.sh opzione \n
Opzioni: -mask -unmask -keywords -use --help \n
"

# controlli iniziali
opzioni=" -mask -unmask -keywords -use "
if [ "$1" == "--help" ]; then echo -e "$HELP";exit;fi

if [ "$opzioni" == "${opzioni/$1}" ]; then
  echo parametro non valido;
  exit;
fi

chiave=${1:1}
gen_path="/etc/portage/package."
if [ -d ${gen_path}"$chiave" ]; then
  echo "La cartella ${gen_path}"$chiave" esiste già"
  exit 1
fi

if [ ! -e ${gen_path}"$chiave" ]; then
 echo "il percorso ${gen_path}"$chiave" non esiste"
 exit 1
fi

#backup
mv -v ${gen_path}"$chiave" ${gen_path}"$chiave".old
mkdir ${gen_path}"$chiave"

#split: decommentare le due linee nel seguito e commentare le successive se si desidera sopprimere i commenti.

#for pacchetto in `sed '/^#/d' ${gen_path}"$chiave".old |sed 's/[>=#]//g' | sed -e 's/-[0-9].*//'`; do
for pacchetto in `sed 's/[>=#]//g' ${gen_path}"$chiave".old  | sed -e 's/-[0-9].*//'`; do
if [ ! -e ${gen_path}"$chiave"/$pacchetto ]; then
  echo $pacchetto
  categoria=$(echo -n $pacchetto |sed -e 's/\/.*//')
  mkdir -p ${gen_path}"${chiave}"/$categoria
  #grep -v ^# ${gen_path}"$chiave".old | grep "$pacchetto" > ${gen_path}"$chiave"/$pacchetto
  grep "$pacchetto" ${gen_path}"$chiave".old > ${gen_path}"$chiave"/$pacchetto
 fi
done

Magari dagli un occhio, se funge.
_________________
vu vu vu
gentù
mi piaci tu
Back to top
View user's profile Send private message
Kernel78
Moderator
Moderator


Joined: 24 Jun 2005
Posts: 3654

PostPosted: Fri Aug 18, 2006 7:22 am    Post subject: Reply with quote

Ops ... e pensare che ho sviluppato il mio pensando al tuo, solo che mentre il tuo l'ho usato sulla mia macchina a casa lo script l'ho sviluppato in ufficio :(

Che bischero ... sto valutando di modificarlo per adattarlo alla tua prima versione dello script.

Con la modalità che ho implementato io il risultato che si ottiene è qualcosa di simile all'albero del portage ma penso che sia una granularità eccessiva ...

Avete pareri in merito ? Vi verrebbe più comodo tenere 1 file = 1 pacchetto o preferite 1 file = 1 categoria ?
_________________
Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall).
Prima di postare un file togli i commenti con
Code:
grep -vE '(^[[:space:]]*($|(#|!|;|//)))'
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4787
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Fri Aug 18, 2006 7:42 am    Post subject: Reply with quote

Kernel78 wrote:
lo script l'ho sviluppato in ufficio :(

Se il principale viene a sapere che era pure sbagliato :roll: .
_________________
vu vu vu
gentù
mi piaci tu
Back to top
View user's profile Send private message
.:chrome:.
Advocate
Advocate


Joined: 19 Feb 2005
Posts: 4588
Location: Brescia, Italy

PostPosted: Fri Aug 18, 2006 11:59 am    Post subject: Re: [tool]Uno script per gestire le dir package.* Reply with quote

nessuna delle due possibilità:
la prima mi sembra un po' troppo confusionaria: creerebbe una quantità di file enorme difficile da gestire
la seconda secondo me non rispecchierebbe lo scopo per cui si utilizza package.keywords. mi spiego:

se voglio installare la versione testing di GNOME dovrò pescare pacchetti da gnome-base, gnome-extra, x11-libs, e altro ancora che non mi viene in mente.
sarebbe più logico, secondo me, avere un file che si chiama appunto "gnome" con tutto quello che serve, indipendentemente dalla categoria.
sono riuscito a spiegarmi?
Back to top
View user's profile Send private message
Kernel78
Moderator
Moderator


Joined: 24 Jun 2005
Posts: 3654

PostPosted: Fri Aug 18, 2006 12:14 pm    Post subject: Reply with quote

Penso di aver capito cosa intendi ma la complessità di gestione a quel punto mi sembra molto più grande e, almeno a prima vista, mi sembra più "confusionaria", cerco di spiegarmi.
La complessità arriverebbe dal definire un file (es. gnome) in cui mettere tutto quello che voglio per smascherare gnome ma il nome del file verrebbe scelto arbitrariamente dall'utente e quindi almeno un parametro in più (su cui non potrei fare controlli in quanto arbitrario) ciò ovviamente si presta a errori di scrittura che genererebbero più file (es. gmone o gnmoe ecc ecc).
Da questo deriverebbe anche confusione; poniamo che l'utente non sbagli MAI, dovrebbe ricordarsi che alcuni pacchetti di x11-libs si trovano in un file gnome e altri magari in un file kde, magari conflittuali l'uno con l'altro.

Effettivamente mi rendo conto che un file per pacchetto è eccessivo ma quello che proponi tu mi pare molto più vulnerabile all'errore umano, mi convinco sempre più che la strada migliore sia 1 file = 1 categoria

Quasi quasi provo a implementare un file di configurazione con un parametro che specifichi se usare 1 file = 1 pacchetto, 1 file = 1 categoria o 1 file = 1 concetto (la proposta di k).
Va da se che nell'ultimo caso ci sarebbe bisogno di un parametro in più da passare allo script ...

Cosa ve ne pare ?
_________________
Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall).
Prima di postare un file togli i commenti con
Code:
grep -vE '(^[[:space:]]*($|(#|!|;|//)))'
Back to top
View user's profile Send private message
.:chrome:.
Advocate
Advocate


Joined: 19 Feb 2005
Posts: 4588
Location: Brescia, Italy

PostPosted: Fri Aug 18, 2006 4:52 pm    Post subject: Reply with quote

Kernel78 wrote:
Effettivamente mi rendo conto che un file per pacchetto è eccessivo ma quello che proponi tu mi pare molto più vulnerabile all'errore umano, mi convinco sempre più che la strada migliore sia 1 file = 1 categoria

questione di punti di vista, credo.
io uso il metodo che ho descritto nel post precedente e non mi trovo male. nel momento voglio sapere in quale file si trova un certo pacchetto basta un grep.

ti mostro il lato opposto del problema (quello in cui acquista maggiornamente significato il mio metodo):
poniamo che oggi decido di installare la versione testing di GNOME. mi faccio dunque il mio file e caccio dentro quello che mi serve.
domani decido di disinstallare, oppure viene stabilizzata la versione che ho installato... mi basta cancellare un file per ristabilire la normalità.
non è più sepmplice fare così?
Back to top
View user's profile Send private message
Onip
Advocate
Advocate


Joined: 02 Sep 2004
Posts: 2912
Location: Parma (Italy)

PostPosted: Fri Aug 18, 2006 5:06 pm    Post subject: Reply with quote

quoto k.gothmog, quella che lui propone è la prima cosa che mi era venuta in mente quando ho saputo della possibilità di gestire package.* come dir. Anche se una "feature" del genere, probabilmente, starebbe meglio integrata in forcekeymask IMHO.

Byez
_________________
Linux Registered User n. 373835

Titus Lucretius Carus, De Rerum Natura - Tantum religio potuit suadere malorum
Back to top
View user's profile Send private message
Kernel78
Moderator
Moderator


Joined: 24 Jun 2005
Posts: 3654

PostPosted: Fri Aug 18, 2006 5:55 pm    Post subject: Reply with quote

Diciamo che per accontentare tutti ho reso configurabile il programma per scegliere la strada che si preferisce :wink:
Ho fatto un po' di prove veloci e mi sembrava andare tutto bene ma il bug è sempre in agguato ...

Intanto sto iniziando a pensare a uno script per la gestione completa: inserire, cancellare, commentare e modificare.
Spero di trovare il tempo ...
_________________
Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall).
Prima di postare un file togli i commenti con
Code:
grep -vE '(^[[:space:]]*($|(#|!|;|//)))'
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4787
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Sat Aug 19, 2006 7:49 am    Post subject: Reply with quote

Kernel78 wrote:
Diciamo che per accontentare tutti ho reso configurabile il programma per scegliere la strada che si preferisce :wink:

Fantastico, messa così, la cosa sembra avere una forma.
Tanto per cominciare, una cosa bella, ma alla quale bisogna fare attenzione, è che le tre filosofie possono tranquillamente coesistere.

Bisogna però fare a non collocare lo stesso pacchetto in posti diversi.
Attualmente manca ancora una procedura di editing, per togliere i pacchetti indesiderati o da spostare, ma bisogna comunque evitare i doppioni.
Per questo vorrei proporre la seguente patch:
Code:

25a26,27
> ESISTE="Il pacchetto è già presente nei seguenti file:\n"
>
62a65
> check=`grep -rl "$category"/"$package" "$pkg_path"` ; if [ "$check" ] ; then echo -e "$ESISTE""$check" & exit 1;fi

Se c'è qualche problema con il taglia incolla che fa fallire la patch, basta inserire la variabile all'inizio e l'ultima riga prima del comando `mkdir -p $pkg_path;`
_________________
vu vu vu
gentù
mi piaci tu
Back to top
View user's profile Send private message
Luca89
Advocate
Advocate


Joined: 27 Apr 2005
Posts: 2107
Location: Agrigento (Italy)

PostPosted: Sat Aug 19, 2006 3:37 pm    Post subject: Reply with quote

Onip wrote:
quoto k.gothmog, quella che lui propone � la prima cosa che mi era venuta in mente quando ho saputo della possibilit� di gestire package.* come dir. Anche se una "feature" del genere, probabilmente, starebbe meglio integrata in forcekeymask IMHO.

Byez


Già ci sta, forcekeymask quando vede /etc/portage/package.* come directory chiede all'utente il nome del file dove piazzare i pacchetti. Anche io sono d'accordo con l'idea di k.gothmog, ho configurato tutto in questo modo fin dal primo momento che ho avuto fra le mani il nuovo portage e mi trovo benissimo.
_________________
Running Fast!
Back to top
View user's profile Send private message
Onip
Advocate
Advocate


Joined: 02 Sep 2004
Posts: 2912
Location: Parma (Italy)

PostPosted: Mon Aug 21, 2006 2:18 pm    Post subject: Reply with quote

ottimo, non lo avevo ancora provato. Sto ancora utilizzando il "singolo file". Al prossimo smascheramento pesante vedrò di cambiare.
_________________
Linux Registered User n. 373835

Titus Lucretius Carus, De Rerum Natura - Tantum religio potuit suadere malorum
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4787
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Sun Aug 27, 2006 11:30 pm    Post subject: Reply with quote

Kernel78 wrote:

Intanto sto iniziando a pensare a uno script per la gestione completa: inserire, cancellare, commentare e modificare.
Spero di trovare il tempo ...

con il permesso di Kernel78, lo ho fatto io (almeno credo), perché non dormo moltissimo.

ho inserito anche un certo numero di controlli.
il programma dovrebbe ridurre al minimo il rischo di errori di sintassi e riconosce certe caratteristiche del portage locale facendo uso di `equery uses`.

se non ci sono bachi funziona. È più lungo di quanto mi aspettassi.
lo posto qui e poi lo metto sul wiki:

Ho cambiato anche il file /etc/packagerc:
Code:

s939 ~ # cat /etc/packagerc
# group specifica la modalità di raggruppamento.
# Può essere controllata attraverso l'opzione -rc
# senza editare questo file.

# Valori possibili:
#       0       1 file = 1 categoria (default)
#       1       1 file = 1 pacchetto (genera una struttura portage-like)
#       2       1 file = 1 concetto  (definito dall'utente)

# Il valore 2 permette di aggiungere un ulteriore parametro
# -group <nome_gruppo> (es. -group gnome).

# in questo modo i pacchetti possono essere catalogati in file
# con denominazione concettuale arbitraria, prescelta dall'utente.

group=2

e questo è il programma:
Code:

s939 ~ # cat `which package-0.9.7.sh`
#!/bin/bash

DESCRIPTION="
\n
# sviluppato sull'impianto progettuale di Kernel78\n
# per ingannare l'insonnia\n
# http://forums.gentoo.org/viewtopic-t-490005.html\n
\n
#\n
#tool di gestione della cartella /etc/portage\n
#\n
# FEATURES:\n
#    a) 3 modalità differenti di catalogazione dei pacchetti\n
#       1 file per singolo pacchetto\n
#       1 file per singola categoria\n
#       1 file per categoria concettuale arbitraria\n
#    nota: il programma permette di mantenere una modalità mista, ed effettua\n
#       automaticamente le modifiche indispensabili in caso di transizione.\n
#       per ricavare informazioni sul sistema, il programma richiama \`equery uses\`.\n
#\n
#    b) è controllata l'unicità dei pacchetti: non è possibile inserire\n
#       lo stesso pacchetto in due file differenti, anche usando modalità miste\n
#       di catalogazione.\n
#\n
#    c) esiste una funzione di rimozione di singoli pacchetti.\n
#\n
#    d) è possibile inserire linee valide commentate.\n
#\n
#    e) sono implementati alcuni controlli formali sugli atom\n
#       - verifica l'uso corretto del numero di versione \n
#       - non accetta pacchetti non definiti in portage (o in portage_overlay)\n
#       - non accetta useflag non riconosciute tra quelle specifiche del pacchetto.\n
#       - ripulisce eventuali opzioni superflue nelle chiamate di tipo -mask o -unmask.\n
#       - controlla la validità delle accept_keywords.\n
#\n
#    f) modifica automaticamente il proprio file di configurazione /etc/packagerc\n
#\n
"

HELP="\nUso: package.sh OPZIONE 'PACCHETTO [FLAG]'\n\n
Gestisce l'aggiunta di un pacchetto alle directory /etc/portage/package.*\n
\n
        -desc           descrizione\n
\n
OPZIONE deve essere una delle seguenti:\n
        -keywords       gestisce la directory package.keywords\n
        -mask           gestisce la directory package.mask\n
        -unmask         gestisce la directory package.unmask\n
        -use            gestisce la directory package.use\n
\n
        -group  -g      gestisce la catalogazione per concetto\n
                        vedi /etc/packagerc\n
\n
        -rm             permette di rimuovere un pacchetto valido dalla chiave indicata\n
                        esempio:\n
                        pachages.sh -rm 'sys-apps/baselayout foo' -use\n
                        non premettere al nome del pacchetto i simboli '<=>'
\n\n
PACCHETTO deve essere un atom valido e può includere flag USE o keyword,\n
        l'atom è una successione di word separate da spazi\n
        esempi validi sono:\n
        <=app-emulation/wine-0.9.15 ~x86\n
        =x11-base/xorg-x11-7.0 -3dfx\n
        sys-kernel/gentoo-sources symlink\n
        si può inserire una linea commentata, premettendo un backslash al cancelletto:\n
        \\#>=x11-base/xorg-x11-7.0 -3dfx\n
\n
# sviluppato sull'impianto progettuale di Kernel78\n
# http://forums.gentoo.org/viewtopic-t-490005.html\n
"

source /etc/packagerc

ESISTE="Il pacchetto è già presente nei seguenti file:\n"
NON_ESISTE="il pacchetto indicato non esiste in portage"
NO_USE_FLAG=" : questa use_flag indicata non appartiene a quelle specifiche del pacchetto"
NO_ACCEPT_KEYWORD="accept keyword non valida"
NO_VERSION="stai utilizzando i simboli '<=>' : serve il numero di versione"
NO_CONDITION_ALLOWED="in questo contesto non puoi specificare il numero di versione o usare i simboli '<=>'"
NO_VALID_GROUP="i gruppi validi sono 0 1 2"
NO_GROUP="modalità 2 attiva ma opzione -group non utilizzata. Inserimento in modalità 0."

function is_valid_accept_keyword ()
{
 KEY=`cat /usr/portage/profiles/arch.list`
 for i in $KEY ; do
   if [ "$1" == "$i" ] || [ "$1" == "~""$i" ] || [ "$1" == "-""$i" ] || [ "$1" == "-*" ]; then return 0 ;fi
 done
 echo $NO_ACCEPT_KEYWORD ; exit 1
}

function file_to_dir ()
{
local pkg_path
pkg_path="$1"
mv -f "$pkg_path" "${pkg_path}"".tmp"
mkdir "$pkg_path"
for string in `cut -f1 -d' ' "${pkg_path}"".tmp" |cut -f2 -d'/'`;do
 if [ ! -e "$pkg_path""$string" ]; then
  grep "$string" "${pkg_path}"".tmp" >> "${pkg_path}"/"$string"
 fi
done
rm -f "${pkg_path}"".tmp"
return 0
}

function dir_to_file ()
{
local pkg_path
pkg_path="$1"
mv -f "$pkg_path" "${pkg_path}"".tmp"
cat "${pkg_path}"".tmp"/*>"${pkg_path}"
rm -rf "${pkg_path}"".tmp"
return 0
}

if [ ! -n "$group" ]
then
  echo "group=0">>/etc/packagerc
  group=0
fi

ARGREQ=1
argreq="$#"
num_atom=0

until [ -z "$1" ]
do
  case "$1" in
    "-desc" | "-help" | "-h" )                  description=1;;
    "-rc" )                                     rc=1;group=$2;;
    "-keywords"|"-use"|"-mask"|"-unmask" )      dir_suff=${1/-/};;
    "-group" |"-g" )                            gruppo=$2;shift;ARGREQ=3;;
    "-rm" )                                     remove=1;ARGREQ=2;;
    * )                                         atom="${atom}""$1"" ";num_atom=$(($num_atom +1));;
  esac
  shift
done

if [ $description ]; then echo -e $DESCRIPTION; exit 0;fi

if [ $rc ]; then
 case "$group" in "0" | "1" | "2" )     sed_string="/^group=/s/.*/group="$group"/";
                                        sed -i ${sed_string} /etc/packagerc
                                        exit 0;;
 * )                                    echo "$NO_VALID_GROUP";exit 1;;
 esac
fi

if [ -z "$atom" ];then echo -e $HELP;exit 1;fi

if [[ -n $gruppo  && "$remove" == 1 ]] ;then ARGREQ=4;fi
argreq=$(($argreq - $num_atom ))

if [ $argreq -ne $ARGREQ ]
then
  echo -e $HELP
  exit 1
fi

if [[ "$group" == "2" && -z "$gruppo" ]]; then echo $NO_GROUP;fi

gen_path="/etc/portage/package."

category=$(echo -n $atom|sed -e 's/\/.*//'|sed -e 's/[#<>=]//g')
package=$(echo -n $atom|sed -e 's/.*\///'|sed -e 's/-[0-9].*//'|sed -e 's/\s.*//')
pkg_path="$gen_path""$dir_suff"
base_string=`echo "$atom"|cut -f1 -d' '|sed 's/\(.*\)-[[:digit:]]\(.*\)/\1/'|tr -d '<=>'`;
match=`grep -rH "$base_string" $pkg_path`
for line in $match; do
 if [ "$base_string" == "`echo "$line"|cut -f2 -d':'`" ];then
 # rimozione righe
  if [ "$remove" == 1 ];then
   sed_string=/`echo "$base_string"|sed 's|/|\\\/|'`/d;
   file=`echo "$line"|cut -f1 -d':'`
   sed -i ${sed_string} "$file"
   if [ ! -s "$file" ];then rm -f "$file";fi
  else
# controllo di unicità
    is_unic="$is_unic"`echo "$line"|sed 's/\(.*\):\(.*\)/\1\\n/'`
  fi
fi;
done;
if [ "$remove" == 1 ];then exit 0;fi
if [ -n "$is_unic" ];then echo -e "$ESISTE""$is_unic" & exit 1;fi

if [ "${atom:0:1}" == "#" ] ;then is_comment=1;fi;

case "$group" in
        0)      filename=$category;
                if [ -d "$pkg_path"/"$filename" ];then dir_to_file "$pkg_path"/"$filename";fi;;
        1)      pkg_path="$pkg_path"/"$category";
                filename=$package;
                if [ -f "$pkg_path" ];then file_to_dir "${pkg_path}";fi;;
        2)      pkg_path=$gen_path$dir_suff;
                filename=${gruppo-"$category"};
                if [ -d "$pkg_path"/"$category" ];then dir_to_file "$pkg_path"/"$category";fi;;
        *)      exit 1;;
esac

#controlla se il pacchetto indicato in $atom esiste in portage
valid_use_flags=`equery uses -a "$category"/"$package"|sed 's/[-+]//g'`;
if [ "${valid_use_flags:0:1}" == "!" ];then echo "$NON_ESISTE"; exit 1;fi
# fine controllo

#controlli di validità formale
#1. controllo del corretto uso del numero di versione

case ${atom:0:1} in "<" | ">" | "=" )
 version=`echo "$atom"|cut -f1 -d' '|sed 's/\(.*\)-\(.*\)/\2/'`;
 if [[ "$dir_suff" == "keywords" && -n  "$version" ]];then echo $NO_CONDITION_ALLOWED;exit 1;fi
 if [ -z "$version" ];then echo $NO_VERSION;exit 1;fi;
;;esac

#2. la useflag è una IUSE?
if [ "$dir_suff" == "use" ] && [ ! "$is_comment" ]; then
 use=`echo $atom|sed 's/.*[[:blank:]]//'|tr -d '+-'`
 for use_flag in $use; do
  if [ "${valid_use_flags/"$use_flag"}" == "$valid_use_flags" ];
   then echo "$use_flag""$NO_USE_FLAG"; exit 1 ;
  fi
 done
fi

#3. ripulisce eventuali opzioni nelle chiamate di tipo -mask o -unmask
#4. controlla la validità della accept_keyword
case "$dir_suff" in
 "mask" | "unmask" )    atom=`echo "$atom"|cut -f1 -d' '`;;
 "keywords" )           is_valid_accept_keyword `echo $atom|cut -f2 -d ' '`;;
esac

mkdir -p $pkg_path;

tmpfile="/tmp/fo"
while [  -e "$tmpfile"o ]; do tmpfile="${tmpfile}"o ;done
tmpfile="$tmpfile"o

if [ ! -e "$pkg_path"/"$filename" ]; then touch "$pkg_path"/"$filename";fi
echo "$atom"| cat - "$pkg_path"/"$filename"|sort >"$tmpfile" ; mv "$tmpfile"  "$pkg_path"/"$filename"

edit 1 versione 0.9.5
edit 2 versione 0.9.7
_________________
vu vu vu
gentù
mi piaci tu


Last edited by cloc3 on Tue Aug 29, 2006 4:25 pm; edited 3 times in total
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4787
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Mon Aug 28, 2006 11:06 pm    Post subject: Reply with quote

ho fatto una nuova versione.

quella di prima funzionava, ma non mi piaceva il controllo del flusso.

nella prima stesura, infatti, non riuscivo abbastanza bene a dipanare il traffico di condizioni da coordinare e avevo messo delle patch che non i piacevano nelle funzioni, per tenere in piedi il meccanismo.
d'altra parte non sono abituato a maneggiare codice complicato.

adesso ho spostato la funzione di rimozione e il controllo di unicità all'inizio e ne ho semplificato il codice.

provo a chiamarla versione 0.9

a proposito: nessuno ha provato a far girare il programma?
_________________
vu vu vu
gentù
mi piaci tu
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4787
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Tue Aug 29, 2006 4:22 pm    Post subject: Reply with quote

adesso ho anche tolto gli apici.

non piaceva costringere l'utente a unire in una stringa l'atom da inserire.
così ho modificato leggermente le istruzioni di parsing.
adesso i parametri possono essere introdotti in qualunque ordine. solo l'atom è letto sequenzialmente, ma può essere separato dalle opzioni.

in più, adesso accetta anche le use con il + o il meno davanti, mentre prima falliva il controllo.
gulp. questo mi deprime un po'.
se un baco così evidente passa inosservato, vuol dire che il tool è proprio inutile :).

pazienza. a me è comodo e ho imparato un sacco di trucchi scrivendolo.
scusate se sono stato un po' disordinato nel presentarlo.
_________________
vu vu vu
gentù
mi piaci tu
Back to top
View user's profile Send private message
Kernel78
Moderator
Moderator


Joined: 24 Jun 2005
Posts: 3654

PostPosted: Tue Aug 29, 2006 8:18 pm    Post subject: Reply with quote

cloc3 wrote:
adesso ho anche tolto gli apici.

non piaceva costringere l'utente a unire in una stringa l'atom da inserire.
così ho modificato leggermente le istruzioni di parsing.
adesso i parametri possono essere introdotti in qualunque ordine. solo l'atom è letto sequenzialmente, ma può essere separato dalle opzioni.

in più, adesso accetta anche le use con il + o il meno davanti, mentre prima falliva il controllo.
gulp. questo mi deprime un po'.
se un baco così evidente passa inosservato, vuol dire che il tool è proprio inutile :).

pazienza. a me è comodo e ho imparato un sacco di trucchi scrivendolo.
scusate se sono stato un po' disordinato nel presentarlo.

Io purtroppo in questo periodo sono strapieno di lavoro e non è cha abbia molto tempo per mettermi a testare lo script ma apprezzo enormemente tuto quello che fai per migliorarlo, spero di riuscire a liberarmi in fretta per poterlo testare e aiutarti a perfezionarlo ulteriormente :wink:
_________________
Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall).
Prima di postare un file togli i commenti con
Code:
grep -vE '(^[[:space:]]*($|(#|!|;|//)))'
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4787
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Tue Aug 29, 2006 8:26 pm    Post subject: Reply with quote

Kernel78 wrote:
spero di riuscire a liberarmi in fretta per poterlo testare e aiutarti a perfezionarlo ulteriormente :wink:

grazie. adesso lo lascio stare almeno una settimana come è, perché credo che funzioni.

poi, se non saltano fuori bachi o idee per migliorarlo, proverò a ripulire il codice, eliminare le variabili superflue e renderlo più leggibile.
_________________
vu vu vu
gentù
mi piaci tu
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum