Ricerche e versioni

In modo predefinito, un modello trova corrispondenza con un pacchetto se una qualsiasi versione del pacchetto corrisponde al modello. Tuttavia alcuni modelli hanno restrizioni per far corrispondere i loro sottomodelli solo ad alcune versioni di un pacchetto. Ad esempio, il termine di ricerca ?depends(modello) seleziona qualsiasi pacchetto che dipende da un pacchetto che corrisponde a modello. modello però viene controllato solo per le versioni del pacchetto che realmente soddisfano una dipendenza. Ciò significa che se pippo dipende da pluto(>= 3.0) e sono disponibili le versioni 2.0, 3.0 e 4.0 di pluto, allora nel modello di ricerca ?depends(?version(2\.0)) solo le versioni 3.0 e 4.0 verranno testate per la parte ?version(2\.0) e perciò pippo non viene trovato da questa ricerca.

Quali versioni vengano testate è importante perché, come nell'esempio precedente, alcuni modelli corrispondono ad una versione ma non ad un'altra. Per esempio, il modello ?installed trova corrispondenza solo con la versione del pacchetto attualmente installata (se una c'è). In modo analogo, il modello ?maintainer(manutentore) trova corrispondenza solo con le versioni che hanno il manutentore indicato. Normalmente tutte le versioni di un pacchetto hanno lo stesso manutentore, ma non è sempre così; di fatto tutti i modelli di ricerca che esaminano i campi di un pacchetto (tranne quello del nome, naturalmente) si comportano in questo modo, perché tutti i campi di un pacchetto possono variare con le versioni.

Per testare un modello su tutte le versioni di un pacchetto, anche se normalmente verrebbero testate solo alcune delle versioni, usare il termine ?widen. Ad esempio, ?depends(?widen(?version(2\.0))) troverà corrispondenza con qualsiasi pacchetto A che dipenda da un pacchetto B, se B ha una versione che corrisponde a 2.0, indipendentemente dal fatto che quella versione soddisfi realmente la dipendenza di A. All'opposto, il termine ?narrow limita le versioni che trovano corrispondenza con il sottomodello: ?narrow(?installed, ?depends(?version(ubuntu))) corrisponde a qualsiasi pacchetto la cui versione installata ha una dipendenza che può essere soddisfatta da un pacchetto la cui stringa di versione contiene «ubuntu».

[Nota]Nota

Esiste una sottile, ma importante, distinzione tra cercare la corrispondenza di un modello con un pacchetto e cercarla con tutte le versioni di quel pacchetto. Quando viene cercata la corrispondenza di un modello con un pacchetto, viene testata la corrispondenza di ognuno dei suoi termini con il pacchetto e perciò ogni termine trova corrispondenza se una qualsiasi delle versioni del pacchetto corrisponde. Al contrario, quando viene ricercata la corrispondenza di un modello con ciascuna versione di un pacchetto, il modello trova corrispondenza se tutti i suoi termini fanno corrispondenza con la stessa versione del pacchetto.

Per esempio: se si suppone che sia installata la versione 3.0-1 del pacchetto aardvark, ma che sia disponibile la versione 4.0-1, allora l'espressione di ricerca ?version(4\.0-1)?installed trova corrispondenza con aardvark perché ?version(4\.0-1) corrisponde alla versone 4.0-1 di aardvark, mentre ?installed corrisponde alla versione 3.0-1. D'altra parte questa espressione non trova corrispondenza con tutte le versioni di aardvark perché non c'è alcuna versione che sia installata e che abbia anche il numero di versione 4.0-1.