Membedakan versi berbeda dari paket debian yang sama

11

Apakah ada cara untuk mendapatkan sumber perbedaan antara paket yang diinstal secara lokal dan yang diperbarui? Ini akan berguna untuk memeriksa bagian mana yang telah diperbaiki, diubah atau ditambahkan.

Misalnya, Anda memiliki paket linux-libc-dev yang diinstal pada sistem Anda dan

sudo apt-get update && sudo apt-get upgrade

menunjukkan

The following packages will be upgraded:
  linux-libc-dev 

tetapi Anda ingin memeriksa, sebelum memutakhirkannya, perubahan yang sebenarnya telah dibuat dibandingkan dengan versi lokal Anda dari paket yang sama.

Bagaimana kita bisa melakukannya?

Gödel
sumber

Jawaban:

5

Inilah solusi lain yang saya retas bersama: whatchanged .

Dibutuhkan nama paket biner yang Anda minati sebagai satu-satunya argumen. Untuk menggunakan SRU terbaru sebagai contoh:

./whatchanged python_papyon

Inilah yang dilakukannya:

  1. Periksa apakah ada kandidat pembaruan; keluar jika tidak ada
  2. Jika ada kandidat, buat direktori sementara dan ambil paket sumber untuk versi yang diinstal dan kandidat ke dalamnya
  3. Bandingkan keduanya dengan debdiffdan keluaran ke stdout (Anda mungkin ingin mengarahkan ulang agar lebih mudah dibaca)
  4. Bersihkan direktori sementara.

Mungkin perlu lebih baik menangani hal-hal tertentu yang mungkin salah selama pengambilan sumber, kontrol aliran mungkin agak tidak aktif, dan harus ada cara yang lebih elegan untuk memeriksa versi, tetapi itu bekerja dengan baik dalam pengujian terbatas saya sejauh ini. Untuk saat ini, anggap ini peretasan cepat yang berfungsi, dan perbaikan dipersilahkan. Saya akan mendorongnya ke repositori bzr dan / atau membuat proyek Launchpad jika berguna bagi beberapa orang.

Sunting : Daripada membiarkannya membusuk di pastebin, saya sudah memulai proyek Launchpad untuk itu; Anda bisa mendapatkan revisi trunk terbaru dengan bzr branch lp:whatchanged. Jangan ragu melaporkan bug, cabut, tulis ulang di Perl, dll.

mgunes
sumber
Bagusnya! Mengembangkan alat sebagai jawaban;) Seperti gaya pengkodean Anda, tetapi akan membuatnya dengan benar dalam kode ..
LassePoulsen
Terima kasih; harap ini berguna. Cara pengemasan dan pelepasan teknis terkadang membuat kode terbuka tampak buram adalah sesuatu yang ada di pikiran saya, dan saya belum menemukan alat sederhana untuk mengatasinya, jadi seseorang yang menyatakan kebutuhan akan hal yang sama persis adalah motivasi yang baik untuk akhirnya buat yang primitif sendiri.
senapan
7

Afaik satu-satunya cara untuk melakukan ini adalah untuk mendapatkan sumber dan membuat perbedaan itu sendiri. Anda bisa mendapatkan sumber aktual yang digunakan untuk kompilasi paket dengan apt-get. fx:

apt-get source gwibber=2.30.2-0ubuntu3 gwibber=2.30.0.1-0ubuntu1
diff -rupN gwibber-2.30.0.1/ gwibber-2.30.2/

Ini akan mencetak semua perbedaan antara semua file dalam format tambalan standar.

LassePoulsen
sumber
1
Ini cukup bagus. Satu-satunya hal yang saya ubah dalam contoh ini adalah menggunakan “debdiff gwibber_2.30.0.1-0ubuntu1.dsc gwibber_2.30.2-0ubuntu3.dsc” daripada raw diff.
RAOF
1
Yah itu praktis hal yang sama, tetapi Anda dapat menggunakan diff pada setiap paket / tarball di luar sana. Mungkin seseorang ingin melihat perbedaan antara svn-trunk dan pkg saat ini.
LassePoulsen
Jawaban kedua saya (whatchanged) pada dasarnya mengotomatiskan ini.
senapan
2

Inilah satu (mungkin tidak optimal) cara UDD untuk melakukannya:

Cabang pull -updates untuk rilis Anda (dengan asumsi Lucid) yang (asumsi berikut) harus mengandung SRU terbaru:

bzr branch lp:ubuntu/lucid-updates/package_name

Dapatkan perubahan yang diperkenalkan oleh revisi terbaru, yang (asumsi berikut) harus sesuai dengan SRU terbaru:

bzr diff -c`bzr revno`
senapan
sumber
2
Hmm. Ini adalah pandangan yang menarik, meskipun mungkin kurang komprehensif daripada Source Lab dalam arti bahwa nama paket mungkin tidak cocok, atau ada di, pohon sumber bzr.
Gödel
Selama Anda tahu nama paket sumbernya, itu akan cocok. Anda dapat menemukan paket sumber yang digunakan oleh paket biner apt-cache show package_name | grep Source:.
Senapan
@Murat Yah, yang <package_name>didapat tidak berfungsi pada beberapa paket: bzr branch lp:ubuntu/lucid-updates/$(apt-cache show linux-libc-dev | grep -m 1 Source: | awk "{print \$2}")=> bzr: ERROR: Url tidak valid yang disediakan untuk transportasi: "bzr + ssh: //bazaar.launchpad.net/+branch/ubuntu/lucid-updates/linux" : tidak ada skema yang didukung
Gödel
Itu karena tidak ada cabang Ubuntu untuk kernel sama sekali, saya khawatir. Ini bisa menjadi pengecualian khusus karena fakta bahwa kernel dikelola di git (kernel.ubuntu.com) tetapi saya tidak yakin tentang ruang lingkup yang tepat dari cabang paket bzr saat ini. Anda mungkin ingin bertanya di # ubuntu-devel.
senapan
@Mural saya tahu. Itu sebabnya metode ini kurang komprehensif daripada Source Lab. Tetapi sekali lagi, ini merupakan hal yang menarik.
Gödel
0

Jika Anda ingin melihat perbedaan file dalam arsip paket, ekstrak file md5sums mereka, mengurutkan dan membedakannya, dan kemudian Anda dapat mempersempit daftar file aktual untuk membandingkan secara dramatis.

Phil Miller
sumber
-1

Mungkin bukan perubahan "persis", tetapi apt-listchangesdaftar entri log perubahan untuk perubahan yang telah dibuat sejak versi yang diinstal.

Ini bekerja dengan menambahkan langkah setelah Anda selesai mengunduh paket-paket baru, tetapi sebelum instalasi dimulai, di mana ia menunjukkan entri changelog untuk setiap paket yang akan ditingkatkan. Anda kemudian dapat melanjutkan atau membatalkan. Anda dapat menginstalnya dengan

sudo apt-get install apt-listchanges

kemudian atur dengan

sudo dpkg-reconfigure apt-listchanges
Ken Simon
sumber
Sekali lagi, pertanyaannya bukan tentang menampilkan perubahan ChangeLog.
Gödel
D'oh, melewatkan baris pertama di mana Anda mengatakan "sumber diffs."
Ken Simon