Comment puis-je extraire la version du paquet de debian / changelog?

11

Quelle est la façon la plus robuste pour analyser d'un paquet source debian/changelogde fichier (ou debian/control?) Pour obtenir le numéro de version du package? Quelque chose comme:

pkgver=$(dpkg-parsechangelog | magic_goes_here)

Je veux extraire le numéro de version (et que le numéro de version) pour que je puisse le manipuler dans un script.

Je me attendais à trouver un dpkg-*utilitaire à cet effet, mais je ne l' ai pas encore trouvé.

Richard Hansen
la source

Réponses:

18

Si vous disposez de la version 1.17.0 ou ultérieure, vous pouvez utiliser

dpkg-parsechangelog --show-field Version

Pas besoin de traiter ensuite la sortie. Cette version est actuellement (février 2014) disponible dans les tests Debian.

Martin Geisler
la source
1
@RichardHansen: Désolé, il s'avère que le drapeau n'est pas disponible dans la version présente dans Debian Stable.
Martin Geisler
Idem pour Ubuntu 12.04. Il est cependant présent dans Ubuntu 14.04.
Stefan
7

Il existe de nombreuses façons de procéder.

dpkg-parsechangelog | sed -n 's/^Version: //p'

Ou bien:

dpkg-parsechangelog | grep Version: | cut -d' ' -f2-

andrewsomething
la source
J'espérais quelque chose d'un peu plus robuste - la deb-control(5)page de manuel ne décrit pas clairement le format et je ne veux faire aucune hypothèse. Par exemple, il ne précise pas que les champs doivent commencer sur une ligne ("Les champs sont délimités uniquement par des balises de champ."). Il indique également qu'un champ peut s'étendre sur plusieurs lignes, et il ne dit rien sur l'espacement entre la balise et la valeur, donc peut Version:123-être devrait être interprété comme une continuation du champ précédent et non un champ de version distinct (en raison de l'absence d'un espace après le colon).
Richard Hansen
En pratique, la sortie de dpkg-parsechangelogva ressembler à Version: 0.6.11-2Si vous voulez que quelque chose fasse une analyse plus robuste du debian/controlformat, vous pouvez utiliser python-debianou libparse-debcontrol-perl.
andrewsomething
1

dpkg-parsechangelogfonctionne, et la réponse précédente canalisant la sortie via sed / grep devrait être entièrement robuste. Si vous souhaitez connaître les détails précis du format de dpkg-parsechangelogsortie et de la plupart des autres fichiers de contrôle de style Debian, consultez la RFC 822 . Il n'est jamais acceptable qu'une version de paquet deb contienne une nouvelle ligne, un espace ou tout autre caractère spécial ou de contrôle (voir man deb-version), donc la Version: blahligne " " dans la sortie sera toujours présente, et ce sera toujours une seule ligne sur son posséder.

Cependant, dpkg-parsechangelogc'est un programme très lourd à exécuter juste pour obtenir le numéro de version actuel à partir d'un journal des modifications. Il doit exécuter Perl et charger un nombre impressionnant de bibliothèques afin de vous donner un résultat, dont la plupart ne seront pas utilisés. Sur des plates-formes plus lentes, ou avec des supports de stockage de fichiers lents, ou lorsque vous devez faire cette version en analysant beaucoup de fois, cela se révélera très douloureusement lent. À la place, utilisez simplement ce qui se trouve à l'intérieur du premier ensemble de parenthèses sur la première ligne:

head -1 debian/changelog | awk -F'[()]' '{print $2}'

Cela vous permettra d'obtenir la version de package actuelle correcte avec tout changelogfichier valide utilisant le format standard (et les debian/changelogformats non standard ne sont jamais utilisés à des fins générales pratiques).

paul
la source
-1

comme je l'ai vu, la version du package consiste en une partie d'en-tête du fichier journal des modifications. donc vous pouvez le faire comme

pkgver=$(dpkg-parsechangelog | head

J'ai essayé cette commande pour les packages installés, par exemple

aptitude changelog shutter | head

&

jai@frank-Jai:~$ aptitude changelog shutter | head
Get: Changelog of shutter
shutter (0.89.0-0ubuntu1) quantal; urgency=low

  * New upstream release.
   - Adds an AppIndicator (LP: #805464).
  * debian/control: Recommend libgtk2-appindicator-perl

 -- Andrew Starr-Bochicchio <[email protected]>  Sat, 11 Aug 2012 17:36:18 -0400

shutter (0.88.3-1) unstable; urgency=low
jai@frank-Jai:~$ 
rɑːdʒɑ
la source
1
Je veux le numéro de version et seulement le numéro de version pour pouvoir le manipuler dans un script.
Richard Hansen