deb-version - Indeling van het pakketversienummer in Debian
[epoche:]toeleveraarsversie[-debian-revisie]
De versienummers die gebruikt worden voor de binaire en
broncodepakketten van Debian bestaan uit drie componenten. Die zijn:
- epoche
- Dit is een enkel (meestal klein) positief geheel getal. Het mag weggelaten
worden en in dat geval wordt aangenomen dat het nul is. Indien het
weggelaten wordt, mag de toeleveraarsversie geen dubbele punt
bevatten.
- Het wordt gebruikt om te kunnen breken met een vergissing die bij de
versienummering van een eerdere versie van het pakket gemaakt werd of met
een vroeger versienummeringsschema.
- toeleveraarsversie
- Dit is het belangrijkste deel van het versienummer. Het is gewoonlijk het
versienummer van het originele (“upstream”) pakket waarvan
het .deb-bestand gemaakt werd, voor zover dit van toepassing is.
Gewoonlijk wordt dezelfde indeling gebruikt als die welke door de auteurs
van de software opgegeven wordt. Een herindeling kan nochtans nodig zijn
om ze te laten passen binnen de indeling van het systeem voor pakketbeheer
en -vergelijking.
- Het vergelijkingsgedrag van het pakketbeheerssysteem met betrekking tot de
toeleveraarsversie wordt hierna beschreven. Het onderdeel
toeleveraarsversie is een verplicht onderdeel van het
versienummer.
- De toeleveraarsversie mag enkel alfanumerieke
(“A-Za-z0-9”) tekens bevatten en de tekens . +
- : ~ (punt, plus, verbindingsteken, dubbele punt,
tilde) en moet met een cijfer beginnen. Als er geen debian-revisie
is, mogen geen verbindingstekens gebruikt worden en als het onderdeel
epoche ontbreekt, mogen geen dubbele punten gebruikt worden.
- debian-revisie
- Dit deel van het versienummer specificeert de versie van het Debian
pakket, gebaseerd op de versie van de toeleveraar. Het mag enkel
alfanumerieke tekens bevatten en de tekens + . ~
(plus, punt, tilde) en wordt op dezelfde manier vergeleken als de
toeleveraarsversie.
- Het is facultatief. Als het ontbreekt, mag de toeleveraarsversie
geen verbindingsteken bevatten. Deze indeling komt voor in het geval een
stuk software geschreven werd met de specifieke bedoeling er een Debian
pakket van te maken, zodat er slechts één enkele
“debianisering” van bestaat en er daarom geen
revisieaanduiding nodig is.
- Het is gebruikelijk om de debian-revisie terug op ‘1’
te laten beginnen telkens wanneer de toeleveraarsversie verhoogd
wordt.
- Dpkg splitst het versienummer op bij het laatste verbindingstekenteken uit
de tekenreeks (als er een in voorkomt) om te bepalen wat de
toeleveraarsversie is en wat de debian-revisie. In een
vergelijking is een versienummer zonder een debian-revisie een
lagere versie dan één met een dergelijke component (maar
merk op dat de debian-revisie het minst significante deel van een
versienummer is).
De onderdelen toeleveraarsversie en debian-revisie
worden door het pakketbeheersysteem met behulp van hetzelfde algoritme
vergeleken:
De tekenreeksen worden vergeleken van links naar rechts.
Eerst wordt van elke tekenreeks het eerste deel, dat volledig uit
niet-numerieke tekens bestaat, bepaald. Deze twee delen (waarvan er een leeg
mag zijn) worden lexicaal met elkaar vergeleken. Als een verschil
aangetroffen wordt, wordt ze teruggegeven. Een lexicale vergelijking is een
vergelijking van ASCII-waarden die aangepast wordt, zodat alle lettertekens
in de ordening voor alle niet-lettertekens komen en zodat een tilde voor
alles komt, zelfs het einde van een onderdeel. De volgende onderdelen zijn
bijvoorbeeld in volgorde weergegeven: ‘~~’,
‘~~a’, ‘~’, het lege deel,
‘a’.
Vervolgens wordt het eerste deel van de rest van elke tekenreeks
dat volledig uit cijfertekens bestaat, bepaald. De numerieke waarden van
deze twee delen worden vergeleken en een eventueel gevonden verschil wordt
als resultaat van de vergelijking teruggegeven. In deze context geldt een
lege tekenreeks (die enkel kan voorkomen op het einde van een of beide
vergeleken versietekenreeksen) als een nul.
Deze beide stappen (vergelijken en verwijderen van initiële
niet-numerieke en initiële numerieke tekenreeksen) worden herhaald
tot er een verschil gevonden wordt of tot beide tekenreeksen volledig
afgelopen werden.
Merk op dat een epoche bedoeld is om ons toe te laten fouten in
versienummering achter ons te laten en te kunnen omgaan met situaties
waarbij het versienummeringssysteem gewijzigd werd. Het is niet de
bedoeling ervan te kunnen omgaan met versienummers die lettertekenreeksen
bevatten die niet geïnterpreteerd kunnen worden door het
pakketbeheersysteem (zoals ‘ALPHA’ of ‘pre-’),
of met ondoordachte ordeningen.
De bijzondere betekenis van het tilde-teken bij het sorteren werd
geïntroduceerd in dpkg 1.10 en sommige onderdelen van de bouwscripts
van dpkg werden pas later in de 1.10.x-cyclus in staat gesteld het te
ondersteunen.