Pertanyaan Versi berbeda dari paket debian yang sama


Apakah ada cara untuk mendapatkan sumber diffs 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

pertunjukan

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

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

Bagaimana kita bisa melakukannya?


10
2017-10-19 22:18


asal




Jawaban:


Berikut ini solusi lain yang saya buat bersama: apa yang berubah.

Ini mengambil nama paket biner yang Anda minati sebagai satu-satunya argumen. Untuk menggunakan SRU baru-baru ini 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 debdiff dan output ke stdout (Anda mungkin ingin mengarahkan ulang agar lebih mudah membaca)
  4. Bersihkan direktori sementara.

Mungkin perlu lebih baik menangani hal-hal tertentu yang mungkin salah selama pengambilan sumber, kontrol aliran mungkin sedikit off, 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 saja peretasan cepat yang berhasil, dan peningkatan sangat disambut. Saya akan mendorongnya ke repositori bzr dan / atau membuat proyek Launchpad jika itu berguna untuk beberapa orang.

Edit: Daripada membiarkannya membusuk di pastebin, saya sudah mulai proyek Launchpad untuk itu; Anda bisa mendapatkan revisi batang terbaru dengan bzr branch lp:whatchanged. Merasa bebas untuk melaporkan bug, cabang, tulis ulang dalam Perl, dll.


5
2017-10-19 23:02



Bagusnya! Mengembangkan alat-alat sebagai jawaban;) Seperti Anda mengkode gaya, tetapi benar-benar akan mengkodekannya dalam perl .. - LassePoulsen
Terima kasih; berharap itu berguna. Cara pengemasan dan teknis rilis 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 adalah motivasi yang baik untuk akhirnya membuat yang primitif sendiri. - mgunes


Afaik satu-satunya cara untuk melakukan ini adalah mendapatkan sumbernya dan menjadikannya diff milikmu. Anda bisa mendapatkan sumber yang sebenarnya digunakan untuk meng-compile paket-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 patch standar.


7
2017-10-19 23:28



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


Ini satu (mungkin tidak optimal) UDD cara melakukannya:

Tarik -mendapatkan cabang untuk rilis Anda (dengan asumsi Lucid) yang (asumsi berikut) harus berisi 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`

2
2017-10-23 05:43



Hmm Ini adalah hal 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 sumber, itu akan cocok. Anda dapat menemukan paket sumber paket biner yang dihasilkan oleh dengan apt-cache show package_name | grep Source:. - mgunes
@Murat Yah, <package_name> yang diperoleh 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 dipasok untuk dikirimkan: "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 takut. Ini bisa menjadi pengecualian khusus karena fakta bahwa kernel dipertahankan 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. - mgunes
@Mural saya tahu. Itu sebabnya metode ini kurang komprehensif daripada Source Lab. Tetapi sekali lagi, ini adalah hal yang menarik. - Gödel


Jika Anda ingin melihat perbedaan file dalam arsip paket, ekstrak file md5sums mereka, sortir dan diff mereka, dan kemudian Anda dapat mempersempit daftar file yang sebenarnya untuk dibandingkan secara dramatis.


0
2017-10-22 18:53





Mungkin bukan perubahan "persis", tapi apt-listchanges daftar entri changelog untuk perubahan yang telah dibuat sejak versi yang terinstal.

Ia bekerja dengan menambahkan langkah setelah Anda selesai mengunduh paket-paket baru, tetapi sebelum instalasi dimulai, di mana ia menunjukkan Anda 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

-1



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