Newsgroup: it.comp.macintosh
Titolo: Disinstallare dipendenze con MacPorts

Io son 20 minuti che guardo la man page perche' voglio dare
una bella piallata a XFree e librerie varie.
Non ditemi che mi devo disinstallare tutte le dipendenze a
mano che non ci credo, ho installato Gimp, saran 600 ...
C'e' un modo ?
  ngw
-- 
Last Played: Girl Afraid - Hatful of Hollow - The Smith

 C'e' un modo ?
Per quanto ne so io tutto quello che installano i macports č in /opt e
se elimini quella dir non hai altro da eliminare, tutte le dipendenze
dovrebbero essere lě, un pň come fa fink che butta tutto in /sw

 dovrebbero essere lì, un pò come fa fink che butta tutto in /sw
Non hai capito, voglio eliminare le dipendenze di XFree, mica i ports.
Quelli mi servono, ho di tutto li sopra ...


 Quelli mi servono, ho di tutto li sopra ...
Dunque, quello che volevo dire è che se usi port unistall, viene
eliminato tutto quello che ha dipendenze installate in /opt/local, per
il resto "a manina" ;)

:

Ma no affatto:
ngw@adreadedsunnyday ~$ sudo port uninstall XFree86
Password:
--->  Unable to uninstall XFree86 4.5.0_2, the following ports depend on it:
--->    xrender
--->    pango
--->    gtk2
--->    pango
--->    gtk2
--->    tk
Error: port uninstall failed: Please uninstall the ports that depend on XFree86 first.
  ngw
-- 
Now Playing: Hand in Glove - Hatful of Hollow - The Smith

 --->    tk
questo comportamento dowrebbe essere normale, comunque prova ad
aggiungere il tag -f (force). fai sapere se ci riesci che la cosa mi
interessa. cià

 --->    tk
questo comportamento dowrebbe essere normale, comunque prova ad


 C'e' un modo ?
Prova co' 'sto programmino in Perl a pie' di pagina (l'ho scritto in 2 
secondi, ma dovrebbe andare e, soprattutto, non produce danni ;-)
Il programma lista tutti i port "dependents" di un (o più) port (che gli 
passi in input), per cui, eseguendolo in questo modo (supponendo di 
averlo salvato nel file "
list_deps.pl
"):
perl 
list_deps.pl
 XFree86
si limita a stampare a video la lista di *tutti* i port installati 
dipendenti da XFree86 (uno per riga), visitando l'albero delle 
dipendenze in postordine.
Quindi dai un'occhiata ai port stampati e, quando sei convinto, puoi 
precedere alla disinstallazione one-shot degli stessi con:
perl 
list_deps.pl
 XFree86 | xargs sudo port uninstall
(Siccome l'albero delle dipendenze viene visitato in postordine, non 
dovresti ricevere errori di "Unable to uninstall...", ma se ne 
ricevessi, è sufficiente rilanciare il comando (inalterato) diverse 
volte, fin quando non verranno disinstallati tutti i port).
Se dovessi avere problemi o se ti viene in mente qualche feature utile 
da aggiungere, fammi sapere che ci vuole un attimo.
Ciao, Emanuele.
--- snip here ---
#!perl
# 
list_deps.pl
 - MacPorts dependents ports lister
# Usage: perl 
list_deps.pl
 port_name [port_name ...]
# Author: Emanuele Zeppieri
use strict;
use warnings;
local $" = "\n";
my @packages = @ARGV;
while ( my $p = pop @packages ) {
     my @dependents = split /\n/, qx[port dependents $p];
     if ( $dependents[0] !~ /no dependents/ ) {
         s/(^\S+).*$/$1/ foreach @dependents;
         push @packages, @dependents;
         print "@dependents\n"
     }
}

 volte, fin quando non verranno disinstallati tutti i port).
Errore da parte mia: è vero che l'albero veniva visitato in postordine, 
  però veniva stampato in ampiezza.
Il programma comunque funzionava come descritto, ma si ottenevano più 
errori di "Unable to uninstall...".
Ecco quindi una nuova versione dello script che, effettuando anche la 
stampa dell'albero in modalità depth-first, minimizza tali errori.
--- snip here ---
#!perl
# 
list_deps.pl
 0.2 - MacPorts dependents ports lister
# Usage: perl 
list_deps.pl
 port_name [port_name ...]
# Author: Emanuele Zeppieri
use strict;
use warnings;
local $" = "\n";
my @packages = @ARGV;
my @all_packages;
while ( my $p = pop @packages ) {
     my @dependents = split /\n/, qx[port dependents $p];
     if ( $dependents[0] !~ /no dependents/ ) {
         s/(^\S+).*$/$1/ foreach @dependents;
         push @packages, @dependents;
         unshift @all_packages, @dependents;
     }
}
print "@all_packages";

:

Lo cancella sicuramente, ma mi lascia i port orfani in giro.
Sto letteralmente piangendo sui miei ports di FreeBSD :D
  ngw
-- 
Last Played: Hand in Glove - Hatful of Hollow - The Smith

-Emanuele Zeppieri <ema...@tiscali.itSNIP_HERE.invalid>:

Eh, speravo di evitare le soluzioni hand made, ma grazie.
MacPorts, come immaginavo, si rivela un sistema piuttosto scarso,
ad esempio il port di ruby vedendo che XFree era presente si e'
probabilmente installato con le librerie Tk, e disinstallando
XFree ho chiaramente dovuto cancellare anche Ruby (e rubygems,
e rb-postgres), per poi reinstallarli. Fortuna che e' fatto col
culo e non mi ha disinstallato le gemme stesse ...
Vedro' quando ho tempo di tirar su un portupgrade, magari copiando
quello di FreeBSD che e' in Ruby.
Credo pero' che MacPorts mantenga meno metadati sui port installati
di FreeBSD (speriamo di no).
  ngw
-- 
Last Played: Hand in Glove - Hatful of Hollow - The Smith

 quello di FreeBSD che e' in Ruby.
Sarebbe una cosa ottima, anche perche` tcl nun se po` vede' (che detto 
da un perlista... ;-)
Ciao,
Emanuele.
-- 
What does VISTA mean?
Viruses, Infections, Spyware, Trojan horses & Adware.