Como eu extraio a versão do pacote do debian / changelog?

9

Qual é a maneira mais robusta de analisar o arquivo debian/changelog do pacote fonte (ou debian/control ?) para obter o número da versão do pacote? Algo como:

pkgver=$(dpkg-parsechangelog | magic_goes_here)

Eu quero extrair o número da versão (e somente o número da versão) para que eu possa manipulá-lo em um script.

Eu estava esperando encontrar um utilitário dpkg-* para essa finalidade, mas ainda não encontrei nenhum.

    
por Richard Hansen 15.08.2013 / 04:13

4 respostas

16

Se você tiver a versão 1.17.0 ou posterior, use

dpkg-parsechangelog --show-field Version

Não há necessidade de processar a saída ainda mais. Esta versão está atualmente (fevereiro de 2014) disponível no Debian Testing.

    
por Martin Geisler 20.02.2014 / 09:07
7

Existem várias maneiras de fazer isso.

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

ou alternativamente:

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

    
por andrewsomething 15.08.2013 / 17:28
1

dpkg-parsechangelog funciona, e a resposta anterior, canalizar a saída por meio de sed / grep, deve ser totalmente robusta. Se você quiser saber detalhes precisos do formato de dpkg-parsechangelog output, e a maioria dos outros arquivos de controle no estilo debian, veja RFC 822 . Nunca é permitido que uma versão do pacote deb contenha uma nova linha, espaço ou qualquer outro caractere especial ou controle (veja man deb-version ), então a linha " Version: blah " na saída sempre estará presente, e sempre será seja uma única linha por conta própria.

No entanto, dpkg-parsechangelog é um programa pesado muito para ser executado apenas para obter o número da versão atual de um changelog. Ele precisa executar o Perl e carregar um número impressionante de bibliotecas para fornecer um resultado, a maioria das quais você não usará. Em plataformas mais lentas, ou com mídia de armazenamento de arquivos lenta, ou quando você precisar fazer várias vezes essa análise de versão, ela será dolorosamente lenta. Em vez disso, use o que estiver dentro do primeiro conjunto de parênteses na primeira linha:

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

Isso fará com que você obtenha a versão correta do pacote atual com qualquer arquivo changelog válido usando o formato padrão (e os formatos debian/changelog não padrão são, para todos os propósitos gerais práticos, nunca usados).

    
por the paul 22.08.2013 / 01:23
-1

como eu vi a versão do pacote consiste na parte do cabeçalho do arquivo changelog. então você pode fazer como

pkgver=$(dpkg-parsechangelog | head

Eu tentei este comando para pacotes instalados, por exemplo

aptitude changelog shutter | head

& amp;

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:~$ 
    
por Ten-Coin 15.08.2013 / 05:31