Coreutils

哪個版本的 X 引入了功能 Y?

  • August 31, 2017

我日常工作的很大一部分是開髮用於具有相同軟體不同版本的機器的軟體,例如bashfindgrep. 當遇到對簡化程式碼等有用的功能時,重要的是要知道該功能是否在最舊的安裝工具中可用。對於關鍵的東西,了解此功能是新功能還是已在最古老的已安裝工具中存在多年也很有用。

對於 Linux 工具,尤其是 GNU Core Utils,有什麼快速的方法可以權威地回答這個問題?按精度遞減順序的一些可能性:

  • 通過執行不同版本進行二進制二分搜尋(原文如此)當然是最終的答案,但也是迄今為止最耗時的。出於安全原因,較舊的安裝通常不可用。
  • 閱讀程式碼幾乎一樣好,但是如果功能名稱模糊,名稱不直接對應變數/函式/對象名稱,或者它在啟用之前實現,則可能會非常耗時。
  • 更改日誌(如果可用)通常將功能更改與軟體版本相關聯。
  • 送出日誌可以提供提示,但不知道它們將包含在哪個版本中。
  • 手冊頁很少提及日期。
  • 這同樣適用於Google 搜尋,而且您也很難排除所有非權威來源。

通常,有一個變更日誌。事實上,這個(或其他“重要的更改通知”)是 GPL 所要求的!(至少,對於任何有多個貢獻者的東西來說都是如此——參見 GPLv2 第 2a 節。)

對於 GNU coreutils 包 - 以及直接來自 GNU 項目的幾乎所有其他內容 - 這個文件絕對是第一個查看的地方,並且應該在 95% 的情況下回答您的問題。

為什麼不使用傳入 X 的原始碼控制來搜尋功能 Y?原始碼庫是辨識何時引入特定功能的最佳方式。

對於 coreutils,您可以訪問http://git.savannah.gnu.org/cgit/coreutils.git並在日誌消息或您確定屬於 Y 的特定程式碼行中搜尋與 Y 相關的關鍵字。您可以在直接使用 Web 界面,或者更好的是,將原始碼庫複製到您的站點並使用git-bisectgit-blamegit-log –grep 進行搜尋

然後使用git-describe找出標籤最接近特定的送出。標籤主要用於版本號,因此它將為您提供引入送出的版本。

您可以根據 X 及其原始碼控制調整上述方法。

引用自:https://unix.stackexchange.com/questions/9935