web-dev-qa-db-fra.com

Comment extraire la version du paquet de debian / changelog?

Quel est le moyen le plus robuste d’analyser le fichier debian/changelog d’un paquet source (ou debian/control?) Pour obtenir le numéro de version du paquet? Quelque chose comme:

pkgver=$(dpkg-parsechangelog | magic_goes_here)

Je souhaite extraire le numéro de version (et niquement le numéro de version) afin de pouvoir le manipuler dans un script.

Je m'attendais à trouver un utilitaire dpkg-* à cette fin, mais je n'en ai pas encore trouvé.

11
Richard Hansen

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

dpkg-parsechangelog --show-field Version

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

18
Martin Geisler

Il existe de nombreuses façons de le faire.

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

ou bien:

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

7
andrewsomething

dpkg-parsechangelog fonctionne, et la réponse précédente acheminant la sortie via sed/grep devrait être entièrement robuste. Si vous voulez connaître les détails précis du format de la sortie dpkg-parsechangelog et de la plupart des autres fichiers de contrôle de style Debian, voir RFC 822 . Il n’est jamais acceptable pour une version de paquet deb de contenir une nouvelle ligne, un espace ou tout autre caractère spécial ou caractère de contrôle (voir man deb-version), de sorte que la ligne "Version: blah" de la sortie sera toujours présente, et ce sera toujours une seule ligne à part.

Cependant, dpkg-parsechangelog est un programme très lourd à exécuter uniquement 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 pour vous donner un résultat, que vous n'utiliserez pas pour la plupart. Sur des plates-formes plus lentes, ou avec des supports de stockage de fichiers lents, ou lorsque vous devez analyser cette version de nombreuses fois, elle sera extrêmement lente. Au lieu de cela, utilisez tout ce qui est à l'intérieur du premier ensemble de parenthèses sur la première ligne:

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

Cela vous donnera la version correcte du paquet en cours avec n'importe quel fichier changelog valide utilisant le format standard (et les formats non standard debian/changelog ne sont jamais utilisés, à toutes fins utiles).

1
the paul