Wie extrahiere ich die Paketversion aus debian / changelog?

11

Was ist die robusteste Methode, um die debian/changelogDatei eines Quellpakets (oder debian/control?) Zu analysieren , um die Versionsnummer des Pakets zu erhalten? Etwas wie:

pkgver=$(dpkg-parsechangelog | magic_goes_here)

Ich möchte die Versionsnummer (und nur die Versionsnummer) extrahieren , damit ich sie in einem Skript bearbeiten kann.

Ich hatte erwartet, ein dpkg-*Dienstprogramm für diesen Zweck zu finden, aber ich habe noch kein gefunden.

Richard Hansen
quelle

Antworten:

18

Wenn Sie Version 1.17.0 oder höher haben, können Sie verwenden

dpkg-parsechangelog --show-field Version

Die Ausgabe muss dann nicht weiter verarbeitet werden. Diese Version ist derzeit (Februar 2014) in Debian Testing verfügbar.

Martin Geisler
quelle
1
@RichardHansen: Tut mir leid, es stellt sich heraus, dass die Flagge in der in Debian Stable vorhandenen Version nicht verfügbar ist.
Martin Geisler
Gleiches gilt für Ubuntu 12.04. Es ist jedoch in Ubuntu 14.04 vorhanden.
Stefan
7

Es gibt zahlreiche Möglichkeiten, dies zu tun.

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

oder alternativ:

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

andrewsomething
quelle
Ich hatte auf etwas Robusteres gehofft - die deb-control(5)Manpage beschreibt das Format nicht klar und ich möchte keine Annahmen treffen. Beispielsweise wird nicht klargestellt, dass Felder in einer Zeile beginnen müssen ("Felder werden nur durch Feld-Tags begrenzt."). Es heißt auch, dass ein Feld mehrere Zeilen umfassen kann und nichts über den Abstand zwischen dem Tag und dem Wert aussagt. Daher Version:123sollte es möglicherweise als Fortsetzung des vorherigen Felds und nicht als separates Versionsfeld interpretiert werden (aufgrund des Fehlens eines Leerzeichens nach dem Doppelpunkt).
Richard Hansen
In der Praxis dpkg-parsechangelogsieht die Ausgabe von folgendermaßen aus: Version: 0.6.11-2Wenn Sie eine robustere Analyse des debian/controlFormats wünschen , können Sie python-debianoder verwenden libparse-debcontrol-perl.
Andrewsomething
1

dpkg-parsechangelogfunktioniert, und die frühere Antwort, die die Ausgabe durch sed / grep leitet, sollte absolut robust sein. Wenn Sie genaue Informationen zum dpkg-parsechangelogAusgabeformat und zu den meisten anderen Steuerdateien im Debian-Stil erhalten möchten, lesen Sie RFC 822 . Es ist niemals in Ordnung, dass eine Deb-Paketversion eine neue Zeile, ein Leerzeichen oder andere Sonder- oder Steuerzeichen enthält (siehe man deb-version), sodass die Version: blahZeile " " in der Ausgabe immer vorhanden ist und immer eine einzelne Zeile in der Ausgabe ist besitzen.

Es dpkg-parsechangelogist jedoch ein sehr umfangreiches Programm, das ausgeführt werden muss, um die aktuelle Versionsnummer aus einem Änderungsprotokoll abzurufen. Es muss Perl ausführen und eine beeindruckend große Anzahl von Bibliotheken laden, um ein Ergebnis zu erzielen, von dem Sie die meisten nicht verwenden. Auf langsameren Plattformen oder mit langsamen Dateispeichermedien oder wenn Sie diese Version häufig analysieren müssen, wird sie sich als sehr langsam erweisen. Verwenden Sie stattdessen einfach alles, was in den ersten Klammern in der ersten Zeile steht:

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

Dadurch erhalten Sie die richtige aktuelle Paketversion mit jeder gültigen changelogDatei im Standardformat (und nicht standardmäßige debian/changelogFormate werden für alle praktischen allgemeinen Zwecke niemals verwendet).

der paul
quelle
-1

Wie ich gesehen habe, besteht die Paketversion im Header-Teil der Changelog-Datei. so kannst du es gerne machen

pkgver=$(dpkg-parsechangelog | head

Ich habe diesen Befehl zum Beispiel für installierte Pakete ausprobiert

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ʒɑ
quelle
1
Ich möchte die Versionsnummer und nur die Versionsnummer, damit ich sie in einem Skript bearbeiten kann.
Richard Hansen