Zoekopdrachten en versies

Standaard levert een patroon een pakket op, indien er een versie van dat pakket bestaat die aan het patroon beantwoordt. Nochtans kunnen sommige patronen aan hun subpatronen de restrictie opleggen om enkel de overeenkomst met sommige versies van een pakket te honoreren. Bijvoorbeeld, de zoekterm ?depends(patroon) zal alle pakketten opleveren die afhankelijk zijn van een pakket dat beantwoordt aan patroon. Nochtans zal patroon enkel getoetst worden aan die pakketversies die effectief aan een vereiste tegemoet komen. Dit houdt in dat indien foo afhankelijk is van bar (>= 3.0) en versies 2.0, 3.0, en 4.0 van bar beschikbaar zijn, er bij het zoekpatroon ?depends(?version(2\.0)) enkel bij versies 3.0 en 4.0 zal getoetst worden op ?version(2\.0), met als gevolg dat deze zoekopdracht foo niet zal vinden.

Het doet ertoe welke versies getoetst worden, omdat zoals in het voorgaande voorbeeld, sommige versies wel en andere niet kunnen beantwoorden aan het patroon. Bijvoorbeeld het patroon ?installed zal enkel een overeenkomst opleveren met de pakketversie die geïnstalleerd is (als het geïnstalleerd is). Evenzo zal het patroon ?maintainer(pakketbeheerder) enkel een overeenkomst opleveren met versies die door de opgegeven pakketbeheerder onderhouden worden. Gewoonlijk hebben alle versies van een pakket dezelfde pakketbeheerder, maar dat is niet altijd het geval. In feite zal elk zoekpatroon dat de velden van een pakket (behalve de naam ervan natuurlijk) doorzoekt, zich op die manier gedragen, omdat bij verschillende pakketversies alle velden van een pakket onderling kunnen verschillen.

Om een patroon aan alle versies van een pakket te toetsen, ook al zou dat normaal maar aan een aantal versies getoetst worden, moet u de term ?widen gebruiken. Bijvoorbeeld, ?depends(?widen(?version(2\.0))) zal een overeenkomst opleveren met elk pakket A dat een pakket B vereist, waarbij B een versie heeft die beantwoordt aan 2.0, ongeacht of die versie effectief aan de vereiste van A tegemoetkomt. Aan de andere kant beperkt de term ?narrow de versies waarmee zijn subpatroon vergeleken wordt: ?narrow(?installed, ?depends(?version(ubuntu))) zal een overeenkomst opleveren met elk pakket waarvan de geïnstalleerde versie een vereiste heeft waaraan voldaan kan worden door een pakket waarvan de versietekenreeks ubuntu bevat.

[Opmerking]Opmerking

Er is een subtiel maar belangrijk verschil tussen een patroon vergelijken met een pakket en het vergelijken met alle versies van dat pakket. Als een patroon met een pakket vergeleken wordt, wordt iedere term ervan met dat pakket vergeleken, en zo zal elk van de termen een overeenkomst opleveren als om het even welke versie van dat pakket eraan beantwoordt. Als een patroon daarentegen vergeleken wordt met elke versie van een pakket, zal er een succesvolle overeenkomst zijn als elk van zijn termen overeenkomt met dezelfde versie van dat pakket.

Bijvoorbeeld: veronderstel dat versie 3.0-1 van het pakket aardvark geïnstalleerd is, maar dat versie 4.0-1 beschikbaar is. Dan zal de zoekexpressie?version(4\.0-1)?installed een overeenkomst met aardvark opleveren, omdat ?version(4\.0-1) overeenkomt met versie 4.0-1 van aardvark, terwijl ?installed een overeenkomst met versie 3.0-1 oplevert. Anderzijds levert deze expressie niet voor alle versies van aardvark een overeenkomst op, omdat er geen enkele versie geïnstalleerd is die ook nog het versienummer 4.0-1 heeft.