2013-10-30 4 views
21

Quando si reinstalla un pacchetto utilizzando Cabal, uno di solito vede questo avvertimento:Perché la cabala si reinstalla "sempre pericolosa"?

Attenzione: Si noti che reinstalla sono sempre pericolosi. Continua comunque ...

Quali sono alcuni dei motivi alla base di questo messaggio?

+5

[SICP] (http://www.vex.net/~trebla/haskell/sicp.xhtml), la risposta canonica (in particolare la sezione sul conteggio goccia di piccione). –

+2

Anche il fatto che si ottiene questo "avviso", mentre sta facendo/fatto la reinstallazione comunque. –

+0

E qual è il punto di dirmi che è pericoloso se non hai intenzione di darmi un'opzione per prestare attenzione al messaggio e cancellarlo? – flarn2006

risposta

16

Attualmente, reinstallare un pacchetto significa sovrascrivere in modo distruttivo un pacchetto già installato. Se quel vecchio pacchetto ha delle dipendenze inverse sul sistema, non funzioneranno più.

Per rendere meno probabile questo, cabal-install controlla i database del pacchetto a cui ha accesso quando viene richiamato per tali dipendenze inverse e li elenca. In questa situazione, è necessario continuare con --force-reinstalls. Ma anche se non è possibile trovare alcuna dipendenza inversa, ciò non significa che non ce ne siano. È possibile che sul sistema siano presenti ulteriori database di pacchetti (ad esempio, più database utente) o directory di progetto che sono state configurate rispetto alla versione precedente del pacchetto da sovrascrivere. Non c'è modo per cabal-install di essere completamente sicuro, ecco perché avvisa che le reinstallazioni sono sempre pericolose.

+2

Le reinstallazioni sono sempre pericolose in una sandbox? –

+3

@SeanLeather Non è così pericoloso, quindi forse l'output di 'cabal-install' dovrebbe essere leggermente ridefinito. Una reinstallazione in una sandbox può ancora interrompere i pacchetti che utilizzano la sandbox (e le sandbox possono essere condivise tra più progetti, anche se non è tutto così comune). Ma può almeno non rompere nulla che non usi la sandbox. – kosmikus

+0

Quindi è una scala di materia quindi. Il problema è ancora lì; è solo che il danno è contenuto. Ed è possibile eliminare la sandbox in caso di problemi, mentre il database globale dei pacchetti è più problematico. Per quanto riguarda la condivisione di una sandbox tra i pacchetti, lo stiamo facendo. Non sono sicuro di quanto sia comune. –