¿Cómo extraigo la versión del paquete de debian / changelog?

11

¿Cuál es la forma más sólida de analizar el debian/changelogarchivo de un paquete fuente (o debian/control?) Para obtener el número de versión del paquete? Algo como:

pkgver=$(dpkg-parsechangelog | magic_goes_here)

Quiero extraer el número de versión (y solo el número de versión) para poder manipularlo en un script.

Esperaba encontrar una dpkg-*utilidad para este propósito, pero aún no la he encontrado.

Richard Hansen
fuente

Respuestas:

18

Si tiene la versión 1.17.0 o posterior, puede usar

dpkg-parsechangelog --show-field Version

No es necesario procesar la salida más adelante. Esta versión está actualmente disponible (febrero de 2014) en Debian Testing.

Martin Geisler
fuente
1
@RichardHansen: Lo siento, resulta que la bandera no está disponible en la versión presente en Debian Stable.
Martin Geisler
Lo mismo para Ubuntu 12.04. Sin embargo, está presente en Ubuntu 14.04.
Stefan
7

Hay numerosas formas de hacer esto.

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

o alternativamente:

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

andrewsomething
fuente
Esperaba algo un poco más robusto: la deb-control(5)página de manual no describe claramente el formato y no quiero hacer ninguna suposición. Por ejemplo, no deja claro que los campos deben comenzar en una línea ("Los campos están delimitados solo por etiquetas de campo"). También dice que un campo puede abarcar varias líneas, y no dice nada sobre el espacio entre la etiqueta y el valor, por lo que tal vez Version:123debería interpretarse como una continuación del campo anterior y no como un campo de Versión separado (debido a la falta de un espacio después del colon).
Richard Hansen
En la práctica, el resultado dpkg-parsechangelogse verá así. Version: 0.6.11-2Si desea que algo haga un análisis más robusto del debian/controlformato, puede usar python-debiano libparse-debcontrol-perl.
andrewsomething
1

dpkg-parsechangelogfunciona, y la respuesta anterior que canaliza la salida a través de sed / grep debe ser completamente robusta. Si desea conocer detalles precisos del formato de dpkg-parsechangelogsalida y la mayoría de los otros archivos de control de estilo Debian, consulte RFC 822 . Nunca está bien que una versión del paquete deb contenga una nueva línea, espacio o cualquier otro carácter especial o de control (ver man deb-version), por lo que la Version: blahlínea " " en la salida siempre estará presente, y siempre será una sola línea en su propio.

Sin embargo, dpkg-parsechangeloges un programa muy pesado para ejecutarse solo para obtener el número de versión actual de un registro de cambios. Tiene que ejecutar Perl y cargar una cantidad impresionantemente grande de bibliotecas para obtener un resultado, la mayoría de los cuales no utilizará. En plataformas más lentas, o con medios de almacenamiento de archivos lentos, o cuando necesite analizar esta versión muchas veces, resultará muy lento. En su lugar, solo use lo que esté dentro del primer conjunto de paréntesis en la primera línea:

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

Eso le proporcionará la versión correcta del paquete actual con cualquier changelogarchivo válido que utilice el formato estándar (y los debian/changelogformatos no estándar , para todos los fines generales prácticos, nunca se utilizan).

el paul
fuente
-1

como he visto, la versión del paquete consiste en la parte del encabezado del archivo de registro de cambios. para que puedas hacerlo como

pkgver=$(dpkg-parsechangelog | head

He probado este comando para paquetes instalados, por ejemplo

aptitude changelog shutter | head

Y

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ʒɑ
fuente
1
Quiero el número de versión y solo el número de versión para poder manipularlo en un script.
Richard Hansen