Versi X mana yang memperkenalkan fitur Y?

10

Sebagian besar dari pekerjaan sehari-hari saya sedang mengembangkan perangkat lunak untuk digunakan pada mesin dengan versi yang berbeda dari perangkat lunak yang sama, seperti bash, find, dan grep. Ketika menemukan fitur yang akan berguna misalnya untuk menyederhanakan kode, penting untuk mengetahui apakah fitur ini tersedia di alat yang paling lama diinstal. Untuk hal-hal penting, akan berguna juga untuk mengetahui apakah fitur ini baru atau sudah ada selama bertahun-tahun di alat yang dipasang paling lama.

Apa cara cepat untuk menjawab ini secara otoritatif untuk alat-alat Linux, khususnya GNU Core Utils? Beberapa kemungkinan untuk mengurangi akurasi:

  • Pencarian biner biner (sic) dengan menjalankan versi yang berbeda tentu saja merupakan jawaban akhir, tetapi sejauh ini yang paling memakan waktu. Instalasi yang lebih lama seringkali tidak tersedia untuk alasan keamanan.
  • Membaca kode hampir sama bagusnya, tetapi bisa memakan waktu terlalu lama jika fitur tersebut samar-samar dinamai, namanya tidak berhubungan langsung dengan variabel / fungsi / nama objek, atau itu diterapkan sebelum diaktifkan.
  • Ubah log , jika tersedia, biasanya sambungkan perubahan fitur ke versi perangkat lunak.
  • Log komit dapat memberikan petunjuk, tetapi tidak tahu versi mana mereka akan dimasukkan.
  • halaman manual jarang menyebutkan tanggal.
  • Hal yang sama berlaku untuk Googling , dan Anda juga akan kesulitan mengecualikan semua sumber non-otoritatif.
l0b0
sumber
Bisakah Anda menguraikan alasan di balik pertanyaan ini?
Faheem Mitha
ISTM bahwa jika Anda harus mem-porting perangkat lunak ke platform yang berbeda ini, Anda harus memiliki instalasi "tertua" yang tersedia di suatu tempat. Jadi jawaban yang cukup cepat dan berwibawa adalah dengan mencobanya di platform itu. Idealnya di semua platform (jika Anda menulis test case sebagai skrip, Anda bisa mendorongnya ke semua platform porting Anda dan mendapatkan serangkaian tanggapan ya / tidak).
roaima

Jawaban:

7

Secara umum, ada changelog. Bahkan, ini (atau "pemberitahuan penting" tentang perubahan) diperlukan oleh GPL! (Setidaknya, secara efektif untuk apa pun dengan banyak kontributor - lihat GPLv2 bagian 2a.)

Untuk paket GNU coreutils - dan untuk hampir semua yang lainnya dari proyek GNU secara langsung - file ini jelas merupakan tempat pertama untuk dilihat, dan harus menjawab pertanyaan Anda 95% dari waktu.

mattdm
sumber
Apakah Anda memiliki referensi ke log perubahan coreutils? Yang terbaru yang bisa saya temukan adalah dari 2007.
l0b0
2
GNU Coreutils ChangeLog belum diperbarui sejak 2007. cvs.savannah.gnu.org/viewvc/coreutils/... Anda harus melihat log git sekarang.
Mikel
2
Mungkin dihasilkan secara otomatis dari log git. Ada yang ChangeLog.bz2masuk /usr/share/doc/coreutils-8.10pada sistem Fedora saya, dan entri teratasnya dari 2011-02-04. Kemungkinan juga bahwa ini adalah garpu RH - Saya akan memeriksanya nanti hari ini.
mattdm
@mattdm: Ada /usr/share/doc/coreutils/changelog.gz di Ubuntu - Terima kasih! Sayangnya itu hanya kembali ke 2008, yang terlalu baru untuk beberapa alat yang relevan. Saya kira itu mengambil alih tempat yang terakhir berakhir.
l0b0
3
Inilah buktinya: git.savannah.gnu.org/cgit/coreutils.git/tree/HACKING Gulir ke baris 131.
Shinnok
4

Mengapa tidak menggunakan afferent kontrol sumber ke X untuk mencari fitur Y? Repo sumber adalah cara terbaik untuk mengidentifikasi ketika fitur tertentu diperkenalkan.

Untuk coreutils Anda dapat menuju ke http://git.savannah.gnu.org/cgit/coreutils.git dan mencari kata kunci yang terkait dengan Y dalam pesan log atau baris kode tertentu yang Anda identifikasi milik Y. Anda dapat melakukannya di antarmuka web secara langsung, atau bahkan lebih baik, mengkloning repo sumber ke stasiun Anda dan mencari menggunakan git-membagi , git-menyalahkan dan git-log --grep .

Kemudian Gunakan git-uraikan untuk mengetahui tag adalah yang terdekat dengan commit tertentu. Tag digunakan untuk nomor versi kebanyakan, sehingga akan memberi Anda versi yang memperkenalkan komit.

Anda dapat menyesuaikan metode di atas, tergantung pada X dan kontrol sumbernya.

Shinnok
sumber
Bagaimana Anda mengidentifikasi komit / baris yang masuk ke versi perangkat lunak mana? Juga, pencarian Savannah rusak parah - Tidak ada hasil untuk string yang jelas-jelas ada di pesan log yang sama.
l0b0
Gunakan git-uraikan untuk mengetahui tag adalah yang terdekat dengan commit tertentu. Tag digunakan untuk nomor versi kebanyakan. Adapun Savannah yang rusak, Anda tidak bisa berbuat banyak tentang hal itu. Git mengkloning repositori ke kotak Anda dan bekerja dengan menggunakan perintah git yang saya jelaskan di posting.
Shinnok
1

Pada Debian dan Debian yang diturunkan platform seperti Ubuntu :

sudo apt-get changelog coreutils > changelog.txt 

menyediakan changelog GNU Core Utilities 'kembali ke versi 4.5.1-1.

Tidak yakin apakah ada solusi yang sama nyamannya pada platform lain.

mklement0
sumber