Come estraggo la versione del pacchetto da debian / changelog?


11

Qual è il modo più efficace per analizzare il debian/changelogfile (o debian/control?) Di un pacchetto sorgente per ottenere il numero di versione del pacchetto? Qualcosa di simile a:

pkgver=$(dpkg-parsechangelog | magic_goes_here)

Voglio estrarre il numero di versione (e solo il numero di versione) in modo da poterlo manipolare in uno script.

Mi aspettavo di trovare un programma di dpkg-*utilità per questo scopo, ma non ne ho ancora trovato uno.

Risposte:


18

Se hai la versione 1.17.0 o successive, puoi usare

dpkg-parsechangelog --show-field Version

Non è quindi necessario elaborare ulteriormente l'output. Questa versione è attualmente (febbraio 2014) disponibile in Debian Testing.


1
@RichardHansen: Mi dispiace, si scopre che la bandiera non è disponibile nella versione presente in Debian Stable.
Martin Geisler,

Lo stesso per Ubuntu 12.04. È presente in Ubuntu 14.04 però.
Stefan,

7

Esistono numerosi modi per farlo.

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

o in alternativa:

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


Speravo in qualcosa di un po 'più robusto: la deb-control(5)pagina man non descrive chiaramente il formato e non voglio fare ipotesi. Ad esempio, non chiarisce che i campi devono iniziare su una riga ("I campi sono delimitati solo dai tag dei campi"). Dice anche che un campo può estendersi su più righe e non dice nulla sulla spaziatura tra il tag e il valore, quindi forse Version:123dovrebbe essere interpretato come una continuazione del campo precedente e non un campo Versione separato (a causa della mancanza di uno spazio dopo i due punti).
Richard Hansen,

In pratica, l'output di dpkg-parsechangelogsarà simile Version: 0.6.11-2Se si desidera eseguire un'analisi più solida del debian/controlformato, è possibile utilizzare python-debiano libparse-debcontrol-perl.
Andrewsomething

1

dpkg-parsechangelogfunziona e la risposta precedente che convoglia l'output tramite sed / grep dovrebbe essere del tutto solida. Se si desidera conoscere i dettagli precisi del formato di dpkg-parsechangelogoutput e la maggior parte degli altri file di controllo in stile debian, vedere RFC 822 . Non è mai accettabile che una versione del pacchetto deb contenga una nuova riga, uno spazio o qualsiasi altro carattere speciale o di controllo (vedi man deb-version), quindi la " Version: blah" linea nell'output sarà sempre presente e sarà sempre una singola riga sul suo proprio.

Tuttavia, dpkg-parsechangelogè un programma molto pesante da eseguire solo per ottenere il numero di versione corrente da un log delle modifiche. Deve eseguire Perl e caricare un numero impressionante di librerie per darti un risultato, la maggior parte delle quali non utilizzerai. Su piattaforme più lente, o con supporti di archiviazione file lenti, o quando è necessario eseguire questa versione analizzando molte volte, si rivelerà piuttosto lento. Invece, basta usare tutto ciò che è all'interno del primo set di parentesi sulla prima riga:

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

Ciò fornirà la versione del pacchetto corrente corretta con qualsiasi changelogfile valido utilizzando il formato standard (e i debian/changelogformati non standard non vengono mai usati, per tutti gli scopi pratici generali).


-1

come ho visto, la versione del pacchetto consiste nell'intestazione del file del log delle modifiche. così puoi farlo come

pkgver=$(dpkg-parsechangelog | head

Ho provato questo comando per i pacchetti installati, ad esempio

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 <a.starr.b@gmail.com>  Sat, 11 Aug 2012 17:36:18 -0400

shutter (0.88.3-1) unstable; urgency=low
jai@frank-Jai:~$ 

1
Voglio il numero di versione e solo il numero di versione in modo da poterlo manipolare in uno script.
Richard Hansen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.