Debian / changelog'dan paket sürümünü nasıl çıkarabilirim?


11

Paketin sürüm numarasını almak için bir kaynak paketin debian/changelogdosyasını (veya debian/control?) Ayrıştırmanın en sağlam yolu nedir ? Gibi bir şey:

pkgver=$(dpkg-parsechangelog | magic_goes_here)

Ben bir kodda manipüle böylece sürüm numarasını (ve sadece sürüm numarasını) ayıklamak istiyorum .

dpkg-*Bu amaçla bir yardımcı program bulmayı bekliyordum , ancak henüz bir tane bulamadım.

Yanıtlar:


18

1.17.0 veya daha yeni bir sürüme sahipseniz,

dpkg-parsechangelog --show-field Version

Daha sonra çıktıyı işlemeye gerek yoktur. Bu sürüm şu anda (Şubat 2014) Debian Testing'de bulunmaktadır.


1
@RichardHansen: Üzgünüz, bayrağın Debian Stable'da bulunan sürümde mevcut olmadığı ortaya çıktı.
Martin Geisler

Ubuntu 12.04 için de aynı şey geçerli. Ancak Ubuntu 14.04'te mevcut.
Stefan

7

Bunu yapmanın birçok yolu vardır.

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

Veya alternatif olarak:

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


Biraz daha sağlam bir şey umuyordum - deb-control(5)man sayfası formatı açıkça tanımlamıyor ve herhangi bir varsayım yapmak istemiyorum. Örneğin, alanların bir satırda başlaması gerektiği açık değildir ("Alanlar yalnızca alan etiketleriyle sınırlandırılmıştır."). Ayrıca, bir alanın birden çok satıra yayılabileceğini ve etiket ile değer arasındaki boşluk hakkında hiçbir şey söylemediğini, bu nedenle Version:123ayrı bir Sürüm alanı değil, önceki alanın devamı olarak yorumlanması gerektiği söylenebilir. kolondan sonra bir boşluk).
Richard Hansen

Uygulamada, çıktı çıktısı dpkg-parsechangeloggibi görünecektir Version: 0.6.11-2Biçimin daha sağlam ayrıştırılmasını istediğiniz bir şey istiyorsanız debian/control, python-debianveya kullanabilirsiniz libparse-debcontrol-perl.
andrewsomething

1

dpkg-parsechangelogçalışır ve daha önceki cevap sed / grep aracılığıyla çıktı borulama tamamen sağlam olmalıdır. dpkg-parsechangelogÇıktı formatının kesin ayrıntılarını ve diğer debian tarzı kontrol dosyalarını öğrenmek istiyorsanız , bkz. RFC 822 . Bir deb paketi sürümünün yeni satır, boşluk veya başka bir özel veya kontrol karakteri içermesi asla uygun değildir (bkz. man deb-version), Bu nedenle Version: blahçıktıdaki " " satırı her zaman mevcut olacak ve her zaman kendi.

Ancak, bir changelog sadece geçerli sürüm numarasını almak için çalıştırmak dpkg-parsechangelogiçin çok ağır bir programdır. Çoğu kullanamayacağınız bir sonuç vermek için Perl'i çalıştırmalı ve çok sayıda kütüphane yüklemelidir. Yavaş platformlarda veya yavaş dosya depolama ortamıyla veya bu sürümü birçok kez ayrıştırma yapmanız gerektiğinde, oldukça acı verici bir şekilde yavaşlayacaktır. Bunun yerine, ilk satırdaki ilk parantez kümesinin içindekileri kullanın:

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

Bu changelog, standart formatı kullanarak geçerli herhangi bir dosya ile doğru geçerli paket sürümünü alır (ve standart olmayan debian/changelogformatlar, tüm pratik genel amaçlar için asla kullanılmaz).


-1

gördüğüm gibi paket sürümü changelog dosyasının başlık kısmında oluşur. böylece bunu yapabilirsin

pkgver=$(dpkg-parsechangelog | head

Yüklü paketler için bu komutu denedim, örneğin

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
Ben bir komut dosyasında manipüle böylece sürüm numarası ve sadece sürüm numarasını istiyorum .
Richard Hansen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.